HACKER Q&A
📣 dev_0

How many programming languages are you proficient in?


I see in social media that every programmer should learn Golang or Rust...How do you be proficient if you study so many languages?


  👤 rossdavidh Accepted Answer ✓
1) it is more important to be proficient in a problem space (data analysis and statistics, web programming, mobile, networking, etc.) than to be proficient in a language, in terms of your actual productivity 2) nonetheless most job postings are in a particular language, so you should do enough in a few different languages that you know the basics of how they work, and know how to look up the rest, so that you can honestly say you have worked in that language, and can get through a basic job interview related to it

Becoming proficient in the language's more esoteric edge cases in regards to syntax, etc. is not so important, because that stuff you can look up if you need it. The details of a problem space are often things you won't even know to ask yourself or look up, if you aren't proficient in that problem space. If a prospective employer requires that you know the esoteric details of Golang or Rust in order to get the job, they're probably not a great employer, and there are plenty of others out there who know better than that.

The literal answer to your question is 3 or 4.


👤 cc101
I've been programming for over half a century. I've seen a lot of programming languages come and go. They are really not that important. The reality is Domain Knowledge is the key to competency, i.e. something like device drivers, geology, or something else that's relevant to the project. The problem is recruiters don't seem to know that. As others here have said, be familiar with the basics of currently popular languages. While working with a language you can look up the rest as needed until you have mastered it.

👤 jitl
What is “proficiency”?

I think I could write a toy clone of React in the following languages:

Typescript/JavaScript

Golang

Ruby

Kotlin

Python

I think I would struggle to write a toy clone of React in these languages, but I could probably write an animated gif viewer for the terminal:

Java

C

A lot of the languages on this list are extremely similar - Python, Ruby, JavaScript are all dynamic scripting languages with more or less equivalent expressivity although Ruby is substantially more fun. Golang, Kotlin, Typescript, and Java can all be written with roughly the same “structs with methods” style, although error handling in Go is more verbose, and Kotlin is much more fun.

I think once you have enough experience with the mainstream kind of imperative language listed above, getting up to speed on another variant in that category is pretty quick, especially for languages with modern and accessible tooling like Go.

C is the “most different” language here since it isn’t memory-safe, nor does it have easy access to closures. Without those it’s much more tricky for me to do fancy composition shenanigans… It’s straightforward to implement an OO classical inheritance system in any language with closures. Still, if you know C it’s super easy to understand Go, since Go is basically C on easy mode.


👤 karmakaze
I would group them as there's much overlap within a paradigm:

0. assembly and machine languages

1. procedural static typed (C/C++, Java, Go, Kotlin, Obj-C, Swift, Zig, etc)

2. procedural scripting (Python, Ruby, PHP, etc)

