[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Axiom-developer] Literate programming

From: daly
Subject: Re: [Axiom-developer] Literate programming
Date: Fri, 10 Jul 2015 18:29:50 -0500


Back in the day I struggled to cross the great chasm, moving from
real programming to "structured programming", i.e. not using GOTOs.

Dijkstra was asking me to change a fundamental part of my thinking,
to throw away the focus on the machine's BRANCH instruction, albeit
in my high-level FORTRAN programs. I was going to lose my precious
computed GOTOs. Even my Lisp programs had gotos. I was writing
assembler "at a higher level", being efficient; saving time; using
"best practices".

I crossed that chasm by forcing myself read what Dijkstra wrote and
forcing myself to write in the new sytle. It was painful, pointless,
and unnatural but eventually I understood. The GOTO statement,
especially my precious computed-goto, made programs hard to understand,
maintain, and modify.  I haven't written a GOTO statement in years.

Literate programming is painful, pointless, and unnatural. We're being
efficient; saving time; using "best practices"! Hierarchies of tiny
files built with MAKE and without annoying comments are best practices! 
If you want to understand the theory just read the code! Understanding, 
maintaining, and modifying raw code is for real programmers. If you 
can't do that... go away.

Knuth is trying to take away my precious hacker badge. He wants me to
write natural language to communicate ideas to other humans. What a
worthless waste of my time. 

There is no argument I can make that will convince anyone that
literate programming is worthwhile. Like lisp programming, literate
programming is an "Aha!" epiphany event. You don't "get it" until you
"get it", or as the dictionary says it is "an illuminating discovery,
realization, or disclosure". 

The only way to cross the chasm is to use the new tool. 
Once you "get it" you'll never go back.

Axiom is about ideas, not code. It is a way of structuring
computational mathematics. It is not just a tool to get an answer, it
is a tool to get the right answer. Using the tool properly implies you
understand the tool, its uses, and its limitations. Enhancing the tool
implies you understand the model and its assumptions. All of that
means that we have to communicate to people as well as machines.

Literate programming is a vehicle to communicate to both.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]