<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Four Key Concepts of Computer Programming</title><link>http://blogs.msdn.com/b/alfredth/archive/2010/12/08/four-key-concepts-of-computer-programming.aspx</link><description>Last week Rob Miles who is taller than I am, has more hair than I do and has an English accent all of which indicate he is probably a lot smarter than I am left a comment on one of my posts that lists his idea of the four key concepts in programming.</description><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>re: Four Key Concepts of Computer Programming</title><link>http://blogs.msdn.com/b/alfredth/archive/2010/12/08/four-key-concepts-of-computer-programming.aspx#10104689</link><pubDate>Tue, 14 Dec 2010 14:13:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10104689</guid><dc:creator>Jeremy Cole</dc:creator><description>&lt;p&gt;Rob Miles is someone I&amp;#39;ve looked up to (literally) since he was a couple of years ahead of me at University. &lt;/p&gt;
&lt;p&gt;I think that the first programming language that one should introduce people to should be the native language of the person being taught. Teach people to marshall their thoughts and to write down clear instructions. Teach them to plan meal menu / recipes, write route for walkers, guide blindfolded people around rooms, etc. Teach them to write essays - that will introduce them to reasearching concepts and problem domains, decomposition of ideas, structure, flow, and clarity of reasoning. Only when they have learnt to think logically and clearly and to be able to communicate is it rational to even consider straight-jacketting them in computer languages of any kind. Computer Languages are like Newspeak in 1984 - designed to reduce the types of things that you can think about, not to release the imagination. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10104689" width="1" height="1"&gt;</description></item><item><title>re: Four Key Concepts of Computer Programming</title><link>http://blogs.msdn.com/b/alfredth/archive/2010/12/08/four-key-concepts-of-computer-programming.aspx#10103359</link><pubDate>Fri, 10 Dec 2010 19:13:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10103359</guid><dc:creator>Mike Hatfield</dc:creator><description>&lt;p&gt;Maybe flow charts are useful, but they are mainly critical to imperative paradigms. Functional paradigms might best use flow charts to communicate dependencies, which might not be so important in a massively parallel environment or any other where Time (and sequencing) is not the most important consideration. &lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10103359" width="1" height="1"&gt;</description></item><item><title>re: Four Key Concepts of Computer Programming</title><link>http://blogs.msdn.com/b/alfredth/archive/2010/12/08/four-key-concepts-of-computer-programming.aspx#10103044</link><pubDate>Fri, 10 Dec 2010 06:14:48 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10103044</guid><dc:creator>muralidharan</dc:creator><description>&lt;p&gt;ya it looks nice. But actual programing paradigm itself needs its basic &amp;nbsp; &amp;nbsp; definition.And flow chart diagram.It only explains how &amp;nbsp;loops ,conditions,expressions and other flow of program works in sequence.&lt;/p&gt;
&lt;p&gt;When one wants to solve a problem.One should create an abstract explaining the actual behavior &amp;nbsp;and working of the program. then explaining the algorithm with flow chart.Then only one can ever start programming.This applies to all languages and program paradigms.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10103044" width="1" height="1"&gt;</description></item><item><title>re: Four Key Concepts of Computer Programming</title><link>http://blogs.msdn.com/b/alfredth/archive/2010/12/08/four-key-concepts-of-computer-programming.aspx#10103035</link><pubDate>Fri, 10 Dec 2010 05:59:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10103035</guid><dc:creator>subu</dc:creator><description>&lt;p&gt;The skilled programmers does not required the advanced concepts.May be it help in writing code much easier, modular and quicker&lt;/p&gt;
&lt;p&gt;It is sufficient to have these four basic concept understanding to write any code.I/O is again help in making things easier to display and feed the values.&lt;/p&gt;
&lt;p&gt;Even recursion is advanced concept,which helps in easier implementation.But the programmer with little intelligence and skill can break down the problem in such a way ,so that advanced concept are not necessary for computation. &lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10103035" width="1" height="1"&gt;</description></item><item><title>re: Four Key Concepts of Computer Programming</title><link>http://blogs.msdn.com/b/alfredth/archive/2010/12/08/four-key-concepts-of-computer-programming.aspx#10102912</link><pubDate>Thu, 09 Dec 2010 22:52:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10102912</guid><dc:creator>Mike Hatfield</dc:creator><description>&lt;p&gt;There is a critical assumption underlying this entire thread. We are programming CPUs. These &amp;quot;Key Concepts&amp;quot; only apply to the hardware we are programming. Owen M hit the target with a glancing blow.&lt;/p&gt;
&lt;p&gt;The hardware, no matter how wonderful is seems to us, is NOT the way that the universe around us works. Described in the language of Mathematics, that universe is operating less like a CPU and more like a set of rules. Since this is a discussion about educational approaches, I think it&amp;#39;s important to understand the framework in which we work.&lt;/p&gt;
&lt;p&gt;I tore into Apple II owner&amp;#39;s manual (complete with circuit diagram and 6502 instruction set) at the same age my daughter is now. And we are still trapped in the simplistic view of computing that existed then. I wasted no time building a web of assigns, decides, loops and indexes. But my girl has the benefit of greater technology. She has an EASIER time solving problems with GHCi than with JS or LOGO. It&amp;#39;s always a good time to remember the origins of CS.&lt;/p&gt;
&lt;p&gt;The aforementioned universe, which we often try to mimic with these Key Concepts, whirrs along. In a few decades, I really think we&amp;#39;ll be programming a different kind of hardware. Megahertz will yield to mega-core, which will then yield to some other measure. Will today&amp;#39;s students be ready? Does a positronic brain, a PAL-web or a [insert name here] have an instruction set? No, but the language of Mathematics will eventually return to prominence.&lt;/p&gt;
&lt;p&gt;Teaching variable assignment, if-then and loop structures is easy (given students with certain traits). And that is why we make them Key Concepts. And it has been easy to make machines that perform these tasks. Steps 0 and 00, “Understand the Problem” and “Express the Solution” are the Key Concepts in any discipline. And “let x = x + 1” doesn&amp;#39;t make any sense in the real world.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10102912" width="1" height="1"&gt;</description></item><item><title>re: Four Key Concepts of Computer Programming</title><link>http://blogs.msdn.com/b/alfredth/archive/2010/12/08/four-key-concepts-of-computer-programming.aspx#10102837</link><pubDate>Thu, 09 Dec 2010 20:08:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10102837</guid><dc:creator>Steve Alexander</dc:creator><description>&lt;p&gt;While I agree that most everything can probably be categorized somewhere under these 4 broad categories, I also think that &amp;nbsp;the generalization leaves open the possibilities of large holes. When generalizations are used instead of details to specify completeness, there is a huge potential for incompleteness. I have interviewed &amp;quot;experienced&amp;quot; programmers who have learned all four of these concepts and done a lot of programming, but can&amp;#39;t debug a problem because they don&amp;#39;t understand memory models and stack frames. The devil is in the details.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10102837" width="1" height="1"&gt;</description></item><item><title>re: Four Key Concepts of Computer Programming</title><link>http://blogs.msdn.com/b/alfredth/archive/2010/12/08/four-key-concepts-of-computer-programming.aspx#10102831</link><pubDate>Thu, 09 Dec 2010 19:53:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10102831</guid><dc:creator>Mateusz</dc:creator><description>&lt;p&gt;These four concepts are key concepts, and really everything else is just higher level of abstraction. We need abstraction but it is not core concept. When one understand ifs, loops, arrays and variables, it is enough to write in any programming language is on earth, everything else goes into syntax differences, and on higher level using libraries, frameworks to not reinvent the wheel. So I totally agree.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10102831" width="1" height="1"&gt;</description></item><item><title>re: Four Key Concepts of Computer Programming</title><link>http://blogs.msdn.com/b/alfredth/archive/2010/12/08/four-key-concepts-of-computer-programming.aspx#10102720</link><pubDate>Thu, 09 Dec 2010 16:43:48 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10102720</guid><dc:creator>Garth</dc:creator><description>&lt;p&gt;It is amazing how people get wrapped aroung the axle about a topic like this. &amp;nbsp;I have been teaching CS to HS kids for 20 years (give or take a decade) and I have to agree with Rob&amp;#39;s list. &amp;nbsp;But I interperet I/O as part of process data and many of the other objections as part of his list in some way or other. &amp;nbsp;I see this list as the focus of a Programming I course and as such it pretty much covers most of the bases. &amp;nbsp;This does not mean these 4 are the only topics covered in the class.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10102720" width="1" height="1"&gt;</description></item><item><title>re: Four Key Concepts of Computer Programming</title><link>http://blogs.msdn.com/b/alfredth/archive/2010/12/08/four-key-concepts-of-computer-programming.aspx#10102698</link><pubDate>Thu, 09 Dec 2010 16:07:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10102698</guid><dc:creator>jeff</dc:creator><description>&lt;p&gt;To add to the I/O comment, imagine a computer program with no input and not output. &amp;nbsp;What exactly could that program accomplish? &amp;nbsp;How many such programs exist? &amp;nbsp;If you think about that, I think you&amp;#39;ll realize I/O of some sort is pretty fundamental. &amp;nbsp;You can write a program without arrays, without loops, without decisions, and without I/O, but that&amp;#39;s not really the point.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10102698" width="1" height="1"&gt;</description></item><item><title>re: Four Key Concepts of Computer Programming</title><link>http://blogs.msdn.com/b/alfredth/archive/2010/12/08/four-key-concepts-of-computer-programming.aspx#10102693</link><pubDate>Thu, 09 Dec 2010 16:02:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10102693</guid><dc:creator>jeff</dc:creator><description>&lt;p&gt;&amp;gt;I also should have added thing 0 &amp;quot;You need to know how to &amp;gt;solve the problem before you can write a program&amp;quot; and thing &amp;gt;00 &amp;quot;You need to know what the problem is before you try to &amp;gt;solve it.&amp;quot;&lt;/p&gt;
&lt;p&gt;Those aren&amp;#39;t programming concepts, but problem solving fundamentals in general for pretty much anything you do in life.&lt;/p&gt;
&lt;p&gt;Also you don&amp;#39;t need &amp;quot;indexed&amp;quot; storage (arrays) per se, just some sort of dynamic storage allocation.&lt;/p&gt;
&lt;p&gt;As a practical consideration I think you do need another concept, whether you call it I/O or debugging or &amp;quot;feedback&amp;quot; or whatever. &amp;nbsp;The fact that I/O is hardware dependent is beside the point. &amp;nbsp;The programmer has to have some feedback from the system to verify the program is working, and to learn, practice, experiment and modify along the way. &amp;nbsp;I&amp;#39;d call that very fundamental. &amp;nbsp;Otherwise it would be like trying to learn to play the piano without being able to feel with your fingers or hear the sounds - theoretically possible if you&amp;#39;re already a master, but essentially impossible if you&amp;#39;re learning. &amp;nbsp;In fact if you&amp;#39;re talking about teaching and learning programming, I&amp;#39;d put this thing (whatever you call it) first on the list.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10102693" width="1" height="1"&gt;</description></item></channel></rss>