You might have noticed it already: I like to summarize, formalize and explain things… or at least write them down (even graphically recently). Given the opportunity I would/will probably end up teaching… but future will tell
As Software Engineering (SE) is my daily work, you can easily imagine that interrogations about the ways we teach it nowadays are never far from my mind. My studies were not focused on SE per se, but I ended up developing myself / leading development teams and I realize better everyday the enormous gap that exists between the classes I had and my daily work or what I would expect from my junior developers. Multiple times I started writing some of my thoughts but I never liked the posts afterwards, that’s why you never saw them.
Why do I talk about it today then? Simply because a really good article (pointed out by Rolyat on Twitter) titled What should we teach new software developers, tingled my thoughts lately and that I’d like to express my feelings on the matter while spreading the article.
What’s so interesting about teaching SE you might ask? Well, the major one is that SE is a really young subject/art, not yet mature – even in the industry. The comparison is indeed abusive but a non negligible part of the courses I followed felt almost as close to SE as scribbling shopping lists is to writing a science fiction. So there is much to do and definitely not less to say.
Junior developers nowadays were born at the end of the 80s and started programming about 5 years ago facing 20 years of legacy technology built like a exponentially expanding onion. I cannot tell how it is taught in IT degrees since I only have a general engineering degree specialized in IT, but I can tell you how I see it through my fellow colleagues and the students we employ. Universities teach you a lot about programming and using technologies, but very few about SE itself.
I can remember very well a “marketing” sentence of the teacher responsible for the SE major at my university: “I don’t care if you cannot program, that’s not what SE and my major are about anyway”. That is so true… and so wrong at the same time:
- On one hand, Software Engineering is impossible without highly trained programmers. And since programming is the craft of creating software, programming must be the center of the SE studies. That’s pretty much the university point of view. And for that they don’t have any minute to spare since 5 years degrees are already not enough to teach all the technical required knowledge a modern programmer should know.
- On the other hand, ask anyone in the industry, Software Engineering is so many things BUT programming. SE is the art of building a software with delays constraints, quality goals, technology constraints, concurrent engineering, customer satisfaction etc. so many things relying on programming but not programming itself.
Between those two worlds you find newly graduated students sitting between two chairs, unsure of their knowledge, experts in a high-level language but incapable of explaining some key concepts of the layers they rely on and almost totally strangers to the Engineering process and requirements. I was able to enter the world of software development as an engineer specialized in SE, but will it be possible in the future to continue doing so?
There are a lot of open questions. What is really important to know as a software engineer? In all the flourishing concepts that we face everyday, which are the key ones? Which are the hardest ones to understand? What are the subjects that will help the students in their future life and not only to get their first job interview on tracks? Those are the real questions that we have to address, and that is what interest me much ; now I hope you understand why I am very interested in the ways Software Engineering is taught nowadays.