<?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>Process for the Enterprise &#187; Go</title>
	<atom:link href="http://www.bp-3.com/blogs/tag/go/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bp-3.com/blogs</link>
	<description>A Blog about Enterprise BPM and Business Process Improvement by the folks at BP3</description>
	<lastBuildDate>Fri, 10 Feb 2012 14:14:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Should I Stay or Should I &#8220;Go&#8221;</title>
		<link>http://www.bp-3.com/blogs/2009/11/should-i-stay-or-should-i-go/</link>
		<comments>http://www.bp-3.com/blogs/2009/11/should-i-stay-or-should-i-go/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 15:00:00 +0000</pubDate>
		<dc:creator>Scott Francis</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[BPMS]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://www.bp-3.com/blogs/?p=1349</guid>
		<description><![CDATA[So, when twitter turned up mentions of a new language from Google called Go, I was sure it was a prank.  I even looked at the calendar to see if it was some kind of day worthy of pranking the Internet at large.  After I saw a few more tweets and retweets about Go, I [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>So, when twitter turned up mentions of a new language from Google called Go, I was sure it was a prank.  I even looked at the calendar to see if it was some kind of day worthy of pranking the Internet at large.  After I saw a few more tweets and retweets about Go, I even clicked the link to see what it took me to (honestly, try searching for &#8220;Go&#8221; sometime&#8230; you would think the people at Google would understand that a common two letter word <em>may</em> not be a great search term&#8230;).</p>
<p>So I read the FAQ on the &#8220;Go&#8221; site <a href="http://golang.org/doc/go_lang_faq.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/golang.org/doc/go_lang_faq.html?referer=');">here</a>.  Despite my better judgment I do like some of the conventions and minimalism they&#8217;ve adopted, such as having postfix, but not prefix notation for incrementing.  And there were a few statements that *really* hit home for me, like this one:</p>
<blockquote><p>Another point is that a large part of the difficulty of concurrent and multi-threaded programming is memory management; as objects get passed among threads it becomes cumbersome to guarantee they become freed safely. Automatic garbage collection makes concurrent code far easier to write. <strong>Of course, implementing garbage collection in a concurrent environment is itself a challenge, but meeting it once rather than in every program helps everyone</strong>.</p>
<p>Finally, concurrency aside, garbage collection makes interfaces simpler because they don&#8217;t need to specify how memory is managed across them.</p></blockquote>
<p>They&#8217;ve articulated a key principle of their approach -<em> that they are solving something that is a hard problem, not because it is hard, but because it is hard and useful to the end users (other programmers)</em>.  They are faced with a choice of solving that problem once in the language (implementing good, efficient garbage collection), or implementing it myriad times in the programs written with this language (a la C and C++).  Hard problems that have a lot of re-use and benefit are worth solving.</p>
<p>If we look at a good BPMS, it serves some of the same function &#8211; handling parallelism, memory management, and other key software architecture concerns for the business process author &#8211; <em>in order to allow the author to focus more clearly on solving the business problem. </em>BPMS offerings largely have a <em>lot</em> of room to improve on all these fronts &#8211; but they&#8217;re still the best thing we have for a &#8220;language&#8221; that fits the &#8220;problem&#8221; (despite rules vendors&#8217; claims to the contrary).</p>
<p>I&#8217;m often faced with a problem that lends itself to being solved once, well &#8211; or many times, poorly.  And often the software engineers of our world tell me &#8220;yes, but that&#8217;s hard, and not on the road map.&#8221;  A great example of this is date calculations that transparently do things like comparing, navigating timezones, calculating differences, navigating business days (and calendars), etc.  A better example is robust versioning for complex assets like business process models which include all the implementation details.</p>
<p>Other &#8220;features&#8221; that caught my eye in Go:</p>
<ul>
<li>No generic types.  No exceptions.  They admit they don&#8217;t have a good solution yet, so they don&#8217;t slap a band-aid on it.  Try not to write code that breaks.</li>
<li>No type inheritance.  A type is more like an &#8220;interface&#8221; &#8211; where any object that implements the methods the type requires are, by definition, &#8220;of that type&#8221;.  This reminds me a bit of protocols in objective-C, but without the necessity of pre-defining the relationships (technically, you can define and compile-and-link later in objective-C but that&#8217;s another story).</li>
<li>No overloading.  Never in the history of software engineering has a more useless and anti-performant feature been introduced at a language level.  Nice to see another language that forgoes operator overloading.</li>
</ul>
<p>Of course, this minimalism will be tested with time &#8211; especially if the audience of Go users expands &#8211; or if the language is handed over to a standards body full of people who really have it as an interest to keep tweaking the language (a la Java and C++) &#8211; over time making it increasingly complicated.</p>
<p>In the meantime, I&#8217;m just happy to be pleasantly surprised that this supposed prank has some decent substance.  Did Google really need to design a new language to handle concurrency and other large-scale problems well?  I can&#8217;t say for sure, but at least once going down that road they&#8217;ve made some promising early design decisions: focusing on the key, differentiated problems their solving, and postponing or not solving areas that are not directly related.</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=66b5d65e-2b6d-8223-83e8-3acef0a1a310" alt="" /></div>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.bp-3.com/blogs/2009/11/should-i-stay-or-should-i-go/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

