<?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: What&#8217;s there after Objects?</title>
	<atom:link href="http://sebastien-arbogast.com/2008/06/22/whats-there-after-objects/feed/" rel="self" type="application/rss+xml" />
	<link>http://sebastien-arbogast.com/2008/06/22/whats-there-after-objects/</link>
	<description>Solving Software Problems since 2010</description>
	<lastBuildDate>Fri, 03 Feb 2012 11:39:51 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Greg M</title>
		<link>http://sebastien-arbogast.com/2008/06/22/whats-there-after-objects/comment-page-1/#comment-369</link>
		<dc:creator>Greg M</dc:creator>
		<pubDate>Thu, 10 Jul 2008 03:56:35 +0000</pubDate>
		<guid isPermaLink="false">http://sebastien-arbogast.com/?p=66#comment-369</guid>
		<description>As a rough generalization: OOP gives you a single layer of abstraction, and then you wonder why it doesn&#039;t scale. FP gives you tools (higher-order functions, expressive type systems) with which to build your own layers of abstraction at the granularity that&#039;s appropriate for your problem domain. This way you don&#039;t suffer the disconnect you cite between the high level and the low level. (and yes,as a bonus because you can state your intention more clearly it&#039;s easier for your compiler to optimise it for increasingly complex hardware - but that&#039;s only a bonus which I&#039;m not sure is too important at this stage)

