<?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: Embracing Encapsulation</title>
	<atom:link href="http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/</link>
	<description>Terry Jones</description>
	<pubDate>Fri, 09 Jan 2009 01:51:34 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
		<item>
		<title>By: Paul W. Homer</title>
		<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-607</link>
		<dc:creator>Paul W. Homer</dc:creator>
		<pubDate>Wed, 25 Jun 2008 15:52:11 +0000</pubDate>
		<guid isPermaLink="false">http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-607</guid>
		<description>But, if in order to fully express the problem in a specific technology, one has to learn how to bend one's perspective to match it, then is it really a good technology? 

And if it requires merging together several different mutually exclusive paradigms, such as OO and FP, isn't this just getting messy for the sake of having too many little moving bits?

In the end, are we looking for intricate little bits to fiddle with or are we actually trying to take something with a massive amount of complexity and reduce it into something that is simple, maintainable and solves (some of) our user's problems?

So, if after fifty years of progress, the technologies aren't actually getting more simple or obvious, and are in fact getting way way harder to grok, isn't that a strong indicator that there is some type of serious problem with them? Do we get more from our modern technologies, or is it that there is just more code and data available to play with?


Paul.</description>
		<content:encoded><![CDATA[<p>But, if in order to fully express the problem in a specific technology, one has to learn how to bend one&#8217;s perspective to match it, then is it really a good technology? </p>
<p>And if it requires merging together several different mutually exclusive paradigms, such as OO and FP, isn&#8217;t this just getting messy for the sake of having too many little moving bits?</p>
<p>In the end, are we looking for intricate little bits to fiddle with or are we actually trying to take something with a massive amount of complexity and reduce it into something that is simple, maintainable and solves (some of) our user&#8217;s problems?</p>
<p>So, if after fifty years of progress, the technologies aren&#8217;t actually getting more simple or obvious, and are in fact getting way way harder to grok, isn&#8217;t that a strong indicator that there is some type of serious problem with them? Do we get more from our modern technologies, or is it that there is just more code and data available to play with?</p>
<p>Paul.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: esteve</title>
		<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-606</link>
		<dc:creator>esteve</dc:creator>
		<pubDate>Wed, 25 Jun 2008 11:58:17 +0000</pubDate>
		<guid isPermaLink="false">http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-606</guid>
		<description>&lt;i&gt;I’m hoping to change that, but maybe you just are smarter :-)&lt;/i&gt;

C'mon, you know I'm not smarter than you :-) It's just a matter of getting used to some paradigm/methodology/etc. For example, Python and Ruby make functional programming easy to integrate in a object-oriented language. Once you have gotten used to use functions as first class citizens, you feel that Java imposes you too many limits.

That's why I like C++ and Python so much:

