<?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: Abstraction Is For Both Humans And Software, But Not Software</title>
	<atom:link href="http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/</link>
	<description>Ideas for building efficient developers and software</description>
	<lastBuildDate>Fri, 12 Mar 2010 12:19:55 +0000</lastBuildDate>
	
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
	<item>
		<title>By: Steve</title>
		<link>http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/#comment-2869</link>
		<dc:creator>Steve</dc:creator>
		<pubDate>Tue, 14 Oct 2008 15:14:53 +0000</pubDate>
		<guid isPermaLink="false">http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/#comment-2869</guid>
		<description>Some of the best books I&#039;ve come across on this very subject are the &quot;Writing High Level, Thinking Low Level&quot; series. They basically disect this very topic. 

It never ceases to amaze me how many &quot;expert-level&quot; programmers never consider the effect that optimzing compilers may have on their code. There are many ways of writing high level logic that make it easier on compilers to squeeze out every drop of performance. Without the lower level knowledge, one is blind to such issues.

The question I continually hear when this subject comes up is, &quot;Isn&#039;t better to write correct code than performant code?&quot; Well, the answer is, of course, it&#039;s important to do both.</description>
		<content:encoded><![CDATA[<p>Some of the best books I&#8217;ve come across on this very subject are the &#8220;Writing High Level, Thinking Low Level&#8221; series. They basically disect this very topic. </p>
<p>It never ceases to amaze me how many &#8220;expert-level&#8221; programmers never consider the effect that optimzing compilers may have on their code. There are many ways of writing high level logic that make it easier on compilers to squeeze out every drop of performance. Without the lower level knowledge, one is blind to such issues.</p>
<p>The question I continually hear when this subject comes up is, &#8220;Isn&#8217;t better to write correct code than performant code?&#8221; Well, the answer is, of course, it&#8217;s important to do both.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sam</title>
		<link>http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/#comment-2861</link>
		<dc:creator>Sam</dc:creator>
		<pubDate>Fri, 03 Oct 2008 22:02:16 +0000</pubDate>
		<guid isPermaLink="false">http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/#comment-2861</guid>
		<description>I agree and disagree with the author.  I&#039;m one of those programmers who only knows bits and pieces of how the machine works and does understand some of the basics of HTTP (I do know the most of the error codes SUCK!)

First off, companies do not invest in their employees! I have met SO many computer science majors who are not working in a computer related field.  Why?  Some decided to do something else.

Most just never found that rogue developer group job I did.  In that group, the boss knew we spent half of our time learning and trying different things.  Why don&#039;t most companies insist their employees spend 2 to three hours a week learning something new and reporting back on what they learned?  I have lit a fire under my own ass and learned what I need to know and even things in computer science that are interesting to know (I&#039;ve started working through a book on Assembler).

Quality software DOES not necessarily get built by those who know the machine like the back of their left hand.  I&#039;ve seen it more than once.  I know a guy who is fluent in C++ and wrote hardware drivers for Microsoft, but would introduce a bug into nearly every patch build I tested when I was still in QA!  He understood all the concepts, but when he sits down to code he does not TEST!!! Why don&#039;t developers test?  Lots of reasons, including our overly accelerated market place, but some of them are developers fault.  When I&#039;m programming, I always test my stuff.  And you know what?  When I do that, it WORKS!  I love the TDD revolution.  It is not a cure-all, but developers should fully embrace it as an essential part of building software.

We should know the basics of the machine and the software stack we stand upon.  I am attempting to correct that fact about myself.  It&#039;s slow going, but I find it very interesting.  However, just knowing that will not fix software.  We need to TEST our code and our SOFTWARE (QA engineers unite!) with both automation AND manual verification.  And the industry needs to embrace these things as necessary parts of the SDLC.

Regards,
Sam</description>
		<content:encoded><![CDATA[<p>I agree and disagree with the author.  I&#8217;m one of those programmers who only knows bits and pieces of how the machine works and does understand some of the basics of HTTP (I do know the most of the error codes SUCK!)</p>
<p>First off, companies do not invest in their employees! I have met SO many computer science majors who are not working in a computer related field.  Why?  Some decided to do something else.</p>
<p>Most just never found that rogue developer group job I did.  In that group, the boss knew we spent half of our time learning and trying different things.  Why don&#8217;t most companies insist their employees spend 2 to three hours a week learning something new and reporting back on what they learned?  I have lit a fire under my own ass and learned what I need to know and even things in computer science that are interesting to know (I&#8217;ve started working through a book on Assembler).</p>
<p>Quality software DOES not necessarily get built by those who know the machine like the back of their left hand.  I&#8217;ve seen it more than once.  I know a guy who is fluent in C++ and wrote hardware drivers for Microsoft, but would introduce a bug into nearly every patch build I tested when I was still in QA!  He understood all the concepts, but when he sits down to code he does not TEST!!! Why don&#8217;t developers test?  Lots of reasons, including our overly accelerated market place, but some of them are developers fault.  When I&#8217;m programming, I always test my stuff.  And you know what?  When I do that, it WORKS!  I love the TDD revolution.  It is not a cure-all, but developers should fully embrace it as an essential part of building software.</p>
<p>We should know the basics of the machine and the software stack we stand upon.  I am attempting to correct that fact about myself.  It&#8217;s slow going, but I find it very interesting.  However, just knowing that will not fix software.  We need to TEST our code and our SOFTWARE (QA engineers unite!) with both automation AND manual verification.  And the industry needs to embrace these things as necessary parts of the SDLC.</p>
<p>Regards,<br />
Sam</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tobi</title>
		<link>http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/#comment-2858</link>
		<dc:creator>Tobi</dc:creator>
		<pubDate>Wed, 01 Oct 2008 11:37:19 +0000</pubDate>
		<guid isPermaLink="false">http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/#comment-2858</guid>
		<description>Who frankly cares about basic, c or c++? seriously, who even cares about pointers? a good programmer needs to have to know where the objects or data &quot;live&quot;. but appart from that there is more performance to be gained by understanding parallelism than pointers or deeper cpu archs. because on average the compiler usually is way smarter when it comes to CPU optimizations like pointers, etc. what the compiler can not do is finding effective parallelism (yet?) and effective algorithms. But that&#039;s true in any language.

And &quot;best programmer&quot; is highly subjective. personally, i&#039;d rather hire a programmer who knows how to program DEFENSIVE code and with respect to multiple threads than one who knows the last optimizations on single core machines. And the fun part is: Doing &quot;parallel&quot; right requires more knowledge of algorithms. Simply because parallel algorithms are a superset of linear ones.

So to sum up, I don&#039;t know if it is correct to deduce little knowledge about algorithms from any kind of programming language preference or knowledge about CPUs and pointers. ;) And from my point of view a defensive programmer who knows about multithreading is better suited for the future. Because the future simply won&#039;t be about single core optimizations.</description>
		<content:encoded><![CDATA[<p>Who frankly cares about basic, c or c++? seriously, who even cares about pointers? a good programmer needs to have to know where the objects or data &#8220;live&#8221;. but appart from that there is more performance to be gained by understanding parallelism than pointers or deeper cpu archs. because on average the compiler usually is way smarter when it comes to CPU optimizations like pointers, etc. what the compiler can not do is finding effective parallelism (yet?) and effective algorithms. But that&#8217;s true in any language.</p>
<p>And &#8220;best programmer&#8221; is highly subjective. personally, i&#8217;d rather hire a programmer who knows how to program DEFENSIVE code and with respect to multiple threads than one who knows the last optimizations on single core machines. And the fun part is: Doing &#8220;parallel&#8221; right requires more knowledge of algorithms. Simply because parallel algorithms are a superset of linear ones.</p>
<p>So to sum up, I don&#8217;t know if it is correct to deduce little knowledge about algorithms from any kind of programming language preference or knowledge about CPUs and pointers. ;) And from my point of view a defensive programmer who knows about multithreading is better suited for the future. Because the future simply won&#8217;t be about single core optimizations.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Mackenzie</title>
		<link>http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/#comment-2849</link>
		<dc:creator>Scott Mackenzie</dc:creator>
		<pubDate>Tue, 30 Sep 2008 00:29:32 +0000</pubDate>
		<guid isPermaLink="false">http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/#comment-2849</guid>
		<description>I agree completely!

Developers need to have a basic understanding of how a computer functions in order to design efficient algorithms.

In the past I have had to explain that computers like NUMBERS and not TEXT to these type of developers.

Anyone with a fundamental understanding of a computer knows &quot;Numbers are more efficient because it&#039;s less bits across the bus&quot;.

Just as a mechanic needs to know how an engine fundamentally works to fix it, but they DON&#039;T need to know how to design an engine.

A developer needs to know how a computer fundamentally works to program it, but they DON&#039;T need to know how to design computer hardware.</description>
		<content:encoded><![CDATA[<p>I agree completely!</p>
<p>Developers need to have a basic understanding of how a computer functions in order to design efficient algorithms.</p>
<p>In the past I have had to explain that computers like NUMBERS and not TEXT to these type of developers.</p>
<p>Anyone with a fundamental understanding of a computer knows &#8220;Numbers are more efficient because it&#8217;s less bits across the bus&#8221;.</p>
<p>Just as a mechanic needs to know how an engine fundamentally works to fix it, but they DON&#8217;T need to know how to design an engine.</p>
<p>A developer needs to know how a computer fundamentally works to program it, but they DON&#8217;T need to know how to design computer hardware.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Arjan`s World &#187; LINKBLOG for September 29, 2008</title>
		<link>http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/#comment-2848</link>
		<dc:creator>Arjan`s World &#187; LINKBLOG for September 29, 2008</dc:creator>
		<pubDate>Mon, 29 Sep 2008 19:34:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/#comment-2848</guid>
		<description>[...] Abstraction Is For Both Humans And Software, But Not Software - Max Pool &#8216; It is funny how software engineers always tend to simplify problems with one additional level of abstraction; that is, the answer always lays in the next tier of thinking &#8216; [...]</description>
		<content:encoded><![CDATA[<p>[...] Abstraction Is For Both Humans And Software, But Not Software &#8211; Max Pool &#8216; It is funny how software engineers always tend to simplify problems with one additional level of abstraction; that is, the answer always lays in the next tier of thinking &#8216; [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Max Pool</title>
		<link>http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/#comment-2846</link>
		<dc:creator>Max Pool</dc:creator>
		<pubDate>Mon, 29 Sep 2008 13:29:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/#comment-2846</guid>
		<description>@Mihai @Corey - 

My intent was not to suggest that everyone needs to know everything about everything, as that would just be foolish.  But I would suggest that we as developers need to know at least high level details of what we are working with.

I do not think it to be unreasonable to want a new hire candidate to understand the basics of HTTP requests, even though it maybe abstracted away in some web framework.  Likewise, I do not need them to know every detail of the hardware that they use, but the answer &quot;I have no clue&quot; when asked how a CPU works is unacceptable as we don&#039;t develop on magical glowing boxes.

I am not suggesting the bar needs to low, but I am suggesting it shouldn&#039;t be high enough to walk under.</description>
		<content:encoded><![CDATA[<p>@Mihai @Corey &#8211; </p>
<p>My intent was not to suggest that everyone needs to know everything about everything, as that would just be foolish.  But I would suggest that we as developers need to know at least high level details of what we are working with.</p>
<p>I do not think it to be unreasonable to want a new hire candidate to understand the basics of HTTP requests, even though it maybe abstracted away in some web framework.  Likewise, I do not need them to know every detail of the hardware that they use, but the answer &#8220;I have no clue&#8221; when asked how a CPU works is unacceptable as we don&#8217;t develop on magical glowing boxes.</p>
<p>I am not suggesting the bar needs to low, but I am suggesting it shouldn&#8217;t be high enough to walk under.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Corey Minyard</title>
		<link>http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/#comment-2845</link>
		<dc:creator>Corey Minyard</dc:creator>
		<pubDate>Mon, 29 Sep 2008 13:17:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/#comment-2845</guid>
		<description>A few comments on this...

First, registers are not an abstraction.  If anything, they make life more difficult.  They improve performance by reducing instruction size and holding data that will soon be used in higher speed storage.  They don&#039;t really abstract anything.  It would be much easier to program in assembly if you could just directly refer to memory locations.

Second, do you *really* understand how your CPU works?  Do you understand how it takes apart instructions and schedules the use of processing units, often out of order?  Do you understand how cache architectures works?  Do you understand how synchronization instructions interact on the memory bus on an SMP system?  Do you understand how interrupts are routed to processors on an SMP system?

You may understand these things, but very very few software people do.  I have to know about them since I work inside a kernel, but the really low level details belong to compiler writers and processor designers.  The &quot;CPU&quot; as most software people know it is an abstraction on top of something quite different.

Third, I don&#039;t see what algorithmic analysis has to do with languages.  You can do algorithmic analysis in any language.

As far as your premise, I used to think that way also, but I&#039;m no longer so sure.  Perhaps understanding the details a level down from where you work is useful, but if you go to far you will be buried in too many details.

I *do* think that teaching and doing algorithmic analysis is a good thing because of how it trains your brain to think.  You may forget how a quicksort works, but the training that went into understanding it stays with you.  And knowing the various tradeoffs of tools you choose is probably a useful thing, too.  But understanding how superscalar architectures work is probably not useful to the average software designer.</description>
		<content:encoded><![CDATA[<p>A few comments on this&#8230;</p>
<p>First, registers are not an abstraction.  If anything, they make life more difficult.  They improve performance by reducing instruction size and holding data that will soon be used in higher speed storage.  They don&#8217;t really abstract anything.  It would be much easier to program in assembly if you could just directly refer to memory locations.</p>
<p>Second, do you *really* understand how your CPU works?  Do you understand how it takes apart instructions and schedules the use of processing units, often out of order?  Do you understand how cache architectures works?  Do you understand how synchronization instructions interact on the memory bus on an SMP system?  Do you understand how interrupts are routed to processors on an SMP system?</p>
<p>You may understand these things, but very very few software people do.  I have to know about them since I work inside a kernel, but the really low level details belong to compiler writers and processor designers.  The &#8220;CPU&#8221; as most software people know it is an abstraction on top of something quite different.</p>
<p>Third, I don&#8217;t see what algorithmic analysis has to do with languages.  You can do algorithmic analysis in any language.</p>
<p>As far as your premise, I used to think that way also, but I&#8217;m no longer so sure.  Perhaps understanding the details a level down from where you work is useful, but if you go to far you will be buried in too many details.</p>
<p>I *do* think that teaching and doing algorithmic analysis is a good thing because of how it trains your brain to think.  You may forget how a quicksort works, but the training that went into understanding it stays with you.  And knowing the various tradeoffs of tools you choose is probably a useful thing, too.  But understanding how superscalar architectures work is probably not useful to the average software designer.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mihai</title>
		<link>http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/#comment-2844</link>
		<dc:creator>Mihai</dc:creator>
		<pubDate>Mon, 29 Sep 2008 13:05:26 +0000</pubDate>
		<guid isPermaLink="false">http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/#comment-2844</guid>
		<description>You&#039;ve kind of dropped the bar way low here. 
You&#039;re saying that someone should think about the molecules. :-o WTF. Of course we won&#039;t. And we&#039;re not going to test the acid levels on every piece of fruit.
And I&#039;m not going to think about how every electron flows through the circuits of my computer, it would just be stupid :). N&#039;or do I think of the I/O reads my computer does to read a simple file.
But I do get your point. It&#039;s scary to think that in a couple of years you&#039;ll be talking with someone that comes in for an interview and he&#039;ll say pointer-who ? Or Merge-what ?

Also there is a shift toward web based apps and people won&#039;t care about how the CPU works they&#039;ll be happy knowing how to do their job. And you&#039;ll be thankful when someone that knows the basic of HTTP ;)</description>
		<content:encoded><![CDATA[<p>You&#8217;ve kind of dropped the bar way low here.<br />
You&#8217;re saying that someone should think about the molecules. :-o WTF. Of course we won&#8217;t. And we&#8217;re not going to test the acid levels on every piece of fruit.<br />
And I&#8217;m not going to think about how every electron flows through the circuits of my computer, it would just be stupid :). N&#8217;or do I think of the I/O reads my computer does to read a simple file.<br />
But I do get your point. It&#8217;s scary to think that in a couple of years you&#8217;ll be talking with someone that comes in for an interview and he&#8217;ll say pointer-who ? Or Merge-what ?</p>
<p>Also there is a shift toward web based apps and people won&#8217;t care about how the CPU works they&#8217;ll be happy knowing how to do their job. And you&#8217;ll be thankful when someone that knows the basic of HTTP ;)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mike</title>
		<link>http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/#comment-2843</link>
		<dc:creator>Mike</dc:creator>
		<pubDate>Mon, 29 Sep 2008 12:48:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/#comment-2843</guid>
		<description>Look no further than Google Chrome for an example in how understanding the underlying levels of abstraction can give you an edge in software development. They sat down an tweaked their code for the precise environment it is running in, and managed to deliver a browser that loads pages twice as fast as Firefox.

It&#039;s great to have all the modules and such that the extra layers of abstraction provide in Firefox, but it is no competition against a simple browser that is as fast as lightning.</description>
		<content:encoded><![CDATA[<p>Look no further than Google Chrome for an example in how understanding the underlying levels of abstraction can give you an edge in software development. They sat down an tweaked their code for the precise environment it is running in, and managed to deliver a browser that loads pages twice as fast as Firefox.</p>
<p>It&#8217;s great to have all the modules and such that the extra layers of abstraction provide in Firefox, but it is no competition against a simple browser that is as fast as lightning.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dew Drop &#8211; September 29, 2008 &#124; Alvin Ashcraft's Morning Dew</title>
		<link>http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/#comment-2842</link>
		<dc:creator>Dew Drop &#8211; September 29, 2008 &#124; Alvin Ashcraft's Morning Dew</dc:creator>
		<pubDate>Mon, 29 Sep 2008 12:20:50 +0000</pubDate>
		<guid isPermaLink="false">http://www.codesqueeze.com/abstraction-is-for-both-humans-and-software-but-not-software/#comment-2842</guid>
		<description>[...] Abstraction Is For Both Humans and Software, but Not Software (Max Pool) [...]</description>
		<content:encoded><![CDATA[<p>[...] Abstraction Is For Both Humans and Software, but Not Software (Max Pool) [...]</p>
]]></content:encoded>
	</item>
</channel>
</rss>
