loading...
Cover image for How I chose a programming language and beat bad habits

How I chose a programming language and beat bad habits

thesnowmanndev profile image Kyle Martin ・5 min read

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

Posted on by:

thesnowmanndev profile

Kyle Martin

@thesnowmanndev

An experienced mechanic and instructor with 10+ years of experience. Currently working on his bachelor's in Software Engineering. I teach airframe, powerplant, and general aircraft maintenance courses

Discussion

pic
Editor guide
 

Hmm.
I think you are missing something in this process.
You ended up selecting languages that are the very top in meeting each individual objective, and pretty much had to sacrifice one or two objectives after tallying the points.
However, there is a better choice I think, a choice that does well-to-excellent on all of your objectives: JavaScript.
0- Like python, JS is dynamiclly typed and relatively easy to learn.
1- desktop apps : electron (like atom, slack) and others.(probably it's weakest here, but still not too bad at all, and we are putting everything on the web nowadays anyhow)
2- plenty of android/iOS frameworks.
3- king of the web : solid eco system for backend(nodejs) , and the only one in frontend (react, angular,vue...etc). Full stack: MEAN, MERN stacks..
4- also has tons of frameworks to build games/highly interactive content. Also webgl...etc
5- plenty of JavaScript jobs everywhere for the above reasons.

Nonetheless, the language itself is hardly the major part here, it's the frameworks/libraries and ecosystem.

These are just my two cents.

 

Just because you can doesn't mean you should.

JS is quite poor choice for games, except if you're working on something simple. Electron is a huge memory hog and there are much better solution for desktop application development in pretty much any other language (JavaFX, Qt, Gtk etc).

 

I hate it that electron apps (skype, teams, vscode, slack) always wake up my CPU even when I do nothing and even when they run on the background. Not sure whether it has to do with electron but I‘m sensing a pattern here. It’s really important for me because I use laptop for work and i feel that running these apps even in background has been draining my battery quite a bit.

 

As much as I hate JS and its 'ecosystem' I have to agree with you.
That said I can't wait to have WASM working properly so we'll finally be able to use any language we want for the web.

 

IMO you can already do that, you run any language you want on a server and you AJAX data to the front end. I do not think WASM will change that, it just replaces some AJAX. Currently, WASM can not modify DOM so you will still use JS. You pass input to WASM and you get back output. It basically moved some server logic to the frontend.

Not really: you can create language-specific libraries that then do call Javascript for DOM operations and allow you to register callbacks.
After that you can use, for example, your language decent type management, decent inheritance support, good standard library to write complex interfaces much more easily than with a language where 1+'1' is '11' but 1 - '1' is 0, has undefined, your best object extension option is to use a mixin and where you need to import half a million files to avoid reinventing the wheel... ;-)

I am super interested in WASM but just playing devil's advocate here. I also think we could do away with the DOM and simply render in WebGL. Are you doing something in WASM already? Any language preferences there? I am considering Rust.

I've seen some examples in Rust (using a library for very basic DOM manipulation) and tried Mozilla's Python "notebook" environment Pyodide.
I'm also experimenting a bit with Transcrypt Python-to-JS transpiler, but nothing is going to production soon (real work or games)

 

Agreed, WASM is the only good thing that has given me hope for the future of web tech

 

If my recommended news is to be believed, you should learn Deno rather than node now

 

Thanks for your reply! All good points! I updated my post to be more clear with the issue I and others get stuck in.

 

You missed something HUGE: a programmer who only knows one language is like an artist who only knows one medium, or a musician who only knows one instrument, or a farmer who only knows one crop. You'll have a favorite or two, but if you only ever learn one, then you never actually learned even that very well. Convincing yourself to even TRY to learn a second language once you know one is the hardest part; I'd recommend learning your first two concurrently. Once you know two languages, learning each new one takes a few days, eventually just hours.

 

I would support that only partly, especially as this advice fully ignores his well stated problem.
Pick ONE language, get fluent in it, feel comfortable.
Once you got to that point, learn a second and third language to evolve to the next step.

