DEV Community

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

How I chose a programming language and beat bad habits

Kyle Martin on June 21, 2020

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 mark...
Collapse
 
bahaelaila7 profile image
bahaelaila7

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.

Collapse
 
stojakovic99 profile image
Nikola Stojaković

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

Collapse
 
gwutama profile image
Galuh Utama • Edited

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.

Collapse
 
robertomaurizzi profile image
Roberto Maurizzi

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.

Collapse
 
bhupesh profile image
Bhupesh Varshney 👾

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

Collapse
 
fasani profile image
Michael Fasani

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.

Thread Thread
 
robertomaurizzi profile image
Roberto Maurizzi

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

Thread Thread
 
fasani profile image
Michael Fasani

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.

Thread Thread
 
robertomaurizzi profile image
Roberto Maurizzi

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)

Collapse
 
codeminion profile image
code-minion

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

Collapse
 
thesnowmanndev profile image
Kyle Martin

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

Collapse
 
tylerl profile image
Tyler Larson

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.

Collapse
 
developmind profile image
Dirk Detering

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.

Collapse
 
thesnowmanndev profile image
Kyle Martin

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.

Thread Thread
 
tylerl profile image
Tyler Larson

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.

Thread Thread
 
thesnowmanndev profile image
Kyle Martin

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.

Collapse
 
thesnowmanndev profile image
Kyle Martin

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.

Collapse
 
kelerchian profile image
Alan

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

Collapse
 
thesnowmanndev profile image
Kyle Martin

Not sure what you mean by this.

Collapse
 
icidel profile image
del65 • Edited

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 ! :-)

Collapse
 
bloodgain profile image
Cliff

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.

Collapse
 
miketalbot profile image
Mike Talbot ⭐

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.

Collapse
 
thesnowmanndev profile image
Kyle Martin

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

Collapse
 
miketalbot profile image
Mike Talbot ⭐

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

Thread Thread
 
thesnowmanndev profile image
Kyle Martin

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.

Collapse
 
ultrasamad_22 profile image
Ibrahim Abdul-Samad

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

Collapse
 
miketalbot profile image
Mike Talbot ⭐

That is a very good point :)

Collapse
 
tom5079 profile image
Pupil

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

Collapse
 
thesnowmanndev profile image
Kyle Martin

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

Collapse
 
tom5079 profile image
Pupil

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 :)

Thread Thread
 
thesnowmanndev profile image
Kyle Martin

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.

Collapse
 
bdemchak profile image
Barry Demchak

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

Collapse
 
thesnowmanndev profile image
Kyle Martin

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

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
 
thesnowmanndev profile image
Kyle Martin

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!

Collapse
 
programmermesh profile image
Meshach Joseph

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.

Collapse
 
thesnowmanndev profile image
Kyle Martin

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

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
 
robertomaurizzi profile image
Roberto Maurizzi

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? 😅

Collapse
 
gwutama profile image
Galuh Utama

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.

Collapse
 
thesnowmanndev profile image
Kyle Martin

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.

Collapse
 
emlautarom1 profile image
Martín Emanuel

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

Collapse
 
bukazoltan profile image
bukazoltan

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

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
Collapse
 
carlosiscoding profile image
Carlos Arredondo

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.

Collapse
 
thesnowmanndev profile image
Kyle Martin

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

Collapse
 
carlosiscoding profile image
Carlos Arredondo

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.

Thread Thread
 
thesnowmanndev profile image
Kyle Martin

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.

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
 
macdub profile image
John McDowell

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

Good luck with your endeavors!

Collapse
 
thesnowmanndev profile image
Kyle Martin

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!

Collapse
 
seanthorpe profile image
seanthorpe

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.

Collapse
 
nicolus profile image
Nicolas Bailly • Edited

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.

Collapse
 
thesnowmanndev profile image
Kyle Martin

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.

Collapse
 
bloodgain profile image
Cliff

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.

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

Collapse
 
dogofourrant profile image
Daniel

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.

Collapse
 
thesnowmanndev profile image
Kyle Martin

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

Collapse
 
aryajur profile image
Milind Gupta • Edited

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

Collapse
 
thesnowmanndev profile image
Kyle Martin

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.

Collapse
 
jamessm44285269 profile image
JAMES SMITH

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

Collapse
 
daibushi profile image
Jaderson Nascimento

Good Luck Man.

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
 
connor11528 profile image
Connor Leech

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