Answers.Body: <blockquote>
  <p>My school is teaching only Java, and I figured I should pick up another language on my own.</p>
  </blockquote>
  <p>Good thinking!</p>
  <blockquote>
  <p>What would you say is the best programming language to learn right now in this market?</p>
  </blockquote>
  <p>Depends on what &quot;this market&quot; is for you. If you want to go into robotics, then maybe C? If you want to go into Web development, then Javascript. Data science or analytics? Python, R, or Julia. DevOps? Ruby or Go. Computer graphics or gaming? C++. You see where I am going with this?</p>
  <p>That said, <strong>it does not matter</strong>. Any second language you learn will help your understanding and market value, and what is most sought-after now may not be so hot anymore when you graduate. What you should mostly be looking for at this point of your career is to broaden your horizon. If you already know Java, then learning C# is quick but also sort of useless, since you will mostly find similar concepts used via a similar syntax. What you should be looking for instead are languages that teach you something new - functional programming, logic-oriented programming, or programming close to the hardware are probably the highest-gain ones (for a more complete list see <a href="https://cseducators.stackexchange.com/a/7251/543">Max' answer</a>). Which of those is &quot;most important&quot; again depends on where you see yourself going in your career.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-24T15:12:30.377Z
Answers.LastActivityDate: 2022-01-24T15:12:30.377Z
Answers.UserDisplayName: xLeitix
Answers.Body: <p>There is no &quot;best&quot; second language for everyone. It depends on your goals. If you are only interested in future employment as a developer then one of the languages on the most popular (in industry) list is what you want. Both C and Python are quite hot at the moment, as is Javascript.</p>
  <p>But if your interest is more towards a complete understanding of computer science and, in particular, a deep understanding of languages, then you may want a language that is specifically quite different from what you already know. A member of the LISP family would be a good choice because it uses a different paradigm requiring different thought patterns. You can save niche languages for later (brainfuck). C is also quite different from Java, though the low level syntax is similar. But, it, too, requires a different way of thinking about how you conceptualize the solution of a complex problem. For this purpose, both Python and Ruby are a bit too close to Java to stretch your mental models sufficiently and you are likely to program either just like you would program Java. You can't do that with C or any LISP variant.</p>
  <p>So, the requirements for the job market and for a deep education are quite different.</p>
  <p>Any undergraduate program in CS is likely to require you to learn an assembly language at some point. A big step would be to teach yourself MIX from <em>The Art of Computer Programming</em> by Knuth. It is a fairly generalized assembly language that has simulators available.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-24T14:33:33.300Z
Answers.LastActivityDate: 2022-01-24T14:33:33.300Z
Answers.UserDisplayName: Buffy
Answers.Body: <p>One of each kind, doesn't matter what it's called.</p>
  <p>If you understand the concept of a language, you can learn a new syntax in a couple of weeks; i.e. if you already know Perl and Python, learning Ruby probably won't really expand your expertise even if Ruby devs might be the most sought after and highest paid (just, an example, I have no idea who actually is paid the most). Now if you'd instead learn Lisp, you can add 'functional programming' to your list of skills. It will make picking up Haskell much easier. Not that you'd need either of the two in real life (probably) but you now have a better understanding of programming as a whole and more skills to advertise.</p>
  <p>If I were in charge of hiring, I'd be looking for a 'Web developer' not a Django or a Ruby-on-Rails dev. It's easier to teach a new framework than a concept.</p>
  <p>So here is a list of things which I would suggest you are able to cover:</p>
  <ul>
  <li>something that is fast to write</li>
  <li>something that is fast to execute</li>
  <li>something for databases</li>
  <li>something that can be read by a shell</li>
  <li>something functional</li>
  <li>something for desktop GUIs</li>
  <li>something for the internet</li>
  <li>something that can render nice images or games</li>
  <li>something for microcontrollers</li>
  <li>something to create mobile apps</li>
  <li>something describing hardware</li>
  <li>something to show off to the nerds like brainfuck-2D ;)</li>
  </ul>
  <p>This list is highly subjective, off the top of my head, and by no means complete (but a good starting point). However, there are a lot of people who get by perfectly fine with only one language. Also one language can cover more than one of the points of that list. If you really want, you can do all you shell-scripting with CSS.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-24T15:01:17.637Z
