I think that modern computer education is wrong and bad and I have a modest proposal/bad idea to fix it:

Teach computer science via living computer history.

Start folks off on (modern recreations of) early computers. Make them qualify by submitting a program on punch cards before graduating to a serial terminal.

Give them a text terminal on a very limited timesharing system; running an older OS, and encourage them to make it their only computer usage.

Have them complete assignments on various 8bit micros, and then on 68Ks.

Use Unix.

But, like, Unix Unix. Ed Unix.

Give folks and understanding of the history of computing, the depth and breadth of existing tool chains, and the capabilities and limitations of vintage designs.

And, only after they have that historica perspective, do you toss anything modern at them.

Let people live their life, and write their code, in less than 1MB of RAM on a 12-bit or 16-bit minicomputer before moving on to something powerful enough to encourage bad decisions.

The history of modern computing isn’t very long, it can be learned and lived and in doing so, we’ll get better engineers, with the ability and perspective to write better software.

There are several reasons for this (and about a million reasons against it, but that’s for another day)

1) learning a programming language doesn’t make you an engineer.
2) how can we avoid past mistakes if we never discuss them?
3) how can we write better tools for the next generation of computers if we’ve never used the best tools from the last generation of computers?

4) we’ve been using the same rough architecture for a long time. Eons in the computer word, and we are long overdue for a change, but most modern computer education presents x86-64 as if it is without flaw, and the inevitable path for our future, instead of just one option among many.

5) Abstraction is good. Learning how to solve a specific problem in a specific case is okay. Learning how to solve a class of problems across multiple cases is better.

@ajroach42 is it implied that this is toward would-be engineers/programmers or just for anyone

@lowfatsin I mean, I’m not terribly serious about doing this for anyone.

There are better ways to achieve the same results.

But the theoretical person in this scenario is someone who wants to be a “serious” computer engineer, yeah. The kind of person who would study computer science at MIT or Berkeley or GA Tech or whatever.