<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Regular Geek &#187; Programming</title>
	<atom:link href="http://regulargeek.com/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://regulargeek.com</link>
	<description>Where programming, the internet and social media collide.</description>
	<lastBuildDate>Mon, 06 Sep 2010 12:18:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<cloud domain='regulargeek.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
		<item>
		<title>Can You Be Too Old For Software Development?</title>
		<link>http://regulargeek.com/2010/08/29/can-you-be-too-old-for-software-development/</link>
		<comments>http://regulargeek.com/2010/08/29/can-you-be-too-old-for-software-development/#comments</comments>
		<pubDate>Sun, 29 Aug 2010 18:55:11 +0000</pubDate>
		<dc:creator>Rob Diana</dc:creator>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Age]]></category>
		<category><![CDATA[Dave Winer]]></category>
		<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Silicon Valley]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[startups]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://regulargeek.com/?p=2373</guid>
		<description><![CDATA[It has been a while since a good bitchmeme came about, so it is with great pleasure that I participate in this one. Actually, is it not with great pleasure as the issue hits close to home. The issue at hand is regarding age in the software development profession. This is important to me because [...]]]></description>
			<content:encoded><![CDATA[<p>It has been a while since a good bitchmeme came about, so it is with great pleasure that I participate in this one. Actually, is it not with great pleasure as the issue hits close to home. The issue at hand is regarding age in the <a class="zem_slink" title="Software development" rel="wikipedia" href="http://en.wikipedia.org/wiki/Software_development">software development</a> profession. This is important to me because I am 38 years old and have been in software development for about 16 years. Some people are saying that <a class="zem_slink" title="Silicon Valley" rel="geolocation" href="http://maps.google.com/maps?ll=37.37,-122.04&amp;spn=1.0,1.0&amp;q=37.37,-122.04 (Silicon%20Valley)&amp;t=h">Silicon Valley</a> has a bias towards younger people. <a href="http://techcrunch.com/2010/08/28/silicon-valley’s-dark-secret-it’s-all-about-age/" target="_blank">TechCrunch has an interesting article</a> that makes some very good points:</p>
<blockquote><p>The harsh reality is that in the tech world, companies prefer to hire young, inexperienced, engineers. And engineering is an “up or out” profession: you either move up the ladder or face unemployment. This is not something that tech executives publicly admit, because they fear being sued for <a class="zem_slink" title="Ageism" rel="wikipedia" href="http://en.wikipedia.org/wiki/Ageism">age discrimination</a>, but everyone knows that this is the way things are. Why would any company hire a computer programmer with the wrong skills for a salary of $150,000, when it can hire a fresh graduate—with no skills—for around $60,000?  Even if it spends a month training the younger worker, the company is still far ahead. The young understand new technologies better than the old do, and are like a clean slate: they will rapidly learn the latest coding methods and techniques, and they don’t carry any “technology baggage”.  As well, the older worker likely has a family and needs to leave by 6 pm, whereas the young can pull all-nighters.</p></blockquote>
<p>Initially, I was going to leave this topic alone, but <a href="http://scripting.com/stories/2010/08/28/whatTheySayAboutAgeIsTrue.html" target="_blank">Dave Winer decided to complain</a> as well:</p>
<blockquote><p>If I can&#8217;t get into the game, I can&#8217;t imagine there&#8217;s much chance for most other people in their 50&#8242;s to play a role. Which is really fucked up. It&#8217;s probably the reason why we keep going around in the same loops over and over, because we chuck our experience, wholesale, every ten years or so.</p></blockquote>
<p>The combination of the two struck a nerve. I only partially agree with either quote as they do not look at the real issues here. In particular, both posts talk about ages and startups. Startups are not a huge portion of the software development industry. They may be the beginnings of it, but there are tons of engineers slaving away in a cube for some corporation that has 50,000 employees. However, even in a large corporation, age can be an issue for a few reasons.</p>
<h3>Age and Hours Worked</h3>
<p>For startups, hours worked are extremely important. Sometimes developers will work 80 hour weeks for months in order to get the product shipped. Many people assume that this is a young person&#8217;s game. This is technically true, but not because the people are young. The main reason that older people cannot work long hours is because they typically have a family and kids at home. They may not want to work long hours because they want to see their children at night. Some of these family people will work long hours after their children go back to sleep, but this is not the majority of software developers. If your company requires long hours, and you do not want to work those hours, age is not the issue, the hours are the issue. Maybe you are just not cut out for the startup life.</p>
<h3>Age and Cost</h3>
<p>For a startup, cost can be a significant issue. Many veteran (10+ years) software developers will have a salary in the top 25% of the industry. This problem is also not specific to the startup world, though startups do feel the cost pinch sooner than a large corporation. Startups have a tendency to pay for significant benefits to offset a lower salary. Sometimes you can get <a class="zem_slink" title="Option (finance)" rel="wikipedia" href="http://en.wikipedia.org/wiki/Option_%28finance%29">stock options</a> or maybe it is just free food. In either case, your startup salary is likely lower than your salary at an equivalent corporate job. The corporation will eventually cap the experienced developer&#8217;s salary as well. Experience is important, but sometimes people just become too expensive. If you are that person, you must realize that you will not always get a raise when you change jobs or get more experience. If you decide to stay in software development, you have decided to make some maximum dollar amount in your city. If you want more money, you need to get into management.</p>
<h3>Age and Skills</h3>
<p>The TechCrunch post states that &#8220;The young understand new technologies better than the old do, and are like a clean slate&#8221;. Dave Winer feels that we make the same mistakes over again because we are throwing away or ignoring experience by only hiring younger developers. The truth is somewhere in between. Experience is somewhat helpful when a product is first being developed, but that is not critical at the early stage. Experience is critical when the early startup gains more adoption and needs to become stable. Younger developers do not have the experience to stabilize a product, whether it is by scaling a product for millions of users or just dealing with all of the issues that software has after being used for some time. These skills come with experience. Younger developers can learn these skills, but typically the knowledge is passed on from someone with experience.</p>
<p>Older developers have always had the stigma of staleness attached to them as well. I think this stems from the long tenure at large corporations. The internet changed a lot of that as well. Now, older developers are starting companies of their own. Technology is significantly easier to learn today because of the wealth of information available. 15 years ago, your ability to learn a new technology depended upon how many books you could read and whether your company would send you to training. This would become very expensive, potentially over $5000 per year. Now, I can find better information, quick than before and it is free.</p>
<h3>Age Is Just A Number</h3>
<p>In reality, age is just a number. There are plenty of younger developers that have no interest in working at a startup, just like those family-oriented older developers. Older developers can learn new technologies without being hampered by whatever &#8220;technology baggage&#8221; they carry. They just need to decide to do so. There are some younger developers that learned Java in school and have no interest in learning anything else because it is stable and used at many large corporations. There are people of all ages that refuse to work for less than they feel they are worth. Some of these people are misguided, and others may be worth the money. In all of these cases, developers young and old may not be a fit for a startup. To be a fit for a startup, you must have the desire to be in a startup. If that means working long hours at a lower salary while learning all sorts of new technology, then you must be prepared.</p>
<p>Preparation and desire are not age related.</p>
<div class="zemanta-pixie"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_e.png?x-id=78e9efdc-d3ae-44e5-a272-9922761c3d30" alt="Enhanced by Zemanta" /></a><span class="zem-script more-related"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>


<p>Related posts:<ul><li><a href='http://regulargeek.com/2010/03/19/finding-a-job-that-fits/' rel='bookmark' title='Permanent Link: Finding A Job That Fits'>Finding A Job That Fits</a></li>
<li><a href='http://regulargeek.com/2009/05/26/tips-for-finding-your-next-software-development-job/' rel='bookmark' title='Permanent Link: Tips For Finding Your Next Software Development Job'>Tips For Finding Your Next Software Development Job</a></li>
<li><a href='http://regulargeek.com/2008/03/24/should-you-specialize-in-a-technology/' rel='bookmark' title='Permanent Link: Should You Specialize in a Technology?'>Should You Specialize in a Technology?</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://regulargeek.com/2010/08/29/can-you-be-too-old-for-software-development/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Web &amp; Scripting Programming Language Job Trends &#8211; August 2010</title>
		<link>http://regulargeek.com/2010/08/18/web-scripting-programming-language-job-trends-august-2010/</link>
		<comments>http://regulargeek.com/2010/08/18/web-scripting-programming-language-job-trends-august-2010/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 11:50:01 +0000</pubDate>
		<dc:creator>Rob Diana</dc:creator>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Programming language]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Web application]]></category>

		<guid isPermaLink="false">http://regulargeek.com/?p=2339</guid>
		<description><![CDATA[At the beginning of this month, I compared the job trends for traditional programming languages like C++, Java and others. This post is one of the recurring programming job trends posts, where we look at web and scripting programming languages. Feel free to review the web programming job trends from February as well. You may [...]]]></description>
			<content:encoded><![CDATA[<p>At the beginning of this month, I <a href="http://regulargeek.com/2010/08/02/traditional-programming-job-trends-august-2010/" target="_blank">compared the job trends for traditional programming languages</a> like C++, Java and others. This post is one of the recurring programming job trends posts, where we look at web and scripting programming languages. Feel free to review the <a href="http://regulargeek.com/2010/03/01/web-2-0-programming-language-job-trends-february-2010/" target="_blank">web programming job trends from February</a> as well. You may have noticed that I have changed the title of this series to &#8220;Web &amp; Scripting Programming Language Job Trends&#8221;. I think this more accurately reflects the list of languages, but it is still a crappy title. Let me know if you have a better description of these languages. Currently, the list includes Ruby, Rails, Python, PHP, <a class="zem_slink" title="JavaScript" rel="wikipedia" href="http://en.wikipedia.org/wiki/JavaScript">JavaScript</a>, Flex and <a class="zem_slink" title="Groovy (programming language)" rel="homepage" href="http://groovy.codehaus.org">Groovy</a>. If you think I should be including another language, please let me know in the comments.</p>
<p>So, what do the <a href="http://www.indeed.com/jobtrends?q=ruby%2C+rails%2C+python%2C+php%2C+javascript%2C+flex%2C+groovy&amp;l=" target="_blank">trends from Indeed.com</a> look like?</p>
<p><a href="http://www.indeed.com/jobtrends?q=ruby%2C+rails%2C+python%2C+php%2C+javascript%2C+flex%2C+groovy&amp;l=" target="_blank"><img class="aligncenter size-full wp-image-2342" title="Indeed Web &amp; Scripting Programming Language Job Trends August 2010" src="http://regulargeek.com/wordpress/wp-content/uploads/2010/08/indeedWebJobTrendsAug2010.png" alt="Indeed Web &amp; Scripting Programming Language Job Trends August 2010" width="540" height="300" /></a></p>
<p>Obviously, JavaScript continues to grow like a weed, showing a more rapid increase in the last 6 months. Flex seems to have gotten out of the doldrums with a nice upward trend over the past year. <a class="zem_slink" title="PHP" rel="homepage" href="http://www.php.net/">PHP</a> is also growing nicely as it continues to be used for major sites like Facebook. In the past six months, <a class="zem_slink" title="Python (programming language)" rel="homepage" href="http://www.python.org/">Python</a> has started to distance itself from the remaining languages. <a class="zem_slink" title="Ruby (programming language)" rel="homepage" href="http://www.ruby-lang.org/">Ruby</a> and Rails are showing slow growth with Ruby finally separating itself from its Rails legacy. Groovy is still trailing the pack and not growing very rapidly, but it is still having a decent growth period.</p>
<p>Now, let&#8217;s look at the <a href="http://www.simplyhired.com/a/jobtrends/trend/q-ruby%2C+rails%2C+python%2C+php%2C+javascript%2C+flex%2C+groovy" target="_blank">trends from SimplyHired.com</a>.</p>
<p><a href="http://www.simplyhired.com/a/jobtrends/trend/q-ruby%2C+rails%2C+python%2C+php%2C+javascript%2C+flex%2C+groovy" target="_blank"><img class="aligncenter size-full wp-image-2343" title="SimplyHired Web &amp; Scripting Programming Language Job Trends August 2010" src="http://regulargeek.com/wordpress/wp-content/uploads/2010/08/simplyHiredWebJobTrendsAug2010.png" alt="SimplyHired Web &amp; Scripting Programming Language Job Trends August 2010" width="540" height="300" /></a></p>
<p>As stated in other job trends posts, because the SimplyHired data is limited to 2 years, we really see the short term bumps. SimplyHired does not show JavaScript to have a dominant position over the other languages like its Indeed counterpart. Javascript is still the leader and has more consistent growth than Flex. Flex had a really good bump in the last quarter, but it seems to be coming down from that temporary high. The trend for PHP looks like it may be stabilizing a bit over the past year with only limited growth. The others, Python, Ruby, Rails and Groovy, show only limited or flat growth. In all of the languages, there was a significant downward trend from January through April probably due to the continued economic issues around the world. Overall, Indeed is showing much more growth than SimplyHired, and this should be concerning for people as you would not expect two job posting aggregators to have such different trends. Hopefully, this is not pointing to a slowdown in web programming jobs overall.</p>
<p>Lastly, lets look at the relative trends for <a href="http://www.indeed.com/jobtrends?q=ruby%2C+rails%2C+python%2C+php%2C+javascript%2C+flex%2C+groovy&amp;l=&amp;relative=1" target="_blank">job growth from Indeed.com</a>. This shows an interesting perspective of the job trends, comparing language growth as opposed to percentage of all postings.</p>
<p><a href="http://www.indeed.com/jobtrends?q=ruby%2C+rails%2C+python%2C+php%2C+javascript%2C+flex%2C+groovy&amp;l=&amp;relative=1" target="_blank"><img class="aligncenter size-full wp-image-2344" title="Indeed Web &amp; Scripting Programming Language Job Growth August 2010" src="http://regulargeek.com/wordpress/wp-content/uploads/2010/08/indeedWebJobGrowthAug2010.png" alt="Indeed Web &amp; Scripting Programming Language Job Growth August 2010" width="540" height="300" /></a></p>
<p>Groovy demand has continued its tremendous rise over the past 2 years. Groovy may not have the same number of postings, but this type of growth could mean that it is ready for more mainstream adoption. Ruby and Rails have also shown an increasing growth trend that is much higher than the others. This has not translated to a huge increase in jobs, but even this growth trend shows that Ruby is now able to stand on its own, and not require the Rails framework. Python seems to be pulling away from the other languages in the list in the past year. We could see a rapid rise of demand for Python in the near future if this growth trend continues. PHP, Javascript and Flex do not share the huge growth of the other languages, but they are the current leaders overall and it would be difficult to sustain 1000% growth over a long period.</p>
<p>Based on all of these trends, you can see that web and scripting languages still have excellent demand. The relative growth of Python and Groovy make them &#8220;need to know&#8221; languages, even if you just start using them for side projects. Javascript is something anyone involved with web applications should already know, and dynamic websites require significant amounts of it. Ruby, Rails and PHP continue to grow and are an excellent addition to any programmer&#8217;s toolbox.</p>
<div class="zemanta-pixie"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_e.png?x-id=30805ea7-71b3-4943-b722-31b280a45969" alt="Enhanced by Zemanta" /></a><span class="zem-script more-related"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>


<p>Related posts:<ul><li><a href='http://regulargeek.com/2010/03/01/web-2-0-programming-language-job-trends-february-2010/' rel='bookmark' title='Permanent Link: Web 2.0 Programming Language Job Trends &#8211; February 2010'>Web 2.0 Programming Language Job Trends &#8211; February 2010</a></li>
<li><a href='http://regulargeek.com/2009/08/25/web-2-0-programming-language-job-trends/' rel='bookmark' title='Permanent Link: Web 2.0 Programming Language Job Trends'>Web 2.0 Programming Language Job Trends</a></li>
<li><a href='http://regulargeek.com/2009/08/19/traditional-programming-language-job-trends/' rel='bookmark' title='Permanent Link: Traditional Programming Language Job Trends'>Traditional Programming Language Job Trends</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://regulargeek.com/2010/08/18/web-scripting-programming-language-job-trends-august-2010/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Writing Unit Tests Is Your Job, So Quit Making Excuses</title>
		<link>http://regulargeek.com/2010/08/13/writing-unit-tests-is-your-job-so-quit-making-excuses/</link>
		<comments>http://regulargeek.com/2010/08/13/writing-unit-tests-is-your-job-so-quit-making-excuses/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 12:34:42 +0000</pubDate>
		<dc:creator>Rob Diana</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[software developer]]></category>
		<category><![CDATA[Software testing]]></category>
		<category><![CDATA[Unit testing]]></category>

		<guid isPermaLink="false">http://regulargeek.com/?p=2284</guid>
		<description><![CDATA[For whatever reason, I have seen the topic of unit tests appear in my daily reading frequently the past few days. Because I am in that kind of mood, I wanted to rant on unit testing. First, let&#8217;s look at some of the articles that caught my attention. One article talks more about the psychology [...]]]></description>
			<content:encoded><![CDATA[<p>For whatever reason, I have seen the topic of unit tests appear in my daily reading frequently the past few days. Because I am in that kind of mood, I wanted to rant on <a class="zem_slink" title="Unit testing" rel="wikipedia" href="http://en.wikipedia.org/wiki/Unit_testing">unit testing</a>. First, let&#8217;s look at some of the articles that caught my attention. One article talks more about the <a href="http://java.dzone.com/articles/writing-tests-don’t-make-“not-1" target="_blank">psychology of unit testing</a> and starts with an interesting paragraph:</p>
<blockquote><p>The philosophy of economics, and psychology, and morality, all overlap in studies that show how people will readily abandon moral responsibilities if they are given ways to avoid the stigma of doing so. This leads me to feel more justified in my belief that programmers do a poorer job of reading, understanding, and implementing a specification when someone else has the responsibility of verification.</p></blockquote>
<p>To put this more simply, if you do not have the responsibility to test your own code, it will be of lesser quality. I have seen this in practice, and I would have to agree. Code that does not have unit tests almost always has more defects than code that is unit tested. So, why do programmers avoid writing unit tests? There are plenty of excuses, and the <a href="http://java.dzone.com/articles/unit-test-excuses" target="_blank">second article has a good list</a> of them. From that post comes my favorite excuse:</p>
<blockquote><p><strong>It&#8217;s not my job to test code &#8211; </strong>I don&#8217;t know at what stage a <a class="zem_slink" title="Software developer" rel="wikipedia" href="http://en.wikipedia.org/wiki/Software_developer">software developer</a> decides that he can just throw code over the wall. If your job title was simple Coder than maybe there&#8217;s an excuse. But as your job is to develop working software, you need to be able to say that your code is functional.</p></blockquote>
<p>Read that last sentence again, &#8220;your job is to develop working software, you need to be able to say that your code is functional.&#8221; As a software developer, can you really say that you have done your job without providing unit tests?</p>
<p>If you are not writing unit tests, you are not providing any proof that your code actually works. You are doing yourself a disservice and any developer that maintains your code will complain at length about it.</p>
<p>Another classic excuse is that it takes too much time to write unit tests or there is not enough time in the schedule to write the tests. The schedule excuse appears a lot as project scheduling is never as good as we would like. When I first started writing unit tests ages ago, I believed that the schedule excuse was OK. As I continued through my career, I realized that there were more defects in my code that did not have unit tests. I also realized that fixing the defects was harder if there were not unit tests. I know this is anecdotal evidence, but when so many people in our industry say the same things, the anecdotal evidence becomes more than just coincidence.</p>
<p>An interesting side benefit of creating testable code is that the design typically ends up easier to deal with. I think this has to do with the fact that your code becomes more component-oriented. You need to break many of the dependencies that quick-and-dirty coding tends to introduce. If your code is hard to test, it could point to design flaws or at least unnecessary complexities.</p>
<p>So, if you are a software developer, even if you are just learning the trade, test your code. It is your job to show that your software is working. Quit complaining, get over it and start writing unit tests.</p>
<div class="zemanta-pixie"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_e.png?x-id=d1f3b100-12bf-4a11-89ca-95ce1751c90f" alt="Enhanced by Zemanta" /></a><span class="zem-script more-related"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>


<p>Related posts:<ul><li><a href='http://regulargeek.com/2009/04/17/tools-for-unit-testing-java-web-applications/' rel='bookmark' title='Permanent Link: Tools For Unit Testing Java Web Applications'>Tools For Unit Testing Java Web Applications</a></li>
<li><a href='http://regulargeek.com/2009/06/12/how-much-testing-is-enough/' rel='bookmark' title='Permanent Link: How Much Testing Is Enough?'>How Much Testing Is Enough?</a></li>
<li><a href='http://regulargeek.com/2010/06/03/survey-says-developers-think-testing-is-failing/' rel='bookmark' title='Permanent Link: Survey Says: Developers Think Testing Is Failing'>Survey Says: Developers Think Testing Is Failing</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://regulargeek.com/2010/08/13/writing-unit-tests-is-your-job-so-quit-making-excuses/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>12 Things A Programmer Really Needs To Know</title>
		<link>http://regulargeek.com/2010/08/07/12-things-a-programmer-really-needs-to-know/</link>
		<comments>http://regulargeek.com/2010/08/07/12-things-a-programmer-really-needs-to-know/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 13:08:57 +0000</pubDate>
		<dc:creator>Rob Diana</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Caffeine]]></category>
		<category><![CDATA[Computer programming]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Mobile phone]]></category>
		<category><![CDATA[Mountain Dew]]></category>
		<category><![CDATA[Odors]]></category>

		<guid isPermaLink="false">http://regulargeek.com/?p=2230</guid>
		<description><![CDATA[How do you answer the question, &#8220;what do I need to learn to be a good programmer?&#8221; I have written posts trying to answer that question, typically focusing on the languages that you should learn or the algorithms and other techniques you need to know. What about the rest of a programmer&#8217;s life? This is [...]]]></description>
			<content:encoded><![CDATA[<p>How do you answer the question, &#8220;what do I need to learn to be a good programmer?&#8221; I have written posts trying to answer that question, typically focusing on the languages that you should learn or the algorithms and other techniques you need to know. What about the rest of a programmer&#8217;s life? This is a less serious look at the life of a programmer. So, what does a programmer really need to know?</p>
<ol>
<li><strong>Caffeine</strong> &#8211; You need to find your preferred caffeine delivery system. Mine is black coffee, early and often. Others may prefer diet soda throughout the day. There are always the classics as well, <a class="zem_slink" title="Mountain Dew" rel="homepage" href="http://mountaindew.com/">Mountain Dew</a> and Jolt.</li>
<li><strong>Logic</strong> &#8211; As a programmer, you deal with logic constantly. Your true mettle will be defined by how you deal with the insanity (real or perceived) of the customer. The customer could be your <a class="zem_slink" title="Project manager" rel="wikipedia" href="http://en.wikipedia.org/wiki/Project_manager">project manager</a>, the <a class="zem_slink" title="Business analyst" rel="wikipedia" href="http://en.wikipedia.org/wiki/Business_analyst">business analyst</a> or the users. For any given project, you can count on someone sounding completely insane.</li>
<li><strong>Hours</strong> &#8211; Expect to be working a lot of them. Programming is one of those jobs that refuses to follow the 9 to 5 path. As you get closer to your deadline, the hours you work will increase quickly. Just hope that you can work from home sometimes. Also, weekends and time off are for management, and you need to be available at all times.</li>
<li><strong>Corporate Leash</strong> &#8211;  You may not have any power to make decisions, but that does not mean the company cannot give you a leash. The ability of constant communication is too much for companies to pass on so you will likely get a crackberry, a pager (people still use them), or some other company provided cell phone. No, your leash will not be an <a class="zem_slink" title="iPhone 3G" rel="homepage" href="http://www.apple.com/iphone">iPhone</a>, this is not meant for fun this is business.</li>
<li><strong>Blame</strong> &#8211; As a programmer, you are the low man (or woman) on the totem poll. Just remember that shit rolls downhill, the buck stops with you and if there is a defect it is obviously the programmer&#8217;s fault.</li>
<li><strong>Sleep</strong> &#8211; More importantly it is the lack of sleep that you need to be concerned with. As your hours increase, you will find there is less time to sleep. You will have to call into a conference call at 7AM with your offshore team, or support a 5AM deployment on Saturday.</li>
<li><strong>Skills</strong> &#8211; Your skills typically do not matter in the corporate environment. There are plenty of programmers that do not have jobs and could fill your position. Your expertise in the business domain is not important because there are business analysts that are supposed to be the experts in the business. You are replaceable, you are just a part in the corporate machine.</li>
<li><strong>Odors</strong> &#8211; As the hours get longer and management reads something about the productivity of team rooms, the odors start to get worse. We are not talking about someone heating up their lunch. We are talking about the stereotypical, unkempt programmer sitting in a room full of other unkempt programmers. After some time, the room starts to smell like a camel, and it is not pretty.</li>
<li><strong>24/7 support</strong> &#8211; Yes, you will be pulled into support at various times, even for something like a customer service site. The application may not be life threatening or revenue threatening, it is just job threatening. So, your corporate leash will ring at the worst possible moment and you will have to get on a conference call with 10 people who have no idea how to fix the problem but need to be involved from the management perspective and one other person that might be able to help you.</li>
<li><strong>Stress</strong> &#8211; Project failure is never an option. You cannot miss the deadline even though it was not the deadline you proposed. No, you cannot remove features from the application in order to make the deadline either. You need to deliver the entire application by the deadline, or the entire team could be fired. Nothing like a little pressure with your morning coffee.</li>
<li><strong>Non technical managers</strong> &#8211; These people are considered the bane of most programmer&#8217;s existence. They need to manage a group of programmers, but they do not understand what they do for a living besides &#8220;they write code&#8221;. They typically overpromise, underdeliver and treat their programmers like cattle or &#8220;resources&#8221;.</li>
<li><strong>Political battles</strong> &#8211; This is one of those things that programmers are rarely directly involved in. However, your project and even the whole team could become the casualty of some political war. You have no power to prevent any of it, but you are definitely involved. Keep listening to the rumors so that you have some warning that something bad could happen.</li>
</ol>
<p>Obviously, these ideas will not happen everywhere and are much more of a worst-case scenario. If you see several of these things at your current employer or even a prospective employer, you may want to run the other way. Given that you already carry a cell phone anyway, don&#8217;t worry about the corporate leash, they will just want your current cell phone number.</p>
<div class="zemanta-pixie"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_e.png?x-id=3da0fe74-066e-4a1f-963f-6e53345b1899" alt="Enhanced by Zemanta" /></a><span class="zem-script more-related"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>


<p>Related posts:<ul><li><a href='http://regulargeek.com/2009/09/07/are-you-flirting-with-burnout-and-disaster/' rel='bookmark' title='Permanent Link: Are You Flirting With Burnout And Disaster?'>Are You Flirting With Burnout And Disaster?</a></li>
<li><a href='http://regulargeek.com/2010/02/23/how-do-you-hire-programmers/' rel='bookmark' title='Permanent Link: How Do You Hire Programmers?'>How Do You Hire Programmers?</a></li>
<li><a href='http://regulargeek.com/2010/01/19/how-can-software-development-avoid-the-need-for-a-hero/' rel='bookmark' title='Permanent Link: How Can Software Development Avoid The Need For A Hero?'>How Can Software Development Avoid The Need For A Hero?</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://regulargeek.com/2010/08/07/12-things-a-programmer-really-needs-to-know/feed/</wfw:commentRss>
		<slash:comments>47</slash:comments>
		</item>
		<item>
		<title>Traditional Programming Language Job Trends &#8211; August 2010</title>
		<link>http://regulargeek.com/2010/08/02/traditional-programming-job-trends-august-2010/</link>
		<comments>http://regulargeek.com/2010/08/02/traditional-programming-job-trends-august-2010/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 12:00:29 +0000</pubDate>
		<dc:creator>Rob Diana</dc:creator>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[iPod]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jobs]]></category>
		<category><![CDATA[objective c]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[Programming language]]></category>
		<category><![CDATA[visual basic]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://regulargeek.com/?p=2199</guid>
		<description><![CDATA[About 6 months ago, I looked at the job trends for traditional programming languages again. Given the popularity of these posts, I have decided to make this a recurring theme. In the last update, I included Delphi due to the fairly high ranking it had in the TIOBE rankings. Given that previous trends, and a [...]]]></description>
			<content:encoded><![CDATA[<p>About 6 months ago, I looked at the <a href="http://regulargeek.com/2010/02/02/traditional-programming-language-job-trends-february-2010/" target="_blank">job trends for traditional programming languages</a> again. Given the popularity of these posts, I have decided to make this a recurring theme. In the last update, I included Delphi due to the fairly high ranking it had in the <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html" target="_blank">TIOBE rankings</a>. Given that previous trends, and a peek at this months trends, I have decided to remove Delphi. At best Delphi job postings have been minimal and the trends have been either flat or more likely decreasing, so it was just adding to the clutter of the charts. So, in this update we are only looking at <a class="zem_slink" title="Java (programming language)" rel="homepage" href="http://java.sun.com">Java</a>, C++, C#, <a class="zem_slink" title="Objective-C" rel="wikipedia" href="http://en.wikipedia.org/wiki/Objective-C">Objective C</a>, <a class="zem_slink" title="Perl" rel="homepage" href="http://www.perl.org/">Perl</a> and Visual Basic.</p>
<p>First, let&#8217;s look at the <a href="http://www.indeed.com/jobtrends?q=java%2C+C%2B%2B%2C+C%23%2C+visual+basic%2C+Perl%2C+objective+c&amp;l=" target="_blank">job trends from Indeed.com</a>:</p>
<p style="text-align: center;"><a href="http://www.indeed.com/jobtrends?q=java%2C+C%2B%2B%2C+C%23%2C+visual+basic%2C+Perl%2C+objective+c&amp;l=" target="_blank"><img class="aligncenter size-full wp-image-2203" src="http://regulargeek.com/wordpress/wp-content/uploads/2010/08/indeedTraditionalJobGraph-20100801.png" alt="Traditional Language Jobs - August 2010" width="540" height="300" /></a></p>
<p>The first thing you can see in this graph is that there is some growth in the past 6 months! This growth comes after a small downturn after late 2008. Java, C#, Perl and Objective C are all seeing nice gains. Surprisingly, Visual Basic is trending upward slightly for what seems like the largest gain in the past 5 years. C++ is mostly flat as the C# transition continues for <a class="zem_slink" title="Windows" rel="homepage" href="http://www.microsoft.com/WINDOWS">Windows</a> developers.</p>
<p>As we have seen in past job trends posts <a href="http://www.simplyhired.com/a/jobtrends/trend/q-java%2C+perl%2C+C%2B%2B%2C+C%23%2C+objective+c%2C+visual+basic" target="_blank">SimplyHired has different short term trends</a>:</p>
<p style="text-align: center;"><a href="http://www.simplyhired.com/a/jobtrends/trend/q-java%2C+perl%2C+C%2B%2B%2C+C%23%2C+objective+c%2C+visual+basic" target="_blank"><img class="aligncenter size-full wp-image-2206" src="http://regulargeek.com/wordpress/wp-content/uploads/2010/08/simplyHiredTraditionalJobGraph-20100801.png" alt="SimplyHired Traditional Language Jobs - August 2010" width="540" height="300" /></a></p>
<p>This graph shows a decline from a peak in November 2009 through April 2010. However, in the past two months SimplyHired shows an upward trend similar to Indeed. The trend for <a class="zem_slink" title="Visual Basic" rel="homepage" href="http://msdn.microsoft.com/en-us/vbasic/default.aspx">VisualBasic</a> is a little different as it continues to be flat, and there is very little growth for Objective C.</p>
<p>The last trend report to review is the <a href="http://www.indeed.com/jobtrends?q=java%2C+C%2B%2B%2C+C%23%2C+visual+basic%2C+Perl%2C+objective+c&amp;l=&amp;relative=1" target="_blank">relative scaling from Indeed</a>. This provides an interesting trend graph based on job growth:</p>
<p style="text-align: center;"><a href="http://www.indeed.com/jobtrends?q=java%2C+C%2B%2B%2C+C%23%2C+visual+basic%2C+Perl%2C+objective+c&amp;l=&amp;relative=1" target="_blank"><img class="aligncenter size-full wp-image-2208" src="http://regulargeek.com/wordpress/wp-content/uploads/2010/08/relativeGrowthTraditionalLanguages-20100801.png" alt="Relative Job Growth - August 2010" width="540" height="300" /></a></p>
<p>These trends are significantly more interesting because it is based on growth as opposed to absolute number of job postings. Three major points of interest are obvious. Objective C is growing rapidly now that the iPod, <a class="zem_slink" title="iPhone" rel="homepage" href="http://www.apple.com/iphone">iPhone</a> and iPad share a common operating system in <a class="zem_slink" title="IPhone OS" rel="homepage" href="http://developer.apple.com/iphone">iOS</a>. C# is also showing significant growth when compared to the other languages as well. C++ and Visual Basic trail the others as C++ continues a downward trend while Visual Basic has a small uptick in the past few months.</p>
<p>What does all this mean? Well, Java is still a solid choice when looking to get a job and it continues to grow. C# is growing but does not seem to be replacing C++ as it is only slightly decreasing in demand. Perl refuses to go away and even grows a little. I am also curious if the change in trend for Visual Basic is any indication of the future. Lastly, Objective C will continue to be an interesting trend to follow over the next year as development for the various <a class="zem_slink" title="Apple" rel="homepage" href="http://www.apple.com">Apple</a> devices converges into a single OS with only differences in presentation.</p>
<div class="zemanta-pixie"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_e.png?x-id=a71d7b80-0e13-4c8f-8eda-931d5925b08f" alt="Enhanced by Zemanta" /></a></div>


<p>Related posts:<ul><li><a href='http://regulargeek.com/2010/02/02/traditional-programming-language-job-trends-february-2010/' rel='bookmark' title='Permanent Link: Traditional Programming Language Job Trends &#8211; February 2010'>Traditional Programming Language Job Trends &#8211; February 2010</a></li>
<li><a href='http://regulargeek.com/2009/08/19/traditional-programming-language-job-trends/' rel='bookmark' title='Permanent Link: Traditional Programming Language Job Trends'>Traditional Programming Language Job Trends</a></li>
<li><a href='http://regulargeek.com/2009/08/25/web-2-0-programming-language-job-trends/' rel='bookmark' title='Permanent Link: Web 2.0 Programming Language Job Trends'>Web 2.0 Programming Language Job Trends</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://regulargeek.com/2010/08/02/traditional-programming-job-trends-august-2010/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Rebuild Or Buy: The Decision To Scrap A System</title>
		<link>http://regulargeek.com/2010/07/30/rebuild-or-buy-the-decision-to-scrap-a-system/</link>
		<comments>http://regulargeek.com/2010/07/30/rebuild-or-buy-the-decision-to-scrap-a-system/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 16:47:16 +0000</pubDate>
		<dc:creator>Rob Diana</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[enhancements]]></category>
		<category><![CDATA[Fred Wilson]]></category>
		<category><![CDATA[project funding]]></category>
		<category><![CDATA[rebuild]]></category>
		<category><![CDATA[Sunk costs]]></category>

		<guid isPermaLink="false">http://regulargeek.com/?p=2128</guid>
		<description><![CDATA[A few weeks ago, I wrote about how replacing an existing system is a bad idea and refactoring is a better direction. In that post I said: Generally, wholesale re-engineering of a system is a bad idea, because the system still serves a purpose and its’ functionality is a moving target. If the system does [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago, I wrote about how <a href="http://regulargeek.com/2010/07/20/re-engineering-in-agile-development-can-just-be-refactoring/" target="_blank">replacing an existing system is a bad idea and refactoring is a better direction</a>. In that post I said:</p>
<blockquote><p>Generally, wholesale re-engineering of a system is a bad idea, because the system still serves a purpose and its’ functionality is a moving target. If the system does not serve a purpose, then what is the point of rewriting it?</p></blockquote>
<p>The main reason that systems do get replaced regardless of the advice above is corporate politics. What I mean is that in some cases, the politics involved with continuing to maintain a maligned application are costly. The better political decision could be to start over and just replace the old system. This should not be seen as an easy decision, but there is one topic that must be discussed in this situation, <a class="zem_slink" title="Sunk costs" rel="wikipedia" href="http://en.wikipedia.org/wiki/Sunk_costs">sunk costs</a>. <a href="http://www.avc.com/" target="_blank">Fred Wilson</a> had a fantastic <a href="http://www.avc.com/a_vc/2010/07/sunk-costs.html" target="_blank">post about sunk costs</a> earlier this week:</p>
<blockquote><p>Sunk Costs are time and money (and other resources) you have already spent on a project, investment, or some other effort. They have been sunk into the effort and most likely you cannot get them back.</p>
<p>The important thing about sunk costs is when it comes time to make a decision about the project or investment, you should NOT factor in the sunk costs in that decision. You should treat them as gone already and make the decision based on what is in front of you in terms of costs and opportunities.</p></blockquote>
<p>The moral of the story is, when looking to replace a system, do not consider sunk costs. Many people in management will use sunk costs as part of the argument of build vs. buy. Generally, sunk costs are irrelevant to the discussion. If you are deciding to replace an existing system, mentally you have already written off the costs of the system. So, using the money spent on the existing system as part of the costs of building a new system is disingenuous. To put it in even simpler terms, let&#8217;s say you have an old PC that is running slowly but you have not maintained it well. If you decide to buy a new PC, do you include the costs of the old PC? I know it is not a great analogy, but it is the same general idea.</p>
<p>Now, if you can compare the costs of just rebuilding the system vs the cost of buying the system while ignoring sunk costs, you are finally comparing apples to apples. However, given the topic of my recent post, I would like to add a third apple to the comparison. How much would it cost to refactor and enhance the existing system to match the features of the proposed systems? Disappointingly, most management teams will not consider this third option. &#8220;We are trying to get rid of the system, why would we throw more money at it?&#8221;</p>
<p>For many enterprise applications, the cost of the software and support is in the millions of dollars. So, if a purchased application will cost you $5 million, and you are willing to pay that amount, why not consider talking to the team about modifying the existing system? People will talk about the political problems, but if an application works well people will not care how it got built. The other option, rebuilding the system is almost always a bad choice. There is the thinking that the team will have learned from the effort of building the first system, so the second system will be so much better. What normally happens is that the system gets over-designed, complicated and bloated with tons of features in an attempt to ensure that you do not see the failure of the first system.</p>
<p>What option would you choose?</p>
<div class="zemanta-pixie"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_e.png?x-id=856242ac-e18c-4840-b4f2-77f9b137e437" alt="Enhanced by Zemanta" /></a><span class="zem-script more-related"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>


<p>Related posts:<ul><li><a href='http://regulargeek.com/2010/06/03/survey-says-developers-think-testing-is-failing/' rel='bookmark' title='Permanent Link: Survey Says: Developers Think Testing Is Failing'>Survey Says: Developers Think Testing Is Failing</a></li>
<li><a href='http://regulargeek.com/2008/09/09/who-did-you-learn-from-today/' rel='bookmark' title='Permanent Link: Who Did You Learn From Today?'>Who Did You Learn From Today?</a></li>
<li><a href='http://regulargeek.com/2008/01/23/10-questions-to-ask-when-choosing-a-framework/' rel='bookmark' title='Permanent Link: 10 Questions to Ask When Choosing a Framework'>10 Questions to Ask When Choosing a Framework</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://regulargeek.com/2010/07/30/rebuild-or-buy-the-decision-to-scrap-a-system/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>New Technology Success Depends On Adoptability</title>
		<link>http://regulargeek.com/2010/07/25/new-technology-success-depends-on-adoptability/</link>
		<comments>http://regulargeek.com/2010/07/25/new-technology-success-depends-on-adoptability/#comments</comments>
		<pubDate>Sun, 25 Jul 2010 13:37:19 +0000</pubDate>
		<dc:creator>Rob Diana</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[academia]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[reference implementation]]></category>
		<category><![CDATA[research]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[XPath]]></category>
		<category><![CDATA[XQuery]]></category>

		<guid isPermaLink="false">http://regulargeek.com/?p=2068</guid>
		<description><![CDATA[Last week, I read a post at High Scalability talking about getting research out of academic environments. There is a lot of technology that starts as academic research, but there is a problem with some research being adopted by other technologists. That post has a very good explanation of why: Over the years I&#8217;ve read [...]]]></description>
			<content:encoded><![CDATA[<p>Last week, I read a post at <a href="http://highscalability.com/blog/" target="_blank">High Scalability</a> talking about <a href="http://highscalability.com/blog/2010/7/22/how-can-we-spark-the-movement-of-research-out-of-the-ivory-t.html" target="_blank">getting research out of academic environments</a>. There is a lot of technology that starts as academic research, but there is a problem with some research being adopted by other technologists. That post has a very good explanation of why:</p>
<blockquote><p>Over the years I&#8217;ve read a lot of research papers looking for better ways of doing things. Sometimes I find ideas I can use, but more often than not I come up empty. The problem is there are very few good papers. And by good I mean: can a reasonably intelligent person read a paper and turn it into something useful?</p></blockquote>
<p>That may not make sense at first glance, because you have not read an academic paper recently. Just head over to the <a href="http://www.acm.org" target="_blank">ACM</a>, search for an interesting research topic, and determine if you have an idea of how to use this new technology. Typically, these papers are typically unreadable for the average developer. Again, High Scalability has a nice quote:</p>
<blockquote><p>There&#8217;s a lot out there in the literature that we could be making use of right now, but it&#8217;s closed off from the people, i.e., developers, who can turn this research into gold. And it&#8217;s largely closed off because researchers don&#8217;t consider developers as an audience and they don&#8217;t write their papers with the intention of being applied.</p></blockquote>
<p>The problem here is that academic success is not seen as how many people have adopted and used the technology. Academic success is normally seen in the form of several research grants and tenure. However, academia is not the only group publishing information that is not immediately useful to developers, just look at the average technology specification from <a href="http://www.w3.org/" target="_blank">W3C</a>. As an example, go to the <a href="http://www.w3.org/standards/techs/xquery#w3c_all" target="_blank">XQuery Current Status</a> page. Because I am currently working with XQuery, I understand that there are several parts of the technology. If you are a developer that wants to learn about XQuery, the last place you are going to would be the W3C page. Why? Look at that page again. You see that there 6 current standards:</p>
<ul>
<li><a href="http://www.w3.org/TR/2007/REC-xpath-datamodel-20070123/" target="_blank">XQuery 1.0 and XPath 2.0 Data Model (XDM)</a></li>
<li><a href="http://www.w3.org/TR/2007/REC-xquery-semantics-20070123/" target="_blank">XQuery 1.0 and XPath 2.0 Formal Semantics</a></li>
<li><a href="http://www.w3.org/TR/2007/REC-xpath-functions-20070123/" target="_blank">XQuery 1.0 and XPath 2.0 Functions and Operators</a></li>
<li><a href="http://www.w3.org/TR/2007/REC-xslt-xquery-serialization-20070123/" target="_blank">XSLT 2.0 and XQuery 1.0 Serialization</a></li>
<li><a href="http://www.w3.org/TR/2007/REC-xquery-20070123/" target="_blank">XQuery 1.0: An XML Query Language</a></li>
<li><a href="http://www.w3.org/TR/2007/REC-xqueryx-20070123" target="_blank">XML Syntax for XQuery 1.0 (XQueryX)</a></li>
</ul>
<p>Try and read the Functions and Operators specification. You may be able to understand some of it, but it is not entirely clear how you are going to use it. Another issue with this is that there are 6 different specifications required to support XQuery 1.0. In addition to XQuery being a more niche technology, the barrier to entry is very high. Thankfully, there are books that help simplify the process of learning these new technologies.</p>
<p>Could we make some of these complex technologies more adoptable? Let&#8217;s take Java as an example. I have no idea how many specifications are required to implement the full Java and JEE stack without EJB. However, one of the main reasons Java gained significant adoption is that there is typically a reference implementation available. It may not have been immediately available, but fairly soon after the specification was finalized there was an implementation. In some cases, an implementation from outside of the standards body was chosen as the reference implementation. Tomcat is an example of this when it comes to the JSP/Servlet specifications, even though it was eventually forked for further specifications.</p>
<p>I have talked about the <a href="http://regulargeek.com/2010/06/24/are-you-a-starter-a-finisher-or-an-implementer/" target="_blank">difference between action and ideas</a> before. That is even more apparent in this divide between academia and developers. A book I am reading, <a href="http://www.amazon.com/gp/product/1451577907?ie=UTF8&amp;tag=regulargeek-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1451577907" target="_blank">Innovation: Need Of the Hour</a>, has an excellent example. <a href="http://www.sramanamitra.com/" target="_blank">Sramana Mitra</a> talks asked a question to the person who &#8220;popularized the idea that random accidents and uncertainties &#8230; determine the course of history&#8221;. Obviously, this is a bit controversial:</p>
<blockquote><p>&#8220;What are you going to do about your thesis?&#8221;</p>
<p>His answer: &#8220;I don&#8217;t do. I just think and write.&#8221;</p></blockquote>
<p>This is a serious issue when it comes to those people that say &#8220;It works in theory, but not in practice&#8221;. Theory is the basis of much knowledge that you have, but if the theory does not work in practice, then the theory is useless. There are plenty of theories or algorithms that work out fine, but in real world situations they become unusable. When you look at algorithms, some are CPU-bound, some are memory-bound and others may be I/O-bound. Which algorithm you choose is highly dependent upon your situation. In theory, any of these algorithms would apply. However, if there is a reference implementation of these algorithms, you can quickly determine which algorithm will work in your environment. This would increase adoption as more people can easily implement the technology.</p>
<p>Open source reference implementations are even better for developers. Many developers do not like reading books to learn about technology, they learn from reading, writing and executing code. An open source implementation gives the developer some code to read that actually works. The reference implementation does not have to be a reusable library, and it could even execute slowly, but if it exists, developers can learn from it and improve it.</p>
<p>So, the next time you have some interesting new technology in some academic paper, develop a reference implementation that people can use and look at. The adoption of that new technology could come very rapidly.</p>
<div class="zemanta-pixie"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_e.png?x-id=e928f8bc-2858-499a-9017-cb026f079ef9" alt="Enhanced by Zemanta" /></a><span class="zem-script more-related"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>


<p>Related posts:<ul><li><a href='http://regulargeek.com/2008/01/11/what-does-data-portability-mean-to-you/' rel='bookmark' title='Permanent Link: What Does Data Portability Mean To You?'>What Does Data Portability Mean To You?</a></li>
<li><a href='http://regulargeek.com/2008/03/24/should-you-specialize-in-a-technology/' rel='bookmark' title='Permanent Link: Should You Specialize in a Technology?'>Should You Specialize in a Technology?</a></li>
<li><a href='http://regulargeek.com/2009/04/24/my-favorite-programming-and-computer-science-books/' rel='bookmark' title='Permanent Link: My Favorite Programming And Computer Science Books'>My Favorite Programming And Computer Science Books</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://regulargeek.com/2010/07/25/new-technology-success-depends-on-adoptability/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Re-Engineering In Agile Development Can Just Be Refactoring</title>
		<link>http://regulargeek.com/2010/07/20/re-engineering-in-agile-development-can-just-be-refactoring/</link>
		<comments>http://regulargeek.com/2010/07/20/re-engineering-in-agile-development-can-just-be-refactoring/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 12:24:30 +0000</pubDate>
		<dc:creator>Rob Diana</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[agile development]]></category>
		<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Unit testing]]></category>

		<guid isPermaLink="false">http://regulargeek.com/?p=1976</guid>
		<description><![CDATA[If you talk to a programmer, almost all software sucks, even the programs they wrote a few months ago. This is typically due to changing technology, increased knowledge or even a market shift. The software you wrote may have been a good idea when you started, but does it serve the correct purpose now? Even [...]]]></description>
			<content:encoded><![CDATA[<p>If you talk to a programmer, almost all software sucks, even the programs they wrote a few months ago. This is typically due to changing technology, increased knowledge or even a market shift. The software you wrote may have been a good idea when you started, but does it serve the correct purpose now? Even when there is a question of real purpose, the software gets installed into a production environment, because nobody wants to be involved in a project that did not deploy.</p>
<p>Now that the system is in production what do you do? Somebody typically maintains the system, correcting defects and adding features. Slowly, that system continues to grow. However, the programmers and managers realize that the system does not really do what they want it to, or maybe there is a ton of technical debt that should be cleaned up. In many cases, people call for a complete rewrite of the system. If you are an <a class="zem_slink" title="Agile software development" rel="wikipedia" href="http://en.wikipedia.org/wiki/Agile_software_development">agile development</a> organization, this typically <a href="http://www.bigvisible.com/asroka/agile-and-re-engineering/" target="_blank">brings additional concerns</a>:</p>
<blockquote><p>Re-engineering is highly problematic from an Agile point of view. We are not producing functionality. We are not working from user facing stories. There may be business value to what we are doing (such as improving the performance of our application) but it is not directly measurable business value in most cases.</p>
<p>Re-engineering is also too often driven by technical concerns within the team (or its management). We didn’t build it as well as we wish we had. We have learned new things now, and we want to incorporate them.</p></blockquote>
<p>Generally, wholesale re-engineering of a system is a bad idea, because the system still serves a purpose and its&#8217; functionality is a moving target. If the system does not serve a purpose, then what is the point of rewriting it? So, if we follow the assumption that parts of the system were a good idea and scrapping the system is a bad idea, how do you modify the system? This is highly dependent upon what you are trying to change, and how agile your organization really is.  For our examples, let&#8217;s assume the organization is used to <a class="zem_slink" title="Scrum (development)" rel="wikipedia" href="http://en.wikipedia.org/wiki/Scrum_%28development%29">Scrum</a>, and uses it in all software projects. How do we deal with the desire to re-engineer a system and resolving technical debt?</p>
<h3>High Defect Rates</h3>
<p>One way that a technical debt heavy application can present itself is when there is a high defect rate. This may not be a bad thing if there is a desire to rewrite the application. You can use the defect list as the list of <a class="zem_slink" title="User story" rel="wikipedia" href="http://en.wikipedia.org/wiki/User_story">user stories</a>, and plan a few sprints to clean up the defects. However, the key is to include some time to analyze the areas or components that have the highest defect density. These areas will be the focus of each sprint. Your defects can become additional <a class="zem_slink" title="Unit testing" rel="wikipedia" href="http://en.wikipedia.org/wiki/Unit_testing">unit tests</a>, so that you have your baseline tests as well as proof that the new code should also handle the defect situations. Once you have this safety net of unit tests, you can freely re-engineer and refactor these troublesome areas. If the application was &#8220;very buggy&#8221;, this type of work can quickly stabilize a system without taking on the pain of trying to rewrite the whole application and introducing different issues.</p>
<h3>Replacing Old Technology</h3>
<p>Let me start this by saying you should not replace old technology just because you think it is old or because there is something newer and cooler. You need a valid business reason, or management will not agree to the work. One good reason to replace old technology is when support for it is being ended (or planned), and the new version has some features that your application could take advantage of. In particular, you really want to attack this problem when there is a feature to add or there are some defects that need fixing. Hopefully, you can still use the existing unit tests, but if not, the unit tests will need to be modified (or rewritten) to work with the new technology. This is one of the more dangerous tasks because it is such a significant change. Typically, the code will be changing enough for this work to be considered a significant release, and will require all the trappings of a typical longer project. This also requires a significant amount of analysis in order to determine the system impact and the proper user stories. The risk in this type of project is proportional to the size of the technology being replaced. If you are replacing a library that is used for financial calculations, you may be able to organize the sprints in a similar manner to the defect correction example. However, if you are moving from Struts 1.1 to <a class="zem_slink" title="Spring Framework" rel="homepage" href="http://www.springsource.org">Spring MVC</a> 3.0, you have a significant amount of risk and analysis to do, so plan accordingly.</p>
<h3>New Feature Does Not Fit The Design</h3>
<p>Sometimes, design decisions made at the beginning of a project may not have taken into consideration some requirement that will appear 6 months later. Because of that problem, designs will need to change over time. The problem here is that sometimes a new feature cannot be implemented with the current design. At one time I worked on an internal <a class="zem_slink" title="Content management system" rel="wikipedia" href="http://en.wikipedia.org/wiki/Content_management_system">content management system</a>. The CMS system used the concept of widgets to define prepackaged html tags with supporting javascript. This was very similar to JSP custom tags, but the original design of the system was completed several years ago, so the widgets were created, parsed and manipulated in the <a class="zem_slink" title="Java (programming language)" rel="homepage" href="http://java.sun.com">Java</a> code. To add a new widget, which had only happened once after the initial design, you needed to modify the code in a few places as well as creating the new widget classes. Now, a new requirement has come along where a user of the system must be able to define their own widget with html and javascript. In this type of case, a new design was needed as the widget definitions moved from static definition to dynamic definition. As in the previous examples, the unit tests are very important as they provide a minimal set of requirements the new design must satisfy.</p>
<p>As in the old technology replacement example, this work will have risk proportional to the size of the components being replaced. In the CMS example, the design change of a core feature carried significant risk. One benefit was that the widget conversion allowed stories and sprints to be planned nicely. First, the basic dynamic widget design could be completed, and then future sprints would deal with the conversion of each static widget. You could actually run the two widget systems in parallel until the last static widget is converted. Once that is complete, you can freely delete the old static widget classes and marvel at your new implementation.</p>
<p>The key in all of these examples is finding a way to break each task into user stories so that you can plan your sprints. This allows you to get the project on a familiar path that even management can understand.</p>
<div class="zemanta-pixie"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" src="http://img.zemanta.com/zemified_e.png?x-id=bffb34c8-63fc-48ea-82e8-f00048a627cd" alt="Enhanced by Zemanta" /></a><span class="zem-script more-related"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>


<p>Related posts:<ul><li><a href='http://regulargeek.com/2010/08/13/writing-unit-tests-is-your-job-so-quit-making-excuses/' rel='bookmark' title='Permanent Link: Writing Unit Tests Is Your Job, So Quit Making Excuses'>Writing Unit Tests Is Your Job, So Quit Making Excuses</a></li>
<li><a href='http://regulargeek.com/2010/06/03/survey-says-developers-think-testing-is-failing/' rel='bookmark' title='Permanent Link: Survey Says: Developers Think Testing Is Failing'>Survey Says: Developers Think Testing Is Failing</a></li>
<li><a href='http://regulargeek.com/2010/07/11/how-to-succeed-with-scrum-when-your-company-is-anti-agile/' rel='bookmark' title='Permanent Link: How To Succeed With Scrum When Your Company Is Anti-Agile'>How To Succeed With Scrum When Your Company Is Anti-Agile</a></li>
</ul></p>]]></content:encoded>
			<wfw:commentRss>http://regulargeek.com/2010/07/20/re-engineering-in-agile-development-can-just-be-refactoring/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 2.286 seconds -->
