<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.3//EN" "document-v13.dtd">
<document> 
  <header> 
    <title>Adventures In Software Development</title> 
  </header> 
  <body> 

<section>
<title>Introduction</title>
    <p>
<link href="../resume/ilc/letter.jpg" title="nice letter">
<img src="../images/kfccloseup.jpg" alt="KFC" class="wordseye"/>
</link>
After writing a postmortem article for a video game project, I
considered documenting lessons learned from various diverse projects,
ranging from flashy video games, shrink-wrapped consumer software,
boring but useful factory automation systems, and wireless web portals
that are supposed to run 24/7.
    </p>

<p>
But after more than a dozen software releases, it's like watching a
syndicated TV show over and over - I know how each episode is going to
end.  So rather than repetitiously list the same lessons, I've
partitioned my thoughts according to whatever themes grab me. (It's
really a form of therapy)
</p>
<p>
Alas, the number of articles has grown unfinished like an
out-of-control software project, as I "refactor" larger articles into
smaller ones. So this isn't a blog - rather, like software, it's a continual
work-in-progress.  I hope you can find useful nuggets of reason in
them. In addition, I have unfinished thoughts on <link href="http://www.fugutalk.com/" title="Phil's blog">Fugu Talk</link>.
</p>

<p>
Thanks to everyone who's taken to the time to read these essays.
The numerous emails
I've received with feedback, suggestions and corrections
are welcome and immensely helpful.
Code safely!
</p>

</section>

<section>
<title>Recommended Reading</title>

<!--
<p>
Some recommended books are listed on the technicat bookshelf of
<a href="http://www.powells.com/cgi-bin/partner?partner_id=30011&amp;html=ppbs/30011.html">
<img src="../images/av88d.gif" alt="Powell's Books" />
</a>
</p>
-->

<section>
<title>Engineering</title>

<p>
<link href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-004Computation-StructuresFall2002/CourseHome/index.htm" title="6.004">
<img src="../resume/mit/kit.jpg" alt="Ken, Jr." class="wordseye"/>
</link>
I built the <em>Kenputer</em> as part of
<link href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-004Computation-StructuresFall2002/CourseHome/index.htm" title="Computation Structures">6.004</link>, one of many <link href="http://www.mit.edu/" title="Massachusetts Institute of Technology">MIT</link> courses with material now available on the
<link href="http://ocw.mit.edu/">Open Courseware Project</link>.
The text for
<link href="http://sicp.ai.mit.edu/" title="Structure and Interpretation of Computer Programs">6.001</link>,
<link href="http://mitpress.mit.edu/sicp/full-text/book/book.html">Structure and Interpretation of Computer Programs</link>,
demonstrates programming can be an esthetic and intellectual endeavor.
<link href="http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&amp;tid=6196">Abstraction and Specification in Program Development</link>
is no longer used for
<link href="http://web.mit.edu/6.170/www/">6.170</link>
(and
<link href="http://www.pmg.csail.mit.edu/CLU.html">CLU</link>
was never that useful), but the material was my first introduction to useful data abstraction and documentation of function and module interfaces.
</p>

<p>
<link href="http://en.wikipedia.com/wiki/Henry_Petroski">Henry
Petroski</link> writes on engineering design and engineering failures.
<em>The Evolution of Everyday Things</em> explains how engineering
design is more of an evolutionary process than a one-shot design.
<em>To Engineer is Human</em> examines high-profile engineering
failures and their causes.
</p>
<p>
<link href="http://www.computer.org/computer/Colwell.htm">Bob
Colwell</link> writes on various engineering issues, including amusing
anecdotes from his days as a processor architect at Intel.
</p>

<p>
For a trip down memory lane, check out
<link href="http://www.folklore.org/">Apple folklore</link>,
<link href="http://www.mac512.com/">Mac system notes</link>,
the
<link href="http://www.smbx.org/">Symbolics Museum</link>,
and the
<link href="http://www.old-computers.com/">Old Computers Museum</link>.
</p>

<p>
The movie
<link href="http://en.wikipedia.org/wiki/Office_Space" title="Wikipedia article">Office Space</link>
is required viewing.
And of course, there's
<link href="http://www.dilbert.com/">Dilbert</link>,
which is funny until you realize it's all true.
</p>

</section>

<section>
<title>Software Development</title>

<p>
<link href="http://www.wordseye.com/view-picture?sid=3850" title="Hardware Bug">
<img src="../images/gallery_files/3850-thumbnail.jpg" alt="Hardware Bug" class="wordseye"/>
</link>
If you're going to read one book on software development, read
<link href="http://www.stevemcconnell.com/">Steve McConnell</link>'s
<em>Rapid Development</em>,
a compendium of modern software development practices.
<link href="http://research.microsoft.com/users/GBell/">Gordon Bell</link>'s
<em>High-Tech Ventures</em>, although dated, is my favorite how-to guide for startups.
Fred Brook's
<link href="http://en.wikipedia.org/wiki/The_Mythical_Man-Month">The
Mythical Man-Month</link> is another classic (the title refers to the
point that adding unnecessary people on a project is not only useless,
but counterproductive).  Everyone should expend some thought on the
intellectual property issues of software and the commons that benefit
us all - read the analyses and explanations
by <link href="http://www.lessig.org/">Lawrence Lessig</link>.
</p>


