<?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"
	>
<channel>
	<title>Comments on: Architecting on Force.com</title>
	<atom:link href="http://blog.coda2go.com/index.php/2008/01/31/architecting-on-forcecom/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.coda2go.com/2008/01/31/architecting-on-forcecom/</link>
	<description></description>
	<pubDate>Tue, 06 Jan 2009 07:09:23 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
		<item>
		<title>By: Peter Coffee, salesforce.com</title>
		<link>http://blog.coda2go.com/2008/01/31/architecting-on-forcecom/#comment-17</link>
		<dc:creator>Peter Coffee, salesforce.com</dc:creator>
		<pubDate>Sun, 10 Feb 2008 21:41:16 +0000</pubDate>
		<guid isPermaLink="false">http://blog.coda2go.com/developers/2008/01/31/architecting-on-forcecom/#comment-17</guid>
		<description>Design pattern discussions often lead to more general debates on language choice. I'm often asked, in particular, to explain why the Apex language was devised for the Force.com platform, instead of just hosting Java or Python or some other well-liked language. After all, wouldn't that get programmers started more quickly with their use of familiar patterns, instead of spending time on pattern re-implementation?

My first response is that Apex is the best way to talk to the Force.com environment. The Apex language and its engine can be aware of the application space, and can protect the developer from many potential misbehaviors in a way that a non-specific language would have to be heavily instrumented to match. You could do that -- you could create all that design-time and run-time protective support, I mean, in PHP or whatever -- but what's the point?

I'm reminded of Paul Graham's comment (in an excellent essay entitled "Revenge of the Nerds {http://www.paulgraham.com/icad.html}) on what happens when you try to solve deep problems with shallow languages: to "build cathedrals with toothpicks," as it's often been called. Actually, Paul was citing "Greenspun's Tenth Rule" (http://en.wikipedia.org/wiki/Greenspun's_Tenth_Rule) when he reiterated that statement that "Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp."

The point is that good programmers take the best language that's available on their target platform, and devise within that language a task-focused language suitable to their target problem. The closer you start to the end of step 2, the less time you have to spend on it and the sooner you start actually solving your problem. Implementation of patterns in that gap will be easier if the gap is smaller.
My second response is that it's rare, any more, to see any useful application that's written using tools that are not aligned with any specific platform.  A Windows application written in pure ANSI C is still a Windows application, unless it's just a TTY app that's compiled to execute in a console window -- not that there's anything wrong with that, but it's not what most users expect. In general, the user gets no additional freedom from an application's being written in ANSI C, instead of (for example) C# or VB.Net. By the time the developer has effectively exploited the widgets and frameworks of any decent application environment, the question of what was used to stitch the API calls together is pretty much incidental to the question of how free the user is to employ the application as desired.

If an application needs a particular fat-client environment, it's not a portable app, no matter how it's coded; if it runs on any device with an Internet connection and a standards-conformant browser, it's a portable app by any reasonably modern definition of the term.
When a language is suited to both the platform and the problem, design patterns can add value at a higher level of abstraction, and that's a good thing. Putting powerful patterns on top of Apex is therefore a significant step toward the ever more general use of Force.com.</description>
		<content:encoded><![CDATA[<p>Design pattern discussions often lead to more general debates on language choice. I&#8217;m often asked, in particular, to explain why the Apex language was devised for the Force.com platform, instead of just hosting Java or Python or some other well-liked language. After all, wouldn&#8217;t that get programmers started more quickly with their use of familiar patterns, instead of spending time on pattern re-implementation?</p>
<p>My first response is that Apex is the best way to talk to the Force.com environment. The Apex language and its engine can be aware of the application space, and can protect the developer from many potential misbehaviors in a way that a non-specific language would have to be heavily instrumented to match. You could do that &#8212; you could create all that design-time and run-time protective support, I mean, in PHP or whatever &#8212; but what&#8217;s the point?</p>
<p>I&#8217;m reminded of Paul Graham&#8217;s comment (in an excellent essay entitled &#8220;Revenge of the Nerds {http://www.paulgraham.com/icad.html}) on what happens when you try to solve deep problems with shallow languages: to &#8220;build cathedrals with toothpicks,&#8221; as it&#8217;s often been called. Actually, Paul was citing &#8220;Greenspun&#8217;s Tenth Rule&#8221; (http://en.wikipedia.org/wiki/Greenspun&#8217;s_Tenth_Rule) when he reiterated that statement that &#8220;Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.&#8221;</p>
<p>The point is that good programmers take the best language that&#8217;s available on their target platform, and devise within that language a task-focused language suitable to their target problem. The closer you start to the end of step 2, the less time you have to spend on it and the sooner you start actually solving your problem. Implementation of patterns in that gap will be easier if the gap is smaller.<br />
My second response is that it&#8217;s rare, any more, to see any useful application that&#8217;s written using tools that are not aligned with any specific platform.  A Windows application written in pure ANSI C is still a Windows application, unless it&#8217;s just a TTY app that&#8217;s compiled to execute in a console window &#8212; not that there&#8217;s anything wrong with that, but it&#8217;s not what most users expect. In general, the user gets no additional freedom from an application&#8217;s being written in ANSI C, instead of (for example) C# or VB.Net. By the time the developer has effectively exploited the widgets and frameworks of any decent application environment, the question of what was used to stitch the API calls together is pretty much incidental to the question of how free the user is to employ the application as desired.</p>
<p>If an application needs a particular fat-client environment, it&#8217;s not a portable app, no matter how it&#8217;s coded; if it runs on any device with an Internet connection and a standards-conformant browser, it&#8217;s a portable app by any reasonably modern definition of the term.<br />
When a language is suited to both the platform and the problem, design patterns can add value at a higher level of abstraction, and that&#8217;s a good thing. Putting powerful patterns on top of Apex is therefore a significant step toward the ever more general use of Force.com.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kevin Roberts</title>
		<link>http://blog.coda2go.com/2008/01/31/architecting-on-forcecom/#comment-16</link>
		<dc:creator>Kevin Roberts</dc:creator>
		<pubDate>Fri, 08 Feb 2008 17:48:36 +0000</pubDate>
		<guid isPermaLink="false">http://blog.coda2go.com/developers/2008/01/31/architecting-on-forcecom/#comment-16</guid>
		<description>Thanks for the insight in what's going on 'under the covers'.  While force.com gives us a great technical 'platform' to work with its clear that solid application development and design experience is required to create an industrial strength application that will perform well and scale.</description>
		<content:encoded><![CDATA[<p>Thanks for the insight in what&#8217;s going on &#8216;under the covers&#8217;.  While force.com gives us a great technical &#8216;platform&#8217; to work with its clear that solid application development and design experience is required to create an industrial strength application that will perform well and scale.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