Trying to learn two languages in parallel as a beginner is confusing and distracting, perhaps frustrating.
Either it doesn't help because the languages are too similar and you struggle too much wasting time with learning two syntaxes instead of concepts, or they are too different and the different concepts or their interpretation put an additional burden on the learning process.

This is btw even true for artists: You mostly learn to get comfortable with one medium/instrument to get a grip for the basics of the art (Observing, estimating proportions, shadow and light, view angle / notes, harmonies, rhythms, dynamic) before you start transforming your experience to a second and third medium.

 

Thanks Dirk for truly understand the point of the post! It is insanely confusing to learn two languages at once. Similar to if you tried to learn the piano and the guitar at the same time you would get frustrated of all the issues that would pop up. All of the "advanced" stuff comes eventually. But in order to get past the basics you need to get a grip on one.

I've taught programming pretty extensively in a non-classroom context, (mostly at work, but some family) such that I follow the same students for years, and here's the tactic that I've found works the best.

Pick a "primary" language to learn, and a "comparison" language. You'll do the majority of your work with the Primary language, and the useful things you build will be built in that language. But for each concept you learn, you become familiar with the parallel concept from your Comparison language. Perhaps not well enough that you'd be comfortable writing something new in that language, but comfortable enough that you can read and understand other people's code. Obviously this is a lot easier if you have a teacher who knows both languages well.

A key point here is to get an evidenced-based understanding of what concepts carry over from language to language, which concepts are parallel and just differently expressed, and which ones you have to start over fresh. Plus seeing that different languages can make it easier or more difficult to tackle certain kinds of problems is instructive.

An example is during COVID lockdown I taught my 11-year-old how to program using Lua (primary) and Python (comparison). Lua was the primary because the objective was game scripting in Roblox. But Lua has some funny little quirks (as does Python I suppose), and it's much easier to understand the reason to jump through certain weird hoops when writing Lua if you can see the same techniques expressed natively in Python.

That's an interesting tactic. I could see how the would be useful as they cross bleed into each other but could also slow down process and demoralize someone if they get overloaded easily. But like you said only write in one so that would dampen the overload process.

 

Thanks for your reply Tyler. I updated my post to reflect my true context. I was not saying you need to live, breathe, and eat just one language till the day you die. I meant more in the tone that programming is essentially a sky scraper and if you don't get past the first step you will never make it to the top of a staircase.

 

Thoughtworks technology radar mentioned this
thoughtworks.com/radar/techniques/...

 

Not sure what you mean by this.

 

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.

 

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!

 

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".

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.

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.

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.

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

 

I'm having a "similar but opposite" problem that might even be what you'll find next in your programming adventures: I've been coding for decades but recently I decided I'd like to start making games, mostly for fun (so, no obvious corporate or career constrains nor directions). I'm currently conflicted between:

