I was sitting around thinking about high school computer science curriculum last night when the idea of a programming languages survey course came to mind. I’m a firm believer that spending all on ones time learning just one programming language in high school fails to take advantage of how quickly students learn new languages. It is has been said that the hardest language to learn is the second and that after knowing two the rest become easier. I believe that. So what if we created a course, maybe even a semester course, that stuck to the very basics but introduced several programming languages? Suppose we included several programming paradigms as well? What would that look like?
I was thinking that you’d teach using one of the block programming languages for one. Pick one of Alice, Scratch, Blockly, Appinventor, or Snap! Doesn’t matter – pick the one you like best. Then include a couple of traditional programming languages.
Pick at least two with no more than one being a semi colon and curly brace member of the C family. So one of C, C++, C# or Java. Again which ever one you like best. For an other language pick one or two from Visual Basic (or some other Basic) and Python or something else you like. PASCAL anyone? I recommend you use Visual Basic though. Controversial perhaps but I can think of a couple of reasons.
One reason is that the Select/Case structure is much more powerful and flexible than the switch/case structure in C family languages. This is driving me crazy right now teaching C#. Also the AndAlso and OrElse keywords compared to And and Or really help bring home short-circuiting. Plus it lets students see that those semi colons and curly braces are not the only way to do things.
Python is also a good choice as it is a powerful dynamic language that is growing in use everywhere. I think that using a good dynamic language is a plus for this sort of course.
Lastly I think you need a Functional language. Scheme, Lisp, Ratchet or perhaps F#. Not having a good background in a functional language is a big hole in my own background and with functional languages becoming more popular all the time I think students should have some exposure to the paradigm.
There are lots of options in all categories of course and I would expect different people to pick different languages. I would probably pick: Scratch, C#, Visual Basic, Python and Ratchet (or maybe F#). With Visual Studio I can teach/use C#, VB and F# all in the same IDE which could save some time and allow code from a project in one language to be used in a project written in another. But maybe there is some value to using multiple IDEs. Different strokes for different folks.
I would not try to “boil the ocean” and get students totally up to speed in all languages but would focus on key concepts that are fairly common to all languages.
- Variables and Assignments
- Loops (for and while)
- Decision structures (if and switch)
- What else?
Maybe a few other things that are done particularly well in one language or paradigm and not as well in others. What would you include?
I don’t see this as a replacement for a university level Programming Languages course but as a gentle introduction to the various ways that syntax effects how we look at programs while keeping some key concepts constant.
I don’t see this as a first course. Maybe not even a second but also not the last that they take in high school. I would want to get students to want to learn new languages. I would also want them to see different ways of doing things before they get too set on their ways. Open minds rather than just fill them.
What do you think? Am I crazy? Are my groupings off or missing something important? What languages would YOU select? Is 5 the right number of languages or too many? Too few? Should assembly language be included? I wonder about that one. I’m looking to start a dialogue not present a finished product. So please leave me some things to think about.