summaryrefslogtreecommitdiff
path: root/usergrps/uktug/baskervi/5_2/kees.tex
blob: abf23d34f797baa24ce20cc47639fc667759725f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
\title{One by one the guests arrive}
\author[Kees van der Laan]{Kees van der Laan\\
\texttt{cgl@rc.service.rug.nl}}
%\blueabstract A plea is made for writing macros
%  in plain \TeX{} sufficiently documented
%  to be used with all flavours of \TeX.

\begin{Article}
This note emerged from a request of Sebastian Rahtz
triggered by my message which I passed along with
my public appraisal for the 100 \AllTeX{} FAQs.

This plea, this shout, hopes to awake
the notion that we are all better off
if we write macro {\it software\/} in the lowest common
set of all \TeX{} flavours.
At least it might initiate a discussion because I'm realistic
enough that not all involved share my views :-))).

Of course I know that reality is more complicated,
and that a right balance is the best
we can opt for, so let us go for that.

\section{Why,}

would a \LaTeX{} devotee ask? Do you have concrete arguments?
Well, from my own experience I can say that there was a time I
needed to typeset number ranges.
Only the \LaTeX{} style of Donald Arseneau was available.
But, what I needed was a few macros to cooperate with plain,
so I had to write one of my own,\footnote{Who cares? It is estimated
   that 80\% or more of the software is continuously rewritten,
   that is a fact. My reply is that we can do much better, and we
   should if we opt for the best.}
which by the way emerged as a much, much more compact suite.
After all the need has faded away because
I tackled the handling of bibliography references
more fundamentally. The point is that it would have been better
if there had been a kernel independent from the higher
layer which I could have taken over. The interface towards
the higher level, or let us say the user interface,
should better be built on top.
The paradigm is this example is the awareness of CISO,
as analogy of FIFO, meaning Collective In
and Smallest Out, which solves the problem.

That this approach is beneficial in software engineering
in general is proven by the various numerical software
program libraries, which have the basic material written in the
lowest language feasible, FORTRAN, allowing stability,
optimization of the code, and confidence in use.
Similarly, I remember the PDE (partial differential equation)
packages which use common basic algorithms, but
differ in the jargon at the user level.
I hope that the macro/package/module writers have a feeling for
the savings of the costs which can be gained
over time, by this attitude.
As a volunteer organization one could shrug it off
and say I don't care, costs are not relevant.
Then there is still another nasty guy lurking around the counter
that the (All)\TeX{} community like various sects will
fall apart, will fragment. To continue the tune
\begin{center}
And no one knows where the night is going\\
And no one knows why the wine is flowing\\
O love, I need you, I need you, I need you\\
I need you now\\
\end{center}
Another example to the point is how to provide for headings?  The
answer is that I don't care so much about heading macros because the
common part is so negligible, while it is highly intertwined with the
user interface. But --- there is always a but --- I for one am
strongly in favour of starting from two-part macros, which should
perform the essential functionalities whatever you may wish, and build
all the ornamentation --- i.e., the user-interfaces, eventually with
less functionality --- on top.  This approach obeys the {\it
  separations of concerns\/} principle, and pays off in maintenance,
if not that it spreads more easily.\footnote{Forgive me this joke,
  with \LaTeX{} widespread.} To give you an idea of how I did it
basically in \texttt{blue.tex}:
\begin{verbatim}
\def\beginghead{<the required functionality>}
\def\endhead{<the required finishing off>}
%with as one-part on top
\def\head#{\bgroup\beginhead
  \aftergroup\endhead
  \afterassignment\ignorewhitespace
  \let\dummy= }
%or the tribute to manmac
\def\bluehead#1\par{\beginhead#1\endhead}
\end{verbatim}
The last tribute lost the processing on-the-fly functionality,
but most of the time I don't need that, at the expense of
simpler markup. But the latter is a matter of taste.

If people like a \LaTeX-flavoured header, just go ahead and add it.
The fundamental functionalities have been provided already, just
a user interface has to be provided as variant.

\section{Conclusion}

The point I'm trying to make is that we are all better off
if complex fundamental parts are programmed in `plain',
perhaps after all it has proven to be a fundamental point.
To end Cohen's song:

\begin{center}
The guests are coming through\\
The open-hearted many\\
The broken-hearted few\\
\end{center}
\end{Article}