I wish that the first semester of programming class deliberately left code out of the material. IMHO students should start with something like this short list: FileMaker/Microsoft Access/HyperCard (no longer exists)
Macromedia Flash (no longer exists)
Spreadsheets (like Microsoft Excel, unfortunately Airtable isn't there yet?)
Wix (maybe? surely there are better alternatives)
Zapier (or an open source version)
Then move on to what programming could/should be: htmx
Firebase/RethinkDB (no longer maintained?)
Erlang/Go
GNU Octave/MATLAB
Lisp/Scheme/PostScript/Clojure
Only then, after having full exposure to what computers are capable of and how fast they really are, should students begin studying the antipatterns that have come to dominate tech: React
Ruby on Rails
Javascript (warts of the modern version with classes and async/await, not the original)
C#/Java/C++/Rust (the dangers of references/pointers and imperative programming)
iOS/Android (Swift vs Objective-C, Kotlin vs Java, ill-conceived APIs, etc)
I realize this last list is contentious, but I could go into the downsides of each paradigm at length. I'm choosing not to.Since we can't fix the market domination of multibillion companies who don't care about this stuff on any reasonable timescale, maybe we can pull the wool off the children's eyes and give them the tools to tear down the status quo. I suspect that AI and geopolitical forces may take this decision away from us though. It may already be too late. In that case, we could start with spiritual teachings around philosophy, metaphysics and wisdom to give them the tools needed to work with nonobjective and nondeterministic tech that's indistinguishable from magic. |
But if the class is computer science at a university, then the students want to go deeper and learn how to improve upon and compete with the existing tools. They need the theory first, which means Lisp (or a derivative) and an imperative language.