Not long ago an acquaintance of mine told me he was thinking of a career change and was wanting to “learn to code” and “become a coder.” He was asking me what is required to go into this profession.

The real answer to this question is confusing because of all the modern hype about “learning to code” as though anyone can and should do it. It’s almost like learning to write software is equivalent to learning to bake a pie or change the oil in your car. Some places may hold a “day of code” where anyone can show up, knowing nothing about writing software, and leave by the end of the day having written a program.

This leads people to think the software development profession is easy, but it isn’t. A “day of code” to me seems about as meaningful to me as a “day of piano playing” - know nothing about music in the morning, and leave at the end of the day able to play the piano! Well, just because you can play “Chopsticks” or “Heart and Soul” doesn’t mean you can also play Chopin or Debussy.

Instead of comparing software development to something like baking a pie, I’d compare it to something more like surgery. If you needed knee surgery, you wouldn’t be very comfortable with an orthopedic surgeon who had no medical training at all other than that she had learned to perform ACL repairs during a “day of surgery”. You’d want a surgeon who not only knew how to use a scalpel, but where, and when, and why.

The same thing applies in software development. The “how” of programming is learned early on, but it is the “where, when, and why” of writing software that takes time to acquire. We are talking about the difference between knowing how to use a list versus knowing that you should have used a set instead.

In my experience, accelerated programs do not cover this kind of stuff well. Many jobs for software developers don’t require that level of knowledge, either, but many of the best jobs do. So if your goal is to become a software developer, there are a few viable options:

  • Take the self-taught, bootcamp, or trade school route, where you won’t learn the deep fundamentals or theory, and don’t learn this stuff later through experience. Get a good, but not necessarily top-paying, job as a software developer at a company that doesn’t pay for deep technical expertise, and be happy with your decision. Nothing wrong with that.
  • Take the self-taught, bootcamp, or trade school route, where you won’t learn the deep fundamentals or theory, and then push yourself over the course of several years to fill in the gaps in your knowledge. Start out with a good job as a software developer at a company that doesn’t pay for deep technical expertise, and eventually work your way to a job that pays better as you fill in the gaps in your education.
  • Get at least a Bachelor’s degree in Computer Science (the best option for software engineers in my opinion), Computer Engineering, or Computer Information Systems at an accredited university. Go directly into a better paying job at a company that pays extra for deep technical expertise.