<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Meticulous Geek &#187; fuckups</title>
	<atom:link href="http://themeticulousgeek.com/tag/fuckups/feed/" rel="self" type="application/rss+xml" />
	<link>http://themeticulousgeek.com</link>
	<description>&#34;When you reach that upper level, your mind, body and soul will be one. It&#039;s a sacrifice. It takes hard work. It&#039;s a way of life.&#34;</description>
	<lastBuildDate>Thu, 19 Apr 2012 07:50:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>The GIP (Guild of Incompetent Programmers)</title>
		<link>http://themeticulousgeek.com/2010/05/04/the-gip/</link>
		<comments>http://themeticulousgeek.com/2010/05/04/the-gip/#comments</comments>
		<pubDate>Tue, 04 May 2010 20:55:23 +0000</pubDate>
		<dc:creator>basp</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[fuckups]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://themeticulousgeek.com/?p=427</guid>
		<description><![CDATA[The Guild of Incompetent Programmers (GIP) is a group of programmers who are doing it wrong. Even though the GIP as a name, entity or organization is not very well known, most people have encountered one of its members or at least work produced by one of its members. There are a lot of sister [...]]]></description>
			<content:encoded><![CDATA[<p>The Guild of Incompetent Programmers (GIP) is a group of programmers who are <a href="http://knowyourmeme.com/memes/youre-doing-it-wrong">doing it wrong</a>. Even though the GIP as a name, entity or organization is not very well known, most people have encountered one of its members or at least work produced by one of its members. There are a lot of sister organizations like the Guild of Incompetent Designers and the Guild of Database Bullies but for now though, I am just going to talk about the GIP.</p>
<p>The members of the GIP can be summarized with the following qualities:</p>
<ul>
<li>big design up front (BDUF)</li>
<li>can only do it imperatively and love global state</li>
<li>do not use the right tool for the job</li>
<li>think OOP is all about classes</li>
<li>solution over problem</li>
<li>are clueless about our field</li>
<li>shy away from learning</li>
<li>cannot use anything but the <a href="http://martinfowler.com/bliki/VersionControlTools.html">shredder</a></li>
</ul>
<p>The GIP as a whole is a group of developers and programmers who enjoy in reinventing the wheel over and over for every problem they face. It might be any combination of sheer obliviousness and/or an angst for new things and threading on unfamiliar territory. Or it might be something else altogether. Anyway, they are doing it wrong and because of this they cause themselves and the rest of the world a lot of problems in the process. </p>
<h4>Big Design Until Fail</h4>
<p>Big Design Up Front (BDUF) is a software fail of global proportions. This probably means that global economy is involved as well so it&#8217;s not a particularly small problem. What amazes me is that I still see cool young people trying to do BDUF when they are fresh out of college (or still learning) but this probably means that a large part of the teaching staff are members of the GIP too. Another explanation might be that these people are so afraid of the actual typing in of code that they try to create a sort of a safety net: if the actual coding fails they will at least have the big design to show for their efforts.</p>
<p>BDUF fails because it is part of some bureaucratic dance that is performed to make one or more people that have absolutely nothing to do with actual development happy. Another way of saying this is that BDUF is just a waste of time. The actual big design is unfortunately useless once you&#8217;re ready to start coding. Although, to be fair, on rare occasions it will hold until the first customer review.</p>
<p>To be clear: there is <strong>absolutely nothing wrong</strong> with doing design or <em>trying to get to know a problem domain</em> with some other means than code. Things just get ugly when <strong>solutions</strong> are designed with some other means than code. It&#8217;s comparable to the idea of building and assembling every component of the metaphorical bridge (on site) 1:1 before building the actual bridge. No engineer in his right mind would even consider this.</p>
<h4>Important!</h4>
<p>Note that I&#8217;m not comparing the actual craft to building a bridge. This would be like saying that writing a book is like building a bridge. Although it would be an interesting philosophical discussion to investigate how far these do align it think most people would agree that writing a book is somewhat like writing a song but nothing like how we actually construct a building or distribute the song. For now though, I am going to leave the rabbit hole of software development metaphors for later and continue with the rant.</p>
<h4>The Imperative Way</h4>
<p>It is not that everybody is doing it. Imperative programming is sometimes required, frequently handy and also sometimes the clearest way to express a solution. Imperative programming in itself is not necessarily bad or wrong but the unwillingness of some people to look into these other paradigms is striking and almost offending. Often, this is exactly the same group of people that just love the global state container, write their stuff in 600+ line of code chunks and feel strangely comfortable when there is a list of 100+ global variable declarations on top of their module, class or whatever top level their using. Unfortunately though, these people are also completely unaware of the impact and consequences that making heavy use of global mutable state (and also local mutable state) may have:</p>
<ul>
<li>threading issues (requires locking)</li>
<li>hard to trace bugs (requires debugging and stepping)</li>
<li>hard to (automatically) test</li>
<li>poor orthogonality</li>
<li>readability most likely suffers</li>
</ul>
<p>Threading issues and hard to trace bugs make the code hard to scale and maintain. Setting up the code base in such a way that lots of mutable state is involved usually implies that testing stuff in isolation quickly becomes difficult or at least very annoying. This in turn often leads to poor orthogonality and an overall poor design which will quickly evolve to a monolithic piece of code that no sane person would like to work on. On top op that, it will also have lot of broken windows all over the place. Now imagine a gigantic pile of shit, which is somewhat the same. Would you like to work on that?</p>
<h4>A Rock and a Stick</h4>
<p>A lot of this is in a separate post but as it also has to do with the unwillingness to learn and the unawareness of those that came before us (history of our field) a few things can still be said. One of the things that I have trouble comprehending is why someone would not be interested in learning about technology, concepts and ideas that are relevant to his or her field of experience. If you can tell me your ideas about games or movies, why can you not tell me the equivalent about the field of your profession? This is the knowledge and experience gathered throughout the times that actually enables us to make our living. More and more of that knowledge becomes available everyday and <del datetime="2010-05-04T18:47:58+00:00">is</del> should be readily accessible for everyone (and that means <em>everyone</em>).</p>
</p>
<p>Nobody can be expected to know everything but you should be able to formulate what interests you in your field of profession. Who are your heroes?  What are you experimenting with? Who do you admire? What magazines or blogs do you read or who&#8217;s feeds are you subscribed to? (feeds? what&#8217;s a feed? you&#8217;re a feed!) Most of the people have not even considered these questions for themselves so there is no reason why they would have an answer. So with a blank stare and thoughts about food or females they continue on their merry way. Rock and stick at the ready.</p>
<h4>OOP: Look Ma &#8211; No Classes!</h4>
<p>Once upon a time, I thought I could handle the big stuff. I was a rock and stick programmer who mastered the rock as well as the stick. But, I was insecure. Until now, on a small scale, my simple creations turned out reasonable well. Yet, <em>how</em> do these really big programs and systems work. How <em>can</em> they work? How can someone develop and maintain them with a <strong>team of people</strong>? How can some actually <em>reason about them without resorting to a bunch of code?</em></p>
<p>Then, I found a job pretty much in my technological hot spot of that time and proudly went out with my polished rock and stick for an interview. I was excited to get the job but quickly found that the simple rock and stick that my education thought me to use so well were not very useful for constructing solutions to real-life problems. Also, I found that the guidelines on how to construct blueprints for the things I was to build were not really applicable. I really tried and my first project went actually pretty well but that was only because I was the only one working on that with full control over everything that went on with it. Doing a little bit of work after-hours was an easy way to pull stuff right back on track and way in front of the schedule. Even if it meant sucking up bad decisions made a few weeks earlier.</p>
<p>So, what does all this stuff have to do with Object Oriented Programming? Well, it was exactly during that time that I found there was something lacking with the whole concept. Of course, I was thought everything about <code>class</code>, <code>interface</code>, <code>override</code>, <code>static</code>, <code>private</code>, <code>virtual</code> and a whole host of other useless stuff and also all the shit about polymorphism and that other important concept that I always forget about (just call it polyotherfuckism, it does not matter). I knew all that religious shit by the letter but eventually found out that none of it really matters. It&#8217;s all just shit. Forget, all those fucking keywords. You know what OOP stands for right? Object Oriented Programming. That means programming with fucking objects. Who the fuck would have thought that huh?</p>
<p>For a while I&#8217;ve been trying to convince my colleagues that OOP is about objects rather than classes but somehow that shit does not sink in very well. They always come up with contrived class hierarchies involving animals or vehicles but unfortunately not one of my projects involved those kinds of entities or such a perfect mapping from example to real-life. Strangely enough, nobody ever turns up with the human analogy even though that one makes the most sense. It just proves that these people do not understand the fundamentals principle to OOP:
</p>
<p><strong><em>Hide</em></strong> mutable state in objects (and everything is an object)</p>
<p>You see, that is not too hard. Just <em>hide</em> the fucking state. Make sure that nobody is mutilating something that is not his or her own. Actually, the part in brackets is the real definition but unfortunately that is too vague for the people who are the target of this rant. To them, I can offer the following consideration to make it extra clear. How would you feel if I asked you: &#8220;can I chew on your fingers for a while please?&#8221;</p>
<p>A lot of object oriented programming languages do not even have classes to begin with. Instead, you just define an object globally that has the properties for a large group of other objects and clone that mother fucker for each new instance that is required in a local scope. It is much more to the how nature works which has mothers (mutual parents) and local variations (trapped in a scope like a valley, mountain top or cave. These are prototype based languages. Sometimes though, it is possible to affect all clones of some object even after they have been instantiated (like in current JavaScript) but while quite powerful, it allows people to easily construct their favorite class based inheritance adapters on top of the language thereby foregoing the much more powerful and arguably more natural prototyping. This is like adding Asian treats to Caucasian Europeans <em>after they are born</em>. A powerful, strange and dangerous concept indeed.</p>
<p>Object oriented programming is not about classes. It is about objects and hiding mutable state within objects to send around as packages to some other part of the system. Objects should not go about mutilating other objects. Instead, they should offer a set of operations that either are safe to call every time you feel like it but <em>ideally offer some kind of mutated version of the truth that cannot be changed but can be used to create a new future truth</em>. Classes have nothing to do with OOP and everything to do with code re-use. Prototyping is king and interfaces rule. Favor composition over inheritance and for the love of God, please forget class hierarchies.</p>
<h4>Don&#8217;t tell me what to do!</h4>
<p>If you want something, say what you want. Do not tell me how to make it or you will regret it later and try to blame it on me. It&#8217;s that easy. To stick in another fucking analogy: if my car makes a stupid noise I go the garage and say: &#8220;get rid of that fucking noise.&#8221; I do not say: &#8220;change this part and that part and maybe that part and then check that and then also that that motherfucking other piece of shit that&#8217;s supposed to be working in tandem with that other piece of crap&#8230;&#8221;.</p>
<p>I do not tell them what to do. I tell them what the outcome should be and let them figure out the path to arrive there. And this shit is true not just for people, it also holds up when your coding. Treat objects like people. Make them responsible for their tasks and depend on them to do the right thing. You&#8217;re the <em>orchestrator</em> making stuff dance or perform to your will. Don&#8217;t try to be the <em>dictator</em>.</p>
<p>If you are someone in charge of managing developers please know that we are only here to please you. But please tell me what you want, not how want to have it done. Otherwise, hire some monkeys.</p>
]]></content:encoded>
			<wfw:commentRss>http://themeticulousgeek.com/2010/05/04/the-gip/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Achievement Unlocked: RROD</title>
		<link>http://themeticulousgeek.com/2009/09/14/achievement-unlocked-rrod/</link>
		<comments>http://themeticulousgeek.com/2009/09/14/achievement-unlocked-rrod/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 08:16:16 +0000</pubDate>
		<dc:creator>basp</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[fuckups]]></category>
		<category><![CDATA[madness]]></category>
		<category><![CDATA[xbox]]></category>

		<guid isPermaLink="false">http://themeticulousgeek.com/2009/09/14/new-achievement-rrod/</guid>
		<description><![CDATA[About a year ago, my brother and I were playing Guitar Hero 3 on PS3 and really wanted to play Rock Band instead. Unfortunately, the game was nowhere to be found for that particular system but we did manage to find it for the Xbox 360. So, instead we bought that version, the Band in [...]]]></description>
			<content:encoded><![CDATA[<p>About a year ago, my brother and I were playing Guitar Hero 3 on PS3 and really wanted to play Rock Band instead. Unfortunately, the game was nowhere to be found for that particular system but we did manage to find it for the Xbox 360. So, instead we bought that version, the Band in a Box instrument kit and also an Xbox 360 console and life was good.</p>
<p>Over the course of last year, the amount of games and the time I played that console grew larger and larger and now it&#8217;s definitely the most played console in my house. At least, until three minutes past five yesterday. After spending the last few days achievement hunting together with my brother we managed to <em>unlock</em> the infamous red ring of death.</p>
<div style="text-align:center;padding-bottom:16px"><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Jkr3_dj9Mc8&amp;hl=en&amp;fs=1&amp;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Jkr3_dj9Mc8&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></div>
<p>Before that, I was hoping (but never fully confident) that my Xbox would be devoid of any problems. Sadly, I was wrong and it seems that the buzz around the failure rate of Microsoft&#8217;s console is not entirely unjustified.</p>
<p>The good news is that I can send it back to Microsoft for repairs for free. The bad news is that repairs will take two to three weeks and I&#8217;ll be damned if my two days old copy of GH5 has to gather dust for all that time.</p>
<p>So this afternoon, my brother will pickup a new Xbox and we will just transfer the HD from the broken one as it has to be removed before sending it anyway. In the end this means that we will have two Xboxes but that&#8217;s not a problem. We&#8217;ll just put one at my parents house and use that for backup in case the new one decides to bail out too.</p>
]]></content:encoded>
			<wfw:commentRss>http://themeticulousgeek.com/2009/09/14/achievement-unlocked-rrod/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>To: dick</title>
		<link>http://themeticulousgeek.com/2009/02/09/to-dick/</link>
		<comments>http://themeticulousgeek.com/2009/02/09/to-dick/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 18:36:33 +0000</pubDate>
		<dc:creator>simone</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[fuckups]]></category>
		<category><![CDATA[madness]]></category>

		<guid isPermaLink="false">http://themeticulousgeek.com/?p=239</guid>
		<description><![CDATA[To: dick Re: Meeting today Our meeting today really went well, don&#8217;t you think? At one point my blood was boiling and I was almost ready to punch you in the face. Fortunately, common sense and the lack of fighting skills prevented that. But enough kidding, I seriously do enjoy discussing technical software matters with [...]]]></description>
			<content:encoded><![CDATA[<p>To: dick</p>
<p>Re: Meeting today</p>
<p>Our meeting today really went well, don&#8217;t you think? At one point my blood was boiling and I was almost ready to punch you in the face. Fortunately, common sense and the lack of fighting skills prevented that. But enough kidding, I seriously do enjoy discussing technical software matters with someone who is not even able to check in the changes of his working copy. As a matter of fact, I think it&#8217;s noteworthy and actually very funny that the CEO is messing around the code base in the first place.</p>
<p>Frankly, I really appreciate that you deeply care how stuff is implemented and what kind of tools we are using. So far, it has been a real fun challenge to try and explain the sometimes mysterious ways of the code to you. Also, please allow me to point out that your lack of trust really is a great stimulant for me to get up early and give it my best. Additionally, it gives me a great level of comfort that each and every implementation detail will be reviewed by an expert like you.</p>
<p>I really appreciate the fact that we (the developers) always are put last though we were the first to get cut on our salaries (even though we were responsible for most of the profit). Likewise, it always is fun to be called into a meeting just as you are about to shut down for the day. It&#8217;s nice to feel important after everything else (including the shit on the carpet) has been dealt with. I also appreciate that you never know when those meetings will be finished as there&#8217;s no agenda. It really keeps things fresh that way.</p>
<p>Last but not least I want to remark that I think that purely subjective performance reviews by management are a great idea. Test results or peer-to-peer reviews are probably a myth and all those metrics take time to evaluate anyway. I welcome this simplification because I know that you in your infinite wisdom will be able to review the complete array of our abilities most perfectly.</p>
<p>Thank you for being a dick, I really appreciate it.</p>
<p>Best,</p>
<p>Simone</p>
]]></content:encoded>
			<wfw:commentRss>http://themeticulousgeek.com/2009/02/09/to-dick/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

