What it really takes to learn how to code?
.. and how do I start?
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.
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,
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
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:
- HOW COMPUTERS WORK by Roger Young
- Code: The Hidden Language of Computer Hardware and Software
- .. and a whole bunch available for free at freecomputerbooks.com
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.
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.
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.
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.
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.
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.
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.
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
- How Computers Work?
- Harvard CS50 Class - HIGHLY RECOMMENDED
- CS101 Class
- edX - Introduction to Linux
- Survival guide for Unix newbies
- Senior Guide To Computers
Ruby & Ruby On Rails
- Learn Ruby The Hard Way
- Rails For Zombies
- Programming Ruby
- _why's (poignant) guide to Ruby
- The Rails Tutorial
- The Rails Guides
- Practicing Ruby
Python & Django
- Learn Python The Hard Way
- The Python Tutorial
- Obey The Testing Goat
- Tango With Django
- Dive Into Python
- Google's Python Class
- Writing your first Django app
- Mozillas' Learning The Web
- Learn Meteor.js
- Discover Meteor
- Felix's Node.js Guide
- How do I get started with Node.js @ stackoverflow.com