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.
Very interesting indeed for a teacher like me !
[...] tuned or read this post by Ian Sommerville meanwhile (for your own thoughts) and also this one by Tim: two points of view from two persons of various origins, experience and age! Possibly related [...]
Well, let’s say that’s where WE come in. Inernational Manager with Engineering, trying to close the gap between the nerds and the normal user.
So what are the gaps you faced between theory and the real world (I mean at school and at work). What are you expecting from your developers?
Because I thought the courses we had were from people from the industry and that this is a part of what they call “operational engineers”.
If you were to build a curriculum for students to study SE, what would it be?
Hi Al, yes the classes we had in the last 6 months were going in the right direction. I would insist a bit more on a few subjects that currently rely on the indstry side and I felt lacked in our degree as well as for some junior devs I worked with.
Concurrent engineering. That is probably not the case for web development but the projects I face are spread on multiple years with up to a few hundred developers in parallel. It is very far from working alone and takes some time to get used to.
Product lifecycle. The persons that will finish the project will most probably not be the one that started it. This should influemce the way one work.
Testing and quality. I see way too often developers that don’t care about how to test or testera that have no idea about dev. The way one design a software should take care of the testing from the begining….