<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/3552" -->
<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/"
	>

<channel>
	<title>GrokCode</title>
	<link>http://grok-code.com</link>
	<description></description>
	<pubDate>Tue, 12 Aug 2008 04:01:18 +0000</pubDate>
	<generator>http://wordpress.org/?v=3552</generator>
	<language>en</language>
			<item>
		<title>5½ More Books In a Hacker’s Bookshelf</title>
		<link>http://grok-code.com/60/5%c2%bd-more-books-in-a-hacker%e2%80%99s-bookshelf/</link>
		<comments>http://grok-code.com/60/5%c2%bd-more-books-in-a-hacker%e2%80%99s-bookshelf/#comments</comments>
		<pubDate>Tue, 05 Aug 2008 00:32:13 +0000</pubDate>
		<dc:creator>jess</dc:creator>
		
		<category><![CDATA[Archives]]></category>

		<category><![CDATA[books]]></category>

		<category><![CDATA[hacking]]></category>

		<guid isPermaLink="false">http://grok-code.com/60/5%c2%bd-more-books-in-a-hacker%e2%80%99s-bookshelf/</guid>
		<description><![CDATA[A list of 5½ essential books for a hacker's bookshelf. This list is based on reader suggestions given on a previous post: "The Top 9½ In a Hacker’s Bookshelf", and like that list of recommended programming books, It contains a mix of computer science textbooks, references for developers, and books that give insight into the programming industry. This is another list of hackers' classics.]]></description>
			<content:encoded><![CDATA[<p>This is a follow up to the list of <a href="http://grok-code.com/11/the-top-9-in-a-hackers-bookshelf/" title="Recommended hacking books">recommended books for a hacker&#8217;s bookshelf</a> that was posted a few months ago.  Here are 5½ more essential books for a hacker&#8217;s bookshelf.   This list is based on reader suggestions, and like the previous list of recommended programming books, it contains a nice mix of computer science texts, developer references, and books giving insight into the programming industry.  This is another list of hackers&#8217; classics.</p>
<h4></h4>
<p><a href="http://www.amazon.com/gp/product/020161622X?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=020161622X" title="The Pragmatic Programmer"><img src="http://grok-code.com/wp-content/uploads/pragmatic-programmer.jpg" alt="The Pragmatic Programmer" align="left" hspace="20" /></a></p>
<h4><a href="http://www.amazon.com/gp/product/020161622X?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=020161622X" title="The Pragmatic Programmer: From Journeyman to Master"><span id="btAsinTitle">The Pragmatic Programmer: From Journeyman to Master</span></a></h4>
<p><span>  by Andrew Hunt and David Thomas</span></p>
<p>The &#8220;Pragmatic Programmer&#8221; is a high level overview of a wide range of practical topics in software development. It covers just about every aspect of software development including working in teams, source control, writing bullet-proof code, thinking critically, remembering the big picture, the benefits of knowing your tools, effective communication&#8230;and the list goes on.</p>
<p>&#8220;The Pragmatic Programmer&#8221; is organized around a series of practical tips for becoming a better software developer.  Many of the tips are immediately implementable, and each tip is  explained in a logical way and supported by entertaining anecdotes and quotes.  The book contains a handy tear-out card that lists all of the tips.</p>
<p>This book is recommended for anyone who wants to be a better coder.  It is probably best suited to beginner and intermediate developers, but advanced developers may find it a fun and worthwhile read as well.</p>
<p>Also recommended by <cite></cite><a href="http://www.potschka-it.de/" rel="external nofollow">Florian Potschka</a> and Jason.</p>
<p><a href="http://www.amazon.com/gp/product/0201485419?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201485419" title="The Art of Computer Programming, Volumes 1-3 Boxed Set by Donald E. Knuth"><img src="http://grok-code.com/wp-content/uploads/the-art-of-computer-programming-knuth.jpg" alt="The Art of Computer Programming, Volumes 1-3 Boxed Set by Donald E. Knuth" align="left" hspace="20" /></a></p>
<h4><a href="http://www.amazon.com/gp/product/0201485419?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201485419" title="The Art of Computer Programming, Volumes 1-3 Boxed Set"><span id="btAsinTitle">The Art of Computer Programming, Volumes 1-3 Boxed Set</span></a></h4>
<p>by <span>Donald E. Knuth</span></p>
<p>According to <a href="http://www.ccil.org/jargon/jargon_toc.html" title="The New Hacker's Dictionary">The New Hacker&#8217;s Dictionary</a>, a safe answer when you don&#8217;t know something is always: &#8220;I think you can find that in Knuth.&#8221;  The Art of Computer Programming (TAOCP) is a probably the definitive computer science text.  This boxed set contains the first 3 volumes of a planned 7 volume set.  Volume 4 is unfinished, and is currently being published as a set of smaller books called fascicles.  The 3 volumes included here are: &#8220;Fundamental Algorithms,&#8221; &#8220;Seminumerical Algorithms,&#8221; and &#8220;Sorting and Searching.&#8221;</p>
<p>I&#8217;m a bit embarrassed to say that I haven&#8217;t read TAOCP - I&#8217;ve always found it a bit hard to justify spending $190 on a set of books, even if they are masterpieces.  (Update: Amazon currently has the set marked down to $153.)  I would recommend TAOCP to anyone who wants to fill in any gaps in their computer science knowledge, and who has a lot of pocket change laying around.</p>
<p>Also recommended by seb and Dennis Grooves. <cite></cite></p>
<p><a href="http://www.amazon.com/gp/product/0131429019?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0131429019" title="The Art of UNIX Programming"><img src="http://grok-code.com/wp-content/uploads/art-of-unix-programming.jpg" alt="The Art of UNIX Programming" align="left" hspace="20" /></a></p>
<h4><a href="http://www.amazon.com/gp/product/0131429019?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0131429019" title="The Art of UNIX Programming">The Art of UNIX Programming</a></h4>
<p>by <span>Eric S. Raymond</span></p>
<p>This book does a great job of explaining the old &#8220;hacker ethic&#8221; and explaining why *nix is the way it is.  &#8220;The Art of UNIX Programming,&#8221; contains case studies and commentary from many of the big names in the *nix culture: Ken Thompson, Steve Johnson, Brian Kernighan, David Korn, and others.</p>
<p>This book really covers a lot of ground.  The first part of the book is an introduction to the *nix history, culture, and philosophy.  The main points brought up in the introduction are then well-illustrated by case studies.  The book goes on to talk about the various tools that are available in the *nix ecosystem, and how to be a successful participant in the FOSS community.</p>
<p>This book is recommended for anyone who has an interest in operating systems history, the open source culture and philosophy, or just learning about different tools and techniques that will help in becoming a better coder.</p>
<p>Also recommended by jason and Tet.</p>
<p><a href="http://www.amazon.com/gp/product/0262560992?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0262560992" title="The Little Schemer"><img src="http://grok-code.com/wp-content/uploads/the-little-schemer.jpg" alt="The Little Schemer" align="left" hspace="20" /></a></p>
<h4><a href="http://www.amazon.com/gp/product/0262560992?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0262560992" title="The Little Schemer"><span id="btAsinTitle">The Little Schemer - 4th Edition</span></a></h4>
<p>by <span>Daniel P. Friedman and Matthias Felleisen</span></p>
<p>&#8220;The Little Schemer&#8221; (editions 1-3 were called the &#8220;Little Lisper&#8221;) uses a unique question and answer technique to create a dialog that really draws you into the book.  It starts from first principles and gradually works up to more advanced topics like the halting problem and writing a Scheme interpreter.</p>
<p>Despite the title, this book isn&#8217;t really about Scheme; it covers only the basic features of the language, and doesn&#8217;t even introduce local variables.  However, a more thorough treatment of Scheme is given in the next book in the serious, &#8220;The Seasoned Schemer.&#8221;  What &#8220;The Little Schemer,&#8221; does do well is teach recursion and the art of &#8220;thinking in Lisp.&#8221;  Recursion is a recurring theme that is continually expanded upon throughout the book.</p>
<p>This book is recommended for anyone looking for a mind-expanding treatment of recursion and the art of thinking like a lisper.</p>
<p>Also recommended by <cite></cite><a href="http://www.dadhacker.com/" rel="external nofollow">landon dyer</a>.</p>
<p><a href="http://www.amazon.com/gp/product/0932633439?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0932633439" title="Peopleware: Productive Projects and Teams by Tom DeMarco and Timothy Lister"><img src="http://grok-code.com/wp-content/uploads/peopleware.jpg" alt="Peopleware: Productive Projects and Teams by Tom DeMarco And Timothy Lister" align="left" hspace="20" /></a></p>
<h4><a href="http://www.amazon.com/gp/product/0932633439?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0932633439" title="Peopleware: Productive Projects and Teams"><span id="btAsinTitle">Peopleware: Productive Projects and Teams   (Second Edition)</span></a></h4>
<p>by <span>Tom DeMarco and Timothy Lister</span></p>
<p>&#8220;Peopleware&#8221; focuses on the sociological aspects of software development.  The authors state that for the overwhelming majority of failed software projects, the failure was due to sociological, not technical, problems.</p>
<p>This book is very well regarded in the industry, and I think a large reason for that is the underlying theme of Peopleware: developers, when given the chance, will do the right thing.  Furthering this idea, a manger&#8217;s job is not to make people work, but to give people the ability to work. This means (among other things) private offices with closing doors for developers, and coders who are given intellectual responsibility over their jobs.  The points are backed up by statistical evidence and often humorous anecdotes.</p>
<p>This book is recommended for anyone who manages software development projects, or aspires to lead a team of developers.  Buying one for management could just convince them to ditch the cubicle idea.</p>
<p>Also recommended by <cite></cite><a href="http://www.potschka-it.de/" rel="external nofollow">Florian Potschka</a>.</p>
<p><a href="http://www.amazon.com/gp/product/0553380958?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0553380958" title="Snow Crash"><img src="http://grok-code.com/wp-content/uploads/snow-crash.jpg" alt="Snow Crash" align="left" hspace="20" /></a></p>
<h4><a href="http://www.amazon.com/gp/product/0553380958?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0553380958" title="Snow Crash">Snow Crash</a></h4>
<p>by <span>Neal Stephenson</span></p>
<p>&#8220;Snow Crash&#8221; is the obligatory science fiction book in the list.  This book is one of the defining books in the cyberpunk genre, right along with Bruce Sterling&#8217;s work.  &#8220;Snow Crash&#8221; is the story of Hiro Protagonist, last of the freelance hackers and the greatest sword fighter in the world, who delivers pizzas for a Mafia-controlled pizza franchise.  He teams up with Y.T., a spunky young female skateboard courier in order to help his friend Da5id who was the victim of a computer virus with biological effects.</p>
<p>This book ties together ancient Sumerian myths, post-modern computer viruses, and biological hacking.  The result is an almost matrix-esque hacker world view.  For the most part, the book moves along very quickly from one surreal action sequence to another.  My only complaint was that the section on Sumerian culture really bogged down the pace of the book.</p>
<p>&#8220;Snow Crash&#8221; is a must read for anyone who enjoys the cyberpunk genre and/or fast-paced, action-packed fiction.</p>
<p>Also recommended by <cite></cite><a href="http://www.idevs.co.uk/" rel="external nofollow">Jamie</a>.</p>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<small><p>
	<a href="http://grok-code.com/60/5%c2%bd-more-books-in-a-hacker%e2%80%99s-bookshelf/">Permalink</a> |
     &copy; <a href="http://grok-code.com">GrokCode</a>, 2008.
	</p></small>]]></content:encoded>
			<wfw:commentRss>http://grok-code.com/60/5%c2%bd-more-books-in-a-hacker%e2%80%99s-bookshelf/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Power of a Programming Portfolio</title>
		<link>http://grok-code.com/58/the-power-of-a-programming-portfolio/</link>
		<comments>http://grok-code.com/58/the-power-of-a-programming-portfolio/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 08:06:11 +0000</pubDate>
		<dc:creator>jess</dc:creator>
		
		<category><![CDATA[Archives]]></category>

		<category><![CDATA[career]]></category>

		<category><![CDATA[portfolio]]></category>

		<guid isPermaLink="false">http://grok-code.com/58/the-power-of-a-programming-portfolio/</guid>
		<description><![CDATA[A programming portfolio can showcase your best work and your highlight your involvement in challenging projects. It provides a great way to show your achievements, not just talk about them.  A portfolio provides an interview with much more insight into your work experience than a resumé alone could give. A memorable portfolio will help you stand out from a sea of other candidates.]]></description>
			<content:encoded><![CDATA[<p>Portfolios have been used for years by architects, artists, and designers, but why not for computer programmers?  A programming portfolio is a great way to showcase your best work, and  highlight your involvement in challenging projects.  It provides a great talking point during an interview, and gives more insight into your work than a resume alone could.   A programming portfolio can help you stand out from a sea of other candidates.</p>
<p><img src="http://grok-code.com/wp-content/uploads/1567072848_5bcaa8bfa7.jpg" alt="Portfolio Briefcase" align="left" hspace="15" vspace="3" /></p>
<h4> Stand out from the crowd.</h4>
<p>Very few programmers have portfolios.  Judging by the candidates I have interviewed, I would guess less than 5% take the time to put together a portfolio of their work.  So just having a portfolio in the first place can put you ahead of a large number of potential candidates when looking for a job.</p>
<p>Using your portfolio during an interview provides the interviewer with visual cues that bring your work to life.  <em>Showing</em> not just <em>telling</em> is a powerful thing.  It makes your achievements concrete and memorable, which makes you yourself memorable.</p>
<h4>What to include?</h4>
<p>Obviously, you only want to include your best work - this is a chance to showcase your talents.  If you have experience on a lot of projects, you have the luxury of choosing projects based on the image you want to project.  Do you want to show that you have a wide breadth of knowledge? Or do you want to leave the impression that you are an expert with a specific language or technology stack?  Chose the work to include based on how you want an interviewer to see you.</p>
<p>After narrowing down the project list, include relevant details for each project.  Basic details that should always be included are the project name, your role in the development cycle, a description of what the code does, a high-level description of how it works, and the skills, programming language, and technology stack used.</p>
<p>Think about any other optional information that should be included.  If any of the work was open source, you could include source code examples.   Provide the name of the client / company the work was for, especially if they are well-known.  Including lines of code or number of source control check-ins can provide some measure of the size of your contribution to the project.  Consider taking a page from the book of our graphic designer cousins and include relevant images.  Or write about any challenges that were overcome during the course of development.  There are quite a few optional elements that can be included, but I would suggest choosing a couple things that give the most insight into the projects and yourself so that the portfolio stays succinct.</p>
<h4>Showing the portfolio.</h4>
<p>The time to show your portfolio is <em>not</em> during the initial contact with the company.  A potential interviewer isn&#8217;t likely to look at a portfolio before you pass a resume screen.  I know I have trashed a few resumes that tried to be both resume and portfolio at the same time (it&#8217;s very hard to do both well at the same time).  That said, if your programming portfolio is online, it probably won&#8217;t hurt to include a link to it on your resume.</p>
<p>The interview is where the portfolio will really pay off.  Bring plenty of copies, and make sure that everything is well organized so that you can quickly point an interviewer to specific examples when they relate to interview questions.  This gives you the opportunity to <em>show</em> what you have done, not just talk about it.  Use the portfolio as a talking point and visual aid.  I tend to get mildly panicked during interviews, which can make me forgetful; a portfolio gives a quick overview of my important work that I can use to jog my memory and keep myself focused.</p>
<h5></h5>
<h4>Portfolio Examples</h4>
<ul>
<li><a href="http://lesterchan.net/portfolio/programming/" title="Lester Chan's Portfolio">Lester Chan&#8217;s Portfolio</a></li>
<li><a href="http://www.whiteknightlogic.net/code.php" title="White Night Logic's Portfolio">White Night Logic&#8217;s Portfolio</a></li>
<li><a href="http://grok-code.com/jesss-programming-project-portfolio/" title="Jess Johnson's Programming Portfolio">My Programming Portfolio</a></li>
</ul>
<p>Leave a link to your own portfolio in the comments if you think it would make a good example, or if you would like it critiqued.  And of course feel free to critique the examples above (including my own).</p>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<small><p>
	<a href="http://grok-code.com/58/the-power-of-a-programming-portfolio/">Permalink</a> |
     &copy; <a href="http://grok-code.com">GrokCode</a>, 2008.
	</p></small>]]></content:encoded>
			<wfw:commentRss>http://grok-code.com/58/the-power-of-a-programming-portfolio/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Famous Programmers From Adleman to Zimmermann</title>
		<link>http://grok-code.com/37/famous-programmers-from-adleman-to-zimmermann/</link>
		<comments>http://grok-code.com/37/famous-programmers-from-adleman-to-zimmermann/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 01:42:47 +0000</pubDate>
		<dc:creator>jess</dc:creator>
		
		<category><![CDATA[Archives]]></category>

		<category><![CDATA[famous programmers]]></category>

		<category><![CDATA[wikipedia]]></category>

		<guid isPermaLink="false">http://grok-code.com/37/famous-programmers-from-adleman-to-zimmermann/</guid>
		<description><![CDATA[A graphical analysis of 222 famous programmers and the 400 projects they undertook which propelled them to fame.  Graphs break down the projects that made them famous, the number of projects it took to become famous, and the relative numbers of men and women who make up this elite group of famous programmers.]]></description>
			<content:encoded><![CDATA[<p>View an analysis of 222 famous programmers who are revered in the hacker culture as respected innovators, superstar coders, and the heroes of the computer revolution.  Graphs break down the projects that propelled them to fame, the number of projects it took to make them famous, and the relative numbers of men and women who make up this elite group of famous hackers.</p>
<p><img src="http://grok-code.com/wp-content/uploads/programmer-graph1.png" alt="Famous Programmers by Project" /></p>
<p><strong>A note on the definition of famous</strong></p>
<p>So what makes a programmer famous? Inclusion on <a href="http://en.wikipedia.org/wiki/Famous_Programmers" title="Wikipedia's Famous Programmers">Wikipedia&#8217;s page of famous programmers</a>, with the added requirement that famous programmers have their own Wikipedia page.  This gets rid of a few programmers who were added for obvious self-promotion - I&#8217;m looking at you Blazie Engineering guys, whoever you are.  Unfortunately, it also takes a few great programmers out of the running, like Brian Harvey, creator of UCB Logo and <span class="new">Steve Chamberlain</span> of cygwin fame.</p>
<p>By way of a disclaimer, I made one edit to the page while compiling the data.  Carl Sassenrath was credited for operating systems and algorithms, and while Carl is a great guy (and was my boss for a short while) who has made some great contributions to those fields, I didn&#8217;t think it right to credit one person for two <em>entire areas</em> of computer science.  So that leaves 222 programmers who fit the definition of famous, and 400 projects that they worked on.</p>
<p><strong>Famous Projects </strong></p>
<p>Looking at the first graph, if you are looking to get famous, invent a language.  Just over 23% of projects that famous programmers are known for are either inventing a language and/or writing a compiler.  This group of famous programmers includes notables such as James Gosling (Java), Alan Kay (SmallTalk), and Guido van Rossum (Python&#8217;s <a href="http://en.wikipedia.org/wiki/Benevolent_Dictator_for_Life" class="mw-redirect" title="Benevolent Dictator for Life">Benevolent Dictator for Life</a>).</p>
<p>Writing a game, writing an OS, and founding a company or organization are also activities worthy of fame and notoriety.  A small, but substantial number of programmers made their name creating web browsers, authoring books, inventing algorithms, writing command line tools, working on new hardware, creating text editors, creating document markup or formatting languages, inventing protocols, writing databases, or in the office software realm.</p>
<p>Interestingly, 31.49% of projects couldn&#8217;t be put into a category that had more than 5 members.  This is a huge long tail, and includes everything from coining the phrase &#8220;computer virus&#8221; (Leonard Adleman), to Beowulf clustering (Donald Becker), to being a coder on the IBM PC project team who wrote the Control-Alt-Delete keyboard handler (David Bradley).  Another highlight from the &#8216;other&#8217; category is Charles Simonyi, inventor of the dreaded Hungarian notation, and to throw in a bit of random trivia, also the fifth space tourist.</p>
<p><strong>How many projects does it take to become a famous programmer?</strong></p>
<p>Not many.  52.36% of famous programmers are known for their work on only one project.  Obviously these guys have been involved in a variety of projects over the course of their careers, but for the majority, just one project propelled them to fame.  On the flip side of the coin, there are a few people who achieved fame through their work on a number of smaller undertakings.  For example, Lou Montulli is credited with creating the <span class="mw-redirect">Lynx</span> browser, cookies, the blink tag (ugh what were you thinking!), server push and client pull, HTTP proxying, HTTP over SSL, browser integration with animated GIFs, and being a founding member of the HTML working group at <span class="mw-redirect">W3C.</span></p>
<p><img src="http://grok-code.com/wp-content/uploads/programmer-graph2.png" alt="Famous Programmers by Number of Project" /></p>
<p><strong>What happened to the women?</strong></p>
<p>There are few women in the ranks of computer programmers, and pitifully few that can be called famous.   So few in fact, that transsexuals are giving women a run for their money. The dataset includes 215.5 men, 5.5 women and 1 transsexual.  More on that .5 of a person shortly.</p>
<p>Famous women programmers are Adele Goldberg, who worked at Xerox PARC laboratory and wrote a number of SmallTalk books, Grace Hopper, a pioneer in the field who wrote the first compiler, Ada Lovelace, credited as being the first programmer, Emily Short, who played a major role in the development of the interactive fiction development system Inform 7, and Pamela Crossely, creator of SIMPLE for academic management of web pages and related Unicode-capable applications for teaching and research.</p>
<p>Also of note is Roberta Williams, who was only able to credit the women&#8217;s side with half an entry since she shares her notoriety and Wikipedia entry with her husband Ken.  This is the where the .5 comes from in the men&#8217;s and women&#8217;s datasets - together the husband and wife team counts as a full person.  They are credited with founding Sierra On-Line and writing and designing several games, including the popular King&#8217;s Quest series.  Their story is partially chronicled in <a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2FHackers-Computer-Revolution-Steven-Levy%2Fdp%2F0141000511%3Fie%3DUTF8%26s%3Dbooks%26qid%3D1214776182%26sr%3D8-1&amp;tag=grok-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325" title="Hackers: Heroes of the Computer Revolution">Hackers: Heroes of the Computer Revolution</a>.</p>
<p>Danielle Bunten Barry is the lone transsexual in the list.  She is known for the M.U.L.E. multiplayer video game written in 1983.</p>
<p><img src="http://grok-code.com/wp-content/uploads/programmer-graph3.png" alt="programmer-graph3.png" /></p>
<p>So there it is.  The most famous and revered programmers in our culture work on a variety of projects, especially compilers.  They are well-known for only a small number projects, and the overwhelmingly vast majority of them are male.</p>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<small><p>
	<a href="http://grok-code.com/37/famous-programmers-from-adleman-to-zimmermann/">Permalink</a> |
     &copy; <a href="http://grok-code.com">GrokCode</a>, 2008.
	</p></small>]]></content:encoded>
			<wfw:commentRss>http://grok-code.com/37/famous-programmers-from-adleman-to-zimmermann/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Essential Programming Language Toolbox</title>
		<link>http://grok-code.com/25/the-essential-programming-language-toolbox/</link>
		<comments>http://grok-code.com/25/the-essential-programming-language-toolbox/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 02:41:59 +0000</pubDate>
		<dc:creator>jess</dc:creator>
		
		<category><![CDATA[Archives]]></category>

		<category><![CDATA[languages]]></category>

		<guid isPermaLink="false">http://grok-code.com/25/the-essential-programming-language-toolbox/</guid>
		<description><![CDATA[Everybody has a different idea of which languages are important.  And the answer really depends on who you are and what you believe is important.  I came to programming through a theoretical computer science route which initially gave me a shallow understanding of a wide breadth of topics.  In this school of [...]]]></description>
			<content:encoded><![CDATA[<p>Everybody has a different idea of which languages are important.  And the answer really depends on who you are and what you believe is important.  I came to programming through a theoretical computer science route which initially gave me a shallow understanding of a wide breadth of topics.  In this school of thought, languages are just a vehicle for learning about the big ideas in computer science.  And to get at all of the ideas, you need to use a language that lends itself to the topic.</p>
<p><img src="http://grok-code.com/wp-content/uploads/toolbox.jpg" alt="Toolbox" align="left" height="240" hspace="15" width="160" />How would you understand memory management and pointers in Java?  How would you learn about data structures in assembly?   You can&#8217;t.  Thats how.  Java hides the details of memory management and pointers so you don&#8217;t have to deal with it, but knowing what is going on under the covers will make you a better programmer.  Assembly is so low level that if you use it as a vehicle for implementing a B-tree you will loose most of the big ideas about the data structure and algorithms in a sea of register manipulation and instruction set details.  This list is for people who want to get at all the <a href="http://en.wikipedia.org/wiki/List_of_basic_computer_science_topics">big ideas</a> in computer science, which necessitates learning a wide breadth of languages.  Its strongly in the language-as-a-vehicle camp, not the language-as-a-career camp.</p>
<p><strong>Assembly</strong></p>
<p>Assembly will get you right down to the bare metal, working with registers and architecture-specific instruction sets.  In short, assembler requires learning the fundamental architectural principles of modern computing equipment, which is essential for writing better higher level code that takes advantage of bare metal.  It will also give you a fine appreciation for the dangers of writing spaghetti code.</p>
<p>Usage of assembly today is fairly limited, but encompasses many interesting areas such as reverse engineering, embedded systems, viruses, real-time systems, and compilers.  There are a <a href="http://www.ntecs.de/old-hp/uu9r/lang/html/assembler.en.html">variety of assembly languages</a> out there.  MIPs is a good choice for its simple instruction set, and x86 is a good choice for its ubiquity.</p>
<p>Big ideas: bare metal, compilers, optimization, self-modifying code</p>
<p><strong>C<br />
</strong></p>
<p>C is the direct ancestor of some of the most widely used modern languages: C++, Java, C#, and PHP just to name a few.  Knowing any one of these languages will allow you to pick up any of the others easily, and to communicate ideas with developers from a variety of backgrounds.  In short, C is the lingua franca.  Learning C has the added benefit of introducing memory management and pointers - things that higher languages like Java hide with automatic garbage collection and object references.</p>
<p>C  is used all over the place: in every modern non-toy OS, Java VMs, the Ruby interpreter, and the Apache web server.</p>
<p>Big ideas: Memory management, pointers, complexity analysis</p>
<p><strong>A Lisp Dialect</strong></p>
<p>Lisp will make you think differently.  I can think of no better way to put it than that.  The language is simply structured in such a way as to make both problems and their solutions look differently.  The structure of the languages begs the usage of recursion, maps, and closures - things that aren&#8217;t seen nearly as often in other languages.</p>
<blockquote><p>Lisp is worth learning for&#8230; the profound enlightenment experience you   will have when you finally get it; that experience will make you a   better programmer for the rest of your days, even if you never actually use Lisp itself a lot. - Eric Raymond, <a href="http://www.catb.org/~esr/faqs/hacker-howto.html">How to Become a   Hacker</a></p></blockquote>
<p>Lisp dialects are used heavily in artificial intelligence, and as scripting languages within other applications such as Emacs and AutoCAD.  Scheme is a good dialect to learn since it is the language used in <a href="http://www.amazon.com/gp/product/0262011530?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0262011530">SICP</a> - one of the <a href="http://grok-code.com/11/the-top-9-in-a-hackers-bookshelf/">best computer science texts of all time</a>.  Or learn Emacs Lisp for a foray into dynamic scoping.</p>
<p>Big ideas: recursion, closures, artificial intelligence</p>
<p><a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2FJura-Capresso-Impressa-Automatic-Coffee-Espresso%2Fdp%2FB00008I8NT%3Fie%3DUTF8%26s%3Dhome-garden%26qid%3D1214178898%26sr%3D8-2&amp;tag=grok-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325" title="Hackable coffee maker"><img src="http://grok-code.com/wp-content/uploads/coffee.jpg" alt="coffee.jpg" align="left" height="180" hspace="15" width="180" /></a> <strong>A Scripting Language</strong></p>
<p>In an era where we have <a href="http://www.crunchgear.com/2008/06/19/hack-the-jura-coffee-maker-for-fun-and-profit/">hackable</a> <a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2FJura-Capresso-Impressa-Automatic-Coffee-Espresso%2Fdp%2FB00008I8NT%3Fie%3DUTF8%26s%3Dhome-garden%26qid%3D1214178898%26sr%3D8-2&amp;tag=grok-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325" title="hackable coffe maker">Coffee Makers</a> and everything is online, scripting languages are the glue that binds the world together.  These higher level languages can be a way of really strutting your stuff and a platform for putting into practice many of the big ideas in computer science - regular expressions, concurrency, complexity analysis, scalability, architecture, data structures, databases, and so on.</p>
<p>Scripting languages are commonly used for lightweight web applications and are often a good substitute for shell scripting.   Pick up one of the P&#8217;s in the LAMP stack (Perl, PHP, Python) or Ruby.</p>
<p>Big ideas: complexity analysis, scalability, architecture, data structures, databases, etc.</p>
<p>The above four categories of languages have enough breadth to get a taste for the vast majority of the big concepts in computer science, after which it is much easier to absorb select topics in-depth, write solid code in any language, and pick up the unique paradigms of any new language you learn.</p>
<p>What programming languages would you put in your own essential toolbox, and why?</p>
<p><small>Image attribution: </small><img src="http://grok-code.com/wp-content/uploads/cc_icon_attribution_small.gif" alt="Creative Commons" /><small> <a href="http://www.flickr.com/photos/kimberlyhurst/">kimberly hurst</a></small></p>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<small><p>
	<a href="http://grok-code.com/25/the-essential-programming-language-toolbox/">Permalink</a> |
     &copy; <a href="http://grok-code.com">GrokCode</a>, 2008.
	</p></small>]]></content:encoded>
			<wfw:commentRss>http://grok-code.com/25/the-essential-programming-language-toolbox/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sweet Hacks Vol II - Now With the Naked Game</title>
		<link>http://grok-code.com/19/sweet-hacks-vol-ii-now-with-the-naked-game/</link>
		<comments>http://grok-code.com/19/sweet-hacks-vol-ii-now-with-the-naked-game/#comments</comments>
		<pubDate>Tue, 03 Jun 2008 05:19:30 +0000</pubDate>
		<dc:creator>jess</dc:creator>
		
		<category><![CDATA[Archives]]></category>

		<category><![CDATA[sweet hacks]]></category>

		<guid isPermaLink="false">http://grok-code.com/19/sweet-hacks-vol-ii-now-with-the-naked-game/</guid>
		<description><![CDATA[Volume II of the increasingly popular sweet hacks series. In this edition you will find Star Wars, Twitter, Rubik's cubes, webcams, Pong, Legos, and the ever popular Naked Game where you can watch code get naked. Don't forget to vote for your own hack if you would like it to appear in the next edition of the sweet hacks series.  ]]></description>
			<content:encoded><![CDATA[<p>Welcome to Volume II of the sweet hacks series.   A sweet hack can be a clever piece of code, an innovative way of solving a technical problem, or pretty much whatever strikes me as cool.  This edition includes Star Wars, Twitter, Rubik&#8217;s cubes, Webcams, Pong, Legos, and the Naked Game - with such a high concentration of geekiness mixed in with a little naked code you really can&#8217;t go wrong.  Read on to get the full scoop and nominate your own sweet hack for the next edition.  </p>
<p><img src="http://grok-code.com/wp-content/uploads/wikipedia.png" alt="wikipedia.png" align="left" height="130" hspace="15" width="130" /> <a href="http://www.chrisharrison.net/projects/wikiviz/index.html"><strong>WikiViz Graph Renderer</strong><br />
</a></p>
<p>by Chris Harrison</p>
<p>WikiViz is a Java program that renders graphical representations of graphs containing nodes and edges.  In this case, the nodes are Wikipedia category pages and the edges are links between pages.  The algorithm works by first placing each node, and then iteratively moving strongly linked nodes closer together and springing weakly linked nodes farther apart. Overlapping nodes are nudged away from each other by a different proccess.  WikiViz can be used on other datasets such as related books in Amazon.</p>
<hr /><img src="http://grok-code.com/wp-content/uploads/twitter2.png" alt="twitter" align="left" height="130" hspace="15" width="130" /><strong><a href="http://tech.shantanugoel.com/2008/05/14/keep-tab-on-home-security-with-a-webcam-and-twitter.html" title="Home security via twitter and a webcam">Home Security Via Twitter and a Webcam</a></strong></p>
<p>by Shantanu Goel</p>
<p>Shantanu walks through an installation of motion, a FOSS software motion detector program for Linux.  Motion comes with a small web server and can be configured to publish images to the web whenever motion is detected.  It also has the capability to draw a handy box around whatever part of the frame moved.  The tutorial provides a choice of 3 different commands that will send you a Twitter update whenever motion is detected: curl, wget, or a custom Perl script.  Catch burglars.  Or just see what your cats do all day.</p>
<hr />
<img src="http://grok-code.com/wp-content/uploads/star-wars.png" alt="star-wars.png" align="left" height="130" hspace="15" width="130" /><strong>Star Wars on the Command Line</strong></p>
<p>by <a href="http://www.asciimation.co.nz/">Simon Jansen</a> (ASCII Artwork) and <a href="http://www.blinkenlights.nl/services.html">blinkenlights.nl</a> (Telnet availability)</p>
<p>Simon wrote the asciimation, which an animation created by displaying frames of ASCII art one after another.  Each frame  of Star Wars ASCII art was hand made, and is 67 characters wide and 17 high.  The animation is an ongoing (but sporadic) project started in 1997.  The animation is currently the first 18 minutes of the movie and contains 15,953 frames which are displayed at 15 frames per second.  blinkenlights.nl was kind enough to make Simon&#8217;s animation available over telnet.</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">telnet towel.blinkenlights.<span class="kw2">nl</span></div>
</li>
</ol>
</div>
<hr />
<img src="http://grok-code.com/wp-content/uploads/cube.png" alt="cube.png" align="left" height="130" hspace="15" width="130" /><strong><a href="http://jpbrown.i8.com/cubesolver.html">Lego Rubik&#8217;s Cube Solver</a></strong></p>
<p>by JP Brown</p>
<p>The solver first identifies the initial state of the cube using the camera and color recognition software written in VB5 (source available on JP Brown&#8217;s page).  It then calculates a sequence of moves that will solve the cube.  The move sequence algorithm was written by Mike Reid and later ported to Visual C++ for use with this project.  It is guaranteed to solve the cube in 40 moves or less, but the normal case is around 20 moves.  The Lego solver then uses the green or yellow grippers to rotate cube faces, or together with the blue gripper disengaged they can roll the entire cube 90 degrees.  The blue gripper keeps the cube stabilized while the other grippers are rotating faces, and it can be used to spin the entire cube by 90 degrees.</p>
<hr />
<p><img src="http://grok-code.com/wp-content/uploads/pong.png" alt="pong.png" align="left" height="130" hspace="15" width="130" /><a href="http://www.retrodev.co.uk/MiscGames/NakedGame/TheNakedGame.html"><strong>The Naked Game</strong></a></p>
<p>by RetroDev Games</p>
<p>The Naked Game is a Flash animation that pits two primitive artificial intelligences against each other in a game of Pong. The catch is that the Pong code controlling the mechanics of the game is visible below the board, and lines of code can be disabled and re-enabled to see the effect on the game in real time. The Naked Game is billed as the first piece of online conceptual video game art - built to explore the themes of freedom, restriction, and frailty. I&#8217;m not sure about all that, but it is a damn sweet hack.</p>
<hr />If you just can&#8217;t get enough, view the <a href="http://grok-code.com/tag/sweet-hacks/">full Sweet Hacks series</a> for more hacks.If you would like to nominate your own sweet hack for the next issue, send an email to jess [AT] grok-code.com with a short description of the hack and a link. Or if you are a del.icio.us user, tag the page “for:grokcode” to put it into my “links for you section.”  Sweet hacks should have a dedicated web page with an in-depth description of how they work to be included.</p>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<small><p>
	<a href="http://grok-code.com/19/sweet-hacks-vol-ii-now-with-the-naked-game/">Permalink</a> |
     &copy; <a href="http://grok-code.com">GrokCode</a>, 2008.
	</p></small>]]></content:encoded>
			<wfw:commentRss>http://grok-code.com/19/sweet-hacks-vol-ii-now-with-the-naked-game/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Become a More Satisfied Programmer. Today.</title>
		<link>http://grok-code.com/22/become-a-more-satisfied-programmer-today/</link>
		<comments>http://grok-code.com/22/become-a-more-satisfied-programmer-today/#comments</comments>
		<pubDate>Mon, 26 May 2008 22:00:15 +0000</pubDate>
		<dc:creator>jess</dc:creator>
		
		<category><![CDATA[Archives]]></category>

		<category><![CDATA[career]]></category>

		<category><![CDATA[job satisfaction]]></category>

		<guid isPermaLink="false">http://grok-code.com/22/become-a-more-satisfied-programmer-today/</guid>
		<description><![CDATA[In the first post in this series, I talked a bit about different indicators of job satisfaction and how you can rank your own job for each of those criteria.  In this post I&#8217;ll list simple steps anyone can take to improve personal job satisfaction in each of these areas: quality of projects, work-life [...]]]></description>
			<content:encoded><![CDATA[<p>In the first post in this series, I talked a bit about different <a href="http://grok-code.com/20/measuring-programmer-job-satisfaction/" title="Measuring Programmer Job Satisfaction">indicators of job satisfaction</a> and how you can rank your own job for each of those criteria.  In this post I&#8217;ll list simple steps anyone can take to improve personal job satisfaction in each of these areas: quality of projects, work-life balance, bureaucracy &amp; politics, recognition &amp; respect, compensation, and teamwork.</p>
<p><img src="http://grok-code.com/wp-content/uploads/door.jpg" align="left" height="160" hspace="15" width="240" />Before diving into steps for improving job satisfaction, its worth mentioning the most obvious way to improve job satisfaction - switch jobs.  Switching jobs is definitely something to consider if you aren&#8217;t very happy with your current position, and according to <a href="http://blogs.techrepublic.com.com/10things/?p=255">TechRepublic&#8217;s article on 10 signs you aren&#8217;t cut out to be a programmer</a>, if you prefer regular raises to job hopping, you aren&#8217;t even cut out to be a programmer.  So it seems that job hopping is a part of the culture and in many cases the only way to move forward in a programming career.  A job change may be the optimal path, but it usually takes time.</p>
<p>Whether or not you are actively looking for a new job, it makes sense to always be looking for opportunities to become more satisfied with your current position. Right. Now. Why? Work is a big part of life. If you show up every day, you might as well do whatever you can to enjoy it.  If you aren&#8217;t happy it will show in your work.  This means lack of motivation, poor job performance, and bad references in the future.</p>
<h3>Quality of Projects</h3>
<ol>
<li>Spend time working on projects you enjoy in your free time.   Learn a new language.  Contribute to an open source project.  <a href="http://grok-code.com/11/the-top-9-in-a-hackers-bookshelf/" title="Hacking books">Read a book</a>.  Attend a conference.  Start a blog.  This has the added benefit of keeping your skills up to date and making you more employable.</li>
<li>Create side projects that are worthwhile and fun.  Write some utility scripts to automate the deployment process.  Improve the source control system with email notification of check-ins.</li>
<li>Ask to be transferred to another project. Given a choice sane management would rather transfer a star hacker than loose them altogether.</li>
</ol>
<h3>Work-Life Balance</h3>
<ol>
<li>Many hackers do enjoy the long hours and ability to focus all their energy on one task, but if this is your style it is important to take breaks after several days of long hours. Take a day off. Don&#8217;t hoard your vacation time.</li>
<li>Relax a bit and <a href="http://zenhabits.net/">simplify your life</a>.</li>
<li>Schedule time for family, friends, personal projects, and other commitments.  Stick to the schedule.</li>
<li>Reduce your hours. Don&#8217;t be afraid to let management know that there are boundaries.  They will respect you more for it.  Really.</li>
</ol>
<h3>Bureaucracy &amp; Politics</h3>
<ol>
<li>Rejoice in the fact that <a href="http://thedailywtf.com/Articles/Dead-Mans-Switch.aspx">it could be worse</a>.</li>
<li>Avoid gossip and rumors.  Stick to your work and keep your head down.</li>
<li>Gracefully back away from situations that will result in more bureaucracy and politics.</li>
<li>If your manager is able to shield you from this, thank him. Profusely.  Let him know that it&#8217;s appreciated.</li>
</ol>
<h3>Recognition &amp; Respect</h3>
<ol>
<li>Become a mentor.  You can do this on a more informal basis by leaving your door open to junior developers, or in a more formal way by joining a <a href="http://www.islandnet.com/~rcarr/mentorprograms.html#EMPGRAD" title="employee to grad student mentoring">mentoring</a> <a href="http://www.womentechworld.org/ementoring/classifieds/classifieds.cgi" title="WomenTech World Mentoring">program</a>.</li>
<li>Become a project lead. Don&#8217;t wait around for your company to promote you - start an <a href="http://sourceforge.net/index.php">open source project</a>, or help out on an existing project.</li>
<li>Pick a niche and become an authority on it.  Give talks at conferences.  Blog about it.</li>
</ol>
<h3>Compensation</h3>
<ol>
<li>Ask for a raise.  A nice way of doing this is asking for a performance review.  Be prepared to highlight your achievements and specific ways you have contributed to the company&#8217;s success.  Do some research on current salaries in your area and inflation rates and be prepared to quote them.</li>
<li>Barter for better health benefits, longer vacations, more telecommute time, free M&amp;Ms with the green ones picked out, or whatever floats your boat.</li>
<li>Get a certification, go back to school, or take a few <a href="http://www.pntrs.com/t/Qz5HQ0FIPkJBQklHPkpEQUQ" title="classes online">classes online</a>.  Employers often increase compensation as education level goes up.</li>
</ol>
<h3>Teamwork</h3>
<ol>
<li> Get involved in the hiring process so that you can have a hand in building a powerful team.  Hire those 5 star people and do anything you can to keep them happy.</li>
<li>Be glad you don&#8217;t work with <a href="http://thedailywtf.com/Articles/The_Brillant_Paula_Bean.aspx">Paula</a>.</li>
<li>Extend your network outside of your current job to connect with like-minded developers.  Join a LUG, programming association, or alumni group. Use <a href="http://www.linkedin.com/">LinkedIn</a>.</li>
</ol>
<p>Everyone goes though periods of dissatisfaction with their job.  It&#8217;s normal.  I&#8217;m no expert in employee motivation, but I have found that the above steps work for me.  Hopefully you will be able to get some use out of them as well.</p>
<p><small>Photo by <a href="http://www.flickr.com/photos/massics/">Massics</a></small></p>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<small><p>
	<a href="http://grok-code.com/22/become-a-more-satisfied-programmer-today/">Permalink</a> |
     &copy; <a href="http://grok-code.com">GrokCode</a>, 2008.
	</p></small>]]></content:encoded>
			<wfw:commentRss>http://grok-code.com/22/become-a-more-satisfied-programmer-today/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Measuring Programmer Job Satisfaction</title>
		<link>http://grok-code.com/20/measuring-programmer-job-satisfaction/</link>
		<comments>http://grok-code.com/20/measuring-programmer-job-satisfaction/#comments</comments>
		<pubDate>Tue, 06 May 2008 00:11:34 +0000</pubDate>
		<dc:creator>jess</dc:creator>
		
		<category><![CDATA[Archives]]></category>

		<category><![CDATA[career]]></category>

		<category><![CDATA[job satisfaction]]></category>

		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://grok-code.com/20/measuring-programmer-job-satisfaction/</guid>
		<description><![CDATA[Are you satisfied with your job?  Are you satisfied with where your career path is taking you?  These are important questions, and I try to take time to think about this every 6 months or so.  Its usually trivial to make a general statement rating job satisfaction: &#8220;Yeah I like my job.&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>Are you satisfied with your job?  Are you satisfied with where your career path is taking you?  These are important questions, and I try to take time to think about this every 6 months or so.  Its usually trivial to make a general statement rating job satisfaction: &#8220;Yeah I like my job.&#8221;  or &#8220;My career is going nowhere.&#8221;  But what factors influence programmer job satisfaction?  How can hackers become more satisfied with what they do?</p>
<p>First lets break down the main indicators of job satisfaction, and look at how to measure satisfaction in each of those areas.  In the next post in this mini-series I will write about ways to become more satisfied as a programmer.</p>
<h3>Teamwork</h3>
<p>According to <a href="http://www.codinghorror.com/blog/archives/001033.html">Jeff Atwood</a>, &#8220;The people you choose to work with are the most accurate predictor of job satisfaction I&#8217;ve ever found.&#8221;  This rings true with me.  Thinking back, during the times I was most motivated and happy with what I was doing, I was part of an excellent team of hackers.  We worked well together.  We bounced ideas off of each other.  We were aware of each others strengths and weaknesses, and knew how to maximize the strengths while improving the weaknesses.  We respected each others experience, knowledge, and all around hacker stardom.  Well you get the idea&#8230;</p>
<p>Think of the best hackers you have ever worked with.  Would they want to be on your team?  If not, you are in trouble.  If <em>those hackers</em> wouldn&#8217;t want to be on the team you are on now, its unlikely that your team will be able to attract other top notch hackers and its unlikely that you yourself are happy.</p>
<p>Good teams are made up of good hackers who work well together.  Attracting top notch people is impossible without an environment that cultivates job satisfaction.  So if the working environment doesn&#8217;t rank well for the satisfaction indicators below, it won&#8217;t attract good hackers, and therefore has virtually <em>no chance</em> of cultivating a good team.  This is why the strength of the development team is the number one predictor of job satisfaction.</p>
<h3>Quality of Projects</h3>
<p>Intelligent people get bored doing the same thing all the time.  Hackers are no different.  If they are stuck with the same language, the same boring <a href="http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete">CRUD</a> user interface, the same algorithms they learned in their first year programming,  they will be unhappy.  Most developers crave learning new things and being able to apply them.  Difficult and challenging problems excite them.</p>
<p>Taking some time to think about the skills you have learned lately and the problems you have solved will give you a good idea of not only how satisfied you are in this area, but also how well you are advancing in your career.</p>
<h3>Work-Life Balance</h3>
<p>The hacker stereotype is to work incredibly long hours while surviving on Cheetos and <a href="http://www.jdoqocy.com/click-2960734-10356324?url=http%3A%2F%2Fwww.thinkgeek.com%2Fcaffeine%2Fdrinks%2F2818%2F">Bawls soda</a>.  This <a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2FDeath-March-Developers-Surviving-Impossible%2Fdp%2F0137483104&amp;tag=grok-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325">death march</a> method of software development isn&#8217;t sustainable and will take its toll over time, ultimately leading to burnout and job dissatisfaction.</p>
<p>Taking a look at the number of hours you are working will give some indication of how you rank in the work-life balance area. Many people on the track to burnout aren&#8217;t even aware of it, so talk to family and friends and ask them to help you gauge how well you are balancing work with other activities and obligations.</p>
<h3>Bureaucracy &amp; Politics</h3>
<p>Some amount of bureaucracy and politics is unavoidable, but good management will be able to shield you from it to a great degree.  The only time I found myself without it was during University, and that was more because of warped perspective than anything else.  University bureaucracy was actually pretty bad, but I never thought of it as part of what I was doing.  It just become something totally unrelated to programming; I thought of it more like paying the water bill or taking out the trash.</p>
<p>In general, happy, satisfied hackers are busy coding and are making progress towards a goal.   As a group, programmers do not like to find themselves in endless meetings that accomplish nothing, ensnared in budget disputes, or without adequate resources to perform their best work.  If projects are constantly stalled or held back by requirements that constantly change or are missing, management decisions, or lack of direction, hackers will be frustrated and unhappy.  Worse, if programmers are left with nothing to do due to excessive bureaucracy and policy decisions, they will see that their skills are not being used and are therefore not valued.  This leads not only to dissatisfaction with the bureaucracy, but also causes dissatisfaction with the amount of recognition and respect that they have.</p>
<h3>Recognition and Respect</h3>
<p>People who excel at what they do and are knowledgeable <span style="font-size: 12pt; font-family: 'Times New Roman'"></span>about a subject expect to be taken seriously and consulted with during decision making.  This is as it should be.  Management that disregards the opinions of their technical people or don&#8217;t consult them when it makes sense to do so will be left with uncooperative and dissatisfied developers when it comes time to implement an idea.</p>
<p>Have you been allowed to undertake difficult projects?  Is your opinion sought out?  Are your ideas taken into consideration?  Are you congratulated for meeting important milestones?  This are all good measures of your recognition and respect within a company.  Are you often forced to implement something you don&#8217;t have any control over or disagree with?  Are you often contradicted or marginalized by people who are less knowledgeable? (Careful with that one - make sure you are open to sound technical ideas.)  These are indicators of dissatisfaction.</p>
<h3>Compensation</h3>
<p>This is one of the easiest factors of job satisfaction to quantify.  Some quick research at online job boards gives a good idea of compensation packages for similar jobs in the same area. Discovering compensation packages for people in you own company can also be valuable information.  Obviously if you are under-compensated you will not feel satisfied, and on the flip side if you are compensated well you rank as highly satisfied on this area.</p>
<p>After looking at and evaluating these criteria one by one, I have a much better understanding of my personal job satisfaction.  It is easier to see which areas are working well and which I need to take action on in order to improve my own career satisfaction and general well-being.  In two weeks I will cover steps to increase job satisfaction for each of the factors listed above.</p>
<p>In the meantime, what factors are important to you?</p>
<p>Read the next post in the series: <a href="http://grok-code.com/22/become-a-more-satisfied-programmer-today/" title="Become a More Satisfied Programmer. Today.">Become a More Satisfied Programmer. Today.</a></p>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<small><p>
	<a href="http://grok-code.com/20/measuring-programmer-job-satisfaction/">Permalink</a> |
     &copy; <a href="http://grok-code.com">GrokCode</a>, 2008.
	</p></small>]]></content:encoded>
			<wfw:commentRss>http://grok-code.com/20/measuring-programmer-job-satisfaction/feed/</wfw:commentRss>
		</item>
		<item>
		<title>E2: The (NP-Complete) Kids&#8217; Game with the $2 Million Prize</title>
		<link>http://grok-code.com/10/e2-the-np-complete-kids-game-with-the-2-million-prize/</link>
		<comments>http://grok-code.com/10/e2-the-np-complete-kids-game-with-the-2-million-prize/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 18:15:57 +0000</pubDate>
		<dc:creator>jess</dc:creator>
		
		<category><![CDATA[Archives]]></category>

		<category><![CDATA[C++]]></category>

		<category><![CDATA[E2]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[NP Complete]]></category>

		<category><![CDATA[optimize]]></category>

		<guid isPermaLink="false">http://grok-code.com/10/e2-the-np-complete-kids-game-with-the-2-million-prize/</guid>
		<description><![CDATA[Eternity 2 (E2) is an edge-matching puzzle of 256 pieces with an open $2 million prize for the first person to solve it.  This post looks at 2 solution finders, and gives runtimes on 3 different benchmarks.  The general class of edge-matching problems is NP-Complete, but it in unknown if there are aspects of E2 that can be exploited in order to make it more tractable.  ]]></description>
			<content:encoded><![CDATA[<p>The Eternity 2 (E2) puzzle has attracted the attention of puzzle fanatics, computer programmers, and mathematicians for many reasons, not the least of which is the $2 million prize for being the first to solve it.    E2 is an edge-matching puzzle with 256 pieces.   The general class of edge-matching puzzles is known to be NP-Complete, but it is unknown if there are aspects of E2 that can be exploited to make it tractable.  In the spirit of cooperation, a few people have made their automated solvers available online, and I have provided an overview and back-of-the-napkin analysis of two of them.</p>
<p><a href="http://www.amazon.com/gp/product/B000WUFRQU?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B000WUFRQU" title="Buy Eternity 2"><img src="http://grok-code.com/images/eternity2.jpg" alt="Eternity 2" align="left" height="160" hspace="4" width="160" /></a></p>
<h3>Background</h3>
<p>E2 has 256 square pieces that must be placed on a 16&#215;16 grid.  Each puzzle piece has 4 edges, each with one of 17 possible patterns, which must match the pattern of the neighbor piece that touches that edge.  Each of the edges touching the border must be gray.  There is also one hint piece which must be placed on the board at the indicated position and orientation.</p>
<p>The animation below shows a methodical approach to solving a 4&#215;4 puzzle with no hint piece.  Pieces are taken from the right side and placed on the board on the left.  When a dead end is found and no more pieces can be placed on the board, pieces are removed up until the last decision point and a new piece is tried at that spot.  The algorithm you are seeing in action is a backtracker.</p>
<p><img src="http://grok-code.com/images/e2-final.gif" alt="E2 backtracker" align="bottom" height="230" hspace="5" vspace="5" width="470" /></p>
<h3><a href="http://www.amazon.com/gp/product/B000XQPREU?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B000XQPREU" title="Buy Eternity 2 Clue Puzzle 1"><img src="http://grok-code.com/images/eternity2-clue1.jpg" alt="Enternity 2 Clue Puzzle 1" align="left" hspace="4" /></a></h3>
<h3>Clues &amp; Rules</h3>
<p>An additional hint is provided for solving each of the 4 clue puzzles, for a total of 5 possible hints.  E2 clue puzzles I and III are 6&#215;6, and E2 clue puzzles II and IV are 6&#215;12.   Clue puzzles III and IV are only available in the UK as of this writing. It is not required that the E2 solution use these optional hints, and it is suspected that E2 has more than one possible solution.</p>
<p>In order to win the $2 million prize, submit the solution to the Eternity 2 adjudicators by December 31, 2008.  On the 31st, all entries will be opened and the entry that was submitted first wins the $2 million.   If nobody submitted a complete solution, the competition will continue until December 31, 2010.  A smaller prize may be awarded for the highest scoring partial solution if no complete solution was submitted.  The <a href="http://uk.eternityii.com/competition-rules-eternity-2/" title="E2 rules">complete rules</a> can be found on the official site.</p>
<p>Sounds easy right?  Well&#8230;</p>
<h3><a href="http://www.amazon.com/gp/product/B000XQNQNO?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B000XQNQNO" title="Buy Eternity 2 Clue Puzzle 2"><img src="http://grok-code.com/images/eternity2-clue2.jpg" alt="Eternity 2 Clue Puzzle 2" align="left" height="130" hspace="4" width="130" /></a></h3>
<h3>Solver Implementations</h3>
<p>A few solvers have been made available online in the files section of the <a href="http://games.groups.yahoo.com/group/eternity_two/" title="E2 Discussion">E2 Discussion Group</a>.  I picked two of the most straightforward solvers and ran benchmarks on them.</p>
<p>The first solver I looked at is Doc Smith&#8217;s C++ solver which is based on a solver by Marc Lebel.  Doc&#8217;s solver works by first creating arrays that list the pieces that will have given colors on certain edges.  This means that finding a piece with, say a green left edge and a red top edge, requires indexing the 2 dimensional array storing left and top matching pieces with the code for a green edge and the code for a red edge.  The solver works by starting at the top left corner and tiling towards the bottom right corner (just like in the animation above), so there is no need for an array that would contain matches for say, only top and bottom edges.  If the solver reaches a dead end, it backtracks recursively to the last decision point and tries again.  Once the solver reaches the lower right corner, a solution has been found.</p>
<p>Next I looked Joel&#8217;s solver which is a Java port of the C++ backtrack solver written by Doc Smith.  These two solvers work the same way; they differ only in the implementation language.</p>
<p>The E2 Discussion Group is very active and contains a lot of information on different solving strategies, so if you are interested in more advanced algorithms, have a look there.</p>
<h3><a href="http://www.amazon.co.uk/Tomy-Eternity-II-Clue-Puzzle/dp/B000Y16ESM/ref=sr_1_4?ie=UTF8&amp;s=kids&amp;qid=1208240417&amp;sr=1-4" title="Buy E2 Clue Puzzle 3"><img src="http://grok-code.com/images/eternity2-clue3.jpg" alt="Buy E2 Clue Puzzle 3" align="left" height="130" hspace="4" width="130" /></a>Benchmark Results</h3>
<p>I ran benchmarks on both solvers to compare their performance.  The benchmarks are puzzles similar in design to E2, but of a smaller size. I ran benchmarks on <a href="http://grok-code.com/downloads/A6x6With1Hint.txt">6&#215;6 with 1 hint</a>, <a href="http://grok-code.com/downloads/B8x8With2Hints.txt" title="8x8 benchmark">8&#215;8 with 2 hints</a>, and <a href="http://grok-code.com/downloads/C10x10With3Hints.txt">10&#215;10 with 3 hints</a> puzzles to get an idea of what kind of complexity we can expect from E2.   All of the benchmarks were run on a dual core 2.00Ghz Intel with 1 GB of RAM.  No compiler optimization flags were used for any of the test runs.</p>
<p>Here is a table giving the mean solution time for each of the solvers (the benchmarks had more than one possible solution, so I used the mean time in the table).  On the 10&#215;10 benchmark, I stopped the test after 10 hours.  Neither of the solvers had found a solution at the time.  The complexity of the puzzle increases exponentially in the number of pieces - this is to be expected of an NP-Complete problem.</p>
<table class="entry-table">
<tr>
<td>&nbsp;</td>
<td>6&#215;6</td>
<td>8&#215;8</td>
<td>10&#215;10</td>
</tr>
<tr>
<td>Doc Smith</td>
<td>891 msec</td>
<td>91 min</td>
<td>10+ hours</td>
</tr>
<tr>
<td>Joel</td>
<td>790 msec</td>
<td>107 min</td>
<td>10+ hours</td>
</tr>
</table>
<p>One mildly surprising result is that the Java solver outperforms the C++ solver.  Enough to make a difference solving the 16&#215;16 E2 puzzle?  Not likely.  At this rate it would take more than a lifetime to find a solution for the 16&#215;16.  Improving the solving algorithm will give much better gains than code-level optimizations.</p>
<p>So will you get rich solving E2?  Well, somebody will.  If this type of challenge interests you, its definitely <span style="font-size: 12pt; font-family: 'Times New Roman'"></span>worth a shot.</p>
<h3><a href="http://www.amazon.co.uk/Tomy-Eternity-II-Clue-Puzzle/dp/B000Y124RW/ref=pd_bxgy_k_h_b_cs_text_b?ie=UTF8&amp;qid=1208240417&amp;sr=1-4" title="Buy Eternity 2 Clue Puzzle 4"><img src="http://grok-code.com/images/eternity2-clue4.jpg" alt="Buy E2 Clue Puzzle 4" align="left" height="130" hspace="4" width="130" /></a>Resources:</h3>
<p><a href="http://www.amazon.com/gp/product/B000WUFRQU?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B000WUFRQU" title="Purchase E2">Purchase E2</a> from Amazon</p>
<p><a href="http://grok-code.com/wp-content/uploads/eternityii.java" title="Joel’s Java solver">Joel’s Java solver</a></p>
<p><a href="http://grok-code.com/wp-content/uploads/eternityiihi06b.zip" title="Doc Smith’s C++ solver">Doc Smith’s C++ solver</a></p>
<p><a href="http://games.groups.yahoo.com/group/eternity_two/" title="E2 Discussion">E2 discussion group</a></p>
<p><small>[Disclaimer: Links to amazon.com are affiliate links.]</small></p>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<small><p>
	<a href="http://grok-code.com/10/e2-the-np-complete-kids-game-with-the-2-million-prize/">Permalink</a> |
     &copy; <a href="http://grok-code.com">GrokCode</a>, 2008.
	</p></small>]]></content:encoded>
			<wfw:commentRss>http://grok-code.com/10/e2-the-np-complete-kids-game-with-the-2-million-prize/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Top 9&#189; In a Hacker&#8217;s Bookshelf</title>
		<link>http://grok-code.com/11/the-top-9-in-a-hackers-bookshelf/</link>
		<comments>http://grok-code.com/11/the-top-9-in-a-hackers-bookshelf/#comments</comments>
		<pubDate>Fri, 04 Apr 2008 19:50:36 +0000</pubDate>
		<dc:creator>jess</dc:creator>
		
		<category><![CDATA[Archives]]></category>

		<category><![CDATA[books]]></category>

		<category><![CDATA[development]]></category>

		<category><![CDATA[hacking]]></category>

		<guid isPermaLink="false">http://grok-code.com/11/the-top-9-in-a-hackers-bookshelf/</guid>
		<description><![CDATA[Every hacker should have a good solid dead tree library to draw ideas from and use as reference material. This list has a bit of everything - textbooks you will encounter at top tier computer science universities, books giving insight into the industry, and references you shouldn't be caught without. It is a list of hackers' classics.]]></description>
			<content:encoded><![CDATA[<p>Every hacker should have a good solid dead tree library to draw ideas from and use as reference material.  This list has a bit of everything - textbooks you will encounter at top tier computer science universities, books giving insight into the industry, and references you shouldn&#8217;t be caught without.  It is a list of hackers&#8217; classics. </p>
<p><a href="http://www.amazon.com/gp/product/0201835959?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201835959" title="Buy The Mythical Man Month"><img src="http://grok-code.com/images/21VRW2Wy03L._AA_SL160_.jpg" alt="Buy The Mythical Man Month" align="left" border="0" hspace="20" /></a><a href="http://www.amazon.com/gp/product/0201835959?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201835959"><strong>The Mythical Man Month: Essays on Software Engineering - Anniversary Edition</strong> </a></p>
<p><a href="http://www.amazon.com/gp/product/0201835959?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201835959"> </a></p>
<p>by Fredrick P. Brooks</p>
<p>This is a classic on the human elements of software engineering first published in 1975.  The technology has changed a lot in this time, but the human elements of software engineering have remained the same.    It is a wealth of insight, often quoted, and very well known in the industry.  &#8220;The Mythical Man Month&#8221; describes many commonly occurring problems in large and mid-scale development projects and breaks them down.   Here are a two of the book&#8217;s important principles:</p>
<p>The Mythical Man-Month: Adding manpower to a late software project makes it later.</p>
<p>No silver bullet: There is not a single strategy, technique, or trick that can exponentially raise the productivity of programmers.</p>
<p>I recommend this book not only for programmers, but for anyone managing a software project.  Project managers and programmers alike will appreciate Brooks&#8217; clear, well-thought out points.</p>
<p><a href="http://www.amazon.com/gp/product/0131103628?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0131103628" title="Buy the C Programming Language"><img src="http://grok-code.com/images/21PAWH8TXBL._AA_SL160_.jpg" alt="Buy The C Programming Language" align="left" border="0" hspace="10" /></a></p>
<p><strong><a href="http://www.amazon.com/gp/product/0131103628?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0131103628">The C Programming Language (2nd Edition)</a></strong></p>
<p>by Brian W. Kernighan and Dennis M. Ritchie</p>
<p>Commonly referred to as just K&amp;R, this is the canonical C reference book.  It&#8217;s to the point without being too terse; its detailed enough for a beginner to understand without being bloated. K&amp;R tells you exactly what you need.  Nothing more, nothing less.  At 274 pages this is one of the most compact languages references you will find.  I dare a Java author to come up with something so sweetly concise.</p>
<p>This book is recommended for anyone learning C, and for anyone looking for a C reference book.   K&amp;R is a must read for anyone who is writing a language reference or technical literature.</p>
<p>If you have never programmed before, K&amp;R might not be the best place to start out, but still doable if you are motivated.  Beginners might also consider getting a copy of &#8220;The C Answer Book,&#8221; which gives detailed explanations of solutions to the K&amp;R exercises.</p>
<p><a href="http://www.amazon.com/gp/product/0262011530?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0262011530" title="Buy Structure and Interpretation of Computer Programs"><img src="http://grok-code.com/images/21QYSJQCXDL._AA_SL160_.jpg" alt="Buy Structure and Interpretation of Computer Programs" align="left" border="0" hspace="20" /></a></p>
<p><a href="http://www.amazon.com/gp/product/0262011530?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0262011530" title="Structure and Interpretation of Computer Programs"><strong>Structure and Interpretation of Computer Programs (2nd Edition)<br />
</strong></a></p>
<p>by Harold Abelson and Gerald Jay Sussman</p>
<p>SICP is used in entry level computer science classes at many top tier universities including the University of California - Berkeley and the Massachusetts Institute of Technology.  It uses the Scheme language to introduce many powerful paradigms like recursion, lambda notation, abstraction, and interpreted languages.</p>
<p>I found this book incredibly dense when I first read it for an introductory CS class, and there was still much to learn from a reread several years later after I had a better grasp of the ideas presented here.</p>
<p>If you didn&#8217;t have the opportunity to use this book in the classroom, I would recommend picking it up to see what you missed, especially if you haven&#8217;t used any of the Lisp dialects extensively.</p>
<p><a href="http://www.amazon.com/gp/product/0735619670?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0735619670" title="Buy Code Complete 2"><img src="http://grok-code.com/images/210VQZNQ83L._AA_SL160_.jpg" alt="Buy Code Complete" align="left" border="0" hspace="20" /></a></p>
<p><a href="http://www.amazon.com/gp/product/0735619670?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0735619670" title="Code Complete"><strong class="sans"><span id="btAsinTitle">Code Complete 2: A Practical Handbook of Software Construction</span></strong></a></p>
<p>by Steve McConnell</p>
<p>&#8220;Code Complete 2&#8243; is a highly regarded book about software construction, where McConnell defines construction as mainly programming and debugging, along with some elements of construction planning, detailed design, unit testing, integration, and integration testing.</p>
<p>The book&#8217;s focus is on writing better code. McConnell touches on a wide variety of topics including managing complexity, refactoring, coding style, and writing good comments.</p>
<p>This book is recommended for anyone who wants to write good solid code.  It will save beginners time when learning good coding practices, and is a great refresher for programmers with years of experience who may find that over time they have developed habits that are holding them back.</p>
<p><img src="http://www.assoc-amazon.com/e/ir?t=grok-20&amp;l=as2&amp;o=1&amp;a=0735619670" style="border: medium none  ! important; margin: 0px ! important" border="0" height="1" width="1" /></p>
<p><a href="http://www.amazon.com/gp/product/0262032937?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0262032937" title="Buy Introduction to Algorithms"><img src="http://grok-code.com/images/21Q7F96F63L._AA_SL160_.jpg" alt="Introduction to Algorithms" align="left" border="0" hspace="20" /></a></p>
<p><a href="http://www.amazon.com/gp/product/0262032937?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0262032937" title="Introduction to Algorithms"><strong>Introduction to Algorithms</strong></a></p>
<p>by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein</p>
<p>This is another textbook.  &#8220;Introduction to Algorithms,&#8221; is probably the most popular university-level text for algorithms classes.  It also serves as an excellent reference book.</p>
<p>Even though practically speaking most programmers shouldn&#8217;t be writing their own implementation of, say, quicksort, in a production environment, algorithms knowledge is essential for understanding what kind of asymptotic performance you can expect from libraries and your own code.</p>
<p>&#8220;Introduction to Algorithms,&#8221; is recommended as a reference for any developer looking to brush up on their algorithm skills.   It is also recommended if you are interested in topics like NP-Completeness , randomized algorithms, or Fast Fourier Transformation.  Good math skills are essential if you want to grok all parts of this book.</p>
<p><a href="http://www.amazon.com/gp/product/0201633612?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201633612" title="Buy Design Patterns: Elements of Reusable Object-Oriented Software"><img src="http://grok-code.com/images/21TEHG8K4WL._AA_SL160_.jpg" alt="Buy Design Patterns: Elements of Reusable Object-Oriented Software" align="left" border="0" hspace="20" /></a><a href="http://www.amazon.com/gp/product/0201633612?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201633612" title="Design Patterns: Elements of Reusable Object-Oriented Software"><strong class="sans"><span id="btAsinTitle">Design Patterns: Elements of Reusable Object-Oriented Software</span></strong></a></p>
<p>by Erich Gamma, Richard Helm, Ralph Johnson, and John M. Vlissides</p>
<p>This is a catalog of different object-oriented design patterns.  For each of the 23 patterns that are presented, the authors give an in-depth analysis including a motivating example for the pattern, common pitfalls and trade-offs, related patterns, and sample code in either C++ or Smalltalk.   Some of the patterns covered are Singleton, Observer, Template Method, Iterator, and Proxy.</p>
<p>This book is a must read for intermediate or advanced developers working on object-oriented code.  Coders that are new to object-oriented design would be best served by mastering the basics of an object-oriented language and digging in to non-trivial project before attempting to learn all of the patterns presented here, otherwise the patterns aren&#8217;t likely to &#8220;stick.&#8221;  <img src="http://www.assoc-amazon.com/e/ir?t=grok-20&amp;l=as2&amp;o=1&amp;a=0201633612" style="border: medium none  ! important; margin: 0px ! important" border="0" height="1" width="1" /></p>
<p><img src="http://www.assoc-amazon.com/e/ir?t=grok-20&amp;l=as2&amp;o=1&amp;a=0131103628" style="border: medium none  ! important; margin: 0px ! important" border="0" height="1" width="1" /></p>
<p><a href="http://www.amazon.com/gp/product/0201657880?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201657880" title="Buy Programming Pearls"><img src="http://grok-code.com/images/11JSET5JS2L._AA_SL160_.jpg" alt="Programming Pearls" align="left" border="0" hspace="20" /></a><strong><a href="http://www.amazon.com/gp/product/0201657880?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201657880" title="Programming Pearls">Programming Pearls (2nd Edition)<br />
</a></strong></p>
<p>by Jon Bentley</p>
<p>This is a great book for learning how to approach problems.  Each of the 15 chapters presents a different task, such as sorting phone numbers, creating anagrams, or doing text searches.  The problem is defined, and then Bentley walks through different solutions, providing a discussion and clear analysis of each solution, with a breakdown of programming principles at the end.</p>
<p>&#8220;Programming Pearls,&#8221; contains some very clever ideas, and would be of some use as an algorithm reference for a small class of problems, but the take away of the book is something much bigger and more general: how to approach and solve problems from the perspective of an engineer.</p>
<p>I recommend this book to anyone who enjoys working though programming brain teasers.</p>
<p><a href="http://www.amazon.com/gp/product/0201100886?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201100886" title="Buy Compilers: Principles, Techniques, and Tools "><img src="http://grok-code.com/images/31QZSMS8HCL._AA_SL160_.jpg" alt="Buy Compilers: Principles, Techniques, and Tools " align="left" border="0" hspace="20" /></a><a href="http://www.amazon.com/gp/product/0201100886?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201100886" title="Compilers: Principles, Techniques, and Tools "><strong class="sans"><span id="btAsinTitle">Compilers: Principles, Techniques, and Tools</span></strong></a></p>
<p>by Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman</p>
<p>&#8220;Compilers: Principles, Techniques, and Tools,&#8221; is commonly known simply as the &#8220;dragon book.&#8221;  This is the standard textbook in a theoretical compilers class.  It covers everything you would expect to find in a compilers text: language syntax, parsers, lexical analysis, grammars, intermediate code generation, runtime environments, optimization, etc.  If you haven&#8217;t done a lot of work with these topics, be prepared to learn a whole slew of new termonolgy and concepts: deterministic finite automata, finite state automata, LR parsing, and more.</p>
<p>I particularily enjoyed parts of the dragon book that get down and dirty into the mathematical notation and theory - and this is <em>large </em>theme throughout the book.  If you find regular expressions and state machines facinating you will really enjoy the book.  On the other hand, if you are looking for a text that will introduce modern, practical compiler implementation details you may find the dragon book a bit lacking.  In those respects the dragon book is starting to show its age (this version was copyrighted in 1986).</p>
<p><img src="http://www.assoc-amazon.com/e/ir?t=grok-20&amp;l=as2&amp;o=1&amp;a=0201100886" style="border: medium none  ! important; margin: 0px ! important" border="0" height="1" width="1" /><br />
<img src="http://www.assoc-amazon.com/e/ir?t=grok-20&amp;l=as2&amp;o=1&amp;a=0262032937" style="border: medium none  ! important; margin: 0px ! important" border="0" height="1" width="1" /></p>
<p><a href="http://www.amazon.com/gp/product/0596003307?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596003307" title="Buy Unix Power Tools"><img src="http://grok-code.com/images/31QaIhYqF8L._AA_SL160_.jpg" align="left" border="0" hspace="20" /></a><strong><img src="http://www.assoc-amazon.com/e/ir?t=grok-20&amp;l=as2&amp;o=1&amp;a=0596003307" style="border: medium none  ! important; margin: 0px ! important" border="0" height="1" width="1" /><a href="http://www.amazon.com/gp/product/0596003307?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596003307" title="Unix Power Tools">Unix Power Tools, Third Edition</a></strong></p>
<p>by Shelley Powers, Jerry Peek, Tim O&#8217;Reilly, and Mike Loukides</p>
<p>This is one of the many great books from the O&#8217;Reilly collection.  &#8220;Unix Power Tools,&#8221; weighs in at a hefty 1200 pages, and is full of descriptions of Unix command line tools, usage cases, and shell script syntax examples for all of the major shells.</p>
<p>&#8220;Unix Power Tools,&#8221; is a great reference book and is fairly well organized into self-contained chapters.  If you find yourself reading this book from cover to cover you are an amazing specimen of geekdom.</p>
<p>Much of the information contained within this book can be found more quickly with a Google search, but sometimes its nice to have a dead tree reference as well.</p>
<p>This is one of the few books that is valuable for beginners and experts alike.   Everyone from a complete Unix newbie to a seasoned Systems Administrator has something to gain from &#8220;Unix Power Tools.&#8221;</p>
<p><img src="http://www.assoc-amazon.com/e/ir?t=grok-20&amp;l=as2&amp;o=1&amp;a=0201835959" style="border: medium none  ! important; margin: 0px ! important" border="0" height="1" width="1" /></p>
<p><a href="http://www.amazon.com/gp/product/0517226952?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0517226952" title="Buy The Ultimate Hitchhiker's Guide"><img src="http://grok-code.com/images/21KTA5XXZ8L._AA_SL160_.jpg" alt="The Ultimate Hitchhiker's Guide" align="left" border="0" hspace="20" /></a><a href="http://www.amazon.com/gp/product/0517226952?ie=UTF8&amp;tag=grok-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0517226952" title="The Ultimate Hitchhiker's Guide"><strong>The Ultimate Hitchhiker&#8217;s Guide: Five Complete Novels and One Story</strong></a></p>
<p>by Douglas Adams</p>
<p>Well this book isn&#8217;t technically about hacking, but your geek card is hereby revoked if you haven&#8217;t at least read this &#8220;increasingly inaccurately named,&#8221; Hitchhiker&#8217;s Trilogy.  It contains all 5 books in the Trilogy: &#8220;The Hitchhiker&#8217;s Guide to the Galaxy,&#8221; &#8220;The Restaurant at the End of the Universe,&#8221; &#8220;Life, The Universe and Everything,&#8221; &#8220;So Long, and Thanks for All the Fish,&#8221; and &#8220;Mostly Harmless,&#8221; plus the short &#8220;Young Zaphod Plays it Safe.&#8221;</p>
<p>Be entertained.  Discover the answer to life, the universe, and everything.  Learn how to make a Pan Galactic Gargle Blaster.  And most of all don&#8217;t panic!</p>
<p>This edition is bound in beautiful black leather and has a silk ribbon bookmark sewn into it.  It&#8217;s like reading a very nice Bible, only more believable.  (Mandatory disclaimer before any trolls find me: That was a joke.)</p>
<p>That&#8217;s it for my top 9½.  What would you put in yours?</p>
<p>[<strong>Update: </strong>Have a look at the follow-up list, <a href="http://grok-code.com/60/5%c2%bd-more-books-in-a-hacker%e2%80%99s-bookshelf/" title="5½ More Books In a Hacker’s Bookshelf">5½ more books in a hacker&#8217;s bookshelf</a>.]</p>
<p><small><font color="#999999">[Disclaimer: The links above are affiliate links, which means if you buy something from Amazon after following a link from GrokCode, you pay the same amount and I will get a percentage of the sale to help support this site (which would make me smile).] </font></small></p>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<small><p>
	<a href="http://grok-code.com/11/the-top-9-in-a-hackers-bookshelf/">Permalink</a> |
     &copy; <a href="http://grok-code.com">GrokCode</a>, 2008.
	</p></small>]]></content:encoded>
			<wfw:commentRss>http://grok-code.com/11/the-top-9-in-a-hackers-bookshelf/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sweet Hacks - Vol I</title>
		<link>http://grok-code.com/14/sweet-hacks-vol-i/</link>
		<comments>http://grok-code.com/14/sweet-hacks-vol-i/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 04:00:26 +0000</pubDate>
		<dc:creator>jess</dc:creator>
		
		<category><![CDATA[Archives]]></category>

		<category><![CDATA[development]]></category>

		<category><![CDATA[sweet hacks]]></category>

		<guid isPermaLink="false">http://grok-code.com/14/sweet-hacks-vol-i/</guid>
		<description><![CDATA[Volume I of Sweet Hacks - a regular series highlighting clever pieces of code, innovative ways of solving a technical problem, or just a cool use of technology. I put together these 5 hacks that I think are really sweet.  Don't forget to nominate your own sweet hacks for the next issue.

]]></description>
			<content:encoded><![CDATA[<p>A sweet hack can be a clever piece of code, an innovative way of solving a technical problem, or just a cool use of technology.  I put together a list of 5 hacks that I think are really sweet.</p>
<p>I am making Sweet Hacks a regular series here at GrokCode, turning it into a blog carnival that runs every three months.  If you would like to nominate your own sweet hack for the next issue, send an email to jess [AT] grok-code.com with a short description of the hack and a link. Or if you are a del.icio.us user, tag the page &#8220;for:grokcode&#8221; to put it into my &#8220;links for you section.&#8221;</p>
<ol>
<li> Shamus Young shows us how to create random cartoon-like faces in PHP.  It works by using the GD library to fill an image with a random hue for the background, then randomly chooses and inserts a face shape, eyes, mouth, and other facial features into the image.  Here is the <a href="http://www.shamusyoung.com/twentysidedtale/?p=1463" title="image creation process">full description of the image creation process</a>.  The resulting images are used to create avatars used in the Wordpress Wavatars plugin.</li>
<li>Next up is <a href="http://codepad.org/" title="codepad">codepad</a> by Steven Hazel which allows you to paste code in 10 different languages including C, Perl, Ruby, and Scheme.  Codepad then compiles and executes your code under ptrace in a chroot jail inside a virtual machine.  Steven also describes how he was able to scale codepad after a 1000x increase in traffic on his blog <a href="http://www.hackerdashery.com/2008/03/scaling-at-2am-with-ec2.html" title="hackerdashery">hackerdashery</a>.</li>
<li>Simon Willison shows us how to combine semantically marked html with the jQuery JavaScript library and Google Maps to create one of those new-fangled web 2.0 mashups.  Have a look at his <a href="http://24ways.org/2007/unobtrusively-mapping-microformats-with-jquery" title="code walkthrough">great code walkthough</a> to view the results - a map of restaurants in Brighton.</li>
<li>Ever had to hack something together that ran faster than grep?  James Hicks has.  And he lived to tell about it on his blog <a href="http://isnerd.net/2008/02/26/faster-than-grep/" title="isnerd.net">isnerd.net</a>.  James uses some interesting properties of the data he is matching to write a lighting fast matching program in C.</li>
<li>Last up is a shameless plug for my <a href="http://grok-code.com/12/how-to-write-original-jokes-or-have-a-computer-do-it-for-you/" title="Common Lisp joke generator">Joke Generator written in Common Lisp</a>.  You seed it with a vocabulary and it tries to use this knowledge to create jokes of the form &#8220;What do you get when you cross X with Y.&#8221;  Hilarity ensues!  Although sometimes its more the &#8220;What?!?&#8221; kind of hilarity than the ha ha kind.</li>
</ol>
<p>Well thats it for this installment of Sweet Hacks.  Don&#8217;t forget to let me know about your own hacks.</p>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<small><p>
	<a href="http://grok-code.com/14/sweet-hacks-vol-i/">Permalink</a> |
     &copy; <a href="http://grok-code.com">GrokCode</a>, 2008.
	</p></small>]]></content:encoded>
			<wfw:commentRss>http://grok-code.com/14/sweet-hacks-vol-i/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.889 seconds -->
<!-- Cached page served by WP-Cache -->
