<?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>Matt Stine&#039;s Blog &#187; development</title>
	<atom:link href="http://mattstine.com/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://mattstine.com</link>
	<description>Thoughts on Java, Groovy, Grails, Agile Development, etc. etc. etc.</description>
	<lastBuildDate>Tue, 17 May 2011 17:02:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='mattstine.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Matt Stine&#039;s Blog &#187; development</title>
		<link>http://mattstine.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://mattstine.com/osd.xml" title="Matt Stine&#039;s Blog" />
	<atom:link rel='hub' href='http://mattstine.com/?pushpress=hub'/>
		<item>
		<title>Design Meeting Patterns/Antipatterns</title>
		<link>http://mattstine.com/2011/05/16/design-meeting-patternsantipatterns/</link>
		<comments>http://mattstine.com/2011/05/16/design-meeting-patternsantipatterns/#comments</comments>
		<pubDate>Mon, 16 May 2011 21:57:50 +0000</pubDate>
		<dc:creator>mattstine</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[facilitation]]></category>
		<category><![CDATA[meetings]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://mattstine.com/?p=429</guid>
		<description><![CDATA[For those of you that don&#8217;t know, I recently returned to the technical ranks as a Software Architect after a three-year stint in management. To make a long story short, I now love my job again. Perhaps I&#8217;ll write the long story in a future blog entry. On to the topic at hand. Today I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=429&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>For those of you that don&#8217;t know, I recently returned to the technical ranks as a Software Architect after a three-year stint in management. To make a long story short, I now love my job again. Perhaps I&#8217;ll write the long story in a future blog entry. On to the topic at hand. Today I led the first significant design discussion that I have led in quite a long time. A few minutes afterward, I was already reflecting on what had occurred and how. The very first thing that I noticed was my drastically different approach to the task. I felt that my facilitation skills were more mature and effective than I remember from previous similar engagements. I&#8217;m not sure if the time I spent in management (where I facilitated quite a few meetings, though much more business-focused ones) helped, but something certainly has.</p>
<p>I also noticed several things that I&#8217;ll call &#8220;pattern vs. antipattern&#8221; tugs of war. Quite often during the meeting I felt the group trying to move our discussion in one direction that I, for better or for worse, thought was ineffective. I would then redirect us on to what I felt was a better path. In true catalog form, here&#8217;s the list:</p>
<ul>
<li><strong>Understand the Problem vs. Jump to the Solution</strong> &#8211; only a couple of minutes into our discussion solutions were being flung about like drunken darts. This situation almost always leads to suboptimal or faulty solutions. As a facilitator, try to ensure that the problem has been clearly stated. If at all possible, write it down on a whiteboard. Make sure everyone agrees that the problem as stated is the problem the group is there to solve. Sure enough, after performing this exercise, we all had a very different and clear understanding of the problem than that with which we walked in the door.</li>
<li><strong>Assume the Worst vs. Assume the Best</strong> &#8211; occasionally the exact details of a requirement are unclear, and not assuming something will totally derail the design discussion. You have a couple of choices. The first is to halt the discussion and get the details cleared up. This is clearly the best solution, as you&#8217;ll no longer have to assume anything. However, it can be the case that the person who can clear things up isn&#8217;t available. Or in some cases, the question you&#8217;ll be asking will require another meeting at another level of the organization. If you find yourself in that spot, and you can&#8217;t wait (we couldn&#8217;t!), then the best approach is to work from the worst possible case scenario. You&#8217;ll then be in the best position to handle whatever answer comes your way. However, our tendency is often to assume the best (&#8220;That will *never* happen!&#8221;). Fight that tendency. However, whatever you choose, follow up at your earliest opportunity.</li>
<li><strong>Basing Decisions on the Current Situation vs. Basing Decisions on History</strong> &#8211; many times the group wanted to veer off into safer territory. In some cases, a possible solution departed significantly from the current design. While this is a valid concern (we do want consistency of design across the system where possible), it is certainly not a trump card. Occasionally the situation at hand will merit a significant departure from the current design. Another way history can rear its ugly head is the assertion that we&#8217;ve always solved similar problems like &#8216;x,&#8217; so we should do so with this problem as well. Again, note the word &#8220;similar.&#8221; All problems are somewhat different and have their own eccentricities. So, rather than working from history, I pushed us back to a clean slate with the statement &#8220;Let&#8217;s stop thinking about the past and start from scratch. We may very well come up with the same solution you guys are proposing, but I&#8217;d rather do so through our own objective analysis and not instinct.&#8221; Guess what. We came up with a different solution that we all felt better about.</li>
<li><strong>Shooting for the &#8220;Best&#8221; Solution vs. the &#8220;Easiest&#8221; Solution</strong> &#8211; now sometimes we can&#8217;t afford the best solution. I grant that. However, I&#8217;m trying to fight the tendency to immediately jump to the &#8220;easiest thing that could possibly work.&#8221; Often this pops up in the first P vs. AP &#8211; if we don&#8217;t clearly understand the problem, sometimes an easy solution jumps out that doesn&#8217;t deal with the underlying details we&#8217;ve yet to uncover. Also, sometimes the best solution is quite simple and elegant. It doesn&#8217;t necessarily have to be harder and more complex than the easiest solution. In fact, sometimes the &#8220;easiest&#8221; solution leads to the most accidental complexity in the long-run. So, shoot for the best solution you can come up with and only then, optimize for cost.</li>
<li><strong>Present Possible Solutions Objectively vs. My Solution is the Best!</strong> &#8211; one would hope that we all start here, but we don&#8217;t. We tend to like our own solutions to problems and want them to &#8220;win.&#8221; Our ego can get in the way of even hearing an alternate solution presented by another team member. I point you to <a href="http://www.code-magazine.com/Article.aspx?quickid=1105121" target="_blank">my colleague Ted Neward&#8217;s post for more on &#8220;egoless programming.&#8221;</a> So, as a facilitator, you&#8217;ve got to make sure that all solutions are presented objectively. I often had to say things like &#8220;OK, let&#8217;s assume before we ever get started that this is a good solution to the problem and not hack away at it until its fully presented, and we all understand it.&#8221; In the end, this insistence led us to choose a solution that none of us (myself included) originally thought we&#8217;d pick.</li>
<li><strong>Validating from Code vs. Validating from Memory</strong> &#8211; more often than not, questions about the existing design/code/behavior will come up. Rather than scratching your head and trying to remember what you wrote six months ago, pull up the code and find out. I can&#8217;t tell you the number of meetings I&#8217;ve attended where baseless assertions were made about existing code, only to require another meeting the next day to revisit the whole discussion once those assertions were proven wrong. Again, as a facilitator, I directed us to solve every problem for which all of the facts were available. We inserted placeholders in our solution where questions remained. Guess what we&#8217;re doing now? Well, I&#8217;m blogging about the meeting, but the rest of us are validating from code. Tomorrow will fill in the blanks!</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mattstine.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mattstine.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mattstine.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mattstine.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mattstine.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mattstine.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mattstine.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mattstine.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mattstine.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mattstine.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mattstine.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mattstine.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mattstine.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mattstine.wordpress.com/429/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=429&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mattstine.com/2011/05/16/design-meeting-patternsantipatterns/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1eaa45fee6a2b0c4b479b2982a4274f4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mattstine</media:title>
		</media:content>
	</item>
		<item>
		<title>Don&#8217;t build software that&#8217;s TOO smart!</title>
		<link>http://mattstine.com/2010/06/03/dont-build-software-thats-too-smart/</link>
		<comments>http://mattstine.com/2010/06/03/dont-build-software-thats-too-smart/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 22:00:35 +0000</pubDate>
		<dc:creator>mattstine</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://mattstine.com/?p=355</guid>
		<description><![CDATA[I had an extremely successful meeting with one of our clients yesterday. We were discussing how we wanted to go about migrating her laboratory from its current system (one that we built several years ago) to our new lab management platform. At some point during the discussion I made the statement, &#8220;We tried to make [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=355&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I had an extremely successful meeting with one of our clients yesterday. We were discussing how we wanted to go about migrating her laboratory from its current system (one that we built several years ago) to our new lab management platform. At some point during the discussion I made the statement, &#8220;We tried to make the previous system too smart! We&#8217;re not repeating that mistake this time.&#8221; Of course, she was in complete agreement with that principle. I&#8217;ve had similar interactions with our other clients that are making migrations (rather than encountering our system for the first time on this new version), and although I&#8217;ve never explicitly stated the principle that way, similar sentiments have abounded.</p>
<p>What is too smart software? In our case, it was a system that attempted to encapsulate every single rule of &#8220;business&#8221; process that occurred within a given laboratory. Many times statements were flung around like &#8220;will it ALWAYS happen this way,&#8221; &#8220;what should we do if this happens?&#8221; etc., etc., etc. We tried to cover every single possibility, and we did an excellent job of preventing users from ever breaking their own rules. What we didn&#8217;t realize (and we&#8217;re not unique &#8211; this problem is RAMPANT) is that the rules CHANGE. Rules come, rules go. Sometimes the rule remains, but there are a few exceptional cases that must be dealt with. Our system simply couldn&#8217;t deal with a world that worked this way &#8211; and thus, our system was completely unfit for the real world.</p>
<p>We set out with a different mission this time. If there&#8217;s one overriding characteristic of SRM (Shared Resource Management) 2.0, it&#8217;s the explicit assumption that the world will change continually. We don&#8217;t attempt to tell you how you must use this system. We capture your data, we invoice for your services, we run your reports &#8211; but YOU, the user gets to decide how you&#8217;ll interact with it. If your workflow changes, we change with you. Now the devil is in the details. It&#8217;s taken roughly 20-30 man years worth of effort to build a system like this, and it hasn&#8217;t been easy. But in the end, we&#8217;re finding that those years were much better spent ENABLING our users rather than PREVENTING our users from getting things done. </p>
<p>I&#8217;m not sure that I&#8217;ve gotten my point across in this brief diatribe, so I&#8217;ll attempt to sum it up here. If you&#8217;re developing a system, figure out the 2 or 3 things that will make your users&#8217; lives AWESOME, and do those 2 or 3 things extremely well. Don&#8217;t do the rest AT ALL. Don&#8217;t build a system that attempts to be smarter than the knowledge expert using it &#8211; it&#8217;s a means to your user&#8217;s end, not an end in itself. </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mattstine.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mattstine.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mattstine.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mattstine.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mattstine.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mattstine.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mattstine.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mattstine.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mattstine.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mattstine.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mattstine.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mattstine.wordpress.com/355/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mattstine.wordpress.com/355/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mattstine.wordpress.com/355/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=355&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mattstine.com/2010/06/03/dont-build-software-thats-too-smart/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1eaa45fee6a2b0c4b479b2982a4274f4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mattstine</media:title>
		</media:content>
	</item>
		<item>
		<title>Dead Programmers Society</title>
		<link>http://mattstine.com/2010/02/16/dead-programmers-society/</link>
		<comments>http://mattstine.com/2010/02/16/dead-programmers-society/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 03:42:40 +0000</pubDate>
		<dc:creator>mattstine</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.mattstine.com/?p=285</guid>
		<description><![CDATA[A local Pastor once gave the advice of introducing ourselves and our kids to dead people. It is his belief that if his kids grow up idolizing the likes of Eric Liddell, Jim Elliot, and Hudson Taylor, they would be far better off than by looking up to many of our so-called &#8220;heroes&#8221; of today. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=285&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A local Pastor once gave the <a href="http://holding2truth.blogspot.com/2009/01/strange-sounding-advice.html">advice of introducing ourselves</a> <a href="http://holding2truth.blogspot.com/2009/02/strange-advice-introducing-our-kids-to.html">and our kids to dead people</a>. It is his belief that if his kids grow up idolizing the likes of Eric Liddell, Jim Elliot, and Hudson Taylor, they would be far better off than by looking up to many of our so-called &#8220;heroes&#8221; of today. I happen to agree with his advice, but that&#8217;s not the subject of tonight&#8217;s blog entry.</p>
<p>I think that this advice is very applicable to us as software developers today. While our industry is still young enough that a great many of our &#8220;founding fathers&#8221; are still around, it is surprising to see how often their work and contributions go unnoticed by the vast majority of us. At the January Memphis/Mid-South Java User Group meeting, our program focused on books that all of us as developers should read. Four of us gave our takes on the topic. Joel Neely, one of a few people that I learn from every time I get near them, pulled yet another rabbit out of his hat by focusing on several books, all of which had been published before the majority of us were out of diapers! One book struck me in particular: <em>A Discipline of Programming</em> by Edsgar W. Dijkstra. In it EWD &#8220;presents a formal approach to developing (non-deterministic!) algorithms, using what we would now call a DSL for algorithm design. Incidentally, that book was published in 1976.&#8221; (Thanks Joel for the excellent summary). I&#8217;d like to pull out just a couple of quotes from that book:</p>
<p><em>A most important, but also a most elusive, aspect of any tool is its influence on the habits of those who train themselves in its use. If the tool is a programming language, this influence is &#8211; whether we like it or not &#8211; an influence on our thinking habits.</em></p>
<p>Just out of curiosity, does this sound anything at all to you like the frequent admonitions to learn a &#8220;language of the year (LOTY)?&#8221; Of course that isn&#8217;t the context of EWD&#8217;s quote, but the underlying principle remains the same. Almost universally accompanying that admonition is a statement along the lines of &#8220;even if you never use it in your day job, it will affect THE WAY YOU THINK about programming during your day job.&#8221;</p>
<p><em>&#8230;a carefully chosen separation of concerns is essential for the design of in all respects, high quality programs&#8230;</em></p>
<p>Does &#8220;loosely coupled, highly cohesive, modular architecture&#8221; come to mind?</p>
<p><em>&#8230;the fact that programming languages could be used as a vehicle for instructing existing automatic computers, has for a long time been regarded as their most important property&#8230;we shall try to redress the balance, and we shall do so by regarding the fact that our algorithms could actually be carried out be a computer as a lucky accidental circumstance that need not occupy a central position in our considerations&#8230;I view a programming language primarily as a vehicle for the description of (potentially highly sophisticated) abstract mechanisms.</em></p>
<p>I hear so much of what is bandied about today as &#8220;new&#8221; embodied in this quote. The calls to liberate programming from its &#8220;C&#8221; roots by banishing primitives, because hey, primitives are only their to keep &#8220;Java from being too slow!&#8221; The calls to favor &#8220;essence over ceremony&#8221; in language design by eliminating boilerplate code in favor of sensible defaults that clear away the noise from the algorithmic intent that we&#8217;re trying to communicate. The constant reminders that it&#8217;s more important for our code to be readable to humans, not to computers, because that&#8217;s what compilers are for.</p>
<p>What&#8217;s the point? The point is that most, if not all, of the ideas that are &#8220;new&#8221; today are simply restatements of past ideas in a different context. A wise man, one much wiser than I, once said &#8220;&#8230;there is nothing new under the sun&#8221; (Ecclesiastes 1:9). Edsgar W. Dijkstra passed from this earth in 2002, but his ideas live on, and they are very much applicable to software developers today. There are may others like him: Donald Knuth, John McCarthy, Alan Turing, David Gries &#8211; some dead, some alive, but all giants upon whose shoulders we stand. We would do well to consider their words.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mattstine.wordpress.com/285/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mattstine.wordpress.com/285/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mattstine.wordpress.com/285/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mattstine.wordpress.com/285/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mattstine.wordpress.com/285/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mattstine.wordpress.com/285/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mattstine.wordpress.com/285/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mattstine.wordpress.com/285/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mattstine.wordpress.com/285/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mattstine.wordpress.com/285/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mattstine.wordpress.com/285/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mattstine.wordpress.com/285/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mattstine.wordpress.com/285/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mattstine.wordpress.com/285/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=285&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mattstine.com/2010/02/16/dead-programmers-society/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1eaa45fee6a2b0c4b479b2982a4274f4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mattstine</media:title>
		</media:content>
	</item>
		<item>
		<title>Mid-Year Review: My Professional Development Goals for 2007-2008</title>
		<link>http://mattstine.com/2008/01/02/mid-year-review-my-professional-development-goals-for-2007-2008/</link>
		<comments>http://mattstine.com/2008/01/02/mid-year-review-my-professional-development-goals-for-2007-2008/#comments</comments>
		<pubDate>Wed, 02 Jan 2008 22:33:00 +0000</pubDate>
		<dc:creator>mattstine</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[goals]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.mattstine.com/?p=55</guid>
		<description><![CDATA[Back in July I posted my professional development goals for the year (My performance review is annually in July, so it&#8217;s a good time to set goals.), and it seemed like a good idea to take a look at my progress while doing the &#8220;New Year&#8217;s Resolution&#8221; thing. Learn Groovy and Grails Andy and Dave [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=55&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Back in July I posted my professional development goals for the year (My performance review is annually in July, so it&#8217;s a good time to set goals.), and it seemed like a good idea to take a look at my progress while doing the &#8220;New Year&#8217;s Resolution&#8221; thing.
<ol>
<li><span style="font-weight:bold;">Learn Groovy and Grails</p>
<p></span>  Andy and Dave suggest learning a new language every year, so this seemed like a good goal for me. I can&#8217;t say that I&#8217;ve truly learned Groovy and Grails in depth, but I did learn them enough <a href="http://www.memphisjug.org/october25%2C2007">to do a presentation on them</a> (as well as Ruby, JRuby, and Rails) at our Java User Group meeting  in October, so I&#8217;ve effectively touched on two languages and two frameworks for those languages. I&#8217;ve since gotten interested in Scala as well. At any rate, I&#8217;d like to go deeper w/ Groovy and Grails as I have time, which is scarce!</p>
</li>
<li><span style="font-weight:bold;">Release </span><span style="font-weight:bold;">HallKeeper</span><span style="font-weight:bold;"> v1.0 as part of #1</span><span style="font-weight:bold;">  </span>
<p>This project seems destined to fail. I haven&#8217;t worked on it in any meaningful way since the summer. I&#8217;ve thought about it in the past week, and I&#8217;d actually like to try doing it in straight Java POJOs with Spring and Hibernate since I&#8217;m more well-versed in that area. At any rate, it really is my lack of spare time that keeps this one on the perpetual back burner.</p>
</li>
<li><span style="font-weight:bold;">Read and LEARN the following books:
<p></span>
<ul>
<li>The Definitive Guide to Grails &#8211; Rocher</li>
<li>The Pragmatic Programmer &#8211; Hunt, Thomas</li>
<li>Computer Algorithms: Introduction to Design &amp; Analysis &#8211; Baase, Van Gelder</li>
<li>Concepts of Programming Languages: Sebesta</li>
<li>Groovy in Action &#8211; Konig
</li>
</ul>
<p> I&#8217;ve pretty much finished #1, got started on #2, and haven&#8217;t really touched the last three. Again, the needs of the moment have necessitated I focus on other areas, particularly other books. Recent projects have pointed me to three additional books I&#8217;d really like to cover this year, so I may not get to my original list. Here are the titles:</p>
<ul>
<li>Working Effectively with Legacy Code &#8211; Feathers</li>
<li>POJOs in Action &#8211; Richardson</li>
<li>Domain Driven Design &#8211; Evans
</li>
</ul>
</li>
<li><span style="font-weight:bold;">Review two books for the </span><span style="font-weight:bold;">JavaLobby</span><span style="font-weight:bold;">/</span><span style="font-weight:bold;">DZone</span><span style="font-weight:bold;"> book review team</span>
<p>This is one I&#8217;ve hit the nail on. I just completed my second book review, which will be published some time in the next few weeks. My first review, <a href="http://matt-stine.blogspot.com/2007/10/ajax-construction-kit-building-plug-and.html">Ajax Construction Kit: Building Plug-and-Play Ajax Applications</a>, was published in October 2007. These have been rather time consuming and have kept me from other projects, so I don&#8217;t plan to take any more reviews this year.</p>
</li>
<li><span style="font-weight:bold;">Pass the Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0 Exam</span>
<p>Haven&#8217;t touched this one yet. Preparing for this will be one of my foci in the coming weeks.</p>
</li>
<li><span style="font-weight:bold;">Write one Java/software development blog article per week</span>
<p>I haven&#8217;t done so hot on this one. OK, let&#8217;s be really honest. I haven&#8217;t come close. However, my recent flurry of entries on The Spring Experience 2007 have gotten me into a bit of a groove. I&#8217;m going to try to keep up the momentum and finish this year strong.</p>
</li>
<li><span style="font-weight:bold;">Attend </span><span style="font-weight:bold;">JavaOne</span><span style="font-weight:bold;"> 2008 or similar conference</span>
<p>I&#8217;ve actually traveled twice since my original post. My first trip was to the <a href="http://nerlscd.biotech.cornell.edu/">Northeast Life Sciences Core Directors Meeting</a> last November at Cornell University in Ithaca, NY. The purpose of this trip was to present and generate interest around our open source shared resource management system for core facilities, <a href="http://stjude-srm.sourceforge.net/">STJUDE-SRM</a>. The trip was a great success. My second trip really fulfills this goal, as I attended <a href="http://www.thespringexperience.com/conference/hollywood/2007/12/index.html">The Spring Experience 2007</a> in Hollywood, FL. This proved to be one of the best technical conferences I&#8217;ve ever attended, and also one of the most fun!</p>
</li>
<li><span style="font-weight:bold;">Start a Memphis/Mid-South Area Java User Group</span>
<p>I don&#8217;t think this goal could have gone any better than it has. In late July I started a <a href="http://groups.google.com/group/memphis-mid-south-jug">Google Group</a> and a small Google Page Creator website to attempt to drum up interest in a Java User Group for the Memphis, TN and surrounding Mid-South area. On July 23, 2007, along comes Diane Tabulog, a technical recruiter with local company <a href="http://www.vaco.com/Technology/tech_about.htm">Vaco Technology</a>, who convinces her company to throw its support behind our JUG. All of a sudden we have an offer for a meeting location, food budget, giveaways, etc. Later, Clayton Naeve, our CIO at St. Jude, agreed to let us use our awesome conference room at our division&#8217;s new offices at 160 Shadyac Avenue to meet, as Vaco&#8217;s facilities were a bit small. On August 15, <a href="http://weblogs.java.net/blog/caroljmcdonald">Carol McDonald</a>, a Java Technology Evangelist from Sun Microsystems, offered to speak at our JUG, and we signed her up for the first meeting. Little by little, all of the necessary pieces started to fall into place, including additional free giveaways from Sun, O&#8217;Reilly, Atlassian, and JetBrains. <a href="http://www.memphisjug.org/september20%2C2007">The first meeting</a> was a great success, and since then we&#8217;ve had two more successful meetings. Our next meeting is Thursday, January 17, 2008. Find out more at <a href="http://www.memphisjug.org">http://www.memphisjug.org</a>.</li>
</ol>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mattstine.wordpress.com/55/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mattstine.wordpress.com/55/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mattstine.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mattstine.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mattstine.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mattstine.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mattstine.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mattstine.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mattstine.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mattstine.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mattstine.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mattstine.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mattstine.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mattstine.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mattstine.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mattstine.wordpress.com/55/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=55&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mattstine.com/2008/01/02/mid-year-review-my-professional-development-goals-for-2007-2008/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1eaa45fee6a2b0c4b479b2982a4274f4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mattstine</media:title>
		</media:content>
	</item>
		<item>
		<title>My Professional Development Goals for 2007-2008</title>
		<link>http://mattstine.com/2007/07/10/my-professional-development-goals-for-2007-2008/</link>
		<comments>http://mattstine.com/2007/07/10/my-professional-development-goals-for-2007-2008/#comments</comments>
		<pubDate>Tue, 10 Jul 2007 19:14:00 +0000</pubDate>
		<dc:creator>mattstine</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.mattstine.com/?p=40</guid>
		<description><![CDATA[I posted earlier on my desire to become a better programmer. Well, I&#8217;ve since put together a plan of action for the next twelve months. I&#8217;ve based some of these goals on suggestions from The Pragmatic Programmer by Andy Hunt and Dave Thomas. Learn Groovy and Grails Andy and Dave suggest learning a new language [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=40&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I posted earlier on my desire to <a href="http://matt-stine.blogspot.com/2007/07/help-me-become-better-programmer.html">become a better programmer</a>. Well, I&#8217;ve since put together a plan of action for the next twelve months. I&#8217;ve based some of these goals on suggestions from <span style="font-style:italic;">The Pragmatic Programmer</span> by Andy Hunt and Dave Thomas.
<ol>
<li><span style="font-weight:bold;">Learn Groovy and Grails</span></p>
<p>Andy and Dave suggest learning a new language every year. I had already informally started learning Groovy and Grails after <span class="blsp-spelling-error" id="SPELLING_ERROR_0">JavaOne</span> 2007. Since I already have a head start on this one, Groovy will be my language for the next year (I&#8217;m learning Grails mainly because of my web development background &#8211; it will provide me more opportunity to apply my Groovy knowledge). This should be an easy way to get started on the goal of a new language each year since my Java knowledge should transfer easily.</p>
</li>
<li><span style="font-weight:bold;">Release </span><span style="font-weight:bold;" class="blsp-spelling-error" id="SPELLING_ERROR_1">HallKeeper</span><span style="font-weight:bold;"> v1.0 as part of #1</span>
<p>Several years ago I started an open source project called <a href="http://code.google.com/p/hallkeeper"><span class="blsp-spelling-error" id="SPELLING_ERROR_2">HallKeeper</span></a>. <span class="blsp-spelling-error" id="SPELLING_ERROR_3">HallKeeper</span> is planned to be a web-based management system for university residence halls. Life got in the way of this project so it lay dormant for a few years. I&#8217;ve recently revived it as sort of a &#8220;lab&#8221; in which to learn Groovy and Grails, and hopefully have a little fun along the way.</p>
</li>
<li><span style="font-weight:bold;">Read and LEARN the following books:</span>
<ul>
<li>The Definitive Guide to Grails &#8211; <span class="blsp-spelling-error" id="SPELLING_ERROR_4">Rocher</span></li>
<li>The Pragmatic Programmer &#8211; Hunt, Thomas</li>
<li>Computer Algorithms: Introduction to Design &amp; Analysis &#8211; <span class="blsp-spelling-error" id="SPELLING_ERROR_5">Baase</span>, Van <span class="blsp-spelling-error" id="SPELLING_ERROR_6">Gelder</span></li>
<li>Concepts of Programming Languages: <span class="blsp-spelling-error" id="SPELLING_ERROR_7">Sebesta</span></li>
<li>Groovy in Action &#8211; <span class="blsp-spelling-error" id="SPELLING_ERROR_8">Konig</span></li>
</ul>
<p>When I say LEARN, I mean I don&#8217;t just want to do a cursory read of these. I want to really engage the concepts presented in each and apply them to my day-to-day work. I already have a head start reading the first two books. The third and fourth books are actually textbooks from my undergraduate education. I could really use a refresher on these concepts, and I think I&#8217;m a much more serious student now as a professional than I was when I was actually a student.</p>
</li>
<li><span style="font-weight:bold;">Review two books for the </span><span style="font-weight:bold;" class="blsp-spelling-error" id="SPELLING_ERROR_9">JavaLobby</span><span style="font-weight:bold;">/</span><span style="font-weight:bold;" class="blsp-spelling-error" id="SPELLING_ERROR_10">DZone</span><span style="font-weight:bold;"> book review team</span>
<p>I joined this team several months ago and was actually assigned to review two books &#8211; again, life got in the way (if you have any small children, you&#8217;ll understand). Things have settled down a bit now and I&#8217;ve asked to rejoin. Hopefully I&#8217;ll be able to crank out some reviews this time and learn something in the process.</p>
</li>
<li><span style="font-weight:bold;">Pass the Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0 Exam</span>
<p>I want to do this mainly to give myself an excuse to go back over the fundamentals of Java, as well as learn the new features that 5.0 brought to the table in detail (generics, annotations, etc.). I have still basically been living in a Java 1.4 world as I&#8217;d say roughly 85% of my daily work is on an application that is still bound to that <span class="blsp-spelling-error" id="SPELLING_ERROR_11">JDK</span>. So, passing this is mainly just a reason to study, and it is a nice edition to the resume as well.</p>
</li>
<li><span style="font-weight:bold;">Write one Java/software development blog article per week</span>
<p>This would be <span class="blsp-spelling-error" id="SPELLING_ERROR_12">numero</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_13">uno</span>! I&#8217;ve always stressed about the frequency of my blog writing &#8211; I&#8217;ve felt compelled to write every single day, and I usually end up writing a one paragraph synopsis of some other guy&#8217;s blog entry. Not exactly something that will attract many readers. I&#8217;ll still post those on a more frequent basis as they keep the content flowing, but I also want to write at least one in-depth article per week to give people something to look forward to. One way I&#8217;ll do this is to blog about the books I&#8217;m reading. <span style="font-style:italic;">The Pragmatic Programmer</span> provides challenges and/or exercises at the end of each chapter &#8211; great seeds for entries.</p>
</li>
<li><span style="font-weight:bold;">Attend </span><span style="font-weight:bold;" class="blsp-spelling-error" id="SPELLING_ERROR_14">JavaOne</span><span style="font-weight:bold;"> 2008 or similar conference</span>
<p>This one depends on the boss &#8211; hopefully I&#8217;ll get to travel again this year. I&#8217;d love to go back to <span class="blsp-spelling-error" id="SPELLING_ERROR_15">JavaOne</span> &#8211; I learned a lot, and big geek shows always motivate me to go back and introduce new technology to the group, as well as get more involved in the community. I always feel a surge in my professional development in the 2-3 month period following my attending a conference.</p>
</li>
<li><span style="font-weight:bold;">Start a Memphis/Mid-South Area Java User Group</span>
<p>We don&#8217;t have a JUG in this area and I really think that we could benefit from one. My company has a large number of Java developers, and I know that several others in the area, including FedEx and <span class="blsp-spelling-error" id="SPELLING_ERROR_16">Autozone</span> do as well. This would be a great way to get some of the good speakers from the conferences I&#8217;ve attended to speak locally, and it may even serve to get us on the map with some of the smaller shows like <span class="blsp-spelling-error" id="SPELLING_ERROR_17">NFJS</span>. Sun and others really seem to take an interest in supporting JUGS, so I look forward to see what happens. I&#8217;ve started a <a href="http://groups.google.com/group/memphis-mid-south-jug">Google Group</a> for the newborn JUG, and I&#8217;ll be blogging more in the future about it.</li>
</ol>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mattstine.wordpress.com/40/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mattstine.wordpress.com/40/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mattstine.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mattstine.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mattstine.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mattstine.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mattstine.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mattstine.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mattstine.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mattstine.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mattstine.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mattstine.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mattstine.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mattstine.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mattstine.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mattstine.wordpress.com/40/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=40&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mattstine.com/2007/07/10/my-professional-development-goals-for-2007-2008/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1eaa45fee6a2b0c4b479b2982a4274f4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mattstine</media:title>
		</media:content>
	</item>
		<item>
		<title>Help me become a better programmer!</title>
		<link>http://mattstine.com/2007/07/02/help-me-become-a-better-programmer/</link>
		<comments>http://mattstine.com/2007/07/02/help-me-become-a-better-programmer/#comments</comments>
		<pubDate>Mon, 02 Jul 2007 20:12:00 +0000</pubDate>
		<dc:creator>mattstine</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.mattstine.com/?p=37</guid>
		<description><![CDATA[I have decided to embark upon a quest to become a better programmer. I would really like to improve my understanding of the computer science that underlies my day-to-day tasks, particularly as it relates to programming language design as well as algorithm design and complexity analysis. I would also like to improve my analytical and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=37&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have decided to embark upon a quest to become a better programmer. I would really like to improve my understanding of the computer science that underlies my day-to-day tasks, particularly as it relates to programming language design as well as algorithm design and complexity analysis. I would also like to improve my analytical and problem solving skills. I&#8217;ve found that I&#8217;m really good at learning new technologies and quickly bringing them to bear on web application development problems, but take me out of that problem space and I get nervous rather quickly.</p>
<p>Who has ideas about the best way to go about this? Please comment!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mattstine.wordpress.com/37/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mattstine.wordpress.com/37/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mattstine.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mattstine.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mattstine.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mattstine.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mattstine.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mattstine.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mattstine.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mattstine.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mattstine.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mattstine.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mattstine.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mattstine.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mattstine.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mattstine.wordpress.com/37/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mattstine.com&amp;blog=58954&amp;post=37&amp;subd=mattstine&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mattstine.com/2007/07/02/help-me-become-a-better-programmer/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1eaa45fee6a2b0c4b479b2982a4274f4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mattstine</media:title>
		</media:content>
	</item>
	</channel>
</rss>