0) Using Python since I already know it well (and work with it daily) but the limited choice of game engines are limited to computers and aren't exactly top notch.
1) going Javascript (I don't like it, but it has a nice game library -Phaser- and can be ported everywhere)
2) Learning C# (I like the language but I don't like Unity's UI and their "new subsystem of the week" development approach)
3) Brush up my C++ from 30 years ago and use Unreal (I like the language but it's a slow going and more importantly Unreal is mostly targeted toward BIG 3D games and that's not good for independent developers working in their spare time)
4) Use this as an excuse to learn Rust (there' s a very nice, wonderfully complete tutorial to create Roguelike games in Rust). It almost worked... but in the end Rust's current frameworks are more or less as limited as Python's. WASM is promising... but at this point maybe we can WASM Python too?

ARRRGH :-D

I do agree very much with your general idea but your approach doesn't resolve my indecision. What to do? Roll a dice? 😅

 

I‘ll play devil’s advocate here. 😀

Brush up your C++. Latest standard is C++20. Modern language. Zero cost abstraction. You got all the power you need. Using smart pointers you dont even need to manage memory manually anymore. Haven’t needed to do it since C++11.

Python too slow? Write C++ library (or use an existing one) and build python module from it using swig. Call your performant C++ library from your python code.

Want WASM? Compile your C++ code with emscripten. Call it from javascript.

Downside of C++ is package management though. There are some but there isn’t really de facto standard package management for the language.

Mobile and desktop apps? Use Qt/QML.

This is exactly the reason why I’ve been so unmotivated to learn rust: I got better results with C++ for systems programming. For prototyping, small apps and scripting I use python all the time anyway. I also use JS from time to time for frontend stuffs.

So right now I‘m settling for Go for backend purposes. I’m still learning it. I think It’s a good middle ground between performance, security, development speed and popularity.

 

Yeah that seems like an issue very similar to mine. Just more advanced. From a beginner perspective I'd say you are at the point where you wouldn't really struggle with the language aspect. You are at the same point I was but with game development engines. Just pick the one that interests you most. Unreal is really friendly for small team or individuals. Same with unity. Godot I hear is nice too but still in the "infancy" stage. Epic gives free assets every month to unreal users. Even if you just have a unreal account.

 

You could use C# with MonoGame. I've heard a lot of great things about it!

 

I can also recommended the Godot engine. Not really strictly C# but very close.

 

A lot of other very useful comments already, so this may echo some of those... Learn any language until that language isn't what you think about, as soon as you are thinking about data structures and data flow you can start to hop languages and choose another.

The second language you learn should be a pragmatic way of expressing the things you do the most, or it should be the most performant way of building what you want (either performant based on time to code a solution or on time to execute depending on what you are building...)

Right now the best utility language in the world in Javascript. You can write servers, games, front ends, and whatever else you like in it. There is a massive open-source community and there are many learning resources. Typescript makes Javascript much more like C#, teaches good practice, and is completely compatible with Javascript. Python is a great language too, but there's much less of a demand for it from my experience.

So, sorry if this doesn't match, but I'd say learn Typescript or Javascript.

 

"Learn any language until that language isn't what you think about, as soon as you are thinking about data structures and data flow you can start to hop languages and choose another". This. I agree wholeheartedly. My post was to get other people stuck in the "this is how you do arithmetic operators, expressions, if loops + random videos /articles that appear saying why the language you are currently beginning to learn is dieing and why you are wasting time" hell that some people get stuck in. Like I was.

 

Yeah absolutely, if I came across as questioning your motivation and method then I misspoke. I applaud the principle, just wanted to point out that "reasoning out which language" has complexities...

You didn't. And yes I agree. But sometimes it's better to be broad and make a list with your basic understanding of which language is good for what that can be attached to your goals. As people are in a trade for longer and gain more understanding and they won't be as easily swayed as they when they are blind to everything.

 

You could literally stop after your first paragraph.
"Learn any language until that language isn't what you think about"

 

That is a very good point :)

 

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.

 

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.

 

(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.)

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.

 

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.

 

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.

 

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.

 

All awesome comments! But I was going with a more broad context here. Learning frameworks is important. Data structures is important. Both will happen. But this was to get out of the bubble of learning the bare basics of a language and moving on. To get the discipline to see the bigger picture and not be swayed by every YouTube video that appears and says something along the lines of "why JavaScript sucks and you should learn blah blah language" or "why c# is dying in 2020". There's are tons of people that don't know any better, I was one of them, and you not only get stuck in tutorial hell but basics hell.

I was not saying only learn one. Obviously you bounce around from language to language as you need for projects or jobs but at the point where you are getting paid for it you have the knowledge to be able to be fluid with languages. But as beginners that's not really the case. This was to get people out of the stuck perpetually as a beginner stage.

It seems like most who have commented haven't had this issue. But that's for solid advice!

 

