|
|
|
|
|
by somethingsome
26 days ago
|
|
While I agree with the message, I don't agree on the tools. It's very difficult to define a specification that works as intended, even with tools. Most waterfall software methodologies failed for a reason. And tools of the past are really not usable with AI. We need tools where it is way easier to adapt the specification iteratively, and even better, to have a bidirectional conversion. You define the spec, the LLM generate code, from the code you extract the spec, now you can compare and iterate. Then the model can focus only on the differences. The other main issue that I see, is that even if there is a formally verified specification, at the moment, LLMs will not respect it perfectly. As long as LLMs are not able to non-deterministically follow a spec, the technology is not good enough. A part from that, imo, in this age we should focus more on the mathematical aspect of computations, and I think we need to develop novel theories that take into account the non deterministic nature of LLMs in the process. I'm not sure this will ever work by merely extending current practices, as software design practices are extremely poorly defined from an engineer point of view. Just extending them by including randomeness does not seem a good idea. |
|
I mainly pointed out some of the important Software Engineering methodologies/techniques to be studied and adapted for use with AI. Earlier, they were encompassed/expressed-by specific software tools (CASE/Formal Method tool etc.) which may/may-not be used alongside AI. You study and extract the principles/concepts/ideas behind those tools and adapt them for use with the more powerful all-in-one AI tool.
Contrary to your claim, Waterfall methodologies (mainly the stages and iteration amongst them) have not failed but are now uniquely adaptable for AI. Most people on HN have a very wrong idea of what a Waterfall and its related Spiral Model are - https://news.ycombinator.com/item?id=45145706
The Formal Methods mentioned above already encompass "mathematical aspect of computations" and more. The non-deterministic nature of LLM output is taken care of by "Correct-by-Construction"/"Design-by-Contract" approaches which are based on Set Theory/Predicate Logic. LLMs must be made to generate code along with correctness proof using the above (Dijkstra's methodology). See the Dafny language for some background - https://dafny.org/
To summarize; understand classical Software Engineering methodologies/techniques since they focused on end-to-end SDLC of which programming/coding was only a small part and use them around a AI tool. Add in formal method techniques (this is a huge field in itself eg. model checking, theorem proving etc.) for both Specification and Verification. You can use the AI tool itself for all stages.
For example; you can take a unstructured requirements document from a client and have the AI tool generate a multi-level decision table like described in https://news.ycombinator.com/item?id=38821708 From this you can have AI generate modular state machine implementation code with pre/post/inv conditions directly mapping to the decision table. The decision table can also be verified by a model checker either directly or by transforming into a verifiable state-transition model. Add in test cases etc. and you have a end-to-end system with guaranteed traceability.