Answers.Body: <p>There isn't a best language, other than the language that you know well and can use for modeling things. Python is good. And it is reasonably straightforward for a young beginner.</p>
  <p>Don't fall into the trap of thinking that a lot of languages learned superficially is valuable. It isn't and can lead you astray.</p>
  <p>But the things you list aren't enough. The big idea of modern computing languages is &quot;abstraction&quot;. Object oriented languages like Python do a pretty good job creating values that have sensible behavior that can be composed into programs.</p>
  <p>In the US, a CS educational program (a <em>major</em>) is more likely to use Java than other languages, though it isn't universal. Another good language is Scheme, but with a C++ background you might have a harder time teaching the essence of it.</p>
  <p>And, don't fall into the trap of teaching Python as if it were C++ with more words. Each language has a mental model that is worth the effort to learn.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-05-04T20:49:41.623Z
Answers.Text: As mentioned, it's not the language choice which is important, it's learning to think in a manner which allows programs to be written. Computational Thinking is the term in current use. The language is a tool, not the goal.
Answers.UserDisplayName: Gypsy Spellweaver
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-05-04T21:49:39.317Z
Answers.Text: @GypsySpellweaver, maybe you should write up an answer around computational thinking.
Answers.UserDisplayName: Buffy
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-05-05T01:45:49.990Z
Answers.Text: Would you be able to expand on how each language is a different mental model? I am currently an undergrad and have essentially been operating on the principle that languages just use different syntax to do the same thing (ie. C++ is Python with more words).
Answers.UserDisplayName: user760900
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-05-05T02:48:06.073Z
Answers.Text: Writing an answer around computational thinking was a thought I had, but I decided it would qualify as "Not An Answer" as it would by topical, yet not really answering the question.
Answers.UserDisplayName: Gypsy Spellweaver
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-05-05T10:03:04.070Z
Answers.Text: @user760900, I've written here earlier about paradigms and learning for beginners: https://cseducators.stackexchange.com/a/4295/1293
Answers.UserDisplayName: Buffy
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-05-20T16:37:15.303Z
Answers.Text: My expectation is that if a 14 y.o. learns a given language, he / she will need to learn another language depending on the functional career route.  My gut tells me simplicity is the key, while ensuring that the basics (sequence, selection, iteration) are practiced to ensure preparation for a new language: for example if studying engineering learning MATLAB
Answers.UserDisplayName: gatorback
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-05-04T19:24:41.937Z
Answers.LastActivityDate: 2021-07-05T16:02:21.660Z
Answers.LastEditDate: 2021-07-05T16:02:21.660Z
Answers.UserDisplayName: Buffy
Answers.Body: <p>If you want to teach them how to <em>code</em> or <em>how to implement algorithms</em>, then any language will do just as well as any other.</p>
  <p>But if you want to prepare them <em>to be successful in STEM</em>, then here are the top three skills I wish all of my undergraduate students had more experience with:</p>
  <h1>1. Basic Problem Solving</h1>
  <p>The most important thing to teach someone you want to help prepare for a STEM major is <em>problem solving</em>. Specifically:</p>
  <ol>
  <li>How to look at a situation/scenario/question and clearly define the problem.</li>
  <li>How to break that problem up into smaller parts.</li>
  <li>How to solve each part independently and/or sequentially as needed.</li>
  <li>How to put those independent solutions back together into a complete solution to the original problem.</li>
  </ol>
  <p>Teaching this skill doesn't require a specific language or even a computer. In fact, I often tell me students that they shouldn't even open up their code editors until they have these steps clearly worked out on paper or a whiteboard in some way.</p>
  <h1>2. How to Read Technical Documentation</h1>
  <p>Over the last couple of decades, <a href="https://www.nngroup.com/articles/how-people-read-online/" rel="nofollow noreferrer">the way people read complex information has changed dramatically</a>, driven largely by how online content is presented.</p>
  <p>When my students hit mid-level courses and assignment instructions consist of things like &quot;Go learn how such and such library works and then solve this problem with it,&quot; many of them struggle with figuring out how to read the documentation and instead fallback to YouTube videos.</p>
  <p>There are some great video-based tutorials, but most tools and technologies in CS change so fast, nothing beats being able to go directly to the most up-to-date docs and read through the technical details of how the API works.</p>
  <h1>3. Communication Skills / Working Well With Others</h1>
  <p><a href="https://www.forbes.com/sites/susanadams/2014/11/12/the-10-skills-employers-most-want-in-2015-graduates/#4bebb14f2511" rel="nofollow noreferrer">This survey posted in Forbes</a> shows the top 10 skills employers look for in technology hires. Notice how specific technical skills don't show up on the list until way down at number 7:</p>
  <ol>
  <li>Ability to work in a team structure</li>
  <li>Ability to make decisions and solve problems (tie)</li>
  <li>Ability to communicate verbally with people inside and outside an organization</li>
  <li>Ability to plan, organize and prioritize work</li>
  <li>Ability to obtain and process information</li>
  <li>Ability to analyze quantitative data</li>
  <li>Technical knowledge related to the job</li>
  <li>Proficiency with computer software programs</li>
  <li>Ability to create and/or edit written reports</li>
  <li>Ability to sell and influence others</li>
  </ol>
  <p>The most desired skills are those that fall under good communication and teamwork.</p>
  <h1>Conclusion</h1>
  <p>Obviously the technical know-how needs to be there in the end, but a new student with strong problem solving, reading comprehension, and communications skills is going to be much more successful in a STEM career than a student who lacks those skills but has experience with a dozen different programming languages.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-06-07T22:38:05.570Z