"If you want to truly become a software engineer or a developer you need to pick a language and stick with it."
I disagree. True software engineers can pick the languages that is most appropriate to finish the given task, often mix and match multiple languages for performance boost.
For example, you can use C with java through JNI call, you can use assembly (I know it's an extreme case!) with C, etc.
Choosing a language and sticking with it might be a good strategy for beginners to avoid going down rabbit holes. But more important thing for software engineer is the ability to solve complex problems programmatically other than the knowledge on specific programming language.

 

"True software engineers can pick the languages that is most appropriate to finish the given task, often mix and match multiple languages for performance boost"

You are correct! They do. However, the person who wrote that comment was simply pointing it towards beginners to motivate them. Which it did, it at least motivated me. As beginners use that to motivate them and commit to a language, over time they will become proficient enough to know that they are no longer stuck and they can branch out into other languages without getting them no where. The context of this post is to get people who are stuck in the learning the basics stage / getting swayed out of continuing to learn that language because this YouTuber says to stage. When they stick with one for longer than just the basic fundamentals of the language they will get the confidence to do what you are saying. Until then they need a little nudge to not listen to naysayers.

 

Yes, I completely agree to your point. What I wanted to say was YouTube comments are full of gibberish and they seem like they don't know what they're talking about :)

That they are. Most of the time it is from novices that are just spewing out stuff they heard from other people either in comments or in videos.

 

Keep in mind that the language is another tool in your toolbox.

Good luck with your endeavors!

 

Yup! Plan on learning Python, JavaScript, C#, and Java in the future as well as computational thinking and any other things that come with the trade. But for now I'm diving into one. Baby steps. Thank you!

 

I had to learn C++ and Python for my intro classes in school (currently working on my Associates in CS) but when it came time to picking a language to concentrate for the rest of my degree I struggled to pick one. I finally picked Java for many of the same reasons you listed. Learning all the other stuff is easier when you already know the language and don't have to worry about looking up syntax all the time.

 

Plus Java transitions into other language fairly easy. You won't have an issue going to C#.

 

That is good to know and makes me feel even better about my choice. I had a hard time going from Python to C++. And I wouldn't say I am proficient in either, but the next year of school will be all in Java if I get all the classes I picked. Learning algorithms, structures, OOP, and all the other stuff will be my primary focus after summer classes.

I hope you get em! Java seems like a great language to learn. You should check out the site hackerrank. They are pretty good at starting you off easy and getting really hard the more you accomplish. They teach you algorithms and structures. Nick White on YouTube also has tons of videos from them.

 

Having been on this treadmill for several decades, I can appreciate Kyle's approach ... and his conclusion is decent. Two things to add that all y'all seem to have missed.

1) Committing to a language is only half the story. Equal productivity and value comes from committing to the libraries available to a language. Similar library systems for Java and Python, and vastly different for JS. The choice of language and libraries enables certain market segments and discourages others. Big question: what do you want to produce after learning a language?

2) Whatever you choose to learn, dive in with real projects that pose unanticipated challenges. And along the way, read read read lots of great code. Great coders teach subtlety, appropriateness, and approach.

Both of these make all the difference.

Oh, and by the way ... programming is only half the story. Software engineers are far more than programmers. But that's for another day ...

 

Great points Barry! Both very important lessons to learn on the flights of stairs in the developer's skyscraper!

 

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.

 

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.

 

Programming languages inherit their abilities from paradigms : procedural (aka "spaghetti code"), object oriented (aka "inheritance mess"), functional (aka "stateful memory + stateless statements = call stack hell"), deterministic (aka "proven state machine"), genetic (aka "virtual stupidity"), to name a few ones...

All those languages are in fact translated at compilation time to Assembly, which is in fact a good old Turing machine.

You don't need to understand paradigms to be an average software developer, but if you do a training on school you will receive a glimpse of why paradigms are crucial to make future-proof code which will run even on a Mars rover, and turn unexpected crashes into a quick and safe fallback (... because... Hey ! shit happens !).

Please follow my advice and learn programming paradigms before any language. You will thank me later ! :-)

 

