Skip to content
HomeVideosBooks
AllTopicsTrends
BlogsPodcasts
HistoryListsWatch laterLiked videosFollowing

The videos, books, blogs and podcasts Hacker News keeps recommending, all in one place.

VideosBooksBlogsPodcastsAboutPrivacySettings

Data from Hacker News, HackerTube, HackerBooks, HackerBlogs and Open Library. Credits · Not affiliated with Y Combinator.

HomeVideosBooksBlogsPodcasts
Ctrl K
    Cover of Data and Reality

    Data and Reality

    William Kent · 1978

    Data and Reality gracefully weaves the disciplines of psychology and philosophy with data management to create timeless takeaways on how we perceive and manage information.

    Systems & OSComputer Science
    Open LibraryAmazon
    Stats for nerds
    15recommend
    30mentions
    24people
    2008–2026years
    63% recommend37% neutral

    Mentions per year

    2008201020122014201620182020202220242026

    What Hacker News says

    1. needfishAug 2026
      Hi, CS graduate here. during my post-graduation unemployed year I have been wrestling with this question a lot. The answer is that there is none - the research on the practice of translating requirements into code has stopped in the 1970s with Structured Programming (Dijkstra) and Problem Frames (Jackson). There is a certain inspiration people had with reusable patterns of problems a la Alexander, but after some time people got lost in the Java enterprise world and started making "design patterns" (which has very much dominated the online space and I cannot search properly for general software design anymore). The second problem is with Clean Code, which to me is a really bad set of "if you know you know" hand-wavy advice that is purposefully vague, because observable, actionable advice is actually very hard to come by.

      I think when people say software engineering, they confuse the high level designs (server, caching, db, etc. generally interaction constraints) and the lower level designs (modules, abstractions, classes, data structure design). There is a lot of content on the former but really few on the latter - which is some people cannot write new code, but can work on existing systems fine. Two main problems is 1. How to break down the problem at hand and 2. Organizing data into abstractions, and often creating new ones.

      For (1) the advice everyone resorts to is "just do more" and rely on pattern recognition, because you can't really break down a thing you haven't seen nor can relate to what you've seen before. But there is [A Framework for Decomposition in Computational Thinking](https://www.researchgate.net/publication/334579725_A_Framewo...) that's the best attempt at it so far in my opinion. Some other approaches involve observation from ideal user flow and software ideal behaviour, or UI wireframing to see what elements should be there.

      For (2), this also has the problem of organizing (which code goes into which file, which function does this belong to) and naming. For organizing data, I will recommend [The Many Forms of a Single Fact](https://www.bkent.net/Doc/manyform.htm) and the first chapter of [Data and Reality](https://cmpct.info/~calvin/Papers/Data%20and%20Reality.pdf) to see how impossible it is to create exactly correct representations in code. In areas that's entirely inside the box (e.g graphics) people don't often deal with messy representations of real world domains, but in business software they will do much more.

      On the naming side, the first chapter of [Elements of Clojure](https://elementsofclojure.com/) was a really good attempt, making me realize it is way deeper into philosophy than anyone would like to wander in.

      That said, the way software engineering discussion has been so far is very much influenced by the programming languages of the time (see Java), and so my recommendation is to try to learn concepts of organization independently, and see what its workaround is in your active language (e.g algebraic data type is sometimes useful, and people try to do it with sealed classes in Kotlin or interfaces in TypeScript). Once you have a good grasp of one tool (with all their warts, they all have pains), you'll find the capability to experiment.

      thread
    2. libraryofbabelAug 2025
      I left it open-ended because it would somewhat depend on the junior developer's previous knowledge and their focus (do they have a CS degree? what topics do they want to go deep on in their career?)

      But here are some titles:

      * Kleppmann, Designing Data-Intensive Applications

      * Nand2Tetris. Computers from first principles, often fills in a lot of gaps. Possibly preceded by Code: The Hidden Language of Computer Hardware and Software if they need even more grounding.

      * SICP if I think they'd be ready for it

      * Crafting Interpreters

      * If they're working with Python I'd give them Fluent Python by Luciano Ramalho. For whatever other language(s) pick a book that allows them to go from intermediate to advanced in that language and really understand it inside out.

      * Ousterhout, A Philosophy of Software Design

      * Data and Reality

      * The Staff Engineer’s Path by Tanya Reilly to demystify the upper IC track. Or The Manager's Path by Camille Fournier.

      thread
    3. lukevMar 2025
      Data and Reality, by William Kent. A timeless classic on the computational representation of, well, anything and everything.

      The third and currently only published edition, published posthumously, insists on adding a bunch of mid-2000s era design conceits based on OO paradigms. An absolute travesty.

      thread
    4. spratztAug 2024
      For those interested in escaping the Hacker Prison where ‘Weeks of coding can save hours of thinking’ I strongly recommend William Kent’s book “Data and Reality’.
      thread
    5. slotransAug 2023
      Data and Reality (William Kent, 1978)
      thread
    6. stevesimmonsFeb 2023
      There's a great book "Data and Reality" that discusses these subtle but very crucial differences. Discussed here in HN a year ago:

      https://news.ycombinator.com/item?id=30251747

      thread

    Related

    Cover of Understanding Computation
    2013–2026

    Understanding Computation

    Tom Stuart
    13 recommend · 26
    Cover of Information Theory, Inference & Learning Algorithms
    2007–2026

    Information Theory, Inference & Learning Algorithms

    David J.C. MacKay
    77 recommend · 111
    Cover of Computer systems
    2009–2026

    Computer systems

    Randal Bryant
    67 recommend · 110
    Cover of Data science from scratch
    2015–2023

    Data science from scratch

    Joel Grus
    22 recommend · 48
    Cover of Designing Data-Intensive Applications
    2014–2026

    Designing Data-Intensive Applications

    Martin Kleppmann
    457 recommend · 846
    Cover of Artificial Intelligence
    2007–2026

    Artificial Intelligence

    Stuart J. Russell
    60 recommend · 153
    Cover of Dataclysm
    2014–2025

    Dataclysm

    Christian Rudder
    17 recommend · 42
    Cover of The Information
    2011–2026

    The Information

    James Gleick
    61 recommend · 92