<?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/"
		>
<channel>
	<title>Comments on: How Do You Apply Polyglotism?</title>
	<atom:link href="http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism/feed" rel="self" type="application/rss+xml" />
	<link>http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism</link>
	<description>(permanently in beta)</description>
	<lastBuildDate>Mon, 09 Jan 2012 20:21:24 -0800</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Nilanjan</title>
		<link>http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism/comment-page-1#comment-4022</link>
		<dc:creator>Nilanjan</dc:creator>
		<pubDate>Sun, 07 Sep 2008 17:10:17 +0000</pubDate>
		<guid isPermaLink="false">http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism#comment-4022</guid>
		<description>Customers don&#039;t really care what programming language we developers use to deliver the working solution. Of course there could be situation where you have no option to select right language for right job. But what really matters to customers is return on investment and time to market. If I could deliver a new app with ruby/groovy(could be any language depending on problem domain) in less time compare to Java, I think the equation totally changes. 
I have noticed agile organizations are more quick in embracing right tools and technologies compare others.</description>
		<content:encoded><![CDATA[<p>Customers don&#8217;t really care what programming language we developers use to deliver the working solution. Of course there could be situation where you have no option to select right language for right job. But what really matters to customers is return on investment and time to market. If I could deliver a new app with ruby/groovy(could be any language depending on problem domain) in less time compare to Java, I think the equation totally changes.<br />
I have noticed agile organizations are more quick in embracing right tools and technologies compare others.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Srikanth</title>
		<link>http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism/comment-page-1#comment-3970</link>
		<dc:creator>Srikanth</dc:creator>
		<pubDate>Fri, 22 Aug 2008 17:12:13 +0000</pubDate>
		<guid isPermaLink="false">http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism#comment-3970</guid>
		<description>It&#039;s simple.

Need exceeding good performance? Can you get amazing developers? Have to be closer to the OS? Go for C/C++.

Need platform independence? Server-side or non-GUI application? Not really cared about native look and feel, etc? Go for Java.

Need to build good native User Interfaces? Tight integration with the OS (like with the system tray or whatever)? Go for whatever is best on that particular OS. Like Objective-C with Cocoa API for OS/X instead of Java Swing. Oh, please, no Swing. I&#039;ve seen too many sick Swing apps and they all, well, look not so good.

And when choosing, go for the safest one. Like Java instead of some crazy Groovy. And occasionally, try out something new. So if a project has a server and client. Build the server in whatever language that seems like popular and better for the job and always right the client on the best one for the Operating System. I&#039;m talking about thick clients here but the same can be said about browser based apps.

But it&#039;s safe to stick with the popular ones and not take Polyglotism too far. Like how Google&#039;s doing.</description>
		<content:encoded><![CDATA[<p>It&#8217;s simple.</p>
<p>Need exceeding good performance? Can you get amazing developers? Have to be closer to the OS? Go for C/C++.</p>
<p>Need platform independence? Server-side or non-GUI application? Not really cared about native look and feel, etc? Go for Java.</p>
<p>Need to build good native User Interfaces? Tight integration with the OS (like with the system tray or whatever)? Go for whatever is best on that particular OS. Like Objective-C with Cocoa API for OS/X instead of Java Swing. Oh, please, no Swing. I&#8217;ve seen too many sick Swing apps and they all, well, look not so good.</p>
<p>And when choosing, go for the safest one. Like Java instead of some crazy Groovy. And occasionally, try out something new. So if a project has a server and client. Build the server in whatever language that seems like popular and better for the job and always right the client on the best one for the Operating System. I&#8217;m talking about thick clients here but the same can be said about browser based apps.</p>
<p>But it&#8217;s safe to stick with the popular ones and not take Polyglotism too far. Like how Google&#8217;s doing.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Steve Vinoski</title>
		<link>http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism/comment-page-1#comment-3958</link>
		<dc:creator>Steve Vinoski</dc:creator>
		<pubDate>Tue, 19 Aug 2008 21:42:47 +0000</pubDate>
		<guid isPermaLink="false">http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism#comment-3958</guid>
		<description>@msp: those problems have little to do with polyglot programming -- they have everything to do with poor execution. You get the same issue with COBOL systems, after all, where there&#039;s no &quot;poly&quot; in sight. Basically, if you take shortcuts maintaining a system, you get what you deserve, regardless of the system&#039;s implementation language.

In choosing languages you have to be very aware of your context. If you&#039;re in a startup and need to get something out the door as quickly as possible, then using a newer upcoming language could easily make the difference between succeeding or losing out big-time to a competitor. If you&#039;re in a mainstream enterprise IT shop, though, then more of the concerns you (msp) raised come into play, but even there, choosing the right language can make a big difference over the lifetime of the system. One thing I like to say with respect to polyglot programming is &quot;brevity matters.&quot; It&#039;s certainly not an original idea -- Fred Brooks told us basically the same thing over 30 years ago. What it means is that generally, the smaller a system is, the easier and less expensive it is to maintain and extend. Brooks said that the cost of developing a program is on the order of N to the 1.5, where N is the number of instructions in the program. This means that if program B has 10x more lines of code than program A, it will generally be 32 times more expensive to develop and maintain. Therefore, choosing a language that lets you express the solution as succinctly as possible can be a huge win.

@Daniel: to answer your original question, I think the old saying &quot;ask forgiveness, not permission&quot; (which is also my blog&#039;s tagline, not surprisingly) comes into play. Sometimes you can try and try to convince management that using a certain language will be very beneficial, but regardless of what you tell them, they just won&#039;t agree to it. So, don&#039;t tell them -- just do it. If you&#039;re right, the system will be better for it, and other developers will have joined you in the meantime as they see the benefits, and ultimately management buys in because of reduced costs and enhanced functionality. If you&#039;re wrong, well, you might have to pay the price, but if you take an agile approach, hopefully you can &quot;fail fast&quot; and still have time to recover. A better approach, obviously, would be somewhere in the middle: get management buy-in to build quick experiments and prototypes to help gauge whether a given language can help. In general, fostering a culture that supports experimentation and prototyping with iteration and agile approaches can help put you and your team in a very good place to be, regardless of which language(s) you use.</description>
		<content:encoded><![CDATA[<p>@msp: those problems have little to do with polyglot programming &#8212; they have everything to do with poor execution. You get the same issue with COBOL systems, after all, where there&#8217;s no &#8220;poly&#8221; in sight. Basically, if you take shortcuts maintaining a system, you get what you deserve, regardless of the system&#8217;s implementation language.</p>
<p>In choosing languages you have to be very aware of your context. If you&#8217;re in a startup and need to get something out the door as quickly as possible, then using a newer upcoming language could easily make the difference between succeeding or losing out big-time to a competitor. If you&#8217;re in a mainstream enterprise IT shop, though, then more of the concerns you (msp) raised come into play, but even there, choosing the right language can make a big difference over the lifetime of the system. One thing I like to say with respect to polyglot programming is &#8220;brevity matters.&#8221; It&#8217;s certainly not an original idea &#8212; Fred Brooks told us basically the same thing over 30 years ago. What it means is that generally, the smaller a system is, the easier and less expensive it is to maintain and extend. Brooks said that the cost of developing a program is on the order of N to the 1.5, where N is the number of instructions in the program. This means that if program B has 10x more lines of code than program A, it will generally be 32 times more expensive to develop and maintain. Therefore, choosing a language that lets you express the solution as succinctly as possible can be a huge win.</p>
<p>@Daniel: to answer your original question, I think the old saying &#8220;ask forgiveness, not permission&#8221; (which is also my blog&#8217;s tagline, not surprisingly) comes into play. Sometimes you can try and try to convince management that using a certain language will be very beneficial, but regardless of what you tell them, they just won&#8217;t agree to it. So, don&#8217;t tell them &#8212; just do it. If you&#8217;re right, the system will be better for it, and other developers will have joined you in the meantime as they see the benefits, and ultimately management buys in because of reduced costs and enhanced functionality. If you&#8217;re wrong, well, you might have to pay the price, but if you take an agile approach, hopefully you can &#8220;fail fast&#8221; and still have time to recover. A better approach, obviously, would be somewhere in the middle: get management buy-in to build quick experiments and prototypes to help gauge whether a given language can help. In general, fostering a culture that supports experimentation and prototyping with iteration and agile approaches can help put you and your team in a very good place to be, regardless of which language(s) you use.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: msp</title>
		<link>http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism/comment-page-1#comment-3952</link>
		<dc:creator>msp</dc:creator>
		<pubDate>Tue, 19 Aug 2008 14:32:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism#comment-3952</guid>
		<description>Polyglot development is great at first, possibly HORRIBLE later.  Seriously, you guys are all dreamy about Scala and Groovy, but in 5-10 years, those languages may be out of favor, or may have upgraded and moved on in various ways and you&#039;ll be hosed looking for support.

I have worked with folks that alongside current development they have several legacy systems written in the hip/smart language/technology of their day.  It is not pretty to have to deal with these systems over a long period of time.  Eventually you end up spending a ton of money doing a top to bottom rewrite because the interoperability of systems gets too nasty.  I&#039;ve seen systems that we cannot recreate.  The original devs are long gone.  The hardware is out of date.  The software is all not supported and won&#039;t install.  it&#039;s a mess, but it&#039;s a mess that pays our paychecks every two weeks.  It&#039;s the 1500 pound gorilla laying golden eggs that everybody&#039;s afraid to stop, but absolutely has to be reigned in and reorganized.

Some of the problem is that businesses (outside the IT dept) don&#039;t like rewriting software constantly.  They want to recoup a bit.  This gets the code stale.  This gets you into trouble.  In a more perfect situation, we would have rewritten our components again and again over time as technologies improved, not in huge, expensive top to bottom rewrites.  

So maybe the take away is.... polyglot is a very neat idea.  But beware.  This is not for all organizations.  Always be considering your maintenance strategy.  Ask &quot;Will this technology allow us to interop and refactor into the future?&quot; before allowing it into the pool.  &quot;Does this tech have an exit strategy?&quot;</description>
		<content:encoded><![CDATA[<p>Polyglot development is great at first, possibly HORRIBLE later.  Seriously, you guys are all dreamy about Scala and Groovy, but in 5-10 years, those languages may be out of favor, or may have upgraded and moved on in various ways and you&#8217;ll be hosed looking for support.</p>
<p>I have worked with folks that alongside current development they have several legacy systems written in the hip/smart language/technology of their day.  It is not pretty to have to deal with these systems over a long period of time.  Eventually you end up spending a ton of money doing a top to bottom rewrite because the interoperability of systems gets too nasty.  I&#8217;ve seen systems that we cannot recreate.  The original devs are long gone.  The hardware is out of date.  The software is all not supported and won&#8217;t install.  it&#8217;s a mess, but it&#8217;s a mess that pays our paychecks every two weeks.  It&#8217;s the 1500 pound gorilla laying golden eggs that everybody&#8217;s afraid to stop, but absolutely has to be reigned in and reorganized.</p>
<p>Some of the problem is that businesses (outside the IT dept) don&#8217;t like rewriting software constantly.  They want to recoup a bit.  This gets the code stale.  This gets you into trouble.  In a more perfect situation, we would have rewritten our components again and again over time as technologies improved, not in huge, expensive top to bottom rewrites.  </p>
<p>So maybe the take away is&#8230;. polyglot is a very neat idea.  But beware.  This is not for all organizations.  Always be considering your maintenance strategy.  Ask &#8220;Will this technology allow us to interop and refactor into the future?&#8221; before allowing it into the pool.  &#8220;Does this tech have an exit strategy?&#8221;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paul Keeble</title>
		<link>http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism/comment-page-1#comment-3951</link>
		<dc:creator>Paul Keeble</dc:creator>
		<pubDate>Tue, 19 Aug 2008 13:09:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism#comment-3951</guid>
		<description>Daniel:

I would agree that Scala, JRuby and groovy prove to be interesting. Indeed it now looks like .net&#039;s approach to multiple languages is proving to be a decent long term strategy. This form of polygot programming brings little extra deployment cost so has a better chance of surviving. However they also don&#039;t bring as big a paradigm shift as say Erlang and its difficult for the JVM/.net runtime environment to truly represent every possible approach out there. Parrot is another attempt to bring together languages and that too might bring the dynamic languages closer together.

You still get a differences in the build infrastructure and process but the impact at least to production is reduced. It will be interesting to see what the adoption is in the next year of different but more advanced languages. I suspect the weirder languages (like erlang) are more compelling to use because of how different they are. More advanced features may be a programmer and maintenance benefit but if its not bringing a 10x performance improvement its unlikely to oust or get to sit aside with a current language imo.</description>
		<content:encoded><![CDATA[<p>Daniel:</p>
<p>I would agree that Scala, JRuby and groovy prove to be interesting. Indeed it now looks like .net&#8217;s approach to multiple languages is proving to be a decent long term strategy. This form of polygot programming brings little extra deployment cost so has a better chance of surviving. However they also don&#8217;t bring as big a paradigm shift as say Erlang and its difficult for the JVM/.net runtime environment to truly represent every possible approach out there. Parrot is another attempt to bring together languages and that too might bring the dynamic languages closer together.</p>
<p>You still get a differences in the build infrastructure and process but the impact at least to production is reduced. It will be interesting to see what the adoption is in the next year of different but more advanced languages. I suspect the weirder languages (like erlang) are more compelling to use because of how different they are. More advanced features may be a programmer and maintenance benefit but if its not bringing a 10x performance improvement its unlikely to oust or get to sit aside with a current language imo.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: JavaNovice</title>
		<link>http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism/comment-page-1#comment-3948</link>
		<dc:creator>JavaNovice</dc:creator>
		<pubDate>Mon, 18 Aug 2008 21:16:55 +0000</pubDate>
		<guid isPermaLink="false">http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism#comment-3948</guid>
		<description>Well i am a programming novice with just 2 years experience i can tell you that regarding polyglotism:
I work in a team where i am not the youngest but still the one with least programming experience.
experience. We have very experienced COBOL programmers which eventually switched to java 4 years ago. For them from COBOL to java it was an enourmus amount of work. Sure they see that java is verbose in some cases and that alternatives liek groovy or scala do exist. But for a production System they would never use it ( BTW we run on java 1.4 :) )
Summing up i would say using a significant range of languages is avoid because it simply means too much risk to &quot;stakeholders&quot;. And in fact it is a risk because you can&#039;t tell them 100% for sure that using other languages you will get a better result. Maybe you get better results in certain components but then the interaction with other parts consumes this advantage. And so as i ( nor any other in my team) could&#039;nt forsee the concrete consequences its simply avoided.
Its just a lot of you would need to invest and that could turn into risk, and why add risk to the develeopement process?
(yes you do eleminate chances but what peaks higher, again :)</description>
		<content:encoded><![CDATA[<p>Well i am a programming novice with just 2 years experience i can tell you that regarding polyglotism:<br />
I work in a team where i am not the youngest but still the one with least programming experience.<br />
experience. We have very experienced COBOL programmers which eventually switched to java 4 years ago. For them from COBOL to java it was an enourmus amount of work. Sure they see that java is verbose in some cases and that alternatives liek groovy or scala do exist. But for a production System they would never use it ( BTW we run on java 1.4 <img src='http://www.codecommit.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )<br />
Summing up i would say using a significant range of languages is avoid because it simply means too much risk to &#8220;stakeholders&#8221;. And in fact it is a risk because you can&#8217;t tell them 100% for sure that using other languages you will get a better result. Maybe you get better results in certain components but then the interaction with other parts consumes this advantage. And so as i ( nor any other in my team) could&#8217;nt forsee the concrete consequences its simply avoided.<br />
Its just a lot of you would need to invest and that could turn into risk, and why add risk to the develeopement process?<br />
(yes you do eleminate chances but what peaks higher, again <img src='http://www.codecommit.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Doug</title>
		<link>http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism/comment-page-1#comment-3947</link>
		<dc:creator>Doug</dc:creator>
		<pubDate>Mon, 18 Aug 2008 20:12:15 +0000</pubDate>
		<guid isPermaLink="false">http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism#comment-3947</guid>
		<description>Daniel:

It&#039;s generally about system configuration management. *Someone* has to install the new software components on all of the production servers (said to be in the hundreds of thousands for Google), has to watch for security alerts and such on all installed software components, and has to quickly install patches or updates on all of the production servers.

Another problem of long-term note: what happens if the language developers stop working on it? I think that it&#039;s glib to say &quot;just keep using the last version&quot;... sometimes the last version doesn&#039;t work in new environments. Or worse, a major security vulnerability might be found in that last implementation.

Another problem of long-term note: what happens when the servers are upgraded to a new version that is incompatible with existing applications? Scala, for example, has made a number of changes in the past that required some Scala programs to be modified. Martin has said that the pace of that should be a lot slower now. I doubt that the same can be said for, say, Groovy.

And don&#039;t underestimate what it takes for a new hire to learn a new language. It&#039;s not just the language... it&#039;s the idioms, coding styles, and (generally even moreso) the library and tools. Imagine a C++ developer jumping into a system built on Java, Eclipse, XML, Ant or (shudder) Maven, JUnit, EasyMock, Log4J and who knows what else from Apache commons, Tomcat and servlets, Spring, Hibernate, etc.

Scala obviously isn&#039;t as big a jump from Java as, say, Ruby is. Same JVM, mostly the same libraries, mostly the same tools. Very different idioms, though, especially if you listen to the folks who promote high order functions as the correct answer to just about everything.

Consider this: many companies have felt compelled to issue &quot;style rules&quot; for their programmers&#039; creations. For Java, it&#039;s generally stuff like capitalization, indentation, and the ever-popular issue of where to put the opening brace. If the coding style *within* a language is important enough to be specified by company dictate, clearly the choice of the language itself is even moreso. (That&#039;s another fine can of worms opened.)</description>
		<content:encoded><![CDATA[<p>Daniel:</p>
<p>It&#8217;s generally about system configuration management. *Someone* has to install the new software components on all of the production servers (said to be in the hundreds of thousands for Google), has to watch for security alerts and such on all installed software components, and has to quickly install patches or updates on all of the production servers.</p>
<p>Another problem of long-term note: what happens if the language developers stop working on it? I think that it&#8217;s glib to say &#8220;just keep using the last version&#8221;&#8230; sometimes the last version doesn&#8217;t work in new environments. Or worse, a major security vulnerability might be found in that last implementation.</p>
<p>Another problem of long-term note: what happens when the servers are upgraded to a new version that is incompatible with existing applications? Scala, for example, has made a number of changes in the past that required some Scala programs to be modified. Martin has said that the pace of that should be a lot slower now. I doubt that the same can be said for, say, Groovy.</p>
<p>And don&#8217;t underestimate what it takes for a new hire to learn a new language. It&#8217;s not just the language&#8230; it&#8217;s the idioms, coding styles, and (generally even moreso) the library and tools. Imagine a C++ developer jumping into a system built on Java, Eclipse, XML, Ant or (shudder) Maven, JUnit, EasyMock, Log4J and who knows what else from Apache commons, Tomcat and servlets, Spring, Hibernate, etc.</p>
<p>Scala obviously isn&#8217;t as big a jump from Java as, say, Ruby is. Same JVM, mostly the same libraries, mostly the same tools. Very different idioms, though, especially if you listen to the folks who promote high order functions as the correct answer to just about everything.</p>
<p>Consider this: many companies have felt compelled to issue &#8220;style rules&#8221; for their programmers&#8217; creations. For Java, it&#8217;s generally stuff like capitalization, indentation, and the ever-popular issue of where to put the opening brace. If the coding style *within* a language is important enough to be specified by company dictate, clearly the choice of the language itself is even moreso. (That&#8217;s another fine can of worms opened.)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Daniel Spiewak</title>
		<link>http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism/comment-page-1#comment-3946</link>
		<dc:creator>Daniel Spiewak</dc:creator>
		<pubDate>Mon, 18 Aug 2008 18:16:09 +0000</pubDate>
		<guid isPermaLink="false">http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism#comment-3946</guid>
		<description>@Paul

Valid points.  Deployment is definately a reason to keep things limited to a single platform, but I&#039;m not so sure about the &quot;single language&quot; under that platform.  David Pollack wrote an article a few months ago about how Scala is &quot;just another library&quot;, and it&#039;s really quite true.  Scala deployment is *identical* to Java, just with one extra JAR dependency.  I understand that Groovy has adopted the same design.  JRuby is almost as simple (your build scripts probably require a bit of dancing to bring the .rb files along).  I&#039;ve never worked with Clojure, but I would imagine that it is at least as simple as JRuby deployment, maybe even easier.

The point is that once the deployment infrastructure is in place for JVM apps, other languages which run on the JVM just fall out very naturally.  A previous company I consulted for actually started experimenting with Scala shortly before my tenure was up.  The decision to start implementing some of the core business logic in that language was made very easily and at a comparatively low-level in the management chain, due to the incredibly low impact of doing so.  The project build was already using Maven, so it was just a matter of adding a few lines to the POM and no one (least of all the app server) was adversely affected.

I guess I always expected deployment to be a non-issue when dealing exclusively with languages which run on the same platform and against the same infrastructure.  Maybe there are some more complex scenarios where this is not the case, but I find it hard to imagine a Java build cycle that would be significantly altered by the introduction of a little Scala seasoning.

@James

It is true that companies are leery of upping the prerequisites for incoming developers, especially companies which are reliant on consultants.  This actually was the primary argument (though unfortunately not the only one) against the adoption of Scala in my current gig.  On the other hand, a correct implementation of the polyglot paradigm shouldn&#039;t expect developers to know *every* language involved; that&#039;s what modularity is designed to prevent.  Going off of Ola&#039;s &quot;layers&quot; idea, the developers working on the domain layer shouldn&#039;t have to know how to maintain the stable layer since it is completely below their field of vision.  As far as they are concerned, it is a completely black box API and language.  Of course, if your company is trying to minimize the number of developers it needs to maintain the *whole* system, then yes it is an issue.  But theoretically, it should be possible to keep everything nicely separated, especially if it is all on the same platform.

@Sammy

Very nice article.  Definitely better to stick that in a proper post than to try to shoe-horn it into a comment.  :-)

@Tristan

Interesting thoughts.  There are certainly areas in my current development where I could employ such a technique.  I have no doubt that it would still meet with resistance, but as long as it affects no one else, it might be alright.  Definitely food for thought...</description>
		<content:encoded><![CDATA[<p>@Paul</p>
<p>Valid points.  Deployment is definately a reason to keep things limited to a single platform, but I&#8217;m not so sure about the &#8220;single language&#8221; under that platform.  David Pollack wrote an article a few months ago about how Scala is &#8220;just another library&#8221;, and it&#8217;s really quite true.  Scala deployment is *identical* to Java, just with one extra JAR dependency.  I understand that Groovy has adopted the same design.  JRuby is almost as simple (your build scripts probably require a bit of dancing to bring the .rb files along).  I&#8217;ve never worked with Clojure, but I would imagine that it is at least as simple as JRuby deployment, maybe even easier.</p>
<p>The point is that once the deployment infrastructure is in place for JVM apps, other languages which run on the JVM just fall out very naturally.  A previous company I consulted for actually started experimenting with Scala shortly before my tenure was up.  The decision to start implementing some of the core business logic in that language was made very easily and at a comparatively low-level in the management chain, due to the incredibly low impact of doing so.  The project build was already using Maven, so it was just a matter of adding a few lines to the POM and no one (least of all the app server) was adversely affected.</p>
<p>I guess I always expected deployment to be a non-issue when dealing exclusively with languages which run on the same platform and against the same infrastructure.  Maybe there are some more complex scenarios where this is not the case, but I find it hard to imagine a Java build cycle that would be significantly altered by the introduction of a little Scala seasoning.</p>
<p>@James</p>
<p>It is true that companies are leery of upping the prerequisites for incoming developers, especially companies which are reliant on consultants.  This actually was the primary argument (though unfortunately not the only one) against the adoption of Scala in my current gig.  On the other hand, a correct implementation of the polyglot paradigm shouldn&#8217;t expect developers to know *every* language involved; that&#8217;s what modularity is designed to prevent.  Going off of Ola&#8217;s &#8220;layers&#8221; idea, the developers working on the domain layer shouldn&#8217;t have to know how to maintain the stable layer since it is completely below their field of vision.  As far as they are concerned, it is a completely black box API and language.  Of course, if your company is trying to minimize the number of developers it needs to maintain the *whole* system, then yes it is an issue.  But theoretically, it should be possible to keep everything nicely separated, especially if it is all on the same platform.</p>
<p>@Sammy</p>
<p>Very nice article.  Definitely better to stick that in a proper post than to try to shoe-horn it into a comment.  <img src='http://www.codecommit.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>@Tristan</p>
<p>Interesting thoughts.  There are certainly areas in my current development where I could employ such a technique.  I have no doubt that it would still meet with resistance, but as long as it affects no one else, it might be alright.  Definitely food for thought&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Fabien</title>
		<link>http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism/comment-page-1#comment-3945</link>
		<dc:creator>Fabien</dc:creator>
		<pubDate>Mon, 18 Aug 2008 18:03:15 +0000</pubDate>
		<guid isPermaLink="false">http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism#comment-3945</guid>
		<description>To make a reliable program in a language, you need to be very fluent in that language, know its gotchas, etc. And learning that takes time. So unless you&#039;re a genius, I don&#039;t believe you can program very well in more than a few languages.

IMHO, a program well-written in a language you master, is always better than a program poorly written in the best language for the task.</description>
		<content:encoded><![CDATA[<p>To make a reliable program in a language, you need to be very fluent in that language, know its gotchas, etc. And learning that takes time. So unless you&#8217;re a genius, I don&#8217;t believe you can program very well in more than a few languages.</p>
<p>IMHO, a program well-written in a language you master, is always better than a program poorly written in the best language for the task.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tristan Juricek</title>
		<link>http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism/comment-page-1#comment-3944</link>
		<dc:creator>Tristan Juricek</dc:creator>
		<pubDate>Mon, 18 Aug 2008 17:59:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.codecommit.com/blog/java/how-do-you-apply-polyglotism#comment-3944</guid>
		<description>I&#039;m finding a &quot;Introduce then expand&quot; approach might be feasible. I think you can&#039;t just say, &quot;hey, it&#039;d be a good idea to use X as a langauge&quot; without allowing people to code-review examples and work with it a bit beforehand.

For example, I&#039;m starting to write a lot of &#039;non-production&#039; code in Scala. Our primary environment is this EJB-zombie-thing combined with several critical stored procedures. There are huge advantages of Scala:

Compared with other dynamic JVM languages Scala was a lot easier to grok how I could create a &quot;Bootstrap&quot; EJB environment. (Well, with Guice.) It&#039;s not that I couldn&#039;t do this with something like JRuby, it just never dawned on me.

With the maven Scala console, I no longer immediately pop open JBoss running under a debugger; it&#039;s often faster for me to restart a console with the occasional print statement then JBoss. Note: this isn&#039;t entirely &quot;printf&quot; debugging because I&#039;m also compiling and experimenting with APIs in the console rather than just debugging.

However, I don&#039;t expect Scala to be used by anyone else for at least 6 months, maybe more. Why? Because they may not need to, plus, it can take people generally 3-6 months just to get used to it. &quot;We shall see&quot;, in other words. But if I am truly faster with the language (and I think I definitely am), that becomes a powerful argument. Plus, if people have a lot of examples within their domain, it becomes easier to learn.

The two points I&#039;m really trying to make:

1. New languages should be significantly better to all current options
2. You have to find an appropriate &quot;in&quot;

In my experience, the larger the company, the harder the &quot;in&quot;.</description>
		<content:encoded><![CDATA[<p>I&#8217;m finding a &#8220;Introduce then expand&#8221; approach might be feasible. I think you can&#8217;t just say, &#8220;hey, it&#8217;d be a good idea to use X as a langauge&#8221; without allowing people to code-review examples and work with it a bit beforehand.</p>
<p>For example, I&#8217;m starting to write a lot of &#8216;non-production&#8217; code in Scala. Our primary environment is this EJB-zombie-thing combined with several critical stored procedures. There are huge advantages of Scala:</p>
<p>Compared with other dynamic JVM languages Scala was a lot easier to grok how I could create a &#8220;Bootstrap&#8221; EJB environment. (Well, with Guice.) It&#8217;s not that I couldn&#8217;t do this with something like JRuby, it just never dawned on me.</p>
<p>With the maven Scala console, I no longer immediately pop open JBoss running under a debugger; it&#8217;s often faster for me to restart a console with the occasional print statement then JBoss. Note: this isn&#8217;t entirely &#8220;printf&#8221; debugging because I&#8217;m also compiling and experimenting with APIs in the console rather than just debugging.</p>
<p>However, I don&#8217;t expect Scala to be used by anyone else for at least 6 months, maybe more. Why? Because they may not need to, plus, it can take people generally 3-6 months just to get used to it. &#8220;We shall see&#8221;, in other words. But if I am truly faster with the language (and I think I definitely am), that becomes a powerful argument. Plus, if people have a lot of examples within their domain, it becomes easier to learn.</p>
<p>The two points I&#8217;m really trying to make:</p>
<p>1. New languages should be significantly better to all current options<br />
2. You have to find an appropriate &#8220;in&#8221;</p>
<p>In my experience, the larger the company, the harder the &#8220;in&#8221;.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

