<?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>BLARGH!! for the people &#187; reviews</title>
	<atom:link href="http://blargh.tommymontgomery.com/category/reviews/feed/" rel="self" type="application/rss+xml" />
	<link>http://blargh.tommymontgomery.com</link>
	<description>It&#039;s time to bring forth the rhythm and the rhyme</description>
	<lastBuildDate>Fri, 09 Jul 2010 04:03:13 +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>Coders at Work: Brad Fitzpatrick</title>
		<link>http://blargh.tommymontgomery.com/2009/11/coders-at-work-brad-fitzpatrick/</link>
		<comments>http://blargh.tommymontgomery.com/2009/11/coders-at-work-brad-fitzpatrick/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 06:22:56 +0000</pubDate>
		<dc:creator>tmont</dc:creator>
				<category><![CDATA[coders at work]]></category>
		<category><![CDATA[reviews]]></category>

		<guid isPermaLink="false">http://blargh.tommymontgomery.com/?p=223</guid>
		<description><![CDATA[When I read the introduction to the chapter on Brad Fitzpatrick, I was slightly worried. He&#8217;s the guy who invented LiveJournal, which has been ridiculed (for good reason) ever since I&#8217;ve been using the internet. I knew some people in college who had LiveJournal accounts, and they were the kind of people who were always [...]]]></description>
			<content:encoded><![CDATA[<p>When I read the introduction to the chapter on <a href="http://bradfitz.com/">Brad Fitzpatrick</a>, I was slightly worried. He&#8217;s the guy who invented <a href="http://www.livejournal.com/">LiveJournal</a>, which has been ridiculed (for good reason) ever since I&#8217;ve been using the internet. I knew some people in college who had LiveJournal accounts, and they were the kind of people who were always whining about something trivial in their life (&#8220;my girlfriend broke up with me/died/admitted her bulimia problem/is too fat/is too skinny/cut herself/beat me up/hates me/hates her mom/doesn&#8217;t have a mom/etc.&#8221;). It wasn&#8217;t pleasant. It was like the MySpace for people who had no friends.</p>
<p>Anyway, it turns out Brad Fitzpatrick (let&#8217;s call him fitzy) is kind of a programming prodigy. He got his start reading computer manuals when he was five, and started programming in BASIC when he was six. He recounted one anecdote wherein instead of doing his long division homework in elementary school, he wrote a computer program that worked it all out for him, including the intermediary steps, which he printed out, and then copied it in pencil to his homework sheet. That&#8217;s a high level of nerdity at a very young age. That&#8217;s like, a Jason Fox-level nerdity usually reserved for fictional situations involving an iguana and some kind of sibling blackmail.</p>
<p>fitzy is young, born in 1980, which means he doesn&#8217;t know Lisp. Which means he&#8217;s awesome. His primary hackery is done in Perl and C, but now that he works for Google, it&#8217;s Python, Java and C++, which Google apparently regards as the holy trinity of programming languages. He&#8217;s also the author of <a href="http://www.danga.com/memcached/">memcached</a>, which is a huge surprise to me. If you had asked me who wrote memcached and who wrote LiveJournal, I would have said &#8220;a genius and an idiot&#8221;. Rarely do those two coincide.</p>
<p>Peter Seibel is revealing himself as less of the stereotypical brown-nosing, sycophant-ish interviewer as he calls fitzy out on some contradictions. fitzy is whining about the inflexibility of Java programmers (don&#8217;t even get me started about them) and their refusal to use the <a href="http://en.wikipedia.org/wiki/Java_Native_Interface">JNI</a> for interoperability, and then later talks about how Google&#8217;s inflexibility with multi-language support is actually good.</p>
<blockquote><p>The problem with that is that you end up writing everything twice, once for C++ and Python and all the other languages, and then once for Java. So if they could come up with a good embedding story or get over this fear of JNI, then I wouldn&#8217;t mind it.</p>
</blockquote>
<p>Later, when fitzy is singing the praises of the <a href="http://code.google.com/appengine/">Google App Engine</a>, Seibel calls him out.</p>
<blockquote><p><strong>[fitzy]</strong>: The fact that App Engine gives you one button, &#8220;Put this on the Web,&#8221; and you write in one language, arguably a pretty easy-to-learn one, Python, is perfect. It&#8217;s a great into to programming &#8211; there are so many layers and layers of bullshit that it gets rid of.</p>
<p><strong>[Seibel]</strong>: How does that fit with your dismay at the Java guys who tell you &#8220;Oh, Java takes care of that for you.&#8221; Isn&#8217;t that the same? &#8220;Well, App Engine will take care of that for you.&#8221;</p>
<p><strong>[fitzy]</strong>: I don&#8217;t know. Maybe it&#8217;s because I know what&#8217;s going on.
</p>
</blockquote>
<p>Radness.</p>
<p>There&#8217;s also some good insight into the software development lifecycle at Google, including coding guidelines, standards, release schedules and ownership. Apparently it&#8217;s pretty wide open: the entire codebase is totally open to everyone, and anyone can submit patches or commit as long as they get it code reviewed and get the approval of the directory owner. That openness is probably why Google has been so successful.</p>
<p>I&#8217;m sincerely hoping one of the interviews in this book will reveal someone who&#8217;s not a bigot toward other languages other than the ones they are experts in. fitzy did not deliver on that.</p>
<p>One interesting thing about fitzy is that he uses the same question in every interview: implement arbitrary precision multiplication. Apparently that was a question on his <a href="http://en.wikipedia.org/wiki/Advanced_Placement">AP</a> CS test in high school. Let&#8217;s see what I can do:</p>
<pre class="brush: php;">
function multiply($string1, $string2) {
	$len1 = strlen($string1);
	$len2 = strlen($string2);

	$result = array_fill(0, $len1 + $len2, 0);
	for ($i = $len1 - 1; $i &gt;= 0; $i--) {
		$val1 = intval($string1[$i]);

		for ($j = $len2 - 1; $j &gt;= 0; $j--) {
			$val2 = intval($string2[$j]);
			$value = $val1 * $val2;
			$index = ($len1 + $len2 - 1) - ($len1 - $i - 1) - ($len2 - $j - 1);
			addWithCarry($result, $index, $value);
		}
	}

	return ltrim(implode('', $result), '0');
}

function addWithCarry(array &amp;$result, $index, $value) {
	if ($result[$index] + $value &gt;= 10) {
		$temp = $result[$index] + $value;
		$result[$index] = $temp % 10;
		addWithCarry($result, $index - 1, floor($temp / 10));
	} else {
		$result[$index] += $value;
	}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blargh.tommymontgomery.com/2009/11/coders-at-work-brad-fitzpatrick/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Coders at Work: Jamie Zawinski</title>
		<link>http://blargh.tommymontgomery.com/2009/10/coders-at-work-jamie-zawinski/</link>
		<comments>http://blargh.tommymontgomery.com/2009/10/coders-at-work-jamie-zawinski/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 23:40:36 +0000</pubDate>
		<dc:creator>tmont</dc:creator>
				<category><![CDATA[coders at work]]></category>
		<category><![CDATA[reviews]]></category>

		<guid isPermaLink="false">http://blargh.tommymontgomery.com/?p=208</guid>
		<description><![CDATA[I&#8217;m reading through Coders at Work, which is basically a bunch of interviews with famous programmers. I just read the first chapter, which is an interview with Jamie Zawinski, who was part of the first team of developers at Netscape (he worked on the Unix part) and also is/was a developer/evangelist of the chlamydia of [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m reading through <a href="http://www.codersatwork.com/">Coders at Work</a>, which is basically a bunch of interviews with famous programmers. I just read the first chapter, which is an interview with <a href="http://www.jwz.org/">Jamie Zawinski</a>, who was part of the first team of developers at Netscape (he worked on the Unix part) and also is/was a developer/evangelist of the chlamydia of editors known as <a href="http://en.wikipedia.org/wiki/Emacs">Emacs</a>.</p>
<p>It was an interesting interview. <a href="http://www.joelonsoftware.com/">Joel Spolsky</a> referred to him as the penultimate <a href="http://www.joelonsoftware.com/items/2009/09/23.html">Duct Tape Programmer</a>, whatever that means. I assume he meant to type &#8220;hacker&#8221; but misspelled it. It&#8217;s a common typo; <a href="http://www.bash.org/?5300">the keys are like right next to each other</a>.</p>
<p>Anyway, it&#8217;s clear from the beginning that jwz (as all of his friends call him) is a Lisp geek. So I pretty much hated him right away. Nothing annoys me more than people who think every language except the one they know really well is total crap. ALL languages suck. Except C#, which is God&#8217;s gift to man. But that doesn&#8217;t count because everybody already knows that.</p>
<p>The first couple pages are dedicated to the glorification of Lisp, and Lucid Lisp, and Common Lisp, and other things that only people over 50 know about, and the damnation to eternal Hell of Perl and C++ templates. I took a Common Lisp class in college and I came away with two things:</p>
<ol>
<li>Recursion is awesome</li>
<li>I never want to touch Lisp again</li>
</ol>
<p>There were other corollary (<em>koar-uh-larry</em>, dammit; I was a math major) things I learned, such as &#8220;Lisp sucks&#8221; and &#8220;Why are there so many parentheses&#8221; and &#8220;Why can&#8217;t any Lisp programmer format their code in a readable fashion.&#8221; All in all, it was a decidedly academic experience, which is where Lisp should have stayed: in academia. But I digress.</p>
<p>j-dub talked about his early days of hacking telephones, hating school, and generally being an all around Lisp pimp (Pisp?) by the time he was 15. His monologue on his days at Netscape were more interesting (unless you&#8217;re that other guy who knows Lisp) than his descriptions of his oddly creepy love affair with Emacs, or his equally creepy hatred of <a href="http://www.gnu.org/software/gdb/">GDB</a>. If I knew how to debug C code by looking at opcodes, memory addresses and registers, then that would have been a good read, but since I was born after the death of Hitler (Godwin&#8217;s law) I didn&#8217;t really understand any of it.</p>
<p>The more interesting parts were how he rewrote Richard Stallman&#8217;s C compiler, and him making fun of how everybody else&#8217;s code sucks. Because nothing is as much fun to a programmer as mocking and degrading the hard work of another programmer. That&#8217;s not a joke. I currently pay my rent by doing that.</p>
<p>The one thing which I truly enjoyed from the chapter was his description of the Gang of Four&#8217;s <a href="http://en.wikipedia.org/wiki/Design_Patterns_%28book%29">Design Patterns</a>. And I quote:</p>
<blockquote><p>Then there was another book that everybody thought was the greatest thing ever in that same period &#8211; Design Patterns &#8211; which I just thought was crap. It was just like, programming via cut and paste. Rather than thinking through your task you looked through the recipe book and found something that maybe, kind, sorta felt like it, and then just aped it.</p>
<p><em>&#8230;snip&#8230;</em></p>
<p>Then in meetings they&#8217;d be tossing around all this terminology they got out of that book. Like, the inverse, reverse, double-back-flip pattern &#8211; whatever. Oh, you mean a loop? OK.
</p>
</blockquote>
<p>That reminds of a story of how one of my coworkers was showing me a .NET <a href="http://en.wikipedia.org/wiki/Inversion_of_control">IoC</a> container called <a href="http://www.codeplex.com/unity">Unity</a>. It&#8217;s nice, and gives you exactly what you&#8217;d want out of an IoC container for the most part. Like every other framework ever, it&#8217;s inherently confusing with plenty of misleading indirection. But it&#8217;s another thing to put on your resume.</p>
<p>Anyway, he was explaining how he was using the <a href="http://www.martinfowler.com/eaaCatalog/unitOfWork.html">Unit of Work</a> principle here, and&#8230; &#8220;Wait, what&#8217;s unit of work?&#8221; I asked. He replied, &#8220;Well, it&#8217;s basically a transaction, that, uh&#8230; enables you to safely&#8230; execute&#8230; some piece of code&#8230; and&#8230; uh&#8230;&#8221; I cut him off after 10 seconds of niners and said, &#8220;You had me at &#8216;transaction&#8217;&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://blargh.tommymontgomery.com/2009/10/coders-at-work-jamie-zawinski/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
