1. 19
  1.  

  2. 12

    Note: this article was not selected for my browsing list today, but I’ve got a knee-jerk reaction to the headline for you.

    • Code: The Hidden Language of Computer Hardware and Software, by Charles Petzold

    Don’t let the corny title fool you… Petzold takes the reader from communicating a single bit of information using a simple battery-switch-bulb circuit (a single bit: “I am home/I am not home”) all the way to a CPU that could do real work.

    He introduces electric relays as automatic switches and transistors as fast relays. He makes you build logic gates, adders, individual memory cells.

    He does it all from those first principles: a circuit’s state can represent information, a switch can change a circuit’s state, an automatic switch can be operated by a circuit’s state.

    Oh, and though I focused on the abstractions in this mini-review, he does address practical matters, which I guess I’d describe as “EE stuff”?

    1. 4

      I second “Code: The Hidden Language of Computer Hardware and Software, by Charles Petzold”.

      Easy read and consistently good at explaining how things work. I learned quite a few things from it.

      1. 2

        He makes you build logic gates, adders, individual memory cells.

        Is that to say the book has exercises, like a textbook?

        1. 1

          No. It’s prose. It’s written in the style of “Suppose you wanted to achieve goal X. How might you do that? Well, previous generations of engineers faced this problem, too, and here’s how they solved it.”

      2. 4

        If anyone will find it interesting, I keep a big list of books as a GitHub repo :

        https://github.com/learn-anything/books

        Many books mentioned in the article can be found there too. :)

        1. 3

          I’ll add my two favorites to the list.

          -how not to be wrong the power of mathematical thinking by jordan ellenberg

          -the art of memory by frances yates

          1. 3

            You have a nice, cross-section of stuff with programming languages and design methods. Try Stavely’s Cleanroom since it was first, low-defect methodology that wasn’t about formal verification. I haven’t got to read the book yet but the site below looks promising. Back when I programmed, I imitated what I read of Cleanroom’s structuring with good results.

            http://infohost.nmt.edu/~al/cseet-paper.html

            I’ve also heard good things about Building High-Integrity Applications With SPARK below. SPARK is a language for low-level code that lets you prove your code has none of the common errors in say C code. It uses annotations in regular, Boolean logic. You can put in as little or as much work depending on how much you want to verify with formal methods as opposed to code review or testing. Book targets beginners rather than formal methodists.

            https://www.amazon.com/Building-High-Integrity-Applications-SPARK/dp/1107656842

            1. 2

              I’ll second “Building High-Integrity Applications With SPARK,” for which it’s helpful if you know Ada (for example, via Building Parallel, Embedded, and Real-Time Applications with Ada). I found it a pretty accessible intro to formal methods.

            2. 2

              In the critical thinking column, my eyes were opened wide by Leprechauns of Software Engineering. After you’ve read Code Complete, it’s a good one to follow up.

              1. 2

                My favorite hipster recommendation is Making Software. It’s obscure enough that a lot of people haven’t read it, but interesting and accessible enough that everybody could benefit from a skim. It covers a a bunch of software engineering studies, what they tell us, and what we don’t know. Some highly paraphrased examples:

                • Conway’s law is obviously true, but is it empirically true (yes)
                • Let’s try to quantify the economic impact of women underrepresentation in CS
                • We paid 9 teams of professionals to implement the same contract just so we could compare dynamic vs static languages is a somewhat more rigorous fashion than “who writes the better blog posts”
                • Does pair programming actually do anything or is it mostly snake oil
                • No really, programmers do better when they have office doors

                My personal favorite is an analysis of how effective architecting code in advance is. That’s been really influential on how I code.

                1. 2

                  One of my top three is Richard Hamming’s only non-tech book https://www.amazon.com/Art-Doing-Science-Engineering-Learning/dp/9056995006

                  The book is an expanded version of his speech: http://www.cs.virginia.edu/~robins/YouAndYourResearch.html

                  Start reading the speech, and you will want the book. I’m not sure how to summarize it, maybe “How to be Einstein, the guy you heard so much about; and not one of his coworkers that you’ve never heard mentioned”.