<?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>ZBlog &#187; books</title>
	<atom:link href="http://blog.zarate.tv/category/books/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.zarate.tv</link>
	<description>Using the law to keep justice away</description>
	<lastBuildDate>Wed, 08 Sep 2010 17:04:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Broken windows</title>
		<link>http://blog.zarate.tv/2010/03/22/broken-windows/</link>
		<comments>http://blog.zarate.tv/2010/03/22/broken-windows/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 20:12:27 +0000</pubDate>
		<dc:creator>Zarate</dc:creator>
				<category><![CDATA[books]]></category>
		<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://blog.zarate.tv/?p=1478</guid>
		<description><![CDATA[Re-reading technical books always makes sense. Usually I don&#8217;t remember anything I read on them once I finish, but while I&#8217;m reading I get all sorts of epiphanies, mostly related to the project I&#8217;m working on at that point in time. Basically, when you read a book, any book, you are a different person so [...]]]></description>
			<content:encoded><![CDATA[<p>Re-reading technical books always makes sense. Usually I don&#8217;t remember anything I read on them once I finish, but while I&#8217;m reading I get all sorts of epiphanies, mostly related to the project I&#8217;m working on at that point in time. Basically, when you read a book, any book, you are a different person so you pay attention and make connections to different things. </p>
<p>I&#8217;m reading now <a href="http://www.pragprog.com/">The Pragmatic Programmer</a>, an all time classic for programmers. For starters, they seem to be the people who coined the term <a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself">DRY</a>, <em>Don&#8217;t Repeat Yourself</em>. Might sound like a minor achievement, but being able to <strong>create</strong> new words and terms that allow people to communicate faster and better is a big deal. See, now when you hear someone talking about making apps more &#8220;web 2.0&#8243; or &#8220;harness the power of social media&#8221; the bullshit alarm in your brain automatically goes off and you get a quick idea of who you are talking to. Very useful.</p>
<p><strong>The building with the broken window</strong></p>
<p>Very early on the book they talk about something that is very true both in programming and real life. Researchers found that in a building, once a window breaks and it&#8217;s not fixed in a reasonable amount of time, the state of said building declines very, very fast. We see this all the time. Whenever something is clean, everyone follows and tries to keep it clean. But as soon as the garbage is left out for too long, people start letting themselves go. Very, very soon, the mindset goes from &#8220;wow, can&#8217;t leave that rubbish there&#8221; to &#8220;fuck it, everything looks shit&#8221;.</p>
<p>In software projects at the beginning everyone is happy and the rainbow is high up in the sky, but soon enough someone <em>breaks a window</em>. It might be using a literal here cause you don&#8217;t have time now to get hold of the config object or making a method public cause it simplifies so much getting the data out of the component, even if that breaks encapsulation. </p>
<p><strong>How to tackle the problem</strong></p>
<p>Fire the developer that breaks the window and doesn&#8217;t fix it in time? Too harsh? Is breaking windows a necessary evil from time to time? It really isn&#8217;t, but, for the sake of the pragmatic people (tight deadline, client wants this, today I was tired, etc), let&#8217;s assume breaking windows in inevitable. I can live with that. But we shouldn&#8217;t live with the broken window for too long or devs will start not caring very fast. What once was a nice and clean system can turn very quickly into a mess nobody wants to touch.</p>
<p>If threatening to fire developers might not go down well, what about threatening them with superstition? </p>
<p><strong>Exodus 23:10</strong></p>
<blockquote><p>And six years thou shalt sow thy land, and shalt gather in the fruits thereof: But the seventh year thou shalt let it rest and lie still</p></blockquote>
<p>This I think I picked up from Chris Heilmann at <a href="http://blog.zarate.tv/2009/10/29/devdays-london/">StackOverflow DevDays</a>. They say it in the sense that every 7th iteration (whatever long that is in your project), stop coding and clean up. I like it cause I think it brings a good balance between fast coding (I can hack this little thing now, code cleaning comes in 2 iterations) and keeping quality reasonable high.  </p>
<p>Also this goes by hand with the idea of the <a href="http://www.codinghorror.com/blog/2009/02/paying-down-your-technical-debt.html">technical debt</a>:</p>
<blockquote><p>Doing things the quick and dirty way sets us up with a technical debt, which is similar to a financial debt. Like the financial debt, the technical debt incurs interest payments, which come in the form of extra effort that we have to do in the future development because the quick and dirty design choice. We can choose to continue paying interest, or we can pay down the principal by refactoring into a better design. Although it costs to pay down the principal, we gain by reduced interest payments in the future.</p></blockquote>
<p>It&#8217;s ok to incur in some &#8220;debt&#8221; when you kick off the project, same as businesses incur in some real debt when they start. But at some point devs need to start paying back some of that debt or the interest (time wasted dealing with crappy code) grows exponentially.</p>
<p>Bottom line: it&#8217;s ok to break a window from time to time, but it&#8217;s not ok letting it broken forever. It will haunt you down : )</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zarate.tv/2010/03/22/broken-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Coders at work</title>
		<link>http://blog.zarate.tv/2010/01/19/coders-at-work/</link>
		<comments>http://blog.zarate.tv/2010/01/19/coders-at-work/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 10:53:21 +0000</pubDate>
		<dc:creator>Zarate</dc:creator>
				<category><![CDATA[books]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[the industry]]></category>

		<guid isPermaLink="false">http://blog.zarate.tv/?p=1412</guid>
		<description><![CDATA[I&#8217;ve just finished reading Coders at Work, and it&#8217;s a really good book for developers. Peter Seibel interviews 15 very successful programmers about how did they start programming, what changes they&#8217;ve seen in the industry over the last decades, what they look for when hiring new people, how do they debug, etc. I also quite [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just finished reading <a href="http://www.codersatwork.com/">Coders at Work</a>, and it&#8217;s a really good book for developers. <a href="http://www.gigamonkeys.com/">Peter Seibel</a> interviews 15 very successful programmers about how did they start programming, what changes they&#8217;ve seen in the industry over the last decades, what they look for when hiring new people, how do they debug, etc. I also quite like the tone of the book because it is a laid back conversation between peers, to the point and no bullshit.</p>
<p>Keep in mind that these guys are responsible for quite a few things that today we take for granted such us memcached, Unix, JS, Internet, Java, Firefox, etc.</p>
<p>One common thought is that back in the days they used to know in and out every line of code that run on their machines. Most of them spent quite a few years programming assembly and &#8220;close to the metal&#8221; (aka, the hardware), but today&#8217;s programmers &#8220;<em>don&#8217;t know the whole thing</em>&#8220;. </p>
<p>Well, they are right.</p>
<p>I for one have no idea of assembly, machine code or even C. Now, is that good or bad? Granted, the more you know, the better, but most of them also agree that with the level of abstractions that we programmers &#8220;enjoy&#8221; these days this doesn&#8217;t sound possible any more.</p>
<p>For example, think about the abstractions of the typical Flash movie:</p>
<p>Hardware > OS > browser > Flash player > framework of choice > your app here</p>
<p>Now, that&#8217;s obviously a gross overview, since we could break OS in (that I can think of, not even sure it&#8217;s the right order):</p>
<p>kernel > drivers > window system > graphic card</p>
<p>The thing is, even if you had access to ALL the code running (which most likely you don&#8217;t), who has the time and skills to look at it _and_ get  job done?</p>
<p>With all those abstractions in place, when something fails good luck trying to figure out where the problem is. Can you be sure? Because even when we find a bug in the player, is that Adobe&#8217;s fault? Mozilla? Explorer? Linux? A combination? Very hard to tell, more so when a few of those elements are black boxes (proprietary software, you don&#8217;t have access to the code).</p>
<p>Most of those guys wonder about what are the best skills for programmers nowadays. When they started coding, it was a must having very good math skills because of the lack of HW power. They needed to squeeze every single CPU cycle and memory position. Either that or your program wouldn&#8217;t go anywhere. We all know that&#8217;s not true any more. Is this bad? I say it depends on your work. </p>
<p>If you are building compilers, 3D engines or drivers, then by all means you need to focus on performance and have those skills. But if you are doing user interfaces I bet your users appreciate a hand for design and usability. So, completely different skills needed. The fact that HW has gotten so powerful has lowered the barrier for being a programmer so people with very different skills can afford it now, and I think that&#8217;s good. The fact that a designer (and probably even the most advanced Flash &#8220;programmer&#8221; looks like a designer to them) can build an interface without having to worry about HW, graphic cards and code optimizations is pushing computers to different areas.</p>
<p>Even for developers, the skills you need now are not the skills you needed 40 years ago. They think most developers these days &#8220;<em>play Lego</em>&#8220;. They mean we build blocks with the frameworks or libraries available, but don&#8217;t do any &#8220;real&#8221; programming. They have a point. But again, is that good or bad? This is classic DRY stuff. Why would I want to code a SHA1 library if there are quite a few there already? Heck, doing so would not only be a waste of time, it&#8217;d probably be a security hole as most likely I wouldn&#8217;t get it right.  Why would I want to roll my own PHP framework if there are a myriad of choices offering DB abstraction and XSS and CSRF protection out of the box?</p>
<p>See, I think what&#8217;s important is having the skills to roll your own code when needed and use somebody else&#8217;s when it makes sense. And that requires some skills as well. First, you need to be able to identify what&#8217;s core for you and disregard coding everything else. Then you need to be able to start using somebody else&#8217;s code without having to understand it all, many times only looking at some (often incomplete) docs or API. That require skills. A different type, but skills nonetheless. </p>
<p>Also, <strong>obviously with all due respect</strong>, I think they miss an important thing. They didn&#8217;t start from scratch either. Nobody does. </p>
<p><strong>Standing in the shoulders of giants</strong></p>
<p>For example, very, very, very few physicists question the thermodynamics laws. Very, very, very few mathematicians question Pythagoras. They take them for granted. They&#8217;ve been proved. They use them as a base to build on top. Yet, there&#8217;re those very, very, very few that do indeed question the core laws that everyone else just &#8220;use&#8221;. It&#8217;s their job challenging those laws, otherwise completely accepted, and put them to the limit and analyze them with modern eyes.</p>
<p>Why we don&#8217;t have similar laws or universal truths in computing? Well, for starters computers are what, 50 years old? 70 years old? 80? Physics and maths have been around thousands of years. Even if you could compare both worlds, the rules of the &#8220;computing universe&#8221; have been created by human beings whereas the rules of the Earth just <em>are</em>. Those rules haven&#8217;t changed since the Big Bang, what changes is our understanding of them (call it physics math. chemistry, whatever).</p>
<p>As I was saying, quite an interesting book. One of those you can re-read in 2, 3 or 5 years, still enjoy it and still learn from it. Go read it!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zarate.tv/2010/01/19/coders-at-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Intellectual Property and Open Source</title>
		<link>http://blog.zarate.tv/2008/11/02/intellectual-property-and-open-source/</link>
		<comments>http://blog.zarate.tv/2008/11/02/intellectual-property-and-open-source/#comments</comments>
		<pubDate>Sun, 02 Nov 2008 22:14:35 +0000</pubDate>
		<dc:creator>Zarate</dc:creator>
				<category><![CDATA[books]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://blog.zarate.tv/?p=210</guid>
		<description><![CDATA[Disclaimer: I hate lawyers, laws and judges. I think the whole legal system is built specifically to be complicated because, c&#8217;mon, life is not that complicated by itself. Everything is slow, language is really tricky, you have to go to a thousand different places to do anything&#8230; Yes, let&#8217;s better hire lawyers an let them [...]]]></description>
			<content:encoded><![CDATA[<p>Disclaimer: I hate lawyers, laws and judges. I think the whole legal system is built specifically to be complicated because, c&#8217;mon, life is not <em>that</em> complicated by itself. Everything is slow, language is really tricky, you have to go to a thousand different places to do anything&#8230; <em>Yes, let&#8217;s better hire lawyers an let them take care of it</em>. But it doesn&#8217;t matter how much we hate laws or Intellectual Property (IP), they are here to stay and they rule everything we do.</p>
<p>So, when I read <a href="http://books.slashdot.org/article.pl?sid=08/09/15/1459219">this review</a> on Slashdot about the book <a href="http://www.amazon.com/dp/0596517963/ref=nosim/?tag=slashdot0c-20">Intellectual Property and Open Source</a>, I thought I&#8217;d give it a go. I thought: &#8220;let&#8217;s get better on what I hate the most&#8221;.</p>
<p>It&#8217;s kind of ironic that the book starts with IAAL (I am a layer) but very quickly says something like &#8220;whatever is written here shouldn&#8217;t be taken for granted, go and check with your lawyer&#8221; which is exactly the same warning all the <a href="http://en.wikipedia.org/wiki/IANAL">IANAL</a> statements begin with.</p>
<p>The first part of the book gives a background about where IP comes from and why it&#8217;s good (or was meant to be good) for society. It also covers differences between patents, copyright, trademarks, trade secrets and all the legal terminology crap.</p>
<p>Then continues with examples such as:</p>
<p>* If you write code for a company, who owns the rights of that code, you or the company?<br />
* If you write your own project that has nothing to do with your current job, could your company claim compensation?</p>
<p>You would be surprised with <em>actual</em> cases and how they ended up. I haven&#8217;t even finished the book yet and I&#8217;m sure I&#8217;m going to find even more interesting stuff.</p>
<p>So, copyright, lawyers, laws and all the crew aren&#8217;t going to go away just because we don&#8217;t like them. Let&#8217;s try to learn how to use them in own our benefit.</p>
<p>Cheers!</p>
<p>ps: Grant Skinner wrote not long ago a very interesting post about <a href="http://www.gskinner.com/blog/archives/2008/07/source_code_lic_1.html">licensing source code</a>, give it a read and also to the comments. Interesting stuff.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zarate.tv/2008/11/02/intellectual-property-and-open-source/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
