Old Is the New New
- 2. Toutes choses sont dites
déjà; mais comme
personne n'écoute, il faut
toujours recommencer.
André Gide
- 3. Everything has been said
before; but since nobody
listens, we must always
start again.
André Gide
- 6. Ophelia: 'Tis in my memory
locked, and you yourself
shall keep the key of it.
- 15. In 1990 I proposed a theory, called
Worse Is Better, of why software would
be more likely to succeed if it was
developed with minimal invention.
It is far better to have an underfeatured
product that is rock solid, fast, and
small than one that covers what an
expert would consider the complete
requirements.
- 16. Here are the characteristics of a worse-is-better software
design:
▪ Simplicity: The design is simple in implementation. The
interface should be simple, but anything adequate will do.
▪ Completeness: The design covers only necessary
situations. Completeness can be sacrificed in favor of any
other quality.
- 17. #!/usr/bin/perl
# -------------------------------------------------------- PerlInterpreter
# PerlInterpreter must be the first line of the file.
#
# Copyright (c) 1995, Cunningham & Cunningham, Inc.
#
# This program has been generated by the HyperPerl
# generator. The source hypertext can be found
# at http://c2.com/cgi/wikibase. This program belongs
# to Cunningham & Cunningham, Inc., is to be used
# only by agreement with the owner, and then only
# with the understanding that the owner cannot be
# responsible for any behaviour of the program or
# any damages that it may cause.
# -------------------------------------------------------- InitialComments
# InitialComments
print "Content-type: text/htmlnn";
$DBM = "/usr/ward/$ScriptName";
dbmopen(%db, $DBM , 0666) || &AbortScript("can't open $DBM");
$CookedInput{browse} && &HandleBrowse;
$CookedInput{edit} && &HandleEdit;
$CookedInput{copy} && &HandleEdit;
$CookedInput{links} && &HandleLinks;
$CookedInput{search} && &HandleSearch;
dbmclose (%db);
if ($ENV{REQUEST_METHOD} eq POST) {
$CookedInput{post} && &HandlePost;
}
# &DumpBinding(*CookedInput);
# &DumpBinding(*old);
# &DumpBinding(*ENV);
# -------------------------------------------------------- WikiInHyperPerl
- 18. Here are the characteristics of a worse-is-better software
design:
▪ Simplicity: The design is simple in implementation. The
interface should be simple, but anything adequate will do.
▪ Completeness: The design covers only necessary
situations. Completeness can be sacrificed in favor of any
other quality.
▪ Correctness: The design is correct in all observable
aspects.
▪ Consistency: The design is consistent as far as it goes.
Consistency is less of a problem because you always
choose the smallest scope for the first implementation.
- 22. I began to use the term “software
engineering” to distinguish it from
hardware and other kinds of engineering;
yet, treat each type of engineering as part of
the overall systems engineering process.
Margaret Hamilton
- 24. The most deadly thing in software is
the concept, which almost universally
seems to be followed, that you are
going to specify what you are going
to do, and then do it.
Douglas Ross
- 25. And that is where most of
our troubles come from.
Douglas Ross
- 32. Command-line tools
can be 235x faster than
your Hadoop cluster
Adam Drake
http://aadrake.com/command-line-tools-can-be-235x-faster-than-your-hadoop-cluster.html
- 35. My point today is that, if we wish
to count lines of code, we should
not regard them as "lines
produced" but as "lines spent".
Edsger Dijkstra
- 37. There have always been fairly severe size
constraints on the Unix operating system and
its software. Given the partially antagonistic
desires for reasonable efficiency and
expressive power, the size constraint has
encouraged not only economy but a certain
elegance of design.
Dennis Ritchie and Ken Thompson
"The UNIX Time-Sharing System", CACM
- 41. This is the Unix philosophy:
Write programs that do one
thing and do it well.
Doug McIlroy
- 43. Define a subset of the system which is
small enough to bring to an operational
state [...] then build on that subsystem.
E E David
- 44. This strategy requires that the system
be designed in modules which can be
realized, tested, and modified
independently, apart from conventions
for intermodule communication.
E E David
- 46. A software component is a unit of
composition with contractually
specified interfaces and explicit
context dependencies only.
A software component can be
deployed independently and is
subject to third-party composition.
- 47. Implementation characteristics are foremost:
▪ The implementation should be fast.
▪ It should be small.
▪ It should interoperate with the programs and
tools that the expected users are already using.
- 48. This is the Unix philosophy:
Write programs that do one
thing and do it well.Write
programs to work together.
Doug McIlroy
- 49. In McIlroy's summary, the hard
part is his second sentence:
Write programs to work
together.
John D Cook
- 50. Implementation characteristics are foremost:
▪ The implementation should be fast.
▪ It should be small.
▪ It should interoperate with the programs and
tools that the expected users are already using.
▪ It should be bug-free, and if that requires
implementing fewer features, do it.
- 51. A software system can best be
designed if the testing is interlaced
with the designing instead of
being used after the design.
Alan Perlis
- 52. We instituted a rigorous regression
test for all of the features of AWK.
Any of the three of us who put in a
new feature into the language [...],
first had to write a test for the new
feature.
Alfred Aho
http://www.computerworld.com.au/article/216844/a-z_programming_languages_awk/
- 55. Implementation characteristics are foremost:
▪ The implementation should be fast.
▪ It should be small.
▪ It should interoperate with the programs and
tools that the expected users are already using.
▪ It should be bug-free, and if that requires
implementing fewer features, do it.
▪ It should use parsimonious abstractions as long
as they don’t get in the way.
- 56. Shipping first time code is like going into debt.
A little debt speeds development so long as it
is paid back promptly with a rewrite.
The danger occurs when the debt is not
repaid. Every minute spent on not-quite-right
code counts as interest on that debt.
Ward Cunningham
http://c2.com/doc/oopsla92.html
- 58. In the long run every
program becomes rococo
— then rubble.
Alan Perlis
- 59. Walking on water and
developing software
from a specification
are easy if both are
frozen.
Edward V Berard
- 65. The replication of multiple copies of a
software system is the phase of software
manufacture which corresponds to the
production phase in other areas of
engineering.
Peter Naur and Brian Randell
- 66. It is accomplished by simple copying
operations, and constitutes only a
minute fraction of the cost of software
manufacture.
Peter Naur and Brian Randell
- 67. We propose [...] that one begins with a list
of difficult design decisions or design
decisions which are likely to change. Each
module is then designed to hide such a
decision from the others.
David L Parnas
"On the Criteria to Be Used in Decomposing Systems into Modules"
- 69. Cohesion is a measure of the strength of association
of the elements inside a module.
A highly cohesive module is a collection of
statements and data items that should be treated as
a whole because they are so closely related.
Any attempt to divide them up would only result in
increased coupling and decreased readability.
- 70. OOP to me means only
messaging, local retention
and protection and hiding of
state-process, and extreme
late-binding of all things.
Alan Kay
- 72. Instead of using threads and shared
memory as our programming model, we
can use processes and message passing.
Process here just means a protected
independent state with executing code,
not necessarily an operating system
process.
Russel Winder
"Message Passing Leads to Better Scalability in Parallel Systems"
- 73. Languages such as Erlang (and occam
before it) have shown that processes are a
very successful mechanism for
programming concurrent and parallel
systems. Such systems do not have all
the synchronization stresses that shared-
memory, multithreaded systems have.
Russel Winder
"Message Passing Leads to Better Scalability in Parallel Systems"
- 78. Excel is the world's
most popular
functional language.
Simon Peyton-Jones
- 79. Separation of tasks is a good
thing, on the other hand we
have to tie the loose ends
together again.
Edsger Dijkstra