raganwald
(This is a snapshot of my old weblog. New posts and selected republished essays can be found at raganwald.com.)

Tuesday, March 18, 2008
  Acid Tripping, Disneyland and Special Relativity


malcontent: …Lisp guys know all about monkeypatching and dynamism. Those crazy mofos write mind bending macros and morph the language in ways that can only be described as an acid trip inside the ‘it’s a small world’ ride in disneyland…

earthboundkid: Python is a language for pedants. That’s exactly why I like it. There’s (almost) always one “correct” way of doing something, and when you do it that way, you get that warm glow in your heart that we pedants get when we outsmart someone or something. When it’s like when you correct a teacher in class or find a grammar/spelling error in your opponent’s message board post. That’s why Python is “fun” for us.

For Ruby heads, the fun is in solving the problem in some crazy idiosyncratic way that makes sense to you but seems backwards to everyone else. See the insane andand thingamajig that Raganwald invented. That’s why Ruby includes an unless keyword, just in case. That’s why Ruby has _why.

So yeah, totally different communities for two remarkably similar languages. At that point, it becomes the narcissism of small differences.

malcontent: …If you think andand is insane, try to read some Paul Graham macros.
—An amusing exchange between malcontent and earthboundkid on ruby.reddit.com

You can decide for yourself whether bottom-up programming in Lisp is like either or both of an acid trip or a Disneyland ride. And I know a few Python programmers who seem to be able to enjoy programming without the epicaricacy of declaring that their colleagues are ‘wrong.’

Now when it comes to ‘Ruby Heads’… Well, that expression obviously need not be applied to every Ruby programmer. It implies someone who is immersed in the language, someone who reflects upon its use and who actively participates in its evolution. So there may be a kernel of truth in earthboundkid’s hyperbole.

Speaking for myself, I distinguish between andand’s interface and its implementation. With respect to its interface, I was attempting to create something that makes perfect sense to everyone. Sometimes the motivation is to get people to look at something and say “That looks odd… Let me think about it… Hmmm, that actually makes sense once I think about it.”

My own code is no Special Relativity, but for me that is one of the greatest theories ever invented: it doesn’t make you learn something entirely new unlike anything you’ve ever seen before: Instead, Special Relativity makes you rethink the consequences of the things you already know about inertia and the fact that measuring the speed of light always provides the same constant result.

That’s a big motivation for pushing programming languages and programming styles. Not so much to create something entirely new (“Look! The code flows from bottom to top and right to left!”), but to provoke us to understand the implications of the things we already know.
 

Comments on “Acid Tripping, Disneyland and Special Relativity:
I have found someone's feelings on "unless" reflect their mental flexibility (most of the time).

If you believe "unless" is useless, you demonstrate an almost computer-like rigidity in your mental process.


I personally use "unless" as a tail condition whenever the line would execute most of the time.

puts "still running" unless rare_condition
 
'unless' is a funny language feature in that it is so obviously redundant.

without knowing who did it first, i find it typically perl, also in the sense that it makes the code less clear.

where can i get my own mental flexibility meter? we have a ruby guy in the office and he's obsessed with his, says it was a price in ruby community bingo.
 




<< Home
Reg Braithwaite


Recent Writing
Homoiconic Technical Writing / raganwald.posterous.com

Books
What I‘ve Learned From Failure / Kestrels, Quirky Birds, and Hopeless Egocentricity

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

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 /