It is like a discovering a new programming paradigm. Something new and different, not a Lisp, not a Datalog, weirdly distributed, with interesting properties, but powerful. There are adjacent things, BLOOM project and Eve language seems to have discovered something simmilar, and Edward Kmett working on his new language is using propagators quite heavily.
Sci-fy to go with it: probably Ted Chiangs Stories of your Life (or its movie adaptation Arrival)
Out of the tarpit
I thing this is a paper that might have lead to Clojure, React, Elm, e.t.c ... but not really, a weird parallel reality where we really like reactive relational databases.
Ted Chiang's work was the first thing that came to mind for me. "Understand" is a breathtaking piece of work, about a man whose brain rapidly gains unimaginable computing power following a series of treatments.
Knuth's "Literate Programming" was kind of otherworldly for me. I liked the idea that software could be written in a form indistinguishable from literature. I could not quite believe that it was reality -- and I'm still not sure it holds up in the real world -- but it's such a cool idea to have wrapped my head around at least once.
I think a cousin of Literate Programming that does work well is computational notebooks, like Jupyter. Interleaving code and textual description fits the exploratory workflows and scientific communication well. My favourite is Observable (https://observablehq.com/), where code has reactive structure (resolving a DAG like a literate program would at tangle-time), you can choose to keep some code hidden by default (to reduce clutter, make the document end-to-end readable), and use code to make the notebook fully interactive.
In terms of Knuth-style literate programming, Org Mode in Emacs, with its Org Babel feature, is a very good tool for this. It's an outliner with rich markup, and where you'd ordinarily insert a code block, in Org Mode, you can also execute it (works with any language you've configured Emacs to connect to) and feed the results to further code blocks. So it works like a computational notebook. You can also tangle the blocks to produce a separate source file, the Knuth way. One common application I've seen is making literate Emacs configuration - people prepare the minimum necessary to set up Org Babel, and then tangle the proper (often large) config from an .org file, where it's written in literate style.
As for my own experience, I occasionally try literate programming on small things, and so far - outside using org mode as a Jupyter alternative - I didn't feel more productive with it. I often flesh out the idea of a solution while writing it (I alternate between coding/recoding and design phases), and literate programming adds extra work - refactoring code means also refactoring the surrounding prose. On top of that, the narrative structure seems to interfere a bit with program's own architecture. I know it shouldn't (thanks to the way tangling works), but it somehow does in my head.
Org Mode and Observable are both performant enough. Unfortunately, they have their own limitation. In Emacs+Org Mode, you're working with a rich text display as a canvas, so while you can output images easily, forget about interactive GUI (charts, control sliders, what not) - at least without some dark hacking magic.
Observable - that's a true joy if you want fast feedback and interactivity. It's as fast as your browser, since your notebook is entirely client-side executed JavaScript. It's an order of magnitude better option than regular notebooks if you want to do some exploratory or scientific visualization. It's main drawback: JavaScript. That's what you're limited to. So forget about your favorite Python or R libraries (at least without dark hacking magic).
Observable did not handle my rendering requirements involving several hundreds of data points for my parallel coordinate plot. That said I'm not sure how it would fare outside of the notebook setting.
It should be as fast as equivalent visualization done in the frontend of a web page; after all, what you do in Observable gets directly executed by your browser. I wonder what your particular requirements are. On my end, I had acceptable performance on interactive prototypes involving updating multiple histograms, where inputs had tens of thousands of points.
”and I'm still not sure it holds up in the real world“
Writing literature is a solo endeavour.
Modern programming is more like writing scientific literature, where multiple persons collaborate, and reading and understanding earlier work and maintaining a correct set of links to such works is half the work, if not more.
That, I think, is why literate programming doesn’t quite work. It works for Mathematica notebooks, iPython notebooks and the like, but not for larger works.
For anyone who hasn't read it, I very much encourage it. I'm also deeply skeptical of its practicality, but modern takes on "literate programming" don't seem to capture what Knuth describes (and did). It's interesting.
The Art of the Metaobject Protocol. Let’s build a system ... in this system we haven’t built yet! We’ll start with some DEFCLASS calls to define some classes for its internal data structures. In a couple hundred pages, we’ll have enough written that we can define DEFCLASS to close the loop.
"SICP is an exploration of programming free-love. Indeed, the tone, examples, references, and hearken to a programming life that if true, would be an absolute blast to live in."
It's a bit difficult to define this genre (but how can we not?). I found the K&R personally mind-blowing when I read it (and someone in the comments suggests it), but I'm not sure it qualifies. Many classic works strike me as "computer science-fiction," but not all classics of computer science are.
There's something fanciful and idealistic about these particular works -- something about their tone that seems vaguely utopian or futuristic.
Michael Fogus is a fine writer, though his own books seem strikingly down-to-earth. Really, I think he should expand this into a full-blown essay.
It’s interesting to read these, and important that they are not forgotten, but I don’t see these as viable alternate realities for mainstream modern programming. They were relegated to, and remain in the margins for actual reasons, not just by accident. In some cases such as SICP and arguably a few of the others those ‘margins’ are still actually important niches from which they still influence and benefit the community.
I think there are some ‘accidents’ of technological choices that have had unfortunate consequences for the modern industry. We could have done with something better than JavaScript for example, but these aren’t ‘paradigm’ issue (I tried avoiding that word, but there it is). By and large the direction the industry has gone has been chosen for sound practical reasons.
In the end, none of the alternate history directions the industry could have taken are off the table forever. If Oberon or Smalltalk had been a superior way to build software, there’s nothing stopping someone taking their evergreen fundamentals and building them into a modern system. If that doesn’t happen, again there are probably reasons for that.
>It’s interesting to read these, and important that they are not forgotten, but I don’t see these as viable alternate realities for mainstream modern programming. They were relegated to, and remain in the margins for actual reasons, not just by accident.
The "actual reasons" could just be laziness, a bad industry, valid then but not relevant anymore, and several other things other than "eternally valid".
So just because those ideas and implementations where "relegated to" the margins, doesn't mean they should remain there.
Except if we're all too happy with the current state of the computing industry and developer practices. Are we?
>By and large the direction the industry has gone has been chosen for sound practical reasons.
Yeah, no. Some things caught on for practical reasons (e.g. C was portable, free, fast enough in a constrained era. But even C could have easily been bettered with a language more or less the same just with bounds checking, without pointer arithmetic, without nulls, with a string type, etc, and we'd be 200% better).
Others just caught because big companies pushed them with tons of marketing money (e.g. Java - at the moment Smalltalk was big in the same space, support and IDEs from IBM, etc). Others by BS CEO decision (e.g. Javascript not being a light-scheme as originally intended, because management wanted to latch onto the Java bandwagon). Others because of slow progress (slow uptake of innovation, even if it can run perfectly well in the hardware of the time), others without any real reason (it's mostly what's taught at schools, what catches on as fad, etc).
It took 60 years (in fact, it's still ongoing) for programming tools and concepts we had even as back as Lisp to make with first class support into mainstream programming languages (closures, immutability, map/fold, and so on). CSP took until Golang to catch on in the mainstream... Those things were "in the margin" all this time...
Disclaimer: I’ve started reading the Lean guide for the past month or two.
For me the most magical texts I have ever read were TAPL by Pierce, or the Lean Theorem Prover (tutorial/guide?) [1].
Just from a software standpoint, Lean seems like one of the most magical things ever built. For something that is built by mathematically-oriented programmers for pure mathematicians, it is /extremely/ well designed. So much thought has seemed to go into the user experience; it’s rest a joy to use.
Every chapter in that guide, has blown my mind more than the previous. It is super accessible as well to anyone with the math background found in any undergrad CS program.
Yep, the first two books were my reality at different points in my career. It still amazes me how much tougher a lot of tools are compared to how programs were built in those environments. It was amazing building in the small to build up to the large (Forth) or just sheer joy of Smalltalk.
Of the works listed, I’ve read only The Architecture of Symbolic Computers and Structure and Interpretation of Computer Programs. The latter is widely known as it undergirds many a computer science course, but the former is far more impressive by a wide margin. As a invertebrate mathematician, breaching the threshold between numerical and symbolic computation (though ultimately) gives me an undeniable frisson of profundity.
I love thinking about these books as science fiction. I experience disappointment and frustration with some of the turns our technological evolution took, and my own inability to hack out my own path, so I took to writing science fiction in order to switch from an implementor's perspective to a user's perspective. My goal and process is to suspend the inner architect and programmer and skip to a conceivable end-result: alternative technological history type of thing. I find that picturing an end result of a hypothetical scientific effort relaxes me.
It's pretty good. Centers on AI (but isn't a cliche Terminator-like scenario) and gets into very philosophical territory by the end, and has the pacing/tone of an espionage thriller.
Did no-one read the article? [1] It's explicitly not about fictional sci-fi that happens to feature computers/programming, but about real textbooks that hint at what programming could have been had the industry adopted those technologies/principles more fully.
[1] At this time 4 of the 7 top-level comments and all the active discussions are about sci-fi, not what the article describes
Sometimes you need to give the HN comment section some time. First people that didn't rtfa comment, then the skimmers, then the better in depth comments flow in...
It's good to call this out, because it's possible that the less valuable comments will accumulate enough engagement that the later in-depth comments will be found at the bottom of the thread.
I work in healthcare (or health-tech), I sometimes forward articles from HN to colleagues or higher management. Often times I regretted that based on comments that came in later on articles. So now I muster up the discipline to wait some hours, keep the tab with comments open en refresh every now and then. I hardly ever get disappointed and the comments reveal the true value of an article almost without fail and always with extra resources to back up why a claim is true, false or questionable. I love this community for this reason and it provides a lot of value to me and via me my colleagues.
A good example is the recent discussion on the amyloid plaque "cabal" [0]. The comments confirm, but also attenuate the article, and together with my own experiences in science I feel confident to forward the article. Comments and discussions such as [1] are clearly from people deeply involved in the field or at least from very knowledgeable people, and they nicely balance the often polarizing articles.
Imho the HN algorithms seem to work very well in getting quality content to the top, given time (an article may well be gone from the home page by then).
There needs to a word for making a comment based solely on misreading the title. It happens all time. Or how about another word for making a comment without reading the other comments and realizing that many people, sometimes hundreds, have made the exact same comment you want to make.
I nominate 'Litella' for misreading the title and then commenting. This is based on the SNL sketch played by Gilda Radner in which her character would comment on 'Soviet Jewery' by going on about 'Soviet Jewelry' Usage: Don't litella your comment next time
The purview of "could have been" is that of the imagination, i.e. fiction. Nobody knows what would, or even could have been, one can only surmise. I submit that in this sense those "hints" are, in fact, science fiction. (Notwithstanding anyone's hot-takes on the title.)
Sometimes the most interesting comments are only tangentially related to the article. Think of the article’s topic as a starting point, not a boundary to stay within.
Direct replies. One of the best features of tree-based discussion is that "thread-jacking" not only isn't a problem, it's beneficial. A discussion tree can handle subthreads and tangents just fine.
Isaac Asimovs's "The Last Question" is an excellent short story and I consider it among one of the greatest works of science-fiction. It describes a fictional future where humanity creates a computer that acheives the singularity (written in 1956!), with an interesting twist at the end.
There is another story I like about a planet of high-IQ beings noticing patterns in stars blinking (like binary) and going into suspended animation to observe the data over extended periods of years, but I can't remember the name of it or the author.
UNSONG. Magical fantasy set in a Silicon Valley where Microprosopus (Microsoft), Gogmagog (Google), Amalek (Amazon), and Countenance (Facebook) have figured out how to brute force discovering Divine Names of God through the magic of independent contractors.
Every chapter begins with a quote from a Markov chain trained on the King James Bible, SICP, and ESR. For example:
> It is good practice to have your program poke around at runtime and see if it can be used to give a light unto the Gentiles.
The first chapter begins
> The apocalypse began in a cubicle.
> ... Upon the floor was a chair and upon the chair was me. My name is Aaron Smith-Teller and I am twenty-two years old. I was fiddling with a rubber band and counting the minutes until my next break and seeking the hidden transcendent Names of God.
> “AR-ASH-KON-CHEL-NA-VAN-TSIR,” I chanted.
> That wasn’t a hidden transcendent Name of God. That wasn’t surprising. During my six months at Countenance I must have spoken five hundred thousand of these words. Each had taken about five seconds, earned me about two cents, and cost a small portion of my dignity. None of them had been hidden transcendent Names of God.
I'd say it's as much about the programming industry as the other books mentioned on this page. It's certainly not hard science and no one here will learn anything new about computer science from it.
I hadn't seen that before. I enjoyed it a lot. It may well be an inspiration. However, while in Clark's story finding the name of God is the end, in UNSONG that's just the beginning of their adventure...
I guess. I found the Borges story infinitely richer and intellectually interesting. Kind of lends credence to the idea that Kubrick was the real genius behind 2001 (Clarke co-wrote the screenplay).
Francis Spufford's Red Plenty might fit here. It's historical fiction, set in the 1950s and 1960s USSR, and describes an attempt to build an efficient planned economy with linear programming. It's a bit like Little House on the Prairie, in that some of the people and events are fictional, but the big ideas were mostly true (there's a massive set of end-notes if you care).
I found both the math and the vignettes about life in the USSR to be fascinating.
Big shoutout for Red Plenty. If you (understandably) thought operation research, linear programming, and price discovery are too arcane to serve as the basis that undergirds a gripping novel, be prepared to be proven wrong.
I read this after hearing many good things about it, especially about how well thought out the science in it was.
While the science was solid as far as speculative fiction action-thriller science goes, I felt like the action scenes were being choreographed by a six year old who had read too many comics, in that every single event felt like it was a deus ex machina, only to be matched by a bigger and more catastrophic deus ex machina. Y'know, like "the car shot lasers! until it was blown up! but it blew up into two motorcyles! that shot ninja stars!". The aid to my suspension of disbelief I got from the "good science" being plausible fell apart at how implausible the actual chain of events were.
It was a page-turner, but ultimately I left the book feeling a little exhausted by it all. Would highly recommend to anyone who wants to have the equivalent literary experience of drinking a red bull.
This wasn't terrible. Daniel Suarez spend many years as NPR's (National Public Radio in the US) science guy, and so his tech wasn't completely made up.
For a second I thought this was a similar book who's name I've been trying to remember. Like Daemon and Ready Player One, but with some magic sword instead. Dang.
Arguably The Nine Billion Names of God by Arthur C. Clarke. Feeling of Power by Asimov probably also fits in the vein.
I fid it interesting that Chiang ends up in so many recent short story lists. It seems as if there are fewer recent short stories that stack up well with all-time lists.
That's probably always been the case. But I'm certainly willing to believe it's become even more so. Certainly the SF I've found over the past couple of decades has mostly seemed to be less mainstream. Which doesn't make it bad. Just most seems less interesting to me personally.
Yeah was thinking that. Not sure what's changed. sci-fi authors used to get started in magazines, with limited page count, which the internet is killing/has killed.
I have the impression authors now jump straight to novels (with no short-story market, what alternative?)
Ted Chiang has a number of good short stories. (And a collection of them.)
With a few exceptions, I've never really been into reading the SF magazines so I don't have much a first hand perspective. But I assume that, as you say, they're even less lucrative and more marginal than they used to be.
In general, I find it really annoying I can't find specific short stories/novelettes available for $1-2. Which I guess I consider reasonable for older stories.
I have an older edition of True Names and I didn't realize it was hard to get your hands on. IMO it's the author's best work.
I think a fire upon the deep is his best. You can (logically) read the second chapter (introducing the tines) as a self-contained short-story, and it's brilliant: the way it introduces their issues, the characters and the glorious plot.
I agree about Fire Upon the Deep. Something else in a similar vein is the prologue for Hogan's Code of the Lifemaker which I'd argue is significantly more interesting than the book as a whole.
Books I like that contain things that are kinda computer-sciency:
Permutation City, by Greg Egan -- a bit of a mind-uploady brain-simluation story. Fairly philosophical, but not impenetrable.
Accelerando, by Charles Stross -- Focused on the technical singularity brought about by increasing computing power. Somewhat cheeky, a little frenetic.
Three Body Problem, by Liu Cixin -- Algorithms and game theory plots regarding solving a civilsation-destroying puzzle.
Diaspora, by Greg Egan -- Post-trans-humanist shenanigans.
Other things of note:
Neal Stephenson writes a lot of cyberpunk computer-adjacent fiction. Snow Crash, Diamond Age, and Cryptonomicon all come to mind. The Baroque Cycle is a fiction series about the beginnings of computation and cryptography. He does have a propensity to navel-gaze though.
Vernor Vinge was a computer science professor. Rainbow's End and The Peace War are worth reading. Anything else he writes is worth reading too, actually.
Anything else by Stross, not just Accelerando, will have a bit of a tech bent to it, but is often not very serious and a bit handwavey.
The Long Way To A Small Angry Planet has an AI character with a backstory that forms a significant chunk of the book, but isn't super computer-sciencey.
Fire Upon The Deep and A Deepness in the Sky by Vinge I felt were really interesting from a CS perspective, when thousands of years in the future you have billions of lines of code running ships, etc. that no one exactly knows how it works anymore, code archaeologists, etc.
I'm partway through Rainbow's End and feel that (as with most cyberpunk) it is more about social consequence of computing than computer science. Am I wrong?
Contrast Snow Crash for example which although still tongue in cheek cyberpunk, is heavier on the CS with the plot focusing on a mind virus and all those discursions into how language programs humans
It is like a discovering a new programming paradigm. Something new and different, not a Lisp, not a Datalog, weirdly distributed, with interesting properties, but powerful. There are adjacent things, BLOOM project and Eve language seems to have discovered something simmilar, and Edward Kmett working on his new language is using propagators quite heavily.
https://pdfs.semanticscholar.org/755c/48fd10aa303497ef849977...
Sci-fy to go with it: probably Ted Chiangs Stories of your Life (or its movie adaptation Arrival)
Out of the tarpit
I thing this is a paper that might have lead to Clojure, React, Elm, e.t.c ... but not really, a weird parallel reality where we really like reactive relational databases.
http://curtclifton.net/papers/MoseleyMarks06a.pdf