<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Code and comments</title>
	<atom:link href="http://wilsonericn.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://wilsonericn.wordpress.com</link>
	<description>Practical and theoretical aspects of software development</description>
	<lastBuildDate>Sat, 11 Feb 2012 01:32:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='wilsonericn.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Code and comments</title>
		<link>http://wilsonericn.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://wilsonericn.wordpress.com/osd.xml" title="Code and comments" />
	<atom:link rel='hub' href='http://wilsonericn.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Be the worst</title>
		<link>http://wilsonericn.wordpress.com/2012/02/10/be-the-worst/</link>
		<comments>http://wilsonericn.wordpress.com/2012/02/10/be-the-worst/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 10:50:29 +0000</pubDate>
		<dc:creator>Eric Wilson</dc:creator>
				<category><![CDATA[commentary]]></category>
		<category><![CDATA[career]]></category>
		<category><![CDATA[craftmanship]]></category>

		<guid isPermaLink="false">http://wilsonericn.wordpress.com/?p=654</guid>
		<description><![CDATA[You know you aren&#8217;t the best programmer out there. You haven&#8217;t created an open source project in your free time. You probably haven&#8217;t even contributed a patch. You don&#8217;t go to all of the hip conferences to learn about the latest &#8220;latest and greatest&#8221; technologies. You don&#8217;t give talks at the local user group, and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wilsonericn.wordpress.com&amp;blog=25747652&amp;post=654&amp;subd=wilsonericn&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>You know you aren&#8217;t the best programmer out there. You haven&#8217;t created an open source project in your free time. You probably haven&#8217;t even contributed a patch. You don&#8217;t go to all of the hip conferences to learn about the latest &#8220;latest and greatest&#8221; technologies. You don&#8217;t give talks at the local user group, and you don&#8217;t have a widely read blog.</p>
<p>But you aren&#8217;t the worst programmer either. You try to do your work well and you read a few technical books a year. You attend a user group or two when it fits in your schedule. There are a few technologies that you understand fairly well, and others on your team look to you for help in your areas of relative expertise.</p>
<p>The problem is, you are in a rut. You aren&#8217;t gaining skills as quickly as you were last year. You aren&#8217;t exactly thrilled about your current job, but not so dissatisfied that you want to take the chance of trading your known problems for unknown problems. What to do?</p>
<p><span id="more-654"></span></p>
<p>You need to <em>be the worst</em>. It&#8217;s time to get that job that you think you don&#8217;t qualify for, and work among developers that are all better than you. Don&#8217;t just apply for a different job, apply for the best job you can.</p>
<p>After I had some experience as a Java web developer, I somehow managed to get on as a consultant with <a href="http://www.pillartechnology.com/" target="_blank">Pillar Technology</a>, which hires some of the best software developers in my area. Some of them have written technology books, they regularly speak at user groups, they contribute to (or create) open source projects, they host code-retreats, and they all live and breath code. It was obvious to me that I didn&#8217;t really belong with these guys.</p>
<p>To say that you will be pushed and challenged in such a situation is a truism, but it is amazing to me how much my view of the IT world changed from a relatively short time at Pillar. During that time I gained significant work experience a variety of technologies that I hadn&#8217;t used before, with opportunities to learn from real experts, and I experienced agile software development, TDD, pair programming, and continuous integration along with a team that was very committed to delivering excellent software. I also found myself spending my own time learning technologies that I wasn&#8217;t working in, like Haskell, Python, Ruby, RSpec, Git, and Vim, because there was constant conversation about new or interesting languages, technologies, and tools.</p>
<p>In the end, working at Pillar did not make me as good as the Pillar guys, in my view. But it gave me an opportunity to understand what great developers look like, and to see what sort of effort it takes to produce excellence. And their enthusiasm for excellence and delivering valuable software is infectious.</p>
<p>If you try to <em>be the worst</em> you might fall on your face. I had one interview with an excellent start-up in the area where it was clear that I was out of my league. I had suspected that this might be the case, but I made it through the phone screen, so I went for it. That isn&#8217;t a fun experience, and it comes at the expense of time and emotional investment, but you simply can&#8217;t know until you try. And really, if you aren&#8217;t concerned about the possibility of being exposed and embarrassed, then it is likely that you are aiming too low.</p>
<p>You&#8217;ll never be the best. But if you have the courage to <em>be the worst</em>, you may find yourself significantly better in the end.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wilsonericn.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wilsonericn.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wilsonericn.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wilsonericn.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wilsonericn.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wilsonericn.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wilsonericn.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wilsonericn.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wilsonericn.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wilsonericn.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wilsonericn.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wilsonericn.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wilsonericn.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wilsonericn.wordpress.com/654/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wilsonericn.wordpress.com&amp;blog=25747652&amp;post=654&amp;subd=wilsonericn&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wilsonericn.wordpress.com/2012/02/10/be-the-worst/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">wilsonericn</media:title>
		</media:content>
	</item>
		<item>
		<title>Book review: Effective Java by Joshua Bloch</title>
		<link>http://wilsonericn.wordpress.com/2012/02/08/book-review-effective-java-by-joshua-bloch/</link>
		<comments>http://wilsonericn.wordpress.com/2012/02/08/book-review-effective-java-by-joshua-bloch/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 12:58:54 +0000</pubDate>
		<dc:creator>Eric Wilson</dc:creator>
				<category><![CDATA[reviews]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[craftmanship]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://wilsonericn.wordpress.com/?p=583</guid>
		<description><![CDATA[If you write Java as part of you job, you need to read this book. If you are learning Java, and hope to write Java as part of a future job, you need to read this book. So for many developers, the question of whether you should read this book is answered very quickly. The [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wilsonericn.wordpress.com&amp;blog=25747652&amp;post=583&amp;subd=wilsonericn&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683"><img class="alignright size-full wp-image-586" title="effectivejava" src="http://wilsonericn.files.wordpress.com/2011/12/effectivejava1.jpeg?w=700" alt=""   /></a>If you write Java as part of you job, you need to read this book. If you are learning Java, and hope to write Java as part of a future job, you need to read this book. So for many developers, the question of whether you should read this book is answered very quickly. The most important questions that remain are <em>when</em> to read Effective Java, and <em>why</em> to read Effective Java.</p>
<p>This is not a book to read to learn Java, Bloch assumes throughout that you have a familiarity with the language. It is also not a book to help you take the next steps after learning core Java, such as learning popular APIs such as JDBC, Java EE, or Swing. Effective Java is unlikely to equip you to accomplish any programmatic goal in Java that you were unable to code before reading it.</p>
<p>If you are overly pragmatic, it may seem that this book meets no real need. But if you have learned several languages, the purpose of this book, and the importance of books like this, is obvious.<span id="more-583"></span></p>
<p>Why read this book? To learn how Java ought to be written. Any programming task can be coded in a variety of ways, and Effective Java is about writing Java code that is understandable, maintainable, and fits with the design of the language. In other words, Effective Java will teach you how to work with Java, rather than working against it.</p>
<p>As for when to read this book, you should get this book as soon as can write code in Java. This is the book to get when you find yourself thinking, &#8220;I know <em>a</em> way to do it, but I&#8217;m wondering what is the <em>right</em> way.&#8221;</p>
<p>The book is structured with 78 &#8220;items&#8221; divided into ten sections, including &#8220;Classes and Interfaces&#8221;, &#8220;Generics&#8221;, &#8220;Enums and Annotations&#8221;, &#8220;Exceptions&#8221;, &#8220;and &#8220;Concurrency.&#8221; Each item takes a narrow topic and argues for a preferred practice. Some items in the &#8220;Classes and Interfaces&#8221; section are &#8220;Favor composition over inheritance&#8221;, &#8220;Design and document for inheritance or else prohibit it&#8221;, and &#8220;Prefer interfaces to abstract classes.&#8221; Each item is supported with concise arguments and brief examples, and often suggestions of possible exceptions to the rule. This is a very easy read, due to the short chapters and Bloch&#8217;s clear exposition. Each entry is like a blog post, easily digested in a short amount of time.</p>
<p>This book is a classic that will continue to fill an important need for as long as Java is relevant.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wilsonericn.wordpress.com/583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wilsonericn.wordpress.com/583/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wilsonericn.wordpress.com/583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wilsonericn.wordpress.com/583/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wilsonericn.wordpress.com/583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wilsonericn.wordpress.com/583/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wilsonericn.wordpress.com/583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wilsonericn.wordpress.com/583/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wilsonericn.wordpress.com/583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wilsonericn.wordpress.com/583/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wilsonericn.wordpress.com/583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wilsonericn.wordpress.com/583/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wilsonericn.wordpress.com/583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wilsonericn.wordpress.com/583/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wilsonericn.wordpress.com&amp;blog=25747652&amp;post=583&amp;subd=wilsonericn&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wilsonericn.wordpress.com/2012/02/08/book-review-effective-java-by-joshua-bloch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">wilsonericn</media:title>
		</media:content>

		<media:content url="http://wilsonericn.files.wordpress.com/2011/12/effectivejava1.jpeg" medium="image">
			<media:title type="html">effectivejava</media:title>
		</media:content>
	</item>
		<item>
		<title>Jeff Atwood does more good work</title>
		<link>http://wilsonericn.wordpress.com/2012/02/06/jeff-atwood-does-more-good-work/</link>
		<comments>http://wilsonericn.wordpress.com/2012/02/06/jeff-atwood-does-more-good-work/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 02:24:25 +0000</pubDate>
		<dc:creator>Eric Wilson</dc:creator>
				<category><![CDATA[commentary]]></category>
		<category><![CDATA[career]]></category>
		<category><![CDATA[stackoverflow]]></category>

		<guid isPermaLink="false">http://wilsonericn.wordpress.com/?p=643</guid>
		<description><![CDATA[Jeff Atwood announced that he is leaving Stack Overflow / Stack Exchange after this month in order to have more time for the more important, world-changing work of caring for his young and growing family. The Internet is full of praise for men whose professional successes come at a terrible cost to their wives, and to their [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wilsonericn.wordpress.com&amp;blog=25747652&amp;post=643&amp;subd=wilsonericn&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Jeff Atwood <a title="Farewell, SE" href="http://www.codinghorror.com/blog/2012/02/farewell-stack-exchange.html" target="_blank">announced</a> that he is leaving <a href="http://stackoverflow.com/" target="_blank">Stack Overflow</a> / <a href="http://stackexchange.com/" target="_blank">Stack Exchange</a> after this month in order to have more time for the more important, world-changing work of caring for his young and growing family.</p>
<p>The Internet is full of praise for men whose professional successes come at a terrible cost to their wives, and to their children. Meanwhile we wring our hands at the costs of fatherlessness in our nation. Let us take our hats off to Jeff for his manly choice to do the humble, necessary work that does not lead to public praise.<span id="more-643"></span></p>
<p>Here&#8217;s to you, Jeff, and to all of the <a href="http://www.johndcook.com/blog/2011/12/11/heres-to-the-sane-ones/" target="_blank">sane ones</a>.</p>
<p>Jeff&#8217;s work on Stack Overflow will always have special meaning to me, because of the essential role it played in my vocational change. When I was <a href="http://wilsonericn.wordpress.com/2011/08/01/hello-world/" target="_blank">starting from zero at age 36</a> my only source of programmer culture was the Internet, and Stack Overflow was the most essential part of that. When I was only able to manage one hour a day for programming and I had know idea what I was doing, the ability to get correct answers to noob questions quickly would have been worth significant money. The pace of my progress would have been substantially different without SO, which was huge to a father of four that had real questions about how he would provide for his family.</p>
<p>So thanks for everything, Jeff. Thanks for helping me to care for my family. And thanks especially for caring for yours.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wilsonericn.wordpress.com/643/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wilsonericn.wordpress.com/643/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wilsonericn.wordpress.com/643/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wilsonericn.wordpress.com/643/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wilsonericn.wordpress.com/643/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wilsonericn.wordpress.com/643/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wilsonericn.wordpress.com/643/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wilsonericn.wordpress.com/643/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wilsonericn.wordpress.com/643/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wilsonericn.wordpress.com/643/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wilsonericn.wordpress.com/643/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wilsonericn.wordpress.com/643/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wilsonericn.wordpress.com/643/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wilsonericn.wordpress.com/643/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wilsonericn.wordpress.com&amp;blog=25747652&amp;post=643&amp;subd=wilsonericn&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wilsonericn.wordpress.com/2012/02/06/jeff-atwood-does-more-good-work/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">wilsonericn</media:title>
		</media:content>
	</item>
		<item>
		<title>Using find and grep.</title>
		<link>http://wilsonericn.wordpress.com/2012/01/31/using-find-and-grep/</link>
		<comments>http://wilsonericn.wordpress.com/2012/01/31/using-find-and-grep/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 17:15:56 +0000</pubDate>
		<dc:creator>Eric Wilson</dc:creator>
				<category><![CDATA[how-to]]></category>
		<category><![CDATA[command-line]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[grep]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://wilsonericn.wordpress.com/?p=557</guid>
		<description><![CDATA[Back in August of last year, for one of the first posts on my brand-new blog, I put up the slides from a lunch-time presentation that I gave on find, grep, sed, and awk. I put it up so that it would be available as reference to those that attended the talk, even though the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wilsonericn.wordpress.com&amp;blog=25747652&amp;post=557&amp;subd=wilsonericn&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Back in August of last year, for one of the first posts on my brand-new blog, I put up the slides from a lunch-time presentation that I gave on <a title="Find, grep, sed, and awk" href="http://wilsonericn.wordpress.com/2011/08/25/find-grep-sed-and-awk/" target="_blank">find, grep, sed, and awk.</a> I put it up so that it would be available as reference to those that attended the talk, even though the slides weren&#8217;t designed for stand-alone use, and slides make a poor Internet reference.</p>
<p>Given the surprising popularity of that post, it seemed reasonable to repackage the information in a format that is more fitting for a blog post.</p>
<p><code>find</code> and <code>grep</code> are incredibly powerful. But many never learn a fraction of what they can do. Did you know that <code>grep</code> can print the surrounding lines? Or that you can search for files based on permissions? Here&#8217;s a collection of examples that might expand your notion of what can be done with <code>find</code> and <code>grep</code>.</p>
<p><span id="more-557"></span>Most <code>find</code> commands follows the pattern:<br />
<code>$ find [PATH] [expression]</code></p>
<p>where the expression consists of one or more of the options shown below. <code>find</code> is recursive by default so the command <code>$ find .</code> would output the entire directory tree at the current location.</p>
<p>Find files named <code>Account.java</code> in <code>src</code> directory:<br />
<code>$ find src -name Account.java</code></p>
<p>Find case insensitive in current directory &#8212; matches <code>README</code>, <code>readme</code>, <code>ReadMe</code>, etc.<br />
<code>$ find . -iname readme</code></p>
<p>Find by wildcard name &#8212; NB: quotes keep shell from expanding wildcards, it is best to always include them.<br />
<code>$ find /etc -name '*xml'</code></p>
<p>Some exclusions &#8212; <code>-not</code> can be replaced with <code>!</code><br />
<code>$ find . -not -name '*java' -maxdepth 4</code></p>
<p>Find with or<br />
<code>$ find . -name '*java' -o -name '*xml'</code></p>
<p>There are several ways to do stuff with the results of your find.  I prefer to use the more intuitive <code>xargs</code> rather than <code>-exec</code>, as the <code>-exec</code> syntax is strange. But -exec gives you the ability to choose whether you want the second command executed once (<code>+</code>) or once per result (<code>\;</code>).<br />
<code>$ find . –name '*.java' | xargs wc –l | sort<br />
$ find . –name '*.java' -exec wc –l {} \; | sort<br />
$ find . –name '*.java' -exec wc –l {} + | sort</code></p>
<p>It is often useful to filter by type. Using <code>find</code> is more reliable than parsing <code>ls</code>.<br />
<code>$ find . -type f<br />
$ find . -type d<br />
$ find . -type l</code></p>
<p>To find all directories in current directory:<br />
<code>$ find . -type d -maxdepth 1</code></p>
<p>Do you want to see the files that have changed today?<br />
<code>$ find . -mtime -1</code></p>
<p>Or the files that have changed in the last 15 minutes?<br />
<code>$ find . -mmin -15</code></p>
<p>Sometimes it is convenient to find the files that are newer (or older) than a certain file.<br />
<code>$ find . -newer foo.txt<br />
$ find . ! -newer foo.txt</code></p>
<p>Of the files that have been modified after a certain date &#8230; or between two dates.</p>
<p><code>$ find . -type f -newermt '2010-01-01'<br />
$ find . -type f -newermt '2010-01-01' ! -newermt '2010-06-01'</code></p>
<p>You can also filter by size. Note that the <code>-</code> finds smaller files, <code>+</code> finds larger files.<br />
<code>$ find . -size -1k<br />
$ find . -size +100M</code></p>
<p>I don&#8217;t know that I&#8217;ve every included permissions in a search, but it could be useful.<br />
<code>$ find . -perm 644<br />
$ find . -perm -u=w<br />
$ find . -perm -ug=x</code></p>
<p>A <code>grep</code> command typically takes the form<br />
<code>$ grep [options] [string/regex] [file or path]</code></p>
<p>For example:<br />
<code>$ grep 'new Account' *.java</code></p>
<p>Note that you do not quote a wildcard expression for <code>grep</code>, in this case we want the shell to expand the expression.</p>
<p><code>grep</code> is not recursive by default, this is altered with the <code>-r</code> flag.<br />
<code>$ grep -r 'Dao[Impl|Mock]' src</code></p>
<p>I use the following flags commonly:<br />
<code>-i</code> Case <strong>i</strong>nsensitive<br />
<code>-w</code> Restricts to <strong>w</strong>ord matches<br />
<code>-n</code> outputs line <strong>n</strong>umber<br />
<code>-c</code> outputs <strong>c</strong>ount of matches</p>
<p>Grepping for multiple terms is useful in theory, but I rarely do it:<br />
<code>$ grep -e foo -e bar baz.txt</code></p>
<p>Whether searching through source code or log files, the ability to display the surrounding lines is often useful. For example:<br />
<code>$ grep -r -A 2 foo src</code></p>
<p>will display the lines that contain <code>foo</code> and the two subsequent lines. Similarly, you can use<br />
<code>-B</code> <strong>b</strong>efore<br />
<code>-C</code> <strong>c</strong>entered (lines both before and after found text.)</p>
<p>That&#8217;s all for now, I hope that this helps you find something soon.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wilsonericn.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wilsonericn.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wilsonericn.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wilsonericn.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wilsonericn.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wilsonericn.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wilsonericn.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wilsonericn.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wilsonericn.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wilsonericn.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wilsonericn.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wilsonericn.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wilsonericn.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wilsonericn.wordpress.com/557/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wilsonericn.wordpress.com&amp;blog=25747652&amp;post=557&amp;subd=wilsonericn&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wilsonericn.wordpress.com/2012/01/31/using-find-and-grep/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">wilsonericn</media:title>
		</media:content>
	</item>
		<item>
		<title>Choose your frontier wisely.</title>
		<link>http://wilsonericn.wordpress.com/2012/01/18/choose-your-frontier-wisely/</link>
		<comments>http://wilsonericn.wordpress.com/2012/01/18/choose-your-frontier-wisely/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 07:18:06 +0000</pubDate>
		<dc:creator>Eric Wilson</dc:creator>
				<category><![CDATA[commentary]]></category>
		<category><![CDATA[career]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://wilsonericn.wordpress.com/?p=560</guid>
		<description><![CDATA[Living with cutting edge technologies is life on the frontier. Exciting new opportunities abound, but so do the challenges and dangers. The frontier is exciting because many mundane problems have been left behind, but it isn&#8217;t long until you miss the the boring benefits of community, the doctors, the policemen, the grocers, the plumbers, the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wilsonericn.wordpress.com&amp;blog=25747652&amp;post=560&amp;subd=wilsonericn&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Living with cutting edge technologies is life on the frontier. Exciting new opportunities abound, but so do the challenges and dangers. The frontier is exciting because many mundane problems have been left behind, but it isn&#8217;t long until you miss the the boring benefits of community, the doctors, the policemen, the grocers, the plumbers, the libraries, and the companionship.<span id="more-560"></span></p>
<p>While Davy Crockett and others explored the American frontier, Samuel Morse lived a much more civilized life in Boston. But no one could accuse Samuel Morse of avoiding a challenge, he lived on the cutting edge of a different frontier, inventing the telegraph, Morse code, the telegraph relay, among other things.</p>
<p>Recognizing the different types of frontiers is necessary. It is immediately absurd to consider developing the telegraph while living off of wild game in the mountains of Tennessee. But it is not immediately obvious to a newcomer to information technology that many interesting programming jobs rely on somewhat boring, established technologies. Or that much (most?) useful software was written in languages that were no longer exciting at the time the software was created.</p>
<p>If you want to have a rewarding and interesting career, it is necessary to head for a frontier that is exciting to you. But you may find that in order to make the progress you want, it is necessary to pull back from some other frontiers, and enjoy the benefits of civilization.</p>
<p>So don&#8217;t let anyone tell you that all the cool kids use Clojure, F#, or CoffeeScript. Other people are building great things and solving hard problems Java, C#, or C++. Sure, some stick with the familiar because they don&#8217;t want to learn anything new. But many others are too focused on inventing the telegraph to leave the laboratory.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wilsonericn.wordpress.com/560/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wilsonericn.wordpress.com/560/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wilsonericn.wordpress.com/560/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wilsonericn.wordpress.com/560/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wilsonericn.wordpress.com/560/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wilsonericn.wordpress.com/560/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wilsonericn.wordpress.com/560/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wilsonericn.wordpress.com/560/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wilsonericn.wordpress.com/560/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wilsonericn.wordpress.com/560/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wilsonericn.wordpress.com/560/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wilsonericn.wordpress.com/560/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wilsonericn.wordpress.com/560/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wilsonericn.wordpress.com/560/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wilsonericn.wordpress.com&amp;blog=25747652&amp;post=560&amp;subd=wilsonericn&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wilsonericn.wordpress.com/2012/01/18/choose-your-frontier-wisely/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">wilsonericn</media:title>
		</media:content>
	</item>
		<item>
		<title>Google &#8211; not an advertising company</title>
		<link>http://wilsonericn.wordpress.com/2012/01/03/google-not-an-advertising-company/</link>
		<comments>http://wilsonericn.wordpress.com/2012/01/03/google-not-an-advertising-company/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 11:19:01 +0000</pubDate>
		<dc:creator>Eric Wilson</dc:creator>
				<category><![CDATA[commentary]]></category>
		<category><![CDATA[advertising]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[media]]></category>
		<category><![CDATA[meme]]></category>

		<guid isPermaLink="false">http://wilsonericn.wordpress.com/?p=610</guid>
		<description><![CDATA[You&#8217;ve seen this meme, right? It usually goes something like this: Google, the search advertising giant &#8230; Can we stop spreading this foolishness? Yes, Google, FaceBook, Twitter, and many other web-based businesses use advertising as a primary source of revenue. But strangely, I&#8217;ve never heard anyone refer to NBC, ABC, and CBS as advertising companies. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wilsonericn.wordpress.com&amp;blog=25747652&amp;post=610&amp;subd=wilsonericn&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>You&#8217;ve seen this meme, right? It usually goes something like this:</p>
<blockquote><p>Google, the <del>search</del> advertising giant &#8230;</p></blockquote>
<p>Can we stop spreading this foolishness? <span id="more-610"></span>Yes, Google, FaceBook, Twitter, and many other web-based businesses use advertising as a primary source of revenue. But strangely, I&#8217;ve never heard anyone refer to NBC, ABC, and CBS as advertising companies. I&#8217;ve also never heard anyone call American Electric Power a billing company, or Toyota a sales/financing conglomerate. We don&#8217;t categorize companies by the most naive interpretation of their revenue model.</p>
<p>But it&#8217;s worse than that. Google doesn&#8217;t offer the most basic services that an advertising company would offer. Will they plan your campaign for you? Help you identify your target demographic? Produce ad copy? The primary advertising related service that Google offers is a place to display your ads. Notice that this is a service that actual advertising agencies do not offer.</p>
<p>If we think for a second about what other companies offer this service (TV, radio, print media), we can recognize that it would be far more accurate to call Google a <em>media</em> company. But don&#8217;t do that either, of course.</p>
<p>If you are concerned about the power and influence that Google has, as our primary distributor of internet information, say it. Just slapping an inappropriate label on the company will erode your credibility and weaken your argument.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wilsonericn.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wilsonericn.wordpress.com/610/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wilsonericn.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wilsonericn.wordpress.com/610/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wilsonericn.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wilsonericn.wordpress.com/610/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wilsonericn.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wilsonericn.wordpress.com/610/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wilsonericn.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wilsonericn.wordpress.com/610/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wilsonericn.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wilsonericn.wordpress.com/610/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wilsonericn.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wilsonericn.wordpress.com/610/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wilsonericn.wordpress.com&amp;blog=25747652&amp;post=610&amp;subd=wilsonericn&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wilsonericn.wordpress.com/2012/01/03/google-not-an-advertising-company/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">wilsonericn</media:title>
		</media:content>
	</item>
		<item>
		<title>Book review: The Little Schemer by Daniel Friedman</title>
		<link>http://wilsonericn.wordpress.com/2012/01/02/book-review-the-little-schemer-by-daniel-friedman/</link>
		<comments>http://wilsonericn.wordpress.com/2012/01/02/book-review-the-little-schemer-by-daniel-friedman/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 12:38:35 +0000</pubDate>
		<dc:creator>Eric Wilson</dc:creator>
				<category><![CDATA[reviews]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[computer-science]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[recursion]]></category>

		<guid isPermaLink="false">http://wilsonericn.wordpress.com/?p=554</guid>
		<description><![CDATA[This is an unusual book. The first thing to know is that it does not contain chapters that are made up of paragraphs. It is a list of problems. The only way to gain anything from this book is to do the problems. Sure you may look at the first few and think you get [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wilsonericn.wordpress.com&amp;blog=25747652&amp;post=554&amp;subd=wilsonericn&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992"><img class="alignright  wp-image-573" title="The Little Schemer" src="http://wilsonericn.files.wordpress.com/2011/12/the-little-schemer-4th-edition_2549_400.jpg?w=183&#038;h=240" alt="The Little Schemer" width="183" height="240" /></a>This is an unusual book. The first thing to know is that it does not contain chapters that are made up of paragraphs. It is a list of problems. The only way to gain anything from this book is to do the problems. Sure you may look at the first few and think you get the idea, and feel like you are doing fine just by reading the problems and solutions and thinking about them. But it won&#8217;t be long until you realize that you have no idea what is going on, and worse, you won&#8217;t know where you lost the trail.</p>
<p>So don&#8217;t be lazy, if you are going to read this book, <a title="Getting Started with The Little Schemer" href="http://wilsonericn.wordpress.com/2011/09/01/getting-started-with-the-little-schemer/" target="_blank">set up an interpreter</a>, and start coding.</p>
<p>The second thing to know about this book is that it does not attempt to teach you the Scheme programming language. Which is good news, because you don&#8217;t really want to be a Scheme programmer. What this book does teach, however, is of interest to every programmer.<span id="more-554"></span></p>
<p>This book is about recursion, and recursion is not optional. Many problems are most effectively modeled with graphs and trees, and if you aren&#8217;t able to identify and implement the natural recursion that exists, you will write code that obscures the actual problem, and is harder to write, debug, and maintain. So if you are not comfortable with recursion, this book is an immediate need.</p>
<p>Of course, if you are a programmer that reads blogs, you wouldn&#8217;t admit to yourself that you are uncomfortable with recursion, so let me say it another way. Working through The Little Schemer will allow you to quickly identify the basic patterns of recursion problems, and to structure your code in the way that will most clearly reveal that pattern.</p>
<p>I encountered recursive thought first in pure mathematics, where very similar thought is required in mathematical induction. Encountering recursion in programming was like meeting an old friend&#8217;s identical twin. The similarities were enough to make me feel more familiar than I was. As a result, my recursive solutions always felt ad hoc, and distinct to the particular problem, rather than following a well-established path.</p>
<p>Regardless of your background, if you are a programmer, or hope to someday be a programmer, and you have any hesitation in implementing recursive solutions, you should work through this book.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wilsonericn.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wilsonericn.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wilsonericn.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wilsonericn.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wilsonericn.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wilsonericn.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wilsonericn.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wilsonericn.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wilsonericn.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wilsonericn.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wilsonericn.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wilsonericn.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wilsonericn.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wilsonericn.wordpress.com/554/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wilsonericn.wordpress.com&amp;blog=25747652&amp;post=554&amp;subd=wilsonericn&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wilsonericn.wordpress.com/2012/01/02/book-review-the-little-schemer-by-daniel-friedman/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">wilsonericn</media:title>
		</media:content>

		<media:content url="http://wilsonericn.files.wordpress.com/2011/12/the-little-schemer-4th-edition_2549_400.jpg" medium="image">
			<media:title type="html">The Little Schemer</media:title>
		</media:content>
	</item>
		<item>
		<title>Should you get certified? Should anyone?</title>
		<link>http://wilsonericn.wordpress.com/2011/12/21/should-you-get-certified-should-anyone/</link>
		<comments>http://wilsonericn.wordpress.com/2011/12/21/should-you-get-certified-should-anyone/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 17:05:49 +0000</pubDate>
		<dc:creator>Eric Wilson</dc:creator>
				<category><![CDATA[commentary]]></category>
		<category><![CDATA[career]]></category>
		<category><![CDATA[certifications]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mcts]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[scjp]]></category>

		<guid isPermaLink="false">http://wilsonericn.wordpress.com/?p=538</guid>
		<description><![CDATA[Technology certification exams have a bad reputation. You don&#8217;t have to go far to find someone deriding the idea that a multiple choice test could be useful in distinguishing programming skill. Some say that they are a waste of time and a marketing scam. Others even claim that they distinguish you in the wrong way, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wilsonericn.wordpress.com&amp;blog=25747652&amp;post=538&amp;subd=wilsonericn&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-thumbnail wp-image-580" title="scjp" src="http://wilsonericn.files.wordpress.com/2011/12/scjp.jpeg?w=150&#038;h=103" alt="scjp" width="150" height="103" />Technology certification exams have a bad reputation. You don&#8217;t have to go far to find someone deriding the idea that a multiple choice test could be useful in distinguishing programming skill. Some say that they are a waste of time and a marketing scam. Others even claim that they distinguish you in the <em>wrong</em> way, and that any certifications that you have earned should be removed from your resume, as they will actually hurt your chances of getting the job you want.</p>
<p>I disagree, and think that there is a place for certifications, but there is some confusion about what you can and cannot get out of them, and when they may be beneficial to your career.<span id="more-538"></span></p>
<h3>What a certification <em>cannot</em> give you</h3>
<h4>Expertise</h4>
<p>This should be obvious. No one becomes an expert at anything by reading books and taking tests. Expertise comes through hard work, and it likely includes reading books, but you don&#8217;t have it until your peers recognize you as an expert.</p>
<h4>Programming ability</h4>
<p>Don&#8217;t imagine that a technology certification will serve as some sort of boot camp / personal trainer that will whip you into shape, increasing your ability to solve programming problems. Testing for the creative thinking and problem solving ability that is essential for programmers would be extremely difficult to do, and the exam authors don&#8217;t really attempt that.</p>
<h4>Evidence of competence</h4>
<p>If you want some letters after your name to prove you will be competent, forget it, it isn&#8217;t possible, and you don&#8217;t want to work for a company that thinks like that.</p>
<h3>What a certification <em>can</em> give you</h3>
<h4>An organized curriculum</h4>
<p>This is one of the biggest benefits. When you are in a new environment you don&#8217;t know what questions to ask and the relative importance of the various things to learn. When you don&#8217;t know what you don&#8217;t know you aren&#8217;t in the best position to manage your education. Using the list of exam topics, perhaps along with an exam study guide, can provide great structure to your efforts.</p>
<h4>Confidence in the rules of the game</h4>
<p>While being a certified programmer doesn&#8217;t mean you are a good programmer, it should mean that you understand which errors will show up at run-time, and which will happen at compile time, which is valuable. There are far too many programmers out their that using guesswork and superstition when it comes to the workings of their primary programming language. A certification can give you confidence regarding the way that code should work.</p>
<h4>An increased chance of interviews for your first or second job.</h4>
<p>When you are trying to distinguish your resume from the resumes of others that are competing for junior-programmer jobs, a certification can help. It shows some initiative, a desire to improve yourself, and it suggests that you are familiar enough with a particular language or technology that you can be quickly taught how it is used in the real world.</p>
<h3>Should I get a certification?</h3>
<p>With the above in mind, it should be easy to decide if a technology certification is good for you. Are you trying to enter an unfamiliar area of technology, and struggling with the documentation? Does your resume seem devoid of technical qualifications? Are you early in your career and unsure what to learn next? If so, a certification could help.</p>
<p>On the other hand, if you are an experienced programmer looking to improve yourself, or hoping to qualify for a better paying job, then a certification is entirely the wrong approach. Some better ideas:</p>
<ul>
<li>Find your week spots in the <a title="Programmer Competency Matrix" href="http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm" target="_blank">Programmer Competency Matrix</a>, and remedy some of them.</li>
<li>Dive into the documentation of one of your favorite tools, become the expert on it.</li>
<li>Read a classic programming book. (<a title="programming books" href="http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read" target="_blank">some ideas</a>)</li>
<li>Build something cool.</li>
</ul>
<h3>My experience</h3>
<p>I took the Sun Certified Java Programmer (SCJP) exam before ever working as a programmer when my resume was a Ph.D. in mathematics and absolutely nothing technical. I&#8217;m convinced it gave me credibility as someone that wanted to become a programmer, and helped me obtain the first interview. Once on the job, it was extremely beneficial to have a well-formed understanding of the language.</p>
<p>About six months later I took the Sun Certified Web Component Developer (SCWCD) exam, which really helped me to understand how Java web applications, and web applications in general, work. I doubt anyone that has hired me since then has cared about that, but employment wasn&#8217;t my primary objective.</p>
<p>SCJP, SCWCD, MCTS, and others can be helpful in beginning a programming career. And they might hurt your chances of getting an interview at Google. But when a newbie or wannabe programmer asks you about certs, please keep the benefits they do offer in mind, and answer the question in a way that makes sense for his level of experience and short-term goals.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wilsonericn.wordpress.com/538/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wilsonericn.wordpress.com/538/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wilsonericn.wordpress.com/538/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wilsonericn.wordpress.com/538/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wilsonericn.wordpress.com/538/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wilsonericn.wordpress.com/538/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wilsonericn.wordpress.com/538/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wilsonericn.wordpress.com/538/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wilsonericn.wordpress.com/538/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wilsonericn.wordpress.com/538/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wilsonericn.wordpress.com/538/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wilsonericn.wordpress.com/538/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wilsonericn.wordpress.com/538/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wilsonericn.wordpress.com/538/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wilsonericn.wordpress.com&amp;blog=25747652&amp;post=538&amp;subd=wilsonericn&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wilsonericn.wordpress.com/2011/12/21/should-you-get-certified-should-anyone/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">wilsonericn</media:title>
		</media:content>

		<media:content url="http://wilsonericn.files.wordpress.com/2011/12/scjp.jpeg?w=150" medium="image">
			<media:title type="html">scjp</media:title>
		</media:content>
	</item>
		<item>
		<title>Five things you DON&#8217;T need to get your first programming job</title>
		<link>http://wilsonericn.wordpress.com/2011/12/19/5-things-you-dont-need-to-get-your-first-programming-job/</link>
		<comments>http://wilsonericn.wordpress.com/2011/12/19/5-things-you-dont-need-to-get-your-first-programming-job/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 13:00:05 +0000</pubDate>
		<dc:creator>Eric Wilson</dc:creator>
				<category><![CDATA[commentary]]></category>
		<category><![CDATA[career]]></category>

		<guid isPermaLink="false">http://wilsonericn.wordpress.com/?p=506</guid>
		<description><![CDATA[How do you get your first programming job? In any field there is the catch-22 of needing experience to get a job and needing a job to get experience. In software development there is good news: You can get experience without a job. The bad news is that figuring out what experience to get can [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wilsonericn.wordpress.com&amp;blog=25747652&amp;post=506&amp;subd=wilsonericn&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>How do you get your first programming job? In any field there is the catch-22 of needing experience to get a job and needing a job to get experience. In software development there is good news: You can get experience without a job.</p>
<p>The bad news is that figuring out what experience to get can be paralyzing. Read the job ads and you find that experience with frameworks like Spring, Struts, and Hibernate are required for most Java jobs. Read forums and blogs and you find that the cool kids that get the startup jobs all have their projects available on GitHub or BitBucket. Some say that mobile jobs are hot. Others say that their are no decent jobs in Java or .NET, that you should be investing in Ruby, Clojure, Scala, and Node.js.</p>
<p>What if you don&#8217;t know where to begin? Let&#8217;s reduce the pressure by considering a list of things that you <em>don&#8217;t</em> need to have before getting your first programming job.<span id="more-506"></span></p>
<h3>#1: Cool projects to display</h3>
<p>If you&#8217;ve built something impressive, great, make the most of it. Most programmers haven&#8217;t, and this will distinguish you. Try to find an employer that cares about such things, as you&#8217;ll enjoy working with others that build stuff in their own time.</p>
<p>If you have nothing to display, don&#8217;t sweat it, most employers won&#8217;t ask. If you have an idea that you would love to try, go for it, you&#8217;ll learn a lot. If you don&#8217;t have any ideas right now, focus on learning the details of your primary language, and work on smaller exercises targeted to the concepts that you are learning.</p>
<h3>#2: A Computer Science degree</h3>
<p>A CS degree won&#8217;t hurt, but you&#8217;ll do just about as well with a bachelors degree in mathematics, physics, engineering, or other majors that require some rigor and logical thinking. If your degree is in English or psychology, then you have a greater burden to demonstrate that you can think logically.</p>
<p>If you have no college degree, then you can forget about employment at large companies until you have some years of experience, and having work that you can display publicly now becomes a necessity.</p>
<h3>#3: Knowledge of multiple programming languages</h3>
<p>Knowing a variety of languages and paradigms is a necessity as your career progresses. But you can get your first job with only knowledge of one language, particularly if it is Java or C#. If your one language is Python or Ruby, then I strongly recommend that you learn Java or C# immediately, as I&#8217;ve never known anyone to get a Python or Ruby job for their <em>first</em> job.</p>
<p>NB: I&#8217;m not counting HTML or SQL as &#8220;programming languages&#8221; here, you should definitely consider a working knowledge of these necessary for your first job.</p>
<h3>#4: Experience with any framework</h3>
<p>If you are looking for a job as a Java web developer, and you see Spring, Struts, or Hibernate listed in virtually every job ad, it isn&#8217;t crazy to think that you should learn one or more of these. But don&#8217;t bother.</p>
<p>First of all, these frameworks are created to solve the problems of large projects, problems that you haven&#8217;t experienced. A far better use of your time before getting a job would be to experience those problems by building a Java web application that uses Servlets and JSP, and connects to the database with JDBC. Second of all, either you have professional experience with a framework or you don&#8217;t, any knowledge you gain with tutorials and toy projects will not be relevant on your resume or in an interview.</p>
<h3>#5: Experience with multiple platforms</h3>
<p>These days we hear a lot about mobile development, do you need to build an app? Building a GUI desktop application seems so fundamental that it shouldn&#8217;t be overlooked, right? Don&#8217;t get distracted. The vast majority of entry-level jobs are in web development, so that should be your focus. I&#8217;ve still never built anything for a mobile device or the desktop, and it doesn&#8217;t seem to be getting in my way.</p>
<h3>Aren&#8217;t all these things important?</h3>
<p>Yes, they are important, and each of them can help you in your job search. My contention is simply that none of them are necessary for the first job. Obviously, some of these are essential for advancing your career.</p>
<h3>So what <em>is</em> necessary for the first job?</h3>
<p>Well, almost nothing is strictly necessary, given the great variety of jobs and potential qualifications. But there are some skills that I would highly recommend in most cases,  and I hope to detail this in a future post.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wilsonericn.wordpress.com/506/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wilsonericn.wordpress.com/506/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wilsonericn.wordpress.com/506/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wilsonericn.wordpress.com/506/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wilsonericn.wordpress.com/506/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wilsonericn.wordpress.com/506/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wilsonericn.wordpress.com/506/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wilsonericn.wordpress.com/506/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wilsonericn.wordpress.com/506/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wilsonericn.wordpress.com/506/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wilsonericn.wordpress.com/506/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wilsonericn.wordpress.com/506/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wilsonericn.wordpress.com/506/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wilsonericn.wordpress.com/506/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wilsonericn.wordpress.com&amp;blog=25747652&amp;post=506&amp;subd=wilsonericn&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wilsonericn.wordpress.com/2011/12/19/5-things-you-dont-need-to-get-your-first-programming-job/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">wilsonericn</media:title>
		</media:content>
	</item>
		<item>
		<title>My first five Lucene mistakes</title>
		<link>http://wilsonericn.wordpress.com/2011/12/14/my-first-5-lucene-mistakes/</link>
		<comments>http://wilsonericn.wordpress.com/2011/12/14/my-first-5-lucene-mistakes/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 17:08:57 +0000</pubDate>
		<dc:creator>Eric Wilson</dc:creator>
				<category><![CDATA[how-to]]></category>
		<category><![CDATA[information-retrieval]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[lucene]]></category>
		<category><![CDATA[mistakes]]></category>

		<guid isPermaLink="false">http://wilsonericn.wordpress.com/?p=462</guid>
		<description><![CDATA[I&#8217;ve been learning my way around Lucene, the popular Java open source information retrieval software library, lately. Which is to say, I&#8217;ve been making mistakes with Lucene. Much of the time spent with any new technology is in making mistakes, discovering mistakes, and correcting mistakes. An inexperienced programmer would view these mistakes as impediments to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wilsonericn.wordpress.com&amp;blog=25747652&amp;post=462&amp;subd=wilsonericn&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-464" title="Lucene_logo_green_300" src="http://wilsonericn.files.wordpress.com/2011/12/lucene_logo_green_300.png?w=700" alt="Lucene logo"   /></p>
<p>I&#8217;ve been learning my way around Lucene, the popular Java open source information retrieval software library, lately. Which is to say, I&#8217;ve been making mistakes with Lucene.</p>
<p>Much of the time spent with any new technology is in making mistakes, discovering mistakes, and correcting mistakes. An inexperienced programmer would view these mistakes as impediments to progress. It&#8217;s far more sensible, and more encouraging, to view these mistakes as the evidence of progress.</p>
<p>With that in mind, I&#8217;ll have no shame in sharing my newbie Lucene blunders, with hopes of helping someone that hasn&#8217;t yet had the opportunity to fail in all of these ways. <span id="more-462"></span></p>
<h3>#1: Using a database.</h3>
<p>As a software developer, I tend to think that data doesn&#8217;t exist unless it is in a relational database. Of course, Lucene would index the data, but that index, like the index in the back of a book, would simply tell me where to find the data. Not true. With Lucene, you can choose for each indexed field whether the field should be stored in the index or not.</p>
<p>Obviously, the right way to store your data will depend on many things, but storing it in the index is the simplest option available. Not only does this mean that you don&#8217;t need to set up, connect to, and populate a database before beginning, but it streamlines the process of going from a text query to the resulting document.</p>
<h3>#2: Storing numeric data in <code>Field</code>, not <code>NumericField</code>.</h3>
<p>Lucene will be able to search on numeric data as text, so long as numbers aren&#8217;t removed during the indexing process, regardless of whether you add it as a <code>Field</code></p>
<pre>doc.add(new Field("chapter", String.valueOf(chapter), Field.Store.YES,
                  Field.Index.NOT_ANALYZED));</pre>
<p>or as a <code>NumericField</code></p>
<p><code>doc.add(new NumericField("chapter", Field.Store.YES, false).setIntValue(chapter));</code></p>
<p>The big difference comes in the ability to perform a query on a range of values. Which can be nice.</p>
<h3>#3: Leaving the <code>IndexWriter</code> open.</h3>
<p>We all know that it&#8217;s important to close resources (files, DB connections, etc.) that are no longer needed. But you can usually get away with being a little sloppy when you are working on a toy project at home with one user. Not so with the <code>IndexWriter</code>.</p>
<p>I indexed the documents that I was hoping to search, failed to call <code>close()</code> on the <code>writer</code>, and found the following files in the index directory:</p>
<pre>_0.fdt
_0.fdx
write.lock</pre>
<p>I should have guessed what this meant, but I didn&#8217;t, and when I tried to search, I received the following:</p>
<pre>org.apache.lucene.index.IndexNotFoundException: no segments* file found in
    org.apache.lucene.store.MMapDirectory@/home/user/path/to/index
    lockFactory=org.apache.lucene.store.NativeFSLockFactory@67e8a1f6: files: [write.lock, _0.fdx, _0.fdt]
  at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:712)
  at org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:75)
  at org.apache.lucene.index.IndexReader.open(IndexReader.java:462)
  ...</pre>
<p>which clues me in to what&#8217;s going on. The <code>IndexWriter</code> that I had long since forgotten about still owned the lock on the index. If I remember to close the <code>writer</code>, then the index directory has no <code>write.lock</code> file, and does have <code>segments_1</code> and <code>segments.gen</code> files. More importantly, my queries no longer give the above stack trace.</p>
<h3>#4: Setting text field to <code>NOT_ANALYZED</code></h3>
<p>In following an example, I used the following to add a free text field to a Document:</p>
<pre>doc.add(new Field("text", text, Field.Store.YES,
                  Field.Index.NOT_ANALYZED));</pre>
<p>I didn&#8217;t give much though to the <code>NOT_ANALYZED</code>, as I didn&#8217;t really care about analysis at this point &#8230; or so I thought.</p>
<p>But I did care about non of my queries finding anything. It&#8217;s pretty simple. <code>NOT_ANALYZED</code> means that the text is not broken down into individual tokens. In this case it can only match exact queries, which only makes sense for fields containing very few words, or fields that you don&#8217;t care to query. For any significant text that you want to be searchable, use <code>ANALYZED</code>.</p>
<h3>#5: Thinking that <code>TopDocs</code> contained my documents</h3>
<p>So I understood that my query, when executed, returned a <code>TopDocs</code> object. I&#8217;ll return that to the caller, who can then dig in and find the desired fields, right? Wrong. <code>TopDocs</code> does contain a <code>ScoreDocs</code> array, each of which contains an <code>id</code> for the relevant document. But to use that <code>id</code> in finding anything else about the document, you need the <code>IndexSearcher</code> itself. So the class that interacted with the <code>IndexSearcher</code> should also have the responsibility of returning something more understandable, perhaps a list of domain objects.</p>
<h3>Your mistakes?</h3>
<p>I hope someone finds value in my first mistakes. What newbie Lucene mistakes have you made?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wilsonericn.wordpress.com/462/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wilsonericn.wordpress.com/462/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wilsonericn.wordpress.com/462/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wilsonericn.wordpress.com/462/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wilsonericn.wordpress.com/462/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wilsonericn.wordpress.com/462/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wilsonericn.wordpress.com/462/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wilsonericn.wordpress.com/462/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wilsonericn.wordpress.com/462/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wilsonericn.wordpress.com/462/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wilsonericn.wordpress.com/462/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wilsonericn.wordpress.com/462/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wilsonericn.wordpress.com/462/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wilsonericn.wordpress.com/462/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wilsonericn.wordpress.com&amp;blog=25747652&amp;post=462&amp;subd=wilsonericn&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wilsonericn.wordpress.com/2011/12/14/my-first-5-lucene-mistakes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">wilsonericn</media:title>
		</media:content>

		<media:content url="http://wilsonericn.files.wordpress.com/2011/12/lucene_logo_green_300.png" medium="image">
			<media:title type="html">Lucene_logo_green_300</media:title>
		</media:content>
	</item>
	</channel>
</rss>
