A non-standard book list for software developers
mihaiolteanu.me
mihaiolteanu.me
They're not about designing distributed software systems... they're a complete design language for the proper design of a city, from the grossest elements to the most granular. You can flip to a random page and understand what makes a front yard really fulfill its purpose, or you can flip to a different page and learn why some public plazas just don't get used, while others flourish.
It's a template system for designing a room, a house, a neighborhood, a city, etc.
Makes you think about what a component is, what makes it "good" or "bad" at what it's supposed to do, and what makes it harmoniously integrate with other components.
Along similar lines I would recommend Donella Meadows' work, for example her essay Leverage Points[1].
1: https://donellameadows.org/archives/leverage-points-places-t...
One example is (paraphrased) "find the nicest spot on the property and don't build on it, because then you'll lose it". Another is "corridors are dead spaces; you move through them, and pretty much ignore them, on your way to do something". Not gospel or absolute rules; rather rules of thumb, or ways to talk about and think about what we wanted to accomplish.
I'd heard of him, and read those books, because I was (am) a computer programmer, and that was before we decided to build a house!
Because when you're working on a larger software team, or even a small software team within a larger company, understanding how organizations actually understand the world and make decisions is invaluable.
A person can drive themself crazy expecting groups of people to behave like a monolithic rational agent.
Not sure what the best books are these days to give people a flavour of university style mathematics. I quite liked Introductory Algebra and Analysis by Geoff Smith when I was teaching first year mathematics years ago but I assume that was published 25 years ago so I imagine has been superseded.
Maybe one can be so happy about having made it through such a tough subject that it has to be a good book? I mean, do people normaly study from more than one text?!
> ...to give people a flavour of university style mathematics
I've just started The Foundations of Mathematics by Ian Stewart & David Tall. So far it's really promising.
Platonism is like ontological OOP. :D
There's another way : Nominalism, abstract blueprints and concepts don't exist, they are just artificial markers we put on sets of concrete objects to express some degree of similarity. That is, There's no such thing as a 'Tree' in the abstract, there's only the green thing with roots and branches under your house and the green thing with roots and branches under mine, we gave them (and countless other green things with roots and branches) the same name merely to express that we view them as equal under some circumstances, but that name doesn't express anything about the concrete objects themselves, just our brains, each object is completely unique and incomparable to any other in any objective way.
Nominalism is similar to prototypical OOP, there is no such thing as a blueprint, concrete objects spring fully-formed into existence directly from the mind of their creator, or they are cloned from other concrete objects. If blueprints exist at all, they are only external descriptions by us observers to denote similarities: that object has x: and y: attributes and that object also has x: and y: attributes (possibly because it's a clone of the first) so they are the same 'type', but those objects don't 'know' they are the same type (well, they do if they're clones, as they point to the same parent, but whatever), and the universe allows any object to grow and shrink and morph independently of any other, similarities are imposed/discovered solely by observation from the outside.
*:This principle might be violated in dynamic object systems with sophisticated meta-object protocols, as the blueprint itself is just an object that you can manipulate and mutate at runtime with various things not in the static description.
Although metaphysics as a philosophical enterprise is highly hypothetical, it also has practical application in most other branches of philosophy, science, and now also information technology. Such areas generally assume some basic ontology (such as a system of objects, properties, classes, and space-time) as well as other metaphysical stances on topics such as causality and agency, then build their own particular theories upon these.":
Proclus, whose quote opens the section on Euclid, lived more than 700 years after this date, well into the 5th century AD. Euclid himself wasn't born till about decade after, in 325 BC.
Good catch! Thanks for the heads-up!
Thanks for your amazing effort!
You're welcome! Thanks for your input!
- Using Euclid is manifestly a really bad idea, since his way of formalizing geometry is not the sharpest. Mathematical logic has developed since Euclid published his book thousands of years ago and Euclidean geometry has been re-formalized a number of times to really flesh out the theory behind it (where the word theory is a precisely defined mathematical word), the most well known being oerhaps the one by Hilbert (still 100 years old).
- Motivating Spivak with "the most important thing to learn is the method. That is, to develop a method for thinking, based on demonstration following a fixed and known set of starting-points or axioms ...". This can be actually said of any mathematical theory (here I use the word 'theory' in its colloquial meaning). Studying calculus in particular makes little sens for compsci. Rather, graph theory or abstract algebra might be more worthwhile to learn - basically any subject that touches theoretical computer science significantly.
"I view the field of software development as a big logical system with highly interconnected and complex parts. Understanding such a big systems naturally requires having an excellent grasp on the tools used to build them. And the most fundamental one is logic itself. What follows from what, what are the starting-points or the elementary parts, what are the ways of composing these into more complex ones, ways to spot complete non-sense in the system and how to decompose the complex parts back to more fundamental ones to check their consistency and truth. The following book list contain titles that are all playing fields for one to start experimenting with such systems and gain the required confidence that one can master them. "
The recommendation are from that point of view and the authors selection from book he actually read and consider good for it.
Some better math books that I would recommend off the top-of-my-head:
* "How to Solve it" by George Polya - A great book on breaking down complex problems.
* "Mathematical Logic" by Stephen Kleene - A much more contemporary math book on building axiomatic theories from scratch.
* "Godel, Escher, Bach" by Douglas Hofstadter - Also about mathematical foundations but for a much broader audience.
Thus, by reading the original works you will confuse yourself with the obscure notation you will encounter, semi-circular arguments and other problems (both the Elements and the Principia are riddled with problems), which actually have prompted many many scholarly works commenting and fixing these.
https://math.stackexchange.com/questions/845288/has-any-erro...
"He was (vide his life) 40 yeares old before he looked on geometry; which happened accidentally. Being in a gentleman's library in ..., Euclid's Elements lay open, and 'twas the 47 El. libri I[Pythagorean theorem]. He read the proposition. 'By G--,' sayd he, 'this is impossible!' So he reads the demonstration of it, which referred him back to such a proposition; which proposition he read. That referred him back to another, which he also read. Et sic deinceps, that at last he was demonstratively convinced of that trueth. This made him in love with geometry."
Reading all of Euclid's Elements is a big undertaking, though I think you can get a sufficient taste and appreciation of iron-clad logical reasoning and demonstration from going through some subset of it. Perhaps working through a single proposition back through its base propositions, definitions, common notions, and postulates will be enough to alter your thinking and at least see what's possible. Unlike the author I can't tell from discussion sampling if people are ignorant of Euclid, but I have been frustrated by 1-on-1 failures to win arguments by mathematical proof (e.g. that 0.999.... = 1) and such an unwillingness to accept such things shows a profound disconnect in how we look at the world. Reading Euclid may help that.
On the other hand, lots of software developers are exposed to proofs as part of their formal education (those who received one), so how much Euclid can add here is questionable, vs. actually putting proofs into practice by learning things like TLA+, or learning about probabilistic inference which is more needed outside crisp and clear worlds like Euclidean geometry. Personally I'd sooner have software developers take a few minutes to learn and reflect on Chesterton's Fence, than working through examples of geometry proofs, and maybe some can learn to reduce their bad habit of sloppily "reconstructing things from first principles" (where "first" is frequently "first thought of").
yeah it makes little sense if you don't want to be able to write programs that solve the world's major problems
so if you are content with writing cat picture apps, skip calculus
If you want to write a CFD solver then you need a lot more than just blindly learnt calculus. If you want to blow up the world using fuzzily applied financial models then you might not.... (you do actually)
to understand the courses we need stats, linear, and some calc 3
I think society is better off giving people the best means to achieve the intellectual goal they want, rather than forcing a greater number to learn beyond what they are compelled to. The kind of people I enjoy talking to are all the kind of people who would learn this stuff anyway as a matter of habit. My bookshelf is not full because of a state mandate.
i personally have found calculus to be useful in a fair number of domains i find interesting. anywhere computers process signals from the physical world, it tends to show up, whether it be sound, vision, or other signal types entirely.
not to say that graph theory and abstract algebra aren't important (especially in things like discrete algorithms or cryptography) just rather if you want to build systems that interface with the physical world, you need the original language of physics as well as all the linear systems and sampling theory to go with it.
Unless of course you have any interest in machine learning.
If you really wanted non-standard but relevant authors I would add Feyerabend, Kuhn, Kahneman, Dostoyevsky, Borges, Taleb, Montaigne, Popper, Hofstadter, Don Norman, Alexandrescu. Add something about systems of representation by Kierkegaard or Nietzche or some interpretations by later authors.
Euclid as the ideal place to learn logic seems debatable, although I can't think of a better resource off the top of my head.
The Xinu OS and LISP recommendations I've never seen before, so those were potentially valuable for me at least.
You can see an extended preview of it here: https://minireference.com/static/excerpts/noBSmathphys_v5_pr...
And a standalone concept map here: https://minireference.com/static/conceptmaps/math_and_physic... (bottom of the page)
Check out the reviews on amazon if you're interested. It hasn't been adopted as the main textbook at any university yet, but many teachers recommend it as supplemental reading for their courses.
I learnt calculus from a copy of a book called "Calculus, A complete course" which I quite liked but have literally never seen anywhere else. The fact I got the book was basically by accident, completely changed my future.
The book I would most recommend software developers read is Mindstorms: Children, Computers and Powerful Ideas by Seymour Papert.
It's a lot shorter. And probably more valuable.
And one random side recommendation: The Daughter Of Time by Josephine Tey. It's a narrative exploration of how to challenge consensus belief, explore gut instincts and follow research leads, expressed as a perception-challenging historical review of Richard III by a fictional detective.
The BBC audio book is worth a go. My copy of this book (which was my mum's copy) is one of the few things I'd rescue from the hypothetical fire. It stays with you.
https://www.cs.virginia.edu/~evans/cs655/readings/purity.htm...
Feel part of what makes lisp fascinating is its simplicity and power leading to its place as a test bed for ideas such as continuations and Kanren, a new logic programming language.
2. Too many MIT grads were brainwashed by SICP until MIT sensibly switched to Python in 2009. (Unfortunately they probably still secretly teach SICP somewhere.)
3. Lisp/Scheme readily implements "Maxwell's equations of software" which are believed to be important or useful for some reason.
/s