11 ms·
The Master, The Expert, The Programmer
- dylanz 17y agoExcellent post! Zed, if you read this, what did you take away from Wing Tsung? I've studied many of the martial arts you listed, and, those are very accurate analogies IMHO. My Sifu used to describe Karate punches like a baseball bat, swinging down swiftly. Gung Fu punches were like a chain, with a big metal ball on the end, swinging smoothly and softly, with all the Qi concentrated on the strike. I liked that one. All I know is Wing Tsung is damn fast, and things happened before I knew it ;) I am too a lazy martial artist, and can proudly say that with my kids in my lap, and a beer in my hand. I swear I'm going to teach them someday, so, it will come back to me then. Round 2!
- zedshaw 17y agoWell, I had injured my shoulder years ago in a car accident, and for some reason many of the techniques in Wing Tsung irritated it and messed it up. I eventually had to quit and even still I can't really turn my right arm like I used to. So, I didn't get as much out of WT as I'd hoped. I would say that I learned quite a lot about soft-yet-powerful punching that can cause damage but take very little effort. I also think I learned about the idea of a punch and a block being the same thing, or that there just wasn't a need to have a difference between them.
- alexgartrell 17y agoDoes anyone else see the whole martial arts metaphor stretched beyond reason here? It's not as if anything in this essay was truly groundbreaking, but was kind of just more of the same stuff. Or maybe I'm just against any metaphor that leads to a stronger rationalization for the title "Ruby/Python/etc. Ninja"
- andrewcooke 17y agowhat he's saying is similar to cockburn's take on shu ha ri, and you might find that makes more sense - http://alistair.cockburn.us/Shu+Ha+Ri http://alistair.cockburn.us/Shu+Ha+Ri (i prefer it - i don't disagree with zed shaw's appeal for simplicity, but i think cockburn's approach shows that simplicity is only possible by passing through complexity)
- zedshaw 17y agoI'd say that concept is much more on becoming and expert. Actually, he reference "Novice To Expert" at the end of that which should be a good indicator. But, don't ask me what becoming a master looks like.
- hc 17y agosorry if this sounds overly combative, but is there any proof out there that this cockburn fellow actually can program his way out of a paper bag?
- andrewcooke 17y agoas far as i know, there's not. does that change the argument somehow? the article is more general than programming.
- hc 17y agoit would make me more willing to expend the effort and time to investigate his theories on programming methodology.
- zedshaw 17y agoYou didn't really read it did you? Your last sentence pretty much proves it.
- blasdel 17y agoBear with me on this, but perhaps he read it more closely than you wrote it! Do you not see how ripe your metaphor is for a superficial interpretation by the kind of impressionable readers that currently go around advertising for ninja coworkers? A master would have addressed that more directly in the essay: the 'frustrated expert' vignette is good, but should be expanded so that every affected ninja comes away with the realization that they are a moron. You can't leave any room for aspirational mastery. NONE.
- strait 17y agoI am ignorant, but not a moron, and aspirational mastery excites me. What is your solution?
- alexgartrell 17y agoI was referring to the "X as a martial art" metaphor in general. Not your piece in particular. I should have been more clear. This whole "Listen to how much Programming is like _____" thing is overdone. We're scientists, engineers, craftsmen, painters, artists, etc. and now we're also martial artists. I just don't understand why we can't be happy with being Computer Programmers. And I understand that a rational criticism of me saying this is "well obviously this guy isn't exploring the deeper meaning of what's said here," but why does there need to be a deeper meaning behind this all? It just seems so meta.
- jamesbritt 17y agoPeople learn by analogy. "I just don't understand why we can't be happy with being Computer Programmers." Because if you ask 5 people you'll get 8 different descriptions of what "Computer Programmer" means. Which is fine, because it leads to discussion, and that's where analogy and metaphor come in handy to explain a point of view.
- brown9-2 17y agoI think it's foolish to refrain from making an argument or analogy because others might misinterpret or misuse it.
- wallflower 17y agoProgramming is an art and a discipline like martial arts. Showing off, like Zed says, means you are still learning. I studied Tang Soo Do. My master was a sixth-degree black belt. Most non-karate practioners don't know that for each successive black-belt degree you must wait a corresponding number of years (e.g. to test for third-degree, three years after second degree). If you like cross-fit/intensity training/cardio, there is nothing like sparring (with protective pads) for two minute rounds. One of the most intense competitive moments I ever witnessed was a sparring match between a 40-something CEO and a 20-something natural athlete. I give a lot of credit to Zed Shaw for learning other martial arts disciplines, like languages, each are the same at the core but physically different enough that you have to study hard. The green belt is the weed-out period - to get there requires lots of training and lots of classes. If you make it to green belt, you can become a black belt. But, as my Master was fond of saying, the color of the belt does not matter - a belt is just something of external significance. Becoming better at martial arts, like programming, is all about focused practice, increasingly correct repetition and practice (with a big social aspect, a peer group who wants to get to black belt). I could jump pretty high and had good flying kicks. To the envy of others and pride of myself, I loved flying through the air and executing kicks. At a post-green belt test board break, I was so excited that I launched myself through the air at the two students holding the two boards. I jumped so high that I missed the boards and my height was such that I missed the CEO's face by mere inches. Almost certainly would have broken bones in his face, but didn't. So that's my SOB anecdote about showing off and not knowing how to control yourself properly. If you ever get a chance, go to a friend's black belt test. Depending on the discipline, it may be as short as a long morning or a whole day. A marathon of traditional forms, weapons work, and sparring and endurance. The best part is watching the higher-level belts test (by seniority, later) and the kids there with their eyes a mixture of respect and awe. Some parents, yes, treat karate classes as day care but no kid leaves karate class without learning more about personal responsibility. Not just karate, in other physically-demanding areas, you begin to push the mind harder. "A sound mind in a sound body". And pushing the mind harder is what makes us grow. It's a cliche but you can't understand the passion people feel for something until you try it for yourself. As the immortal Ken Kesey said - 'they may know where it is, but not what it is'. I love being part of subcultures (salsa dancing, karate, triathlon) that have only experience and a willingness to start/fail/learn as a barrier to entry. Sort of like what the News.YC community is encouraging me to finally start doing. To stop worrying about how good at iPhone/XHTML/mobile app development I may be and to just start putting it out there.
- camcaine 17y agoSo why doesn't Zed Shaw write a framework? That would be a real challenge for a guy like him surely.
- blasdel 17y agohttp://lamsonproject.org/ http://lamsonproject.org/
- mixmax 17y ago"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, or at least I haven’t met any." I think maybe Peter Norvig would qualify. http://en.wikipedia.org/wiki/Peter_Norvig http://en.wikipedia.org/wiki/Peter_Norvig
- btilly 17y agoThere are many people who I think qualify. Ken Thompson, Steve McConnell, Brian Fox, and Larry Wall would be just a few on my list.
- henning 17y agoWard Cunningham, Don Knuth (mentioned in the OP) and Linus Torvalds also qualify, as well, I think. Note that I'm not simply listing out random famous software people. I don't think Martin Fowler qualifies, for instance.
- btilly 17y agoThe OP brought up and specifically disqualified Don Knuth because he had freedom as an academic that working software developers don't. The example given was his ability to take off 3 years to work on TeX. By those criteria I consider Linus Torvalds likely to be disqualified as well since he made his reputation while using the freedom he had as a student. Ward Cunningham would be a good addition to the list.
- tjr 17y agoI wonder how Don Knuth would fare writing something like TeX under time constraints. I suspect that most programmers would prefer to have unlimited time to make things "perfect" rather than be under pressure; just because Knuth had the liberty to take that option doesn't mean he wouldn't do as well as (if not better than) anyone else on a restricted schedule.
- azanar 17y agoIn 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. Given a particular frame of mind, though, this is perfect. These complicated designs are about keeping their current jobs. They are making more work for themselves and those around them, and that is entirely the point. They aren't looking to their next job, they are looking to assure there will always be a next task. If they didn't create complexity that need to be constantly coralled, they might run the risk of the project being declared complete; yes, a risk. The problem is their frame of mind about their professon. If the project is completed, one of two things will come true: 1. They will be moved to a new project. 2. They will be dismissed from the company, and have to find a new company and a new project to join. So the second is really just a degenerate case of the first. They will be on a new project. There are a few reasons people would honestly be scared of this. They might assume that there is a small number of projects left, and they are all near-fully staffed. If they lose this current project, it may be the last project they ever find themselves on, because no one needs anything built anymore. If they find a project, they can't coast. With their current project, they are applying design and refactoring patterns they already learned to a system they already understand. A new project means they'll be faced with an unfamiliar architecture and code, and their usual ways of looking busy aren't going to work until they learn the new system well enough. It means they have to start thinking about what they are doing and start working hard again, and there are a lot of programmers -- and people in general -- who are really averse to being forced out of a routine process they can perform without thinking. A new project also means they might end up under competent leadership, who can tell when they are coasting, and will call them on it. This means, even if they learned the system well enough to know where to start blindly refactoring to patterns, they wouldn't get away with it, because the people supervising them would know they are just wasting time. Again, a lot of people won't like this. Finally, a new project means someone might expose themselves as completely incompetent and faking it well the whole time. They picked up enough bits and pieces to sound intelligent to those who don't know how or what to judge, but just for the project they were on. The specialized jargon is now irrelevant, and the general understanding of concepts isn't there. Even in my short journey so far as a developer, I have run into multiple examples of each of these, and they annoy me to no end. The ivory tower systems Zed is railing on about are just a symptom. The cause is people terrified of being forced into unfamiliar territory, and the risks involved. The other part of the problem is that the people who judge the programmers are not listening to the masters -- as much as we have masters-- even when the masters kick the experts' ass. Perhaps this is part of our profession needing to grow up, but right now programmers are judged in most places by people who would be audience members at a martial arts tournament. They have no idea about the technical skill of what they are seeing, and so they can only judge things on aesthetics. To them, the experts look talented, because they are doing a tremendous amount of moving around, acting threatening, and expending energy; the masters look lazy and unskilled by comparison. It almost looks like the master has to be cheating when the expert gets slammed to the mat. I wonder if the audience to a master programmer might perceive the same thing. A question which I am still uncertain of: is this reliance primarily on the aesthetic instinctual, or is it learned behavior? It seems to be responsible for a number of extremely poor judgments made, even in very recent history, and I think it is worth asking if such a reliance is inevitable. I'm not dismissing aesthetics entirely, just wondering why we seem to have it weighted wrong.
- btilly 17y agoI've never been a fan of extended analogies as a way of explaining things. At some point you need to understand the subject for itself, and not in terms of something else. That said I strongly second his point about the value of keeping designs simple. And I have an interesting piece of evidence in support of it. I just read http://www.amazon.com/gp/product/0321117425?ie=UTF8&tag=randomobser0b-20&linkCode=as2 http://www.amazon.com/gp/product/0321117425?ie=UTF8&tag=... and one of the "facts" that Robert Glass brings up is that a 25% increase in requirements results in a 100% increase in software complexity. I put "facts" in quotes because the claim is only supported by one study and I have lots of questions around how one would define key terms like "software complexity". However based on experience I am inclined towards believing that something like this is true. If you further believe (as I do), that the source of the requirements doesn't matter, then adding internal requirements about design is going to result in complications. As a result I am inclined towards simple, clean designs. I gladly introduce polymorphism, abstraction layers, and so on fairly frequently. But only if I see a concrete benefit from doing so. If I am not convinced that this piece of abstraction produces a net win within the context of this software solution, I don't do it. (For the record I am not a software master by any means. In Zed Shaw's terms I'd be an expert, although early mentoring with the right person kept me from ever suffering from the love of complexity that he pastes all experts with.)
- andreyf 17y agoWhile otherwise a great article, the few CS metaphors are a huge letdown. Linked lists and RB trees are very different beasts, each appropriate for its own context. A better example of an artistic part of programming is well-placed unit tests - being able to see where a unit test will be useful in catching bugs, and where it'll sit idly passing for the rest of eternity, is an intuition of mastery.
- loup-vaillant 17y ago"Linked lists and RB trees are very different beasts, each appropriate for its own context." Precisely. And I don't think this is a metaphor. I understood that changing the data structure triples the speed of a particular piece of program. I bet Zed Shaw omit the "particular" part because it was obvious. Apparently, it wasn't.
- andreyf 17y agoSorry, the metaphor was from R/B trees to flamboyantly unnecessary flip kicks - but R/B trees are quite necessary a lot of times, whereas showoff flip kicks exist purely for showing off. There's more than enough fluff used in software engineering with the sole purpose of being fancy ("enterprise software patterns" come to mind), but R/B trees are not part of it.
- loup-vaillant 17y agoI agree
- strait 17y agoWell, that was entertaining. Now, back in the realistic and hostile environment of the professional world, I'm thinking up an equally convincing tale of the "master" programmer who, despite much efficiency and cleverness, can't shake the depressing realization that his industry work is about as eventful as that of a janitor or plumber.
- masomenos 17y agoso, very eventful?
- aroon 17y ago"if you can’t get fired for missing a deadline then you aren’t a real programmer working in the real world" I thought the essay was pretty good until I hit that line. I feel like mastering something kind of requires rising above the daily grind. In order to master programming wouldn't one have to be a programmer simply by existence? I, for one, don't consider myself a programmer because I write code for Apple or because I have a degree that says I'm a certified computer scientist. I'm a programmer because I write programs. Did that line bother anyone else?
- blasdel 17y agoYes. If you can get fired for missing a deadline in non-egregious situations, you're working in the real world alright, but as a replaceable cog -- you're a typist, not a programmer. Firing you means that they're declaring their investment in your thoughts a total loss, implying that they weren't paying you to think (or that you didn't do any of the thinking you were paid for!).
- nostrademons 17y agoEntrepreneurs have deadlines too. I interpreted that sentence to mean "If you don't have real-world constraints on your system, you aren't a real programmer." Which I think is true. It's easy to build the "perfect" academic system, exploring every detail until you've got things just right. Problem is, reality tends to bite you in areas that you don't expect (as in, real programmers have real performance/deadline/usability constraints), and those often aren't exposed in an academic paper.
- Retric 17y agoI suspect most of that relates to incompetence. I rarely see unexpected performance issues bite me in the ass. Premature optimization may be the root of all evil, but having a long conversation with the back end database is FAIL. Most Entrepreneurs are way to young to have the depth of experience to really understand what they are doing. But, they are judged on a separate scale. Twitter design is probably evolving to a reasonable design, and Facebook might be fairly elegant at this point, yet they both started as crap. These entrepreneurs had deadlines but they where not trying to send someone to the moon with the computing power of a watch. Business is about the last hack standing and not creating art, but evolution also works.
- jacoblyles 17y agoI thought MMA had killed all the traditional Martial Arts. I'm not aware of evidence that any martial art is effective outside of this list: Muay Thai, Wrestling, Boxing, Jiu Jitsu, and Judo. If they are effective, why aren't there any good MMA fighters using them? The Kung Fu guy got brutally beat down at UFC 1. Now, you can argue that all the rules of MMA make some of the death-blow containing martial arts less effective. But there were few rules for the first dozen or so UFCs when Royce Gracie was choking everybody out with his Jiu Jitsu. Yes I am aware of Lyoto Machida. But one good fighter does not mean that karate is an effective style, and most people who watched it thought the Muay Thai fighter Mauricio Rua won that match. Wearing white suits, dancing around and making noises turns out not to be very good training when it comes down to the business of punching people in the face. I wouldn't be too intimidated facing some traditional "master" across the ring. And if you disagree with me, there are people who will pay you plenty of money to prove that your pet style works in front of a paying audience.
- blasdel 17y agoNot only is that completely unrelated to the article, you're also making a broad category error: karatekas ground themselves in the business of disciprine, not punching people in the face.
- jacoblyles 17y agoIf it's not designed for punching people in the face, then it should drop the "martial" from its description and simply describe itself as an "art", like dancing.
- elblanco 17y agoLearning to shoot a gun or a bow and arrow or ride a horse is also a martial art.
- jacoblyles 17y agoSure, those are martial arts. But karate pretends to be a martial art for unarmed combat. If it is not useful for unarmed combat, then it is not a martial art.
- deleted 17y ago[deleted]
- grandalf 17y agoVery insightful piece. It would be great for open source if writing unnecessarily complex code went out of vogue.
- davidmathers 17y agoI 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. Me too. I think we're somewhat common. And yet, the analogy isn't working for me. Because there are (too few) people like chneukirchen. I don't know how to fit him into your analogy. How old was he when he created Rack? Too young to be a "master" I think. And yet there it is, a masterpiece of simplicity. In his most recent blog entry wycats said: "...the fuller emphasis on Rack is a strong improvement from the Merb approach." So many smart people worked on both rails and merb, and now Rails 3 is being written around this simple idea resulting in a strong improvement. The key here is just that simplicity is an important value that most of us take too long to acquire. But, clearly, it doesn't have to be that way. I wonder how Christian got it so young.
- loup-vaillant 17y agoYou can get the value of simplicity quite young. 2 years ago, with almost no "real world" programming experience, at 25, I already got it. I am no master, mind you. I just had the incredible luck of being taught several styles of programming. My insight about simplicity was then inevitable. Everyone knows that other things being equal, a simpler program is better. What is less known is that, almost every time, simpler means shorter and the other things are equal (at least from a technical perspective). I still face disbelief when I say this.
- illumen 17y agoRack was built on the design of wsgi, from the python world. So if you didn't know that a lot of the design was copied, I don't think you can give him all that much credit for it as maybe you are. In the README Thanks To section: '* The WSGI team for the well-done and documented work they've done and Rack builds up on.'
- radu_floricica 17y agoThis is a pretty new trend... maybe 10 years? When I was in high-school (before 2000) my heroes were the likes of Linus Torvalds or Mel (http://www.pbm.com/~lindahl/mel.html http://www.pbm.com/~lindahl/mel.html). I don't think I ever felt a lack of masters. It could be that things are fuzzier now... more blogs, forums, lots of people writing about stuff they're at best intermediate in. But this doesn't mean the really good guys aren't there any more. For a healthy dose of awe and humility you can take a look here: http://groups.google.com/group/clojure http://groups.google.com/group/clojure
- sdb 17y agoBefore I studied the art, a punch was just like a punch, a kick just like a kick. After I studied the art, a punch is no longer a punch, a kick is no longer a kick. Now that I understand the art, a punch is just like a punch, a kick is just like a kick. - Bruce Lee
- geocar 17y agoIt's from an old (and famous) Zen saying: "Before I studied Zen, mountains were mountains, and water was water. After studying Zen for some time, mountains were no longer mountains, and water was no longer water. But now, after studying Zen longer, mountains are just mountains, and water is just water."
- samaparicio 17y agoFrom my blog post response: Comparing programming to an art form, and the process of maturing as a developer to the process of becoming a master, comes from the mindset of somebody who is trying to create something intrinsically beautiful. And while beauty is a powerful concept, most software projects are trying to make something functional. More over here -- http://blog.aparicio.org/2009/12/28/the-master-the-expert-the-programmer/ http://blog.aparicio.org/2009/12/28/the-master-the-expert-th...
- GrandMasterBirt 17y agoOk, heres an example of a master: Were all talking about how to optimize our lucene queries and cache intelligently and so on, because the memory overhead is getting big (mind you were practically replacing our database with lucene). After about 30 minutes of hypotheticals and complexity, this one guy (previously sitting there listening) just says "Why not run java 64 bit and set the max memory to 20 gigs or whatever is appropriate, let the operating system page for you". KARATE CHOP! I think if we could, we would re-create the scene from "The Mask" where his mouth just drops to the table.
- jbooth 17y agoBetter karate chop: Do the above and shell out 500 bucks for another 16G RAM in the server while you're at it. That way you won't wind up navigating an object graph that's been paged to disk (Lucene terms are all loaded into memory while the index is open, could be 20,000 terms or closer to a million if you have a whole bunch of unique IDs)
- GrandMasterBirt 17y agoExactly. The point was, the deadline was coming up in a few weeks. We had work up to our eyeballs with everything else, if we could punt this issue till it really REALLY becomes a problem, we should. And we did. And it hasn't been a problem. It was a commercial product, but honestly the people who ran this would have no problem paying an extra 2 grand or so for ram for major performance gains (remember this aint your standard sdram).
- docmach 17y agoThat seems like it could easily end up being very slow. The OS doesn't know what data is going to be needed and it could page out the wrong data. It's probably worth trying, but it doesn't seem like a masterful solution.
- GrandMasterBirt 17y agoOf course it was. Because that was better than what we wanted to do, simpler, no development time (cheap , met our deadline), worked well enough. Sure you can get a bit more bang for your buck making a catered-for swapping algorithm, but in the end it does not matter.
- mark_l_watson 17y agoZed made some good points. I also like simplicity in designs (and make things more complicated by refactoring if the need ever arises). That is one thing I like about Ruby: it is so simple and concise to do things that are not simle and concise in other languages - this makes code look simple and thus easy to read.