How should I get started to teach myself software engineering?

I’ve gotten the question quite a few times since I started Holberton School, most often with applicants that were still in process or had been rejected. Here is what I usually answer.

As a future self-taught software engineer, you have two significant advantages over other fields:

  • There aren’t many other engineering fields where recruiters care so little about your degree, as long as you can display what you can do.
  • There aren’t many other fields at all where people spend so much time constantly sharing their knowledge in the most convenient forms possible to consume (online or offline).

So, here’s your plan: display as much as possible what you can do for recruiters to get it easily and quickly, and make the most of the open knowledge base and community.

Examples to display what you can do:

  • Build stuff. Even very bad stuff if you’re a beginner. Make it public on GitHub. Don’t be ashamed of your bad code. (I personally have some pretty bad old code on there from my early days.)
  • Join an open-source project. If you’re not too comfortable technically, start giving non-technical help (translating documentation, organizing issues, give a user’s perspective on the mailing-list, …), at some point, you will start fixing technical stuff without even noticing.
  • Respond to people’s questions on StackOverflow and Quora. Yes, there are people who are even more beginners than you, way more than you think. Find their questions and post relevant answers.
  • Brag about all of the above on your LinkedIn profile, and to recruiters generally.

Leveraging the knowledge base / community:

  • Find online tutorials about what you’re interested to learn. The mainstream topics now have free or nearly-free tutorials reaching quality levels that developers even 5 years ago couldn’t even dream about.
  • Read a lot, about one hour each day, about what’s happening in the tech news. At first, you might not understand much, but gradually you will, so it’s important that you keep at it. You’ll have to curate your own sources based on what you like. One generalist source to get started: the HNDigest daily newsletter.
  • Go to meetups and hackathons. There has got to be some around you. Some more advanced meetups will be over your head; of course you should prefer those whose topics seem more understandable to you as a beginner, but if there are none because you’re too much of a beginner at first, then go to the ones that are over your head anyway. Gradually, they will be less and less, as your technical culture and understanding widens. Also, this is the only way to grow your network without external help.

Of course, those are easier said than done. Learning software is a notoriously hard and maddeningly frustrating endeavor. But just like leaning an instrument or a language, the initial struggle against frustration turns into a lot of fun, and ends up well worth it in the end.

There are techniques to alleviate the frustration, but you’ll have to find what works for you. Some that tend to work: learn with other people who are actively committed to help each other, interaction with mentors who do stuff you’d like to do, use the technology to build stuff you like and care about, write and teach around about what you learn. …

(If you know a bit about how Holberton School operates, you will recognize that we especially designed it to bring those alleviations, in order to accelerate and deepen the learning.)

Good luck to all learners!