On Wed, Aug 13, 2025 at 03:23:26PM +0200, sirjofri via 9fans wrote: > I'd like to see learning material or a course that starts at these basic > things. Like, tell people what a transistor is and how it works, explain to > the the fundamentals of a (simple) CPU, maybe on a breadboard. Then start to > dive into programming by actually programming that machine as if you're > driving a car or knitting socks, and so on. If someone has any experience > with an approach like that (from a teaching perspective), I'd like to know > more about it.
This is essentially how I do my intro course. I've taken to sub-titling it "From Transistors to Turing Machines." We start with Boolean Algebra. I don't get into the details of transistors here, but allude to the fact that they can act like switches and then show that relay-like switching can implement Boolean operations. In that session, I take it up to a full adder design. The next session is about binary data representation, desparately trying to get them to understand that the only type inside the hardware is binary number. Many of them have been exposed to something like Python or Java before and have a mental model that somehow numbers look like they do in math, that numbers are somehow different from letters, etc. Until one overcomes this misunderstanding, I cannot trust anything they write. The next step up the ladder of abstraction is to take our full adder and put them in parallel, cascading the carries, so that we can operate on numbers represented in binary. We then look at how we can turn it into an adder/subtractor and then build a CPU around that ALU. That gets us to a computer that we can program where we use the old CARDIAC as our example. This gives them a chance to get their hands dirty with a little machine language programming (the only real programming :)). Our next session gets into the more general ideas of languages and translation. After that, I introduce them to a small artificial language I created just for the course. It's complete enough to do the projects we have traditionally done, but small enough that it can be fully mastered in a week or two. It also pushes really hard on the fact that to truly know what you're doing, you have to be aware and intentional of the difference of the address of a memory location and the contents of a memory location. After a few sessions talking about some application domains as examples, the final session is on theory, where I take them from early paradoxes to Turing. We do a few semi-formal proofs up through the halting theorem, when I also point out that it's just a special case of the more general Rice's theorem that basically says no non-trivial question about programs is decidable. The punch line that day ties everything full circle when I point out that the CPU we designed earlier is one way to realize the functionality of Turing's universal machine. One of my all-time favorite memories was of one student at that point in the class as her jaw literally dropped as she realized how it all fit together. In all of that, I try to get them to understand that Computer Science is the study of the phenomena surrounding universal machines, and not just some vocational/jobs thing. If the only point of Computer Science were to create apps, it wouldn't be worth doing any more that Physics wouldn't be worth doing if it were just about creating levers. Alas, this course is almost certainly not going to survive the moves of the younger generation of faculty and the ill-advised switch to semesters. But I have been able to teach it this way for about 10 years. At least some students have started with something other than, "the syntax to declare the main function in Java is: public static void green cloudy liquid main()" Can you tell I think that languages like Java and Python are the worst possible way to introduce people to the field? :) BLS ------------------------------------------ 9fans: 9fans Permalink: https://9fans.topicbox.com/groups/9fans/Tb685cd67e7406b5c-M27761486ec29604efb5d2969 Delivery options: https://9fans.topicbox.com/groups/9fans/subscription
