Most people assume that I studied computer science in university and that I've been coding since I was young. They're usually surprised when I tell them that in fact I studied Marketing and Spanish and that although my brother taught me how to build a very basic web page in the early 2000s, I didn't really start to learn to program until I was an adult with a job.
The truth of the matter is that my story isn't unique. It's simply not true that you have to be a whiz kid who's been coding since they were 6 years old in order if you want to be able to program as an adult. There are tons of examples of people who also don't have a technical background who either became full time programmers or just learned a new skill they enjoy using.
In this post, I'll give you some advice that has served me well on my journey. My path is by no means the only path and depending on the situation you're in might not be practical or right for you, but it is certainly a path, and I hope it helps you on your path to learning to computer.
Photo by Miguel Á. Padriñán
The Privilege of Time
It's helpful to first talk a bit about the real barrier to learning to program: time. Given the sheer massive amount of things that one can and needs to learn to be an effective programmer, it does require a large amount of learning time.
This might not be possible for everyone to commit to. If you have responsibilities that require you to dedicate a large amount of your time (i.e., more than 40 hours a week) to make ends meet or if you simply have other large time commitments (like family, friends, social organizations, etc.) that are more important to you, you might not have the spare time to dedicate to learning. That's ok! Coding can be a real joy and is a great career, but sometimes other things are just more important.
It's important to understand that learning to program to a level of employability is a pretty large time investment and it's best to know up front if you can or want to invest such a large amount of time to it. The good news is, as we'll see, there are a ton of resources for learning to program that give you the ability to do your learning on a flexible schedule.
Photo by #WOCinTech Chat
Where to Begin?
When people talk about starting to learn to program, they often talk about which programming language to start with. This is a natural starting point as coding is always done through a language. It's the most tangible aspect of learning to program computers.
There are many criteria for choosing a language to get started with including:
- Languages that are not overly-complex: Some languages require a lot more background knowledge to be used. Go is an example of a simple language. C++ on the other is a very complex language, and therefore probably not the best choice for a first language.
Some often cited criteria that hold much less weight:
- Languages that are dominate in industry: One of the first languages I learned after Ruby was Standard ML which is not really used by any companies, but it influenced my career perhaps more than any other language. Don't focus on a particular language just because you think it might one day get you a job.
Don't be afraid that you might pick the wrong language. You can always switch to another language if you find your current choice isn't serving your needs. In fact, I would encourage you to learn lots of languages. The more languages your learn the more you'll exposed to different ideas, different use cases and different challenges.
I, for example, learned to program in around 10 or so languages to some level of proficiency within the first couple of years of first learning to program. Each language exposed me to something new which made concepts in other languages clearer. Ruby for instance exposed me to something called functional programming but it wasn't until I learned Clojure and then Haskell that the concept really clicked.
But perhaps the most important aspect of which language to chose is the community of people associated with that language which will take a look at next.
Photo from rubyonrails.org
Community and Support
Most people outside of programming (and a depressing amount inside of it) don't realize that programming (and especially learning to program) is often a very social activity. Whether you're a part of a team at a company or your working on a project in your free time, more often than not you're interacting with others. The best coders are ones that not only enjoy the nitty-gritty details of what they're working on, but can also bring out the best in others.
It's important to find a support network to help you with your learning. Some programming communities are more beginner friendly than others. For example, I started out in the Ruby on Rails (RoR) community because I happened to be doing support work at a startup that was using RoR. When I first started I didn't really understand why RoR was - people would say Ruby is a programming language and Rails is a framework, but these terms confused me. All I knew was that the people who I met through Twitter and through local meetups were very encouraging. I was of course nervous to ask what I assumed were very silly questions, but they were there to help.
Find yourself a community or set of communities that will help you on your journey. If you're unsure where to start, ask others what programming communities are the friendliest to new-comers. If you don't know any programmers, start here.
The Right Mindset
Learning to program can be a big challenge, and it might be tempting to give up at certain times. When you feel overwhelmed or not smart enough, it's important to remember: computers are not magic, you can learn how they work.
If something is not clicking, it's not because you're not smart enough. It might be because you're missing a key piece of background knowledge. It might be that the resource you're using isn't meant for someone with your particular background. It might be you just need to take a break and learn something new. Don't give up!
The best way to get start learning is to just dive in. Simply search for “learn to program” and see what comes up. Think about what you would like to try to learn to build and search for “How to X as absolute beginner”. Some activities you might think about are: building a website, building a 2D game, and creating computer generated art. There are plenty of resources out there to help your decide where and how to begin learning.
If you have any questions or want any personal advice, let me know.