DEV Community

Cover image for How I chose a programming language and beat bad habits
Kyle Martin
Kyle Martin

Posted on

How I chose a programming language and beat bad habits

TLDR: Sit down. Reflect on what you truly want out of learning to program. Make a list. Tally it up. Commit to the one that has the most tally marks until you are comfortable with it enough to branch out to others. If you never get past step 1 you won't make it to the top of the staircase.

Backstory - I have been interested in learning a programming language since about 2007 but really started learning or pursuing languages in late 2018 early 2019 and never really got past the basics of the basics. In the last two years I struggled with this hardcore because I would "choose" a language and then randomly a week or two later YouTube would recommend a video titled "why this language is bad... and what you should focus on..." or "top language to learn in 2018, 2019, 2020..." and I would lose focus and change plans. Because of this, I am sure I have 100+ courses on my Udemy account but none are more than 20% complete... Till now.

After watching one of those typical "why this language is dying..." videos I scrolled down to read some of the comments and I came across a thought-provoking comment. It essentially said "Stop falling for this endless loop of being influenced by these shitty YouTube videos. If you want to truly become a software engineer or a developer you need to pick a language and stick with it.". How have I not come to this conclusion in the last few years? How have I been too blind to this bad habit loop I was stuck in? I decided to make a change. That change was to follow the advice of that comment. I wish I remember who made the comment and which video it was on (I watch way too much YouTube every day... /sigh) so I could give them credit. Whoever you were I would just like to say THANK YOU!

I hope this post helps you just as much as that comment helped me.

So what did I do? Well, I got out my notebook and at the top of the page I wrote "WHAT PROGRAMMING LANGUAGE?!?". Yes, most of the time I write in caps as I am probably a psycho or some loser who never learned lowercase writing. Anyways, I then wrote, "What do you want to make in the future?". Below that, I made a list that lists out everything I would like to get out of programming or make out of interest and it looks a little something like this:

  • I want to be able to create Android Apps
  • I want to be able to create software on Windows
  • I want to be able to create functional web apps that assist or provide information on games
  • I want to learn a more simple to learn a language at first and become proficient with it
  • I would one day like to transition into a programming career
  • I don't necessarily want to work for FAANG companies as I would have to move
  • I would like to make software to teach my daughter stuff in the future

Now that is my list, yours may be different as I like to think everyone is unique in certain ways so I encourage you to sit down and reflect what YOU want in your future and make a list if you are stuck like I was.

Then I google searched "Which programming language" and hit images as I knew there would be some kind of tree created to help you navigate which language is good for what and I came across this image that I posted as the cover art. I will also post it below if it doesn't show up that well.
Alt Text

I originally found this image on a FreeCodeCamp blog post but it seems to be re-uploaded all over the web. I have no idea who created it originally but thank you to whoever did!

