ISBN: 9780735611313
Buy on Amazon
Found in 8 comments on Hacker News
bmitc · 2020-11-30 · Original thread
I don't think there's an easy answer to this question. Software engineers still don't know how to exactly or even efficiently communicate with each other. It's still an evolving field and process. In general, it is helpful to understand software development as a sub-field of systems theory and design, so any book that discusses systems should help one better understand software development.

In general, I do also echo some of the other comments. If you are helping to design the app, you shouldn't necessarily need to understand the implementation details. In my experience, clients, whether they be external or internal or colleagues, getting too involved into what they think the implementation should be is usually a disaster. It puts pressure on the system to conform to how they think it should be, which is usually not necessarily how it should be, and it basically adds unnecessary constraints. The real constraints should be what the software should do and specifications on that, including how the software is intended to be maintained and extended.

Some thoughts on some specific courses and books that I think would be helpful to better understand the goals of software development and design and ways to think about it all:

Programming for Everyone - An Introduction to Visual Programming Languages: https://www.edx.org/course/programming-for-everyone-an-intro...

I think this course should be taken by managers, designers, and even software engineers. The primary result is that you'll come out of it knowing state charts, which are an extension to state machines, and this will be very useful for thinking about software and organizing what the software should do. Handling state is one of the primary problems in software, and you might notice that all of the various paradigms (OOP, functional, imperative, actors, etc.) in computer programming relate to the various ways people think about handling state in a computing system.

How to Code: Simple Data and Complex Data:

https://www.edx.org/course/how-to-code-simple-data

https://www.edx.org/course/how-to-code-complex-data

https://www.edx.org/micromasters/ubcx-software-development

These courses are taught by a designer of the Common Lisp language and based upon the excellent book How to Design Programs. It is essentially a language agnostic course that uses Racket to build up design paradigms that teaches you how to sort out your domain problem and designs into data and functions that operate on that data. The courses are part of a MicroMasters program, so if you really want to get into Java, that is taught in the follow-on courses.

Based upon your last comment, here are some book suggestions on how computers work:

Code: The Hidden Language of Computer Hardware and Software: https://www.amazon.com/Code-Language-Computer-Hardware-Softw...

The Pattern On The Stone: The Simple Ideas That Make Computers Work: https://www.amazon.com/Pattern-Stone-Computers-Science-Maste...

But How Do It Know? - The Basic Principles of Computers for Everyone: https://www.amazon.com/But-How-Know-Principles-Computers/dp/...

The Elements of Computing Systems: Building a Modern Computer from First Principles: https://www.amazon.com/Elements-Computing-Systems-Building-P...

I've heard good things about Code by Petzold although I haven't read it myself.

https://www.amazon.com/Code-Language-Computer-Hardware-Softw...

gonehome · 2020-08-12 · Original thread
I really loved this book: https://www.amazon.com/Code-Language-Computer-Hardware-Softw...

Which goes from bits on up without shying away from circuit diagrams. It's also really well written and you can read it from start to finish.

It puts it in a historical context too which makes it fun to read.

Once you read that, they'll be fewer unknown unknowns.

halotrope · 2020-06-18 · Original thread
I found the „Hello world from scratch“[1] series from Ben Eater incredibly helpful in connecting the dots between electricity and modern computers. Strictly speaking it is about electronics, still it is superbly presented and incredibly enlightening when coming from „normal“ software engineering perspective of things.

What actually got me there was the book „Code“ by Charles Petzold[2] which traces the development from early circuitry like light bulbs and telegraph wires to modern digital logic. I found that after being introduced to these concepts, learning about the fundamental physics was much more accessible since it was framed in the context of contemporary application.

1: https://youtu.be/LnzuMJLZRdU

2: https://www.amazon.com/Code-Language-Computer-Hardware-Softw...

blueatlas · 2020-06-18 · Original thread
Try "Code: The Hidden Language of Computer Hardware and Software." It provides a very simple introduction to electricity. Beyond that, it's just a great introductory book on computing.

https://www.amazon.com/Code-Language-Computer-Hardware-Softw...

grumple · 2020-02-17 · Original thread
I recommend Code: The Hidden Language of Computer Hardware and Software by Charles Petzold [1]. It is far more comprehensive than the OP, goes from pre-computer code, to electrical circuits, to an overview of assembly. No prior knowledge needed except how to read.

1. https://www.amazon.com/Code-Language-Computer-Hardware-Softw...

ratfaced-guy · 2020-02-11 · Original thread
Code: The Hidden Language of Computer Hardware and Software

https://www.amazon.com/Code-Language-Computer-Hardware-Softw...

From binary to a full computer

juliend2 · 2020-02-10 · Original thread
I would say the Telegraph.

In the book [CODE: The Hidden Language of Computer Hardware and Softwar](https://www.amazon.com/Code-Language-Computer-Hardware-Softw...), Charles Petzold talks about how it's foundational to the eventual invention of the computer.

Back then, it also meant coast to coast communications were almost instantaneous. And soon after, transatlantic cable-enabled telegraph boosted commerce between America and Europe.