<?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: Polyglot Programming: Flawed Dream?</title>
	<atom:link href="http://alexruiz.developerblogs.com/?feed=rss2&#038;p=493" rel="self" type="application/rss+xml" />
	<link>http://alexruiz.developerblogs.com/?p=493</link>
	<description>Having Fun with Java!</description>
	<lastBuildDate>Thu, 19 Aug 2010 17:21:54 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<item>
		<title>By: Phil</title>
		<link>http://alexruiz.developerblogs.com/?p=493&#038;cpage=1#comment-11340</link>
		<dc:creator>Phil</dc:creator>
		<pubDate>Wed, 09 Jun 2010 17:00:32 +0000</pubDate>
		<guid isPermaLink="false">http://alexruiz.developerblogs.com/?p=493#comment-11340</guid>
		<description>I agree with you post. Here are two issues I have with Software Engineers that are okay with many languages but have not mastered one:


1. The learn-a-new-langauges-annually thing is so 1980&#039;s. You could pick up a book like one by Peter Norton and know everything you need to know about computers then. Now, it takes years to get proficient (not good or great) at ASP.NET and C# (with its huge API). Plus, you got WPF, WF, EF 4 and many others. This is only in the .NET space. Now you have Ruby on Rail, Clojure etc- Rocky Lhotka full-time job is to keep current with just .NET and he cannot. Technology moves too fast and is too large to try everything and expect to know the quirks, bells and whistles to be competent.

2. C# has features from functional languages, dynamic languages OOP languages and more. This reduces the need to try to get a functional language feel from a pure functional language.

3. It takes dedication to become great at a tool/API, especially those with high learning curves (e.g. WPF.) Distracting yourself by trying to learn everything else can reduce you powess and mastery in a tool. If you are afraid of getting stuff knowing one thing that may be gone tommorrow, there will be tutorials. For example, Microsoft guided Software Engineers that moved from VB6 to VB.NET. You just will not be dead in the water.  

