3
$\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 op code 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 year 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$
  • 1
    $\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 at 17:38
  • 1
    $\begingroup$ Logic is the most universal... $\endgroup$ – Solar Mike May 4 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 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 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$ – heather May 17 at 0:38
3
$\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 program 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.

| improve this answer | |
$\endgroup$
  • 1
    $\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$ – Gypsy Spellweaver May 4 at 20:49
  • $\begingroup$ @GypsySpellweaver, maybe you should write up an answer around computational thinking. $\endgroup$ – Buffy May 4 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 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$ – Gypsy Spellweaver May 5 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 at 10:03
2
$\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 top desires skills are those that fall under being good communication and teamwork skills.

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.

| improve this answer | |
$\endgroup$
  • $\begingroup$ This is very carefully broken down and well thought out. $\endgroup$ – Ben I. Jun 7 at 22:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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