You SHOULD learn to code
…but maybe not learn software development.
Going back to around 2012, there was a movement to “teach everyone to code“, then there was a backlash. I’m going to come down right in the middle and say every one should learn to “code”, but not everyone should learn “software development”.
I once had to explain to someone (and a very smart someone I had worked with for years) exactly what my job entailed. They were surprised by my estimate I spent about 15% of my time as a software developer actively coding. Everything else supported that 15%, but it wasn’t writing code. Where did the other 85% go? Before I start coding on a project there is requirements gathering, research (mostly technologies and APIs) and design (figuring out how the code will be organized, not user interface). During coding, time is spent on unit testing, documentation and versioning. After coding, time is spent on integration testing, stakeholder acceptance and more documentation. And outside of coding, some time is spent as part of a team – meetings prioritizing what we’re going to work on, code reviews and supporting legacy code.
The point here is that software development is a lot more than just coding. And even coding is an enormous discipline. There are dozens of “common languages” worth learning, then there are data structures, algorithms, best practices, developer tools and the list goes on. You can never be done “learning to code”.
That alone may seem daunting, but the real reason most people should not learn software development isn’t that it’s hard, but that – outside of a career – it’s not that useful. Even “simple” programs can take hundreds of hours to write. And few people have the range of skills to write an entire program themselves. It would be like making a movie by yourself – you’d have to write, direct, star in, operate the cameras and microphones, edit and produce and handle distribution.
Ok, so if it’s that terrible, why should anyone – let alone everyone – learn to “code”. Well, coding changes the way you think, and much for the better. And not just how you think about computers, but about everything, at least everything involving information and decision making.
- Coding is unforgiving. The computer does not make mistakes and does not tolerate yours. Nothing will teach humility faster than programming (and I strongly believe humanity could use just a little more humility).
- Coding will help you understand the language of software better. This comes in helpful constantly when using computers (not just programming them). Trying to find the right piece of software to use, installing software and – most of all – figuring out what went wrong when something doesn’t work. All those convoluted error messages, dependencies and system requirements get a little easier to read and understand.
- Coding is a great way to understand information and math. We are increasingly living in a data driven world and a little hands on experience goes a long way in understanding information. You may still choose a spreadsheet to solve your data problems after learning to code, but you’ll know far more about how to organize the information and break down the problem.
- Coding teaches algorithmic thinking and that is widely applicable. Algorithmic thinking is all about developing processes that optimize many things at once. If you’re helping someone move, you want to get done quickly, without any one getting too tired (or hurt) and without breaking any thing. Algorithmic thinking will help that problem (and I’ve helped software developers move – it’s amazing).
- Coding develops a deep sense of optimization trade offs. You quickly learn that the cost of increased efficiency can out weigh the efficiency gained and that many real world systems that look inefficient are actually just optimized to the point that the cost of further improvements is not justified.
So spend some time in any one of the dozens of great resources learning to code. Plan on spending 100 hours over, say, a year. And you need to write some code, not just watch videos and take tests. Build something, check it in to github. When you’re done, you’ll find that even if you never write another line of code, you’ll use it all the time.