The De-skilling of Software Engineers is happening but does it matter?
I’ve been a software engineer for over 20 years now. Someone asked me the other day whether the job had changed much and it started me thinking.
When I started, the languages of choice were C and to a lesser extent C++. Writing in these languages at the time, by todays standards was hard. Coding was done using plain text editors, if you were lucky you had a Windows or an X Windows editor, if you were not so lucky you had a VT100 with something like the vi editor. You had to either remember or lookup all the commands and their arguments, mostly in books, the internet wasn’t the goldmine it is today. You had to decide on what sort of variable you wanted to use; char Vs short Vs long, signed or unsigned or maybe a float or double. Debugging was putting printf statements in your code. Then there was multithreading, the less said about that the better. So everything took time to write, build and test.
Since then there has been an incessant drive for speed and productivity. Java appeared with it’s GC memory management, the IDEs came with their debugging, autocomplete and refactoring which I suspect, many of the younger developers wouldn’t be able to code without.
Now with the latest languages you don’t need to worry about any memory management or multithreaded data access, they work out your datatypes, provide concurrent data containers and make life very easy indeed. I think the closer to the bare metal you are, the slower the rate of evolution.
Software Engineering is becoming more and more segmented and silo’d into disciplines and languages. Even 10 years ago, it was quite easy to switch between roles in embedded and web development for example, the language skills and techniques were broadly aligned but not anymore. Building a web UI using React for example is vastly different to writing drivers in VxWorks. Knowledge about threads, process scheduling and those other low level interactions is becoming almost irrelevant for engineers working close to the UI as is knowledge about layout and measuring user experience for those working on device drivers.
It is similar to the construction industry, a construction worker building a steel frame uses very different skills to a brick layer but they are both builders. I think this is just a sign of the software engineering industry becoming a more mature and structured discipline.
I have found myself in a role working on web services, one that I am not really suited for, one that for the most part I find tedious and boring. All the hard, interesting stuff is being done by the frameworks and libraries. Yes, I am looking to get a role working at a much lower level but in the mean time I’m writing production line code, churning out controllers, models, and javascript that looks almost exactly like the javascript from the last project and the one before that. I get no sense of achievement configuring code written by someone else, whereas everyone else is happy that they don’t have to worry about it.
I’m sat thinking that my brain is slowly dying, everyone else is doing high fives having delivered the latest web service in record time.
My younger colleagues don’t have my skills or understanding of the underlying interactions because they don’t really need to.
Software development at this level seems to be going the way of manufacturing industry; automation and lower paid, lower skilled production line operators. Old skills whilst still in demand, are only sought after in much smaller numbers. But that’s not really fair is it? The skills required for this work are not ‘lower level’, they’re just different to mine. There is no evidence that I’ve seen that indicates levels of pay are dropping but I can can say lower skilled people are able to do a lot more now because of the tools and automation that has been put in place.
I look fondly back on the old days of crafting software from the bottom up, compiling kernels and having a coffee while your program builds. Yes I am a dinosaur and my colleagues regularly remind me that I was writing code before several of them were born, but they still come to me when it all goes wrong and occasionally listen as I explain how it all works. Sometimes I tell them about the old days and they ask me how much coal those old computers needed.
I expect that computers will be writing their own software in the not too distant future, and people will be telling stories of the old days when software engineers actually had to write their own code.
So does it matter that fewer and fewer software engineers understand the underlying interactions of memory and threads, sockets and processes? Not really, no more than someone working on a car production line needs to understand how fast water needs to be pumped around the car engine to keep it cool.