More seriously though, I find these particular choices interesting. For one thing, they're indicative of his experience as a "greybeard" programmer : Someone who was still active until very recently but started programming 50 years ago. He was always try to bring forwards some computer science ideas from the 60s that never really made it into the modern zeitgeist. His tool choices seemed to represent that. Old tools that had some foundational flexibility that allowed them to stay relevant through the decades.
 and not the curmudgeonly kind who will only use what they learned so many decades ago, as demonstrated by his selection of more modern tools for other tasks
At it's core, it's really a mix of three things:
1. A language to define a dependency graph ("target: dependencies") and how the nodes are connected ("rules")
2. a functional scripting language to be able to factorize the declaration of the graph
3. and finally a graph traversal worker to dispatch and perform those rules that are required (including a sophisticated "job server" to maintain the concurrent job limit across child make processes with no developer intervention!)
I haven't encountered a good replacement tool that properly tackles all 3 of these feature sets. (Granted, I haven't done an in-depth analysis of the field...)
I used it on a project with many thousands of files and hundreds of (mostly dynamic) build rules. This was a literate program, and most build steps required the extraction of code from the source docs --- including build rules themselves --- and I still maintained sub-second updates.
I think Joe would have loved it.
In my experiments though, Tup failed hard on point 2, lacking a good language to factorize the dependency graph declaration. (and to be clear, I think Make's is pretty terrible by itself, before GMSL or Guile extensions come into the picture)
Edit: I see tup supports Lua extensions, which may cancel my complaint above.
What language and/or system were you writing in? I discovered literate programming in 2003 and was excited by it (still am). But it never took off and the tooling was poor (Leo, the Literate Programming Editor, is the one I remember - and shudder thinking about)
I'm still on that "detour," but still a believer.
Edit: some dead links there. This "bootstrap" directory contains the custom tangler and the custom rule processor. This 10K, plus the tiny configs in the root, are the only code in the project not in documents.
I did look at SCons years ago, which is a Python-based build-system, but as I recall it ended up being the worse of both worlds by attempting a declarative syntax that was marred by its imperative warts.
and your points sound like you're just describing a dsl in lisp/scheme.
I don’t think I’ve seen anything better than this for debugging and doing live code changes.
ilisp was developed for Emacs to get a similar experience as developing on Lisp machines and now we're so far back in the past that I do not think that way of working was inspired by Erlang.
Electronics (or any "hardware") companies suck at maintaining links. Which is bad for SEO and bad for potential customers. Even if the products are old, at least mark the page as older.
It's not like people stopped using those old products and I can still find almost all of them for sale on craigslist. Particularly the audio equipment.
I really hope that one day that vision becomes a true reality, I know there are lots of projects trying to tackle it !
Who's thinking differently today?
Took me years to appreciate the value of careful study and mastery of simple tools over new and shiny (which still has its place of course).
Also, +1 for Emacs. :) It’s nice to know that some really smart people like the same tools I do.
> I'm trying to build some of these things - right now I'm still stuck on the first point - making software that's not broken
If the machine broke I would like to go to any other machine and resume work within a few seconds without losing any data.
If my machine was stolen I would like it to be totally unusable after a short time - so nobody would bother to steal it.
I would like the machine to recognize me, through some mechanism (fingerprints, retina scan, DNA - who knows) so I don't need passwords.
This seems to be a combination of what‘s possible with chromebooks + smartphone (not stolen much anymore because of Find My iPhone etc.) + Touch ID on the macbooks.
I would like this as well, does anybody know any good solutions for this?
a = 1/(1+7)
I have no idea what this means, or what relationship it has to the construct after it. Where does the result of ‘2a+sqrt(a)’ go? I thought ... was just a separator in the text, but now maybe it’s some sort of functional syntax?
This is exactly the problem I have with most of the articles I’ve read that extol the virtues of functional programming. They say something like ‘in a functional language all you do is X’, without explanation, where X frankly just looks like gibberish.
To be fair this isn’t an article about functional programming, or an introduction to it. Fair enough, but it’s still a bit exasperating.
EDIT Ok. I should have said this isn’t an introduction to functional programming.
You can say that again!