After looking over this image I put which language is good for which goal on my list. Looks a little like this:

  • I want to be able to create Android Apps (Java/Kotlin)
  • I want to be able to create software on Windows (C#/Java/Python)
  • I want to be able to create functional web apps that assist or provide information on games (JavaScript/Python)
  • I want to learn a more simple to learn a language at first and become proficient with it (Python)
  • I would one day like to transition into a programming career (Python, C#, C, Java)
  • I don't necessarily want to work for FAANG companies as I would have to move (Java - I had to look for jobs in my local area and find what was currently the majority language for local companies)
  • I would like to make software to teach my daughter stuff in the future (Java, Python, C#)

After that, I tallied them up and it was obvious that Java and Python were the majority on this list. Now I already knew some of the basics of Java but all over the web I every blog post I read kept saying "Python is really easy to learn" so I figured since they were both so close and I truly want to stick with one for a while then I will just go with Python. Before this, I was aimlessly following YouTube advice not really seeing a direction. By making a list it helps you see the bigger picture.

But, all of this is pointless if you do not commit. Don't listen to the endless waves of YouTube programming community videos on which language is the best. You will perpetually be stuck like I was. I would like to add the analogy that if you don't get past step one you will never make it to the top of the staircase. You could look at being a developer/engineer/programmer as being in a skyscraper that has many flights of stairs. So just focus on one for now, more will come in the future and you will be great with whatever you choose and stick with for a while. You don't need to live, breathe, and eat that one language till the day you grow old and die. But you do need to get past the basics.

I know this got long, and I rambled on at times. I hope this helps at least one person! If you want to learn Python check out my Github - https://github.com/Thesnowmanndev where I am creating a repository for learning Python. Its essentially just notes so don't get overwhelmed by the number of comments in each file. That shouldn't be normal programming practice.

Take care everyone.

Kyle

Latest comments (82)

Collapse
 
thesnowmanndev profile image
Kyle Martin

Did you really just reply with a YouTube conspiracy video about the US currency?!? Dude not the place. Lol

Collapse
 
connor11528 profile image
Connor Leech

Laravel is a good alternative to Rails or Django :) Love the community

Collapse
 
belenot profile image
belenot

Such articles are pointless and misleading for people that starting their IT career, imho. Programming language is just a syntax and semantics... for some kind of platform. So real question is about which platform to choose. Often it's more than one language and plenty of complementary tools. It's bad move to hide such things from beginners.

Also article is very one-sided: system programming, embedded systems, machine learning. No, lets focus on web development

Collapse
 
thesnowmanndev profile image
Kyle Martin • Edited

Actually, due to many messages I have got I don't think anyone finds it pointless besides you. This article is barely anything about web development that's how I know you didn't read it. It's helped quite a bit of people who were stuck where I was. I'm sorry you feel as if this article was pointless and wasted your time yet still commented. So thanks for your support?

Collapse
 
snesi profile image
David Domingo

I completely agree. Although, I would add that if you don't know what you want to do. Toss a coin. Heads is JS and tails is Python. You won't go wrong with either one.

Collapse
 
thesnowmanndev profile image
Kyle Martin

That's one way to do it! Let fate decide!

Though, one could go wrong with either one. One is more for developing software, another is more for applications on the web. Not everyone wants to become a web developer. Just like not everyone wants to be a software developer. But if you don't care either way, let the coin decide! Though the biggest key is to commit to it.

Collapse
 
mmac profile image
Mike Mac

These discussions are frustrating as they're often based on misconceptions and outdated info. And when experts weigh in, it's usually not from the position of a beginner.

C# is no longer tied to Windows for instance, and is viable for many of these use cases. Great if you're indecisive.
And I would typically not tell a beginner to learn C++ in order to make a game (game engines maybe) .

When in doubt, choose what your friends are learning or JavaScript (Not sure who first said this).
Then just stick to it. When you get deep enough you'll develop transferable skills and knowledge..

 
thesnowmanndev profile image
Kyle Martin

I loosely followed the chart. I used it more as a list of possibilities in the programming world. For inspiration. Then if I questioned the charts accuracy I'd do some research. But keep in mind I've been interested in programming since 2007. So I have followed lots of trends since then. Just never really bothered investing time in learning as I was too busy establishing my career in the maintenance world. It wasnt till 2018 when I found the time to sit down and start trying to learn. Late 2018 I started with a Brad hussey udemy course for web development but I don't really like html, css, JavaScript much. Then I came across see brackeys vids on YouTube that got me to tinker with unity in early 2019 which is pretty c# heavy. I got busy with my career again for a few months and then had no desire to learn game dev because I was potentially getting out of the military as my enlistment was coming up. So I went back to web dev courses then Java. 2020 rolls around and still bouncing between web dev, c#, Java, and started to get overwhelmed by YouTube videos of a whole bunch of shitty information. Ended up reenlisting in March and the pressure to figure out what to do next in my career was calmed down. Took a break. Reflected. Came back and decided to take a more strategic approach. Everytime I started I just picked up what seemed interesting at the time. But never saw the bigger picture. And seeing small improvements felt like learning was taking far too long. This time however making the list, not only what programming language list but also lists of projects I want to make in the future allowed me to see I have a long way to go but the steps getting there are the most critical and they shall not be rushed. Essentially I had to take the advice I was giving to my students and their dreams of being top mechanics in the military and had to turn it to fit myself and programming. You cant just jump right in and expect to be making big visual gui / db heavy projects in a matter of a month. Especially with a family, full time job, gym life, etc. So listening to my own advice in my field ultimately allowed me to see the bigger picture in the programming world. That and the comment on YouTube basically made the mental stars align.

Collapse
 
fredrikbonde profile image
Fredrik Bonde

Frankly I wouldn't worry too much which language you pick. Once you got one or more under your belt swapping languages becomes more and more trivial. Of course, expect a bit more of a learning process to go to a functional language. Python is a good pick.

Collapse
 
thesnowmanndev profile image
Kyle Martin

Yup! But when you are stuck on the hamster wheel of starting one course for a language, making it a few weeks, seeing someone talk bad about that language you're learning and why it's pointless, and not knowing any better to not be swayed to another language is difficult. Thats why I wrote this. To help others break that cycle. I was stuck on it for 2 years often getting demotivated and taking a break to pursue a different hobby for a while. I guess it's more niche as most people seem to learn due to necessity to get a job where as I have a full time job as an instructor for Aircraft Maintenance so I could be more liberal with my time in learning to program.

Collapse
 
met_neuratec profile image
Markus Toman

Things would have been easier in 2007 ;)
I started around 1995 when things were even easier - C and C++ were basically a must. Java just crawled out of the womb and was so freaking slow that it was just awful.

Overall I would still recommend starting with C and work your way up if you got the time.
Otherwise jump in with python or JS like everyone else ;). And then add Java/C# or C/C++ later depending on where you want to go.

