HACKER Q&A
📣 0x737368

What programming languages should a software engineer know?


What programming languages should a software engineer know?


  👤 __d Accepted Answer ✓
An assembly language: it really doesn't matter which one. It can even be an 8-bit CPU like a Z80, or 6502. In fact, maybe even best would be an 8-bit CPU.

C. It's the foundation of today's software: operating systems, databases, embedded systems -- all mostly written, even in 2021, in C.

Lisp. Doesn't really matter which one. It's just a different way of approaching problems.

Python. It's hard to beat for translating an idea into running code.

JavaScript. Ok, it might not be the "best" language, but it is deployed to literally billions of people and you should know how to put your software in front of them.

After these, you can pick up other things as required. C++, C#, Java, Rust, Go, Swift, whatever. Try something new every few years.


👤 PaulHoule
If you studied computer science you'd probably have two courses like this in the curriculum:

   * comparative programming languages
   * programming language implementation
what you need to know is not a large number of programming languages but rather the content of those courses. That is, that old versions of FORTRAN didn't need a stack (it's all static), C has a stack, languages like ML don't need a stack (it can be all on the heap.) What was special about LISP and why it isn't so special as it was, etc.

👤 rebelos
The returns to knowing more than 2 or 3 languages diminish greatly and your time would be better spent acquiring knowledge elsewhere (product, architecture, infra, monitoring, testing, security, etc).

I also don't see much of a point in learning languages that you have no expectation of using routinely. The knowledge will invariably atrophy and the time will have largely been wasted. The counterargument is that some of it will be retained unconsciously and influence how you think. Personally, I find that argument to be exceedingly frail.

So pick a couple and then let any future language learning efforts be directed by your immediate needs. It is in any case not hard to learn most languages once you have a good foundation.

Languages in common use today for most software engineers in FAANG/startups: Javascript/Typescript, Java, Python, Golang, Rust

For mobile: Swift, Kotlin

For embedded/performance: C, C++

For frontend: HTML, CSS, TS/JS

I would also recommend having a good grasp of Bash (& shell utilities) and SQL.


👤 mindcrime
z80 assembler

prolog

smalltalk

java

c++

haskell

turbo pascal

ada

I don't know man, what do you mean by "should know"? I don't think there's any such list in a universal sense. The languages one "should" know are simply the ones that let you achieve your goals. If you're building embedded systems firmware, maybe that's assembler or C. If you're building backend API's maybe it's Java or Go. If you're building control software for a rocket, maybe it's Ada. For a video game graphics engine, possibly C++. For a web-based social media app, probably Javascript. For weather forecasting / simulation / high energy physics / etc., you might want FORTRAN. For maintaining 40 year old banking applications on mainframe, probably COBOL or PL/1. If you're writing BBS door games, you probably want Turbo Pascal. It's really pretty context dependent.


👤 mikewarot
Arduino/C++ - You should understand how to actually turn things on and off at the low level

Excel - You should understand how to work with data flows

Python - A good REPL with a huge library available almost everywhere.

Forth - Concatenative programming offers a lot of power, by trading off nicely organized parameter/return values.

LISP - the opposite of forth, with more power because you can trade your parenthesis keys for huge amounts of power properly organizing data Almost any huge system will eventually implement most of LISP, but badly. Why not learn the right way to do it?

An old school GUI builder like VB6 or Delphi 3, where you can build a GUI and then wire up a few lines of code to make it actually do everything.

GIT - You need to learn source control, command line or GUI doesn't really matter much. Anything is better than a stack of .ZIP files containing everything You should learn enough to be able to work on something, make a commit, push it to your github (or equivalent) account, and work the reverse of that, with a merge local.

GNU Radio - You should learn how to process data in real time, understand IQ data, negative frequencies and the rest. Fun fact, you can take data from your microphone, and output it to your speakers, with all the DSP you want in between.

Mathematica/Octave - You should learn how to push data around, perhaps in a class about machine learning, or DSP.

SQL - You should learn enough to know how to create a table, query it, etc. by hand, or via generating code in some host language.

Regular Expressions - You should learn how pattern matching can be used to do a huge amount of things that otherwise require pages of code.

HTML/CSS/Javascript - Use your favorite text editor to build a few pages, navigate, etc. Just have a good idea of what is under the surface.

NAND2Tetris - If possible, work your way through the course, you'll have a much better idea of the big picture of computing.


👤 malodyets
The ones that will get your project done.

The ones that your community is using.

The ones you enjoy.


👤 runawaybottle
Assembly really reminds you how it all works down below.

👤 quickthrower2
The ones needed to do your job. Anything else is a bonus.