Difference between version 5 and version 4:
At line 54 added 11 lines. |
+ ---- |
+ Very interesting. We've just demonstrated that 6 lines of Prolog can replace 20 packges of EJB session and entity beans and Oracle. However: how do you transition to such a brave new vision? I'm proposing that we first reimplement our functional tests in Prolog. -- OliBye |
+ ---- |
+ [Ward Cunningham|http://c2.com/cgi/wiki?WardCunningham] spoke to this at XP 2003, proposing that we __make tests independent of implementation language__. He speculated that using a greater variety of languages would support the "accumulation of abstraction" that is such an important product of merciless refactoring. ''"I think that people are afraid of powerful languages because they may seem weird."'' Test suites independent of language would make it possible to migrate parts of systems. I note in this regard that APL was the first language to achieve .NET certification. |
+ |
+ Some comments at __XP 2003__ which struck me. Surprise among most people I spoke to at finding themselves talking to a live APL programmer. "Is that still around?" Most common negative impression: ''unreadable code'', unsuitable for communicating through the code. Surprise to find that (since they saw it years ago) APL has control structures, OO and GUI tools. Surprise to find that I particularly value APL for the ''clarity'' that it lets me achieve. (Of course you can use it to write unintelligible garbage too.) |
+ |
+ __Clarity and eXtreme Terseness__ Showed some production code to [John Noll|mailto://[email protected]], who teaches software engineering (''sic'') at Santa Clara University, and was intrigued that I write an OO layer on top of a functional layer. But why? Is the functional layer just general purpose utilities? Not really: I can "accumulate abstractions" (love that phrase) at a non-trivial level before I need OO structure. Showed the repeated use of a "masked sums" utility that uses a boolean list (one argument) to calculate pairs of sums (of those elements selected and not selected by the boolean) from collections of numeric lists of corresponding length. All very clear; obviously the important detail is hidden in the "masked sums" utility. Then I displayed the 13 characters of the {{msum}} function, and used the interpreter to step through its logic. He chuckled: "That would be 500 lines of C!" |
+ |
+ The value of this is not so much that I can code more quickly, but that I can [communicate through the code|http://c2.com/cgi/wiki?RecordYourCommunicationInTheCode] and accumulate abstractions. Errors are a linear function of code volume, so a 2-3 order-of-magnitude drop in code volume gets you something there too. Finally, when you do eventually come back to change or refactor, there's just that much less code to shovel. StephenTaylor |
+ |
Back to ExtremeTerseness, or to the Page History.
|