Collapse
 
thesnowmanndev profile image
Kyle Martin

I know the basics of Java / C# due to tinkering around over the past two years. Very interested in C as it seems so much has originated from it. In 2007 I was about to graduate from high school and the only programming experience I had was messing around with code in RuneScape and WoW private server sources. I didn't know what I was doing then. It was all C++ and Java back then. And MySql. I had to stop tinkering back then and focus on losing weight in order to join the military. Now over a decade later I am returning to my original interests.

Collapse
 
met_neuratec profile image
Markus Toman

Yeah it was a nice gradual flow. Starting out with C and then early versions of C++, which were close enough. From that jumping over to Java and C# was easy. Also because there were only a handful of libraries and frameworks compared to now.
Picking up PHP was similarly easy and was easy to do web work by the side. I could easily jump between Web Apps with LAMP, embedded systems in C++, network programming in Java etc.

Nowadays I dropped Web dev completely because you really have to devote and specialize in a (few) field(s) to keep up.

Which is where we end up with the dilemma in your article - got to pick a domain which then roughly dictates the set of languages that make sense.
Even if you can cover a lot with Javascript and react native, electron etc. or .net with xamarin, unity, ASP etc.

Collapse
 
golfreak923 profile image
Peter K Terlep • Edited

Major side note worth mentioning:
Kotlin's first widespread adoption was for Android, which is great!

However, I think with that, Kotlin's been mentally pigeonholed by the dev community as: Kotlin = just for Android--which couldn't be farther than the truth.

Kotlin is a FANTASTIC successor to Java for backend and has basically complete interoperability so Kotlin is almost a no-brainer at this point for me developing BE apps. It's so powerful, expressive, SAFE, useful, elegant, easy-to-read, that I really wish it became popular for the BE first. Even if Android abandoned Kotlin as its darling, Kotlin still stands on its own as a complete powerhouse for BE dev. I've never worked w/ a language that had such a high ratio of expressiveness,features,power,readability,safety to complexity. It's kind of an open secret medium-term goal of the Kotlin team to reach feature parity w/ Scala with obviously a much higher level of readability/grokability. They're clearly on track to do that which is is astounding considering that Scala is famously uber-powerful but also infamously crazy-stupid difficult.

It is worth mentioning that being the spiritual successor to Java, it does strongly draw on underlying Java idioms (read: e.g. Generics), which probably gives it a medium-steepness learning curve for non-JVM-experienced folks. But for those w/ experience, it was designed such that a dev can become proficient in a weekend. Which I was super skeptical of, but coming from a JVM-heavy background, I was shocked that it actually lived up to the hype in that I was running with it in a few days.

We have some very complex, data heavy applications running exclusively Kotlin in production and its been GODSEND to our project's velocity and defect rate. YMMV but I think this is a prudent time to make clear KOTLIN ISN'T JUST FOR ANDROID, IT'S A POLISHED, FIRST-CLASS BE LANGUAGE.

Collapse
 
thesnowmanndev profile image
Kyle Martin

Peter, I wish I could heart this comment 10 times over. Not only did you make me realize how tunnel-visioned I was with my view of Kotlin (as the only course I am familiar with that contains Kotlin is for Android App Development) you made me see that it is a spiritual successor to Java. How could I have been so blind! Also, you answered a question I just asked my self while I was working on a script in Python. I asked myself "Why hasn't someone created a Python-style language that has all the qualities that Java or C# has by not being dynamically typed?" and as I read your reply it clicked! Thanks!

Collapse
 
golfreak923 profile image
Peter K Terlep • Edited

Absolutely, brother! I'd even go as far to say as they took the best of Java, Python, Swift, JavaScript, Lodash and probably a dozen other languages/libs, thought long and hard about it put together a true joy of a language to use. The static analysis checks enforced by the compiler are magic in a bottle.