Answers.Text: This is very carefully broken down and well thought out.
Answers.UserDisplayName: Ben I.
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2024-05-01T18:22:58.763Z
Answers.Text: After 40 years of work, I believe item 3 captures the most valuable skills in the right order of priority. When my students in future ask "what is the best university for subject X?" I will give them a copy of list 3 and say "concentrate on these first. It may not give you the highest grades in Uni/college but talk about real-life working in teams, prioritising etc.  in a job interview and you will be the first person hired".
Answers.UserDisplayName: Clive Long
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-06-07T20:26:52.413Z
Answers.LastActivityDate: 2021-07-05T15:41:41.183Z
Answers.LastEditDate: 2021-07-05T15:41:41.183Z
Answers.UserDisplayName: lfalin
Body: <p>I intend to lead a nephew through the exercises of sequence, selection, and iteration via Python.  I also intend to introduce hardware sensors for data collection.  If there is a better choice  (I learned via C++ and embedded opcode programming), for a high school student, I would be interested in understanding other options.  I have minimal experience with Python, however, I have had success with barcode readers, databases, string processing using Python.</p>
  <p>Which programming language best prepares high school students for a STEM college major and why? <strong>Any STEM: not necessarily a CS or even a EE major.</strong></p>
  <p>I would like the student to master the fundamentals:</p>
  <ul>
  <li>sequence</li>
  <li>selection</li>
  <li>iteration</li>
  <li>utilizing library functions</li>
  </ul>
  <p>The student should master these fundamentals so that he/she can search and recognize these concepts in another language (MATLAB, Ada, C, Smalltalk, etc.)</p>
  <p>The choice of language is important in the sense that one must consider the audience and balance the need for <strong>simplicity</strong> (from the standpoint of 14 years old) and <strong>pedagogical quality</strong>: as a stepping stone to future  STEM problem-solving activities.</p>
  <p>Reasons for my initial selection of Python include my observation that MIT is teaching <a href="https://youtu.be/OgO1gpXSUzU?t=977" rel="nofollow noreferrer">statistics, which assumes fluency in Python</a>.  Other reasons include a large number of Python libraries to support Raspberry Pi sensors and boards.</p>
  <p>If you are an instructor at the university level, please state this in your reply.</p>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2020-05-04T17:38:09.280Z
