As you noticed by the title I didn't used the term “know” since I find it more ambiguous then “you can code in”. To keep answers short lets limit ourselves to five languages at most , have the same list for strongest and weakest points and mention those point in brief (one or two sentences). Who will go first ?

Another issue is the more you code in the commercial space the less choice you get on the language, the development environment and the process.

The bigger the app or design the more likely you don't have a choice about language, tools and methods. This may be the hardest to accept for the newest of programmers.

What this means is that you have to be flexible and learn on the go to be able to contribute to the project.

rproffit I agree with you, we don't choose our tools (and the language is just a tool) when we work in a company that is not ours. But being a programmer demands not being tied in a language or even of a framework of it. The perspective changes when you know and understand different sets of tools. I don't "know" them 100% but I am in the journey

I will give my answer to that:

Strongest points:
PHP : It is the epitome of a web language. It is so programming paradigm agnostic that you can bend it in your needs.
Java: The more direct and simple approach I have ever seen in OOP. You can share your code without being afraid that reverse engineer will produce something readable that will make sense, in less time than what would take to write it.
JavaScript: It took me a while , but wow , now I can see how that the object prototype approach is great for a language so tided to events.
C++: I am extra cautious when I write C++ but it gives me the power of OOP in such low level that it worths it.

Weakest points:
PHP: Not seriously maintained. The all structure is fool of inconsistences. The approach is build in the case that you will run something for few seconds and then that will end in a “forgiving mode”.
Java: Try to use something common like ImageMagick with Java and you will understand that is unsuitable to extension. Even the “write once run anywhere” is just a bad joke.
JavaScript: For an event driven language I don't have many to say , but its structure could evolve in interfaces and inheritance.
C++: Memory leakage , why in earth doesn't the language handle with that and I need to boost something?


Pro: Extremely powerful syntax and rich set of primitive operators (80 or more) designed for mathematical manipulation.
Con: The epitome of write-once, read-never coding.

You can implement Conway's game of Life in one line. Powerful and concise syntax but I've never seen a language that approaches APLs ability to produce unreadable code.

An example of concise - to create a deck of cards (each card consisting of a value and a suit) you can do

deck ← ⊂[1](52⍴'A23456789TJQK'),[0.5](13⍴'S'),(13⍴'H'),(13⍴'D'),(13⍴'C')

where (13⍴'S'),(13⍴'H'),(13⍴'D'),(13⍴'C') generates SSSSSSSSSSSSSHHHHHHHHHHHHHDDDDDDDDDDDDDCCCCCCCCCCCCC and 52⍴'A23456789TJQK' generates A23456789TJQKA23456789TJQKA23456789TJQKA23456789TJQK and ⊂[1] gives the result

AS  2S  3S  4S  5S  6S  7S  8S  9S  TS  JS  QS  KS  AH  2H  3H  4H  5H  6H  7H  8H  9H  TH  JH  QH  KH  AD  2D  3D  4D  5D  6D  7D  8D  9D  TD  JD  QD  KD  AC  2C  3C  4C  5C  6C  7C  8C  9C  TC  JC  QC  KC

Once you have deck you can shuffle it by deck ← deck[52?52] where 52?52 generates 52 unique random integers from 1-52.

Yes, you can produce obtuse code, but you can also easily produce very clear code that accomplishes a great deal in just a few keystrokes.

commented: wow +0

My longest life span product is in Visual Basic 6.0 SP6. With some minor tweaks I was able to keep it running on Windows 10. This app started back on Windows 95 so it's been in service for 23 years. Disparage this old horse all you want but it's getting up there in years.

Fortran and Cobol have seen app lifespans in the 40 plus years. (Oops, make that 50+ years.)