On The First Programming Language

At first I thought I wasn’t qualified to write about this but then I remembered something a professor told me while he was going through a thick stack of applications for assistant teaching positions. I believe he had over 60 applications to sift through, meticulously evaluating every students grades, language skills, and degree level. To the surprise of my friend and I he said that he’d actually preferred masters level students over PhD students. For some reason we undergrads tended to perform better when taught by a lower level grad student. Our professor’s hypothesis was that a student working toward a doctorate was too disconnected from the more basic concepts to effectively teach them. These subjects had either been forgotten or burrowed into the subconscious over the years. Masters students however usually have only just covered the topic of the lab within the last four or five years.

By this logic I’m about to lose my ability to talk about learning introductory programming in detail. Before I forget I’d like to present my two cents on the age old “What programming language should I learn first” dilemma.

Short Answer: Any One Language

Make a choice. This is the most important thing by far. If you want to learn anything you must a choice: that you want to learn how to program then just dive in. It doesn’t have to be a big deal so don’t go developing a mental block from the pressure but just decide that you want to learn and that a necessary step in learning this skill is to find a medium that works. Anyone looking for a serious answer would probably roll their eyes at this non-advice and I apologize but it has held me back a ton and burned a lot of potential learning time for me in a lot of different fields. Also, the language that you pick at first really just isn’t a huge deal.

To reference my time in college again, I recall a lot of complaints about what technologies were being used in each class. Naturally, people mostly want to learn what (they think) they’ll use in their respective industry. The university however has to make a decision that will benefit all of the students regardless of their intentions after college. Do they teach a language used in a lot of graduate programs like R and MATLAB? How about they go with a very common language like Javascript? Why don’t they pick a languages that’s “easy to learn” like Python? Well any of those are acceptable answers depending on the specific course. However most educators would probably agree that the most important thing rather than the specific language is that the concepts are taught well. I always thought it was understood that the languages and technologies didn’t really matter. An object oriented class is meant to teach the principles of object oriented programming — not the principles of how C# handles interfaces. The idea being that while the latter may give a few students tons of help on their first projects, the first will give the majority of students the necessary principle understanding to apply to any of their relevant projects for years to come.

Okay But Seriously What Language?

There seems to be two major schools of thought here. Noobs should learn noob-friendly syntax or noobs should learn noob-unfriendly syntax. I guess I lean more towards the second philosophy. Despite my strong feelings that you should dive right in and start getting things done as soon as possible I guess you are cheating yourself a little bit by picking something “easy” like Python. Forgiving languages will spoil you and then switching to something highly typed and pickier will be a challenge. On the other hand, learning something a bit older and more rigid like C will make Python feel like a breeze. Also, you may actually find it easier to keep track of what’s going on with a language like C where you have to set every variable explicitly. You’ll become a better programmer without your computer making assumptions for you. Finally, a lower level language will give you a better feel for what’s going on under the hood. That might not matter to you but it helped me a lot. Don’t forget though, just pick something and get started!

A lot of people will tell you to pick something that’s useful for what you want to learn. I feel that most people asking this question though aren’t really sure what they want to do, they just are interested in computers and how they work. However, if you do know that you’re interested in something specific like web development or game development then you should certainly try to find something relevant to those fields (the first one having much clearer answers than the latter). If this is the case for you just do a little bit of googling to find out what some industry leading languages are in your field but DON’T let this research phase continue forever. Spend maybe a day or two on this and then go.

It’s also worth mentioning that these fields are changing all the time. Sure, a lot of popular languages have been around forever and seem to be here for the long haul but you never know what’s going to be hot in 10 years. Picking a language just because it’s something you keep hearing a lot about or because your favorite game was written in it isn’t a great choice. This ties into the university method of picking a language and just focusing on the concepts. The concepts will benefit your career more than being “the guy that knows the language none of us want to write” or something. You may some day look back at how you stressed over what language to learn and laugh at yourself for spending all of your time leaning the ins and outs of a language that’s now only being written to support legacy code.

In conclusion, learn C. It’s the best.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s