TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

The Master, The Expert, The Programmer

195 pointsby azharcsover 15 years ago

18 comments

mixmaxover 15 years ago
<i>"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><p>I think maybe Peter Norvig would qualify.<p><a href="http://en.wikipedia.org/wiki/Peter_Norvig" rel="nofollow">http://en.wikipedia.org/wiki/Peter_Norvig</a>
评论 #1018019 未加载
sdbover 15 years ago
Before 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
评论 #1018880 未加载
dylanzover 15 years ago
Excellent post!<p>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 ;)<p>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!
评论 #1017966 未加载
jacoblylesover 15 years ago
I 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.<p>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.<p>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.<p>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.
评论 #1018297 未加载
评论 #1018181 未加载
评论 #1018700 未加载
评论 #1018772 未加载
评论 #1018443 未加载
评论 #1018172 未加载
aroonover 15 years ago
"if you can’t get fired for missing a deadline then you aren’t a real programmer working in the real world"<p>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.<p>Did that line bother anyone else?
评论 #1018203 未加载
评论 #1018448 未加载
straitover 15 years ago
Well, 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.
评论 #1019280 未加载
btillyover 15 years ago
I'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.<p>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.<p>I just read <a href="http://www.amazon.com/gp/product/0321117425?ie=UTF8&#38;tag=randomobser0b-20&#38;linkCode=as2" rel="nofollow">http://www.amazon.com/gp/product/0321117425?ie=UTF8&#38;tag=...</a> 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.<p>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.<p>As a result I am inclined towards simple, clean designs. I gladly introduce polymorphism, abstraction layers, and so on fairly frequently. But <i>only</i> 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.<p>(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.)
alexgartrellover 15 years ago
Does 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.<p>Or maybe I'm just against any metaphor that leads to a stronger rationalization for the title "Ruby/Python/etc. Ninja"
评论 #1017887 未加载
评论 #1017967 未加载
评论 #1018659 未加载
wallflowerover 15 years ago
Programming is an art and a discipline like martial arts. Showing off, like Zed says, means you are still learning.<p>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).<p>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.<p>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.<p>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 <i>what</i> 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.
评论 #1017926 未加载
评论 #1018492 未加载
samaparicioover 15 years ago
From my blog post response:<p>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.<p>And while beauty is a powerful concept, most software projects are trying to make something functional.<p>More over here -- <a href="http://blog.aparicio.org/2009/12/28/the-master-the-expert-the-programmer/" rel="nofollow">http://blog.aparicio.org/2009/12/28/the-master-the-expert-th...</a>
davidmathersover 15 years ago
<i>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.</i><p>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.<p>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.<p>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.
评论 #1018554 未加载
评论 #1018421 未加载
radu_floricicaover 15 years ago
This 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 (<a href="http://www.pbm.com/~lindahl/mel.html" rel="nofollow">http://www.pbm.com/~lindahl/mel.html</a>). I don't think I ever felt a lack of masters.<p>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: <a href="http://groups.google.com/group/clojure" rel="nofollow">http://groups.google.com/group/clojure</a>
azanarover 15 years ago
<i>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><p>Given a particular frame of mind, though, this is perfect.<p>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.<p>The problem is their frame of mind about their professon. If the project is completed, one of two things will come true:<p>1. They will be moved to a new project.<p>2. They will be dismissed from the company, and have to find a new company and a new project to join.<p>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.<p>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.<p>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 <i>really</i> averse to being forced out of a routine process they can perform without thinking.<p>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.<p>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.<p>Even in my short journey so far as a developer, I have run into multiple examples of <i>each</i> 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.<p>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 <i>only</i> 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.<p>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.
andreyfover 15 years ago
While 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.
评论 #1019435 未加载
mark_l_watsonover 15 years ago
Zed made some good points. I also like simplicity in designs (and make things more complicated by refactoring <i>if</i> 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.
grandalfover 15 years ago
Very insightful piece. It would be great for open source if writing unnecessarily complex code went out of vogue.
GrandMasterBirtover 15 years ago
Ok, heres an example of a master:<p>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).<p>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.
评论 #1019007 未加载
评论 #1019454 未加载
camcaineover 15 years ago
So why doesn't Zed Shaw write a framework? That would be a real challenge for a guy like him surely.
评论 #1018162 未加载