- traditional procedural language (check)
- object oriented features (check)
- functional programming (check). In C++, if you want to pass around functions, you'll need to write a class that overloads the () operator (usually called a functor). It's not as straightforward as in Python, but it's something you cannot do in Java.</description>
		<content:encoded><![CDATA[<p><i>I’m hoping to change that, but maybe you just are smarter :-)</i></p>
<p>C&#8217;mon, you know I&#8217;m not smarter than you :-) It&#8217;s just a matter of getting used to some paradigm/methodology/etc. For example, Python and Ruby make functional programming easy to integrate in a object-oriented language. Once you have gotten used to use functions as first class citizens, you feel that Java imposes you too many limits.</p>
<p>That&#8217;s why I like C++ and Python so much:</p>
<p>- traditional procedural language (check)<br />
- object oriented features (check)<br />
- functional programming (check). In C++, if you want to pass around functions, you&#8217;ll need to write a class that overloads the () operator (usually called a functor). It&#8217;s not as straightforward as in Python, but it&#8217;s something you cannot do in Java.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: terry</title>
		<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-605</link>
		<dc:creator>terry</dc:creator>
		<pubDate>Tue, 24 Jun 2008 23:24:18 +0000</pubDate>
		<guid isPermaLink="false">http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-605</guid>
		<description>@esteve

&lt;i&gt;Since kids have grown up using high level tools, it should be easier for them to think in abstract terms, that’s the key IMHO.&lt;/i&gt;

Agreed - though I'd say to think in the new paradigms, as I don't know that they're necessarily more abstract. In the case of OO, I'd say that it's more natural and more concrete, not more abstract. But that's just a matter of words - I agree that that's key.

You don't look at problems the way I do. You quickly see approaches and solutions that I find very natural once you've pointed them out to me. I'm hoping to change that, but maybe you just are smarter :-)</description>
		<content:encoded><![CDATA[<p>@esteve</p>
<p><i>Since kids have grown up using high level tools, it should be easier for them to think in abstract terms, that’s the key IMHO.</i></p>
<p>Agreed - though I&#8217;d say to think in the new paradigms, as I don&#8217;t know that they&#8217;re necessarily more abstract. In the case of OO, I&#8217;d say that it&#8217;s more natural and more concrete, not more abstract. But that&#8217;s just a matter of words - I agree that that&#8217;s key.</p>
<p>You don&#8217;t look at problems the way I do. You quickly see approaches and solutions that I find very natural once you&#8217;ve pointed them out to me. I&#8217;m hoping to change that, but maybe you just are smarter :-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: terry</title>
		<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-604</link>
		<dc:creator>terry</dc:creator>
		<pubDate>Tue, 24 Jun 2008 23:15:53 +0000</pubDate>
		<guid isPermaLink="false">http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-604</guid>
		<description>I would say the point was just to highlight the general trend of encapsulation, to assert that it's an inevitable aspect of "progress" (which is not the same as saying that we are always progressing, or progressing forwards, or progressing linearly), and to suggest that we (i.e., mainly me) embrace it instead of bemoaning the lack of fundamental knowledge in (mainly) the young.

I didn't think all this out in great depth, and some of you have raised good exceptions that I agree with. As I said to Tim Bray in Twitter, I could have easily argued the other side.  But I do believe history shows that that is ultimately the dinosaur's side of the debate.

BTW, I probably wouldn't have written the article at all if I hadn't found such a cool image on Flickr to go with it.

The VFS example is a good one. Maybe Twitter is a good example for discussion. They used very high-level encapsulation (RoR) and it took them a long way, a really long way - much further than 99% of startups get. And yes, they now have to re-engineer a lot of stuff (throw out some encapsulations, and adopt some others that are more reliable). But you might argue that if they hadn't built their first site in days they might not exist at all.

Amazon web services and Google's App Engine are another good example. Scaling is really hard. But certain aspects, including some pretty significant ones, are now encapsulated to the point where any programmer who can put together a few HTTP requests can build massive systems that scale (at least in some important ways). I see things like AWS as being huge steps forward. They may not get it all right immediately, but it's very early days yet for cloud computing.</description>
		<content:encoded><![CDATA[<p>I would say the point was just to highlight the general trend of encapsulation, to assert that it&#8217;s an inevitable aspect of &#8220;progress&#8221; (which is not the same as saying that we are always progressing, or progressing forwards, or progressing linearly), and to suggest that we (i.e., mainly me) embrace it instead of bemoaning the lack of fundamental knowledge in (mainly) the young.</p>
<p>I didn&#8217;t think all this out in great depth, and some of you have raised good exceptions that I agree with. As I said to Tim Bray in Twitter, I could have easily argued the other side.  But I do believe history shows that that is ultimately the dinosaur&#8217;s side of the debate.</p>
<p>BTW, I probably wouldn&#8217;t have written the article at all if I hadn&#8217;t found such a cool image on Flickr to go with it.</p>
<p>The VFS example is a good one. Maybe Twitter is a good example for discussion. They used very high-level encapsulation (RoR) and it took them a long way, a really long way - much further than 99% of startups get. And yes, they now have to re-engineer a lot of stuff (throw out some encapsulations, and adopt some others that are more reliable). But you might argue that if they hadn&#8217;t built their first site in days they might not exist at all.</p>
<p>Amazon web services and Google&#8217;s App Engine are another good example. Scaling is really hard. But certain aspects, including some pretty significant ones, are now encapsulated to the point where any programmer who can put together a few HTTP requests can build massive systems that scale (at least in some important ways). I see things like AWS as being huge steps forward. They may not get it all right immediately, but it&#8217;s very early days yet for cloud computing.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: esteve</title>
		<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-603</link>
		<dc:creator>esteve</dc:creator>
		<pubDate>Tue, 24 Jun 2008 22:50:30 +0000</pubDate>
		<guid isPermaLink="false">http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-603</guid>
		<description>&lt;i&gt;At that point, either Esteve goes back and re-learns all that was known or he goes forward and just re-invents the whole same mess again (for the 4th time?)&lt;/i&gt;

I think the point of the article is not that Esteve doesn't know about what's underneath, but that growing up with more powerful tools (OO, patterns, etc.) changes the way you see the world. Take for example the Linux VFS layer, it's a fine example of OO applied to a project that has to deal with lots of low level things, there's inheritance, polymorphism, etc. Someone who hasn't been exposed to OO might have implemented it differently, but since it's the product of a generation that grew up with objects, Al Viro (the guy who designed the current VFS layer) thought it was natural to design it that way.

Although our primary language at Fluidinfo is Python, we have had to deal with things in C and C++, so I don't think that a programmer who only knows high-level languages can be a good one.

Since kids have grown up using high level tools, it should be easier for them to think in abstract terms, that's the key IMHO.

It's funny to write about oneself in third person.</description>
		<content:encoded><![CDATA[<p><i>At that point, either Esteve goes back and re-learns all that was known or he goes forward and just re-invents the whole same mess again (for the 4th time?)</i></p>
<p>I think the point of the article is not that Esteve doesn&#8217;t know about what&#8217;s underneath, but that growing up with more powerful tools (OO, patterns, etc.) changes the way you see the world. Take for example the Linux VFS layer, it&#8217;s a fine example of OO applied to a project that has to deal with lots of low level things, there&#8217;s inheritance, polymorphism, etc. Someone who hasn&#8217;t been exposed to OO might have implemented it differently, but since it&#8217;s the product of a generation that grew up with objects, Al Viro (the guy who designed the current VFS layer) thought it was natural to design it that way.</p>
<p>Although our primary language at Fluidinfo is Python, we have had to deal with things in C and C++, so I don&#8217;t think that a programmer who only knows high-level languages can be a good one.</p>
<p>Since kids have grown up using high level tools, it should be easier for them to think in abstract terms, that&#8217;s the key IMHO.</p>
<p>It&#8217;s funny to write about oneself in third person.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: terry</title>
		<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-602</link>
		<dc:creator>terry</dc:creator>
		<pubDate>Tue, 24 Jun 2008 20:07:49 +0000</pubDate>
		<guid isPermaLink="false">http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-602</guid>
		<description>Hi Paul

I'm not claiming that progress in encapsulation is always (or even often) linear. Neal gave an example above (in beer brewing) in which we've gone back to re-examine how things were encapsulated. Also, I guess from your comments that I was thinking (or at least speaking) at a more general level than IDEs and programming languages etc. We do make mistakes, I agree. But the overall trend is towards more being encapsulated, towards &lt;em&gt;good&lt;/em&gt; encapsulations  gaining mindshare, etc. Very few people will ever need to write their own random number generator, or hashing code, or bitblt code - or you name it - there are hundreds of examples of that kind.

I also don't like IDEs :-)  Emacs is enough for me in that regard...</description>
		<content:encoded><![CDATA[<p>Hi Paul</p>
<p>I&#8217;m not claiming that progress in encapsulation is always (or even often) linear. Neal gave an example above (in beer brewing) in which we&#8217;ve gone back to re-examine how things were encapsulated. Also, I guess from your comments that I was thinking (or at least speaking) at a more general level than IDEs and programming languages etc. We do make mistakes, I agree. But the overall trend is towards more being encapsulated, towards <em>good</em> encapsulations  gaining mindshare, etc. Very few people will ever need to write their own random number generator, or hashing code, or bitblt code - or you name it - there are hundreds of examples of that kind.</p>
<p>I also don&#8217;t like IDEs :-)  Emacs is enough for me in that regard&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paul W. Homer</title>
		<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-600</link>
		<dc:creator>Paul W. Homer</dc:creator>
		<pubDate>Tue, 24 Jun 2008 18:03:25 +0000</pubDate>
		<guid isPermaLink="false">http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-600</guid>
		<description>I think the problem is that you are predicating your views on an implicit assumption that the previous work is good enough, if not great. Thus we can move on. What if all of this modern stuff is just a train that's gone off its tracks? What if the reason you're not seeing the solution as being obvious, is because it's not actually obvious? 

We have, in a very real sense gone a long way down a specific technology path, heavily investing in a style of building tools. But are they just more complex because they are, or are they a huge mess? Horribly colored code in a flaky IDE, running on a platform that acts irrationally may look prettier than the old text-based screens, but honestly what is it doing now, that it wasn't twenty years ago? Sure, the data is massive, but the functionality?

As we stretch the limits of this current technology we are quickly getting to a level beyond which it is too unstable to manage. To get past that threshold we'll have to go back and refactor our foundations. At that point, either Esteve goes back and re-learns all that was known or he goes forward and just re-invents the whole same mess again (for the 4th time?) 

Just a guess.

Paul.
http://theprogrammersparadox.blogspot.com</description>
		<content:encoded><![CDATA[<p>I think the problem is that you are predicating your views on an implicit assumption that the previous work is good enough, if not great. Thus we can move on. What if all of this modern stuff is just a train that&#8217;s gone off its tracks? What if the reason you&#8217;re not seeing the solution as being obvious, is because it&#8217;s not actually obvious? </p>
<p>We have, in a very real sense gone a long way down a specific technology path, heavily investing in a style of building tools. But are they just more complex because they are, or are they a huge mess? Horribly colored code in a flaky IDE, running on a platform that acts irrationally may look prettier than the old text-based screens, but honestly what is it doing now, that it wasn&#8217;t twenty years ago? Sure, the data is massive, but the functionality?</p>
<p>As we stretch the limits of this current technology we are quickly getting to a level beyond which it is too unstable to manage. To get past that threshold we&#8217;ll have to go back and refactor our foundations. At that point, either Esteve goes back and re-learns all that was known or he goes forward and just re-invents the whole same mess again (for the 4th time?) </p>
<p>Just a guess.</p>
<p>Paul.<br />
<a href="http://theprogrammersparadox.blogspot.com" rel="nofollow">http://theprogrammersparadox.blogspot.com</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: terry</title>
		<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-590</link>
		<dc:creator>terry</dc:creator>
		<pubDate>Fri, 20 Jun 2008 22:36:37 +0000</pubDate>
		<guid isPermaLink="false">http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-590</guid>
		<description>Hi Duncan

I don't know where your blog is, I don't think. I'm surprised you know where mine is!

I'd like to read that article. We've run into some really interesting things just thinking about how to convert one function (an iterator that periodically goes to the network). It's fun but also hard, as you say. I'm goin gto post about it to the Twisted list soon. Or maybe I should just blog about it...

Are you going to EuroPytho?

Terry</description>
		<content:encoded><![CDATA[<p>Hi Duncan</p>
<p>I don&#8217;t know where your blog is, I don&#8217;t think. I&#8217;m surprised you know where mine is!</p>
<p>I&#8217;d like to read that article. We&#8217;ve run into some really interesting things just thinking about how to convert one function (an iterator that periodically goes to the network). It&#8217;s fun but also hard, as you say. I&#8217;m goin gto post about it to the Twisted list soon. Or maybe I should just blog about it&#8230;</p>
<p>Are you going to EuroPytho?</p>
<p>Terry</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Duncan McGreggor</title>
		<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-589</link>
		<dc:creator>Duncan McGreggor</dc:creator>
		<pubDate>Fri, 20 Jun 2008 18:09:43 +0000</pubDate>
		<guid isPermaLink="false">http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-589</guid>
		<description>Just a quick note about converting synchronous code to Twisted: that's very tricky :-) I recently interviewed JP Calderone (of Twisted fame) about best practices when attempting to do this, and will post it to my blog soonish (I'm hopng next week).</description>
		<content:encoded><![CDATA[<p>Just a quick note about converting synchronous code to Twisted: that&#8217;s very tricky :-) I recently interviewed JP Calderone (of Twisted fame) about best practices when attempting to do this, and will post it to my blog soonish (I&#8217;m hopng next week).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: terry</title>
		<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-588</link>
		<dc:creator>terry</dc:creator>
		<pubDate>Fri, 20 Jun 2008 14:17:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-588</guid>
		<description>@thiefhunter

There's value in encapsulating knowledge and making it available to others. You wrote &lt;a href="http://www.bobarno.com/book.htm" rel="nofollow"&gt;a book&lt;/a&gt; and you have &lt;a href="http://bobarno.com/thiefhunters" rel="nofollow"&gt;a blog&lt;/a&gt; where you bundled up decades of extremely hard won experience. It benefits you to do so, and it benefits the rest of us to learn from you the easy way. And so it goes...</description>
		<content:encoded><![CDATA[<p>@thiefhunter</p>
<p>There&#8217;s value in encapsulating knowledge and making it available to others. You wrote <a href="http://www.bobarno.com/book.htm" rel="nofollow">a book</a> and you have <a href="http://bobarno.com/thiefhunters" rel="nofollow">a blog</a> where you bundled up decades of extremely hard won experience. It benefits you to do so, and it benefits the rest of us to learn from you the easy way. And so it goes&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Xavier Noria</title>
		<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-585</link>
		<dc:creator>Xavier Noria</dc:creator>
		<pubDate>Fri, 20 Jun 2008 07:28:44 +0000</pubDate>
		<guid isPermaLink="false">http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-585</guid>
		<description>Good article, hi Esteve! :-)

I am a big fan of scripting languages, and I work with them for a living, but I think a programmer needs to understand things at a lower level as part of his education. The more languages and paradigms you know the better, but I think you'd need to know some C for example, perhaps not at the level of a professional C programmer, but what C provides would be understood. I am not sure programmers need to understand assembly, memory segments, hardware, etc. The more the better, but for programming I feel that low level is perhaps not that necessary.

On the other hand it goes without saying that we need young C programmers, new interpreters are written, new libraries are developed, people have to evolve operating systems, maintain interpreters, write bindings, etc. In general high-performance software will be needed and a guy with only high-level concepts can't write it.

Now we'll see if any of that helps me solve the captcha :-).</description>
		<content:encoded><![CDATA[<p>Good article, hi Esteve! :-)</p>
<p>I am a big fan of scripting languages, and I work with them for a living, but I think a programmer needs to understand things at a lower level as part of his education. The more languages and paradigms you know the better, but I think you&#8217;d need to know some C for example, perhaps not at the level of a professional C programmer, but what C provides would be understood. I am not sure programmers need to understand assembly, memory segments, hardware, etc. The more the better, but for programming I feel that low level is perhaps not that necessary.</p>
<p>On the other hand it goes without saying that we need young C programmers, new interpreters are written, new libraries are developed, people have to evolve operating systems, maintain interpreters, write bindings, etc. In general high-performance software will be needed and a guy with only high-level concepts can&#8217;t write it.</p>
<p>Now we&#8217;ll see if any of that helps me solve the captcha :-).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: thiefhunter</title>
		<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-583</link>
		<dc:creator>thiefhunter</dc:creator>
		<pubDate>Fri, 20 Jun 2008 00:28:15 +0000</pubDate>
		<guid isPermaLink="false">http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-583</guid>
		<description>Even a non-programmer's store of hard-earned learning has been devalued by encapsulation. I'm glad I know what I know, but I'm please to have the new tools, too. BTW, my father, a retired polymer chemist, spent a few years finding ways to implement micro-encapsulation. He put fire-retardant in carpets and textiles, made no-carbon duplicate paper with micro-encapsulated dye, scratch-and-sniff stuff, etc.</description>
		<content:encoded><![CDATA[<p>Even a non-programmer&#8217;s store of hard-earned learning has been devalued by encapsulation. I&#8217;m glad I know what I know, but I&#8217;m please to have the new tools, too. BTW, my father, a retired polymer chemist, spent a few years finding ways to implement micro-encapsulation. He put fire-retardant in carpets and textiles, made no-carbon duplicate paper with micro-encapsulated dye, scratch-and-sniff stuff, etc.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: millenomi</title>
		<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-580</link>
		<dc:creator>millenomi</dc:creator>
		<pubDate>Thu, 19 Jun 2008 07:27:18 +0000</pubDate>
		<guid isPermaLink="false">http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-580</guid>
		<description>(I apologize in advance for not reading the assuredly fine comments above mine.)

I still think the programming world has a need for high-level application programmers and low-level system programmers for a very very simple reason: while digital clocks replace analog clocks, we don't have high-performance processors that are able to think in high-level abstractions. Python still needs C because there's no Python CPU, the same way C must first be compiled in machine code by a good compiler because there is no CPU able to read C and make sense of it.

The maxim goes: write the app and then optimize it -- do not optimize prematurely. Which is really something that should read: write the app in a way that is easy to read and follow for an external party and overall makes sense, and then you dive down and spend time with the implementation of your concepts to see if it lives down  to your speed requirements. High-level languages that offer some functionality "crystallized" in a library are a barrier to this, as after you have made the app as good as you can, the library then becomes the bottleneck, and if it's still an unacceptable bottleneck you have to get down a level and start messing around with the library's internals, if you can (long live FOSS!).

Which, in two words, means: there's a very fine place for both kinds of programmers in this brave new world. Neither makes the other obsolete.</description>
		<content:encoded><![CDATA[<p>(I apologize in advance for not reading the assuredly fine comments above mine.)</p>
<p>I still think the programming world has a need for high-level application programmers and low-level system programmers for a very very simple reason: while digital clocks replace analog clocks, we don&#8217;t have high-performance processors that are able to think in high-level abstractions. Python still needs C because there&#8217;s no Python CPU, the same way C must first be compiled in machine code by a good compiler because there is no CPU able to read C and make sense of it.</p>
<p>The maxim goes: write the app and then optimize it &#8212; do not optimize prematurely. Which is really something that should read: write the app in a way that is easy to read and follow for an external party and overall makes sense, and then you dive down and spend time with the implementation of your concepts to see if it lives down  to your speed requirements. High-level languages that offer some functionality &#8220;crystallized&#8221; in a library are a barrier to this, as after you have made the app as good as you can, the library then becomes the bottleneck, and if it&#8217;s still an unacceptable bottleneck you have to get down a level and start messing around with the library&#8217;s internals, if you can (long live FOSS!).</p>
<p>Which, in two words, means: there&#8217;s a very fine place for both kinds of programmers in this brave new world. Neither makes the other obsolete.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Matt</title>
		<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-577</link>
		<dc:creator>Matt</dc:creator>
		<pubDate>Thu, 19 Jun 2008 06:16:19 +0000</pubDate>
		<guid isPermaLink="false">http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-577</guid>
		<description>I really like this article, and not simply because I agree with it.  As a non-classically trained programmer, I find that most of the work I've ever encountered easily relies on the encapsulation of previous work.  You can accomplish great things on the backs of the giants that have moved the art forward.

However, I think where Graham is correct is in the hyper-niche that is the startup world.  It encompasses a vastly smaller segment of the worlds jobs and mind-share, but is dominated by doing "neat things" with "old tech".  As evidenced by Steve Yegge's ranting about fundamentals, it is relevant if you're trying to do something special, especially performance related.

I was lamenting with a friend the other day that, really, very few of my peers know what their computer is doing, even the ones that know how to code, at a basic level.  It's not important for them to build a business/website/widget.  They're not inventing the New New Thing, but they're successful and happy.  Really, this is only a lament because *I* learned all that "basic" stuff that doesn't really matter on a day-to-day basis.  Or didn't until I got a new job that focuses on performance.

I think the balance of knowledge (or lack of knowledge) is a great and wonderful thing.  Computers are slowly replacing many of the old tools that are no longer required to make us successful.  And the brain-damaged fringe that really like the details can work at the startups, or become hobbyists :)  But, really, there's better things to do with brain cycles than remember old, worthless stuff like Lisp (j/k).</description>
		<content:encoded><![CDATA[<p>I really like this article, and not simply because I agree with it.  As a non-classically trained programmer, I find that most of the work I&#8217;ve ever encountered easily relies on the encapsulation of previous work.  You can accomplish great things on the backs of the giants that have moved the art forward.</p>
<p>However, I think where Graham is correct is in the hyper-niche that is the startup world.  It encompasses a vastly smaller segment of the worlds jobs and mind-share, but is dominated by doing &#8220;neat things&#8221; with &#8220;old tech&#8221;.  As evidenced by Steve Yegge&#8217;s ranting about fundamentals, it is relevant if you&#8217;re trying to do something special, especially performance related.</p>
<p>I was lamenting with a friend the other day that, really, very few of my peers know what their computer is doing, even the ones that know how to code, at a basic level.  It&#8217;s not important for them to build a business/website/widget.  They&#8217;re not inventing the New New Thing, but they&#8217;re successful and happy.  Really, this is only a lament because *I* learned all that &#8220;basic&#8221; stuff that doesn&#8217;t really matter on a day-to-day basis.  Or didn&#8217;t until I got a new job that focuses on performance.</p>
<p>I think the balance of knowledge (or lack of knowledge) is a great and wonderful thing.  Computers are slowly replacing many of the old tools that are no longer required to make us successful.  And the brain-damaged fringe that really like the details can work at the startups, or become hobbyists :)  But, really, there&#8217;s better things to do with brain cycles than remember old, worthless stuff like Lisp (j/k).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Josh</title>
		<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-576</link>
		<dc:creator>Josh</dc:creator>
		<pubDate>Thu, 19 Jun 2008 02:30:30 +0000</pubDate>
		<guid isPermaLink="false">http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-576</guid>
		<description>Hmm...but I still know conceptually what hunting and rubbing sticks for fire is, even if I've never done it.  I would argue that good programmers should understand that there is such as thing as the nuts and bolts and have an idea of how it works and why it's important, even if they couldn't do it themselves at a moment's notice.

Also there are some fundamentals that must be learned, just like any craft, e.g. electricians, architects, etc.  We don't make mathematicians use slide rules, but they still have to know the basic theory as they type formulas into a computer.</description>
		<content:encoded><![CDATA[<p>Hmm&#8230;but I still know conceptually what hunting and rubbing sticks for fire is, even if I&#8217;ve never done it.  I would argue that good programmers should understand that there is such as thing as the nuts and bolts and have an idea of how it works and why it&#8217;s important, even if they couldn&#8217;t do it themselves at a moment&#8217;s notice.</p>
<p>Also there are some fundamentals that must be learned, just like any craft, e.g. electricians, architects, etc.  We don&#8217;t make mathematicians use slide rules, but they still have to know the basic theory as they type formulas into a computer.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: terry</title>
		<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-574</link>
		<dc:creator>terry</dc:creator>
		<pubDate>Wed, 18 Jun 2008 23:07:26 +0000</pubDate>
		<guid isPermaLink="false">http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-574</guid>
		<description>@Neal

Hi Neal - those are good comments, and I agree. I guess you might say that in a slightly different way the whole food industry got packaging somewhat wrong (esp fast food) and that we're now seeing the effects and working to re-package.

A difference from the computational world is that, with certain notable exceptions, the people doing the packaging and using the packages are mainly pulling in the same direction. Sure, committees can screw anything up, but their hearts are usually in the right place. And certainly that's true of open source projects, and a competitive market pushes, in theory, towards better packaging. But when people are mainly trying to make a buck or are focused on the short term (next quarter's numbers, etc) then I guess mistakes and corrections in packaging should be expected.

I'll think about your comments in the context of computational systems more though. Certainly, I think, we've progressed in how we make APIs. The computational world is, at least in theory, more easily quantified. If you've got a better random number generator or compiler, you can either prove it or demonstrate it pretty effectively. So I think advancements there do get baked in. The fly in that ointment, as with lots of optimization, as you know, is that there are many trade-offs and nothing is really the best. So there's lots of wiggle room.

Anyway, thanks for the comments. Shouldn't you be writing that dissertation instead of inciting Esteve to riot? :-)   Good luck.</description>
		<content:encoded><![CDATA[<p>@Neal</p>
<p>Hi Neal - those are good comments, and I agree. I guess you might say that in a slightly different way the whole food industry got packaging somewhat wrong (esp fast food) and that we&#8217;re now seeing the effects and working to re-package.</p>
<p>A difference from the computational world is that, with certain notable exceptions, the people doing the packaging and using the packages are mainly pulling in the same direction. Sure, committees can screw anything up, but their hearts are usually in the right place. And certainly that&#8217;s true of open source projects, and a competitive market pushes, in theory, towards better packaging. But when people are mainly trying to make a buck or are focused on the short term (next quarter&#8217;s numbers, etc) then I guess mistakes and corrections in packaging should be expected.</p>
<p>I&#8217;ll think about your comments in the context of computational systems more though. Certainly, I think, we&#8217;ve progressed in how we make APIs. The computational world is, at least in theory, more easily quantified. If you&#8217;ve got a better random number generator or compiler, you can either prove it or demonstrate it pretty effectively. So I think advancements there do get baked in. The fly in that ointment, as with lots of optimization, as you know, is that there are many trade-offs and nothing is really the best. So there&#8217;s lots of wiggle room.</p>
<p>Anyway, thanks for the comments. Shouldn&#8217;t you be writing that dissertation instead of inciting Esteve to riot? :-)   Good luck.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Eu</title>
		<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-571</link>
		<dc:creator>Eu</dc:creator>
		<pubDate>Wed, 18 Jun 2008 17:18:47 +0000</pubDate>
		<guid isPermaLink="false">http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-571</guid>
		<description>I mostly agree with you Terry. But there is one small point, going to higher level some flexibility is always lost. I am usually happy with using high level functions and programs and do not bother about their internals but in very few cases I am not satisfied completely with what is offered for me and I have to write functions from ground, dig into deep implementation details, just to make something working exactly the way I want.</description>
		<content:encoded><![CDATA[<p>I mostly agree with you Terry. But there is one small point, going to higher level some flexibility is always lost. I am usually happy with using high level functions and programs and do not bother about their internals but in very few cases I am not satisfied completely with what is offered for me and I have to write functions from ground, dig into deep implementation details, just to make something working exactly the way I want.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: esteve</title>
		<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-570</link>
		<dc:creator>esteve</dc:creator>
		<pubDate>Wed, 18 Jun 2008 16:40:53 +0000</pubDate>
		<guid isPermaLink="false">http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-570</guid>
		<description>Just wanted to mention that the pay rise thing was a joke. As long as I keep having fun doing all these crazy things, I'm happy :-) Fun is one of the most important motivations that drive hackers.

Anyway, I'll take Neal's tip :-)</description>
		<content:encoded><![CDATA[<p>Just wanted to mention that the pay rise thing was a joke. As long as I keep having fun doing all these crazy things, I&#8217;m happy :-) Fun is one of the most important motivations that drive hackers.</p>
<p>Anyway, I&#8217;ll take Neal&#8217;s tip :-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Neal Richter</title>
		<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-569</link>
		<dc:creator>Neal Richter</dc:creator>
		<pubDate>Wed, 18 Jun 2008 16:23:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-569</guid>
		<description>Great post.  I've had these conversations myself, first from Esteve's shoes and now from yours.  Same conclusions.  My old boss sounds like Graham, everything should be done in old language/style X.

I think this is just a basic condition of mankind.  My father and I would have similar discussions about how to get a job done or if knowing how to change out the transmission in your car is important.

I'd add to this idea that there is a periodic resetting of this encapsulation where the old methods are re-examined and portions re-embraced.

Example:  Beer brewing.  From 1960 or so on, beer became an industrial homogenized product through massive brewing innovations and distribution.  Then about 1990 all these homebrewers start founding breweries and go back to the old methods of producing full flavored beer... and go digging around in Belgian monasteries for inspiration.  Now we have a wide variety of beer styles available again.

I think with software the difference is the cycle time is about 4 years max.  If a technology isn't recycled or parted-out within 4 years it will slowly rot away.

Esteve:  don't ask for a raise, ask for more equity!  At 25, you'll just waste the money, while you'll chase that equity till the job is done.</description>
		<content:encoded><![CDATA[<p>Great post.  I&#8217;ve had these conversations myself, first from Esteve&#8217;s shoes and now from yours.  Same conclusions.  My old boss sounds like Graham, everything should be done in old language/style X.</p>
<p>I think this is just a basic condition of mankind.  My father and I would have similar discussions about how to get a job done or if knowing how to change out the transmission in your car is important.</p>
<p>I&#8217;d add to this idea that there is a periodic resetting of this encapsulation where the old methods are re-examined and portions re-embraced.</p>
<p>Example:  Beer brewing.  From 1960 or so on, beer became an industrial homogenized product through massive brewing innovations and distribution.  Then about 1990 all these homebrewers start founding breweries and go back to the old methods of producing full flavored beer&#8230; and go digging around in Belgian monasteries for inspiration.  Now we have a wide variety of beer styles available again.</p>
<p>I think with software the difference is the cycle time is about 4 years max.  If a technology isn&#8217;t recycled or parted-out within 4 years it will slowly rot away.</p>
<p>Esteve:  don&#8217;t ask for a raise, ask for more equity!  At 25, you&#8217;ll just waste the money, while you&#8217;ll chase that equity till the job is done.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: terry</title>
		<link>http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-568</link>
		<dc:creator>terry</dc:creator>
		<pubDate>Wed, 18 Jun 2008 15:24:27 +0000</pubDate>
		<guid isPermaLink="false">http://www.fluidinfo.com/terry/2008/06/18/embracing-encapsulation/#comment-568</guid>
		<description>A PAYRISE?  How about another complimentary blog post?

I agree with what you've written. That's why I say that it's only rarely that the lower level skills are needed. Some things really need them, but lots don't. When we release our stuff the world will be one step closer to not needing that Boost, TBB work that you did. Then one day you can be a dinosaur too!  Can't wait :-)</description>
		<content:encoded><![CDATA[<p>A PAYRISE?  How about another complimentary blog post?</p>
<p>I agree with what you&#8217;ve written. That&#8217;s why I say that it&#8217;s only rarely that the lower level skills are needed. Some things really need them, but lots don&#8217;t. When we release our stuff the world will be one step closer to not needing that Boost, TBB work that you did. Then one day you can be a dinosaur too!  Can&#8217;t wait :-)</p>
]]></content:encoded>
	</item>
</channel>
</rss>
