<?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, 30 Jan 2012 14:00:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<cloud domain='regulargeek.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
		<item>
		<title>Is The Web Really Just Links Or Is It Evolving?</title>
		<link>http://regulargeek.com/2012/01/08/is-the-web-really-just-links-or-is-it-evolving/</link>
		<comments>http://regulargeek.com/2012/01/08/is-the-web-really-just-links-or-is-it-evolving/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 14:02:49 +0000</pubDate>
		<dc:creator>Rob Diana</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Semantic Web]]></category>
		<category><![CDATA[Abstraction layer]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[DataSift]]></category>
		<category><![CDATA[Dave Winer]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[Gnip]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://regulargeek.com/?p=4005</guid>
		<description><![CDATA[Lately, Dave Winer has been doing a lot of thinking. Dave has been around for a while, so when he starts thinking about interesting questions, we should all be listening. However, I am not saying that we should be agreeing with him, just reading and forming opinions. First, Dave complains about mobile apps and how [...]]]></description>
			<content:encoded><![CDATA[<p>Lately, <a href="http://scripting.com/" target="_blank">Dave Winer</a> has been doing a lot of thinking. Dave has been around for a while, so when he starts thinking about interesting questions, we should all be listening. However, I am not saying that we should be agreeing with him, just reading and forming opinions. First, <a href="http://scripting.com/stories/2011/12/14/enoughWithTheAppsAlready.html" target="_blank">Dave complains about mobile apps</a> and how they are not what the web is about:</p>
<blockquote><p>And all this business about apps is a real spoiler for suspension of disbelief. I&#8217;m clicking a link, expecting to learn more about what I was reading (that was certainly the author&#8217;s intent) but instead I get an ad for an app. If I seriously consider it, I&#8217;ve lost my train of thought. If I actually take the detour and install it, I&#8217;ve lost bigtime. The best way to minimize the loss is hit the Back button and skip it. But that&#8217;s a loss too. I clicked the link for a reason. And that was thwarted.</p></blockquote>
<p>The main concept here is that if you provide links in your mobile application, then you should be linking to some information about the topic you were reading, not an advertisement for a different app. By itself, this complaint seems to be a bit of a stretch. However, <a href="http://scripting.com/stories/2011/12/31/theUninternet.html" target="_blank">he follows with another post a few weeks later that really explains his issue</a>:</p>
<blockquote><p>Every time around the loop, since then, the Internet has served as the antidote to the controls that the tech industry would place on users. Every time, the tech industry has a rationale, with some validity, that wide-open access would be a nightmare. But eventually we overcome their barriers, and another layer comes on.</p></blockquote>
<p>Basically, Dave is seeing these mobile apps as trying to kill the web. If the app is trying to control interactivity by only supplying a &#8220;walled garden&#8221;, similar to what <a class="zem_slink" title="Facebook" href="http://facebook.com" rel="homepage" target="_blank">Facebook</a> is doing, then the user really loses the power of the web. The core idea of linking gets lost in this scenario. However, what if the web is more than just links?</p>
<p>Prior to the last few years, people were very document-centric and reading <a class="zem_slink" title="HTML" href="http://en.wikipedia.org/wiki/HTML" rel="wikipedia" target="_blank">HTML</a> pages from a PC. Now, we have mobile devices that allow you to use the web whenever you want no matter where you are. We also had web applications that did not allow you to take your information elsewhere or integrate with other applications. Now, many applications use your <a class="zem_slink" title="Twitter" href="http://twitter.com" rel="homepage" target="_blank">Twitter</a> or Facebook login in order to authenticate, and then post statuses or even create events in Facebook.</p>
<p>In order to support all of this integration, the web is evolving. The web is no longer just HTML. Last summer, <a href="http://regulargeek.com/2011/06/15/the-rise-of-the-api-the-future-of-the-web/" target="_blank">I wrote about the rise of the API</a>:</p>
<blockquote><p>As the web evolves, much of that evolution will be powered by application <a class="zem_slink" title="Application programming interface" href="http://en.wikipedia.org/wiki/Application_programming_interface" rel="wikipedia" target="_blank">APIs</a>. Some of the APIs will be application specific, like the Twitter API, and others will be more generic like the various <a class="zem_slink" title="Semantic Web" href="http://semanticweb.org" rel="homepage" target="_blank">semantic web</a> standards. All of these available APIs allow programmers to create more interesting applications, and potentially a new API layer on top of what already exists. What this means in the long term is that we are finally getting to the point where the semantic web had hoped to be, linking data between various applications and hopefully doing something interesting.</p></blockquote>
<p>A web of links can be limiting when looking at applications. When looking at reading a news story, links make sense, but reading articles is only part of the web. By looking at the data available, we are starting to create a more interactive and informative web. <a href="http://techcrunch.com/2011/12/30/a-web-of-apps/" target="_blank">Sarah Perez at TechCrunch thinks this could be moving towards a web of apps</a>, but that post is more focused on mobile apps. As I said previously, mobile apps tend to be limiting in their own ways.</p>
<p>Think about the possibilities of using the various APIs that are available. I am not just talking about the social network APIs, I am talking about things like Freebase, a huge collection of data, or even data aggregator/providers like <a href="http://gnip.com/" target="_blank">Gnip</a> and <a class="zem_slink" title="DataSift" href="http://datasift.net/" rel="homepage" target="_blank">DataSift</a>. Using these services, developers can build interesting applications using data from various sources without worrying about what the Twitter API looks like.</p>
<p>These types of services provide a level of abstraction that developers are used to. First, you get the core APIs, then you start abstracting those APIs into something easier to use. Once concerns about low-level APIs are removed, developers can focus on being more productive with the new <a class="zem_slink" title="Abstraction layer" href="http://en.wikipedia.org/wiki/Abstraction_layer" rel="wikipedia" target="_blank">abstraction layer</a> and start solving real problems. Once developers focus on real problems, that is when the real fun begins.</p>
<p>So, is the web just a bunch of links or are we finally getting a layer of abstraction on top of all of the web applications. This layer of abstraction is a normal evolution for developers, and we just need to ensure this is translated into more interesting applications.</p>
<h6 class="zemanta-related-title">Related articles from RegularGeek:</h6>
<ul class="zemanta-article-ul">
<li class="zemanta-article-ul-li"><a href="http://regulargeek.com/2011/10/16/twitter-should-cut-the-sms-cord/" target="_blank">Twitter Should Cut The SMS Cord</a></li>
<li class="zemanta-article-ul-li"><a href="http://regulargeek.com/2011/12/24/a-look-back-and-a-look-ahead-at-2012/" target="_blank">A Look Back And A Look Ahead At 2012</a></li>
<li class="zemanta-article-ul-li"><a href="http://regulargeek.com/2011/12/10/plus-or-like-choose-your-sharing-weapon/" target="_blank">Plus Or Like, Choose Your Sharing Weapon</a></li>
</ul>
<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=3fe4904f-78f3-4fee-9e95-1cab521a9a66" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://regulargeek.com/2012/01/08/is-the-web-really-just-links-or-is-it-evolving/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What Happened To The 9 Programming Languages To Watch in 2011</title>
		<link>http://regulargeek.com/2011/12/19/review-of-the-9-programming-languages-to-watch-in-2011/</link>
		<comments>http://regulargeek.com/2011/12/19/review-of-the-9-programming-languages-to-watch-in-2011/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 12:00:05 +0000</pubDate>
		<dc:creator>Rob Diana</dc:creator>
				<category><![CDATA[Job Trends]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Clojure]]></category>
		<category><![CDATA[erlang]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[go]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[lua]]></category>
		<category><![CDATA[objective c]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[r]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Scala]]></category>
		<category><![CDATA[scheme]]></category>
		<category><![CDATA[TIOBE Index]]></category>

		<guid isPermaLink="false">http://regulargeek.com/?p=3967</guid>
		<description><![CDATA[Last year, I wrote a post entitled 9 Programming Languages To Watch In 2011. Now that 2011 is basically over, let&#8217;s see what happened to these languages over the course of the year. As a reminder, these languages were selected because I expected to see larger than average movement, either up or down. So, there [...]]]></description>
			<content:encoded><![CDATA[<p>Last year, I wrote a post entitled <a href="http://regulargeek.com/2010/12/11/9-programming-languages-to-watch-in-2011/">9 Programming Languages To Watch In 2011</a>. Now that 2011 is basically over, let&#8217;s see what happened to these languages over the course of the year. As a reminder, these languages were selected because I expected to see larger than average movement, either up or down. So, there is no Java, Ruby, <a class="zem_slink" title="Python (programming language)" href="http://www.python.org/" rel="homepage">Python</a> or Objective-C. There are no other typically mainstream languages in this list.</p>
<p>First, here are the comments I had on each language:</p>
<ol>
<li><strong><a title="Lua (programming language)" href="http://www.lua.org/" rel="homepage">Lua</a></strong> – The language is seeing some good activity on <a class="zem_slink" title="GitHub" href="http://github.com" rel="homepage">GitHub</a> and <a class="zem_slink" title="Stack Overflow" href="http://stackoverflow.com/" rel="homepage">StackOverflow</a>. It has a solid Tiobe ranking, but more importantly, jobs for Lua are becoming available. The relative trend for Lua is a great indicator that it is ready to go mainstream.</li>
<li><strong><a href="http://www.r-project.org/" target="_blank">R</a></strong> – With data analysis and big data becoming a part of every web startup, languages catering to the data crowd will become popular. The job trend data will be the most interesting part to watch here.</li>
<li><strong><a title="Clojure" href="http://clojure.org/" rel="homepage">Clojure</a></strong> – While not popular within the Tiobe index, it is popular in some programming circles. In particular, its job trend growth is showing that it could be posed for a big year of adoption.</li>
<li><strong><a href="http://golang.org/" target="_blank">Go</a></strong> – Only Tiobe really shows this as a popular language. It is not ranked well in the Dataist Tier, and job trends are not very reliable yet. However, with a parent of Google it may not need purely organic growth.</li>
<li><strong><a href="http://www.erlang.org/" target="_blank">Erlang</a></strong> – This has been around for a few years and has decent trends all around. With the continued growth of real-time technologies like XMPP (<a class="zem_slink" title="Ejabberd" href="http://www.process-one.net/en/ejabberd/" rel="homepage">eJabberd</a> specifically), <a class="zem_slink" title="Pubsubhubbub" href="http://code.google.com/p/pubsubhubbub/" rel="homepage">PubSubHubbub</a> and others, 2011 could be a year where it becomes the next Python.</li>
<li><strong><a href="http://www.scala-lang.org/" target="_blank">Scala</a></strong> – This is one of the interesting trends. Scala has a very good showing in the Dataist Tier, but is not really ranked in the Tiobe index. With the solid job growth trends and popular adopters (i.e. Twitter), Scala could gain a serious amount of acceptance.</li>
<li><strong><a title="Groovy (programming language)" href="http://groovy.codehaus.org/" rel="homepage">Groovy</a></strong> – More than anything, I believe Groovy missed its window of opportunity. It is a solid scripting language with decent job growth trends, but how can it differentiate itself from Ruby, Python, Erlang and Scala?</li>
<li><strong><a href="http://en.wikipedia.org/wiki/Scheme_(programming_language)" target="_blank">Scheme</a></strong> – For whatever reason, this language refuses to go away and has even picked up some interest. Without decent job growth, we could be another year away from Scheme breaking out again, at least 30 years after it broke out the first time.</li>
<li><strong><a href="http://en.wikipedia.org/wiki/ActionScript" target="_blank">ActionScript</a></strong> – ActionScript is included in this list because of its high ranking on Tiobe and the Dataist Tier. However, the job trends do not point to good things for the language. It could be a temporary slump, so you should keep an eye on it next year.</li>
</ol>
<div>So, what happened in 2011? The job trends give us some level of corporate demand. One minor note is that the job data is somewhat noisy and difficult to grab for some languages. Go and R are not in the list because of the difficulty of getting any reasonably sane job demand. Scheme is still included, but it is still fairly noisy data. The following chart shows the <a href="http://www.indeed.com/jobtrends?q=lua,+scheme,+actionscript,+erlang,+groovy,+scala,+clojure&amp;l=" target="_blank">raw demand for the remaining languages</a>:</div>
<div><a href="http://www.indeed.com/jobtrends?q=lua,+scheme,+actionscript,+erlang,+groovy,+scala,+clojure&amp;l="><img class="aligncenter size-full wp-image-3977" title="Indeed Job Trends" src="http://regulargeek.com/wordpress/wp-content/uploads/2011/12/indeedJobTrends.png" alt="" width="540" height="300" /></a></div>
<div>As you can see, ActionScript continues its decline, and it has started to decline more rapidly. Scheme, even with the noisy data, is fairly flat. Groovy is showing solid growth over the past few years, and Scala demand seems to be increasing quickly. Lua is only showing slight growth, outpacing Erlang and Clojure.</div>
<div></div>
<div>Now, let&#8217;s take a look at the <a href="http://www.indeed.com/jobtrends?q=lua,+scheme,+actionscript,+erlang,+groovy,+scala,+clojure&amp;l=&amp;relative=1" target="_blank">relative job growth of these languages</a>:</div>
<div><a href="http://www.indeed.com/jobtrends?q=lua,+scheme,+actionscript,+erlang,+groovy,+scala,+clojure&amp;l=&amp;relative=1"><img class="aligncenter size-full wp-image-3979" title="Indeed Relative Job Growth" src="http://regulargeek.com/wordpress/wp-content/uploads/2011/12/indeedRelativeJobGrowth.png" alt="" width="540" height="300" /></a></div>
<div>This is where things get interesting. As you can see, both Lua and Clojure seem to be exploding, but that does not yet translate into large job demand. Also growing rapidly, and at almost the same rate, are Scala, Erlang and Groovy. Scheme and ActionScript have no relative growth compared to the others, as is expected.</div>
<div></div>
<div>The <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html" target="_blank">TIOBE Index for December 2011</a> was recently updated, so it also provides a good comparison. In addition, I compared the activity from GitHub and StackOverflow in order to get a broader picture of activity.</div>
<div>
<ul>
<li><strong>Go</strong> (Tiobe: 34 , Change: -13): The TIOBE rank crashed, going down 13 places. The relative activty on StackOverflow and GitHub decreased as well. Even though Google is the source of the language, it does not seem to be grabbing a lot of more mainstream attention.</li>
<li><strong>R</strong> (Tiobe: 24, Change: +2): The TIOBE rank increased a few places. The StackOverflow and GitHub activity decrease a slight amount, but nothing significant. Given that R is not really considered a general purpose language, its popularity is still somewhat surprising.</li>
<li><strong><a title="Lua (programming language)" href="http://www.lua.org/" rel="homepage">Lua</a></strong> (Tiobe: 21, Change: +6): The TIOBE rank increased solidly, though not as quickly as others. The GitHub and StackOverflow activity decreased a bit, contradicting the TIOBE index. However, the job trends above are very good, so we should continue to watch Lua in the coming year.</li>
<li><strong>Scheme</strong> (Tiobe: 30, Change: -1): Not surprisingly, the TIOBE rank did not change much. The StackOverflow and GitHub activity did not change much either. With the growth of some of these other languages, the need for Scheme is not really obvious anymore. In addition, the job trends are not positive for Scheme either.</li>
<li><strong>ActionScript</strong> (Tiobe: 50-100, Change: -&gt;13): As can be expected, the TIOBE rank for ActionScript declined a lot as it dropped out of the top 50 and into the 50-100 bracket. The job demand shows a similar downward trend. StackOverflow and GitHub activity did not change too much however. I would guess that 2012 will not be a good year for ActionScript.</li>
<li><strong>Erlang</strong> (Tiobe: 29, Change: +20): Showing possibly the biggest gains of the year, the TIOBE rank increased a ton moving up 20 places. The StackOverflow and GitHub activity did not match this growth. The job trend information is definitely showing positive signs, so Erlang is a language to keep an eye on.</li>
<li><strong><a title="Groovy (programming language)" href="http://groovy.codehaus.org/" rel="homepage">Groovy</a></strong> (Tiobe: 45, Change: +&gt;5): The TIOBE rank increase is somewhat unknown as Groovy makes an appearance in the top 50. StackOverflow and GitHub activity increased as well. The big difference is shown in the job demand, where Groovy has shown really solid growth trends.</li>
<li><strong>Scala</strong> (Tiobe: 50-100, Change: 0): Given that Scala did not break out of the 50-100 tier on the TIOBE index, we cannot estimate growth there. Overall, the relative activity on GitHub and StackOverflow did not change much either. The job trends show a different picture as job demand definitely grows at a solid rate.</li>
<li><strong><a title="Clojure" href="http://clojure.org/" rel="homepage">Clojure</a></strong> (Tiobe: 50-100, Change: +?): Clojure moved from the 100+ tier on TIOBE to the 50-100 tier, so there is some solid but unknown growth there. Oddly, the activity did not grow much on StackOverflow or GitHub. The raw job trend information is not great, but the relative growth trends are fantastic. Closure could have a big year in 2012.</li>
</ul>
<div>So, what&#8217;s in store for 2012? Well, I am planning to review more programming language data to get a better idea on trends and mainstream adoption. If you have an idea for other data sources besides TIOBE, Indeed, GitHub and StackOverflow, please let me know in the comments.</div>
</div>
<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=5c81b9fa-5f0e-4d2c-8137-dafce6250637" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://regulargeek.com/2011/12/19/review-of-the-9-programming-languages-to-watch-in-2011/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Giving Thanks To Arcane Programming Languages</title>
		<link>http://regulargeek.com/2011/11/24/giving-thanks-to-arcane-programming-languages/</link>
		<comments>http://regulargeek.com/2011/11/24/giving-thanks-to-arcane-programming-languages/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 12:00:11 +0000</pubDate>
		<dc:creator>Rob Diana</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Algol 60]]></category>
		<category><![CDATA[BCPL]]></category>
		<category><![CDATA[Clipper]]></category>
		<category><![CDATA[Dylan]]></category>
		<category><![CDATA[Eiffel]]></category>
		<category><![CDATA[Factor]]></category>
		<category><![CDATA[Forth]]></category>
		<category><![CDATA[go]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[Inform]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[KRL]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[Modula-2]]></category>
		<category><![CDATA[NATURAL]]></category>
		<category><![CDATA[Oberon]]></category>
		<category><![CDATA[Programming language]]></category>
		<category><![CDATA[prolog]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[REXX]]></category>
		<category><![CDATA[SNOBOL]]></category>
		<category><![CDATA[Tcl]]></category>
		<category><![CDATA[UNITY]]></category>
		<category><![CDATA[Verilog]]></category>
		<category><![CDATA[WebGL]]></category>
		<category><![CDATA[XQuery]]></category>
		<category><![CDATA[Yorick]]></category>
		<category><![CDATA[Zsh]]></category>

		<guid isPermaLink="false">http://regulargeek.com/?p=3906</guid>
		<description><![CDATA[Like many software developers, I have toyed with many languages over the years. Some languages have grown in popularity and others have waned. Today, I would like to give thanks to those esoteric, arcane, rare and industry changing languages in a nice A-Z listing. Some are old, some are new, some are popular, some are [...]]]></description>
			<content:encoded><![CDATA[<p>Like many software developers, I have toyed with many languages over the years. Some languages have grown in popularity and others have waned. Today, I would like to give thanks to those esoteric, arcane, rare and industry changing languages in a nice A-Z listing. Some are old, some are new, some are popular, some are not and some are just plain odd. However, without people trying to create these languages, we would never see any innovation. So, let&#8217;s give thanks to all these languages.</p>
<ul>
<li><strong>A is for <a href="http://en.wikipedia.org/wiki/ALGOL_60" target="_blank">Algol 60</a></strong>, which can be considered the father of structured programming languages.</li>
<li><strong>B is for <a class="zem_slink" title="BCPL" href="http://en.wikipedia.org/wiki/BCPL" rel="wikipedia">BCPL</a></strong>, which we can blame for the travesty that is C.</li>
<li><strong>C is for <a href="http://en.wikipedia.org/wiki/Clipper_(programming_language)" target="_blank">Clipper</a></strong>, and we hope you never used it.</li>
<li><strong>D is for <a href="http://en.wikipedia.org/wiki/Dylan_(programming_language)" target="_blank">Dylan</a></strong>, which is like LISP without parentheses.</li>
<li><strong>E is for <a href="http://en.wikipedia.org/wiki/Eiffel_(programming_language)" target="_blank">Eiffel</a></strong>, which has some cool features that still are not in Java.</li>
<li><strong>F is for <a href="http://en.wikipedia.org/wiki/Factor_(programming_language)" target="_blank">Factor</a> and <a href="http://en.wikipedia.org/wiki/Forth_(programming_language)" target="_blank">Forth</a></strong>, because everyone loves stacks.</li>
<li><strong>G is for <a href="http://en.wikipedia.org/wiki/Go_(programming_language)" target="_blank">Go</a></strong>, as proof of what happens when <a href="http://en.wikipedia.org/wiki/Rob_Pike">Rob Pike</a> and <a class="zem_slink" title="Ken Thompson" href="http://en.wikipedia.org/wiki/Ken_Thompson" rel="wikipedia">Ken Thompson</a> get bored.</li>
<li><strong>H is for <a href="http://en.wikipedia.org/wiki/Haskell_(programming_language)" target="_blank">Haskell</a></strong>, one of a host of <a class="zem_slink" title="Functional programming" href="http://en.wikipedia.org/wiki/Functional_programming" rel="wikipedia">functional languages</a>.</li>
<li><strong>I is for <a href="http://en.wikipedia.org/wiki/Inform" target="_blank">Inform</a></strong>, giving life to interactive fiction.</li>
<li><strong>J is for <a href="http://en.wikipedia.org/wiki/Java_(programming_language)" target="_blank">Java</a></strong>, because so few languages start with J.</li>
<li><strong>K is for <a href="http://en.wikipedia.org/wiki/KRL_(programming_language)" target="_blank">KRL</a></strong>, a frame-based knowledge representation language.</li>
<li><strong>L is for <a href="http://en.wikipedia.org/wiki/Lisp_(programming_language)" target="_blank">LISP</a></strong>, because we love our silly parentheses.</li>
<li><strong>M is for <a class="zem_slink" title="Modula" href="http://en.wikipedia.org/wiki/Modula" rel="wikipedia">Modula</a>-2</strong>, mainly because you probably didn&#8217;t know there was a Modula or a successor named Modula-3.</li>
<li><strong>N is for <a href="http://en.wikipedia.org/wiki/NATURAL" target="_blank">NATURAL</a></strong>, which I have never actually seen used, just discussed.</li>
<li><strong>O is for <a href="http://en.wikipedia.org/wiki/Oberon_(programming_language)" target="_blank">Oberon</a></strong>, because <a href="http://en.wikipedia.org/wiki/Objective-C" target="_blank">Objective-C</a> gets too much publicity already.</li>
<li><strong>P is for <a href="http://en.wikipedia.org/wiki/Prolog" target="_blank">Prolog</a></strong>, progamming logic never seemed so fun.</li>
<li><strong>Q is for <a href="http://en.wikipedia.org/wiki/Qt_(framework)" target="_blank">Qt</a></strong>, although it is more of an application framework.</li>
<li><strong>R is for <a href="http://en.wikipedia.org/wiki/REXX" target="_blank">REXX</a></strong>, an interpreted glue language inflicted upon us by IBM.</li>
<li><strong>S is for <a class="zem_slink" title="SNOBOL" href="http://en.wikipedia.org/wiki/SNOBOL" rel="wikipedia">SNOBOL</a></strong>, one of the first string processing and manipulation languages.</li>
<li><strong>T is for <a href="http://en.wikipedia.org/wiki/Tcl" target="_blank">Tcl</a></strong>, which eventually grew a <a href="http://en.wikipedia.org/wiki/Tk_(framework)" target="_blank">Tk</a> appendage.</li>
<li><strong>U is for <a href="http://en.wikipedia.org/wiki/UNITY_(programming_language)" target="_blank">UNITY</a></strong>, because parallelism is cool and flow control is for the weak.</li>
<li><strong>V is for <a href="http://en.wikipedia.org/wiki/Verilog" target="_blank">Verilog</a></strong>, a hardware description language.</li>
<li><strong>W is for <a class="zem_slink" title="WebGL" href="http://en.wikipedia.org/wiki/WebGL" rel="wikipedia">WebGL</a></strong>, bringing <a class="zem_slink" title="OpenGL" href="http://en.wikipedia.org/wiki/OpenGL" rel="wikipedia">OpenGL</a> to <a class="zem_slink" title="JavaScript" href="http://en.wikipedia.org/wiki/JavaScript" rel="wikipedia">JavaScript</a>.</li>
<li><strong>X is for <a class="zem_slink" title="XQuery" href="http://en.wikipedia.org/wiki/XQuery" rel="wikipedia">XQuery</a></strong>, because even XML needs a programming language.</li>
<li><strong>Y is for <a href="http://en.wikipedia.org/wiki/Yorick_(programming_language)" target="_blank">Yorick</a></strong>, and all those graphs and simulations.</li>
<li><strong>Z is for <a href="http://en.wikipedia.org/wiki/Zsh" target="_blank">Zsh</a></strong>, one of the many Unix shells.</li>
</ul>
<p>Lastly, many thanks to Wikipedia for the <a href="http://en.wikipedia.org/wiki/History_of_programming_languages" target="_blank">&#8220;History of Programming Languages&#8221;</a>, <a href="http://en.wikipedia.org/wiki/List_of_programming_languages" target="_blank">&#8220;List of Programming Languages&#8221;</a>, <a href="http://en.wikipedia.org/wiki/Timeline_of_programming_languages" target="_blank">&#8220;Timeline of Programming Languages&#8221;</a> and much information about the languages themselves.</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=5251ea3e-8d1d-41d0-8e2f-bfeaa07bca01" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://regulargeek.com/2011/11/24/giving-thanks-to-arcane-programming-languages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Researching NoSQL Is No Different Than The Early RDBMS Market</title>
		<link>http://regulargeek.com/2011/11/10/researching-nosql-is-no-different-than-the-early-rdbms-market/</link>
		<comments>http://regulargeek.com/2011/11/10/researching-nosql-is-no-different-than-the-early-rdbms-market/#comments</comments>
		<pubDate>Thu, 10 Nov 2011 14:00:53 +0000</pubDate>
		<dc:creator>Rob Diana</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[RDBMS]]></category>

		<guid isPermaLink="false">http://regulargeek.com/?p=3637</guid>
		<description><![CDATA[How quickly we forget what the dark ages of RDBMS was like. Researching NoSQL solutions is not much different than researching RDBMS software in the mid-90s. Each solution had their problems, some of them severe, and most of the problems would be fixed within a few short release cycles. So, the current problem is how [...]]]></description>
			<content:encoded><![CDATA[<p>How quickly we forget what the dark ages of <a class="zem_slink" title="Relational database management system" href="http://en.wikipedia.org/wiki/Relational_database_management_system" rel="wikipedia">RDBMS</a> was like. Researching <a class="zem_slink" title="NoSQL" href="http://en.wikipedia.org/wiki/NoSQL" rel="wikipedia">NoSQL</a> solutions is not much different than researching RDBMS software in the mid-90s. Each solution had their problems, some of them severe, and most of the problems would be fixed within a few short release cycles. So, the current problem is how to research appropriate solutions for such an immature market like the NoSQL solutions.</p>
<p>First, you need to figure out <a href="http://nosql.mypopescu.com/post/12155791736/nosql-elevator-pitch-parade" target="_blank">whether NoSQL fits your problem</a>:</p>
<blockquote>
<ul>
<li>Do your data needs include massive scalability in a system that supports a highly distributed set of nodes resilient to network outages and inconsistency? Then you might consider NoSql alternatives.</li>
<li>Do you need a DBMS that doesn’t try to force you into static data schemas? Do you need the utmost of data model flexibility? Then you might consider NoSql alternatives.</li>
<li>Is your database going to be filled with a truly massive number of objects with very simply query requirements? Is throughput an absolute priority down to the milliseconds? Then you might consider NoSql alternatives.</li>
<li>Is your database going to be hit with a truly fantastic amount of write activity? Then you might consider NoSql alternatives.</li>
<li>Would your solution benefit greatly from the utmost in maintenance and administration simplicity? Then you might consider NoSql alternatives.</li>
</ul>
</blockquote>
<p>If you talk to any traditional RDBMS developer, they will say that none of these points really require a NoSQL solution or that some of the issues are more related to design problems instead of data storage issues. Those talking points aside, there is some reason that these types of issues keep coming up. Traditional RDBMS systems that are being used at scale require significant administration and an administrator who is very good at their job. One of the reasons that people are using NoSQL solutions in these scenarios is that you do not need to be an experienced <a class="zem_slink" title="Oracle Corporation" href="http://oracle.com" rel="homepage">Oracle</a> cluster DBA, you can just be a well-read software engineer.</p>
<p>One difference between RDBMS and NoSQL solutions is that you really need to understand how you are going to use the database. For an RDBMS, this was not a concern because they are meant as general data storage. The various NoSQL solutions have different purposes. Document stores are different than object stores which are different than the other storage models. The topic of choosing the appropriate type of solution is worthy of its own blog post, so I won&#8217;t cover it here. The important thing to note is that each storage model has advantages and disadvantages, so choosing the right solution can make your implementation much smoother.</p>
<p>However, there are other things you need to think about when researching NoSQL solutions. NoSQL is an immature market, so there are other issues that you need to be aware of. First, there is the <a href="http://nosql.mypopescu.com/post/12466059249/anonymous-post-dont-use-mongodb" target="_blank">anonymous rant about MongoDB</a> that has been heavily talked about this week. The following is a condensed version of the issues in the rant:</p>
<blockquote>
<ul>
<li>MongoDB issues writes in unsafe ways by default in order to win benchmarks: If you don’t issue getLastError(), MongoDB doesn’t wait for any confirmation from the database that the command was processed.</li>
<li>MongoDB can lose data in many startling ways: Recovery on corrupt database was not successful, pre transaction log. Replication between master and slave had gaps in the oplogs, causing slaves to be missing records the master had. Yes, there is no checksum, and yes, the replication status had the slaves current</li>
<li>MongoDB requires a global write lock to issue any write</li>
<li>MongoDB’s sharding doesn’t work that well under load: Adding a shard under heavy load is a nightmare. Mongo either moves chunks between shards so quickly it DOSes the production traffic, or refuses to more chunks altogether.</li>
<li>mongos is unreliable: The mongod/config server/mongos architecture is actually pretty reasonable and clever. Unfortunately, mongos is complete garbage. Under load, it crashed anywhere from every few hours to every few days.</li>
<li>MongoDB actually once deleted the entire dataset: MongoDB 1.6, in replica set configuration, would sometimes determine the wrong node (often an empty node) was the freshest copy of the data available. It would then DELETE ALL THE DATA ON THE REPLICA (which may have been the 700GB of good data) AND REPLICATE THE EMPTY SET&#8230; They fixed this in 1.8.</li>
<li>Things were shipped that should have never been shipped: Things with known, embarrassing bugs that could cause data problems were in “stable” releases—and often we weren’t told about these issues until after they bit us&#8230; The response was to send up a hot patch and that they were calling an RC internally, and then run that on our data.</li>
<li>Replication was lackluster on busy servers: Replication would often, again, either DOS the master, or replicate so slowly that it would take far too long and the oplog would be exhausted (even with a 50G oplog).</li>
</ul>
</blockquote>
<p>Obviously, this is a long list of problems, but you will notice that the version numbers are varied, while MongoDB v2.0.1 has already been released and v1.8 was originally released in February 2011, which points out that some of this information could just be old. More than anything, the post seems like a list of issues over several versions. And that is part of the problem when reading posts like this. If you try to think what Oracle was like prior to v7, you probably don&#8217;t remember, but if you ask an experienced DBA they can tell you horror stories. Things were not all that rosy when RDBMS systems were trying to mature.</p>
<p>This is also the nature of software, it has defects and typically severe defects when the software is first released. NoSQL is still leading edge technology, so you have to assume you are taking some risks when you try to implement your storage solution with one of those products. To put this into more obvious terms, one of the most successful pieces of software sucked until it got past v3.1 and that was Microsoft Windows.</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=2963533e-66d2-4b8f-b2ea-fb9684765ca5" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://regulargeek.com/2011/11/10/researching-nosql-is-no-different-than-the-early-rdbms-market/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Confusion As A Usability Defect</title>
		<link>http://regulargeek.com/2011/10/23/confusion-as-a-usability-defect/</link>
		<comments>http://regulargeek.com/2011/10/23/confusion-as-a-usability-defect/#comments</comments>
		<pubDate>Sun, 23 Oct 2011 12:36:24 +0000</pubDate>
		<dc:creator>Rob Diana</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Michael Bolton]]></category>
		<category><![CDATA[QA]]></category>
		<category><![CDATA[Software testing]]></category>
		<category><![CDATA[Test script]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[Usability testing]]></category>

		<guid isPermaLink="false">http://regulargeek.com/?p=3796</guid>
		<description><![CDATA[As a software engineer, you should always be looking for the location of the next defect or at least clues that something is wrong. The problem is that most developers have been trained to wait for feedback from the QA team. In many cases, the QA team is following a script or has been trained [...]]]></description>
			<content:encoded><![CDATA[<p>As a software engineer, you should always be looking for the location of the next defect or at least clues that something is wrong. The problem is that most developers have been trained to wait for feedback from the <a class="zem_slink" title="Quality assurance" href="http://en.wikipedia.org/wiki/Quality_assurance" rel="wikipedia">QA</a> team. In many cases, the QA team is following a script or has been trained on how to use the system, so some clues get lost in the familiarity.</p>
<p><a href="http://www.developsense.com/blog/" target="_blank">Michael Bolton</a> has an interesting post regarding <a href="http://www.developsense.com/blog/2011/10/confusion-as-an-oracle/" target="_blank">confusion as an oracle</a>:</p>
<blockquote><p>James peered over his glasses. &#8220;When you&#8217;re <em>confused</em>,&#8221; he said, &#8220;that&#8217;s a sign that there&#8217;s something <em>confusing</em> going on. I gave you a confusing product to test. Confusion might not be fun, but it&#8217;s a natural consequence when you’re dealing with a confusing product.” James was tacitly suggesting that Jon&#8217;s confusion cound be used as an <em>oracle</em>—a heuristic principle or mechanism by which we recognize a problem.</p></blockquote>
<p>When the QA team is confused, that points to potential issues and should be used as a heuristic. The confusion could be from a few sources. First, the test script could be out of sync with the user interface in such a way that is not obvious how the tester should proceed. This can happen with any application that is evolving throughout the development lifecycle. Second, you could have someone that has not been trained on the application as the tester. This can quickly be remedied by providing the appropriate information on how to use the application. It could also point to an incomplete test script, meaning someone new cannot execute the test script without additional instruction.</p>
<p>Another reason the QA team could be confused is because the application is confusing. This is not a good sign and should be seen as a warning to the development team. Most likely there is a usability defect in the application. For some teams, usability defects do not exist and usability issues get added to the list of things to do. This is a big mistake when developing web applications. Almost a year ago <a href="http://regulargeek.com/2010/12/08/applying-krugs-usability-rules-to-startups/" target="_blank">I wrote about Krug&#8217;s usability rules</a>:</p>
<blockquote><p>The first two Krug rules of usability are very related:</p>
<ol>
<li>Don’t make me think – as far as is humanly possible, when I look at a web page it should be self-evident, obvious, self-explanatory.</li>
<li>It doesn’t matter how many times I have to click, as long as each click is a mindless unambiguous choice.</li>
</ol>
</blockquote>
<p>I love the &#8220;don&#8217;t make me think&#8221; rule. If you design your application with this rule in mind, you will get past most usability problems. However, if you are a startup and developing for a large userbase, you may have slightly more concerns. Mark Evans <a href="http://www.markevanstech.com/2011/10/20/i-get-it/" target="_blank">wrote recently about a rule of thumb &#8220;I get it&#8221;</a>:</p>
<blockquote><p>But if you push aside the entrepreneurial enthusiasm, a startup’s success prospects depend on a compelling idea and, as important, the ability to quickly get potential users to say &#8221;Yes, I get it&#8221;. This means being crystal clear what the service or product does, and the value propositions/benefits being delivered.</p></blockquote>
<blockquote><p>The product/service needs to fill a need or convince users it meets a need they didn&#8217;t know they had. Getting users on board has to be user-friendly and efficient. And the product/service has to delight.</p></blockquote>
<p>If you are following these basic principles, your product should not be confusing. I am a big believer in making things simple for users, because it means they will enjoy (or at least not hate) using the system. This is obviously a good thing, but more importantly, users will look for other ways to use your application.</p>
<p>So, why should a &#8220;confusing&#8221; application have usability defects tracked? If an application is confusing, that means it is going to be difficult to use. When an application is difficult to use, people stop using it because they can not see the benefits to using the system.</p>
<p>Usability is also hard to define, but if you look at Krug&#8217;s rules you will see that the user should not have to find the right thing to do, it should be fairly obvious. But, what about prior to production? You don&#8217;t have typical users on the system, so how do you determine usability? One thing I have seen is that the length of the test script can be a good trigger for something being too difficult.</p>
<p>Let&#8217;s assume you have manual testing being completed. Ignoring the test case setup instructions, how many steps are required to test one feature? This is similar to the number of clicks heuristic, but it is the number of actions a user must take in order to complete a task. You could say the number is something like 7 but that is not entirely useful. I have used &#8220;Why&#8221; as my metric of choice. If you ask &#8220;why do I need to complete this step?&#8221; and there is no obvious or definable reason, then you likely are introducing unnecessary steps to the task. If you can eliminate these issues, your application usability should improve.</p>
<p>To really make your application simpler, make sure your QA team starts questioning things in the beginning of the process. Someone writes the test script, and it could be the QA tester themselves. The developer and the tester should go through the test script and ask &#8220;why&#8221; for each step. This will proactively remove any stumbling blocks in the plan and have a much more usable system after it passes QA testing.</p>
<p>Are there any tips or tricks you have for improving usability?</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=29986c95-a68f-41eb-a457-32c022c49cf3" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://regulargeek.com/2011/10/23/confusion-as-a-usability-defect/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Getting Your HTML5 Fix: HTML5 At DZone</title>
		<link>http://regulargeek.com/2011/10/08/getting-your-html5-fix-html5-at-dzone/</link>
		<comments>http://regulargeek.com/2011/10/08/getting-your-html5-fix-html5-at-dzone/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 11:30:59 +0000</pubDate>
		<dc:creator>Rob Diana</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[DZone]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://regulargeek.com/?p=3744</guid>
		<description><![CDATA[Some of you reading this post will know that many of my blog posts are syndicated at DZone.com. Some of you are probably asking one of two questions: Your blog content can be syndicated to a site like DZone? What is DZone? First, blog content all over the world is syndicated to other sites, even [...]]]></description>
			<content:encoded><![CDATA[<p>Some of you reading this post will know that many of my blog posts are syndicated at DZone.com. Some of you are probably asking one of two questions:</p>
<ol>
<li>Your blog content can be syndicated to a site like DZone?</li>
<li>What is DZone?</li>
</ol>
<p>First, blog content all over the world is syndicated to other sites, even the New York Times and Washington Post do it. DZone has several blogs that they syndicate including RegularGeek.com. The second question is more blasphemy in the development community. For many Java developers, <a href="http://www.javalobby.com" target="_blank">Javalobby</a> was the required reading site. Some time ago, Javalobby became the <a href="http://java.dzone.com/" target="_blank">Java Zone at DZone</a>. DZone has a bunch of other zones as well, like the <a href="http://agile.dzone.com/" target="_blank">Agile Zone</a>, <a href="http://css.dzone.com/" target="_blank">Web Builder Zone</a> and <a href="http://architects.dzone.com/" target="_blank">Architects Zone</a>.</p>
<p>I read a ton of content every day, and I pull several feeds from DZone. So, it came as a good surprise that DZone was launching an <a href="http://www.dzone.com/mz/html5" target="_blank">HTML5 Microzone</a>. Again, you probably have two questions:</p>
<ol>
<li>What is a Microzone?</li>
<li>Why is an HTML5 Microzone a good thing?</li>
</ol>
<p>A Microzone is an area of DZone that does not quite warrant a full subsite yet. There are other cool Microzones, like <a href="http://dzone.com/mz/devops" target="_blank">DevOps</a> and <a href="http://dzone.com/mz/solr-lucene" target="_blank">Solr-Lucene</a>. Microzones are interesting because it allows you to find interesting topical content that may get lost in one of the bigger zones like Javalobby.</p>
<p>The HTML5 Microzone is a very cool addition because it is the hottest development area, and it is receiving a lot of coverage. The problem with HTML5 is that it does not fit cleanly with typical delineations of content. HTML5 is a conglomeration of new HTML tags, JavaScript APIs and CSS3 improvements. There is also the benefit that HTML5 is more mobile-friendly due to the combination of these new specifications, so there is a lot of hype regarding HTML5 on smartphones.</p>
<p>So, if you are looking to find good content on <a href="http://regulargeek.com/2011/07/29/a-simple-introduction-to-html5/" target="_blank">HTML5 technologies</a>, take a look at the <a href="http://www.dzone.com/mz/html5" target="_blank">HTML5 Microzone</a> at DZone. And maybe you will see some RegularGeek content there too.</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=84a848b4-32fa-4307-9c42-73c959182c82" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://regulargeek.com/2011/10/08/getting-your-html5-fix-html5-at-dzone/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Theories And Technologies Are Not Solutions</title>
		<link>http://regulargeek.com/2011/10/06/theories-and-technologies-are-not-solutions/</link>
		<comments>http://regulargeek.com/2011/10/06/theories-and-technologies-are-not-solutions/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 13:59:17 +0000</pubDate>
		<dc:creator>Rob Diana</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Semantic Web]]></category>
		<category><![CDATA[agile development]]></category>
		<category><![CDATA[Agile Manifesto]]></category>
		<category><![CDATA[agile processes]]></category>
		<category><![CDATA[Jim Highsmith]]></category>
		<category><![CDATA[Rob Williams]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://regulargeek.com/?p=3710</guid>
		<description><![CDATA[Technologists have a tendency to focus on the technologies being used during a project. Many people would use the newest or most hyped technologies in order to stay ahead, or even just to use it as a learning experience. I have been in the software development industry long enough to know that technology is not [...]]]></description>
			<content:encoded><![CDATA[<p>Technologists have a tendency to focus on the technologies being used during a project. Many people would use the newest or most hyped technologies in order to stay ahead, or even just to use it as a learning experience. I have been in the software development industry long enough to know that technology is not an answer by itself. The business side of software development does not care about technology, it cares about getting work done.</p>
<p>As a good example of technology without a solution, we can look at the semantic web. I am a big believer in semantic technologies, and they will have their day, but there is not a big solution for semantic technologies yet. The foundation is still being worked on, and even big advocates do not talk about solutions yet. Disappointingly, I found a recent post that talked about the <a href="http://fgiasson.com/blog/index.php/2011/09/27/one-of-semantic-webs-added-value/" target="_blank">added value of the semantic web</a>:</p>
<blockquote><p>If I ask the question: &#8220;What added value(s) does the <a class="zem_slink" title="Semantic Web" href="http://semanticweb.org" rel="homepage">Semantic Web</a> brings on the table?&#8221;. So, what are the benefits that companies and organizations would get from using the Semantic Web? I am pretty sure that after asking this question, I would get answers such as:</p>
<ul>
<li>You will instantly be able to traverse graphs of relationships</li>
<li>You will be able to infer facts (so create/persist new knowledge) from other existing facts</li>
<li>You will be able to check to make sure that your knowledge base is consistent and satisfiable</li>
<li>You will be able to modify your ontologies/vocabularies/schemas without impacting the description of your instance records or the usability of any software that use it (unlike relation databases)</li>
</ul>
</blockquote>
<p>Obviously, if you need to talk about productivity, you are still not in the solution stage. Talking about what you <strong>will</strong> be able to do, as opposed to what you <strong>are</strong> doing, should be a clue that we are looking at a technology and not a solution. Don&#8217;t get me wrong, there are probably plenty of custom business applications that take advantage of semantic web technologies, but we are not really talking about several widely available solutions. Solutions and widely available applications for the semantic web technologies will come, we just have to wait a little longer.</p>
<p>This leads me to my next point, theory is not reality. How many times have you hear technologists start a sentence with &#8220;In theory it should work&#8230;&#8221;? When you look at software development, there is a lot of theory and much of your daily work is based on those theories, like the theoretical performance of a lookup in a <a class="zem_slink" title="Hash table" href="http://en.wikipedia.org/wiki/Hash_table" rel="wikipedia">HashMap</a>. However, when theory is thrown around at higher levels, it starts to get concerning. This came to mind when I read a post by <a href="http://www.jroller.com/robwilliams/" target="_blank">Rob Williams</a>. He was <a href="http://www.jroller.com/robwilliams/entry/few_random_reflections_on_agile" target="_blank">reflecting on the 10 year anniversary of the Agile Manifesto</a>:</p>
<blockquote><p>The ten year mark just passed on the Agile Manifesto. It brought out quite a lot of commentary from the Tribe Elders, and frankly, most of it was depressingly insipid. It reached something of a crescendo for me reading <a class="zem_slink" title="Jim Highsmith" href="http://en.wikipedia.org/wiki/Jim_Highsmith" rel="wikipedia">Jim Highsmith</a>‘s piece in Dr. Dobbs &#8230;, he basically said &#8220;we won, and if what we won ends up getting spoiled, blame the idiots.&#8221; &#8230; What, exactly was won?</p></blockquote>
<p>Seriously, what was won and what was the competition? Given that agile is a process, and it gets spoiled by idiots, did you really win? Part of the idea behind agile development processes is knowledge sharing, meaning no single person should be the keeper of all of the knowledge about a particular area of the code. In theory, this should extend to the agile processes, like Scrum, as well. If that is true, can you really say that you have won if you things get &#8220;spoiled by idiots&#8221;? You may have won the theory competition, but in practice you need to make sure the idiots cannot spoil your efforts.</p>
<p>We see this in software development. In an application, you write code that should pass some <a class="zem_slink" title="Quality assurance" href="http://en.wikipedia.org/wiki/Quality_assurance" rel="wikipedia">QA</a>, where this is just some unit tests or even a manual test plan. That code is expected to work for as long as the application runs. Developers know that they need to write code that is difficult to break, so there are plenty of guards in the application. Part of your job as a software developer is to ensure that the next person to touch the code can modify it easily and reliably. Code that is elegant but immensely difficult to maintain is not entirely good code. Part of the software lifecycle is maintenance, and you need to ensure that your code can be maintained. Idiots can always ruin the beauty of your code, but if it is easily maintainable, it becomes difficult for the code to be &#8220;spoiled by idiots&#8221;.</p>
<p>So, what was Highsmith talking about? Well, agile processes are now being heavily used and the waterfall model is being avoided in most cases. This is a good thing. However, the practice of agile still needs help. The theory of agile has been espoused for a decade, and now people need help implementing agile appropriately. We need to make agile processes easier for people to adopt, creating solutions that people can use to make the processes easier to adopt. Some solutions exist, and some have seen solid adoption rates, but until agile processes and solutions supporting those processes are in more than 80% of all software development teams, we still have work to do. Once the &#8220;agile solution&#8221; is assumed for a development team, you cannot say anything has been won.</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=4f93d3a5-26bf-48e8-a217-c8eb7b339149" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://regulargeek.com/2011/10/06/theories-and-technologies-are-not-solutions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile And The Art Of Outsourcing</title>
		<link>http://regulargeek.com/2011/09/23/agile-and-the-art-of-outsourcing/</link>
		<comments>http://regulargeek.com/2011/09/23/agile-and-the-art-of-outsourcing/#comments</comments>
		<pubDate>Fri, 23 Sep 2011 14:32:29 +0000</pubDate>
		<dc:creator>Rob Diana</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[agile development]]></category>
		<category><![CDATA[Outsourcing]]></category>
		<category><![CDATA[Project management]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Waterfall model]]></category>

		<guid isPermaLink="false">http://regulargeek.com/?p=3673</guid>
		<description><![CDATA[I was first introduced to outsourcing many years ago when dealing with a client that liked using an Indian consulting company. At that time, around the late 90&#8242;s, the company was using purely waterfall development processes and agile was really just getting some publicity. My job was to translate business requirements into functions specifications that [...]]]></description>
			<content:encoded><![CDATA[<p>I was first introduced to <a class="zem_slink" title="Outsourcing" href="http://en.wikipedia.org/wiki/Outsourcing" rel="wikipedia">outsourcing</a> many years ago when dealing with a client that liked using an Indian consulting company. At that time, around the late 90&#8242;s, the company was using purely <a class="zem_slink" title="Waterfall model" href="http://en.wikipedia.org/wiki/Waterfall_model" rel="wikipedia">waterfall development</a> processes and agile was really just getting some publicity. My job was to translate business requirements into functions specifications that would be sent to the outsourcing company. I would then need to review the code that was committed by the development team to ensure it met the requirements, specifications and a general level of adherence to coding standards and quality. I learned a lot from those first few projects, and much of that knowledge has been supported by books and blog posts that have been written by others.</p>
<p>Over the course of my career, I have dealt with outsourcing in many projects, and a common theme tends to appear. In an in-house project, if you make a few mistakes you can likely recover and deliver a successful project. This is typically due to the fact that communication is immediate, and solutions can be crafted with the help of many people. With outsourcing, and in particular offshoring, that communication immediacy normally does not exist. This creates problems by itself, but when you already have made some mistakes it becomes very difficult to deliver a successful project. So, how do you avoid making a ton of problems for yourself? First, there are plenty of blog posts extolling the virtues of communication with offshore teams, so I won&#8217;t go into details. Without open communication, most projects suffer and time differences with offshore teams just makes it more problematic.</p>
<p>From the more technical perspective, how do you ensure that you get what you were asking for? When using waterfall development processes, you need to take the time to create detailed <a class="zem_slink" title="Functional specification" href="http://en.wikipedia.org/wiki/Functional_specification" rel="wikipedia">functional specifications</a> that the outsource team can translate into small tasks. Unless you are very familiar with the outsource team, meaning you probably hired them and have worked with them extensively, you need to have the work completed in smaller tasks in order to understand progress as well as to have a better handle on reviewable design and code. This means that the functional specifications will take some time to develop properly.</p>
<p>You may be wondering why I keep talking about waterfall processes. This is really to set a baseline expectation. Many companies still use these processes and have not transitioned to <a class="zem_slink" title="Agile software development" href="http://en.wikipedia.org/wiki/Agile_software_development" rel="wikipedia">agile processes</a>. Part of this problem is that people know and understand the waterfall model, but they do not entirely understand agile processes. When dealing with outsourcing, agile processes may actually make more sense.</p>
<p>For example, when you are using agile processes, <a class="zem_slink" title="Scrum (development)" href="http://en.wikipedia.org/wiki/Scrum_%28development%29" rel="wikipedia">Scrum</a> in my examples, you have a short sprint, maybe 2 weeks, where you plan to complete a small number of stories. These stories will be broken down into tasks in order to complete the actual development. These tasks could easily replace the detailed specifications from waterfall processes because they are typically small effort problems. In most agile processes, a task is meant to be something that can be completed in a few hours. This is likely a good size for an outsourced resource as well. There will not be a lot of clarification needed for a 4-hour task. The daily standup or scrum meeting is the perfect opportunity to communicate with the outsource team as well, thus eliminating many of the communication problems that typically plague outsourced projects.</p>
<p>Another benefit of agile when outsourcing is the sprint itself. By having a 2 week sprint, you get code that you can demo and test. This allows you to have a much better idea of how a project is progressing, and is one of the major benefits of agile processes anyway. With outsourcing, the management of the project and status of progress is always difficult. Completed sprints ease the pain of the outsourced <a class="zem_slink" title="Project management" href="http://en.wikipedia.org/wiki/Project_management" rel="wikipedia">project management</a>. Again, it is a forced communication point that you normally do not have with outsourced projects.</p>
<p>With the benefits of agile processes, it seems like outsourced projects would actually gain more than in-house projects. So, why it is that we do not see more agile processes for outsourcing?</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=fa2e6014-75a0-499a-9a88-c785e940aada" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://regulargeek.com/2011/09/23/agile-and-the-art-of-outsourcing/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

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