Comments.Text: Python is good for now. They will pick up (via courses or individual practice) whatever else is needed. The first language is hard, the others come easier.
Comments.UserDisplayName: Jon Custer
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2020-05-04T17:51:28.437Z
Comments.Text: Logic is the most universal...
Comments.UserDisplayName: Solar Mike
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2020-05-04T18:09:52.467Z
Comments.Text: It doesn't matter.  You should aim to learn enough programming languages so that picking up another one is easy.
Comments.UserDisplayName: Alexander Woo
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2020-05-04T21:49:01.043Z
Comments.Text: @AlexanderWoo, actually it is _easy_ only if you take a superficial (syntax) view and stay within a paradigm. Otherwise it is harder. And a lot of languages is a poor substitute for really using one well.
Comments.UserDisplayName: Buffy
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2020-05-04T21:54:34.480Z
Comments.Text: My experience is that because I learned C and Motorola assembly, other languages were easy to pickup.   Mastering fundamentals, such as sequence, selection and iteration accelerates the ability to read a new language and understand the bigger picture
Comments.UserDisplayName: gatorback
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2020-05-17T00:38:43.767Z
Comments.Text: ...does your nephew want to do this? Is there something your nephew is especially interested in? This seems far more important than what is technically pedagogically best.
Comments.UserDisplayName: auden
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2020-05-20T16:15:48.960Z
Comments.Text: The nephew is interviewing for a STEM club, robotics
Comments.UserDisplayName: gatorback
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2020-05-20T16:33:30.137Z
Comments.Text: Upon review, confining the question to learning the said 4 fundamentals as opposed to asking regarding STEM preparation may have been more constructive.
Comments.UserDisplayName: gatorback
Tags: <programming>
Title: What language best prepares a high school student for a STEM undergraduate major?
ThreadText: # What language best prepares a high school student for a STEM undergraduate major?
  
  (Asked by: username_0 on 2020-05-04)
  
  I intend to lead a nephew through the exercises of sequence, selection, and iteration via Python. I also intend to introduce hardware sensors for data collection. If there is a better choice (I learned via C++ and embedded opcode programming), for a high school student, I would be interested in understanding other options. I have minimal experience with Python, however, I have had success with barcode readers, databases, string processing using Python.
  
  Which programming language best prepares high school students for a STEM college major and why? **Any STEM: not necessarily a CS or even a EE major.**
  
  I would like the student to master the fundamentals:
  
  * sequence
  * selection
  * iteration
  * utilizing library functions
  
  The student should master these fundamentals so that he/she can search and recognize these concepts in another language (MATLAB, Ada, C, Smalltalk, etc.)
  
  The choice of language is important in the sense that one must consider the audience and balance the need for **simplicity** (from the standpoint of 14 years old) and **pedagogical quality**: as a stepping stone to future STEM problem-solving activities.
  
  Reasons for my initial selection of Python include my observation that MIT is teaching [statistics, which assumes fluency in Python](https://youtu.be/OgO1gpXSUzU?t=977). Other reasons include a large number of Python libraries to support Raspberry Pi sensors and boards.
  
  If you are an instructor at the university level, please state this in your reply.
  
  **Tags:** programming
  
  > **Comments:**
  > **username_1**: Python is good for now. They will pick up (via courses or individual practice) whatever else is needed. The first language is hard, the others come easier.  
  > **username_2**: Logic is the most universal...  
  > **username_3**: It doesn't matter.  You should aim to learn enough programming languages so that picking up another one is easy.  
  > **username_4**: @username_3, actually it is _easy_ only if you take a superficial (syntax) view and stay within a paradigm. Otherwise it is harder. And a lot of languages is a poor substitute for really using one well.  
  > **username_0**: My experience is that because I learned C and Motorola assembly, other languages were easy to pickup.   Mastering fundamentals, such as sequence, selection and iteration accelerates the ability to read a new language and understand the bigger picture  
  > **username_5**: ...does your nephew want to do this? Is there something your nephew is especially interested in? This seems far more important than what is technically pedagogically best.  
  > **username_0**: The nephew is interviewing for a STEM club, robotics  
  > **username_0**: Upon review, confining the question to learning the said 4 fundamentals as opposed to asking regarding STEM preparation may have been more constructive.  
  
  ---
  
  ## 2 answers
  
  ### Answer by username_4 on 2020-05-04. Score: 6
  
  There isn't a best language, other than the language that you know well and can use for modeling things. Python is good. And it is reasonably straightforward for a young beginner.
  
  Don't fall into the trap of thinking that a lot of languages learned superficially is valuable. It isn't and can lead you astray.
  
  But the things you list aren't enough. The big idea of modern computing languages is "abstraction". Object oriented languages like Python do a pretty good job creating values that have sensible behavior that can be composed into programs.
  
  In the US, a CS educational program (a *major*) is more likely to use Java than other languages, though it isn't universal. Another good language is Scheme, but with a C++ background you might have a harder time teaching the essence of it.
  
  And, don't fall into the trap of teaching Python as if it were C++ with more words. Each language has a mental model that is worth the effort to learn.
  
  > **Comments:**
  > **username_6**: As mentioned, it's not the language choice which is important, it's learning to think in a manner which allows programs to be written. Computational Thinking is the term in current use. The language is a tool, not the goal.  
  > **username_4**: @username_6, maybe you should write up an answer around computational thinking.  
  > **username_7**: Would you be able to expand on how each language is a different mental model? I am currently an undergrad and have essentially been operating on the principle that languages just use different syntax to do the same thing (ie. C++ is Python with more words).  
  > **username_6**: Writing an answer around computational thinking was a thought I had, but I decided it would qualify as "Not An Answer" as it would by topical, yet not really answering the question.  
  > **username_4**: @username_7, I've written here earlier about paradigms and learning for beginners: https://cseducators.stackexchange.com/a/4295/1293  
  > **username_0**: My expectation is that if a 14 y.o. learns a given language, he / she will need to learn another language depending on the functional career route.  My gut tells me simplicity is the key, while ensuring that the basics (sequence, selection, iteration) are practiced to ensure preparation for a new language: for example if studying engineering learning MATLAB  
  
  ---
  
  ### Answer by username_8 on 2020-06-07. Score: 6
  
  If you want to teach them how to *code* or *how to implement algorithms*, then any language will do just as well as any other.
  
  But if you want to prepare them *to be successful in STEM*, then here are the top three skills I wish all of my undergraduate students had more experience with:
  
  # 1. Basic Problem Solving
  
  The most important thing to teach someone you want to help prepare for a STEM major is *problem solving*. Specifically:
  
  1. How to look at a situation/scenario/question and clearly define the problem.
  2. How to break that problem up into smaller parts.
  3. How to solve each part independently and/or sequentially as needed.
  4. How to put those independent solutions back together into a complete solution to the original problem.
  
  Teaching this skill doesn't require a specific language or even a computer. In fact, I often tell me students that they shouldn't even open up their code editors until they have these steps clearly worked out on paper or a whiteboard in some way.
  
  # 2. How to Read Technical Documentation
  
  Over the last couple of decades, [the way people read complex information has changed dramatically](https://www.nngroup.com/articles/how-people-read-online/), driven largely by how online content is presented.
  
  When my students hit mid-level courses and assignment instructions consist of things like "Go learn how such and such library works and then solve this problem with it," many of them struggle with figuring out how to read the documentation and instead fallback to YouTube videos.
  
  There are some great video-based tutorials, but most tools and technologies in CS change so fast, nothing beats being able to go directly to the most up-to-date docs and read through the technical details of how the API works.
  
  # 3. Communication Skills / Working Well With Others
  
  [This survey posted in Forbes](https://www.forbes.com/sites/susanadams/2014/11/12/the-10-skills-employers-most-want-in-2015-graduates/#4bebb14f2511) shows the top 10 skills employers look for in technology hires. Notice how specific technical skills don't show up on the list until way down at number 7:
  
  1. Ability to work in a team structure
  2. Ability to make decisions and solve problems (tie)
  3. Ability to communicate verbally with people inside and outside an organization
  4. Ability to plan, organize and prioritize work
  5. Ability to obtain and process information
  6. Ability to analyze quantitative data
  7. Technical knowledge related to the job
  8. Proficiency with computer software programs
  9. Ability to create and/or edit written reports
  10. Ability to sell and influence others
  
  The most desired skills are those that fall under good communication and teamwork.
  
  # Conclusion
  
  Obviously the technical know-how needs to be there in the end, but a new student with strong problem solving, reading comprehension, and communications skills is going to be much more successful in a STEM career than a student who lacks those skills but has experience with a dozen different programming languages.
  
  > **Comments:**
  > **username_9**: This is very carefully broken down and well thought out.  
  > **username_10**: After 40 years of work, I believe item 3 captures the most valuable skills in the right order of priority. When my students in future ask "what is the best university for subject X?" I will give them a copy of list 3 and say "concentrate on these first. It may not give you the highest grades in Uni/college but talk about real-life working in teams, prioritising etc.  in a job interview and you will be the first person hired".  
  
  ---
  
  