Sign in or Join FriendFeed
FriendFeed is the easiest way to share online. Learn more »
Paul Buchheit
The Master, The Expert, The Programmer - http://zedshaw.com/essays...
"What I notice is that my peers are progressing to more and more complicated and convoluted designs. They are impressed with the flashiest APIs, the biggest buzzwords, and the most intricate of useless features. They are more than happy to write endless unit tests to test their endless refactoring all the while claiming that they follow XP’s “the simplest thing that works” mantra. I’ve actually seen a guy take a single class that did nothing more than encapsulate the addition of two strings, and somehow “refactor” it to be four classes and two interfaces. How is this improving things? How can more somehow equal simpler? This should never be the case. These are the actions of an expert. These experts are very smart, capable, and skilled, but they are too busy impressing everyone to realize that their actions are only making things worse for themselves. In the end all of their impressive designs are doing nothing but making more work for themselves and everyone around them. It’s as if their work is only designed for getting them their next job, rather than keeping them in their current one. I used to be this way. I used to love complicated designs and read everything I could about complicated technologies. But as I get more experienced and “older” as a programmer I find complex things just annoying. They aren’t a mental challenge to understand anymore, they are just irritating. I’ll pick apart the flashy crap, boil down the technology to its essence and then come up with a much simpler design for the task at hand almost every time. What worries me though is how the experts react to my simplified designs. Typically they’ll say that what I’ve written is not “following best practices” or “isn’t well designed.” They’ll propose these endlessly complex designs with endlessly imagined failure scenarios, and not realize that what they are doing will be a nightmare to maintain. The experts will then saunter off to implement their Flaming Tower of Babel without any comments,... more... - Paul Buchheit from Bookmarklet
This applies to experts in any field. - WoH: Professor MOTHRA
It takes smart people to make complicated things simple. - imabonehead
Is it possible he's talking about Java programmers? - Gabe
i really liked this post (it resonated with me) until the end, at which point i felt alienated. - Neha Narula
What alienated you, Neha? To me, it seemed valid enough but a bit overwrought and trite. I know plenty of experienced, skilled working programmers who value just-get-it-done simplicity -- the "professional master" doesn't seem that elusive. - ⓞnor from Android
I'm a big fan of keeping it simple, but some problems do require a thorough approach. - Andrew C (✓)
"In contrast there are masters in the martial arts who learned their art as a means of survival and became masters in a realistic and hostile environment. We don't have anyone like this in the programming profession, " ... what about Carmack and Abrash & co? - Andrew C (✓)
BTW, I dunno if this is what put Neha off, but it almost sounds like Shaw wants to deny the reality of a nice O(n log n) solution beating out an O(n^2) solution (assuming small k, whatever) on a problem of decent size. - Andrew C (✓)
I mean, the stories of the martial arts masters may involve simple-looking moves, but they are also (in the stories) _perfectly_ executed, the product of careful observation of one's opponent and expert timing and precise angles. You might be able to pare down a simple linked list to the bare essentials, but I don't think it's quite analogous to not using a more complex structure _where appropriate_. - Andrew C (✓)
Nice... "The main thing I noticed about the experts I’ve encountered is they are into impressing you with their abilities. They are usually incredibly good, but their need for recognition gets in the way of mastery. Everything they do is an attempt to prove themselves and in order to do this they must perform like an actor on stage. There’s nothing wrong with this, and I don’t think the expert can become a master without going through this stage in life. At some point though, the expert becomes comfortable with themselves or fed up with impressing everyone and starts to look inward to the core of their art." - Ken Sheppardson
Andrew: Maybe the point was that an Expert would say "Aha! You need to keep these items in order, so a self-balancing tree is the perfect solution.", while a Master would say "Ah, but you never have more than 5 items, so a linked-list will always be faster!" - Gabe
this part, so much guy/son stuff! i dislike superfluous interfaces as much as anybody else: “There was this guy I worked with who once optimized a complicated red- black tree getting 300% performance boost. I was baffled and ask, 'How’d you do that? That’s impossible.’ To which he responded…” “'That’s my linked list my son.’” - Neha Narula
This is the kind of crap that gives java such a bad image. It used to be that people used it for what it was -- a simple OO language with garbage collection and a fast VM. Now you have architecture astronauts going off the deep end and making everyone assume the language has to be that way. I believe this disease stems from people who focus more on the process than on the product of their work. That's a recipe for disaster in my book. - Joel Webber from BuddyFeed
Neha: So lt's the fact that the language is male? - ⓞnor from Android
The impulse is good, but people have such different senses of what is simple, what has quality, what flows with the Tao. It's like beauty that way. What the story doesn't say is the 300% performance boost was on a limited test data set, in the real world it performed 3x worse and all the complexity had a reason that made sense once you "know." :-) - Todd Hoff
Complexity that's "there for a reason" is the worst kind. But who even talks about red-black trees vs linked lists? TreeMap vs LinkedList isn't the issue, interface swaddling and hyperfine dependency injection is the issue. Thing is, fights are decisively won, but code maintainability is much harder to measure, and even the importance of performance can be disputed. - ⓞnor from Android
I find it funny how the article, while praising simple approach, suffers from superfluity of language. - andrei_c
egnor: unnecessarily so. - Neha Narula
Neha, I thought the final "That's my linked list my son" was to make clear the parallel with the earlier quote "That was my foot my son" from Mestre Bimba. - Ruchira S. Datta
Todd: Imagine the situation where you are storing data for the US Census, and need to keep track of the people in a household by age. Since it's sorted and unbounded (there's no maximum number of children a family can have), you can easily think that a nice O(n lg n) algorithm that keeps a balanced binary tree is the right way to go. However, if you bother to look at the data, you'd see that the average household only has 2 or 3 people. You'd end up spending most of your time balancing the tree instead of accessing data. Furthermore, if you mostly need to know the data for the head of the household, it's always the first item in the list, rather than the left-most leaf node in a tree. Of course you'll run into 20-person families (like in 18 Kids and Counting), but they are so rare that they can be ignored. - Gabe
I wish I could "Like" this article again :) - scott willeke
might have created a "MEGA-liked" button:) - alex melnikov
It's a great analogy, but in reality, the martial arts stuff is mythology. Wing Chun proponents often talk about simplicity of the art, but they'd get their butts kicked in a sloppy street fight because invariably, most real world fights are messy, quickly go to the ground, and result in grappling and choking and eye gouging. Bullshido has lots of examples of this. The 80 year old guy taking out even an entry level UFC fighter is in the real of pure Hong Kong cinema, although I loved watching Mr Miyagi beat down the Cobra Kai. "Sweep the leg!" - Ray Cromwell