Answers.Body: <p>If a language becomes popular, two things happen. Both of them lead to new ideas and that leads to new languages, some of which are just refinements on existing languages.</p>
  <p>The first issue is that when there are a lot of users, flaws in a language become more apparent. For example, in C it is far to easy to make memory errors with things like null-terminated strings. Skilled programmers (and not everyone is sufficiently skilled) can avoid these with sufficient care, though taking care is hard.</p>
  <p>The second issue is that when there are a lot of <em>communicating</em> users of a language, styles of programming in that language emerge. Some of them are to avoid the potential errors mentioned above, but there are other things that are found useful.</p>
  <p>Both of the above lead to new languages. Strings in Java, say, are pretty safe and don't lead to memory errors. OO is, among other things a <em>style</em> of programming quite different from C, which is a procedural language. In OO languages, one's thought process is pushed toward &quot;things&quot; with behavior (objects). In procedural languages (of which Modula is perhaps the best embodiment, one things about actions, not things, and actions have sub-actions (nested procedures).</p>
  <p>There is also a general trend away from hardware considerations toward more conceptual things. In fact the normal concept of how hardware behaves isn't really how it works anymore with modern CPUs and GPUs. This makes a more abstract representation of a program more desirable as it permits execution on various kinds of hardware.</p>
  <p>So, lots of languages is really a feature of progress in thinking about the nature of programs and how to implement them effectively and efficiently. Higher level abstractions, such as are possible in Haskell and Python make programming easier.</p>
  <p>If we &quot;stick&quot; with one language, that progress in thinking would stop. The same thing is true in most other aspects of life as well. People's thinking advances, so we expect processes to advance as well.</p>
  <hr />
  <p>Note that the above isn't intended to be comprehensive. There are other reasons. I've created languages just for use with my students in the compiler course as they embody &quot;interesting&quot; concepts in translation.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-12-13T13:44:08.030Z
Answers.Text: Even with one language, if it is sufficiently powerful, one can continue to make progress. 30 years ago with C I was working towards my own ideas of OOP and Dependency Injection, also making a lot of use of macros, and creating various Domain Specific Languages and even a free standing interpreter of a special purpose mini-language I built. The tools and languages, like C#, are vastly better now, and I don't need to innovate hardly at all, so you could say that better conditions made me lazier and less innovative. We come up with new things when forced to, not necessarily because it is easy.
Answers.UserDisplayName: Scott Rowe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-11-05T12:48:46.083Z
Answers.LastActivityDate: 2023-11-05T13:09:33.497Z
Answers.LastEditDate: 2023-11-05T13:09:33.497Z
Answers.UserDisplayName: Buffy
Body: <p>When my students (high school students) asked me &quot;Why Are There So Many Programming Languages?&quot; I don't want to give them an answer that is too pedantic (so they won't respond &quot;Tl;dr&quot;). I came up with a short list,</p>
  <ol>
  <li>Different tools for different jobs. Many languages were invented and developed for specific needs(even though through their evolution they are all able to solve some common problems).</li>
  <li>Big tech companies invented their own programming languages to solve specific problems, java, c#, go, Swift to name a few. These languages have their own goals and priorities, which are not in line with existing ones.</li>
  <li>People love to invent new things and programming language is no different. People often say &quot;Each language has its own unique characteristics that would make it suitable to solve a particular problem.&quot; But I would like to put it another way, each language bears the characteristics that come from their inventors's experiences/strengths/lessons learned with the languages they used before.</li>
  <li>People have different tastes, personal preferences, or philosophies, when they don't like language A, they invent language B. <strong>I will emphasize this one to my students.</strong> When I search answers to this question I don't see many mentioned this. But think it is an important reason. For example, I hate C++, to me it is an ugly language. I read somewhere (I can't find it now), golang inventors don't like C++ too(same as Java inventor I think), so they invent their own languages.</li>
  <li>Technology is evolving. So people and big companies always feel the need to design a new language to better harness the new technology. The latest example of this may be <a href="https://www.modular.com/mojo" rel="nofollow noreferrer">mojo</a> although reading its introduction I can't help saying WHY and again?!</li>
  </ol>
  <p>The list is no doubt not exhaustive (and they overlap) but I try to make them not be too pedantic or too boring. For example, I particularly stay away from the reasons like &quot;different programming languages are based on different programming <strong>paradigms</strong>&quot;</p>
  <p>Can you guys help me compile a list or give an answer that high school students can appreciate?</p>
  <p>I searched cseducators site and found <a href="https://cseducators.stackexchange.com/questions/7186/why-isnt-there-one-language-to-use-instead-of-different-programming-languages">Why isn&#39;t there one language to use instead of different programming languages?</a>, I am afraid most of the answers there will get a Tl;dr response from highschoolers ( at least from my students).</p>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2023-11-05T18:50:14.433Z
Comments.Text: Obligatory XKCD, great as an ice breaker with the students: https://xkcd.com/927/
Comments.UserDisplayName: Gypsy Spellweaver
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2023-11-10T05:02:29.953Z
Comments.Text: I've been trying to compose an answer to your earlier question: _Can CS students not program_?  Seeing this I see to be frank it's a more interesting question! And factually the 2 are related: CS students can't program (among other things because...) not only are they taught badly, theyre taught wrong things
Comments.UserDisplayName: Rushi
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2023-11-10T06:21:29.843Z
Comments.Text: Thanks. I am not a full-time teacher just volunteer to teach in some middle/high school and I like to do that. Kids ambush me from time to time some interesting questions, e.g. https://cseducators.stackexchange.com/questions/7757/non-native-english-speakers-struggle-to-come-up-with-decent-variable-names-and-f
Comments.UserDisplayName: Qiulang 邱朗
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2023-12-13T21:45:12.283Z
Comments.Text: It is kind of like "why so many species of beetles?" Nothing succeeds like success.
Comments.UserDisplayName: Scott Rowe
Tags: <programming><secondary-education>
Title: The answers to "Why Are There So Many Programming Languages?" for high school students, not too pedantic
ThreadText: # The answers to "Why Are There So Many Programming Languages?" for high school students, not too pedantic
  
  (Asked by: username_0 on 2023-11-05)
  
  When my students (high school students) asked me "Why Are There So Many Programming Languages?" I don't want to give them an answer that is too pedantic (so they won't respond "Tl;dr"). I came up with a short list,
  
  1. Different tools for different jobs. Many languages were invented and developed for specific needs(even though through their evolution they are all able to solve some common problems).
  2. Big tech companies invented their own programming languages to solve specific problems, java, c#, go, Swift to name a few. These languages have their own goals and priorities, which are not in line with existing ones.
  3. People love to invent new things and programming language is no different. People often say "Each language has its own unique characteristics that would make it suitable to solve a particular problem." But I would like to put it another way, each language bears the characteristics that come from their inventors's experiences/strengths/lessons learned with the languages they used before.
  4. People have different tastes, personal preferences, or philosophies, when they don't like language A, they invent language B. **I will emphasize this one to my students.** When I search answers to this question I don't see many mentioned this. But think it is an important reason. For example, I hate C++, to me it is an ugly language. I read somewhere (I can't find it now), golang inventors don't like C++ too(same as Java inventor I think), so they invent their own languages.
  5. Technology is evolving. So people and big companies always feel the need to design a new language to better harness the new technology. The latest example of this may be [mojo](https://www.modular.com/mojo) although reading its introduction I can't help saying WHY and again?!
  
  The list is no doubt not exhaustive (and they overlap) but I try to make them not be too pedantic or too boring. For example, I particularly stay away from the reasons like "different programming languages are based on different programming **paradigms**"
  
  Can you guys help me compile a list or give an answer that high school students can appreciate?
  
  I searched cseducators site and found [Why isn't there one language to use instead of different programming languages?](https://cseducators.stackexchange.com/questions/7186/why-isnt-there-one-language-to-use-instead-of-different-programming-languages), I am afraid most of the answers there will get a Tl;dr response from highschoolers ( at least from my students).
  
  **Tags:** programming, secondary-education
  
  > **Comments:**
  > **username_1**: Obligatory XKCD, great as an ice breaker with the students: https://xkcd.com/927/  
  > **username_2**: I've been trying to compose an answer to your earlier question: _Can CS students not program_?  Seeing this I see to be frank it's a more interesting question! And factually the 2 are related: CS students can't program (among other things because...) not only are they taught badly, theyre taught wrong things  
  > **username_0**: Thanks. I am not a full-time teacher just volunteer to teach in some middle/high school and I like to do that. Kids ambush me from time to time some interesting questions, e.g. https://cseducators.stackexchange.com/questions/7757/non-native-english-speakers-struggle-to-come-up-with-decent-variable-names-and-f  
  > **username_3**: It is kind of like "why so many species of beetles?" Nothing succeeds like success.  
  
  ---
  
  ## 1 answers
  
  ### Answer by username_4 on 2023-11-05. Score: 5
  
  If a language becomes popular, two things happen. Both of them lead to new ideas and that leads to new languages, some of which are just refinements on existing languages.
  
  The first issue is that when there are a lot of users, flaws in a language become more apparent. For example, in C it is far to easy to make memory errors with things like null-terminated strings. Skilled programmers (and not everyone is sufficiently skilled) can avoid these with sufficient care, though taking care is hard.
  
  The second issue is that when there are a lot of *communicating* users of a language, styles of programming in that language emerge. Some of them are to avoid the potential errors mentioned above, but there are other things that are found useful.
  
  Both of the above lead to new languages. Strings in Java, say, are pretty safe and don't lead to memory errors. OO is, among other things a *style* of programming quite different from C, which is a procedural language. In OO languages, one's thought process is pushed toward "things" with behavior (objects). In procedural languages (of which Modula is perhaps the best embodiment, one things about actions, not things, and actions have sub-actions (nested procedures).
  
  There is also a general trend away from hardware considerations toward more conceptual things. In fact the normal concept of how hardware behaves isn't really how it works anymore with modern CPUs and GPUs. This makes a more abstract representation of a program more desirable as it permits execution on various kinds of hardware.
  
  So, lots of languages is really a feature of progress in thinking about the nature of programs and how to implement them effectively and efficiently. Higher level abstractions, such as are possible in Haskell and Python make programming easier.
  
  If we "stick" with one language, that progress in thinking would stop. The same thing is true in most other aspects of life as well. People's thinking advances, so we expect processes to advance as well.
  
  ---
  
  Note that the above isn't intended to be comprehensive. There are other reasons. I've created languages just for use with my students in the compiler course as they embody "interesting" concepts in translation.
  
  > **Comments:**
  > **username_3**: Even with one language, if it is sufficiently powerful, one can continue to make progress. 30 years ago with C I was working towards my own ideas of OOP and Dependency Injection, also making a lot of use of macros, and creating various Domain Specific Languages and even a free standing interpreter of a special purpose mini-language I built. The tools and languages, like C#, are vastly better now, and I don't need to innovate hardly at all, so you could say that better conditions made me lazier and less innovative. We come up with new things when forced to, not necessarily because it is easy.  
  
  ---
  
  