There are loads of ways to get into programming and I think I have tried all of them. The first language I tried was Visual Basic because my father had an instructional book laying around and I was bored. Later I taught myself HTML and then JavaScript because I wanted to make websites on Geocities. Then I took a class in high school with some language I don’t even remember and Java in college. Then, when I was looking for a job, it was all Ruby on Rails. So there are many different paths into programming.
One of the best ways to chose what language you want to learn is to backwards engineer what you should learn from what project you want to accomplish or from the job description for the job you want.
The real pain of learning your first language is that you don’t know what you don’t know. Nothing is harder than a blank page. You really can’t know what language you will like until you try it and learning a language is lots of effort so you don’t want to waste time and effort.
Someone who is looking into their first language is often looking for a job in the field (in which case they should start be reading some job descriptions and learn the language in those). Then they pick and learn because they hear a certain language is “best” for the job but “best” is really in the eye of the beholder. I don’t even know how I would decide which language is objectively best (except maybe in very specific circumstances). Also for any job there are several languages that you could be working in. Web development can easily be done in Ruby, Python, JavaScript, PHP and more so which language do you learn if you want to be a web developer?
The student will hear something like: “Python is very easy and powerful” or “Ruby thrills with its syntactic sugar” but they don’t have enough experience to fully evaluate those statements. The field is much bigger than any one person can learn or even fully understand.
A common experience is that a learner will start on a specific programming language to find that they switch multiple times later. By my count Ruby is probably the 5th language that I learned before I really started in on anything more than small personal projects or school work. That isn’t even counting what ever language I used to learn programming (again) in high school because it all blurs together after a while.
So if I am not going to recommend a programming language to learn first then what is there to recommend? http://Exercism.org is my recommendation. Not a specific language but a resource. There are 70 tracks on http://Exercism.org at last look and they cover a lot of different types of programming languages. Working through a few tracks and understanding the languages and their differences will give the learner a much better grounding to figure out what they want to learn next or what they want to do with their skills.
From there it will be much easier to say that you want to learn game programming for example. So you will master a couple larger languages and say Unity or Unreal Engine but first you will get your feet wet with DragonRuby (which seems capable but not as much to learn as the others). When you are learning your first language (or first few languages) the way to select what comes next is more about increasing the size of a project you can take on and complete than it is about finding the “best” or “final” thing you will ever need to learn. You might find the thing you learned along the way (DragonRuby in the example above) is “enough” and it covers all the cases (video games in the example) you want cover.
The “best” way to learn a language is to have a problem you want to solve. When you are starting out you don’t know what problems there are to solve or where to even start so something like http://Exercism.org gives you lots of smaller problems to solve (they line them up for you and the you knock them down one by one). This ends up teaching way more than aimless wandering around trying to figure out which language is “best” or “what to learn next”. Just pick one exercise, learn it and go it the next one.
Leave a Reply