As I see it, abstraction and quarantining the effects of state are the two biggest factors in program complexity, and OOP tries to apply one mechanism to handle both of them. FP handles state properly (i.e. explicitly!), leaving you free to use abstraction to model your problem domain, rather than having your abstractions partially dictated by the machine model. So although adding functional features to OOP languages can be convenient, it doesn&#039;t deliver the necessary paradigm shift. But hopefully it _will_ smooth the way to mainstream adoption of referential transparency as a basic language requirement.</description>
		<content:encoded><![CDATA[<p>As a rough generalization: OOP gives you a single layer of abstraction, and then you wonder why it doesn&#8217;t scale. FP gives you tools (higher-order functions, expressive type systems) with which to build your own layers of abstraction at the granularity that&#8217;s appropriate for your problem domain. This way you don&#8217;t suffer the disconnect you cite between the high level and the low level. (and yes,as a bonus because you can state your intention more clearly it&#8217;s easier for your compiler to optimise it for increasingly complex hardware &#8211; but that&#8217;s only a bonus which I&#8217;m not sure is too important at this stage)</p>
<p>As I see it, abstraction and quarantining the effects of state are the two biggest factors in program complexity, and OOP tries to apply one mechanism to handle both of them. FP handles state properly (i.e. explicitly!), leaving you free to use abstraction to model your problem domain, rather than having your abstractions partially dictated by the machine model. So although adding functional features to OOP languages can be convenient, it doesn&#8217;t deliver the necessary paradigm shift. But hopefully it _will_ smooth the way to mainstream adoption of referential transparency as a basic language requirement.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: The End of an Era, the Beginning of a New One</title>
		<link>http://sebastien-arbogast.com/2008/06/22/whats-there-after-objects/comment-page-1/#comment-360</link>
		<dc:creator>The End of an Era, the Beginning of a New One</dc:creator>
		<pubDate>Sat, 28 Jun 2008 18:55:39 +0000</pubDate>
		<guid isPermaLink="false">http://sebastien-arbogast.com/?p=66#comment-360</guid>
		<description>[...] What&#8217;s there after Objects?  [...]</description>
		<content:encoded><![CDATA[<p>[...] What&#8217;s there after Objects?  [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sébastien</title>
		<link>http://sebastien-arbogast.com/2008/06/22/whats-there-after-objects/comment-page-1/#comment-359</link>
		<dc:creator>Sébastien</dc:creator>
		<pubDate>Fri, 27 Jun 2008 23:43:10 +0000</pubDate>
		<guid isPermaLink="false">http://sebastien-arbogast.com/?p=66#comment-359</guid>
		<description>This article is really enlightening, even though it&#039;s four years old. Now Sergey underlines 3 major issues with mainstream OOP languages: expressivity, maintainability and learning curve. I would personnally add the quality issue. Since there is so much work needed to translate your ideas into code, there is all the more space for human errors and we&#039;ve come to see practices like TDD as a necessary virtue, even though they are merely a workaround for the limitations of OOP.</description>
		<content:encoded><![CDATA[<p>This article is really enlightening, even though it&#8217;s four years old. Now Sergey underlines 3 major issues with mainstream OOP languages: expressivity, maintainability and learning curve. I would personnally add the quality issue. Since there is so much work needed to translate your ideas into code, there is all the more space for human errors and we&#8217;ve come to see practices like TDD as a necessary virtue, even though they are merely a workaround for the limitations of OOP.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sébastien</title>
		<link>http://sebastien-arbogast.com/2008/06/22/whats-there-after-objects/comment-page-1/#comment-358</link>
		<dc:creator>Sébastien</dc:creator>
		<pubDate>Fri, 27 Jun 2008 22:46:43 +0000</pubDate>
		<guid isPermaLink="false">http://sebastien-arbogast.com/?p=66#comment-358</guid>
		<description>Oh my! That Language Oriented Programming is exactly what I was starting to think about. This is exactly what I needed. Those Jetbrains guys definitely have some talent. Walter, thanks a lot for the link: I think I&#039;ll investigate a lot in that direction.

Alex, I kind of agree with you: those will not replace OOP but merely superset it, like OOP does with procedures and functions (that are now methods), and like we&#039;re still using assembly language in the virtual machine for example. But if those lower level constructs are hidden behind a set of more powerful tools, I think it will be for the greater good. I like Sergei&#039;s analogy of stone and fire ages. It&#039;s exactly that.</description>
		<content:encoded><![CDATA[<p>Oh my! That Language Oriented Programming is exactly what I was starting to think about. This is exactly what I needed. Those Jetbrains guys definitely have some talent. Walter, thanks a lot for the link: I think I&#8217;ll investigate a lot in that direction.</p>
<p>Alex, I kind of agree with you: those will not replace OOP but merely superset it, like OOP does with procedures and functions (that are now methods), and like we&#8217;re still using assembly language in the virtual machine for example. But if those lower level constructs are hidden behind a set of more powerful tools, I think it will be for the greater good. I like Sergei&#8217;s analogy of stone and fire ages. It&#8217;s exactly that.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alexander Snaps</title>
		<link>http://sebastien-arbogast.com/2008/06/22/whats-there-after-objects/comment-page-1/#comment-356</link>
		<dc:creator>Alexander Snaps</dc:creator>
		<pubDate>Fri, 27 Jun 2008 11:48:02 +0000</pubDate>
		<guid isPermaLink="false">http://sebastien-arbogast.com/?p=66#comment-356</guid>
		<description>JetBrains&#039; MPS and DSL are indeed an abstraction above, yet they address a different issue. And as of now, it would be expected out of &quot;developers&quot; to use a _set_ of DSL inside one application, and not a simple language. 
You probably also would want to see the &quot;Building DSLs in Static &amp; Dynamic Languages&quot; presentation by Neal Ford. 
Yet those will not be replacing, but &quot;supersetting&quot; lower level languages.</description>
		<content:encoded><![CDATA[<p>JetBrains&#8217; MPS and DSL are indeed an abstraction above, yet they address a different issue. And as of now, it would be expected out of &#8220;developers&#8221; to use a _set_ of DSL inside one application, and not a simple language.<br />
You probably also would want to see the &#8220;Building DSLs in Static &amp; Dynamic Languages&#8221; presentation by Neal Ford.<br />
Yet those will not be replacing, but &#8220;supersetting&#8221; lower level languages.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Walter Mourão</title>
		<link>http://sebastien-arbogast.com/2008/06/22/whats-there-after-objects/comment-page-1/#comment-355</link>
		<dc:creator>Walter Mourão</dc:creator>
		<pubDate>Fri, 27 Jun 2008 11:38:06 +0000</pubDate>
		<guid isPermaLink="false">http://sebastien-arbogast.com/?p=66#comment-355</guid>
		<description>It looks to me the following article has a point: http://www.onboard.jetbrains.com/is1/articles/04/10/lop/ . And looks like some ideas could be used in Andromda.</description>
		<content:encoded><![CDATA[<p>It looks to me the following article has a point: <a href="http://www.onboard.jetbrains.com/is1/articles/04/10/lop/" rel="nofollow">http://www.onboard.jetbrains.com/is1/articles/04/10/lop/</a> . And looks like some ideas could be used in Andromda.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ricky Clarkson</title>
		<link>http://sebastien-arbogast.com/2008/06/22/whats-there-after-objects/comment-page-1/#comment-354</link>
		<dc:creator>Ricky Clarkson</dc:creator>
		<pubDate>Thu, 26 Jun 2008 22:32:16 +0000</pubDate>
		<guid isPermaLink="false">http://sebastien-arbogast.com/?p=66#comment-354</guid>
		<description>Functional programming doesn&#039;t mean that you have to think about your customer&#039;s problems purely in terms of functions and lambdas any more than OOP means that you have to think in terms of message passing and inheritance.  We programmers have a tool called abstraction.  Given a language with only lambda and a few other primitives, you can build datatypes, give them names, associate operations with them, etc.  You could even call them objects.

The main difference is that you wouldn&#039;t typically change their state, but construct new objects to represent new state.  This makes it easier to compose larger systems from small parts, because the larger systems no longer suffer from having more moving parts.

The best way I know to say it briefly is a little ambiguous, but here goes: OOP seeks for values to *be* items from the domain, whereas functional programming seeks for values to *model* items from the domain.

A model of a tennis ball flying through the air might never mutate an instance of Ball, but be a function over time.  An object seeking to *be* a tennis ball is tempted to have a value according to the time involved.  The non-mutating model is more composable - each user of it does not need to know what each other user of it is doing.

Another approach is to refine your OOP programs as far as you can.  Reduce duplication.  Remove it entirely and you probably reinvented functional programming.</description>
		<content:encoded><![CDATA[<p>Functional programming doesn&#8217;t mean that you have to think about your customer&#8217;s problems purely in terms of functions and lambdas any more than OOP means that you have to think in terms of message passing and inheritance.  We programmers have a tool called abstraction.  Given a language with only lambda and a few other primitives, you can build datatypes, give them names, associate operations with them, etc.  You could even call them objects.</p>
<p>The main difference is that you wouldn&#8217;t typically change their state, but construct new objects to represent new state.  This makes it easier to compose larger systems from small parts, because the larger systems no longer suffer from having more moving parts.</p>
<p>The best way I know to say it briefly is a little ambiguous, but here goes: OOP seeks for values to *be* items from the domain, whereas functional programming seeks for values to *model* items from the domain.</p>
<p>A model of a tennis ball flying through the air might never mutate an instance of Ball, but be a function over time.  An object seeking to *be* a tennis ball is tempted to have a value according to the time involved.  The non-mutating model is more composable &#8211; each user of it does not need to know what each other user of it is doing.</p>
<p>Another approach is to refine your OOP programs as far as you can.  Reduce duplication.  Remove it entirely and you probably reinvented functional programming.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alexander Snaps</title>
		<link>http://sebastien-arbogast.com/2008/06/22/whats-there-after-objects/comment-page-1/#comment-353</link>
		<dc:creator>Alexander Snaps</dc:creator>
		<pubDate>Thu, 26 Jun 2008 17:07:26 +0000</pubDate>
		<guid isPermaLink="false">http://sebastien-arbogast.com/?p=66#comment-353</guid>
		<description>This isn&#039;t really performance related... While it does also address it.
Yet multi-core systems are becoming (oh wait, they already are) reality! And multi-threading as always been something (especially in UI) developers had to address, particularly in the gaming industry. Yet concurrency is a complex topic and you can&#039;t really expect having every average developer deal with it correctly, especially in OO. The situation is simply there and functional programming addresses it. This just correlates well. Now if this (r)evolution is leading us down the right path, I have no clue... Hopefully there isn&#039;t just a single path! Still, mathematicians will always tell you that functions are better suited to model the world than our objects...</description>
		<content:encoded><![CDATA[<p>This isn&#8217;t really performance related&#8230; While it does also address it.<br />
Yet multi-core systems are becoming (oh wait, they already are) reality! And multi-threading as always been something (especially in UI) developers had to address, particularly in the gaming industry. Yet concurrency is a complex topic and you can&#8217;t really expect having every average developer deal with it correctly, especially in OO. The situation is simply there and functional programming addresses it. This just correlates well. Now if this (r)evolution is leading us down the right path, I have no clue&#8230; Hopefully there isn&#8217;t just a single path! Still, mathematicians will always tell you that functions are better suited to model the world than our objects&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sébastien</title>
		<link>http://sebastien-arbogast.com/2008/06/22/whats-there-after-objects/comment-page-1/#comment-352</link>
		<dc:creator>Sébastien</dc:creator>
		<pubDate>Thu, 26 Jun 2008 16:53:15 +0000</pubDate>
		<guid isPermaLink="false">http://sebastien-arbogast.com/?p=66#comment-352</guid>
		<description>It&#039;s interesting because it seems like a schism between people favoring the intrinsic &quot;performance&quot; of software paradigms and those who favor the &quot;usability&quot; of it. And I have the impression that both directions are antagonist, like you can&#039;t have a paradigm that is both intuitive and optimized.

As far as I&#039;m concerned, when I realize that there is about the same calculation power in an iPod as what Appollo had in their ship when they landed on the moon, I tend to think that optimization is not and will never be a mainstream issue IN SOFTWARE. That&#039;s why I don&#039;t think that a paradigm whose primary purpose if to make things more performant or mathematically more correct will not solve what seems to me as our main issue: software usefulness.</description>
		<content:encoded><![CDATA[<p>It&#8217;s interesting because it seems like a schism between people favoring the intrinsic &#8220;performance&#8221; of software paradigms and those who favor the &#8220;usability&#8221; of it. And I have the impression that both directions are antagonist, like you can&#8217;t have a paradigm that is both intuitive and optimized.</p>
<p>As far as I&#8217;m concerned, when I realize that there is about the same calculation power in an iPod as what Appollo had in their ship when they landed on the moon, I tend to think that optimization is not and will never be a mainstream issue IN SOFTWARE. That&#8217;s why I don&#8217;t think that a paradigm whose primary purpose if to make things more performant or mathematically more correct will not solve what seems to me as our main issue: software usefulness.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alexander Snaps</title>
		<link>http://sebastien-arbogast.com/2008/06/22/whats-there-after-objects/comment-page-1/#comment-351</link>
		<dc:creator>Alexander Snaps</dc:creator>
		<pubDate>Thu, 26 Jun 2008 16:44:15 +0000</pubDate>
		<guid isPermaLink="false">http://sebastien-arbogast.com/?p=66#comment-351</guid>
		<description>I would tend to agree with Rick. Especially as the multi-core systems are rising and today developers don&#039;t have the tools to address this...
It is an industry driving force already, and while many of us stick their head in the sand, we will have to face it, rather sooner than later. Function oriented programming languages might be a solution and hence might gain a whole lot of popularity. Scala already being labeled as Java 3 by &quot;people&quot;...</description>
		<content:encoded><![CDATA[<p>I would tend to agree with Rick. Especially as the multi-core systems are rising and today developers don&#8217;t have the tools to address this&#8230;<br />
It is an industry driving force already, and while many of us stick their head in the sand, we will have to face it, rather sooner than later. Function oriented programming languages might be a solution and hence might gain a whole lot of popularity. Scala already being labeled as Java 3 by &#8220;people&#8221;&#8230;</p>
]]></content:encoded>
	</item>
</channel>
</rss>