Now, languages designers may need to learn a new language annually. Plus, it does not hurt if you learn a new languages annually just because you like programming. However, nowadays I do not feel that it is that urgent as it was in previous decades. Plus, polyglot-languages like C# lets you  dive into non-OOP features. It is better to solve a programming the long way and quickly with a tool you are great at and can easily support THEN to build it with a more suitable tool you do not know well and will forces others to learn things way outside their area to support.</description>
		<content:encoded><![CDATA[<p>I agree with you post. Here are two issues I have with Software Engineers that are okay with many languages but have not mastered one:</p>
<p>1. The learn-a-new-langauges-annually thing is so 1980&#8242;s. You could pick up a book like one by Peter Norton and know everything you need to know about computers then. Now, it takes years to get proficient (not good or great) at ASP.NET and C# (with its huge API). Plus, you got WPF, WF, EF 4 and many others. This is only in the .NET space. Now you have Ruby on Rail, Clojure etc- Rocky Lhotka full-time job is to keep current with just .NET and he cannot. Technology moves too fast and is too large to try everything and expect to know the quirks, bells and whistles to be competent.</p>
<p>2. C# has features from functional languages, dynamic languages OOP languages and more. This reduces the need to try to get a functional language feel from a pure functional language.</p>
<p>3. It takes dedication to become great at a tool/API, especially those with high learning curves (e.g. WPF.) Distracting yourself by trying to learn everything else can reduce you powess and mastery in a tool. If you are afraid of getting stuff knowing one thing that may be gone tommorrow, there will be tutorials. For example, Microsoft guided Software Engineers that moved from VB6 to VB.NET. You just will not be dead in the water.  </p>
<p>Now, languages designers may need to learn a new language annually. Plus, it does not hurt if you learn a new languages annually just because you like programming. However, nowadays I do not feel that it is that urgent as it was in previous decades. Plus, polyglot-languages like C# lets you  dive into non-OOP features. It is better to solve a programming the long way and quickly with a tool you are great at and can easily support THEN to build it with a more suitable tool you do not know well and will forces others to learn things way outside their area to support.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: IPhone Development</title>
		<link>http://alexruiz.developerblogs.com/?p=493&#038;cpage=1#comment-9177</link>
		<dc:creator>IPhone Development</dc:creator>
		<pubDate>Tue, 26 Jan 2010 14:21:09 +0000</pubDate>
		<guid isPermaLink="false">http://alexruiz.developerblogs.com/?p=493#comment-9177</guid>
		<description>Interesting Post!</description>
		<content:encoded><![CDATA[<p>Interesting Post!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andrew</title>
		<link>http://alexruiz.developerblogs.com/?p=493&#038;cpage=1#comment-5763</link>
		<dc:creator>Andrew</dc:creator>
		<pubDate>Fri, 16 Oct 2009 09:33:04 +0000</pubDate>
		<guid isPermaLink="false">http://alexruiz.developerblogs.com/?p=493#comment-5763</guid>
		<description>I agree with many of your points and recognise that within an organisation, you need to standardise on one or two languages for obvious reasons of maintainability. 

However, I disagree with your overall conclusion. If I was forced to standardise on one language it would have to be C rather than Java for the simple reason there is nothing that could be done in Java that can&#039;t be done in C whereas there are many things that C can do that Java can&#039;t e.g. hardware interfaces, small efficient code, highly performant hand optimised code etc.

However I wouldn&#039;t choose C to write a web application because I&#039;d have too much framework code to write - I&#039;d choose Ruby instead unless there was substantial enterprise integration involved in which case Java would be best choice.

For a Windows fat client, I&#039;d probably choose C#. 

For playing about and prototyping I&#039;d choose Scheme. 

I think, as a minimum, you need a high level DSL capable language like Scheme and a full featured low level langauge like C with seemless integration between them. Unfortunately Java is neither of these which is why Groovy, Clojure etc. have come along.</description>
		<content:encoded><![CDATA[<p>I agree with many of your points and recognise that within an organisation, you need to standardise on one or two languages for obvious reasons of maintainability. </p>
<p>However, I disagree with your overall conclusion. If I was forced to standardise on one language it would have to be C rather than Java for the simple reason there is nothing that could be done in Java that can&#8217;t be done in C whereas there are many things that C can do that Java can&#8217;t e.g. hardware interfaces, small efficient code, highly performant hand optimised code etc.</p>
<p>However I wouldn&#8217;t choose C to write a web application because I&#8217;d have too much framework code to write &#8211; I&#8217;d choose Ruby instead unless there was substantial enterprise integration involved in which case Java would be best choice.</p>
<p>For a Windows fat client, I&#8217;d probably choose C#. </p>
<p>For playing about and prototyping I&#8217;d choose Scheme. </p>
<p>I think, as a minimum, you need a high level DSL capable language like Scheme and a full featured low level langauge like C with seemless integration between them. Unfortunately Java is neither of these which is why Groovy, Clojure etc. have come along.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Francesco Argese</title>
		<link>http://alexruiz.developerblogs.com/?p=493&#038;cpage=1#comment-4987</link>
		<dc:creator>Francesco Argese</dc:creator>
		<pubDate>Sun, 27 Sep 2009 09:42:54 +0000</pubDate>
		<guid isPermaLink="false">http://alexruiz.developerblogs.com/?p=493#comment-4987</guid>
		<description>Hi guys, I have found this article very useful! I have read more about the argument polyglot programming on Wikipedia and in a promoting site of this approach (http://www.polyglotprogramming.com/).

I&#039;m curious to know what do you think about Firefox Mozilla (core in C++ and Javascript for other higher level functionalities and plugins) or eMacs (core in C, higher level functionalities in LISP). They seems to be successfull experiments of polyglot programming.

Probably the success key is limiting the number of programming languages to two, one for the core (tipically C, C+ or Java) and the other to offer developers the opportunity to extend application or to write plugins in a more simple language that speeds up the development (tipically a scripting language or a domain specific language that offer a needed particular feature, see Lisp in eMacs ).

 With this approach I think that one could think the process of developing a polyglot software divided into three teams: one that works only with core, one that works with integration beetween two languages (if necessary, see languages with great design similarity like Java and Groovy), and the other that work on the higher level functionalities.

Certainly is a cost (three separate teams) but the advantages could be enormous (see the expansion of Mozilla and eMacs).

Using a number of languages that exceeds two could be more difficult in the coordination. What do you think about my opinion?

Personally I have a little experience in C++ and Python polyglot programming and I have experienced some of the problems proposed by you (caused by C++ template complexity in particular). I think that using C as core language could be preferable because a great number of languges has a great compatibility with it considering that the core library of many languages (Python for example) are written in C and, for a C programmer, it is not very difficult to write a module callable from this languages.

Having a cross-language platform could be a great help to study polyglot programming. Do you know if exist something similar?</description>
		<content:encoded><![CDATA[<p>Hi guys, I have found this article very useful! I have read more about the argument polyglot programming on Wikipedia and in a promoting site of this approach (<a href="http://www.polyglotprogramming.com/" rel="nofollow">http://www.polyglotprogramming.com/</a>).</p>
<p>I&#8217;m curious to know what do you think about Firefox Mozilla (core in C++ and Javascript for other higher level functionalities and plugins) or eMacs (core in C, higher level functionalities in LISP). They seems to be successfull experiments of polyglot programming.</p>
<p>Probably the success key is limiting the number of programming languages to two, one for the core (tipically C, C+ or Java) and the other to offer developers the opportunity to extend application or to write plugins in a more simple language that speeds up the development (tipically a scripting language or a domain specific language that offer a needed particular feature, see Lisp in eMacs ).</p>
<p> With this approach I think that one could think the process of developing a polyglot software divided into three teams: one that works only with core, one that works with integration beetween two languages (if necessary, see languages with great design similarity like Java and Groovy), and the other that work on the higher level functionalities.</p>
<p>Certainly is a cost (three separate teams) but the advantages could be enormous (see the expansion of Mozilla and eMacs).</p>
<p>Using a number of languages that exceeds two could be more difficult in the coordination. What do you think about my opinion?</p>
<p>Personally I have a little experience in C++ and Python polyglot programming and I have experienced some of the problems proposed by you (caused by C++ template complexity in particular). I think that using C as core language could be preferable because a great number of languges has a great compatibility with it considering that the core library of many languages (Python for example) are written in C and, for a C programmer, it is not very difficult to write a module callable from this languages.</p>
<p>Having a cross-language platform could be a great help to study polyglot programming. Do you know if exist something similar?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex Ruiz</title>
		<link>http://alexruiz.developerblogs.com/?p=493&#038;cpage=1#comment-4669</link>
		<dc:creator>Alex Ruiz</dc:creator>
		<pubDate>Tue, 22 Sep 2009 12:19:28 +0000</pubDate>
		<guid isPermaLink="false">http://alexruiz.developerblogs.com/?p=493#comment-4669</guid>
		<description>Thanks Graeme for your feedback! Like I mentioned in a comment to bwtaylor, I consider Groovy a special case. My exact words were:

&quot;I think combining Java and Groovy is the simplest and safest path for polyglot programming, due to the proximity in syntax between two languages (by design.) On top of that, tool support for Groovy has improved a lot (in Netbeans and IntelliJ.)&quot;

My only reservation is not to the language itself, but developers that write Java code in Groovy, without exploiting all the features that Groovy brings to the table. But that&#039;s a different issue.

Cheers,
-Alex</description>
		<content:encoded><![CDATA[<p>Thanks Graeme for your feedback! Like I mentioned in a comment to bwtaylor, I consider Groovy a special case. My exact words were:</p>
<p>&#8220;I think combining Java and Groovy is the simplest and safest path for polyglot programming, due to the proximity in syntax between two languages (by design.) On top of that, tool support for Groovy has improved a lot (in Netbeans and IntelliJ.)&#8221;</p>
<p>My only reservation is not to the language itself, but developers that write Java code in Groovy, without exploiting all the features that Groovy brings to the table. But that&#8217;s a different issue.</p>
<p>Cheers,<br />
-Alex</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex Ruiz</title>
		<link>http://alexruiz.developerblogs.com/?p=493&#038;cpage=1#comment-4668</link>
		<dc:creator>Alex Ruiz</dc:creator>
		<pubDate>Tue, 22 Sep 2009 12:13:08 +0000</pubDate>
		<guid isPermaLink="false">http://alexruiz.developerblogs.com/?p=493#comment-4668</guid>
		<description>Thanks Dean for stopping by!

I&#039;ll be watching your presentation shorty :)

Cheers!
-Alex</description>
		<content:encoded><![CDATA[<p>Thanks Dean for stopping by!</p>
<p>I&#8217;ll be watching your presentation shorty :)</p>
<p>Cheers!<br />
-Alex</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex Ruiz</title>
		<link>http://alexruiz.developerblogs.com/?p=493&#038;cpage=1#comment-4667</link>
		<dc:creator>Alex Ruiz</dc:creator>
		<pubDate>Tue, 22 Sep 2009 12:12:18 +0000</pubDate>
		<guid isPermaLink="false">http://alexruiz.developerblogs.com/?p=493#comment-4667</guid>
		<description>Hey Jean-Francois!

Yep, I agree about using other languages in the project life-cycle. As ugly XML is, we are already using it in Ant or Maven. I admit I&#039;m looking forward to replace XML with Groovy for building my projects sometime in the future :)

Cheers!
-Alex</description>
		<content:encoded><![CDATA[<p>Hey Jean-Francois!</p>
<p>Yep, I agree about using other languages in the project life-cycle. As ugly XML is, we are already using it in Ant or Maven. I admit I&#8217;m looking forward to replace XML with Groovy for building my projects sometime in the future :)</p>
<p>Cheers!<br />
-Alex</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tim</title>
		<link>http://alexruiz.developerblogs.com/?p=493&#038;cpage=1#comment-4522</link>
		<dc:creator>Tim</dc:creator>
		<pubDate>Mon, 21 Sep 2009 00:22:12 +0000</pubDate>
		<guid isPermaLink="false">http://alexruiz.developerblogs.com/?p=493#comment-4522</guid>
		<description>I think I 1/2 agree with this.

It does seem silly to consider what language to use whenever it&#039;s time for a developer to address a problem. Even more silly if the list of options is too large.

It does seem reasonable for a team to say we are using languages X, Y, and Z. Then for each clearly define what they would be used for; X is for the data model, Y is for the GUI, and Z is for concurrency sensitive data processing. If all this is well defined in the development process then a number of the questions will go away.</description>
		<content:encoded><![CDATA[<p>I think I 1/2 agree with this.</p>
<p>It does seem silly to consider what language to use whenever it&#8217;s time for a developer to address a problem. Even more silly if the list of options is too large.</p>
<p>It does seem reasonable for a team to say we are using languages X, Y, and Z. Then for each clearly define what they would be used for; X is for the data model, Y is for the GUI, and Z is for concurrency sensitive data processing. If all this is well defined in the development process then a number of the questions will go away.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Graeme Rocher</title>
		<link>http://alexruiz.developerblogs.com/?p=493&#038;cpage=1#comment-4436</link>
		<dc:creator>Graeme Rocher</dc:creator>
		<pubDate>Sat, 19 Sep 2009 20:45:56 +0000</pubDate>
		<guid isPermaLink="false">http://alexruiz.developerblogs.com/?p=493#comment-4436</guid>
		<description>Your concerns reflect exactly the reason why Groovy was created ie because other languages don&#039;t integrate well enough with Java. For example I&#039;ll answer your questions in turn as they relate to Groovy:

* how possible is to refactor code across multiple languages? 

With in IntelliJ and Groovy this is dead simple. Rename a method on the Groovy side it renames all references on the Java side. Rename a method on the Java side and all Groovy references are renamed. You have full circular refactoring and since Groovy supports mixed dynamic and static typing you lose very little from a refactoring point of view.


    * is it hard to navigate through layers of code written in multiple languages?

In IntelliJ you can CTRL+Click (or keyboard shortcut) navigate from Java to Groovy and Groovy to Java. No problems here.

    * how hard is to switch from one paradigm to another? 

The challenge with learning languages IMO is not with the language itself its learning the APIs. Groovy and Java share the same API, no problems here.

Only challenge some developers have is since Groovy is dynamic, you don&#039;t have the same compile time assistance as in Java since method dispatch is resolved at runtime. So if you don&#039;t have a unit testing culture this can lead to problems. But then you write tests don&#039;t you? ;-)

    * are any supporting materials necessary? 

Yes all new languages require a learning curve, but Groovy is based off the Java 5 grammar and shares the same APIs so the learning curve is lower.

    * how easy, fast and cost-effective to hire somebody?

Pretty much every competent Java developer is also a good Groovy developer. Some of the dynamisity takes getting used to, but overall the learning curve is relatively flat.

Take a look at the Grails codebase. It is rougly 50% Groovy and 50% Java and I personally never feel that it is problematic to maintain a mixed codebase like this because of the way Groovy and Java interoperate seamlessly.

All of the concerns you have raised relate to how the IDE supports a mixed code environment (joint compilation, cross language navigation, circular refactoring etc.). IntelliJ does really well at this and we&#039;re (SpringSource) working on the Eclipse tooling which is starting to look really good.

I do however agree with you that if the languages you use don&#039;t mix well (for example Java + JRuby/Jython/Rhino) then you have a problem and can end up with maintainability issues.</description>
		<content:encoded><![CDATA[<p>Your concerns reflect exactly the reason why Groovy was created ie because other languages don&#8217;t integrate well enough with Java. For example I&#8217;ll answer your questions in turn as they relate to Groovy:</p>
<p>* how possible is to refactor code across multiple languages? </p>
<p>With in IntelliJ and Groovy this is dead simple. Rename a method on the Groovy side it renames all references on the Java side. Rename a method on the Java side and all Groovy references are renamed. You have full circular refactoring and since Groovy supports mixed dynamic and static typing you lose very little from a refactoring point of view.</p>
<p>    * is it hard to navigate through layers of code written in multiple languages?</p>
<p>In IntelliJ you can CTRL+Click (or keyboard shortcut) navigate from Java to Groovy and Groovy to Java. No problems here.</p>
<p>    * how hard is to switch from one paradigm to another? </p>
<p>The challenge with learning languages IMO is not with the language itself its learning the APIs. Groovy and Java share the same API, no problems here.</p>
<p>Only challenge some developers have is since Groovy is dynamic, you don&#8217;t have the same compile time assistance as in Java since method dispatch is resolved at runtime. So if you don&#8217;t have a unit testing culture this can lead to problems. But then you write tests don&#8217;t you? ;-)</p>
<p>    * are any supporting materials necessary? </p>
<p>Yes all new languages require a learning curve, but Groovy is based off the Java 5 grammar and shares the same APIs so the learning curve is lower.</p>
<p>    * how easy, fast and cost-effective to hire somebody?</p>
<p>Pretty much every competent Java developer is also a good Groovy developer. Some of the dynamisity takes getting used to, but overall the learning curve is relatively flat.</p>
<p>Take a look at the Grails codebase. It is rougly 50% Groovy and 50% Java and I personally never feel that it is problematic to maintain a mixed codebase like this because of the way Groovy and Java interoperate seamlessly.</p>
<p>All of the concerns you have raised relate to how the IDE supports a mixed code environment (joint compilation, cross language navigation, circular refactoring etc.). IntelliJ does really well at this and we&#8217;re (SpringSource) working on the Eclipse tooling which is starting to look really good.</p>
<p>I do however agree with you that if the languages you use don&#8217;t mix well (for example Java + JRuby/Jython/Rhino) then you have a problem and can end up with maintainability issues.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: bwtaylor</title>
		<link>http://alexruiz.developerblogs.com/?p=493&#038;cpage=1#comment-4426</link>
		<dc:creator>bwtaylor</dc:creator>
		<pubDate>Sat, 19 Sep 2009 18:59:38 +0000</pubDate>
		<guid isPermaLink="false">http://alexruiz.developerblogs.com/?p=493#comment-4426</guid>
		<description>Well, I do think that dynamic languages sacrifice a lot for their elegant syntax. Performance, tooling, and compile time problem prevention are all big sacrifices. This is one reason why I think scala will be huge. It seems to have proven that you can have elegance and strong static typing.</description>
		<content:encoded><![CDATA[<p>Well, I do think that dynamic languages sacrifice a lot for their elegant syntax. Performance, tooling, and compile time problem prevention are all big sacrifices. This is one reason why I think scala will be huge. It seems to have proven that you can have elegance and strong static typing.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
