I started writing code in 6th grade. This sounds much more impressive than it was, I had no clue what I was doing. I wasn’t some sort of prodigy, and I’m still probably a very average engineer.
The important thing software development teaches you isn’t how to interact with computers, or how to build ‘apps’.
Software development teaches 2 things better than anything else:
How to learn new skills to solve your existing problems
When you write code, it doesn’t work. The compiler tells you that you have no actual understanding of what you wrote, and it spits out some error message that might point you in the right direction.
Then you sit there. There is clearly a misalignment of expectations. Computers don’t make mistakes, they just do what you tell them to. Clearly you told the computer to do the wrong thing.
So you go to google, and you find some other developer who had the same problem as you before. Maybe some people with more knowledge came in and helped them, and you can reuse that help. Maybe they had a completely different problem.
If it’s a simple issue, you can probably just google error messages and try some different solutions and eventually the expectations will re-align.
But maybe you’ll find that what you want isn’t possible in the way you thought. Maybe your expectations were so misaligned that you now have to acquire new knowledge to solve your problems.
This process happens every time I write code. You have to learn something about something you didn’t know before. So software development makes you get good at learning new things from not much information.
Unfortunately, most other disciplines have the opposite problem. They have too much information. I think this is why a lot of software people struggle with writing well. They’re used to learning in a very fast feedback loop, and writing doesn’t have that (especially when you don’t have an audience.)
How to take an idea and turn it into individual steps that can be executed
Once you have some knowledge, you start finding atomic and molecular components of the problems you need to solve.
For example, let’s say you want to build a messaging app so you can talk to your friends.
What do you need in order to do that?
Depending on your level of knowledge, you’ll say different things.
Maybe you would say something like “You need some way to connect the two phones, and you need to have a user interface”
That’s true, and the more experience and knowledge you have, the deeper your insight goes.
Maybe an expert would say something like
Frontend: text input field, need to pick a platform, login/auth, ability to upload pictures Backend: p2p or server in between?, messaging protocol, login backend, user database, etc.
The point is, computer science teaches you how to think in terms of parts of a system. The bigger the project, the bigger each one of those parts is, and the more advanced the development becomes.
You can think of almost anything with this structure, it’s not unique to computer science. But software development lets you try and fail very quickly, and you learn that planning ahead of time saves a lot of time.
I see a lot of people get frustrated with code, or because something doesn’t work (I’m completely guilty of this myself). But I think that it’s important to remember that these are the real skills software development teaches you, not how to center a div.