I think the optics/PR issues on this one run deep. From the get-go, it was designed (and has always been) as a truly general-purpose language but given its first widespread use was for Android, you have to think about the competing mobile languages at the time: Objective-C = for mobile only, Swift = for mobile only so it was only natural for the masses to assume: Kotlin = for mobile only.

To complicate things, Java is clearly showing its age and the dev community is (rightly so) critical of its verbosity. There's still a sizable minority of people holding onto the dated and no-longer-valid sentiment that the JVM is slow because they tried it in 2000 and it was slower than C++ and never checked back in 20 years later now that it's fast, more usable, has gotten onboard with functional programming, made web programming and threaded programming vastly easier, yada yada. And since Kotlin is JVM, they might even think it's slow. Even those that knew Kotlin was general purpose may have had mixed-to-poor past experiences w/ Scala, Groovy, Clojure and had given up on alternative JVM languages entirely--relegating Kotlin to "just another clunky/weird JVM language" before even trying it. (Honestly, who's to blame them.)

Real-world numbers are showing that on average a project converted to Kotlin is 30% as many lines as its Java couterpart. When you really embrace its idioms, it's more like 20%.

Those that are waking up are discovering that "Wait, you mean to tell me I can still call any of the super-useful millions of 3rd party Java libs...in an expressive, compact syntax...that's head-and-shoulders safer than any of the languages that influenced it...is immensely readable/elegant...still gets the benefits of the most sophisticated garbage collector...use Spring Boot or a bunch of other microframworks...iteratively mix it in to my existing Java projects...convert my legacy projects to it...use the gradle build system with my gradle files written in Kotlin...write my own DSLs...be as object-oriented or as functional as I want...execute fast...execute elegantly in parallel or async...execute anywhere...have my build fail unless my entire AST is type-safe and null-safe...have first-class support from IntelliJ because Jet-brains wrote the damn thing...use all the advanced built-in Java data structures.............Hot damn, this is slick AF".

Thread Thread
 
thesnowmanndev profile image
Kyle Martin

You sold me. When I get to the point I am comfortable with Python and can solve some medium / hard questions on sites like algoexpert or hackerrank and think up an application / develop it then I will pick up Kotlin. Maybe 6 months to a year! Depending on how much I work at learning / retaining.

Thread Thread
 
bloodgain profile image
Cliff

One gotcha with Kotlin is that because it's developed by JetBrains, which is a Czech company with a lot of developers in Russia, it's a no-go for US Defense or Federal Government software. This is not, on its own, a reason not to learn it. But since I noticed that you currently work with the US Air Force, and that experience might be beneficial to you getting Defense contract or Government jobs, you should know that you're not going to find a posting for a Kotlin developer there.

Thread Thread
 
thesnowmanndev profile image
Kyle Martin

Interesting. I didn't know that. I thought Kotlin was developed and supported by Google. After I retire from the military in my current trade idk if I'd want to continue in that line of work in a new field you know? I joined the military fairly young and you give up a lot of freedoms working for the DoD and FAA. Though the grass is always greener on the other side and I'm sure you give up a lot of freedoms working for any corporation.

Thread Thread
 
oloryn profile image
Ben Coleman

You may be conflating Kotlin with Go, which was developed and supported at Google.

Collapse
 
codemouse92 profile image
Jason C. McDonald

Worth mentioning, Python is consistently in the top three highest paying languages in the industry, even outside the context of the "Big Four". I also saw nothing in here about data science, machine learning, or embedded technology, which are major sectors right now.

Collapse
 
thesnowmanndev profile image
Kyle Martin

That they are Jason! Thanks for the reply. That is good for people to know if they don't quite know what Python is capable of or the subfields in python! I know little to none about those major sectors so thanks for mentioning them. They are intriguing. Jabrils and Mark Rober use them on YouTube for some AWESOME content.

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

(Side note, COBOL, FORTRAN, and PHP aren't "popular" any more, but there's a lot of very well-paying demand for programmers who are proficient those languages.)

Thread Thread
 
thesnowmanndev profile image
Kyle Martin

I keep hearing "PHP is dying" which may be true but you definitely bring up that it is still around. There are tons of companies in the world that use those languages and pay well as you said. I think people get hung up on FAANG or startups too much. When in reality almost every company needs developers for something.

Thread Thread
 
codemouse92 profile image
Jason C. McDonald