7
$\begingroup$

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. 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.

$\endgroup$
8
  • 2
    $\begingroup$ 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. $\endgroup$
    – Jon Custer
    May 4, 2020 at 17:38
  • 1
    $\begingroup$ Logic is the most universal... $\endgroup$
    – Solar Mike
    May 4, 2020 at 17:51
  • 1
    $\begingroup$ @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. $\endgroup$
    – Buffy
    May 4, 2020 at 21:49
  • 1
    $\begingroup$ 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 $\endgroup$
    – gatorback
    May 4, 2020 at 21:54
  • 1
    $\begingroup$ ...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. $\endgroup$ May 17, 2020 at 0:38

2 Answers 2

6
$\begingroup$

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.

$\endgroup$
6
  • 3
    $\begingroup$ 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. $\endgroup$ May 4, 2020 at 20:49
  • $\begingroup$ @GypsySpellweaver, maybe you should write up an answer around computational thinking. $\endgroup$
    – Buffy
    May 4, 2020 at 21:49
  • $\begingroup$ 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). $\endgroup$
    – user760900
    May 5, 2020 at 1:45
  • $\begingroup$ 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. $\endgroup$ May 5, 2020 at 2:48
  • 2
    $\begingroup$ @user760900, I've written here earlier about paradigms and learning for beginners: cseducators.stackexchange.com/a/4295/1293 $\endgroup$
    – Buffy
    May 5, 2020 at 10:03
5
$\begingroup$

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, 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 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.

$\endgroup$
1
  • 2
    $\begingroup$ This is very carefully broken down and well thought out. $\endgroup$
    – Ben I.
    Jun 7, 2020 at 22:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.