<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Global Nerdy &#187; Douglas Crockford</title>
	<atom:link href="http://www.globalnerdy.com/tag/douglas-crockford/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.globalnerdy.com</link>
	<description>Tech Evangelist Joey deVilla on Shopify, startups, software development, tech news and other nerdy stuff</description>
	<lastBuildDate>Thu, 09 Feb 2012 18:30:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>CUSEC 2010 Keynote: Douglas Crockford &#8211; The Software Crisis</title>
		<link>http://www.globalnerdy.com/2010/02/06/cusec-2010-keynote-douglas-crockford-the-software-crisis-2/</link>
		<comments>http://www.globalnerdy.com/2010/02/06/cusec-2010-keynote-douglas-crockford-the-software-crisis-2/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 22:15:27 +0000</pubDate>
		<dc:creator>Joey deVilla</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[CUSEC]]></category>
		<category><![CDATA[Douglas Crockford]]></category>
		<category><![CDATA[software design]]></category>

		<guid isPermaLink="false">http://www.globalnerdy.com/2010/02/06/cusec-2010-keynote-douglas-crockford-the-software-crisis-2/</guid>
		<description><![CDATA[At long last, the fifth in my series of notes taken from keynotes at CUSEC 2010, the 2010 edition of the Canadian University Software Engineering Conference. These are from Douglas “JavaScript: The Good Parts” Crockford’s keynote in which he talks about how hard it is to make software. Doug is a senior JavaScript architect at [...]]]></description>
			<content:encoded><![CDATA[<p></p><p><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="doug crockford" border="0" alt="doug crockford" src="http://www.globalnerdy.com/wordpress/wp-content/uploads/2010/02/dougcrockford.jpg" width="450" height="600" /> </p>
<p><strong>At long last, the fifth in my series of notes taken from keynotes at <a href="http://2010.cusec.net/">CUSEC 2010</a>, the 2010 edition of the Canadian University Software Engineering Conference.</strong> These are from <strong>Douglas </strong><a href="http://oreilly.com/catalog/9780596517748"><strong>“<em>JavaScript: The Good Parts</em></strong></a><strong>” Crockford’s</strong> keynote in which he talks about how hard it is to make software. Doug is a senior JavaScript architect at Yahoo!, the guy behind <a href="http://en.wikipedia.org/wiki/JSON">JSON</a>, wrote <a href="http://javascript.crockford.com/javascript.html">one of the first important pieces on JavaScript’s unrealized power and utility</a> and in a former life wrote videogames (of which he has <a href="http://www.crockford.com/wrrrld/maniac.html">some interesting stories</a>).</p>
<p>My notes from his keynote appear below.</p>
<h3>The Software Crisis</h3>
<p>&quot;I made the first important discovery of the 21st century: that JavaScript has good parts!&quot;</p>
<ul>
<li>The <a href="http://en.wikipedia.org/wiki/Software_crisis">Software Crisis</a> dominated the computer industry for a decade: 1960s </li>
<li>The crisis was that software projects were becoming too complex to manage </li>
<li>Projects were:
<ul>
<li>Over budget </li>
<li>Late </li>
<li>Unreliable </li>
<li>Not fully meeting their requirements </li>
<li>Unmaintainable </li>
<li>Failing </li>
<li>Insecure (this is a relatively new thing) </li>
</ul>
</li>
<li>The software crisis isn&#8217;t over &#8212; we&#8217;re now in year 45 </li>
<li>It never went away, we just stopped talking about it </li>
<li>&quot;In other news, the sun will eventually exhaust its supply of hydrogen&quot; </li>
</ul>
<h3>Craft vs. Engineering</h3>
<ul>
<li>Some people said that we weren&#8217;t bringing enough engineering discipline to the practice of programming </li>
<li>Some said programming isn&#8217;t the same thing as engineering and therefore engineering discipline doesn&#8217;t apply </li>
<li>Both miss the point </li>
<li>The real problem with software is that it&#8217;s the most complex thing we make </li>
<li>It requires perfection, which humans aren&#8217;t good at </li>
<li>It&#8217;s amazing we can make software at all </li>
</ul>
<h3>Software construction</h3>
<ul>
<li>Computer science has taught us lots of things, but not how to manage software projects </li>
<li>In some ways, building software is like any other sort of construction </li>
<li>But in some other ways, it&#8217;s quite different </li>
<li>You have to keep in mind that &quot;construction&quot; when applied to software is just a poetic metaphor </li>
<li>Take the case of building a wall:
<ul>
<li>It&#8217;s easy to estimate, based on the size of the wall how much time it will take, and also how far progress will be at any given time during its construction. </li>
<li>Try doing that with software! </li>
</ul>
</li>
<li>Part of the problem is the nature of software
<ul>
<li>It&#8217;s both powerful and malleable </li>
<li>The qualities are both a blessing and a curse </li>
</ul>
</li>
<li>One problem: The lack of metrics
<ul>
<li>There&#8217;s no objective measure of quality or completeness </li>
<li>We can test software, but the tests are on the same level of quality as the software being tested </li>
<li>Consider one of the old stand-by metrics: LOC (lines of code)
<ul>
<li>It&#8217;s not an indicator of quality </li>
<li>Nor is it an indicator of completeness </li>
</ul>
</li>
</ul>
</li>
<li>Another problem: Estimation is difficult
<ul>
<li>Programmers, by nature, are optimists </li>
<li>You have to be and optimist to do this kind of work! You wouldn’t be able if you weren&#8217;t </li>
<li>&quot;I think rational people could not do programming&quot; </li>
<li>As a result, we&#8217;re probably the least qualified people to do estimating </li>
<li>What doesn&#8217;t help is encouragement from management like &quot;You&#8217;re a smart guy, you should be able to do it in 3 months!&quot; </li>
</ul>
</li>
<li>Another problem: Programmers don&#8217;t understand how they spend their time
<ul>
<li>They think they spend most of their time typing </li>
<li>Measurements show that most of their time is actually spent in meetings or tech conversations </li>
<li>(And there&#8217;s also the time spent staring at the screen going &quot;My God, what have I done?&quot;) </li>
<li>As a result of this disconnect between perception and reality, programmers tend to be skeptical of process improvements that might require more keystrokes
<ul>
<li>[Story about developer who refuse to switch from a CamelCase naming scheme to a words_delimited_with_underscores naming scheme] </li>
<li>The programmer had an emotional attachment to the CamelCase naming scheme and argued that the underscore-based scheme slowed things down </li>
</ul>
</li>
<li>Consider the first rule of optimization: optimize the process that is taking the most time </li>
<li>When it comes to programming, that process isn&#8217;t the typing! </li>
<li>It&#8217;s the thinking, worrying and puzzling </li>
</ul>
</li>
<li>Programming is a social activity
<ul>
<li>Solo cases are the exception </li>
</ul>
</li>
<li>Cost of innovation
<ul>
<li>Doing what&#8217;s been done before vs. doing what hasn&#8217;t </li>
<li>We&#8217;re constantly doing things we haven&#8217;t done before </li>
<li>That&#8217;s most likely to lead us to mistakes </li>
</ul>
</li>
<li>Legacy
<ul>
<li>In other industries, legacy is seen as the wealth of practice and tradition, the wisdom of experience </li>
<li>Not ours! In software, past accomplishments are considered to be a liability </li>
<li>The age at which programs become &quot;legacy&quot; is getting younger and younger </li>
<li>Some programs become legacy before they&#8217;re finished\ </li>
<li>No industry disrespects legacy the way the software industry has </li>
</ul>
</li>
</ul>
<h3>Leaps</h3>
<ul>
<li>Software is not governed by <a href="http://en.wikipedia.org/wiki/Moore's_law">Moore&#8217;s Law</a>; it&#8217;s governed by <a href="http://en.wikipedia.org/wiki/Murphy's_law">Murphy&#8217;s Law</a> </li>
<li>Leaps tend to come at 20 year intervals, not two year intervals </li>
<li>Leaps make it possible to implement more complex projects </li>
<li>Adoption of &quot;leaping&quot; software technologies tends to be very slow </li>
<li>Common responses to leaps: controversy and reluctance </li>
<li>Leap 1: Plugboards </li>
</ul>
<p><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="plugboard" border="0" alt="plugboard" src="http://www.globalnerdy.com/wordpress/wp-content/uploads/2010/02/plugboard.jpg" width="600" height="450" /> </p>
<ul>
<li>Single machine programmable with plugboard </li>
<li>The original spaghetti code </li>
<li>Leap 2: Symbolic assembly language
<ul>
<li>The first software tool &#8212; the first program to make it easier to write programs </li>
</ul>
</li>
<li>Leap 3: High level languages
<ul>
<li>In the 1960s, there was a lot of research on automatic programming </li>
<li>It was believed, even back then, that programming too complex and error-prone for humans to do </li>
<li>We wanted to get computers to write programs for us: we’d feed them specifications; they’d output programs </li>
<li>The result? <a href="http://en.wikipedia.org/wiki/Fortran">FORTRAN</a> </li>
<li>Still a leap forward </li>
<li>Even today, with DSLs, it&#8217;s still progamming </li>
</ul>
</li>
<li>Leap 4: Structured Programming
<ul>
<li>Getting rid of GOTO </li>
<li>Let us write more complex programs </li>
<li>Argued for 20 years as to whether it was good idea to get rid of GOTOs </li>
<li>People who benefited most and opposed were programmers </li>
<li>Arguments and counter-arguments </li>
<li>&quot;Had to wait for those guys to get old and die&quot; </li>
<li>So today, virtually all our languages are GOTO-less </li>
<li>Good thing &#8212; more sophisticated programs possible </li>
<li>What was the fuss all about? </li>
</ul>
</li>
<li>Leap 5: Object-Oriented programming
<ul>
<li>1967: <a href="http://en.wikipedia.org/wiki/Simula">Simula</a> released </li>
<li>1972: <a href="http://ei.cs.vt.edu/~history/GASCH.KAY.HTML">Alan Kay</a> begins <a href="http://www.smalltalk.org/main/">Smalltalk</a>, which was originally intended for children </li>
<li>Most of good today in tech owes a debt to Smalltalk </li>
<li>1980: Smalltalk released. Smalltalk took 8 years &#8212; Netscape spent 8 weeks getting JavaScript ready! </li>
<li>1985: <a href="http://www.cplusplus.com/">C++</a> released. Essentially some of the good ideas in Smalltalk added to C </li>
<li>1995: <a href="http://java.com/en/">Java</a> released </li>
<li>2004: <a href="http://php.net">PHP</a> with version 5 says &quot;Okay, we&#8217;ll do it that way too&quot; </li>
<li>A lot of time has passed between 1967 and now. Simply because a new good idea appears means it won&#8217;t be adopted quickly </li>
<li>OOP is not the last leap. It&#8217;s just that we&#8217;re so fixed on objects that we can&#8217;t see past them </li>
</ul>
</li>
<li>So we&#8217;re late for the next leap
<ul>
<li>I think it&#8217;ll be distributed programming, the idea of taking n components and put them together to make a functioning application </li>
<li>Will live in the cloud </li>
<li>Nobody thought that we&#8217;d see signs from the next step forward in JavaScript and browsers, but that&#8217;s where it&#8217;ll likely come from </li>
</ul>
</li>
<li>Some Failed Leaps
<ul>
<li>Artificial intelligence
<ul>
<li>Intelligence is much harder to understand </li>
</ul>
</li>
</ul>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Fifth_generation_computer">5th generation</a> languages
<ul>
<li>Japanese invested heavily it, but without much result </li>
</ul>
</li>
</ul>
<ul>
<li>Computer-aided software engineering
<ul>
<li>Reborn in IDEs </li>
</ul>
</li>
</ul>
<ul>
<li>Subjective-oriented programming, etc. </li>
</ul>
</li>
</ul>
<h2>Bugs</h2>
<p><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="grace hoppers bug" border="0" alt="grace hoppers bug" src="http://www.globalnerdy.com/wordpress/wp-content/uploads/2010/02/gracehoppersbug.jpg" width="600" height="450" /> </p>
<ul>
<li>Software does not have enough self-awareness to be afraid of bugs. That&#8217;s why it works as well as it does. </li>
<li>The term “bug”&#160; is attributed to Edison, who used them to refer to flaws
<ul>
<li>From the <em>Pall Mall Gazette</em>, March 11, 1889: &quot;Mr. Edison, I was informed, had been up the two previous nights discovering a bug in his phonograph.&quot; </li>
</ul>
</li>
<li>Ever since then, defects in inventions have been called bugs and it&#8217;s become part of popular culture </li>
<li>There&#8217;s also <a href="http://gracehopper.org/2010/">Commodore Grace Hopper&#8217;s</a> bug, a literal bug: a moth caught in the relay of a Navy electromechanical computer.
<ul>
<li>She pasted moth into her logbook </li>
<li>It&#8217;s the &quot;first actual case of a bug being found&quot; </li>
</ul>
</li>
</ul>
<h2>Snake oil</h2>
<ul>
<li>Even though we know better, we love &quot;silver bullets&quot; </li>
<li>We tend to like people who make fantastic promises to fix our problems, if we just follow some crazy methodology of theirs:
<ul>
<li>Diagramming? </li>
<li>Documentation style? </li>
<li>Have all your meetings standing up? </li>
</ul>
</li>
<li>Saying &quot;nothing works&quot; is discouraging; I&#8217;d like to give you a better story </li>
<li><a href="http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959"><em>The Mythical Man-Month</em></a>
<ul>
<li>Written by <a href="http://en.wikipedia.org/wiki/Fred_Brooks">Fredrick Brooks</a>; I highly recommend this book </li>
<li>He said a lot of things in the book that seemed unreal at the time, but they were proven to be true over time </li>
<li>The source of what we know as <a href="http://en.wikipedia.org/wiki/Brooks's_law">Brooks&#8217; Law</a>: &quot;Adding manpower to a late software project makes it later.&quot; </li>
<li>One of the first books to show an understanding that programming is social </li>
<li>Another idea in the book: the <a href="http://en.wikipedia.org/wiki/Second-system_effect">Second-System Effect</a>
<ul>
<li>Take a team of programmers who&#8217;ve done something brilliant </li>
<li>Give them a blank slate for the next project </li>
<li>The result? They fail&#8230;hard </li>
<li>Why? They become overconfident. Their earlier success causes them to overreach </li>
</ul>
</li>
<li>Another idea in the book: Prototyping
<ul>
<li>Software is like waffles: Make the system, throw it away, make it again </li>
<li>Counter to the notion of getting it right the first time) </li>
<li>&quot;Make the first one to throw away&quot; turns out to be a good idea </li>
</ul>
</li>
<li>One last concept from the book: &quot;A project become a year late one day at a time&quot; </li>
</ul>
</li>
<li><a href="http://www.literateprogramming.com/">Literate Programming</a>
<ul>
<li>Created by <a href="http://www-cs-faculty.stanford.edu/~uno/">Donald Knuth</a> </li>
<li>The idea: Programs designed to be read </li>
<li>I&#8217;ve seen lots of good programs done in this style </li>
<li>It doesn&#8217;t appear to work well in groups yet &#8212; but that&#8217;s mostly what we&#8217;re doing now </li>
</ul>
</li>
<li>Incrementalism
<ul>
<li>The basic idea: &quot;We&#8217;ll see you in two weeks&quot; vs. &quot;See you in two years&quot; </li>
<li>Disappointments are smaller and more frequent, which are easier to manage; it lets us manage our expectations </li>
<li>It also makes us less ambitious, but that lack of ambition is helpful </li>
<li>It avoids second system problem &#8212; this doesn&#8217;t let you dream big </li>
<li>The project is always a beta, and perpetually unfinished </li>
<li>The downside of incrementalism: </li>
<li>There&#8217;s the potential that your project will become something like the <a href="http://www.winchestermysteryhouse.com/index.cfm">Winchester House</a> in San Jose
<ul>
<li>Built by Mrs. Winchester, wife of the Winchester behind Winchester guns </li>
<li>Her husband and child died tragically, and a medium told her that they were killed by the spirits of people killed by the Winchester repeating rifle </li>
<li>She was warned that they&#8217;d come after her too unless she found some way to confuse them </li>
<li>She came up with the idea that as long as she kept working on her house, the spirits would not find her </li>
<li>So her house was constantly under construction, with hired people adding new things to it all the time </li>
<li>It was built up incrementally. &quot;This is an agile house!&quot; </li>
<li>End result: things like stairways leading up to a ceiling: </li>
</ul>
</li>
</ul>
</li>
</ul>
<p><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="winchester house stairs" border="0" alt="winchester house stairs" src="http://www.globalnerdy.com/wordpress/wp-content/uploads/2010/02/winchesterhousestairs.jpg" width="600" height="450" /> </p>
<ul>
<ul>
<ul>
<li>&quot;You&#8217;re programmers, you know what happened here!” </li>
<li>Chimneys that didn&#8217;t go up all the way to the ceiling </li>
</ul>
</ul>
</ul>
<p><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="winchester house chimney" border="0" alt="winchester house chimney" src="http://www.globalnerdy.com/wordpress/wp-content/uploads/2010/02/winchesterhousechimney.jpg" width="600" height="450" /> </p>
<ul>
<ul>
<ul>
<li>No rhyme nor reason </li>
</ul>
</ul>
<li>Go watch <em><a href="http://en.wikipedia.org/wiki/Mr._Blandings_Builds_His_Dream_House">Mr. Blandings Builds His Dream House</a></em> (1948)
<ul>
<li>It&#8217;s the best movie ever made about project management </li>
<li>Blandings&#8217; problems:
<ul>
<li>Lack of knowledge of technology </li>
<li>Poor control over requirements </li>
</ul>
</li>
<li>[<strong><em>Joey’s note:</em></strong> This movie’s been remade in modernized form with Tom Hanks in <em><a href="http://en.wikipedia.org/wiki/The_Money_Pit">The Money Pit</a></em>(1986) and Ice Cube in <a href="http://en.wikipedia.org/wiki/Are_We_Done_Yet%3F"><em>Are We Done Yet?</em></a> (2007).] </li>
</ul>
</li>
<li>Feature Cost
<ul>
<li>Development time </li>
<li>Deployment cost </li>
<li>Maintenance cost (bloat, cruft) </li>
<li>Download time </li>
<li>User confusion/training </li>
<li>Bug delivery </li>
</ul>
</li>
<li>Code Value
<ul>
<li>Microview: good coding conventions </li>
<li>Macroview: good architecture </li>
</ul>
</li>
<li>We need better program architecture </li>
<li>Architecture is hard, but conventions is easy </li>
<li>Think of how hospitals were improved just through simple conventions of hygiene, such as washing your hands
<ul>
<li>The simplest thing we can do to increase the value of our code is to make it readable
<ul>
<li>For example, when returning a value from a method, we should use return value, not return(value) &#8212; the latter implies that return is a function </li>
</ul>
</li>
<li>Whatever improves human parsing of programs is helpful </li>
</ul>
</li>
<li>Communicating
<ul>
<li>You should think of programs as a medium of intentional communication:
<ul>
<li>Communicating detailed instructions with the machine </li>
<li>Communicating with your development community </li>
<li>Communicating with yourself (and especially your future self) </li>
</ul>
</li>
</ul>
</li>
<li>Good architecture is about not collapsing into a puddle of confusion, and should enable you to change a correct program into another correct program </li>
<li>Cruft
<ul>
<li>It&#8217;s software scar tissue </li>
<li>Comes from lots of sources:
<ul>
<li>Premature optimization </li>
<li>Inexperience </li>
<li>Misread source </li>
<li>Feature enhancement </li>
<li>Death marches (which are the most avoidable source of cruft) </li>
<li>As cruft accumulates, complexity grows and progress slows </li>
</ul>
</li>
</ul>
</li>
<li>Eventually, the code itself becomes a source of friction </li>
</ul>
<h2>Bloat</h2>
<ul>
<li>It&#8217;s &quot;software obesity&quot; </li>
<li>In the old days, memory was expensive and you didn&#8217;t get much of it, so your programs were lean by necessity </li>
<li>Having only 8K &#8211; 64K of RAM in a machine put incredible constraints on what you could do </li>
<li>I used to dream of the day when memory would cheap and abundant enough so that we wouldn&#8217;t have to do evil things to get programs to fit </li>
<li>Now I wonder if maybe those constraints weren&#8217;t so bad </li>
<li>&quot;Bugs hide in those rolls of fat in our programs&quot; </li>
<li>Insecurity
<ul>
<li>Most programs these days have marginal security </li>
<li>Programs that once didn&#8217;t have security implications now do </li>
<li>Any bug is potentially a security bug </li>
<li>Good secure programming is good programming </li>
<li>Thinking about security might make programming easier </li>
</ul>
</li>
<li>Refactoring
<ul>
<li>The process of code refinement, involving things like:
<ul>
<li>Correction of formatting </li>
<li>Insertion of documentation </li>
<li>Removal of cruft and bloat </li>
<li>Restructuring </li>
</ul>
</li>
</ul>
</li>
<li>Perhaps we should take advice from Exodus: &quot;Plant and harvest crops for six years, but let the land rest and lie fallow during the seventh year.&quot; </li>
<li>Maybe do six sprints where you add new features, but on the seventh sprint, don&#8217;t add new features at all
<ul>
<ul>
<li>Sometimes the best course is to start over
<ul>
<li>This is quite difficult to accept </li>
</ul>
<ul>
<li>The pain of the crash
<ul>
<li>Loss of a week&#8217;s work, a day&#8217;s work, an hour&#8217;s work, is unbearable </li>
</ul>
</li>
</ul>
</li>
</ul>
</ul>
</li>
<li>The illusion of completion
<ul>
<li>&quot;It&#8217;s in the can!&quot; </li>
<li>I once worked as an expert witness on conflict between 2 game companies
<ul>
<li>The original game company had split up; the new company was being sued for plagiarizing the original company&#8217;s game engine </li>
<li>I reviewed both game engines and determined that the new game company had written a whole new engine in 2 month &#8212; they&#8217;d learned for the experiences writing an engine for the old company </li>
<li>The owner of the old company couldn&#8217;t accept that; he thought the value of the codebase was 100 man-years, not 1 </li>
<li>An experienced team can redo what they just created quickly. The team&#8217;s focus must be on simplicity to avoid second system effect </li>
</ul>
</li>
</ul>
</li>
<li>Have regular code readings
<ul>
<li>Don&#8217;t wait until release to do code reviews </li>
<li>Do team code reading regularly during development </li>
<li>Problems can be discovered early </li>
<li>Good techniques can be shared early </li>
<li>Experienced developers can lead by example; novice developers learn from the group </li>
<li>They should be: frequent, helpful and respectful
<ul>
<li>You need a healthy team &#8211; a dysfunctional one will tear itself apart </li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>Conclusion</h2>
<ul>
<li>Quality first. Quality last. </li>
<li>Readable code. Code reading. </li>
<li>Invest in the quality of your code base. </li>
<li>Invest in your programmers and managers. </li>
<li>Quality is the most important feature. </li>
<li>If you look at all the polished, completed code you write at the end of a year, you could type it all in a day </li>
<li>Typing is not what we do; it&#8217;s thinking and communicating </li>
</ul>
<p class="alert"><a href="http://blogs.msdn.com/cdndevs/archive/2010/02/06/cusec-2010-keynote-douglas-crockford-the-software-crisis.aspx">This article also appears in <em>Canadian Developer Connection</em>.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.globalnerdy.com/2010/02/06/cusec-2010-keynote-douglas-crockford-the-software-crisis-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

