Breaking into programming world

In this post I want to summarize my thoughts about starting a coding journey. During last few months I got a lot of questions about basic “starter pack” and finally decided to end replying chaotically, think it through and come up with structured piece of advice that hopefully will be helpful.

Don’t follow trends

To every absolute beginner out there: IT world is too dynamic to pick a technology or programming language once and for all, just because it can currently land you a lucrative job, and stick to it for the rest of your career. What you can do instead is start with what. Do you want to build websites or mobile apps? Maintain powerful data servers or train neural networks for object recognition? Once you choose what to do, then the very idea of learning how to do it will excite you enough to not leave it all behind after few weeks when things get complicated. Here’s an example from my experience: I always wanted to make hardware, but didn’t quite like the raw nature of microcontrollers — not very user friendly during prototyping phase:

When I realized that everyone nowadays possess a set of sensors connected to a little super computer in a pocket and saw what it can do, I was convinced of Android’s potential immediately. I have gone through the same excitement process recently after seeing the capabilities of recognition using neural networks— I just want to learn how to do something similar. It feels like a magic trick!

Starting with the most obvious thing is not always optimal

Let’s say that you decided what to do and after some research discovered that the answer to how is Java. It can be tempting to dive immediately into Youtube tutorials but it almost always ends badly. The fact is that you can softly break into programming using a simpler language and then, when you’ll feel comfortable enough, just jump into something else. Overall it probably will take you less time to master desired technology using a “softcore” one first. Example: my first lines of code were written in Python. It’s super easy and clear for beginners. Here are some proven resources that you should definitely check out:

If you’re not entirely convinced of Python just give it a try! MIT, which annually trains some of the best computer scientists worldwide, is using it as an introductory language for students, claiming that it’s simple yet powerful enough for extraordinary amount of tasks.

Don’t fall into theoretician trap

Well written book is always a great resource. However it can easily let you think that you’re learning something, whereas all you were doing for the last few weeks was reading page after page without a second to digest what you read or even code it! The best solution I found was to mix many resources reasonably often. It prevents you from “theoretician trap” and keeps you from being bored. Below you can see the diversity of resources I used at the beginning: 
Lectures straight from the best technology university on the planet created with student-centric approach — everything can be complicated using fancy scientific vocabulary, but what MIT staff teaches in its introductory classes is incredibly clear even for absolute beginner.
A balanced mixture of theory and practice (quizzes, projects). Just type “programming” and you’ll see how many introduction courses there are.
This guy is super fun! He makes some mistakes that shouldn’t really concern you as a beginner but I had a lot of laughs watching his videos.

Books: “C Primer Plus” by Stephen Prata. I liked it way better then “Thinking in Java” by Bruce Eckel but I recommend both of them for beginners that already spent few weeks coding. Just remember to practice every piece of material you learned from them. This books should take you about 9 months each to read properly and that’s totally okay. In the meantime you’ll be learning even more doing courses on Udacity or watching Youtube tutorials. Be patient and remember that you can read both of them from cover to cover but you can also focus on just few chapters and maybe find more joy in watching MIT lectures. Everyone has own learning process and you should just find yours. Mine for example was all about diversity — online courses, books, youtube videos and side projects sometimes all in one week.

Don’t neglect algorithms

Though it may be true that many algorithms are not used during every day work, they are the essence of computer science hence inseparable part of your coding journey. They can increase your problem solving abilities, which are extremely necessary in IT and advance your programming skills.

Khan Academy is a great resource for learning new things in any technical domain. I highly recommend checking their algorithm introduction site.
You should also read through solutions to the easiest problems at TopCoder site or even try solve some of them yourself.

Always have something cool you can do in mind

I believe that the best approach to not give up entirely during this long learning process is to have a cool project in mind and try to build it brick by brick every day. When I started learning Android I had a simple game idea in my head, that later came into existence (it looked like shit and crashed few times a minute but still made me feel proud). The last piece of advice I can give you is to break into programming with a correct mindset — it’s not only about money or relatively stable employment but about doing something cool virtually from thin air that potentially many people can use. Just have that cool thing in mind, try to build it and you surely won’t be put off by coding that fast ;)