Every program has (at least) two purposes: the one for which it was written, and another for which it wasn't.
Alan J. Perlis
I am doing a startup!
Cross-browser testing from your browser!
I have written my fourth book!
Be faster than Larry Wall in the shell!
You're replying to a comment by Tj Gabbour.
I don't have a favorite, but here's one...
The Elements of Computing Systems: http://nand2tetris.org/
I use this to teach someone how computers work. Neither of us cared so far to run the simulation software; we just run everything by hand with our minds and whiteboards on the table. (Or when lucky, a whiteboard-like table surface.)
I find their assembly language rather unpleasant. But we got surprisingly used to their (binary) machine language, pretending we're the CPU control unit, quickly bored with longs trips to RAM and figuring out ways to make our job faster. (We also used a textual assembly I made up, as well as one using Clojure's EDN format.)
Same with the usual notation of logic gates. I just use boxes with names; I anthropomorphize them to distinguish them conceptually, rather than give them some weird visual shape.
Teaching is quite an undertaking. I prepare nice reference sheets (using Balsamiq) to visualize processes. I imagine I'll release them later.
This is a springboard for other texts, which I read to be able to answer questions. (Today, we're delving into input/output, which means I need to know more than "uh, the book says direct memory addressing." So I skimmed sections of books like: Hennessy & Patternson's "Computer Architecture", "See MIPS Run", Intel's "Software Developer's Manual", Ward & Halstead's "Computation Structures", Mano and Kime's "Logic and Computer Design Fundamentals".)
One theme that really comes out is, when you get to the register machine, it's like a board game. You wake up & start your turn, see what's around, do the thing, and end your turn. When we popped up briefly to a much higher level (Clojure) — with an explanation that followed how an interpreter works — it's kind of the same: you see a form and environment... well, there's a weird thing where you-as-eval call eval again (because the program is a tree rather than a list), so you awaken into into a new consciousness which starts its turn while you're still awake... but eventually you (hopefully) end your turn.
(why do I need your e-mail?)
It would be nice if you left your e-mail address. Sometimes I want to send a private message, or just thank for the great comment. Having your e-mail really helps.
I will never ever spam you.
(Your twitter handle, if you have one.)
* use <pre>...</pre> to insert a plain code snippet.
* use <pre lang="lang">...</pre> to insert a syntax highlighted code snippet.
For example, <pre lang="python">...</pre> will insert Python highlighted code.
* use <code>...</code> to highlight a variable or a single shell command.
* use <a href="url" nospam>title</a> to insert links.
<a href="url" nospam>title</a>
* use other HTML tags, such as, <b>, <i>, <blockquote>, <sup>, <sub> for text formatting.
Type the word "coding_455": (just to make sure you're a human)
Please preview the comment before submitting to make sure it's OK.
Peter Krumins' blog about programming, hacking, software reuse, software ideas, computer security, browserling, google and technology.
Reach me at:
Or meet me on:
Subscribe through an RSS feed:
Subscribe through email:
Enter your email address:
Delivered by FeedBurner
See all top articles
See all downloads
See more detailed list of recent articles
See more detailed category information
See more detailed list of all articles