It's very difficult to learn programming paradigms without some context, which means knowing at least one language. In fact, Python is capable of multiple paradigms, so you could learn them that way.

Also, nothing in a modern computer is a Turing machine. Don't confuse Turing complete with being a Turing machine. For one thing, a Turing machine, by definition, has an infinite memory tape. Also, implementing a computer as a Turing machine would be extremely inefficient. Modern computers are essentially von Neumann architectures or (modified) Harvard architectures, depending a little on whether you're looking at them from the outside or the internal structures.

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.

 

Pick one language find comfort in it, then move to learning another.

Over time I have developed application using different stack. But then I made decision to be more of a frontend developer using Angular. Then I moved to using ionic for mobile app, while because it was easier since both uses typescript, just needed to no the basic syntax for ionic and am good to go. Now I picked up node for backend but using nestjs since it uses typescript too. It became simple since I just have one common thing in them which I have learnt over time which is typescript.

However, doesn't mean I don't write ASP.Net core or use other frontend stack. I do use ASP.Net and Angular for my daily office job. But then grew out of it to learn ionic and node(nestjs) cos of typescript.

 

"Pick one language find comfort in it, then move to learn another.". Probably the most important lesson for people who are stuck like I was. Well said Meshach!

 

I will add a consideration that a noob programmer doesn't normally consider...

How likely is it that this language I choose
will become worthless trash in less than a decade?

I have had it happen 4 times.
VB6 (work chose)
Visual FoxPro (work chose)
Flash/Actionscript (I chose too late)
ColdFusion/CFML (I chose)
+++++
I agree with his choice now for: Python.
After that, I would say: Flutter or GO.
+++++
But really it's all down to use cases... which language can do what... and do I want to work, for someone/in a career, doing that use case with that language.

 

After that, I would say: Flutter or GO.

Flutter is not a language though. It's a framework for Dart. The thing is Flutter is the only reason you'd want to learn Dart today, which would make me hesitant to recommend it.

Go is a really nice language and is getting a lot more traction than Dart, so it's probably a good choice, even though I might not recommend it as a first language du to its singular approach of OOP. All in all, I agree that starting with Python and then trying fancier languages like Go or Kotlin sounds like a good strategy.

 

That's the gist of my post. I was stuck in a "I don't really know what I am doing or much about the industry as I am an aircraft maintainer by trade so I will be skeptical of every language due to the trade is so fast pace and fluid. So when I see a YouTube video that says 'why this language is dying' I'm going to believe it and if I'm learning that I will be swayed by it and then be at square 1 again" stage.

 

You've got the right idea. If you pick one and stick with it while you learn how to program, you'll never be at square one again. A lot of what you learn will translate wonderfully to another syntax. What's important is making sure that you're learning to write software rather than just learning that specific language -- there are different types of courses out there. By contrast, I would want the latter at my stage. I don't need to be taught the fundamentals, data structures, or even a lot of more complex topics, just how to think and talk in the new syntax and a little about the memory model and other underpinnings.

 

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

 

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?

 

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..

 

Do you consider Swift to niche? I love it. I tried learning Java twice and hated netbeans and it’s declaring. It also has a confusing and bloated syntax. And python is good but not mobile focused.

 

Nope! Swift is the primary language for iPhones right? That's one of the biggest platforms in the world.

 
 

Try some freepascal/Lazarus and try not to get hooked.

 

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.

 

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.

 

You should have a look at Lua. That is what I ended up with 10 years ago and nothing could replace it till now.

 

I've looked into Lua many times as that's how you make WoW add-ons. Very interested in it. I'm sure I'll learn more than just "what is Lua" in the future.

 

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

 
Sloan, the sloth mascot Comment marked as low quality/non-constructive by the community View code of conduct

Thank you for your post! Thank you for taking the time to write it.

I would like to help you out, so maybe this will be "that comment" which helped you out, in the very near future (perhaps if something happens with New York, or the Hoover Dam...)

youtube.com/watch?v=fafxhMLeGeA&li...

 

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