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

Wednesday, June 14, 2006
  Abstraction is a Bear


Peter Thomas has posted a very nice call stack showing how much of the run-time complexity of a typical J2EE operation is consumed by the framework and how little is consumed by the actual business logic. There's an awful lot of noise.

The comments are worth a read. I find the comments about how the JIT will rescue us from ourselves very interesting. I helped create an interesting product called JProbe, and we spent an awful lot of time thinking about server-side Java performance.

It is absolutely not true that inlining everything in sight makes the cost of indirection go away. It's true that it makes the cost of a method call go away. That's very expensive, and worth eliminating. [I'm curious: why does the Blub crowd appreciate the importance of inlining method calls to eliminate the cost of stack allocation, but dismiss tail call optimization as unimportant?]

However, indirection has another cost. When you have a reference to a reference to a reference to a reference to something you want, fetching the something at the end of the chain usually causes page faults. You have to do "pointer chasing." That is very expensive. Although that is not directly related to the number of framework elements in the call stack, I find that highly abstract frameworks seem to have a great deal of run time indirection built in, and that's also expensive.

Now, here's what I find very interesting: as seen in the comments, many developers shrug all this off as irrelevant given the network latency and relative sluggishness of the persistence engine. Given limited development time in many real-world projects, this may be an appropriate attitude to take.

It brings to mind a joke about two hikers:
Two hikers are surprised by an aggressive bear. One turns to run away. "What are you doing?" asks the other, "you can't outrun a bear!" The hiker carries on and sprints away. "I don't have to outrun the bear," are the hiker's only words, "I just have to out-run you."
(via Joey DaVilla. The post, that is. Don't blame him for the joke.)
 

Comments on “Abstraction is a Bear:
Blub programmers don't care about tail-call optimization because they write iterative -- not recursive -- functions.
 
Blub programmers don't care about tail-call optimization because they write iterative -- not recursive -- functions.

Yes, and thus the looks of bewilderment when they need to work with recursive data structures.
 
Weeding through huge stack traces to find bugs eats up a lot of my bandwidth.

CPU and memory are the least of my concern.
 




<< 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 /