Which programming language should you learn first?

This title on the surface-level looks like all other common click-bait titles found in the internet; but deep inside it has some'THING' special that can help you throughout your life.

When I was a kid in school, the computer science class used to be both the most Fun and most Nightmare-ish class at the same time.

glorious days of fullscreen win95 games

The fun part was being able to play Mario, Dangerous Dave, MotoRacer and other 32-bit games in the windows 95 whenever the teacher was absent or if you did the assignment faster. cltr+f4 was our best friend to not let ourselves get caught playing in class.

The nightmare part was using the command lines and QBasic editor for coding simple programs like multiplication tables, printing out specific patterns using for-loops etc. Granted it was satisfying if you managed to get the stuff working, but being stuck with black and blue screen with a blinking cursor used to be extremely intimidating.

Fast forward to a decade and I am again trying to learn the same thing that I loved and hated with the similar feelings. Coding now still makes me want to pull my hair off when things don’t work and make me feel like I won the world when I finally get it working.

Time has changed, people have changed, technology has changed but the poor computer still only understands 1’s and 0's.

The first thing that came to my mind when I thought about studying programming was to google it at first. I would waste multiple hours reading articles, news, searching types of jobs and subscribing to various programming related news channels and online courses.

The most common search query about programming is this — Which programming language should I learn first?

These types of questions are generally asked by people who are new to programming. They see their friends or news on how software developers and programmers earn a lot of money or create amazing stuffs, and thus want to try a taste of it.

The most perfect example would be me myself. When I first graduated as a Biomedical engineer from my university and couldn't find any jobs closely related to my studies , I wanted a change in my career. I looked through various options and found programming both to be intellectually and financially rewarding considering my capabilities and situation.

Then I immediately thought in my mind — “oh well , I’ll be a programmer then”

This was exactly what I thought when I applied for Masters in Computer Science and got admitted in quite easily even though I came from different carrer. Maybe they saw that my marks in mathematics and computer-related subjects were good and took me in.

Then came the tough part. I expected computer-science to always be practical coding fun sessions and puzzle-solving type of work. But mine was a mixture ranging from learning instruction level complex computer architecture and compilers, to Embedded systems and IoT, to stuffs like bayesian statistics and complex logic to many more things that make you think — “holy crap.these kind of things do exist”. Not having a strong computer science foundation definitely made it harder to be able to perform at a solid level from the start.

As someone who had basic MatLab and Python experience, I had to use C++, C#, Java, Javascript and many others languages during my course.

I got frustrated and started to rampage through multiple MOOC courses in hope of learning those stuffs in quick time. I, during those time used to have over 20 enrolled courses in Coursera, edX, Udacity etc (never do this btw !!)

some of the few languages I tried to learn on my own (smiley face)

But oh boy was I so wrong. Even with the simpler assignments, I used to have many trouble and need to seek help in forums and Google. If you add the libraries and frameworks to these languages, the numbers of things I needed to learn would go over 2-digits. The reality was that I didn’t knew the very basic fundamental THING (see what I did there?) that would help me understand those stuffs easier.

Not being able to go in rhythm with the courses made me realize the THING after a while. Afterwards, I took a break from college after 1st semester just to make sure that these two skill-sets are what I absolutely had to master before trying to create my own things.

Programming fundamentals + Problem-solving skills are the 2 pillars for every greatest programmer out there.

During self-study, many things I hated during my computer science classes, I gradually came to understand. I used to absolutely loathe algorithms and logic in usual classes as they used to be very verbose and lengthy. But when those things were not part of my examination list, I researched more on them and came to like them more. If you still hate them , you might find this puzzle change you a bit. http://datagenetics.com/blog/july22012/index.html

Going to the main topic ( Sorry if I brought the whole forest just for the banana), the simple answer is — “whatever, language don’t really matter”.

Language doesn’t matter, the ability to solve problems does.

It doesn’t matter what programming language you have mastery of , more so the way you approach a problem is what is important. Programming language are just tools to help make harder things easier, but the way to approach and envision the problem can only be done by you.

Mechanics and technicians might know more about the hospital tools and equipment than the doctor, but even they can’t treat anyone with the tools they themselves invented.

See, it doesn’t matter how proficient you are at using a tool if you don’t know how to solve a problem with it. Doctors used to treat patients since centuries before these sophisticated equipment of today came out. Of course, treatment process have been easier and less riskier with the new tools but the core philosophy is the same. Your brain is like the doctor and the programming language are like the tools.

One tool might be quicker and easier than the another, but if you know how to solve the problem, you can do it with whatever tool you like.

Just like you can’t judge a doctor by what tool he uses, a software developer is the same. You need to be more creative in how to solve a problem that what tool to use to solve it (for more on Creativity check my another story).

The main point is that it absolutely doesn’t matter if a X programming language is popular than Y. If you have good problem-solving skills, then even if you are from an English major, a GOOD company will hire you and train you rather than someone who has a college degree in CS but just a coding monkey. This below is a very good read on the aforementioned topic. https://blog.codinghorror.com/please-dont-learn-to-code/

So what I basically wanted to say is you need to do the below mentioned things if you really want to be a good programmer. The higher you go, you can define these learning paths yourselves.

  1. Learn the fundamental core-concepts of a single programming language of your choice. Use MOOCs, youtube videos, read books etc. (1 week for the very basics, 2–3 weeks to get to intermediate (might vary)).
  2. Find simple problems in Internet and try to solve it using the things you learned from the language. Many online courses have these mini assignments and courses at the end of every concept. (2–3 weeks).
  3. If you feel brave, try the Project Euler challenges. https://projecteuler.net/ You can also try codewars for further challenges. https://www.codewars.com/ (1 week)
  4. Once you feel confident writing stuffs on a blank screen, think of some idea or thing you want to improve or create. Try to break it into parts and do the parts one at a time (think it as a group project that are assigned among the members). If you hit issues, go to forums on that specific language, ask help with friends or internet (stackoverflow, quora)etc when you get stuck. (2–3 weeks)

With all these steps, you will be somewhat able to write your own idea into code in 2–3 months. Keep searching for unique challenges you can find (in internet, in nature, your life, in your school or work) and try to solve those problems. When you find some ways to crack the issues, write the solution down. The only difference is that now you write the solutions in code format instead of flowcharts (nothing too fancy now ehh?).

However on your way, never forget these two important aspects:

  1. Understand that everyone started with basic code lines like var x = 1; If you hit a wall, leave the problem for a bit, take some fresh air, read and watch more on that topic, try it again, ask help for specific doubts and keep on going.
  2. Practice, practice and practice. Stop Google-ing on which language is better. Technology changes everyday and so do the language but your problem solving skills will help you understand what’s inside the hood.

Hope this helped you a bit. If you need help on similar stuffs, don’t forget to comment on the section below.