For many people, the world of programming is an arcane one. It’s run by people who speak computer gibberish, spend long nights typing away at their computers and — if I were to keep to the stereotypes here — wear pocket protectors.

And for many people, it seems like an incredibly difficult world where only a select few can survive. So it’s not a surprise that when people learn of my somewhat secret programming life (I like to keep it on the down-low), they often ask this same question:

“How did you start?”

Some people who ask this question expect some huge, long and complicated answer, and I can’t blame them. The programming world is a very large sea and if you just run mindlessly into it can easily be akin to jumping into the Mariana’s Trench and not knowing how to swim. You need focus and a sturdy foundation to make life easy here.

So, upon realizing that this is actually a very important question for self-teaching beginners, I decided to provide some good resources to get anyone interested in it started.

But first, I have to give some very important advice (and also be sure to read the conclusion when you’re done reading):

Don’t mix them up

One mistake first-time programmers sometimes do is learn many different programming languages before becoming really comfortable in any because they want to get a broad foundation in programming before specializing.

As I’ve explained in an earlier post, this isn’t the best way to go. Learning how to program is a lot more than just memorizing the syntax of random programming languages. It involves training your brain to think in a different manner (a manner close to computers) to tackle problems. This process would be bogged down and hindered if you learn multiple languages at once when you’re beginning you’re programming journey. Master one language first. I’ve written a whole post to explain this in detail, so please give that a gander.

Project-based Learning

The best way to learn programming is by doing. You have to be able to build something with your programming knowledge before it really becomes programming knowledge. While you are learning, build small projects for yourself, and scale them up gradually to give yourself more of a challenge. You’ll learn a whole ton in the process, and makes you more comfortable and motivated. I, for example, started building my first real program just weeks after learning Python (it’s a programming language), and eventually scaling it up to a behemoth 182-line program and eventually a full scale application.

Now, with that done, without further ado, here are some great resources to get you started:

The List

This is my personal favourite because it got me into Android development and hence into full-swing programming obsession. But in all seriousness, Udacity is a great resource for learning programming. Admittedly, from the courses I’ve taken, you knowing a bit of knowledge in programming fore-hand could help, but then again I’ve only taken one of their hundreds of professional courses. For goodness sake, one course gets you from knowing nothing to teaching you how to build a search engine. Some courses are free, but their best courses (called Nanaodegrees) have monthly or sometime fees.

Udemy is a place to learn not only programming, but tons of other skills. From cooking to mastering job interviews, Udemy has it. However, you have to be careful when picking your course. Some are absolutely great (the best ones are the paid ones), but some are also not too great. Check the reviews and previews before picking a course. And a rule of thumb is, the more people who enrolled in the course, the better it is.

Coincidentally, this is the website I used to first learn programming, so I know it’s not that bad.

Edx (Free, optionally paid)

Man oh man! I wish more people knew of this amazing resource. Edx.org offers free courses on many topics form top sources like Harvard, MIT and Microsoft (I’m not pulling your leg here). If you pay, you can get an official certificate from these courses, which I wouldn’t mind if it’s from Harvard or MIT. You could go straight to the homepage to explore, or look at this Quora post for some suggested courses. You won’t regret it.

Similar to edx, Coursera also offers university courses on many things, including programming. Some are free, but the best ones are paid. If you don’t mind surrendering a little money, go give them a look.

Codecademy (free, optionally paid)

If you ever look over the internet for places to learn programming, Codecademy comes up time and time again. It has its lovers and its haters, but according to many programmers, it’s really good. One of the things that sets Codecademy apart is the fact that you can practice programming and complete their assignments right form the website. They have a built in practice area for assignments and experimenting, which many people like. If you subscribe to the Pro status, you gain access to quizzes, personalized learning plans and other goodies.

This subscription based website offers some high- quality courses on a number of things, including programing. Yeah, its logo might suck, but Lynda is generally respected among programmers, so if you’re okay with paying a subscription, you can try them out.

Code School is another subscription based website, and this one is based on web development. It has a good reputation for quality courses, especially because it’s run by Pluralsight – a company that teaches professional programmers.

And lastly, there’s StackOverflow. This is isn’t a website to learn programming through courses, however it’s a great place to get help from fellow programmers if you face a problem. Lots of common questions have been answered there, and if you post a new one, it could be answered in minutes. This is a very important website for any programmer.

Though these resources should be more than enough to get you started programming, if you like being spoilt for choice, you can check out this post on Blogging.com, which lists some other resources you can use to get started.

Don’t Know Which One to Choose?

Honestly, it doesn’t matter as much as you think it does. I started learning with an Udemy course taught by a teenager, and honestly, I could have taken better courses, but it didn’t matter. Just get yourself a good course and get started. Get the content, know it well, and build.

You will learn an amazing amount when you start building. At the time of writing this, I’ve only taken 3 programming courses, and one of them was a YouTube series. Did any of those teach me enough to make any of my applications?

Nope. I took the knowledge from those courses, and learnt the rest along the way. If I faced a problem, I either watched videos on them, read blog posts, read documentation or went to StackOverflow.

Your experience shouldn’t be any different. Many programmers agree this can be an amazing way to learn. If you’re not sure which specialization you’re interested in, just take a general programming course, or do a little research into the various areas such as game development, mobile development or web development.

So just pick one website (I suggest any free one, especially Udacity, Udemy or edx), and build.

Photo credit: Norbert Levajsics on Unsplash