SlideShare a Scribd company logo
Old Is the
New New
@KevlinHenney
Toutes choses sont dites
déjà; mais comme
personne n'écoute, il faut
toujours recommencer.
André Gide
Everything has been said
before; but since nobody
listens, we must always
start again.
André Gide
Old Is the New New
Hamlet: To be, or not to be,
that is the question.
Ophelia: 'Tis in my memory
locked, and you yourself
shall keep the key of it.
Hamlet: Yea, from the table
of my memory I'll wipe
away all trivial fond records.
Old Is the New New
Old Is the New New
Old Is the New New
Old Is the New New
Old Is the New New
Patterns are
an aggressive
disregard of
originality.
Brian Foote
Old Is the New New
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.
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.
#!/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
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.
The design process
is an iterative one.
Andy Kinslow
Old Is the New New
Old Is the New New
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
Old Is the New New
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
And that is where most of
our troubles come from.
Douglas Ross
Old Is the New New
Old Is the New New
Implementation characteristics are foremost:
▪ The implementation should be fast.
Remember that
there is no code
faster than no code.
Taligent's Guide to Designing Programs
Old Is the New New
The fastest I/O is no I/O.
Nils-Peter Nelson
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
299792458
Implementation characteristics are foremost:
▪ The implementation should be fast.
▪ It should be small.
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
Old Is the New New
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
Old Is the New New
µονόλιθος
Old Is the New New
This is the Unix philosophy:
Write programs that do one
thing and do it well.
Doug McIlroy
µservices
Define a subset of the system which is
small enough to bring to an operational
state [...] then build on that subsystem.
E E David
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
Old Is the New New
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.
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.
This is the Unix philosophy:
Write programs that do one
thing and do it well.Write
programs to work together.
Doug McIlroy
In McIlroy's summary, the hard
part is his second sentence:
Write programs to work
together.
John D Cook
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.
A software system can best be
designed if the testing is interlaced
with the designing instead of
being used after the design.
Alan Perlis
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/
Old Is the New New
P {Q} R
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.
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
Old Is the New New
In the long run every
program becomes rococo
— then rubble.
Alan Perlis
Walking on water and
developing software
from a specification
are easy if both are
frozen.
Edward V Berard
http://www.commitstrip.com/en/2016/08/25/a-very-comprehensive-and-precise-spec/
http://www.commitstrip.com/en/2016/08/25/a-very-comprehensive-and-precise-spec/
http://www.commitstrip.com/en/2016/08/25/a-very-comprehensive-and-precise-spec/
http://www.commitstrip.com/en/2016/08/25/a-very-comprehensive-and-precise-spec/
Programming is
a design activity.
Jack W Reeves
What Is Software Design?
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
It is accomplished by simple copying
operations, and constitutes only a
minute fraction of the cost of software
manufacture.
Peter Naur and Brian Randell
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"
Old Is the New New
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.
OOP to me means only
messaging, local retention
and protection and hiding of
state-process, and extreme
late-binding of all things.
Alan Kay
Old Is the New New
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"
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"
Old Is the New New
Old Is the New New
Old Is the New New
William Cook, "On Understanding Data Abstraction, Revisited"
Excel is the world's
most popular
functional language.
Simon Peyton-Jones
Separation of tasks is a good
thing, on the other hand we
have to tie the loose ends
together again.
Edsger Dijkstra
Old Is the New New
Old Is the New New
https://twitter.com/KevlinHenney/status/5334796004

More Related Content

Old Is the New New

  • 1. Old Is the New New @KevlinHenney
  • 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
  • 5. Hamlet: To be, or not to be, that is the question.
  • 6. Ophelia: 'Tis in my memory locked, and you yourself shall keep the key of it.
  • 7. Hamlet: Yea, from the table of my memory I'll wipe away all trivial fond records.
  • 13. Patterns are an aggressive disregard of originality. Brian Foote
  • 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.
  • 19. The design process is an iterative one. Andy Kinslow
  • 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
  • 28. Implementation characteristics are foremost: ▪ The implementation should be fast.
  • 29. Remember that there is no code faster than no code. Taligent's Guide to Designing Programs
  • 31. The fastest I/O is no I/O. Nils-Peter Nelson
  • 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
  • 34. Implementation characteristics are foremost: ▪ The implementation should be fast. ▪ It should be small.
  • 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
  • 64. Programming is a design activity. Jack W Reeves What Is Software Design?
  • 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"
  • 77. William Cook, "On Understanding Data Abstraction, Revisited"
  • 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