raganwald
Wednesday, October 27, 2004
  The Bilious Take on the Turing Tar-Pit
Hani's bilious rant on the tar-pit:
"I think the reason that webmonkeys are so desperate to feel they're doing something grand is rather simple. Their work is simply....too....boring. All these frameworks and web doodahs are more often than not simply the product of a hopelessly bored mind desperate to inject some sense of meaning into their daily grind. All the business asked them to do was product an app that solved a specific need. Nobody told them to go invent a framework for it, or to maximise reusability, or to componentise the moving bits, or to use TDD, or to opensource anything.

"Yet, all these things happen. The poor developer's task is so menial and trivial that he is forced to go out of his way to justify his sad pathetic little existence. What better way than to open source it and seek approval from other equally sad pathetic individuals? What better way than to inject the project with what is perceived to be cutting edge, intelligent, and exciting?"
Read more in "Is good code relevant?" [link].
 

Wednesday, October 20, 2004
  Maxine on "Being Great"
"I used to think that all eyes were on me, just waiting for me to be great!... I thought everyone really cared! I thought it all mattered!

"But... ...what if I wasn't great?"
...Read the rest in the comic strip Maxine [link].

Labels:

 

Tuesday, October 12, 2004
  Beware of the Turing Tar-Pit

in which everything is possible but nothing of interest is easy.
Alan J. Perlis


What is the Turing tar-pit? It’s the place where a program has become so powerful, so general, that the effort to configure it to solve a specific problem matches or exceeds the effort to start over and write a program that solves the specific problem.

I suffer from a tendancy to go swimming in tar. I start out trying to solve a specific problem. I become frustrated with the obvious deficiencies of the tools, and before I know it I’m sketching out ideas for platforms, frameworks, and architectures to solve a whole class of similar problems.

(This is especially dangerous for programming language designers. There’s an irresistable urge to reduce a language to the smallest, most elegant core of axioms.)

I think a programming language should be mostly defined in itself. A language spec should be divided into two parts, a small core of operators that play the role of axioms, and the rest of the language, which, like theorems, are defined in terms of the axioms.
Paul Graham

The danger of the tar-pit is that instead of developing a solution to a problem, you develop a tool for solving problems. And invariably, the wider the class of problems the tool can solve, the less useful it is for solving any one problem.

In my own case, I often find myself engaging in “bottom-up programming,” trying to invent the perfect programming language for expressing the program I’m trying to write. When I find myself working on language syntaxes, I realize I’m mired in tar and I need to reset.

The Turing tar-pit’s lure is that it is situated right in the centre of some of the most attractive real-estate in your imagination. Tools that solve whole classes of problems in generic ways offer the potential for vast improvements is productivity. Consider VisiCalc: this application actually turned its users into programmers!

In programming, everything we do is a special case of something more general—and often we know it too quickly.
Alan J. Perlis

The very exercise of trying to understand the relationship between the problem you’re trying to solve and the general class of problems can help you understand your problem in more detail. And you can get some wonderful Aha! moments.

So I believe that to do really great work, you must be prepared to skirt very close to the edge of the tar-pit. Hopefully you have an iron will and can avoid disaster with ease.

In my own case, I have little will and I’m further hampered by an enormous curiosity. Out of self defence, I’ve developed some heuristics for exploring the edges of the tar-pit and mining generalization for insights:

  1. Keep Alan Kay’s words in mind: “We aim to make simple things simple and complex things possible.” When solving the general problem makes complex things possible, that’s good. But it shouldn’t be at the expense of making simple things simple.
  2. Mentally retrace your steps to the safe safe ground of the problem domain on a frequent basis. In my own case, I work with fairly disposable user stories. The important thing I do is return to them every once in a while and ask “how will this marvellous widget make any of these things easy?”
  3. Eat your own dog food/go round trip on an infrequent basis. Okay, you’re convinced you need to run your application inside a special purpose virtual machine. Fine. Pick one small operation and make it work. Program for your virtual machine, end to end. Don’t skip any of the steps. It’s better to go thin (few functions) and deep (use the entire stack) than to go wide and shallow. If your VM is a pain in the rump, you’ve discovered something. (This is a cornerstone of Ken Schwaber’s Scrum methodology).
  4. Don’t beat yourself up if you get mired. If you never produce anything more than an esoteric programming language or tool, you’ll still have gone where strong minds fear to tread. Okay, your started out trying to solve problem A and you found yourself solving a general class of problems C that doesn’t even include A. Once again, Alan Kay: “A successful technology creates problems that only it can solve.” Don’t be so sure you haven’t created something really important. Finish it up, you won’t know what you have until you start using it.

