Re: Wow
Good comment. There is a tendency to focus too much on a specific language instead of looking at the problem domain(s) that one needs to program for. In my 30+ career I've had to learn to program in many languages, and I categorize them into the following major domains (I've programmed in all of the domains below, there may be others that I am not aware of, I'm not claiming this list is complete):
1. Hardware (synthesis/simulation): Verilog, (ISP, VHDL...)
2. System (hardware interface, OS, drivers): C (C++, assembly, ...)
3. Main Application: C++ (Java, C, COBOL ...)
4. Shell/interpreter: bash, Python (csh, Tcl, Perl, Ruby, ...)
5. Specialized (DB, statistics, math, web page, text layout etc): SQL (R, Matlab, JavaScript, Tex/LaTex...)
(The 5th is really a catch-all for multiple specialized domains, and in some cases the language may be capable of broader applicability than the specialized domain).
In my experience, there are 2 main sorts of my-language-is-better-then-your-language arguments:
1. Which language is better within a domain (for example C++ vs Java for main application programming, or Python vs Ruby for interpreter). These arguments are similar to religious arguments, as people tend to root for the language they are familiar with and have spent more time learning. Instead, for the most part, I think these should be driven more by practical considerations for the specific project. For example, are there libraries available in the language to do all the things I want to do available with the acceptable licence/cost/performance/quality? Is there a familiarity with a particular language among the programming team?
2. Arguments about languages in different domains. This particularly happens between domains 3 and 4 because you can often do the same thing in both domains' languages. For example, you can write a simple application in Python or you can write it in C++. But then the C++/Java (domain 3) proponents will argue that Python (domain 4) languages will not scale in performance or quality for larger and more complex applications. The Python (domain 4) folks will retort that Java (domain 3) languages are prone to verbose over-specification and bloat and are inflexible. In my experience, however, large and complex applications typically/often span both domain 3 and 4 and good software architects will partition the application accordingly. And they will use the appropriate language for each partition. So there may be large, mostly static functionality programmed in Java/C++ but then the application needs some flexibility and scripting capability so a Python/interpreter interface would be included.
I don't have specific information about which domain has the most/highest paying jobs, but I suspect that many will need to span multiple domains and I think if you want to do well in the field you should learn how to use the appropriate tools for the job.