Literary programming
In less than a month I learned about literary programming, but
the concept itself made a lasting impression on me, made me
rethink some things and reduce the ardor with maximalism
in some judgments. On the technical side of literary
programming (I call it literary rather than literate; it
seems to me closer in meaning to the original title) I saw a couple of
wonderful articles in RuNet, but I want to talk about
its emotional side, I hope this will give you motivation to dig
deeper. Emotional words would have sounded from my lips a
little ... fanboyly, so I’ll leave them for later, but now
I suggest you read a few quotes from the creator of the methodology, Donald
Whip.
I did the translation with the help of Google Translate, and this is my
first published translation - I'll ask you to kick only in the case.
Fragments from an article in Literate Programming, 1983:
It is worth thinking seriously in the above quote and not skipping over
as something obvious. A lot of meaning is packed into the word exposition , and
its understanding is essential for revealing the idea of literary
programming. I give the definition from Wikipedia.
An exposition in literary criticism is a part of a work preceding the
beginning of the development of units of the structure of the work, in particular, a part of the
work that precedes the beginning of the plot. The exposition follows the
arrangement of the actors, circumstances arise, the
reasons are shown that “trigger” the plot conflict. The exposition can
follow both before the tie and after.
Exposure in drugs is one of the main ideas; the point is that the
author must explain to the reader of the literary program where
any piece of code came from and why it is where it is.
This is a word about why many of the tools for drugs have
the word web [web] in their name .
A small excerpt from an interview with Donald Knut, 20 years later:
As for me - I think that literary programming is very, very
much lacking in open source projects and especially in teaching
programming (it is not used formally with the appropriate
tools).
Last year I watched very closely the life of the community of
lisper-koskusturistov and absorbed all the information available on the network on
this topic: the planet of blogs, twitter, 3 books published today. After a
fairly tight “immersion” in this topic, I had a very
vague suspicion about the approach to learning the Clojure language and its
attendant infrastructure. Then I found out about PL and a vague
suspicion cleared up. Judge for yourself. There are three books about
Clojure and their contents intersect very much,
approximately it can be described as 100,500
recipes for loosely related to each other rake placement provided by the language of this
particular version. Reading all three books will not make you
professional. You can read a thousand such books -
you do not become a master . All 3 books abut against an impenetrable wall; you know
that behind the wall lies a treasure, simple and concrete; but you can’t
get to it in any way through the thorns of disparate and unclear
outlines. Such technical literature is the essence of clip
thinking: it’s as if I’m fed a tightly brewed porridge from
nutritious and damn useful pieces, but I can never
to get enough, because they feed me secondary, leaving the essence
inaccessible.
Clojure, like all Lisp, is essentially an extremely simple
construct. Someone said "source is the best documentation"; for the
family of these languages, this is true. In fact, that part of the language that
is directly used by the user is described on
Clojure itself in a single core.clj file about 5 thousand lines in size. This
code is transparent as a baby’s tear with comments from which
fairly simple, but high-quality documentation is generated. Reading
this file over a cup of tea will be the beginning of that very journey beyond the
wall of clip-art to the very essence of the technology used. But further
promotion turns out to be much more complicated - the next one will be
Java sources, which describe the compiler, transactional memory,
links, agents, and persistent data structures. And not a single
comment - there the devil himself will break his leg. And after all, the thing is not at all
complicated, but those who really thoroughly or at least roughly
know the device of all this technology to its very foundations are orders of magnitude
less than those who have studied it before this impassable wall.
Another thing TeX - the glorious creation of the great master. If you want to become a
real technician, you read from standard to standard the manual
described in the TeXbook. I decided to become a burnt specialist - again you study
from cover to cover, the TeX The Program book, in which all 20,000 lines of
the TeX program (TeX is written in Pascal, damn me!) are described in
simple understandable human language - this is a literary work, a
detailed description of the program from a bird's-eye view down to the
smallest detail . All. Two books. Alpha and Omega. The technology is described
from bottom to top and from all sides - no one will say more. To
fully experience the methodology, I highly recommend looking at Knut’s three great literary programs, “TeX The Program” [http://db.tt/X8debml],
“METAFONT The Program” and “MMIXware”.
Literary programming is not just another approach to
documentation. It is much deeper - it is a path connecting the hearts
program and programmer. And this path will remain unfulfilled
until literary programming is put into
practice.
the concept itself made a lasting impression on me, made me
rethink some things and reduce the ardor with maximalism
in some judgments. On the technical side of literary
programming (I call it literary rather than literate; it
seems to me closer in meaning to the original title) I saw a couple of
wonderful articles in RuNet, but I want to talk about
its emotional side, I hope this will give you motivation to dig
deeper. Emotional words would have sounded from my lips a
little ... fanboyly, so I’ll leave them for later, but now
I suggest you read a few quotes from the creator of the methodology, Donald
Whip.
I did the translation with the help of Google Translate, and this is my
first published translation - I'll ask you to kick only in the case.
Fragments from an article in Literate Programming, 1983:
I believe that the time has come for a much better documentation of the
programs, and that we can achieve this by making the programs
literary.
Let's change our traditional attitude towards building programs:
instead of imagining that our main task is to tell the
computer what to do, let's focus on explaining to the person
what we want the computer to do.
A practitioner of literary programming can be regarded as an
essayist whose main concern is exposition and the perfection of
style. Such an author, with a dictionary in his hand, carefully selects the names of the
variables and explains why each of them is needed.
It is worth thinking seriously in the above quote and not skipping over
as something obvious. A lot of meaning is packed into the word exposition , and
its understanding is essential for revealing the idea of literary
programming. I give the definition from Wikipedia.
An exposition in literary criticism is a part of a work preceding the
beginning of the development of units of the structure of the work, in particular, a part of the
work that precedes the beginning of the plot. The exposition follows the
arrangement of the actors, circumstances arise, the
reasons are shown that “trigger” the plot conflict. The exposition can
follow both before the tie and after.
Exposure in drugs is one of the main ideas; the point is that the
author must explain to the reader of the literary program where
any piece of code came from and why it is where it is.
He or she seeks a program that is understandable because her ideas
have been presented in an order that is best for human
understanding, using a mixture of formal and informal methods that
reinforce each other.
We understand a complex system, understanding how its simple parts are arranged, and
understanding the simple relationships between these parts and their closest
neighbors. If we express a program as a network of ideas, we can
emphasize its structural properties in a natural and satisfactory
manner.
This is a word about why many of the tools for drugs have
the word web [web] in their name .
I dare to suggest that such advances in documentation are possible due to the
experience that I gained over the past few years during
intensive software development (here Knuth talks about
developing TeX and METAFONT). Taking advantage of several ideas that have
existed for a long time, and systematically applying them in a slightly
new way, I came across a method of creating programs that
excited me extremely .
In fact, my enthusiasm is so great that I must warn the
reader to perceive a lot of what I will say, like the delirium of a fanatic
who thinks he has just gained
enlightenment. Programming is a very personal activity,
therefore, I cannot be sure that what worked with me will
work with everyone. However, this new approach has fundamentally influenced
my own style, and my excitement has not subsided to this day - for more than
two years now. I like this new methodology so much that it’s hard
not to go back to every
program I ever wrote and to convert it into a “literary” one.
I cannot resist the desire to work on
programming tasks that I usually assign to student
research assistants ; and why? Because it seems to me that at last I can
write programs the way they should be written. My programs do not
only explained better than ever before; they are better as programs
because the new methodology makes me do my job better.
A small excerpt from an interview with Donald Knut, 20 years later:
- One of your few projects that did not reach a wide
community of programmers is literary programming. What are
your thoughts on why literary programming has not taken root? And
is there anything you would do differently in retrospect
regarding literary programming?
- Literary programming is a very personal thing. I think it's
awesome, but maybe it's because I'm a very strange
person. He has tens of thousands of fans, but not millions.
Judging from my experience, programs created using literary
programming turned out to be much better than programs
developed in a more traditional way. But ordinary programs still
were good enough, so the traditional methods remain with us -
they are understood by the vast community of programmers, and most people
have no particular need to change anything; just as I am not motivated to learn
Esperanto, even knowing that it may be preferable to English,
German or Russian.
John Bentley probably dotted the i when he was asked “why did
literary programming not conquer the world?” He said that only a
small percentage of all people are good at programming and a small
percentage are good at writing; and you ask me that all people
be in these two categories at once.
As for me, literary programming is the most important thing
which came out of the TeX project. It not only allowed me to
write and maintain programs faster and more reliable than ever, it was
one of the greatest sources of joy since the 1980s, and at times
it was impossible to do without it. Some of my main programs,
such as the MMIX meta-simulator, could not be written using
any other methodology I have ever heard of. They were
just too complicated for my limited brain; without
literary programming, such an enterprise would simply fail
.
If people discover good ways to use newfangled
multithreaded machines, I expect the discovery to come from people who
everyday use literary programming. Literary
programming is what you need to rise above the next
level of achievement. But I do not believe in forcibly accepting ideas. If
literary programming is not your style, please forget about it and
do what you like. If nobody but me likes it,
let him die.
From the positive: I was pleasantly surprised to discover that the rules of CWEB
( literary programming system for C ) are already
standard in pre-installed programs, such as Makefile, in
modern Linux.
As for me - I think that literary programming is very, very
much lacking in open source projects and especially in teaching
programming (it is not used formally with the appropriate
tools).
Last year I watched very closely the life of the community of
lisper-koskusturistov and absorbed all the information available on the network on
this topic: the planet of blogs, twitter, 3 books published today. After a
fairly tight “immersion” in this topic, I had a very
vague suspicion about the approach to learning the Clojure language and its
attendant infrastructure. Then I found out about PL and a vague
suspicion cleared up. Judge for yourself. There are three books about
Clojure and their contents intersect very much,
approximately it can be described as 100,500
recipes for loosely related to each other rake placement provided by the language of this
particular version. Reading all three books will not make you
professional. You can read a thousand such books -
you do not become a master . All 3 books abut against an impenetrable wall; you know
that behind the wall lies a treasure, simple and concrete; but you can’t
get to it in any way through the thorns of disparate and unclear
outlines. Such technical literature is the essence of clip
thinking: it’s as if I’m fed a tightly brewed porridge from
nutritious and damn useful pieces, but I can never
to get enough, because they feed me secondary, leaving the essence
inaccessible.
Clojure, like all Lisp, is essentially an extremely simple
construct. Someone said "source is the best documentation"; for the
family of these languages, this is true. In fact, that part of the language that
is directly used by the user is described on
Clojure itself in a single core.clj file about 5 thousand lines in size. This
code is transparent as a baby’s tear with comments from which
fairly simple, but high-quality documentation is generated. Reading
this file over a cup of tea will be the beginning of that very journey beyond the
wall of clip-art to the very essence of the technology used. But further
promotion turns out to be much more complicated - the next one will be
Java sources, which describe the compiler, transactional memory,
links, agents, and persistent data structures. And not a single
comment - there the devil himself will break his leg. And after all, the thing is not at all
complicated, but those who really thoroughly or at least roughly
know the device of all this technology to its very foundations are orders of magnitude
less than those who have studied it before this impassable wall.
Another thing TeX - the glorious creation of the great master. If you want to become a
real technician, you read from standard to standard the manual
described in the TeXbook. I decided to become a burnt specialist - again you study
from cover to cover, the TeX The Program book, in which all 20,000 lines of
the TeX program (TeX is written in Pascal, damn me!) are described in
simple understandable human language - this is a literary work, a
detailed description of the program from a bird's-eye view down to the
smallest detail . All. Two books. Alpha and Omega. The technology is described
from bottom to top and from all sides - no one will say more. To
fully experience the methodology, I highly recommend looking at Knut’s three great literary programs, “TeX The Program” [http://db.tt/X8debml],
“METAFONT The Program” and “MMIXware”.
Literary programming is not just another approach to
documentation. It is much deeper - it is a path connecting the hearts
program and programmer. And this path will remain unfulfilled
until literary programming is put into
practice.