<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Don&#8217;t Believe the Hype</title>
	<atom:link href="http://guidewiredevelopment.wordpress.com/2008/10/03/dont-believe-the-hype/feed/" rel="self" type="application/rss+xml" />
	<link>http://guidewiredevelopment.wordpress.com/2008/10/03/dont-believe-the-hype/</link>
	<description>A group blog from the Developers at Guidewire Software (www.guidewire.com)</description>
	<lastBuildDate>Thu, 05 Nov 2009 16:23:37 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Alan Keefer</title>
		<link>http://guidewiredevelopment.wordpress.com/2008/10/03/dont-believe-the-hype/#comment-510</link>
		<dc:creator>Alan Keefer</dc:creator>
		<pubDate>Tue, 18 Nov 2008 18:14:53 +0000</pubDate>
		<guid isPermaLink="false">http://guidewiredevelopment.wordpress.com/?p=134#comment-510</guid>
		<description>@TRW

You&#039;re allowed to make whatever assumptions you like about my language knowledge, but I am indeed quite well aware of the fact that pure functional code can be parallelized &quot;automatically.&quot;  How much parallelism can be extracted in such a fashion, though, is going to be based on the higher-level algorithm you choose and the data-dependencies therein.  My contention was basically that unless you explicitly try to avoid those dependencies by using higher-level algorithms that avoid them, just writing something in a pure functional language won&#039;t lead to sustained usage of multiple cores because the data dependencies in your code will still cripple it.  So even if you&#039;re programming functionally with no side effects, you still have to think about parallelism and plan for it just like you would in an imperative language.  I&#039;ve also conceded that thinking functionally might help you to structure things that way, and that&#039;s what I think is the real value there.

I&#039;m always happy to be proven wrong; if someone is consistently able to take single-threaded imperative programs and translate them into functional programs that scale arbitrarily horizontally (or even to an 8-core desktop) without completely rethinking the overall approach, that would be interesting.

