<br><div class="gmail_quote">On Tue, Feb 17, 2009 at 3:25 PM, Marco Morazan <span dir="ltr">&lt;<a href="mailto:morazanm@gmail.com">morazanm@gmail.com</a>&gt;</span> wrote:<br><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I am always shocked to hear stuff like this. Functional programming<br>
exacts a small intellectual price for a great deal of power that<br>
*most* when they discover it feel relieved and a sense of<br>
satisfaction. Yet the myth -- and let&#39;s be frank it is a myth -- that<br>
functional programming is hard persists.<br>
</blockquote><div><br>Well - at the risk of appearing to be down on FP, I&#39;ll share my thoughts.&nbsp; Let me first say that I&#39;ve had a great ride so far learning FP and developing in PLT, but it&#39;s certainly not without bumps and bruises.&nbsp; <br>
<br>Note - I am talking about the implementations of FP, not the concept of FP.<br><br>My view is completely from a practitioner perspective - my exposure to FP in school is absolutely minimal - I had challenges matching parentheses back then.&nbsp; <br>
&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Seriously, what is painful about it? Is it painful not to have a<br>
mangled syntax? Is it painful to encourage the use of recursion?<br>
Really, c&#39;mon! Is it painful for functions to be first-class? Is it<br>
painful not to encourage the use of sequencing and<br>
mutation/assignment? Is it painful not to have &quot;for&quot; and &quot;while&quot; as<br>
keywords? Is it painful not to think of state all the time? Is it<br>
painful not to have to manipulate pointers? Is it painful for the<br>
language to properly implement tail calls? Is referential transparency<br>
painful -- most of my students are shocked when I point out to them<br>
that in, say, Java (pick any language that encurages assignment) that<br>
f(x) == f(x) is not always true, which suggest huge gaps in their<br>
education when they learned Java --? Is having macros or continuations<br>
painful?<br>
</blockquote><div><br>The merits of FP are certainly there, but I don&#39;t believe they are well articulated or positioned. <br><br>In general the message appears to be - you can write better, simpler, and shorter program in FP, without having to pull your hairs out trying to find the weird bugs. <br>
<br>These are good value propositions, but for mass practitioners they are dubious at best.<br><br>The reason is because there are serious competitors.&nbsp; <br><br>FPs are no longer competing against C/C++ or even Java.&nbsp; They are competing against the newer wave of languages all vying for developers&#39; attentions. <br>
<br>Perl, Python, PHP, Ruby also offer ways to write better, simpler and shorter programs.&nbsp; And they demand far lower learning curves.&nbsp; Erann Gat previously <a href="http://groups.google.com/group/comp.lang.lisp/msg/6f75cfb5a289d3f6">shared his thought</a> and alluded to Python being a serious competitor to his favorite, lisp. <br>
<br>These languages further lower the barrier to entry by providing massive plumbings.&nbsp;&nbsp; The amount of tutorials, books, references on them are staggering.&nbsp; Whether you consider them rubbish or not, their existences simplified the adoption problem.<br>
<br>Besides being &quot;battery included&quot;, the amount of 3rd party modules written in these languages makes most developer&#39;s job fairly simple.&nbsp; Most developers simply have to find modules to plug and play. <br><br>
The fastest way to develop is not having to develop.&nbsp; No matter how fast you can code in FP, you can&#39;t beat reusable code.&nbsp; And no matter how well the FP code are written, they also go through product lifecycle of maintenance.&nbsp; Hence maintenance (and having a vibrant community to do maintenance) is critical.<br>
<br>The most important thing for a practitioner is to be *productive*.&nbsp; Contrast the above with the state of FP language/platforms today.&nbsp; Introduction materials are hard(er) to find, and even when you find them, it might or might not work with a given implementation.&nbsp; <br>
<br>And when you go through the hurdle to be proficient, you still have to develop most code yourself, as there simply isn&#39;t a big enough community to spread the burden and the maintenance.<br><br>That *is* pain.<br><br>
The truth is, professional developers will put up with a lot of pain.&nbsp; Just look at their day jobs.&nbsp; They are stuck using C, Java, Cobol or whatever at work at most places in a dusty cubicle with little lights, working 60-80 hours a week, just so they can put some food on the table.&nbsp; Why wouldn&#39;t they want to simplify their lives?&nbsp; <br>
<br>But change is scary.&nbsp; Peopleware talks about people hate change, period.&nbsp; People more readily adapt change when there are prior examples of success.&nbsp; Or when they really have to solve a problem that existing solutions just don&#39;t cut it.&nbsp; What they generally don&#39;t do is to jump through hoops for qualitative and possibly dubious value propositions such as better or simpler.<br>
<br>That&#39;s why I believe plumbings are the most important task for a FP to catch on.&nbsp; It&#39;s even better if there are such a well defined niche for the language to solve a problem, so it can take the time to build up the plumbings.&nbsp; Even Perl&#39;s formiddable CPAN is built over time while Perl prospers from solving text processing and web CGI niches.&nbsp; <br>
<br>Erlang now also appears to catch on as it solves massive concurrency problems that&#39;s appearing to become important.&nbsp; I am a lurker on erlang&#39;s list and can attest to the increase of interest there.&nbsp; If Erlang does &quot;get over the hump&quot; it will cause more adoption for FP in general than other FP languages.<br>
<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I am not being cynical here. I know that many pick up bad habits that<br>
become part of muscle memory and then may feel lost at sea using a<br>
different programming language. Is that a short coming of functional<br>
programming? Would any of those lost at sea feel more comfortable<br>
coding in Prolog? Would a Cobol programmer feel more comfortable<br>
programming in Java? Perhaps, it is a shortcoming of our education and<br>
not of functional programming.<br>
</blockquote><div><br>Education is certainly key, but education alone isn&#39;t going to influence the industry, until the above issues are addressed.&nbsp; And given most will stay in industry longer than in school I would say it&#39;s more important to build up the plumbings.&nbsp; Wouldn&#39;t you want to hear your student say &quot;why don&#39;t you teach me scheme, I want to work at Google (or another hip company) and they standardize on it&quot;?&nbsp; Surely that&#39;ll make your life as a professor easier too.<br>
<br>My 2 cents and ramblings.&nbsp; Cheers,<br>yc<br><br></div></div>