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

Reply via email to