Want to Learn Software? Be Realistic


I recently caught up on my RSS feed with content from some well-known people in the industry. One of them is Joel Spolsky, who among other things, is the mind behind StackOverflow, Trello, and Glitch.

One of his old articles from 2005 is “The Perils of JavaSchools”, which in a broader sense, raises some valid concerns. Essentially:

  • Computer Science used to be really hard, with as high as 40%-70% dropping out after their first year.
  • But colleges made changes to their curricula, including teaching Java as a first language instead of Scheme or C, and deferring algorithms / data structures courses beyond the first year.
  • This has, in turn, resulted in higher numbers of not-so-smart students staying in CS programs, which in turn yields higher numbers of not-so-smart graduates.

It sounds harsh, but the concerns are valid. With any field, commoditizing and increasing accessibility also naturally results in dilution of quality. Ever heard of a multinational, 3-Michelin star fast-food chain? I haven’t.

His points don’t apply just to colleges either — with the proliferation of the Internet, it’s easier than ever to self-teach various things including basic coding.

Self-teaching means not having the guidance and wisdom of other, experienced engineers. This further leads to lower quality, since there’s a limit to what a person can really teach themselves.

Not having good quality software could lead to tons of issues for the end users who use them — anything from security breaches to things just outright not working. The most recent Iowa Caucus debacle is an example.

According to Halderman, a chief scientist at security firm Censys, the app was “total amateur hour.”

As you can see from the above, bad applications and bad code have real consequences. Releasing a couple random apps on the App Store doesn’t matter so much — but when you’re working for a real company, there are real people using your software with real money on the line.

No matter what you do, the times, they are a-changin’.

You’re not going to beat commoditization. Ever. As the population of the world grows, everything that already exists is going to become oversaturated.

More restaurants. More Amazon FBA sellers. More traffic. More software engineers.

More everything.

With most other fields, the battle becomes increasingly difficult as competition gets more and more intense.

Using Amazon FBA as an example, there’s really not a need for 100+ variations of, say, lap desks. People are usually going to choose one of the first ones that pop up in the search results as long as it has a good rating and decent price.

But things are different with software.

Why? Because absolutely everything uses software. Whether it’s something as obvious as applications in phones and computers, to something as innocuous as your thermostat or smart oven — software permeates every fabric of modern technology.

Subsequently, there’s a bigger need than ever for more software developers. As technology explodes in the 21st century, it’s more important than ever to be technologically-savvy to remain relevant and employable — for most industries now.

Great! Can I become a software engineer after 6 months of intense studying, like a bootcamp?

Honestly… if you’re wicked smart, maybe.

It’s easy to get started coding with various free (or paid) resources online. After attending bootcamp, you’ll find yourself pretty well-versed in slapping together applications.

But I’m going to be frank and honest: knowing how to code does not make you a software engineer.

It’s problem-solving. It’s engineering and mathematics. It’s understanding intricacies about computers, systems, and fairly complex decision-making, and there’s no fast track for learning all of that.

Realistically, if you want to work at prestigious companies, then it’s going to take a whole lot more than a few online courses. Or 10. Or maybe even 100.

People often study for years.

But… you just told me not to be discouraged.

Right. I’m not trying to discourage you — I’m trying to make sure you’re realistic with your expectations.

If you are genuinely interested in joining the industry, then you need to be aware that it’s not a one night (or even one year) fast-track.

Just like people study for years and spend thousands of dollars to learn to become doctors, there’s a lot of information you need to learn in order to become a software engineer. And the software engineer’s salary reflects the depth of skills and knowledge required.

But… I hear tons of stories of people who get jobs with Microsoft or Google who are self-taught.

They are the exception.

How do I know this? Because there are plenty of people who get a “proper, in-depth” education and study in college for 4 years, and even they can’t get jobs with big tech companies.

I need to stress to you just how impressive and incredible it is to be self-taught anything, because as a self-learner, you lack all of the resources, guidance, and oftentimes, external motivation to properly master a topic.

Now combine the hardship of self-teaching with the impressive outcome of appealing to the most advanced tech companies — that’s not something most of us can achieve, and definitely not in just 6 months or a year.

These people who have broken into the industry from hacking at online courses and tutorials — they are highly intelligent individuals who would’ve excelled no matter what type of education they pursued.

Then… what do I need to do to become a software engineer?

  1. First, you need to understand what options are available to you. There’s another article I’ve written regarding various options for learning software.
  2. Second, you need to be realistic, given the options. The fastest way into the industry is attending a bootcamp and then applying for basic web development jobs. Even that will be, minimum, several months up to a year. If you want to get into the most prestigious companies, you will need prestigious problem-solving and engineering skills. Unless you’re a genius, that does not come in just a few months.
  3. Third, you need to be disciplined in your learning. After you’ve chosen your path for learning, the most important thing is consistency. You’re tired today? Doesn’t matter. Sit down, and learn the material. Even 20 minutes is better than nothing. It’s not passion or motivation that achieves results — it’s consistency.
  4. Finally, don’t give up. Just like with anything else, there will be hard times. You’ll have to learn material that you find boring. You’ll struggle with a really hard problem for several days, or maybe even weeks. You may not be able to understand certain concepts for a long time. But eventually, you will. You cannot give up, especially if you really are serious about joining the industry.

If you understand what I’ve said above, then you’ll have a higher chance of succeeding. And I hope you do succeed, because the world is continually in need of more software engineers.

If you’ve decided that you don’t have the money or time for college or bootcamp, and you want something more than just a hodgepodge of individual online courses, you might be interested in the software academy I’m building. Read more about it here.

If not, I wish you the best of luck either way. Don’t be discouraged, and continue learning.