DEV Community

How many languages should I learn

Hunter Drum on October 10, 2018

First, I just wanna give a little background. I've been working with Java for little over a year. I've come to be rather bored with the syntax (.t...
Collapse
 
david_j_eddy profile image
David J Eddy

In my opinion completed and successful projects are more important than the number of languages you know. Any good dev will be willing to learn new languages and tech to bring value to the organization. That is really our role, bring or build value. At the end of the day we as developers are employees by an organization to add value via completing tasks as quickly and of the highest quality possible.

As for Java's influence on Kotlin; well, yea. Kotlin is an abstraction of Java. Java being the only language that runs on both iOS and Android it works out well as a tool to write once and publish everywhere.

The more language you pick up the more you realize they are all abstractions of C or C++. PHP -> C. Swift -> C, Unity -> C# -> C++, Golang -> C. Learn C, Javascript -> ... this one I actually do not know. I would pick one or two to master learn others as needed to accomplish tasks.

Do not worry much about forgetting parts, that is what documentation is for. Knowing where to find the answer is often just as important as knowing the answer.

Collapse
 
nepeckman profile image
nepeckman

Javascript -> ... this one I actually do not know.

I'll help you with that one: Lisp!

Collapse
 
david_j_eddy profile image
David J Eddy

Did some research and wow. That is a very interesting piece of history. Thank you for this.

Thread Thread
 
kip13 profile image
kip

Can you put the link or links of that research ?

Thread Thread
 
david_j_eddy profile image
David J Eddy

The two I found during the quick research was
raganwald.com/2013/07/19/javascrip... and stackoverflow.com/questions/503028....

Collapse
 
thebadgateway profile image
Will F

Interesting!

Collapse
 
thebadgateway profile image
Will F

JS has the switch statement, in addition to C-like typing -> reminds me of C (and Java to to a lesser extent). That said, I don't use or really like JS

Collapse
 
nepeckman profile image
nepeckman

I wouldn't worry too much about forgetting parts of languages you already know. You might forget a language that you don't use, but I've never forgotten a language because I learned another. If anything, the opposite is true: learning another language gives you new insight into one you already know.

To address the question "How many languages should I learn?", you should consider what your goals are. If you want to get into web development, you need JavaScript. If you want to get into iOS, you need Swift or Objective C. If you want to get into data science or scientific programming, you should probably learn Python. If you are just looking for any programming position (especially entry level positions), your employer will probably care more about your software engineering knowledge than which languages you know. I got my first internship writing JavaScript without having any prior JavaScript experience. As a final note, if your goal is to become a better programmer, I'd recommend learning C, a Lisp (my favorite is Clojure), or a static functional language (Haskell, OCaml/ReasonML, Elm). You may never use those languages at your work, but they change the way you think about programming and make you a better programmer.

Collapse
 
drbearhands profile image
DrBearhands

Which I realized isn't career smart

This is not as one-dimensional as you might think. Yes there are many vacancies for Java, Kotlin and Go. Are they fun? Does the language incentivize innovation? What is it used for? Who are you competing against? What is the momentum of the language?

Personally, I would rather quit development altogether than doing the average Java job. But that's personal preference.

Kotlin and Go attempt to convert Java devs and stay within those devs' comfort zone. So they are not very different from what you already know.

If you want to explore what else is out there, here's a list of programming-language related stuff as diverse as I could make it:

  • logic programming (Prolog)
  • functional programming (Elm, Haskell)
  • Dependent Types (Idris, although you should probably get into FP first)
  • High Performance Computing multithreaded in C (OpenMP, Cilk)
  • HPC SIMD (OpenGL or WebGL shaders, OpenCL)
  • Linear Types (Rust)

I'm pretty sure each of these has pretty much cults surrounding them.

Then there's a lot more to development than what language you work in.

  • Big-O
  • category theory
  • the CAP theorem
  • the halting problem
  • the Curry-Howard correspondence
  • compilers
  • concurrency theory
  • quantum computing
  • profiling
  • ...

and there's also related subjects:

  • linear algebra (tip: start this through graphics)
  • testing
  • agent systems
  • machine learning
  • cryptography
  • scientific reading and writing
  • computer architecture
  • ...

This is all just from the top of my head.

You're a Java dev, so you should be able to land a stable job reasonably easy. I reckon it's more important to discover a subject you love.
Look around a bit and see what interests you, and never believe somebody who tells you something is "hard" if it's not prefixed by "np-".

That said, tux0r makes a really good point about COBOL.

Collapse
 
theredspy15 profile image
Hunter Drum

I just wanna clarify on the "not career smart"

I meant by that, Nim isn't the most common language, especially when working on any full scale project. So I decided against it, as learning something like Go, is (very) fun & widely used

Collapse
 
drbearhands profile image
DrBearhands

I know, but sometimes small quantity means great quality. A manager who decided to use Nim is going to be very different from one who decided for Java, C# or Kotlin (Go is still a little bit edgy). Find something you love and it'll be much more likely that your desires and the ones of the company align.

Oh BTW, not saying you should learn Nim specifically, I know next to nothing about it.

Collapse
 
ghost profile image
Ghost • Edited

I think the level up from languages is more important: programming paradigms, algorithms, architectural patterns and designs etc.

IMO the language is less important, since programming languages are after all (at risk of getting a bit geeky, but it's worth it) "Turing complete", meaning that, at the end of the day, they are all functionally equivalent.

en.wikipedia.org/wiki/Turing_compl...

So the level above language includes what paradigms you apply, such as object-oriented and functional, and architectural principles, such as the model/view/controller or even design patterns like composite, iterator etc.

I would go for whatever language allows you to express this stuff so that you can make cool stuff and get money.

I used to be really into Java and C++, going deep into all the philosophical stuff about what is good code design, and nowadays I find I get everything I need out of plain old JavaScript. I get a perverse joy out adapting algorithms I used to do in C++ in JavaScript ;)

Although Java..is probably more of a "platform" than a language, since being proficient in that means knowing a ton of frameworks in order to be productive! I'm a little uneasy about Oracle owning it TBH.

On my list of languages to learn is definitely python, and then probably Go.

Collapse
 
tadman profile image
Scott Tadman • Edited

It's not how many languages you learn that matters, what's important is the kind of languages you learn.

At a very high level, Java, C++ and C# are all fairly similar. If you learn one your knowledge will be fairly portable to the others, but learning another won't really improve your understanding on the whole. They all approach problems in largely the same ways.

You need to get way out of your comfort zone before things get interesting. Consider Ruby, one of the Smalltalk languages, which is considerably different from how statically typed languages like Java work. Even though it's object-oriented, there's a philosophy at work as to how to apply that which leads to simple, elegant solutions you'd never think to try in Java.

Try a logical language like Prolog where you don't so much program as you specify rules for how your program should behave. This is in contrast to imperative languages like Java where you must communicate in specific terms exactly what steps to perform.

Experiment with hardware-design languages like Verilog where you're working with blocks of code that end up making circuits, not instructions that a CPU executes, and solutions are expressed as a series of gates all working in parallel.

Then there's tools that aren't exactly a programming language, but aren't not programming languages either, like Mathematica, a very powerful math toolkit. It's a method for expressing mathematical operations in ways that the computer can understand and compute, giving you very powerful tools for working with data.

You may also want to try functional programming languages like Haskell or Erlang because of their often wildly different structure from conventional object-oriented Java code. Interestingly some of the approaches that these languages prefer do translate to Java and can give you new tools for solving problems in your Java work.

From an academic perspective the most important thing is for your next language is as different as possible from what you're used to.

Collapse
 
bbrewder profile image
Brian Brewder

Frameworks are more difficult to learn than languages, therefore more valuable to employers. For example, there is a big difference between building websites and creating mobile applications. Both projects might use Java, but the skill sets are very different and can take years to truly master. If I was hiring for a position building mobile applications for Android, I probably wouldn't hire a web developer even if they knew Java.

As others have answered, I would recommend that you figure out what you want to do and learn about that in depth. Understand the basic architecture, pros and cons of the available frameworks, etc.

Also, I would suggest considering the possibility that if you are bored with Java, it might be because you don't know enough about it yet. :)

Collapse
 
defiance profile image
Defiance Black • Edited

until I land my first job.

Disclaimer: I've been programming for an even shorter time than you.

Thoughts: Until you land your first job, does it really matter what you know as long as it's within the top 10? In the case of Java, that's top 5, no?

Go looks nice and futuristic, but your dream job may be a Java job. There's really no way to know. And so, I would say, the next language you learn should be less job focused and more something else focused. What's missing from your toolbox? Java can already do a lot. It's not like Java is going anywhere.

I don't think you'd be hurting your job prospects by delving deeper into the language -- if you like writing code in it. This doesn't mean you'd be hurting your prospects by switching either. If you have no job experience, I don't think it'll matter to the first person that hires you with that understanding; soft skills like learning ability and team fit would be a bigger deal, imo; with no experience they don't/shouldn't expect any superstardom, just a willingness to get better/self-teach -- being an expert is something only time can allow.

Collapse
 
kspeakman profile image
Kasey Speakman • Edited

I would say the number you learn does not matter that much. It is more about whether you have a reason (or feel a pull) to learn that one language. In general, it is good to learn new things when you have the desire and opportunity.

I think you'll find most languages to be different window dressings on top of the same concepts. But there are a few different families of languages that could expose you to different ways of solving problems. Procedural, Pure OO (not what you normally see in Java -- look up Sandi Metz book/articles/videos), Functional, Lisps. I've been meaning to try Clojure myself, which is a Lisp... desire, but no good opportunity.

Collapse
 
buphmin profile image
buphmin

So I started to learn programming with PHP about 4 years ago. I started with some data processing connecting to some APIs then moved to web with Symfony. If you work in full stack web then javascript is required. For about 3 years I let myself stagnate, per se, in learning new languages and simply learned everything you could do with PHP and js. ES6 and PHP7 came out in that span which added some nice goodies, but for the most part I focused on making PHP and JS better. Added in webpack, abstractions, integrating kafka and plenty of other good things. Then I discovered Typescript and realized I was missing a lot.

While typescript is 98% js it got me thinking and I had the opportunity to pick a new language for a small project. I decided to learn Go while completing the project to give me some experience with a lower level language. Fortunately Go is a very simple language and something you can pick up within a day or two and be really productive within a week.

Since Go felt like cheating a bit I have in the last week or so started a udemy class on modern C++. I will say I understand why Go was made given on how much syntax C++ has comparatively.

Regardless I don't think there is a limit to the number of languages you can learn, going back to an old one you know well will be pretty quick once you get going again. You might forget the argument order of some standard library function, but that's about it in my opinion.

Collapse
 
tux0r profile image
tux0r

All of them.

If all that matters to you is to get a job with a good salary, learn COBOL. Chances are that they won't let you go once you have a COBOL job (at a bank or something).

If all that matters to you is that you want to have fun and freedom, however, I recommend you to dive into C, Racket, Delphi and Perl - then see where you feel the most comfortable. :-)

Collapse
 
jason_espin profile image
Jason Espin

Don't learn languages. Learn the theory and practices of development. A lot of methods are common across all languages and for those that aren't as obvious there is always Google. Focus on the problem at hand and what the best solution would be, the syntax is irrelevant as again that's something you do not need to commit to memory and can lookup for a refresher.