A sufficiently detailed spec is code

(haskellforall.com)

80 points | by signa11 2 hours ago

14 comments

  • hintymad 7 minutes ago
    > A sufficiently detailed spec is code

    This is exactly the argument in Brooks' No Silver Bullet. I still believe that it holds. However, my observation is that many people don't really need that level of details. When one prompts an AI to "write me a to-do list app", what they really mean is that "write me a to-do list app that is better that I have imagined so far", which does not really require detailed spec.

  • rdevilla 1 hour ago
    I think it's only a matter of time before people start trying to optimize model performance and token usage by creating their own more technical dialect of English (LLMSpeak or something). It will reduce both ambiguity and token usage by using a highly compressed vocabulary, where very precise concepts are packed into single words (monads are just monoids in the category of endofunctors, what's the problem?). Grammatically, expect things like the Oxford comma to emerge that reduce ambiguity and rounds of back-and-forth clarification with the agent.

    The uninitiated can continue trying to clumsily refer to the same concepts, but with 100x the tokens, as they lack the same level of precision in their prompting. Anyone wanting to maximize their LLM productivity will start speaking in this unambiguous, highly information-dense dialect that optimizes their token usage and LLM spend...

    • nomel 56 minutes ago
      Let's use a non-ambiguous language for this. May I suggest Lojban [1][2]?

      [1] https://en.wikipedia.org/wiki/Lojban

      [2] Someone speaking it: https://www.youtube.com/watch?v=lxQjwbUiM9w

      • dooglius 8 minutes ago
        It looks like that's about syntactic ambiguity, whereas the parent is talking semantic ambiguity
    • otabdeveloper4 19 minutes ago
      > optimizes their token usage and LLM spend

      Context pollution is a bigger problem.

      E.g., those SKILL.md files that are tens of kilobytes long, as if being exhaustively verbose and rambling will somehow make the LLM smarter. (It won't, it will just dilute the context with irrelevant stuff.)

    • est 23 minutes ago
      > by creating their own more technical dialect of English

      Ah, the Lisp curse. Here we go again.

      coincidently, the 80s AI bubble crashed partly because Lisp dialetcts aren't inter-changable.

      • Dylan16807 2 minutes ago
        Lisp doesn't get to claim all bad accidental programming languages are simply failing to be it, I don't care how cute that one quote is.
      • reverius42 5 minutes ago
        I bet a modern LLM could inter-change them pretty easily.
    • dwd 4 minutes ago
      [dead]
    • capt-obvious 29 minutes ago
      [dead]
  • adi_kurian 5 minutes ago
    This won't age well, or my comment won't age well. We'll see!
  • adampunk 7 minutes ago
    Just waterfall harder
  • ranyume 1 hour ago
    I tried myself to make a language over an agent's prompt. This programing language is interpreted in real time, and parts of it are deterministic and parts are processed by an LLM. It's possible, but I think that it's hard to code anything in such a language. This is because when we think of code we make associations that the LLM doesn't make and we handle data that the LLM might ignore entirely. Worse, the LLM understands certain words differently than us and the LLM has limited expressions because of it's limits in true reasoning (LLMs can only express a limited number of ideas, thus a limited number of correct outputs).
  • notepad0x90 1 hour ago
    I agree to this, with the caveat that a standard is not a spec. E.g.: The C or C++ standards, they're somewhat detailed, but even if they were to be a lot more detailed, becoming 'code' would defeat the purpose (if 'code' means a deterministic turing machine?), because it won't allow for logic that is dependent on the implementer ("implementation defined behavior" and "undefined behavior" in C parlance). whereas a specification's whole point is to enforce conformance of implementations to specific parameters.
    • gizmo686 1 hour ago
      Even programs are just specifications by that standard. When you write a program in C, you are describing what an abstract C machine can do. When the C compiler turns that into a program it is free to do so in any way that is consistent with the abstract C machine.

      If you look at what implementions modern compilers actually come up with, they often look quite different from what you would expect from the source code

      • notepad0x90 57 minutes ago
        I don't disagree, so in a way, compilers are the specification that implement the standard? That doesn't feel right though.
        • skydhash 49 minutes ago
          Compilers are converters. There’s the abstract machine specified by the standard and there’s the real machine where the program will run (and there can be some layer in between). So compilers takes your program (which assumes the abstract machine) and builds the link between the abstract and the real.

          If your program was a DSL for steering, the abstract machine will be the idea of steering wheel, while the machine could be a car without one. So a compiler would build the steering wheel, optionally adding power steering (optimization), and then tack the apparatus to steer for the given route.

  • macinjosh 13 minutes ago
    IMHO, LLMs are better at Python and SQL than Haskell because Python and SQL syntax mirrors more aspects of human language. Whereas Haskell syntax reads more like a math equation. These are Large _Language_ Models so naturally intelligence learned from non-code sources transfers better to more human like programming languages. Math equations assume the reader has context not included in the written down part for what the symbols mean.
  • HoldOnAMinute 30 minutes ago
    I have a lot of fun making requirements documents for Claude. I use an iterative process until Claude can not suggest any more improvements or clarifications.

    "Is this it?" "NOPE"

    https://www.youtube.com/watch?v=TYM4QKMg12o

  • measurablefunc 1 hour ago
    I agree with the overall structure of the argument but I like to think of specifications like polynomial equations defining some set of zeroes. Specifications are not really code but a good specification will cut out a definable subset of expected behaviors that can then be further refined with an executable implementation. For example, if a specification calls for a lock-free queue then there are any number of potential implementations w/ different trade-offs that I would not expect to be in the specification.
  • randyrand 2 minutes ago
    True. That's why I only write assembly. Higher level specs are useless.

    /s

  • cheevly 1 hour ago
    [dead]
  • X95_BNB35 35 minutes ago
    [dead]
  • tomlin 44 minutes ago
    [dead]
  • charcircuit 1 hour ago
    This articles ignores that AI agents have intelligence which means that they can figure out unspecified parts of the spec on their own. There is a lot of the design of software that I don't care about and I'm fine letting AI pick a reasonable approach.
    • abcde666777 44 minutes ago
      These algorithms don't have intelligence, they just regurgitate human intelligence that was in their training data. That also goes the other way - they can't produce intelligence that wasn't represented in their training input.
    • systemsweird 1 hour ago
      Exactly. The real speed up from AI will come when we can under specify a system and the AI uses its intelligence to make good choices on the parts we left out. If you have to spec something out with zero ambiguity you’re basically just coding in English. I suspect current ideas around formal/detailed spec driven development will be abandoned in a couple years when models are significantly better.
      • macinjosh 10 minutes ago
        For now I would be happy if it just explored the problem space and identify the choices to be made and filtered down to the non-obvious and/or more opinionated ones. Bundle these together and ask the me all at once and then it is off to the races.
    • TheRoque 42 minutes ago
      Exactly, I find that type of article too dismissive. Like, we know we don't have to write the full syntax of a loop when we write the spec "find the object in the list", and we might even not write this spec because that part is obvious to any human (hence to an LLM too)