Makers Of Beautiful Things
From Paul Graham's delightful essay Hackers and Painters:
A programming language is for thinking of programs, not for expressing programs you've already thought of. It should be a pencil, not a pen. Static typing would be a fine idea if people actually did write programs the way they taught me to in college. But that's not how any of the hackers I know write programs. We need a language that lets us scribble and smudge and smear, not a language where you have to sit with a teacup of types balanced on your knee and make polite conversation with a strict old aunt of a compiler.
No doubt you'll find other favorite quotes in his essay. It touches on many things that have been buzzing about my brain without a spot to land. This particular quote stuck with me because lately I'm doing lots of scribbling and Ruby is quickly becoming the queen bee in my strict old aunt's bonnet.
I don't think I've ever sat down and wrote a program I'd already thought of. I usually have an idea of what I want the program to do, but I generally don't know what the code will look like until my fingers are on the keyboard. So maybe I'm always scribbling, even when I think I'm not.
Test-driven development gives me the courage to challenge the false security of static typing, despite every instinct telling me that static typing is my friend. Too many years of Ada, C++, and Java will do that to you. Bruce Eckel sums it up quite well:
In fact, what we need is Strong testing, not strong typing.
Update: A friend reminded me of the important distinction between strong and static typing. I'd agree with Bruce's quote if it were reworded to read:
In fact, what we need is Strong testing, not static typing.
Not the same play on words, but more accurate. Both Java and Ruby are strongly typed. Java checks types at compile time; Ruby checks types at runtime.