<p>
See
<link href="../games/index.html">game development resources</link>
for recommended books and web sites on game development.
</p>

<!--
<p>
<a href="http://www.wordseye.com/view-picture?sid=3504" title="Lambda">
<img src="../images/gallery_files/3504-thumbnail.jpg" alt="Lambda" class="wordseye"/>
</a>
-->

<p>
I was largely inspired to put my own thoughts in writing by the
essays on hacker culture by
<link href="http://www.catb.org/~esr/">Eric Raymond</link>,
thoughts on programmers and program languages by
<link href="http://www.paulgraham.com/">Paul Graham</link>,
the personal anecdotes and insights into software design
of
<link href="http://www.dreamsongs.com/">Richard Gabriel</link>,
and the intelligent rants of
<link href="http://www.joelonsoftware.com/">Joel on Software</link>.
<link href="http://www.ericsink.com/">Eric Sink</link>
offers tips on one-person software developer outfits ("Micro-ISV"'s).
</p>

</section>

<section>
<title>Best Practices</title>

<p>
<link href="http://www.wordseye.com/view-picture?sid=4461" title="Street Racing">
<img src="../images/gallery_files/4461-thumbnail.jpg" alt="Street Racing" class="wordseye"/>
</link>
The term "best practices" is about as accurate and realistic as "zero-defect software", but there are some useful ideas embedded in all those fads and buzzwords.
</p>

<p>
<link href="http://en.wikipedia.org/wiki/Refactoring" title="Wikipedia article">Refactoring techniques</link>
are listed at
<link href="http://www.refactoring.com/">Refactoring.com</link>.
</p>

<p>
The
<link href="http://www.agilemanifesto.org/">Agile Manifesto</link>
lists the principles of
<link href="http://en.wikipedia.org/wiki/Agile_software_development" title="Wikipedia article">agile software development</link>
methodologies, such as
<link href="http://www.extremeprogramming.org/">extreme programming</link>
and
<link href="http://en.wikipedia.org/wiki/Scrum_%28development%29" title="Wikipedia article">scrum development</link>.
</p>

<p>
<link href="http://en.wikipedia.org/wiki/Design_pattern_(computer_science)" title="Wikipedia article">Design patterns</link> are listed at the <link href="http://c2.com/cgi/wiki?CategoryPattern">Portland Pattern
Repository</link>.  Lest one think that design patterns originated
entirely from within the programming community, read architect
<link href="http://www.patternlanguage.com/" title="web site of the architect">Christopher Alexander's</link>
pattern language trilogy.
</p>

<p>
The
<link href="http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html">
Java Coding Style Guidelines
</link>
are fairly reasonable, yet many feel compelled to mangle it with
<link href="http://en.wikipedia.org/Hungarian_notation" title="wikipedia article">Hungarian Notation</link>,
explained in
<link href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs600/html/HungaNotat.asp" title="Microsoft Developer Network">Charles Simonyi's original paper</link>.
</p>

</section>

<section>
<title>User Interfaces</title>

<p>
<link href="http://www.wordseye.com/view-picture?sid=7881" title="Rat and Mouse">
<img src="../images/gallery_files/7881-thumbnail.jpg" alt="Rat and Mouse" class="wordseye"/>
</link>
Anyone designing user interfaces should be familiar with graphic design, especially the work of
<link href="http://en.wikipedia.com/wiki/Paul_Rand">Paul Rand</link>.
<link href="http://www.edwardtufte.com/">Edward Tufte</link>
demonstrates how to convey information efficiently and accurately via graphics.
<link href="http://www.jnd.org/">Donald Norman</link>
argues against unncessary complexity in everday life.
<link href="http://www.asktog.com/">Ask Tog</link> about GUI design.
<link href="http://www.useit.com/">Jakob Nielsen</link> writes on web usability.
</p>

<p>
<link href="http://java.sun.com/products/jlf/ed2/book/">Java Look and Feel Design Guidelines</link>
and
<link href="http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGIntro/chapter_1_section_1.html">Apple Human Interface Guidelines</link>.
</p>

<p>
If you're willing to look beyond standard GUI design,
read about interactive storytelling from
<link href="http://www.erasmatazz.com/">Chris Crawford</link>
and graphical narrative from
<link href="http://www.scottmccloud.com/" title="Understanding Comics">Scott McCloud</link>.
</p>

</section>

</section>

<!--
<section>
<title>Resources</title>

<section>
<title>Startups</title>

<p>
<a href="http://www.ss.ca.gov/business/business.htm">California Business Portal</a>
<br/>
<a href="http://www.score114.org/">Orange County SCORE</a>
<br/>
<a href="http://www.scsc.org/">Software Council of Southern California</a>
<br/>
<a href="http://www.sba.gov/">Small Business Administration</a>
<br/>
<a href="http://www.business.gov/">business.gov</a>
<br/>
<a href="http://www.osha.gov/">OSHA</a>
<br/>
<a href="http://www.score.org/">SCORE</a>
<br/>
<a href="http://50k.mit.edu/">MIT 50k Competition</a>
<br/>
<a href="http://www.ventureblog.com/">Venture Blog</a>
</p>

</section>

<section>
<title>SBIR/STTR</title>

<p>
<a href="http://www.wordseye.com/view-picture?sid=1879" title="Night Vision">
<img src="../images/gallery_files/1879-thumbnail.jpg" alt="Night Vision" class="wordseye"/>
</a>
<a href="http://www.sbirworld.com/">SBIR World</a>,
<a href="http://www.zyn.com/sbir/">SBIR Gateway</a>
<br/>
<a href="http://www.dodsbir.net/">DOD</a>,
<a href="http://sbir.er.doe.gov/sbir/">DOE</a>,
<a href="http://sbir.gsfc.nasa.gov/SBIR/SBIR.html">NASA</a>,
<a href="http://grants1.nih.gov/grants/funding/sbir.htm">NIH</a>,
<a href="http://www.ed.gov/programs/sbir/index.html">ED</a>
</p>

</section>


<section>
<title>Intellectual Property</title>

<p>
<a href="http://www.wordseye.com/view-picture?sid=7899" title="Huh?">
<img src="../images/gallery_files/7899-thumbnail.jpg" alt="Huh?" class="wordseye"/>
</a>
<a href="http://www.uspto.gov/">U.S. Trademarks and Patents</a>
<br/>
<a href="http://strategis.ic.gc.ca/cipo/trademarks/search/tmSearch.do">Canadian Trademarks</a>
<br/>
<a href="http://www.icann.org/">ICANN</a>
</p>

<p>

<a href="http://www.leginfo.ca.gov/">California Law</a>
<br/>
<a href="http://www.nolo.com/">Nolo Lawcenter</a>
<br/>
<a href="http://www.legal-definitions.com/">Legal Definitions</a>

</p>

</section>

<section>
<title>Workplace</title>

<p>
Know your workplace rights (and obligations) by checking out the
<a href="http://www.dol.gov/">Department of Labor</a>
and additional protections provided by your state, e.g.
the
<a href="http://www.dir.ca.gov/dlse/">California Department of Labor Standards Enforcement</a>.
</p>

<p>
Know your health insurance rights for continuation of health insurance
(<a
href="http://www.dol.gov/dol/topic/health-plans/cobra.htm">COBRA</a>)
and portability of health insurance
(<a
href="http://www.dol.gov/ebsa/faqs/faq_consumer_hipaa.html">HIPAA</a>).
Your state may extend these protections, e.g.
<a href="http://www.hmohelp.ca.gov/library/faq/coverage/cal-cobra.asp">Cal COBRA</a> extends COBRA requirements to California small businesses.
And state agencies may provide recourse, e.g.
I found the
<a href="http://www.insurance.ca.gov/">California Department of Insurance</a>
and
<a href="http://www.hmohelp.ca.gov/">California Department of Managed Health Care</a>
to be responsive and helpful when dealing with my uncooperative insurer (I'm talking about you, Healthnet!)
</p>

</section>

<section>
<title>Networking</title>

<p>
<a href="http://www.wordseye.com/view-picture?sid=1149" title="Management Meeting">
<img src="../images/gallery_files/1149-thumbnail.jpg" alt="Management Meeting" class="wordseye"/>
</a>
Some networking resources for programmers:
</p>
<ul>
<li>
<a href="http://www.lajug.org/">Los Angeles Java Users Group</a>
</li>
<li>
<a href="http://la.siggraph.org/">Siggraph: Los Angeles Chapter</a>
</li>
<li>
<a href="http://www.icca.org/chapters.asp#21">ICCA - Southern California Chapter</a>
</li>
<li>
<a href="http://www.socaldotnetarchitecture.org/">SoCal .NET Architecture</a>
</li>
<li>
<a href="http://www.lawebspinners.org/">LA Web Spinners</a>
</li>
<li>
<a href="http://www.ocjug.org/">Orange County Java Users Group</a>
</li>
<li>
<a href="http://www.oclug.org/">Orange County Linux Users Group</a>
</li>
<li>
<a href="http://occs.ieee.org/">IEEE Computer Society: Orange County Chapter</a>
</li>
<li>
<a href="http://www.igda.org/oc/">IGDA: Orange County Chapter</a>
</li>
</ul>

</section>

</section>
-->

</body>
</document>