<?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: Do you really need to know C?  I think so.</title>
	<atom:link href="http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/</link>
	<description>Thoughts on programming and other things</description>
	<lastBuildDate>Sun, 01 Aug 2010 13:17:26 -0700</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: To Learn C or Not &#124; Thought Clusters</title>
		<link>http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/comment-page-1/#comment-12034</link>
		<dc:creator>To Learn C or Not &#124; Thought Clusters</dc:creator>
		<pubDate>Fri, 14 Aug 2009 19:43:03 +0000</pubDate>
		<guid isPermaLink="false">http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/#comment-12034</guid>
		<description>[...] of the discussed topics on Coding Horror. One of the subjects that caught my attention (and others as well) was the fact that Jeff did not know the C language and didn&#8217;t feel that it was necessary, [...]</description>
		<content:encoded><![CDATA[<p>[...] of the discussed topics on Coding Horror. One of the subjects that caught my attention (and others as well) was the fact that Jeff did not know the C language and didn&#8217;t feel that it was necessary, [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anon</title>
		<link>http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/comment-page-1/#comment-7101</link>
		<dc:creator>Anon</dc:creator>
		<pubDate>Mon, 26 Jan 2009 22:43:53 +0000</pubDate>
		<guid isPermaLink="false">http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/#comment-7101</guid>
		<description>I&#039;ve seen some VBA in Excel written by C programmers, and all that elitism went right out the window. Sure, a C programmer will know all about the underpinnings of the system, but that doesn&#039;t mean they can convert business requirements into maintainable business software. Sure, that VBA code worked. But try and maintain a 1000 line, single VBA Sub() loaded with (code page) labels and GOTO statements.</description>
		<content:encoded><![CDATA[<p>I&#8217;ve seen some VBA in Excel written by C programmers, and all that elitism went right out the window. Sure, a C programmer will know all about the underpinnings of the system, but that doesn&#8217;t mean they can convert business requirements into maintainable business software. Sure, that VBA code worked. But try and maintain a 1000 line, single VBA Sub() loaded with (code page) labels and GOTO statements.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Daniel</title>
		<link>http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/comment-page-1/#comment-6667</link>
		<dc:creator>Daniel</dc:creator>
		<pubDate>Thu, 08 Jan 2009 14:46:37 +0000</pubDate>
		<guid isPermaLink="false">http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/#comment-6667</guid>
		<description>Guys, you don&#039;t need to know C. As long as you know assembler and how it relates to machine code, that&#039;s good enough. Or you could just know machine code, that&#039;s good enough too.

C it&#039;s just an easier way to acquire most of that knowledge. It&#039;s not that C syntax is particularly enlightening. It&#039;s not that C has advanced features. On the contrary, it&#039;s C&#039;s bareness that makes it ideal to ACQUIRING the knowledge.

C maps into assembler very directly. It abstracts CPU registers and stack-related stuff (stack pointer, frames, function call and return, etc). Thus, any non-trivial program you happen to write in it will teach a lot about how a computer works, which is the whole point.

Personally, I recommend writing a compacting program that uses the Lempel-Ziv-Welch algorithm, but a compiler will do nice too.

It&#039;s not that C will enlighten you. It&#039;s that writing a program os middling complexity in C will teach you how the computer works, and THAT will enlighten you.</description>
		<content:encoded><![CDATA[<p>Guys, you don&#8217;t need to know C. As long as you know assembler and how it relates to machine code, that&#8217;s good enough. Or you could just know machine code, that&#8217;s good enough too.</p>
<p>C it&#8217;s just an easier way to acquire most of that knowledge. It&#8217;s not that C syntax is particularly enlightening. It&#8217;s not that C has advanced features. On the contrary, it&#8217;s C&#8217;s bareness that makes it ideal to ACQUIRING the knowledge.</p>
<p>C maps into assembler very directly. It abstracts CPU registers and stack-related stuff (stack pointer, frames, function call and return, etc). Thus, any non-trivial program you happen to write in it will teach a lot about how a computer works, which is the whole point.</p>
<p>Personally, I recommend writing a compacting program that uses the Lempel-Ziv-Welch algorithm, but a compiler will do nice too.</p>
<p>It&#8217;s not that C will enlighten you. It&#8217;s that writing a program os middling complexity in C will teach you how the computer works, and THAT will enlighten you.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paul Fortin</title>
		<link>http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/comment-page-1/#comment-1161</link>
		<dc:creator>Paul Fortin</dc:creator>
		<pubDate>Mon, 04 Aug 2008 14:07:59 +0000</pubDate>
		<guid isPermaLink="false">http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/#comment-1161</guid>
		<description>ok so why should good programmer&#039;s then not know assembly language, after all pointers, memory management and thread/task handling can only really be done in assembly so if you want to really really know how the you need to know assembly.  

BTW I am on Joel&#039;s side of this argument even if I don&#039;t appear to be.  I have coded in &#039;C&#039; for the better part of 18 years realtime military systems and have several million lines of code in operations now.  But my language of choice now is Java and I do understand the inner workings and sometimes this is helpful.  I am not saying that it is completely necessary but I usually can explain to others why their code does not work.

Paul/</description>
		<content:encoded><![CDATA[<p>ok so why should good programmer&#8217;s then not know assembly language, after all pointers, memory management and thread/task handling can only really be done in assembly so if you want to really really know how the you need to know assembly.  </p>
<p>BTW I am on Joel&#8217;s side of this argument even if I don&#8217;t appear to be.  I have coded in &#8216;C&#8217; for the better part of 18 years realtime military systems and have several million lines of code in operations now.  But my language of choice now is Java and I do understand the inner workings and sometimes this is helpful.  I am not saying that it is completely necessary but I usually can explain to others why their code does not work.</p>
<p>Paul/</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Akiba</title>
		<link>http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/comment-page-1/#comment-655</link>
		<dc:creator>Akiba</dc:creator>
		<pubDate>Mon, 30 Jun 2008 10:17:56 +0000</pubDate>
		<guid isPermaLink="false">http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/#comment-655</guid>
		<description>I won&#039;t take a side on this debate, but I come from a background of programming on memory constrained devices (ie: embedded systems). On PC and distributed computing projects, you may not need to know C since Java and C# seem to work well and take care of a lot of the mysterious details. But when I see people talking about programming embedded systems in Java, I can only laugh.

By the way, my open source Zigbee stack, which is similar to a TCP/IP stack, is currently 30kB. I&#039;d like to see a Java or C# programmer pull that one off. Ha ha ha...</description>
		<content:encoded><![CDATA[<p>I won&#8217;t take a side on this debate, but I come from a background of programming on memory constrained devices (ie: embedded systems). On PC and distributed computing projects, you may not need to know C since Java and C# seem to work well and take care of a lot of the mysterious details. But when I see people talking about programming embedded systems in Java, I can only laugh.</p>
<p>By the way, my open source Zigbee stack, which is similar to a TCP/IP stack, is currently 30kB. I&#8217;d like to see a Java or C# programmer pull that one off. Ha ha ha&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jax</title>
		<link>http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/comment-page-1/#comment-526</link>
		<dc:creator>Jax</dc:creator>
		<pubDate>Thu, 05 Jun 2008 13:14:08 +0000</pubDate>
		<guid isPermaLink="false">http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/#comment-526</guid>
		<description>I don&#039;t know any C but I do know how the GC works and I also understand thread safety very well.
I have 6 years experience with .NET. Does this mean I still need to learn C or can I just learn the inner workings of my platform better (the CLR) as I have done?</description>
		<content:encoded><![CDATA[<p>I don&#8217;t know any C but I do know how the GC works and I also understand thread safety very well.<br />
I have 6 years experience with .NET. Does this mean I still need to learn C or can I just learn the inner workings of my platform better (the CLR) as I have done?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Lyndar</title>
		<link>http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/comment-page-1/#comment-497</link>
		<dc:creator>Lyndar</dc:creator>
		<pubDate>Thu, 29 May 2008 00:48:09 +0000</pubDate>
		<guid isPermaLink="false">http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/#comment-497</guid>
		<description>As with any other subjective comment on software languages, there is no absolute answer.

Is C a magic language? No.

Can C teach me lessons that no other programming language can teach me? No.

Does C teach certain programming lessons that some other languages do not? Yes.

Are a lot of programs written in C? Yes.

Does use of C promote awareness of some programming issues, such as memory management? Yes.

Is any of this relevant to all programmers in all situations? No.

It would be nice to have absolute knowledge of precisely what happens in the machine, but honestly this requires an absolutely ridiculous amount of effort.  Think about it - start with your favorite high level language, then through potential intermediate levels to assembler, to machine code.  Oh, what about the OS.  And the hardware level, what instructions does the CPU handle, how are they pipelined?  Does your app touch TCP/IP?  How solid is your knowledge of the TCP/IP stack?  Does your app send email? Make use of FTP? Use printers? Encryption? 

Personally, I feel that programming is all about choosing the best level of abstraction.  If for the purposes of writing program A, you don&#039;t need to know about anything beneath a certain level, then don&#039;t worry about it.  If for performance reasons or other reasons it becomes important to make use of C, then by all means do so.  &#039;Complete&#039; knowledge in the literal sense, however, is not only irrelevant but impossible.</description>
		<content:encoded><![CDATA[<p>As with any other subjective comment on software languages, there is no absolute answer.</p>
<p>Is C a magic language? No.</p>
<p>Can C teach me lessons that no other programming language can teach me? No.</p>
<p>Does C teach certain programming lessons that some other languages do not? Yes.</p>
<p>Are a lot of programs written in C? Yes.</p>
<p>Does use of C promote awareness of some programming issues, such as memory management? Yes.</p>
<p>Is any of this relevant to all programmers in all situations? No.</p>
<p>It would be nice to have absolute knowledge of precisely what happens in the machine, but honestly this requires an absolutely ridiculous amount of effort.  Think about it &#8211; start with your favorite high level language, then through potential intermediate levels to assembler, to machine code.  Oh, what about the OS.  And the hardware level, what instructions does the CPU handle, how are they pipelined?  Does your app touch TCP/IP?  How solid is your knowledge of the TCP/IP stack?  Does your app send email? Make use of FTP? Use printers? Encryption? </p>
<p>Personally, I feel that programming is all about choosing the best level of abstraction.  If for the purposes of writing program A, you don&#8217;t need to know about anything beneath a certain level, then don&#8217;t worry about it.  If for performance reasons or other reasons it becomes important to make use of C, then by all means do so.  &#8216;Complete&#8217; knowledge in the literal sense, however, is not only irrelevant but impossible.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: G. Lynne</title>
		<link>http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/comment-page-1/#comment-485</link>
		<dc:creator>G. Lynne</dc:creator>
		<pubDate>Tue, 27 May 2008 00:37:58 +0000</pubDate>
		<guid isPermaLink="false">http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/#comment-485</guid>
		<description>The following excerpt from:
  http://rute.2038bug.com/node25.html.gz
reflects my own opinion quite nicely.
----
C was invented for the purpose of writing an operating system that could be recompiled (ported) to different hardware platforms (different CPUs). Because the operating system is written in C, this language is the first choice for writing any kind of application that has to communicate efficiently with the operating system.

Many people who don&#039;t program very well in C think of C as an arbitrary language out of many. This point should be made at once: C is the fundamental basis of all computing in the world today. UNIX, Microsoft Windows, office suites, web browsers and device drivers are all written in C. Ninety-nine percent of your time spent at a computer is probably spent using an application written in C. About 70% of all ``open source&#039;&#039; software is written in C, and the remaining 30% written in languages whose compilers or interpreters are written in C. [C++ is also quite popular. It is, however, not as fundamental to computing, although it is more suitable in many situations.]

Further, there is no replacement for C. Since it fulfills its purpose almost flawlessly, there will never be a need to replace it. Other languages may fulfill other purposes, but C fulfills its purpose most adequately. For instance, all future operating systems will probably be written in C for a long time to come.

It is for these reasons that your knowledge of UNIX will never be complete until you can program in C. On the other hand, just because you can program in C does not mean that you should. Good C programming is a fine art which many veteran C programmers never manage to master, even after many years. It is essential to join a Free software project to properly master an effective style of C development.</description>
		<content:encoded><![CDATA[<p>The following excerpt from:<br />
  <a href="http://rute.2038bug.com/node25.html.gz" rel="nofollow">http://rute.2038bug.com/node25.html.gz</a><br />
reflects my own opinion quite nicely.<br />
&#8212;-<br />
C was invented for the purpose of writing an operating system that could be recompiled (ported) to different hardware platforms (different CPUs). Because the operating system is written in C, this language is the first choice for writing any kind of application that has to communicate efficiently with the operating system.</p>
<p>Many people who don&#8217;t program very well in C think of C as an arbitrary language out of many. This point should be made at once: C is the fundamental basis of all computing in the world today. UNIX, Microsoft Windows, office suites, web browsers and device drivers are all written in C. Ninety-nine percent of your time spent at a computer is probably spent using an application written in C. About 70% of all &#8220;open source&#8221; software is written in C, and the remaining 30% written in languages whose compilers or interpreters are written in C. [C++ is also quite popular. It is, however, not as fundamental to computing, although it is more suitable in many situations.]</p>
<p>Further, there is no replacement for C. Since it fulfills its purpose almost flawlessly, there will never be a need to replace it. Other languages may fulfill other purposes, but C fulfills its purpose most adequately. For instance, all future operating systems will probably be written in C for a long time to come.</p>
<p>It is for these reasons that your knowledge of UNIX will never be complete until you can program in C. On the other hand, just because you can program in C does not mean that you should. Good C programming is a fine art which many veteran C programmers never manage to master, even after many years. It is essential to join a Free software project to properly master an effective style of C development.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michael</title>
		<link>http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/comment-page-1/#comment-483</link>
		<dc:creator>Michael</dc:creator>
		<pubDate>Mon, 26 May 2008 05:57:45 +0000</pubDate>
		<guid isPermaLink="false">http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/#comment-483</guid>
		<description>I think at whatever level of programming you are working at...you need to understand possibly one to two levels underneath.  That has nothing to do with C per say, it&#039;s just that at the current level of modern garbage collecting, managed code systems, it is somewhat advantageous to understand what&#039;s going on in the level below you.  I&#039;m sure 30 years ago, people had discussions that C programmers really needed to know assembly or be able to read machine code in order be truly &quot;good&quot;.  And I think 20 years from now when programming involves dragging around symbolic constructs on environments that auto-gen your code, &quot;developers&quot; will say that to be good, you actually have to be able to read and write &quot;code&quot;.</description>
		<content:encoded><![CDATA[<p>I think at whatever level of programming you are working at&#8230;you need to understand possibly one to two levels underneath.  That has nothing to do with C per say, it&#8217;s just that at the current level of modern garbage collecting, managed code systems, it is somewhat advantageous to understand what&#8217;s going on in the level below you.  I&#8217;m sure 30 years ago, people had discussions that C programmers really needed to know assembly or be able to read machine code in order be truly &#8220;good&#8221;.  And I think 20 years from now when programming involves dragging around symbolic constructs on environments that auto-gen your code, &#8220;developers&#8221; will say that to be good, you actually have to be able to read and write &#8220;code&#8221;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tom Clarkson</title>
		<link>http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/comment-page-1/#comment-478</link>
		<dc:creator>Tom Clarkson</dc:creator>
		<pubDate>Sun, 25 May 2008 04:07:42 +0000</pubDate>
		<guid isPermaLink="false">http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/#comment-478</guid>
		<description>It used to be necessary, now it&#039;s useful enough to have people argue that it is necessary, and in future it won&#039;t mean much at all.

http://www.tqcblog.com/archive/2008/05/24/i-know-c-and-it-doesnt-matter.aspx</description>
		<content:encoded><![CDATA[<p>It used to be necessary, now it&#8217;s useful enough to have people argue that it is necessary, and in future it won&#8217;t mean much at all.</p>
<p><a href="http://www.tqcblog.com/archive/2008/05/24/i-know-c-and-it-doesnt-matter.aspx" rel="nofollow">http://www.tqcblog.com/archive/2008/05/24/i-know-c-and-it-doesnt-matter.aspx</a></p>
]]></content:encoded>
	</item>
</channel>
</rss>