Plain assertions that I&#039;m an idiot and that I don&#039;t understand things that I&#039;ve explicitly addressed in this post, subsequent posts, and the comments to those posts, however, aren&#039;t particularly convincing.</description>
		<content:encoded><![CDATA[<p>@TRW</p>
<p>You&#8217;re allowed to make whatever assumptions you like about my language knowledge, but I am indeed quite well aware of the fact that pure functional code can be parallelized &#8220;automatically.&#8221;  How much parallelism can be extracted in such a fashion, though, is going to be based on the higher-level algorithm you choose and the data-dependencies therein.  My contention was basically that unless you explicitly try to avoid those dependencies by using higher-level algorithms that avoid them, just writing something in a pure functional language won&#8217;t lead to sustained usage of multiple cores because the data dependencies in your code will still cripple it.  So even if you&#8217;re programming functionally with no side effects, you still have to think about parallelism and plan for it just like you would in an imperative language.  I&#8217;ve also conceded that thinking functionally might help you to structure things that way, and that&#8217;s what I think is the real value there.</p>
<p>I&#8217;m always happy to be proven wrong; if someone is consistently able to take single-threaded imperative programs and translate them into functional programs that scale arbitrarily horizontally (or even to an 8-core desktop) without completely rethinking the overall approach, that would be interesting.</p>
<p>Plain assertions that I&#8217;m an idiot and that I don&#8217;t understand things that I&#8217;ve explicitly addressed in this post, subsequent posts, and the comments to those posts, however, aren&#8217;t particularly convincing.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: TRW</title>
		<link>http://guidewiredevelopment.wordpress.com/2008/10/03/dont-believe-the-hype/#comment-504</link>
		<dc:creator>TRW</dc:creator>
		<pubDate>Sun, 16 Nov 2008 01:02:44 +0000</pubDate>
		<guid isPermaLink="false">http://guidewiredevelopment.wordpress.com/?p=134#comment-504</guid>
		<description>&quot;You could have the best language support for concurrency in the world and it wouldn’t make parallelizing page rendering any easier because you’d still need to do the hard work of figuring out which parts were independent.&quot;

You know nothing about the topic on which you speak.  Had you known anything about Haskell, for example, you would understand that pure functional code can be parallelized *automatically*.  That&#039;s the point, man.

Ignorance consistently begets confidence.  Your post is confidently ignorant.</description>
		<content:encoded><![CDATA[<p>&#8220;You could have the best language support for concurrency in the world and it wouldn’t make parallelizing page rendering any easier because you’d still need to do the hard work of figuring out which parts were independent.&#8221;</p>
<p>You know nothing about the topic on which you speak.  Had you known anything about Haskell, for example, you would understand that pure functional code can be parallelized *automatically*.  That&#8217;s the point, man.</p>
<p>Ignorance consistently begets confidence.  Your post is confidently ignorant.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Harry</title>
		<link>http://guidewiredevelopment.wordpress.com/2008/10/03/dont-believe-the-hype/#comment-467</link>
		<dc:creator>Harry</dc:creator>
		<pubDate>Tue, 14 Oct 2008 10:15:19 +0000</pubDate>
		<guid isPermaLink="false">http://guidewiredevelopment.wordpress.com/?p=134#comment-467</guid>
		<description>I tend to agree with your view on FP, esp your great pb&amp;j sandwich example. I think this point should make it to the Wikipedia entries on FP, for it very intuitively tells you why FP can be hard to grok by a lot of programmers out there, many of whom are average and solving practical, real-world problems with lot of time constraints. Thanks for sharing your thoughts! /HS</description>
		<content:encoded><![CDATA[<p>I tend to agree with your view on FP, esp your great pb&amp;j sandwich example. I think this point should make it to the Wikipedia entries on FP, for it very intuitively tells you why FP can be hard to grok by a lot of programmers out there, many of whom are average and solving practical, real-world problems with lot of time constraints. Thanks for sharing your thoughts! /HS</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Carson Gross</title>
		<link>http://guidewiredevelopment.wordpress.com/2008/10/03/dont-believe-the-hype/#comment-458</link>
		<dc:creator>Carson Gross</dc:creator>
		<pubDate>Wed, 08 Oct 2008 04:10:14 +0000</pubDate>
		<guid isPermaLink="false">http://guidewiredevelopment.wordpress.com/?p=134#comment-458</guid>
		<description>Rhamphoryncus,

Anders has a great, wide-ranging talk up on programming languages and where he sees things going.  If you get to around the 54 minute mark, he talks about data parallelism

http://jaoo.blip.tv/#1324214

He makes a great point that I didn&#039;t really do a good job conveying: data parallelism is a very syntactically cheap way to test taking advantage of parallelism.  No need to massively rewrite your program or adopt strange architectures from the start.  The places where parallelism is really going to help you you can sprinkle some on and, in the places it won&#039;t, you don&#039;t pay any additional cost.

Cheers,
Carson</description>
		<content:encoded><![CDATA[<p>Rhamphoryncus,</p>
<p>Anders has a great, wide-ranging talk up on programming languages and where he sees things going.  If you get to around the 54 minute mark, he talks about data parallelism</p>
<p><a href="http://jaoo.blip.tv/#1324214" rel="nofollow">http://jaoo.blip.tv/#1324214</a></p>
<p>He makes a great point that I didn&#8217;t really do a good job conveying: data parallelism is a very syntactically cheap way to test taking advantage of parallelism.  No need to massively rewrite your program or adopt strange architectures from the start.  The places where parallelism is really going to help you you can sprinkle some on and, in the places it won&#8217;t, you don&#8217;t pay any additional cost.</p>
<p>Cheers,<br />
Carson</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alan Keefer</title>
		<link>http://guidewiredevelopment.wordpress.com/2008/10/03/dont-believe-the-hype/#comment-450</link>
		<dc:creator>Alan Keefer</dc:creator>
		<pubDate>Mon, 06 Oct 2008 21:00:16 +0000</pubDate>
		<guid isPermaLink="false">http://guidewiredevelopment.wordpress.com/?p=134#comment-450</guid>
		<description>I&#039;ve clarified some things and put up a new post at http://guidewiredevelopment.wordpress.com/2008/10/06/a-more-clearly-stated-version-of-my-argument/</description>
		<content:encoded><![CDATA[<p>I&#8217;ve clarified some things and put up a new post at <a href="http://guidewiredevelopment.wordpress.com/2008/10/06/a-more-clearly-stated-version-of-my-argument/" rel="nofollow">http://guidewiredevelopment.wordpress.com/2008/10/06/a-more-clearly-stated-version-of-my-argument/</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alan Keefer</title>
		<link>http://guidewiredevelopment.wordpress.com/2008/10/03/dont-believe-the-hype/#comment-449</link>
		<dc:creator>Alan Keefer</dc:creator>
		<pubDate>Mon, 06 Oct 2008 18:35:07 +0000</pubDate>
		<guid isPermaLink="false">http://guidewiredevelopment.wordpress.com/?p=134#comment-449</guid>
		<description>@Jason

Yeah, that was perhaps intentionally a bit overstated.  My point is merely that network effects and barriers to entry matter are a consideration for most people when choosing a language.  Most people just aren&#039;t going to go choose a language that 1) only a very small set of people know and 2) is notoriously difficult to become proficient at.  That doesn&#039;t mean they&#039;re not good languages, or that they can&#039;t/shouldn&#039;t/won&#039;t be used for projects, and certainly no one really cares what language their tools are written in so long as they can write in their language of choice.

Again, my main target wasn&#039;t the languages themselves, it&#039;s the hype around the languages.  The breathless &quot;multicore changes everything!&quot; and &quot;run out and learn to program Erlang right now!&quot; sorts of posts are, I think, not all that useful.  It&#039;s great to expose people to the full range of tools so they can select what&#039;s useful to them, but I think it&#039;s also important to spend time and effort on improving the tools that the vast majority of programmers will use, and to focus on creating mainstream tools and frameworks rather than just on more esoteric, niche things.

And yeah, I agree that it&#039;s kind of self-defeating as someone who&#039;s helping design yet another programming language.  But I kinda got calls &#039;em as I sees &#039;em in this case.</description>
		<content:encoded><![CDATA[<p>@Jason</p>
<p>Yeah, that was perhaps intentionally a bit overstated.  My point is merely that network effects and barriers to entry matter are a consideration for most people when choosing a language.  Most people just aren&#8217;t going to go choose a language that 1) only a very small set of people know and 2) is notoriously difficult to become proficient at.  That doesn&#8217;t mean they&#8217;re not good languages, or that they can&#8217;t/shouldn&#8217;t/won&#8217;t be used for projects, and certainly no one really cares what language their tools are written in so long as they can write in their language of choice.</p>
<p>Again, my main target wasn&#8217;t the languages themselves, it&#8217;s the hype around the languages.  The breathless &#8220;multicore changes everything!&#8221; and &#8220;run out and learn to program Erlang right now!&#8221; sorts of posts are, I think, not all that useful.  It&#8217;s great to expose people to the full range of tools so they can select what&#8217;s useful to them, but I think it&#8217;s also important to spend time and effort on improving the tools that the vast majority of programmers will use, and to focus on creating mainstream tools and frameworks rather than just on more esoteric, niche things.</p>
<p>And yeah, I agree that it&#8217;s kind of self-defeating as someone who&#8217;s helping design yet another programming language.  But I kinda got calls &#8216;em as I sees &#8216;em in this case.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Carson Gross</title>
		<link>http://guidewiredevelopment.wordpress.com/2008/10/03/dont-believe-the-hype/#comment-448</link>
		<dc:creator>Carson Gross</dc:creator>
		<pubDate>Mon, 06 Oct 2008 16:24:08 +0000</pubDate>
		<guid isPermaLink="false">http://guidewiredevelopment.wordpress.com/?p=134#comment-448</guid>
		<description>Rhamphoryncus,

&lt;i&gt;_shrug_&lt;/i&gt;

I think &lt;i&gt;parallelization&lt;/i&gt; in general will get us fairly little return on investment at the application level because structuring a program for parallelization ends up meaning creating difficult to debug, non-sequential systems.  If I&#039;m given a few easy to use parallelized data-manipulation methods then, in the few cases it helps, I can use them.

There may be more bang for the buck at deeper points in the application stack (e.g. apache or tomcat) but those sorts of programs have two other things going for them:  they are usually very targeted and they are usually written by pretty smart kids who can handle more difficult concurrency problems even with today&#039;s technologies.  Us poor grinds who have to write very wide and shallow enterprise apps aren&#039;t in the same position.

I&#039;ll grant you that the DBMS is a layer that does a great job exploiting parallelism (as well as providing caching and all the rest.)  That&#039;s why I&#039;m such a huge fan of LINQ: it makes the declarative nature of SQL look at home in an otherwise imperative language.  And, if I&#039;m honest with myself, I agree that &lt;b&gt;that&lt;/b&gt; will be far more beneficial for the average enterprise developer.

Cheers,
Carson</description>
		<content:encoded><![CDATA[<p>Rhamphoryncus,</p>
<p><i>_shrug_</i></p>
<p>I think <i>parallelization</i> in general will get us fairly little return on investment at the application level because structuring a program for parallelization ends up meaning creating difficult to debug, non-sequential systems.  If I&#8217;m given a few easy to use parallelized data-manipulation methods then, in the few cases it helps, I can use them.</p>
<p>There may be more bang for the buck at deeper points in the application stack (e.g. apache or tomcat) but those sorts of programs have two other things going for them:  they are usually very targeted and they are usually written by pretty smart kids who can handle more difficult concurrency problems even with today&#8217;s technologies.  Us poor grinds who have to write very wide and shallow enterprise apps aren&#8217;t in the same position.</p>
<p>I&#8217;ll grant you that the DBMS is a layer that does a great job exploiting parallelism (as well as providing caching and all the rest.)  That&#8217;s why I&#8217;m such a huge fan of LINQ: it makes the declarative nature of SQL look at home in an otherwise imperative language.  And, if I&#8217;m honest with myself, I agree that <b>that</b> will be far more beneficial for the average enterprise developer.</p>
<p>Cheers,<br />
Carson</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rhamphoryncus</title>
		<link>http://guidewiredevelopment.wordpress.com/2008/10/03/dont-believe-the-hype/#comment-438</link>
		<dc:creator>Rhamphoryncus</dc:creator>
		<pubDate>Mon, 06 Oct 2008 07:08:06 +0000</pubDate>
		<guid isPermaLink="false">http://guidewiredevelopment.wordpress.com/?p=134#comment-438</guid>
		<description>My point is that a parallel merge sort is only viable academically.  There&#039;s no evidence it&#039;ll be faster than timsort in practice, and there&#039;s good reason to suspect it&#039;ll be much slower.

In general, automatic parallelization has gotten very little return-on-investment.  It has significant overhead and significant complexity, for only modest returns on a very small subset of programs.

To get better return you need to structure your program with that parallelization in mind, and you might as well use APIs that explicitly allow it to happen.  A DBMS is again an example.  Another example would be in apache, with a request handlers spread across threads or processes.</description>
		<content:encoded><![CDATA[<p>My point is that a parallel merge sort is only viable academically.  There&#8217;s no evidence it&#8217;ll be faster than timsort in practice, and there&#8217;s good reason to suspect it&#8217;ll be much slower.</p>
<p>In general, automatic parallelization has gotten very little return-on-investment.  It has significant overhead and significant complexity, for only modest returns on a very small subset of programs.</p>
<p>To get better return you need to structure your program with that parallelization in mind, and you might as well use APIs that explicitly allow it to happen.  A DBMS is again an example.  Another example would be in apache, with a request handlers spread across threads or processes.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Carson Gross</title>
		<link>http://guidewiredevelopment.wordpress.com/2008/10/03/dont-believe-the-hype/#comment-437</link>
		<dc:creator>Carson Gross</dc:creator>
		<pubDate>Mon, 06 Oct 2008 03:26:25 +0000</pubDate>
		<guid isPermaLink="false">http://guidewiredevelopment.wordpress.com/?p=134#comment-437</guid>
		<description>Rhamphoryncus,

Awwwww, c&#039;mon.  If my data set is large enough to warrant parallelization, I&#039;ll get a kick out of the parallelized sorting.  Of course, if it&#039;s small enough that parallelizing won&#039;t help, well, no other approach is gonna do much for me.

My point is that, by using closures, we can create data-parallel operations on common data structures that don&#039;t require end-users to know much about parallel computing or concurrency.  Smart guys like you can write the implementations and dumb guys like me can use them as needed.

I agree with your point regarding the database being the right place for this operation though.  That&#039;s one reason to admire microsofts LINQ: it makes the highly-parallelizable operations of finding, filtering and sorting data not suck in an OO language.  It&#039;s another ingredient in the perfect blend of functional and imperative features necessary for The Perfect Language (tm).

But, yeah, no silver bullet.

Cheers,
Carson</description>
		<content:encoded><![CDATA[<p>Rhamphoryncus,</p>
<p>Awwwww, c&#8217;mon.  If my data set is large enough to warrant parallelization, I&#8217;ll get a kick out of the parallelized sorting.  Of course, if it&#8217;s small enough that parallelizing won&#8217;t help, well, no other approach is gonna do much for me.</p>
<p>My point is that, by using closures, we can create data-parallel operations on common data structures that don&#8217;t require end-users to know much about parallel computing or concurrency.  Smart guys like you can write the implementations and dumb guys like me can use them as needed.</p>
<p>I agree with your point regarding the database being the right place for this operation though.  That&#8217;s one reason to admire microsofts LINQ: it makes the highly-parallelizable operations of finding, filtering and sorting data not suck in an OO language.  It&#8217;s another ingredient in the perfect blend of functional and imperative features necessary for The Perfect Language &#8482;.</p>
<p>But, yeah, no silver bullet.</p>
<p>Cheers,<br />
Carson</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ulf Wiger</title>
		<link>http://guidewiredevelopment.wordpress.com/2008/10/03/dont-believe-the-hype/#comment-436</link>
		<dc:creator>Ulf Wiger</dc:creator>
		<pubDate>Sat, 04 Oct 2008 20:52:44 +0000</pubDate>
		<guid isPermaLink="false">http://guidewiredevelopment.wordpress.com/?p=134#comment-436</guid>
		<description>In my opinion, multicore already has started to fundamentally change programming in some important commercial niches where concurrency is a natural ingredient. That Erlang applications in these niches get scalability &quot;for free&quot; with multiple cores was neither unexpected nor the main point of using Erlang in the first place. The big win comes from using concurrency-oriented programming as a structuring principle. I&#039;ve found this way of structuring large applications more intuitive than OO.

Whether or not languages like Haskell and Erlang will become mainstream, I personally don&#039;t care. They are used today for serious commercial development, and programmers who like this style of programming stand an increasingly good chance of finding a place where they can do it for money. Also, These languages influence the mainstream in ways that are quite beneficial.</description>
		<content:encoded><![CDATA[<p>In my opinion, multicore already has started to fundamentally change programming in some important commercial niches where concurrency is a natural ingredient. That Erlang applications in these niches get scalability &#8220;for free&#8221; with multiple cores was neither unexpected nor the main point of using Erlang in the first place. The big win comes from using concurrency-oriented programming as a structuring principle. I&#8217;ve found this way of structuring large applications more intuitive than OO.</p>
<p>Whether or not languages like Haskell and Erlang will become mainstream, I personally don&#8217;t care. They are used today for serious commercial development, and programmers who like this style of programming stand an increasingly good chance of finding a place where they can do it for money. Also, These languages influence the mainstream in ways that are quite beneficial.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
