I used to be a huge fan of fancy abstraction tools. I still like them a lot when I program for fun. However, after working for a few years on a huge code base (Google's) written by thousands of programmers of varying skill, I'm not so convinced anymore. A couple things to remember:<br>
<ul><li>Code is read a lot more often than it's written, and while boilerplate is a pain in the ass to write, it's easy to read precisely because it's trivial.</li><li>Reading code that makes heavy use of powerful abstraction mechanisms ( e.g., Haskel, and Python to a lesser extent) can be really hard to read because each abstraction layer essentially defines a problem-dependent language. That's nice when you have a program that uses a single such language, but it gets out of hand pretty quickly with a large code base, where you have dozens of subsystems, each written in its own idiosyncratic language. It's pretty wrenching to try to follow an execution path where each step requires you to learn a new language.<br>
</li><li>It often pretty easy to compensate for lack of powerful abstraction by using instead code generation tools to define new languages. This has the advantage that the languages are actually documented, and tend to get standardized pretty quickly, partly because it's not that easy to write them.</li>
</ul>I know this is all anecdotal, and I don't think it's conclusive at all. But I now suspect there are some practical issues with powerful abstraction mechanisms, especially with large, shared code bases. <br><br>
-mike<br><br><div class="gmail_quote">On Thu, Apr 9, 2009 at 3:44 AM, Stephen De Gabrielle <span dir="ltr"><<a href="mailto:stephen@degabrielle.name">stephen@degabrielle.name</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Is their any evidence that there are problems with providing these<br>
abstraction tools? It's not like the designers of java were unaware of<br>
lisps, haskel etc.<br>
<div><div></div><div class="h5"><br>
On 4/9/09, <a href="mailto:hendrik@topoi.pooq.com">hendrik@topoi.pooq.com</a> <<a href="mailto:hendrik@topoi.pooq.com">hendrik@topoi.pooq.com</a>> wrote:<br>
> On Wed, Apr 08, 2009 at 11:01:41AM -0700, John Clements wrote:<br>
>><br>
>> Honestly, this has nothing to do with Scheme. There are *lots* of<br>
>> languages out there that have the abstraction tools available to get<br>
>> rid of the boring junk; Haskell, ML, Scheme, LISP, etc. In a perfect<br>
>> world, I'd like to create a rallying cry for *all* proponents of<br>
>> functional programming.<br>
><br>
> And the abstraction tools aren't even in conceptual conflict with<br>
> imperative programming. Why *do* all those languages leave tnem out?<br>
><br>
> -- hendrik<br>
> _________________________________________________<br>
> For list-related administrative tasks:<br>
> <a href="http://list.cs.brown.edu/mailman/listinfo/plt-scheme" target="_blank">http://list.cs.brown.edu/mailman/listinfo/plt-scheme</a><br>
><br>
<br>
</div></div>--<br>
Sent from my mobile device<br>
<br>
Cheers,<br>
<br>
Stephen<br>
<br>
--<br>
Stephen De Gabrielle<br>
<a href="mailto:s.degabrielle@cs.ucl.ac.uk">s.degabrielle@cs.ucl.ac.uk</a><br>
Telephone +44 (0)20 7679 0693 (x30693)<br>
Mobile 079 851 890 45<br>
Project: Making Sense of Information (MaSI)<br>
Work:<a href="http://www.uclic.ucl.ac.uk/annb/MaSI.html" target="_blank">http://www.uclic.ucl.ac.uk/annb/MaSI.html</a><br>
Home:<a href="http://www.degabrielle.name/stephen" target="_blank">http://www.degabrielle.name/stephen</a><br>
<br>
<br>
UCL Interaction Centre<br>
MPEB 8th floor<br>
University College London<br>
Gower Street<br>
London WC1E 6BT<br>
<div><div></div><div class="h5">_________________________________________________<br>
For list-related administrative tasks:<br>
<a href="http://list.cs.brown.edu/mailman/listinfo/plt-scheme" target="_blank">http://list.cs.brown.edu/mailman/listinfo/plt-scheme</a><br>
</div></div></blockquote></div><br>