Are you quite sure that all those bells and whistles, all those wonderful facilities of your so called powerful programming languages, belong to the solution set rather than the problem set?

Edsger Dijkstra

Amen.

Labels:

 

Monday, October 04, 2004
  Software Development Bookmarks
I'm trying del.icio.us for bookmarking articles about software development.

I'll continue to post articles on my weblog when I want to editorialize about something I've read, but when I find a neat article to read, most of the time I'll simply post it to del.icio.us.

You can subscribe to my bookmarks using RSS (sorry, there was a mistake in the link earlier. It has been fixed!). You'll get a fresh update whenever I find an interesting article!

Update #2: I like del.icio.us so much that I want to try storing all of my bookmarks on it. I've adjusted the feed so that if you subscribe using the RSS link, you'll only get the ones I think are relevant to creating truly great software. If you have a lot of time on your hands, you can follow the link to del.icio.us and you can find out what else I'm reading.
 

Reg Braithwaite


Recent Writing
Homoiconic

Share
rewrite_rails / andand / unfold.rb / string_to_proc.rb / dsl_and_let.rb / comprehension.rb / lazy_lists.rb

Beauty
IS-STRICTLY-EQUIVALENT-TO-A / Spaghetti-Western Coding / Golf is a good program spoiled / Programming conventions as signals / Not all functions should be object methods

The Not So Big Software Design / Writing programs for people to read / Why Why Functional Programming Matters Matters / But Y would I want to do a thing like this?

Work
The single most important thing you must do to improve your programming career / The Naïve Approach to Hiring People / No Disrespect / Take control of your interview / Three tips for getting a job through a recruiter / My favourite interview question

Buy Raganwald a Coffee
If you enjoy reading my weblog, please consider buying me a Darkhorse Double Espresso, for just $3.15 Thank you!

Management
Exception Handling in Software Development / What if powerful languages and idioms only work for small teams? / Bricks / Which theory fits the evidence? / Still failing, still learning / What I’ve learned from failure

Notation
The unary ampersand in Ruby / (1..100).inject(&:+) / The challenge of teaching yourself a programming language / The significance of the meta-circular interpreter / Block-Structured Javascript / Haskell, Ruby and Infinity / Closures and Higher-Order Functions

Opinion
Why Apple is more expensive than Amazon / Why we are the biggest obstacles to our own growth / Is software the documentation of business process mistakes? / We have lost control of the apparatus / What I’ve Learned From Sales I, II, III

Whimsey
The Narcissism of Small Code Differences / Billy Martin’s Technique for Managing his Manager / Three stories about The Tao / Programming Language Stories / Why You Need a Degree to Work For BigCo

History
06/04 / 07/04 / 08/04 / 09/04 / 10/04 / 11/04 / 12/04 / 01/05 / 02/05 / 03/05 / 04/05 / 06/05 / 07/05 / 08/05 / 09/05 / 10/05 / 11/05 / 01/06 / 02/06 / 03/06 / 04/06 / 05/06 / 06/06 / 07/06 / 08/06 / 09/06 / 10/06 / 11/06 / 12/06 / 01/07 / 02/07 / 03/07 / 04/07 / 05/07 / 06/07 / 07/07 / 08/07 / 09/07 / 10/07 / 11/07 / 12/07 / 01/08 / 02/08 / 03/08 / 04/08 / 05/08 / 06/08 / 07/08 /