- Learning the art of programming, like most other disciplines, consists of first learning the rules and then learning when to break them.
- — Joshua Bloch, 2008, Effective Java, 2nd Edition.
- The simple fact is that complexity will emerge somewhere, if not in the language definition, then in thousands of applications and libraries.
- — Bjarne Stroustrup, 2009, Masterminds of Programming.
- When writing computer programs, certain patterns arise over and over again. For example, programs must often loop through the elements of arrays, increment and decrement the values of variables, and perform multiway conditionals based on numeric or character values. Programming language designers typically acknowledge this by including special-purpose syntactic constructs that handle the most common patterns. C, for instance, provides multiple looping constructs, multiple conditional constructs, and multiple constructs for incrementing and otherwise updating the value of a variable.
- Some patterns are less common but may occur frequently in a certain class of programs, or perhaps just within a single program. These patterns may not even be anticipated by a language’s designers, who in any case would typically choose not to incorporate syntactic constructs to handle such patterns in the language core.
- Yet, recognizing that such patterns do arise and that special-purpose syntactic constructs can make programs both simpler and easier to read, language designers sometimes include a mechanism for syntactic abstraction, such as C’s preprocessor macros or Common Lisp macros.
- — R. Kent Dybvig, 2007, Syntactic Abstraction: The syntax-case Expander, in Beautiful Code.
Other Good Reads:
On Being Sufficiently Smart http://prog21.dadgum.com/40.html
Why Your Programming Language Is “Too Academic” http://enfranchisedmind.com/blog/posts/too-academic-languages/
“Text is Dead They Say”, aka parsing technologies from the ’60s are killing productivity. http://tratt.net/laurie/tech_articles/articles/text_is_dead_they_say
Growing a language, by Guy Steele. http://video.google.com/videoplay?docid=-8860158196198824415
Michael Feathers, Ending the Era of Patronizing Language Design http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design
- The fact that it took decades for the industry to arrive at something as useful as ActiveRecord in Rails is due primarily to the attitude that some language features [in this case, meta-programming] are just too powerful for everyone to use.
Where Tcl and Tk Went Wrong http://journal.dedasys.com/2010/03/30/where-tcl-and-tk-went-wrong
A good post about code reviews in open source projects: http://mumak.net/stuff/your-code-sucks.html
Back to The Mother Programming Language.