Programmers as Drivers on the Highway:Lisp / Ruby / Javascript / etc. vs. Java / C# / C++ / etc.
Preface:
Please read Programming Paradigms and Programmer Audiences for a more through explanation of the metaphor below.
Driving:
Freedom…..
- I know how fast I can safely drive and don’t need a speed limit to govern this.
- I should be able to make a u-turn on the highway if I need to.
- If there are no oncoming cars at a red light I should be able to drive through.
- When there is space to park right in front of my destination and its not marked as a parking space, parking lot spaces are truly inconvenient.
- Turn signals aren’t useful for someone who is paying attention.
- A driver’s license doesn’t actually help me drive any better.
- I’m aware of my car and don’t need to have it inspected constantly in order to know it running properly.
- Having tags on my car isn’t useful to me - if I commit a driving violation pull me over and I’ll give you that information.
I am clever enough and good enough to master all of these things.
Constraints…….
People are inconvenienced by them.
However,
- I feel safer knowing others have to obey the speed limit.
- I don’t want people making u-turns on the highway.
- People driving through red lights are accidents waiting to happen.
- Parking spaces don’t impose perfect order by any means, but the order they do impose is good enough to prevent parking congestions.
- Turn signals are reassuring because it seems like no one is paying attention.
- Having a drivers license makes certain things more uniform and less arbitrary.
- If people weren’t required to get their cars inspected the road would be a dangerous place.
- People feel accountable with tags on their cars, they are more likely to play by the rules and abide by their contracts.
I don’t feel people are clever enough and good enough to master all of these things without rules.
Programming:
Freedom………
- Rapid code generation and prototyping gets things up and running faster.
- Lambda functions make it possible to elegantly solve some otherwise difficult problems.
- If I know it is safe I should be able to do it …. period.
- I should be able to organize data and code any way I’d like, flexibility and true macros are a good thing.
- If I call a function it will see what I’m passing when it gets there - signature signaling is gratuitous.
- I don’t need formal class definitions….. I’m not sure what the point is.
- Compile time checking is pointless - run time checking does it all.
- Static typing enforces rules that would be enforced anyways.
I feel I am clever enough and good enough to master all of these things.
However,
Constraints…….
- So people create some truly terrifying prototype code.
- Some people find lambda functions difficult to grok.
- A lot of people will shoot themselves in the foot if handed a gun
- Programmers can create some truly obscure metalanguages, and given the flexibility create masterpieces in obfuscation
- When functions have explicit contracts they are more likely to at least try and follow them
- Formal class definitions make it easier for most people to understand what is going on.
- No matter how much you test you probably haven’t tested enough.
- Static typing makes people more aware of what the rules and contracts actually are.
How do I think I drive:
I’m streamlined, clever and carefree. I bend the rules when I can to get the most flexibility I can.
How do I really drive:
Sometimes those rules and regulations really save me. And I am extremely glad they are there for others. There are some idiots on the road.
SOLUTION:
Why won’t these idiots just get off the road (not going to happen).
If programmers aren’t up to the tricky stuff they should be coding (not going to happen).
REALITY:
Everyone obeys the rules but bends them when they can to get the flexibility they need.
Languages need to support multiple paradigms to truly be safe and useful.










