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.
This kind of list may be right for a trade school. If that's what you're referring to, then I don't disagree. Those students want to learn how to use those tools.
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.
Hey you're right, and I agree!
In my freshman year of college, I thought I was hot stuff because I knew C++, so I tried to place out of some of the 100 level classes. But the test seemed strange to me, focusing more on abstractions than syntax. I don't remember if I failed, but I don't think I placed out of anything. One of my first classes was on Lisp, specifically Scheme, and it completely blew my mind and forever changed how I look at programming.
Just before I graduated in 1999, they started transitioning to Java, because the web was so popular. But most of us thought that was a mistake. I don't know if they ever switched back to Lisp.
On a funny note, I took that whole class without realizing that Lisp statements could be broken up into separate lines. Or more accurately that each line just declares equivalences that get reduced down to their simplest form by the runtime. So I wrote all of the homework assignments as one giant function of nested parentheses, even for some of the more complex tasks on sorting primitives like lists and trees. I picture the graders shaking their heads in a mix of frustration and awe hahaha.
I would choose Gel (nee Edgedb) for the DB. It has first class support for traversing relationships.
https://www.geldata.com/blog/postgis-webhooks-networking-and...
Rather than raw PostScript, I would suggest METAPOST --- it's a lot more approachable, and with mplib as part of luatex, far more approachable (no need for Ghostscript or distilling to PDF).