Should Software Engineering be like Law and Medicine?
One of the developers I follow on Twitter who works on the Rust compiler posted an interesting thought today:
Software engineers are too nice: we should copy doctors and lawyers and make it as difficult as possible to enter the profession, not easier
— nrc (@nick_r_cameron) December 28, 2014
It would be worse for society, but better for us.
— nrc (@nick_r_cameron) December 28, 2014
And if that sounds mean, the money we leave on the table by being nice is money our managers and shareholders get to pocket
— nrc (@nick_r_cameron) December 28, 2014
And if you really think we should accept lower wages by increasing participation, try asking a doctor or a lawyer for a discount for it
— nrc (@nick_r_cameron) December 28, 2014
I would much rather live in an all round fairer society, but given we don't, let's not screw our selves for the sake of being nice
— nrc (@nick_r_cameron) December 28, 2014
In other words, which is better: encouraging many “OK” developers to join the Software Engineering profession or having few, highly skilled, academic developers?
It’s true that in a lot of software companies, projects are hindered by a lack of highly-skilled developers. Anyone who’s ever been tasked to make a small alteration to poorly written code has probably had moments where hours have been spent just investigating what the code does before finally finding the line that needs changing. Suddenly, I simple 15 minute job takes three hours.
So in one sense, committing an employment genocide on all software engineers that don’t have either a 1st class degree or Masters in Computer Science from Oxbridge (to exaggerate just a bit) may improve a development team’s quality of code quite a lot.
If code modifications are off-limits to those who don’t appreciate the importance of good layout, readability, organisation, efficiency and genuinely helpful commenting, there’s no doubt the stability and quality of all software would be so much better!
However, while that may make a lot of people’s lives easier, it’s not as if only a highly skilled few are capable of becoming very knowledgable, motivated and self-analytical programmers. I think a lot of problems caused by bad code can be solved by companies having good processes in place.
Every project should have heavy reliance on version control. And, more importantly, code reviews. This is something that so many companies avoid, and yet has such high importance in open source projects and in big industry players. Even the best novel writers have proofreaders, and so should we. Each project or module should be “owned” by a senior developer who knows the code really well. They would be able to check the tree for anything “bad” in recent patches and review and give feedback on any larger patches before they get pushed to the tree. This would help less experienced developers to really grow their skills and prevent (most) poorly written code from coming back to bite you later on.
Finally, now that governments across the world are realising increasing demand and importance in Computer Science, even Primary School children are being taught the basics of coding. All children in born the UK this year will know how to code in a major programming language before they even start their GCSEs. In the long-term, limiting Computer Science degrees to just the A* A-Level students (and equivalent) like with Law and Medicine just seems backwards.
It’s odd to think that, one day, what I learned in my first semester at University will be considered Year 8 level. By then, Computer Science courses at universities are probably going to be a lot more technical in First Year. It won’t be so much a question of “Who knows how to code?” but rather, “Who’s familiar with the concept of Big O notation?”
In the Web development company where I currently work, the designers have started learning HTML and CSS. After completing the photoshopped mock-ups of new websites, they must code up the mock-up. Having an in-depth understanding of what you can do and what the limits are in the Web platform deeply affects how a website is designed (especially when you realise that centring a box vertically within another box actually isn’t that simple!). Even in the UK Government, pretty much everyone in GDS can code!
So to me, while software engineering definitely is a highly-skilled job that not everyone is great at, the solution to a lot of problems in the profession at the moment is not to employ only very highly-skilled developers. Rather, the solution is to make sure it’s a skill everyone has, even if we have to wait a while for that to happen.