> The explosion in tools that do somewhat similar things makes me feel like we're doing the wrong thing as a community.
Yes. And, that thing is forgetting to teach history to people. There was a story a few days ago about a father pushing his son to play video games in chronological order [1]. Perhaps we need to do something similar in software development.
In my experience, two of the most important attributes of a good developer are awareness of historical context (understanding important lessons that have been learned, and how those lessons influenced major decisions) and knowledge of common idioms of the technologies/tools/languages they use.
I really like your idea. Imagine a book, class or structured tutorial that sliced up the history of web development (or UI design, Windows app development, parallel programming, game development, network communication, systems administration, mobile development, or any other kind technical topic) into a handful of important "eras" and spent a couple hours or days on each one doing a technical deep dive. Boot up a VM, install the dev tools of the day, have your hand held through some characteristic tasks so you could see first hand how people were thinking during that era, what kinds of things were easy to do, and what was hard. As you move to the next era, you get to see the results of the lessons that were learned (or not learned!) in the previous one.
The more I think about it, the more I like this idea.
Mixing a progression though programming language/machine/tooling history and nand2tetris, and perhaps a companion tetris2nand [1], would make for an amazing foundation for future programmers. You would just have to make sure the high school students still pass the AP exams, to justify the multiple courses.
[1] Tetris2nand does not exist. The idea would be to build the "ideal programming language" and then work your way down to the hardware, exploring things like GCs, parallelism, and more along the way.
I've been trying (and failing) to go through Peter Norton's Assembly book to start learning x86 assembler. The plan was to then do some DOS VGA programming and work my way through Turbo Pascal and C. I'd love to take a course that's historically focused as you described.
Sidenote: If anyone knows someone at Penguin, can you help me get permission to put Peter Norton's book on GitHub and update it?
i've done exactly that when i was in school. you can still do it. i believe turbo pascal/c is available even today and supports asm blocks directly, so you can do assembly programming in pascal/c.
Yes. And, that thing is forgetting to teach history to people. There was a story a few days ago about a father pushing his son to play video games in chronological order [1]. Perhaps we need to do something similar in software development.
[1] https://medium.com/message/playing-with-my-son-e5226ff0a7c3