The advice you will get here is a true and honest take on how I believe you should start programming computers, and how you can self-educate yourself in a programming craft. I know how to do it because I went through this process by myself and I know exactly where the pain points are. I don’t talk about any specific books, as other people have done it already. I only talk about methodology and mental side of studying.
Before we start let me give you a hint for learning programming: you should find someone who will show you what programming computers is all about. At least the basic steps. The teacher who’s familiar with the writing software will be an extreme leverage, and will accelerate your learning by an order of magnitude. Remember: having a mentor like this isn’t cheating. It’s giving yourself competitive advantage.
Here we talk about situation where you don’t have a person like this in your life or if you just want to do it all by yourself. Maybe to prove yourself?
The problem I see with teaching and teachers in general is that it’s often unclear to you what the end goal is. Teachers often make the target of your study to be unknown. For self-study it’s even worse. There’s no teacher here. So you need to ask yourself: what will you do once you know programming language X? Why do you want to learn at all?
In my opinion your end goal must be building a software product. Something you can use, or something you can show to other people. Something that is “cool” to you. This should be your ultimate motivation. You learn to have enough skill and knowledge to go from zero to something working on your computer, and then possibly on your friend’s computer. Use this hint:
I want to learn programming because I want to build ……..
Until you know what to put in dots, you should think of the whole programming idea a little more. Unless you’re naturally driven to computers, learning programming will be as delightful as chewing a printer paper otherwise.
This project-target will also be your motivator in the moments of weakness, where programming will just seem boring and plain dull. Think of something before you start. It should be simple, yet interesting. Examples of things worth tackling are to-do lists, note taking programs, simple calculators, and so on.
If you’re impatient, even now, as we converse here and you can’t wait till I “finally” get to talk about “real programming topics”, programming will be a challenge for you. If you get frustrated often by solving problems or getting discouraged because you can’t get stuff to work, do know: it’s exactly what software is about. It’s about solving problems, and most of the time when we talk about “programming” we’re struggling, because things don’t work. When things start to work, you are happy for five minutes, and then move on to other broken stuff. Think of writing software as solving a puzzle and someone finding and putting more new pieces on your table.
Also set your expectation low for results you’ll get in the first several weeks. Very low. It will be as simple as printing something on the screen at most. And the more enthusiastic you are about large number of little things, and achieving big goals with small steps, the more successful you’ll be. But know that building a dynamic website isn’t very much different from printing something on the screen. Don’t get discouraged. Be patient.
Gaining a new skill is about achieving a good ratio between studying and practicing. This ratio, if gotten wrong, will prohibit you from learning and burn your excitement. If I were to show you how this distribution should look like for people in the software field, I’d present it with the following table: