Should Everyone Learn to Code & The Struggle of Software Craftspersonship
Should everyone learn how to code and how does this fit with ideas of software craftspersonship? Should we be more inclusive or more standardized?
I am a little torn at the moment. A friend stirred a discussion online about whether who should know how to code and the level of competence people should have in order to code. And therefore I am still very torn.
Should Everyone Learn To Code?
I do think that software is eating the world. Everything is software. Software is part of every minute of our lives. It controls everything. If we learned anything from the recent Facebook/Cambridge Analytica fiasco and many other failures of privacy, it is becoming more important that everyone understands how software works.
Why Everyone Needs to Code?
Now imagine a future, not far from now, where AI is part of our every day lives, where software is part of everything we do and controls everything we do. Hold on! We are already there. Okay so we are there or almost there and we are letting technology take over but we don’t really quite understand it. I mean a few of us do, there are millions of programmers out there but that is still not everyone.
Politicians, government officials, leaders, CEOs and many of our family members and friends don’t quite get how everything about software works. And that is scary. Remember back in the 1400s how the state was able to control people because only a few elite were able to read. Today only a few are able to read and understand software and that elitism is hurting everyone else. It’s why people get scammed.
How can we make rules about Artificial Intelligence and regulate software if we don’t truly understand it? How do we know Facebook is wrong if we don’t truly understand software? Why is Equifax not getting the same type of scrutiny as Facebook for their data breach?
Software Literacy over Computer Literacy
I am not sure that I know the answer to all the questions but what I do know is that everyone needs to get their hands a little dirty with coding and software. I think educational programs all over need to teach coding as a core competency on equal grounds as English, Math, and Science (social and natural).
I remember being introduced to programming very early on but I didn’t really quite get it and it was too theoretical. It was only a short experiment that didn’t continue at my school. But I do imagine a world where everyone I graduated with knew a bit of coding. What world would that be? Would everyone understand the implications of Equifax data breach? Would people understand how it is a big deal and that it could’ve been avoidable?
I am going to make two claims and I am going to try to reconcile them
- Everyone should learn basic programming and coding skills because it is a necessity of modern society
- Software engineers who practice software development as a profession should have a regulatory/accreditation body that ensures high craftpersonship (like preached by Uncle Bob Martin and complained a lot by the Society of Professional Engineers)
Coding & Ethics
Software engineers are in fact engineers. They are serving society and they are building infrastructure for almost everything in our modern society is based on. Software engineers must therefore be held to a really high standard.
If you think about a self-driving car, you definitely would want the best of engineers to have worked on that and made sure there are no flaws in the software system. After-all, the cost of a flaw is human lives. Similarly a structural or civil engineer is held to the same high standard but their standard is actually enforced through regulation and accreditation.
Additionally an electrician installing systems in your house could lose their license if they don’t follow the practices of their profession. Now why is a software developer that allowed millions of customer data out not held to such a high standard?
I am more upset about Equifax breach because I didn’t agree to my data being leaked, while technically everyone didn’t read their user agreement and gave Facebook unlimited access to their data. So really Equifax should be scrutinized and punished more. Many other companies and data breaches should be held to same high standard. Read Equifax was 100% preventable
Professional Software Engineering
I believe that software engineers who take software development as a profession should be held to high standards. I think this is challenging because number of software developers has been doubling since the 40s and it is continuing to grow such that the average experience of a software developer is less than five years. This makes for lack of experience in our industry on average.
Additionally software developers can’t agree on anything. We can’t agree on standards, frameworks or software best practices. Surprisingly though even though some don’t agree and some are trying to reinvent the wheel, its mostly due to lack of experience.
This lack of experience is killing us. We are chasing after the new shiny thing. We are repeating the mistakes of the past. We are coming up with 20 millions languages that don’t really do anything special or improve our lives at all.
There is clearly a lack of mentorship and learning in our field. And when I say learning, I am not learning new languages or frameworks because we excel at that actually. But we seem to not learn to regulate and simplify.
Regulation of Software Engineering
I suggest we need a regulation body to accredit software engineering as a profession. We are professionals. We should be held to a high standard of testing our products and protecting security of everything we build. I think we need to create our own. The Professional Engineering society has failed us because of its strict requirements. We can’t accredit engineers fast enough especially if we need to train them. Additionally we are the generation of the internet and technology and the old methods of Professional Engineering society are old.
There could be classes of software engineers. I don’t think we need to create the same classification for everyone. Just like there is a distinction between an electrician and an electrical engineer and a nurse and a physician on their responsibilities and abilities of things they can do, we can regulate industry similarly with different varying levels. I think start simple and grow from there. In the future I think software engineering would have separate disciplines anyways: database engineering, vs networking vs AI vs distributed systems.
Innovation VS Standards
It is true that nay kind of standarization will limit innovation. Software developers like to prototype and create amazing web experiences and computers games (basically the reason so many people like computers). And I don’t know yet what to do there?! I know we need to help educate people better but also leave a lot of room to break the rules and be creative and do some amazing things with technology. Where do we draw the line?
Teach Everyone to Code but Setup Standards for Software Engineering
Many in the software industry has started talking about craftspersonship (craftsmanship). There is an entire manifesto for it. But it is not enough. The agile movement though good in principle failed us because it was not well standardized understood. We need to standardize software development and we need to do it fast.
I will write more about this idea of standards in future posts. I already wrote about some personal guides for writing software previously here