You're reading a random programmers blog about software - go back to mainpage


What it really takes to learn how to code?
.. and how do I start?

Written by: Alex Pszczolkowski on September 09, 2015


In my spare time I’ve been involved in mentoring a couple of people with little to no prior programming experience. Since I’ve had the initial conversiation on “how do I start learning how to program” or “how do I get a junior programming job or internship” more than once, I thought I’d write here about my take on it and what I generally tend to tell people when they ask about it.

Who's this post for?

In general, I wrote it for people who are seriously considering getting into programming either as a hobby or to get an entry level job or an internship at some point. Now, you won’t become a coder overnight but investing your time and effort is worthwhile, I can promise you that.

TL;DR

Some of the many options to start out is starting with a tutorial on programming like the briliant Learn Ruby The Hard Way or Learn Python The Hard Way. After that, building a simple webapp with the help of an application framework like Ruby On Rails, Django or Meteor by following one of the abundant tutorials on one of these technologies listed here. It’s perfectly fine if you’re confused about what choices to make. If so, go here and start learning Ruby. Then start building a simple app following The Rails Tutorial. You really can’t go wrong here. Numerous people have proven that Ruby and Rails are viable choices and both are a lot of fun to learn. Read more arguments on why rails at the bottom of this page.

Am I too dumb to program a computer?

In short, NO, you’re not. But before we go any further though, we must establish a rough baseline.

While I belive that you can learn to program without prior knowledge, if you’re serious about learning to code, it’s still important to know the basics of computing and hardware architecture. You don’t have to know the internals and mechanics of how computers work from top to bottom, but general working knowledge of using and interacting with a computer is kind of obligatory.

In this article, I am assuming that you have good working knowledge of using computers and generally understand the technology stack. If you can barely tell apart the browser, internet, operating system, hard drive memory, ram memory and the difference between the two, windows, linux, macs, etc, you might want to check out those basics first.

Some very good books have been written on the subject and these include:

There are also some very good video resources out there, like the very popular CS50 from Harvard University.

So, having that long intro behind us, let’s start with the actual things you should consider when planning your learning strategy.

Have fun

While it might be quite intimidating at first, you’ll soon realize that it can actually be a lot of fun. The fact that pretty quickly, you could be building something useful or entertaining is really compelling. The sheer idea, that you could just build something, out of absolutely nothing, show it to others and recieve feedback is a very empowering thing to think about in the context of programming.

Work hard

First of all, prepare to work hard. Be ready to put in the hours of work, study, sometimes periods of frustration and many times awe and fullfillment. Programming a computer is just not the easiest things you can learn. It’s very rewarding, but it’s a nontrivial task. I can’t stress enough how self motivation is important here. I’ve seen many people quit after being stuck on some problem for a while or who were just not prepared to work that hard. It’s not that obvious. You really have to find the motivation to keep going, and not many people stress that enough. You need to hussle and push through it. Having said that, it’s not as difficult as it seems at first and now is truly the best time to start. It really has never been easier to learn how to code. The amount of tools, resources, knowledge, examples, open data and so on are so abundant that it makes my brain hurt. Use that. Capitalize on virtually all the human knowledge that just sits on you laptop. We live in truly empowering times when it comes to knowledge and technical skills and it’s almost your duty to humanity to use that opportunity well!

Make it relevant & think big

Make the programming experience relevant and fun to you. Definitely start small, but also start with a bigger picture idea about what you could possibly be able to bring to life if only you could know how to code it. Relevance and well defined goals are key to success. Make your goals achievable, but be bold on your vision to retain motivation.

Be proactive

This is a huge one and really touches the subject of mentors as well. Being proactive is reaching out to find the knowledge and foundation out there. Also it means coming up with your own little projects and problems to work on. Seeking your areas of interest basically. Use Wikipedia intensly, stackoverflow.com, plain old google, social media, newsgroups and irc channels. Ask questions but be prepared to put the work into research by yourself instead of recieving ready solutions.

Seek out mentors

This one is actually most beneficial if you have a little knowledge already, but I’ll still mention it because I think that this is not emphasized enough in most of the resources out there.

If you’re just starting out, just get on it and do your research as you go along. You can find my starting point recommendations at the bottom of this post.

Having mentors is one of the crutial steps on the path to mastery. Most successful people of this world claim they had a mentor and as an aspiring programer you should consider finding your mentors as well. After you dive in and start to get the main ideas and more importantly - start to realize what you don’t know yet (which is almost everything), start reading famous programmers’ books and code and seek out more experienced people in your area. Real world interaction with smarter and more senior hackers will be very influential and will make you progress faster.

There are many resources out there, that will be far more comprehensive that I wish this post would be. For starters, check out Jeff Atwoods’ Recommended Reading for Developers.

Stay hungry

The process of learning never really ends. It sounds trivial, but it’s true. Stay hungry for knowledge and keep improving. Take on harder and harder tasks. Once you learn something new, you start to see how it unfolds a new rabbithole of further questions and ideas. Keep going deeper and remember that mastery is a constant progress. Like with most hard things, it’s a marathon, not a sprint.

So How do I start already?

Ok, preaching aside, how do you actually start?

First of all, although many people would probabily disagree, you don’t have to become a computer scientist in order to create software. I wouldn’t go down the road of reading tons of theory books before trying to write simple programs first. Many successfull coders have proven that you can just dive in by following tutorials and start filling the knowledge gaps as you go along and discover more about the craft.

There are really many paths to getting started and honestly I don’t think that it really matters what kind of language or framework you choose. You start with C, C++, Java, PHP, Python, Ruby or Javascript and all those paths will be fine, although C,C++ and Java tend to have maybe a slightly steeper learning curve than so-called dynamic languages.

It really does not matter if you first go to codeadcademy, edX or Become a Programmer, Motherfucker. These are all viable options and you can choose what suits you best.

Having said that, one of the strategies that has always worked for me is immersing yourself in as many tutorials, articles and videos on the subject as you can possibly can. No matter what language and/or framework you’ll choose. The main point being here is to just start and do your best to stick with it making adjustments as you go along.

I am attaching a list of noteable resources at the bottom of this post, that you can go through.

Now, how about the famous Ruby On Rails?

Among the vast amount of choices presented above, one definitely stands out in my opinion. It is Ruby On Rails framework.

Here’s why:

(relative) Simplicity

Ruby On Rails uses the Ruby programming language, which is modern, easy to use and expressive. It does a good job of abstracting away the complexities of building a web application, so at the beginning of you journey you can focus on messing around and building simple things without going deep into techincalities. Of course, later on you’ll want to dig deeper and actually get to know the theory and engineering under the hood. But for now, you just don’t need that, as your goal is to create something and make it publicly available.

Huge, active community

Rails has one of the most active communities of hackers and builders out there. Most of the beginner questions can be easily found online on forums, Q&A sites like stackoverflow.com blogs and mooc courses.

Useful skill

Rails is quite popular among new and existing startups, because it significantly cuts down the time of shipping a Minimum Viable Product. It lets you quickly build a prototype of something real and go from there.


List of technologies and tutorials
.. by no means comprehensive

General Computing

Ruby & Ruby On Rails

Python & Django

Javascript

Others

comments powered by Disqus