{"id":795,"date":"2009-09-23T00:13:16","date_gmt":"2009-09-23T00:13:16","guid":{"rendered":"https:\/\/www.joelonsoftware.com\/?p=795"},"modified":"2009-09-23T00:13:16","modified_gmt":"2009-09-23T00:13:16","slug":"the-duct-tape-programmer","status":"publish","type":"post","link":"https:\/\/www.joelonsoftware.com\/2009\/09\/23\/the-duct-tape-programmer\/","title":{"rendered":"The Duct Tape Programmer"},"content":{"rendered":"<p>Jamie Zawinski is what I would call a duct-tape programmer. And I say that with a great deal of respect. He is the kind of programmer who is hard at work building the future, and making useful things so that people can do stuff. He is the guy you want on your team building go-carts, because he has two favorite tools: duct tape and WD-40. And he will wield them elegantly even as your go-cart is careening down the hill at a mile a minute. This will happen while other programmers are still at the starting line arguing over whether to use titanium or some kind of space-age composite material that Boeing is using in the 787 Dreamliner.<\/p>\n<p>When you are done, you might have a messy go-cart, but it\u2019ll sure as hell fly.<\/p>\n<p>I just read an interview with Jamie in the book <a href=\"http:\/\/www.amazon.com\/gp\/product\/1430219483?ie=UTF8&amp;tag=joelonsoftware&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1430219483\">Coders at Work<\/a><img loading=\"lazy\" decoding=\"async\" style=\"BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; MARGIN: 0px; BORDER-TOP: medium none; BORDER-RIGHT: medium none\" border=\"0\" alt=\"\" src=\"http:\/\/www.assoc-amazon.com\/e\/ir?t=joelonsoftware&amp;l=as2&amp;o=1&amp;a=1430219483\" width=\"1\" height=\"1\" \/>, by Peter Seibel. Go buy it now. It\u2019s a terrific set of interviews with some great programmers, including Peter Norvig, Guy Steele, and Donald Knuth. This book is so interesting I did 60 minutes on the treadmill yesterday instead of the usual 30 because I couldn\u2019t stop reading. Like I said, go buy it.<\/p>\n<p><span class=\"side\"><a href=\"https:\/\/i0.wp.com\/www.joelonsoftware.com\/wp-content\/uploads\/2009\/09\/23.jpg?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" class=\"sideimg\" alt=\"\" src=\"https:\/\/i0.wp.com\/www.joelonsoftware.com\/wp-content\/uploads\/2009\/09\/23-thumbnail.jpg?w=730&#038;ssl=1\" \/><\/a><\/span>Go! I\u2019ll wait. <\/p>\n<p>Here is why I like duct tape programmers. Sometimes, you\u2019re on a team, and you\u2019re busy banging out the code, and somebody comes up to your desk, coffee mug in hand, and starts rattling on about how if you use multi-threaded COM apartments, your app will be 34% sparklier, and it\u2019s not even that hard, because he\u2019s written a bunch of templates, and all you have to do is multiply-inherit from 17 of his templates, each taking an average of 4 arguments, and you barely even have to write the body of the function. It\u2019s just a gigantic list of multiple-inheritance from different classes and hey, presto, multi-apartment threaded COM. And your eyes are swimming, and you have no friggin\u2019 idea what this frigtard is talking about, but he just won\u2019t go away, and even if he <em>does<\/em> go away, he\u2019s just going back into his office to write more of his clever classes constructed entirely from multiple inheritance from templates, without a single implementation body at all, and it\u2019s going to crash like crazy and <em>you\u2019re<\/em> going to get paged at night to come in and try to figure it out because <em>he\u2019ll<\/em> be at some goddamn \u201cDesign Patterns\u201d meetup.<\/p>\n<p>And the duct-tape programmer is not afraid to say, \u201cmultiple inheritance sucks. Stop it. Just stop.\u201d <\/p>\n<p>You see, everybody else is too afraid of looking stupid because they just can\u2019t keep enough facts in their head at once to make multiple inheritance, or templates, or COM, or multithreading, or any of that stuff work. So they sheepishly go along with whatever faddish programming craziness has come down from the architecture astronauts who speak at conferences and write books and articles and are so much smarter than us that they don\u2019t realize that the stuff that they\u2019re promoting is too hard for us.<\/p>\n<p>Here\u2019s what Zawinski says about Netscape: \u201cIt was decisions like not using C++ and not using threads that made us ship the product on time.\u201d<\/p>\n<p>Later, he wrote an email client at Netscape, but the team that was responsible for actually displaying the message never shipped their component. \u201cThere was just this big blank rectangle in the middle of the window where we could only display plain text. They were being extremely academic about their project. They were trying to approach it from the DOM\/DTD side of things. \u2018Oh, well, what we need to do is add another abstraction layer here, and have a delegate for this delegate for this delegate. And eventually a character will show up on the screen.\u2019\u201d<\/p>\n<p>Peter asked Zawinski, \u201cOverengineering seems to be a pet peeve of yours.\u201d<\/p>\n<p><span class=\"side\"><a href=\"https:\/\/i0.wp.com\/www.joelonsoftware.com\/wp-content\/uploads\/2009\/09\/23bikes.jpg?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" class=\"sideimg\" alt=\"\" src=\"https:\/\/i0.wp.com\/www.joelonsoftware.com\/wp-content\/uploads\/2009\/09\/23bikes-thumbnail.jpg?w=730&#038;ssl=1\" \/><\/a><\/span>\u201cYeah,\u201d he says, \u201cAt the end of the day, ship the fucking thing! It\u2019s great to rewrite your code and make it cleaner and by the third time it\u2019ll actually be pretty. But that\u2019s not the point\u2014you\u2019re not here to write code; you\u2019re here to ship products.\u201d<\/p>\n<p>My hero.<\/p>\n<p>Zawinski didn\u2019t do many unit tests. They \u201csound great in principle. Given a leisurely development pace, that\u2019s certainly the way to go. But when you\u2019re looking at, \u2018We\u2019ve got to go from zero to done in six weeks,\u2019 well, I can\u2019t do that unless I cut something out. And what I\u2019m going to cut out is the stuff that\u2019s not absolutely critical. And unit tests are not critical. If there\u2019s no unit test the customer isn\u2019t going to complain about that.\u201d<\/p>\n<p>Remember, before you freak out, that Zawinski was at Netscape when they were changing the world. They thought that they only had a few months before someone else came along and ate their lunch. A lot of important code is like that.<\/p>\n<p>Duct tape programmers are pragmatic. Zawinski popularized Richard Gabriel\u2019s precept of <a href=\"http:\/\/www.jwz.org\/doc\/worse-is-better.html\">Worse is Better<\/a>. A 50%-good solution that people actually have solves more problems and survives longer than a 99% solution that nobody has because it\u2019s in your lab where you\u2019re endlessly polishing the damn thing. Shipping is a feature. A really important feature. Your product must have it.<\/p>\n<p>One principle duct tape programmers understand well is that any kind of coding technique that\u2019s even <em>slightly<\/em> complicated is going to doom your project. Duct tape programmers tend to avoid C++, templates, multiple inheritance, multithreading, COM, CORBA, and a host of other technologies that are all totally reasonable, when you think long and hard about them, but are, honestly, just a little bit too hard for the human brain. <\/p>\n<p>Sure, there\u2019s nothing <em>officially <\/em>wrong with trying to write multithreaded code in C++ on Windows using COM. But it\u2019s prone to disastrous bugs, the kind of bugs that only happen under very specific timing scenarios, because our brains are not, honestly, good enough to write this kind of code. Mediocre programmers are, frankly, defensive about this, and they don\u2019t want to admit that they\u2019re not able to write this super-complicated code, so they let the bullies on their team plow away with some godforsaken template architecture in C++ because otherwise they\u2019d have to admit that they just don\u2019t feel smart enough to use what would otherwise be a perfectly good programming technique FOR SPOCK. Duct tape programmers don\u2019t give a shit what you think about them. They stick to simple basic and easy to use tools and use the extra brainpower that these tools leave them to write more useful features for their customers.<\/p>\n<p>One thing you have to be careful about, though, is that duct tape programmers are the software world equivalent of pretty boys&#8230; those breathtakingly good-looking young men who can roll out of bed, without shaving, without combing their hair, and without brushing their teeth, and get on the subway in yesterday\u2019s dirty clothes and look beautiful, because that\u2019s who they are. You, my friend, cannot go out in public without combing your hair. It will frighten the children. Because you\u2019re just not that pretty. Duct tape programmers have to have a lot of talent to pull off this shtick. They have to be good enough programmers to ship code, and we\u2019ll forgive them if they never write a unit test, or if they xor the \u201cnext\u201d and \u201cprev\u201d pointers of their linked list into a single DWORD to save 32 bits, because they\u2019re pretty enough, and smart enough, to pull it off.<\/p>\n<p>Did you buy <a href=\"http:\/\/www.amazon.com\/gp\/product\/1430219483?ie=UTF8&amp;tag=joelonsoftware&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1430219483\">Coders at Work<\/a>&nbsp;yet? Go! This was just the <em>first chapter!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jamie Zawinski is what I would call a duct-tape programmer. And I say that with a great deal of respect. He is the kind of programmer who&hellip; <span class=\"read-more\"><a class=\"more-link\" href=\"https:\/\/www.joelonsoftware.com\/2009\/09\/23\/the-duct-tape-programmer\/\" rel=\"bookmark\">Read more <span class=\"screen-reader-text\">&#8220;The Duct Tape Programmer&#8221;<\/span><\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[10,2],"tags":[],"class_list":["post-795","post","type-post","status-publish","format-standard","hentry","category-new-developer","category-news"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p83KNI-cP","_links":{"self":[{"href":"https:\/\/www.joelonsoftware.com\/wp-json\/wp\/v2\/posts\/795","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.joelonsoftware.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.joelonsoftware.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.joelonsoftware.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.joelonsoftware.com\/wp-json\/wp\/v2\/comments?post=795"}],"version-history":[{"count":0,"href":"https:\/\/www.joelonsoftware.com\/wp-json\/wp\/v2\/posts\/795\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.joelonsoftware.com\/wp-json\/wp\/v2\/media?parent=795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.joelonsoftware.com\/wp-json\/wp\/v2\/categories?post=795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.joelonsoftware.com\/wp-json\/wp\/v2\/tags?post=795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}