“PHP is a minor evil perpetrated and created by incompetent amateurs, whereas Perl is a great and insidious evil, perpetrated by skilled but perverted professionals.”
Christopher Alexander writing in his preface to Richard P. Gabriel's "Patterns of Software."
> In my life as an architect, I find that the single thing which
inhibits young professionals, new students most severely, is their
acceptance of standards that are too low. If I ask a student whether
her design is as good as Chartres, she often smiles tolerantly at me
as if to say, “Of course not, that isn’t what I am trying to
do. . . . I could never do that.”
> Then, I express my disagreement, and tell her: “That standard must
be our standard. If you are going to be a builder, no other standard
is worthwhile. That is what I expect of myself in my own buildings,
and it is what I expect of my students.” Gradually, I show the
students that they have a right to ask this of themselves, and must
ask this of themselves. Once that level of standard is in their minds,
they will be able to figure out, for themselves, how to do better, how
to make something that is as profound as that.
> Two things emanate from this changed standard. First, the work
becomes more fun. It is deeper, it never gets tiresome or boring,
because one can never really attain this standard. One’s work becomes
a lifelong work, and one keeps trying and trying. So it becomes very
fulfilling, to live in the light of a goal like this. But secondly,
it does change what people are trying to do. It takes away from them
the everyday, lower-level aspiration that is purely technical in
nature, (and which we have come to accept) and replaces it with
something deep, which will make a real difference to all of us that
inhabit the earth.
> I would like, in the spirit of Richard Gabriel’s searching
questions, to ask the same of the software people who read this
book. But at once I run into a problem. For a programmer, what is a
comparable goal? What is the Chartres of programming? What task is at
a high enough level to inspire people writing programs, to reach for
the stars? Can you write a computer program on the same level as
Fermat’s last theorem? Can you write a program which has the enabling
power of Dr. Johnson’s dictionary? Can you write a program which has
the productive power of Watt’s steam engine? Can you write a program
which overcomes the gulf between the technical culture of our
civilization, and which inserts itself into our human life as deeply
as Eliot’s poems of the wasteland or Virginia Woolf’s "The Waves"?
This is a quote by Niklaus Wirth, a Swiss computer scientist who has created many programming languages, most famously Pascal. It's a long quote, but I like it very much:
"Many people tend to look at programming styles and languages like religions: if you belong to one, you cannot belong to others. But this analogy is another fallacy. It is maintained for commercial reasons only. Object-oriented programming (OOP) solidly rests on the principles and concepts of traditional procedural programming (PP). OOP has not added a single novel concept, but it emphasizes two concepts much more strongly that was done with procedural programming.
The first such concept is that of the procedure bound to a composite variable called object. (The binding of the procedure is the justification for it being called a method). The means for this binding is the procedure variable (or record field), available in languages since the mid 1970s. The second concept is that of constructing a new data type (called subclass) by extending a given type (the superclass).
It is worthwhile to note that along with the OOP paradigm came an entirely new terminology with the purpose of mystifying the roots of OOP. Thus, whereas you used to be able to activate a procedure by calling it, one now sends a message to the method. A new type is no longer built by extending a given type, but by defining a subclass which inherits its superclass. An interesting phenomenon is that many people learned for the first time about the important notions of data type, of encapsulation, and (perhaps) of information hiding when introduced to OOP. This alone would have made the introduction to OOP worthwhile, even if one didn't actually make use of its essence later on.
Nevertheless, I consider OOP as an aspect of programming in the large; that is, as an aspect that logically follows programming in the small and requires sound knowledge of procedural programming. Static modularization is the first step towards OOP. It is much easier to understand and master than full OOP, it's sufficient in most cases for writing good software, and is sadly neglected in most common languages (with the exception of Ada).
In a way, OOP falls short of its promises. Our ultimate goal is extensible programming (EP). By this, we mean the construction of hierarchies of modules, each module adding new functionality to the system. EP implies that the addition of a module is possible without any change in the existing modules. They need not even be recompiled. New modules not only add new procedures, but - more importantly - also new (extended) data types. We have demonstrated the practicality and economy of this approach with the design of the Oberon System."
21 comments
[ 4.0 ms ] story [ 56.3 ms ] thread"Being POTUS must be like inheriting a 240 year old code base and being asked to fix it in 4 years while half your team tries to sandbag you."
source: https://twitter.com/gblache/status/784201528110448640
(Programming wasn't the original context; design in general was.)
— Jon Ribbens
> In my life as an architect, I find that the single thing which inhibits young professionals, new students most severely, is their acceptance of standards that are too low. If I ask a student whether her design is as good as Chartres, she often smiles tolerantly at me as if to say, “Of course not, that isn’t what I am trying to do. . . . I could never do that.”
> Then, I express my disagreement, and tell her: “That standard must be our standard. If you are going to be a builder, no other standard is worthwhile. That is what I expect of myself in my own buildings, and it is what I expect of my students.” Gradually, I show the students that they have a right to ask this of themselves, and must ask this of themselves. Once that level of standard is in their minds, they will be able to figure out, for themselves, how to do better, how to make something that is as profound as that.
> Two things emanate from this changed standard. First, the work becomes more fun. It is deeper, it never gets tiresome or boring, because one can never really attain this standard. One’s work becomes a lifelong work, and one keeps trying and trying. So it becomes very fulfilling, to live in the light of a goal like this. But secondly, it does change what people are trying to do. It takes away from them the everyday, lower-level aspiration that is purely technical in nature, (and which we have come to accept) and replaces it with something deep, which will make a real difference to all of us that inhabit the earth.
> I would like, in the spirit of Richard Gabriel’s searching questions, to ask the same of the software people who read this book. But at once I run into a problem. For a programmer, what is a comparable goal? What is the Chartres of programming? What task is at a high enough level to inspire people writing programs, to reach for the stars? Can you write a computer program on the same level as Fermat’s last theorem? Can you write a program which has the enabling power of Dr. Johnson’s dictionary? Can you write a program which has the productive power of Watt’s steam engine? Can you write a program which overcomes the gulf between the technical culture of our civilization, and which inserts itself into our human life as deeply as Eliot’s poems of the wasteland or Virginia Woolf’s "The Waves"?
Larry Wall
— (Mis)attributed to Edsger Dijkstra, 1970
I read this in a tweet: https://twitter.com/msafi/status/782383733525454848
"Many people tend to look at programming styles and languages like religions: if you belong to one, you cannot belong to others. But this analogy is another fallacy. It is maintained for commercial reasons only. Object-oriented programming (OOP) solidly rests on the principles and concepts of traditional procedural programming (PP). OOP has not added a single novel concept, but it emphasizes two concepts much more strongly that was done with procedural programming.
The first such concept is that of the procedure bound to a composite variable called object. (The binding of the procedure is the justification for it being called a method). The means for this binding is the procedure variable (or record field), available in languages since the mid 1970s. The second concept is that of constructing a new data type (called subclass) by extending a given type (the superclass).
It is worthwhile to note that along with the OOP paradigm came an entirely new terminology with the purpose of mystifying the roots of OOP. Thus, whereas you used to be able to activate a procedure by calling it, one now sends a message to the method. A new type is no longer built by extending a given type, but by defining a subclass which inherits its superclass. An interesting phenomenon is that many people learned for the first time about the important notions of data type, of encapsulation, and (perhaps) of information hiding when introduced to OOP. This alone would have made the introduction to OOP worthwhile, even if one didn't actually make use of its essence later on.
Nevertheless, I consider OOP as an aspect of programming in the large; that is, as an aspect that logically follows programming in the small and requires sound knowledge of procedural programming. Static modularization is the first step towards OOP. It is much easier to understand and master than full OOP, it's sufficient in most cases for writing good software, and is sadly neglected in most common languages (with the exception of Ada).
In a way, OOP falls short of its promises. Our ultimate goal is extensible programming (EP). By this, we mean the construction of hierarchies of modules, each module adding new functionality to the system. EP implies that the addition of a module is possible without any change in the existing modules. They need not even be recompiled. New modules not only add new procedures, but - more importantly - also new (extended) data types. We have demonstrated the practicality and economy of this approach with the design of the Oberon System."
Taken from: http://www.eptacom.net/pubblicazioni/pub_eng/wirth.html
Also, Garbage In, Garbage Out is pretty good.