duesabati
Joined 1 year ago
Joined 1 year ago
If you get them out of the way, I literally need to do the type inferring myself, not a problem if I'm looking at a small and trivial function, but if I'm trying to understand a "conversation" inside my code I really want that job already done by the compiler, this is also to tell that more of the "dumb/mechanical" computation is done by the compiler/interpreter the better, this is why we always wanted to get rid of syntax because we want to read english but at the same time we cannot use english because we don't want ambiguity. Writing clean code allow for the right compromise. I believe LLMs can write clean code with the right instructions, the same you would tell a junior dev, but one thing they will never succeed (unless they litreally copy) is architecture, because that is not teachable by writing (instructions/guides/etc.), only by doing and feeling.
The post talks about "transition invariants" that should be somehow different from "state invariants" yet it describe them as:
> These are predicates over a <<state, next-state>> pair ...
i.e. it still is about state, but I find it much more useful to focus on behavior so instead of thinking about how state transition you focus on what the program is allowed to perform, regardless of the underlying data structure.
What I mean is that I'd like the code to tell me why a certain piece can't do such move instead of why it cannot transition it's position to another position and basically dumping its state in my head and there I have to execute the program myself.
When you write software to solve a problem you start with as little as possible details such that when you read it, it would only talk about the business logic. What I mean by that? That you abstract away any other stuff that does not concern the domain you are in, for example your first piece of code should never mention any kind of database technology, it should not contain any reference to a specific communication layer (HTTP for example), and so on.
When you get to this, you have summarized the "spec", and usually it can be read very easily by a non-techincal person (but obviously is a "domain expert") and can also be very testable.
I hope this helps on why the author is right 100%
If you really need build time differences, then you should identify this difference by what really is not by the env you assume it will run on, because explicit is always better than implicit, especially for LLMs and new devs.