Is it better to focus on one path, avoiding contamination from others?
Learning multiple programming languages will broaden your perspective and will make you a better and more flexible programmer over time.
Is it better to explore several simultaneously, to make sure you don’t miss the best parts?
If you are new and learning on your own, you should focus on one language at a time. Pick a project to work on and then pick the language you are going to use. I like to code a Mandelbrot set image generator in each language I learn.
Which one results in converting time to dollars the most quickly?
If you make your dollars only from the finished product, then pick the language with the highest productivity for your target platform and problem domain. This will probably be a garbage collecting language with a clean syntax, with a good integrated development environment, and with a large available set of libraries.
Right now this will probably be Python, Java or C#.
If you make your dollars by producing lines of code for a company, then you will want to learn a language that is heavily used. There is generally a large demand for C++, C#, Java, Python, and PHP programmers. Companies in certain domains will focus on other languages like Lisp, Smalltalk and Ada.
Which one most reliably converts you to a higher value programmer over a longer period of time?
No single language will do this in the long run, but you might take temporary advantage of the current rise of Python, or the large install base of Java and C++.
For a broad basic education I suggest:
Learn a functional language. Haskell is my first choice; Lisp is my second choice.
Learn an object oriented language. Smalltalk has the best OO representation I have come across.
Learn a high level imperative language. Based on growth, Python appears to currently be the best choice; Java would be my second choice.
Learn an assembly language. Your platform of choice.
If you want to do web-related development:
HTML, CSS, Javascript.
SQL and relational DB.
XML, XSD, and XSLT.
C#.NET, Java, Python or PHP.
If you want to do engineering related development:
Learn an assembly language. Your platform of choice.
One way to do this is by writing small C programs and looking at the assembler a compiler generates e.g. by calling gcc with -S. (You can also use this to get some understanding of the optimisations a compiler performs by comparing the difference between the assembler with optimisations and the assembler with full optimisations.)
As you do this, you should also start replacing bits of the C code with inline assembler that you have written yourself, since writing code is better than just reading code.
(Also, the DPCU16 from the yet-to-be-released game 0x10^c might be a reasonable way to learn the basics of assembly languages: there are even numerous online emulators, e.g. 0x10co.de)
Learning multiple programming languages will broaden your perspective and will make you a better and more flexible programmer over time.
If you are new and learning on your own, you should focus on one language at a time. Pick a project to work on and then pick the language you are going to use. I like to code a Mandelbrot set image generator in each language I learn.
If you make your dollars only from the finished product, then pick the language with the highest productivity for your target platform and problem domain. This will probably be a garbage collecting language with a clean syntax, with a good integrated development environment, and with a large available set of libraries.
Right now this will probably be Python, Java or C#.
If you make your dollars by producing lines of code for a company, then you will want to learn a language that is heavily used. There is generally a large demand for C++, C#, Java, Python, and PHP programmers. Companies in certain domains will focus on other languages like Lisp, Smalltalk and Ada.
No single language will do this in the long run, but you might take temporary advantage of the current rise of Python, or the large install base of Java and C++.
For a broad basic education I suggest:
Learn a functional language. Haskell is my first choice; Lisp is my second choice.
Learn an object oriented language. Smalltalk has the best OO representation I have come across.
Learn a high level imperative language. Based on growth, Python appears to currently be the best choice; Java would be my second choice.
Learn an assembly language. Your platform of choice.
If you want to do web-related development:
HTML, CSS, Javascript.
SQL and relational DB.
XML, XSD, and XSLT.
C#.NET, Java, Python or PHP.
If you want to do engineering related development:
C and C++.
Perl
SQL
Mathematica or Matlab
for some domains, LabVIEW
One way to do this is by writing small C programs and looking at the assembler a compiler generates e.g. by calling
gcc
with-S
. (You can also use this to get some understanding of the optimisations a compiler performs by comparing the difference between the assembler with optimisations and the assembler with full optimisations.)As you do this, you should also start replacing bits of the C code with inline assembler that you have written yourself, since writing code is better than just reading code.
(Also, the DPCU16 from the yet-to-be-released game 0x10^c might be a reasonable way to learn the basics of assembly languages: there are even numerous online emulators, e.g. 0x10co.de)