3. functional (F#, OCaml) -- to a lesser extent Scala

4. lisp-y (Clojure, Racket)

5. ref. capable: learning Rust (played with Pony, Clean)


👤 jmclnx
If asked this over 20 years ago, the list would be long, but with my age, I would say 3 maybe 4. The others are a distant memory.

Sadly I still cannot grok OO, but not an issue for me. These days and maybe for the past 10 years, OO is a must for people. :(


👤 mamcx
I have done (in order as far I remember): FoxPro, Delphi, Python, Ancient HTML/CSS/ASP, VB Classic, VB/C# .NET, OLD HTML/CSS/JS, Obj-C, F#/C#, and finally I'm doing CURRENT HTML/CSS/JS, Swift, Kotlin, Rust.

I hope this is the last switch. Also making one at https://tablam.org.

All of this have been for paying jobs, not counting any other auxiliar thing (like the 5 or 6 SQL dialects) or fun things/experiments I could have done.

But, I'm not "proficient" in all of it, because you forgot after a while, so only can claim some level of proficiency in the last batch.

Moving among languages is not THAT hard actually, in special if you stay around the same-ish paradigms and niches of programming (ie: Most of that languages were using doing the same kind of app: A part of a ERP).

Only moving into serious change of paradigms is rough, for me was: FoxPro -> Everything else (suddenly, making business apps is hard), Delphi -> Everything else (and now, Delphi/Fox were the last languages where making UIs was fun), F# (first touch of functional languages), Obj-C (first re-confirmation of everything wrong with the C family of languages), Rust (first time where I need to unlearn almost everything so far, but then come back with vengeance and now is the most efficient language I have used for non-UI task so far).

And Html/Css/JS, that have never stopped to be bad. And is getting worse. Ok, I lie: I use htmx/tailwindcss to resist as much to touch they...


👤 tylerchurch
At least 3!

Lots more depending on your definition of “proficient”.

“How do you be proficient if you study so many languages?”

All programming languages are basically the same if you squint at them.

Each language is better at different things, and can help you see code in different ways. Learning Haskell will help you write better JavaScript, for example.

So really I think the opposite is true: how do you know you’re not boxed into a narrow way of thinking if you’ve only used 1 language?

I am maximally productive in a small handful of languages because I use them the most and am familiar wit the idioms, pitfalls, libraries, etc.

If you use other languages day-to-day I don’t think you’ll be able to maintain maximal productivity with Rust and Golang. But learning them can teach you alternative perspectives, or can give you a leg up if you encounter a problem to solve that lies within their sweet spot.


👤 drakonka
Go, C#, Python, TypeScript are all languages I've now worked with extensively and can quickly jump into any project on. I've also worked with Rust and C++ and can kind of visualize their general "shape", but am not as immediately proficient in them out of the box.

The goal was never to be proficient in several languages. My work just called for different languages over the years, so I learned them as I went. After a while, once you get the core concepts and general thinking/reasoning down, another language is _largely_ just picking up a new syntax and set of conventions, not a monumental task.


👤 ysavir
2: Ruby and JavaScript, with "proficiency" means that I have good knowledge of the language APIs, general best practices, and sufficient mastery of the vanilla language (eg outside of Rails or React) to accomplish complex functionality using the native tools (eg I know how to metaprogram and ruby as well as not to metaprogram in ruby, and how context and `bind` work in JS).

I also know some PHP, Python, etc, but not to a capacity where I can just sit down and write a program without consulting some guides/docs, and no experience with the popular frameworks.


👤 ntw1103
That depends on how you define proficent.

This month I have programmed in the following languages:

D, ECMAscript, python, php, bash, c/c++, Java, powershell, and groovy.

There are other langues I use. as for how? Most of what to do in each language is the same, the Languages just change how you go about doing it. Most of the difference is the keywords and syntax. the tasks you are writing out are the same or similar, with some features of languages making certain parts easier.


👤 mikewarot
I've done assembler, basic, forth, fortran, pascal, Delphi, VBA, HTML, ASP, Python, Octave. I've actively avoided C for 40 years, but some nerd sniping finally got me.

I tried Rust, and the borrow checker was a huge red flag for me. The idea of "owning" the value of a variable was too weird.

I'll stick to Free Pascal, C, Assembler and STOIC, it turns out I'm a fan of VERY STRONG type checking.

APL does look interesting


👤 schwartzworld
I can't speak for golang but I do think it's worthwhile to learn some rust. You definitely don't have to be an expert in it, but there's a lot that language gets right and it has a great type system. After building a couple of very small projects in rust, I felt like the typescript I write at work started getting a lot better.

👤 tomcam
> I see in social media that every programmer should learn Golang or Rust

Wut? I love Go but I don't observe that. According to actual hiring patterns it seems like Python, Java, and probably C# are better bets. I am retired so I may have a skewed outlook.


👤 JoeAltmaier
There are so many levels of proficiency in modern languages, it's hard to say. From familiarity, to expertise in language features, to runtime knowledge, to ability to call in and out of the language, to writing runtime ...

👤 beardyw
I have used, I think, 14 professionally. Never was proficient in any of them because of my poor memory. Worked with a manual by my side, or latterly a browser.

👤 aintmeit
None. My initials could also stand for the phrase Can't Code.

👤 duped
As many as you need. Learning a new language is not that hard.

👤 joshxyz
none. javascript code linters do most of the work, im fairly a wrong code provider so the code linter can self-correct itself until my code somehow ends up doing what it needs to do.

👤 Am4TIfIsER0ppos
None, and I only "know" 3