"Algebra-Driven Design" by Sandy Maguire (Haskell)
"Software Abstractions" by Daniel Jackson (Alloy)
"Specifying Systems" by Leslie Lamport (TLA+)
And I'm sure there are many other worthy books as well that were not mentioned. But...
4/n
...while these are good, I'm not quite satisfied.
First, many of these books are targeted at a specific language community (even though the ideas might be more generally useful), which is a shame.
Here's an example:
More importantly, I guess I'm missing the ambition and cross-disciplinary feel of the earlier books. I'd like to see a book that covered *everything* you need to be a good designer in the 2020's!
Such as...
6/n
* Big picture: systems thinking, OODA, Cynefin, etc
* Human-centred design, everyone-in-the-same-room approaches like event storming
* But also covering formal approaches starting with type-driven design but also including a quick intro to formal methods
7/n
* FP-ideas like purity-first, composition, immutability and how that affects design and architecture
* Working with immutable data: "accountants don't use erasers" (e.g. event sourcing)
* Basics of designing for distributed systems
8/n
* Modern testing and verification approaches, not just TDD but also PBT, mutations. Testing in production, etc.
* And also integrating (rather than leaving to the end) stuff which used to be optional but is now critical: security, observability, ethics, etc.
9/n
Maybe that's all too much to fit in one book 😃
But it would be nice to see a revival of that kind of ambitious approach. I'd read it!
/end
• • •
Missing some Tweet in this thread? You can try to
force a refresh
Where are all the modern software design books?
There was a huge burst of creativity around software design & analysis from the late 1980s up to the early 2000s (All the OOD ones, GoF, Fowler, Martin, Evans, HtDP etc) and then there's not been much since (except for DDD stuff)
Recently there has been some new activity: "A Philosophy of Software Design", "Secure By Design" and just now "Software Design for Flexibility".
("Designing Data-Intensive Applications" and "Code as a Crime Scene/Software Design X–Rays" are great but not really design books imo)
Yes, there's been been lots of architecture ones, first SOA and now microservices, but I don't count those as software design either. If you search on Amazon, there's nothing too interesting other than the ones I already mentioned. Many are really old! amazon.com/gp/bestsellers…
Thread! I've watched 100s of hours of photography videos on YouTube. I've learned from the experts! From them, I've learned that being a good photographer is all about having the latest gear, having more megapixels, and knowing those cool Lightroom tricks.
So, thank you, YouTube experts! I now have the confidence to help other beginning photographers get better. In the rest of this thread I'll critique some photos that have been sent to me for review.
We'll start with one sent to me by "Henri". My critique: there's too much motion blur. Next time, up your ISO and use a faster shutter speed. And there's way too much sensor noise! Get yourself a professional camera, mate!
If you care about usability, human factors, normal accidents, etc, then this is a must read. If this has been reported correctly, the design of the ship's navigation system is shocking. features.propublica.org/navy-uss-mccai…
To summarize: The US Navy's John McCain collided with an oil tanker and 10 people died. The crew using the navigation system got blamed but the navigation system itself didn't. Sadly, though, many of the mistakes have been made before and will probably be made again 😟
Mistake #1 -- Lack of training: [the helmsman] felt confident using the system to control the speed and heading of the ship. But... “There was actually a lot of functions on there that I had no clue what on earth they did,” he said of the system.
I'm developing a new alternative to microservices that addresses many of the problems that people run into. I call it "SPMSA". Bear with me -- I'll explain the acronym in a later tweet. 1/
First, design your microservices in the usual way. No more than 500 lines each, say, and with well-defined interfaces. But here's the first trick: you put them all in the same repo. This means that you have a single commit that encompasses all services at once. 2/
That means when you commit or refactor, you can build and test the services as a whole system and be sure that they *always* all work together! Awesome! 3/
. Before I was a programmer I use to do a bit of odd-job carpentry, so I'm going to chime in with my take based on my experiences in that field.
When you're outside an area of expertise looking in, it can often seem monolithic and uniform, but when you're an insider you quickly realize that there are many different subcommunities, each with different specialties and different approaches. They sometimes hate each other :)
We know this is true for programming, so why shouldn't we expect this is true for everything else too? In fact, a good clue that someone doesn't have any experience in a certain area is that they radically over-simplify things. Experienced people never think things are simple.😀
NewCrafts is the one of the best conferences if you like alternative takes on programming culture. There are a number of excellent videos available on their site: videos.ncrafts.io I'm going link to a few below. #newcrafts