Answers.Text: To be fair, I have yet to meet any fresh graduate (or even experienced dev) who actually knows "one of each of these kinds". Don't get me wrong, it's a good list, but a student will need to pick and specialize a bit. (which sort of brings them back to square one - should they learn verilog or Java+android, with an answer of "whatever you see yourself liking more").
Answers.UserDisplayName: xLeitix
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-24T16:00:28.927Z
Answers.Text: I'm missing the mobile app part, but other than that I could check all those after graduating but I went from CS BSc to computer engineering MSc and hat a lot of jobs on the side.
Answers.UserDisplayName: Max
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-24T16:01:57.337Z
Answers.Text: So my list would be something like: Ruby, C++, PostgreSQL, bash, Haskell, qt, RoR, Ogre, C, --, Verilog/VHDL, Piet.
Answers.UserDisplayName: Max
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-24T10:02:31.547Z
Answers.LastActivityDate: 2022-02-04T08:13:00.477Z
Answers.LastEditDate: 2022-02-04T08:13:00.477Z
Answers.UserDisplayName: Max
Body: <p>A CS student here. My school is teaching only Java, and I figured I should pick up another language on my own. What would you say is the best programming language to learn right now in this market?</p>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-24T05:31:41.883Z
Comments.Text: I'm not sure that there exists a "best programming language".  What are your goals?
Comments.UserDisplayName: Ben I.
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-24T07:12:46.307Z
Comments.Text: Most ppl start with [blub](http://www.paulgraham.com/avg.html).  Most ppl dont know they are starting with blub. That's the mechanism that ensures why most start and stay with blub
Comments.UserDisplayName: Rushi
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-24T08:41:09.543Z
Comments.Text: See [TIOBE Index](https://www.tiobe.com/tiobe-index/). Note it does not cover applications like databases and technologies like containers but probably should. Also I program in Prolog which is [homoiconic](https://en.wikipedia.org/wiki/Homoiconicity); once you use this feature you really don't want to touch another language that does not have it.
Comments.UserDisplayName: Guy Coder
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-24T13:57:05.983Z
Comments.Text: Chose a language that will maximize learning. Not one that you will see on a job advert. By doing this you will get to your goal quicker.
Comments.UserDisplayName: ctrl-alt-delor
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-24T14:18:22.283Z
Comments.Text: @Rusi thanks, that explains a lot. I think I will have another look at LISP. I learnt a lot from it last time, but now realise that there is a lot more to learn.
Comments.UserDisplayName: ctrl-alt-delor
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-24T14:21:50.643Z
Comments.Text: @ctrl-alt-delor, note that the varieties of LISP are quite different. The linked article recommends Common Lisp. Scheme is quite different in some important ways. LISP is a family of languages, not a language.
Comments.UserDisplayName: Buffy
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-24T14:26:02.403Z
Comments.Text: @ctrl-alt-delor Beware! Its easier to get Paul Graham wrong than right.  To wit: Its easier to see lisp as a *technology* than as an *idea*.  PG himself adumbrates it with the quip: *When people tell me that lisp is obsolete I ask them if quicksort -- same age as lisp -- is obsolete.*
Comments.UserDisplayName: Rushi
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-24T15:17:11.610Z
Comments.Text: Beware! The second language is the hardest! Because you learned Java first, you will have unknowingly acquired a prejudice for Java. You will think that the way Java works is The Natural Way. You will think that the patterns used by Java programmers are The Natural Way. Your next language will seem strange—wrong even. But there are many ways, which is part of the reason why there are many languages.
Comments.UserDisplayName: Solomon Slow
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-24T15:27:12.427Z
Comments.Text: @ctrl-alt-delor, In another essay, Mr. Graham argued that the evolution of modern programming languages is converging on LISP-equivalence. You may find less novelty in LISP today than a programmer from twenty or thirty years ago would have found.
Comments.UserDisplayName: Solomon Slow
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-24T16:10:01.433Z
Comments.Text: At what level are you studying currently? High School or University? If university, are you a first-year?? Note that there is a good chance to reopen this if you say a bit more about your needs and goals.
Comments.UserDisplayName: Buffy
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-24T16:16:44.557Z
Comments.Text: This question has been closed.  OP, please edit it to provide more detail.  *What are your goals?*
Comments.UserDisplayName: Ben I.
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-01-26T18:52:05.590Z
Comments.Text: Your school only teaches Java? Sounds like a lousy school (unless it's a high school or grade school).
Comments.UserDisplayName: Ellen Spertus
Tags: <self-learning><student-motivation><programming><language-choice><language-types>
Title: What is the best programming language to learn right now?
ThreadText: # What is the best programming language to learn right now?
  
  (Asked by: username_0 on 2022-01-24)
  
  A CS student here. My school is teaching only Java, and I figured I should pick up another language on my own. What would you say is the best programming language to learn right now in this market?
  
  **Tags:** self-learning, student-motivation, programming, language-choice, language-types
  
  > **Comments:**
  > **username_1**: I'm not sure that there exists a "best programming language".  What are your goals?  
  > **username_2**: Most ppl start with [blub](http://www.paulgraham.com/avg.html).  Most ppl dont know they are starting with blub. That's the mechanism that ensures why most start and stay with blub  
  > **username_3**: See [TIOBE Index](https://www.tiobe.com/tiobe-index/). Note it does not cover applications like databases and technologies like containers but probably should. Also I program in Prolog which is [homoiconic](https://en.wikipedia.org/wiki/Homoiconicity); once you use this feature you really don't want to touch another language that does not have it.  
  > **username_4**: Chose a language that will maximize learning. Not one that you will see on a job advert. By doing this you will get to your goal quicker.  
  > **username_4**: @Rusi thanks, that explains a lot. I think I will have another look at LISP. I learnt a lot from it last time, but now realise that there is a lot more to learn.  
  > **username_5**: @username_4, note that the varieties of LISP are quite different. The linked article recommends Common Lisp. Scheme is quite different in some important ways. LISP is a family of languages, not a language.  
  > **username_2**: @username_4 Beware! Its easier to get Paul Graham wrong than right.  To wit: Its easier to see lisp as a *technology* than as an *idea*.  PG himself adumbrates it with the quip: *When people tell me that lisp is obsolete I ask them if quicksort -- same age as lisp -- is obsolete.*  
  > **username_6**: Beware! The second language is the hardest! Because you learned Java first, you will have unknowingly acquired a prejudice for Java. You will think that the way Java works is The Natural Way. You will think that the patterns used by Java programmers are The Natural Way. Your next language will seem strange—wrong even. But there are many ways, which is part of the reason why there are many languages.  
  > **username_6**: @username_4, In another essay, Mr. Graham argued that the evolution of modern programming languages is converging on LISP-equivalence. You may find less novelty in LISP today than a programmer from twenty or thirty years ago would have found.  
  > **username_5**: At what level are you studying currently? High School or University? If university, are you a first-year?? Note that there is a good chance to reopen this if you say a bit more about your needs and goals.  
  > **username_1**: This question has been closed.  OP, please edit it to provide more detail.  *What are your goals?*  
  > **username_7**: Your school only teaches Java? Sounds like a lousy school (unless it's a high school or grade school).  
  
  ---
  
  ## 3 answers
  
  ### Answer by username_9 on 2022-01-24. Score: 5
  
  One of each kind, doesn't matter what it's called.
  
  If you understand the concept of a language, you can learn a new syntax in a couple of weeks; i.e. if you already know Perl and Python, learning Ruby probably won't really expand your expertise even if Ruby devs might be the most sought after and highest paid (just, an example, I have no idea who actually is paid the most). Now if you'd instead learn Lisp, you can add 'functional programming' to your list of skills. It will make picking up Haskell much easier. Not that you'd need either of the two in real life (probably) but you now have a better understanding of programming as a whole and more skills to advertise.
  
  If I were in charge of hiring, I'd be looking for a 'Web developer' not a Django or a Ruby-on-Rails dev. It's easier to teach a new framework than a concept.
  
  So here is a list of things which I would suggest you are able to cover:
  
  * something that is fast to write
  * something that is fast to execute
  * something for databases
  * something that can be read by a shell
  * something functional
  * something for desktop GUIs
  * something for the internet
  * something that can render nice images or games
  * something for microcontrollers
  * something to create mobile apps
  * something describing hardware
  * something to show off to the nerds like brainfuck-2D ;)
  
  This list is highly subjective, off the top of my head, and by no means complete (but a good starting point). However, there are a lot of people who get by perfectly fine with only one language. Also one language can cover more than one of the points of that list. If you really want, you can do all you shell-scripting with CSS.
  
  > **Comments:**
  > **username_8**: To be fair, I have yet to meet any fresh graduate (or even experienced dev) who actually knows "one of each of these kinds". Don't get me wrong, it's a good list, but a student will need to pick and specialize a bit. (which sort of brings them back to square one - should they learn verilog or Java+android, with an answer of "whatever you see yourself liking more").  
  > **username_9**: I'm missing the mobile app part, but other than that I could check all those after graduating but I went from CS BSc to computer engineering MSc and hat a lot of jobs on the side.  
  > **username_9**: So my list would be something like: Ruby, C++, PostgreSQL, bash, Haskell, qt, RoR, Ogre, C, --, Verilog/VHDL, Piet.  
  
  ---
  
  ### Answer by username_8 on 2022-01-24. Score: 0
  
  > My school is teaching only Java, and I figured I should pick up another language on my own.
  
  Good thinking!
  
  > What would you say is the best programming language to learn right now in this market?
  
  Depends on what "this market" is for you. If you want to go into robotics, then maybe C? If you want to go into Web development, then Javascript. Data science or analytics? Python, R, or Julia. DevOps? Ruby or Go. Computer graphics or gaming? C++. You see where I am going with this?
  
  That said, **it does not matter**. Any second language you learn will help your understanding and market value, and what is most sought-after now may not be so hot anymore when you graduate. What you should mostly be looking for at this point of your career is to broaden your horizon. If you already know Java, then learning C# is quick but also sort of useless, since you will mostly find similar concepts used via a similar syntax. What you should be looking for instead are languages that teach you something new - functional programming, logic-oriented programming, or programming close to the hardware are probably the highest-gain ones (for a more complete list see [Max' answer](https://cseducators.stackexchange.com/a/7251/543)). Which of those is "most important" again depends on where you see yourself going in your career.
  
  
  ---
  
  ### Answer by username_5 on 2022-01-24. Score: 0
  
  There is no "best" second language for everyone. It depends on your goals. If you are only interested in future employment as a developer then one of the languages on the most popular (in industry) list is what you want. Both C and Python are quite hot at the moment, as is Javascript.
  
  But if your interest is more towards a complete understanding of computer science and, in particular, a deep understanding of languages, then you may want a language that is specifically quite different from what you already know. A member of the LISP family would be a good choice because it uses a different paradigm requiring different thought patterns. You can save niche languages for later (brainfuck). C is also quite different from Java, though the low level syntax is similar. But, it, too, requires a different way of thinking about how you conceptualize the solution of a complex problem. For this purpose, both Python and Ruby are a bit too close to Java to stretch your mental models sufficiently and you are likely to program either just like you would program Java. You can't do that with C or any LISP variant.
  
  So, the requirements for the job market and for a deep education are quite different.
  
  Any undergraduate program in CS is likely to require you to learn an assembly language at some point. A big step would be to teach yourself MIX from *The Art of Computer Programming* by Knuth. It is a fairly generalized assembly language that has simulators available.
  
  
  ---
  
  