Software Development

Introduction
This is a collection of notes on software development. Its main purpose is to help me raise my development's level of professionalism. It also gives me a place to air an opinion or two.

To give you an idea of my background, after some BASIC programming in my childhood and a break of many years for other interests, I returned to hobby programming just after undergrad and was able to make it my living several years later in 2006. That phase of my developer life started with Perl, and since then I've moved on to Python and XSLT. I've worked mainly in the area of text processing. JavaScript and PHP have played intermittent supporting roles for occasional web development or InDesign scripting. My projects have all been either solo or with a very small team. It's all been on Windows and mostly for the command line.

Topics
As a way to organize my notes and make sure I don't miss anything important, I'll use the structure of IEEE's Guide to the Software Engineering Body of Knowledge (SWEBOK). It's a standard that overviews the entire field and forms the basis for creating things like curricula and certifications. You can download the PDF for free.

The items under the SWEBOK knowledge areas in the first level link to my notes on each topic. I've sorted the knowledge areas to approximate my preferred order, though I'll address them more haphazardly.


 * Introduction to the Guide
 * Ch. 12: Software engineering economics
 * Ch. 11: Software engineering professional practice
 * /License/
 * Ch. 14: Mathematical foundations
 * Ch. 13: Computing foundations
 * Ch. 15: Engineering foundations
 * Ch. 9: Software engineering models and methods
 * Ch. 7: Software engineering management
 * Ch. 10: Software quality
 * Ch. 6: Software configuration management
 * /Version Control/
 * /Version Numbers/
 * /Distribution/
 * Ch. 8: Software engineering process
 * /Software Development Methodology/
 * /Iterative and Incremental Development/
 * Ch. 1: Software requirements
 * Requirements
 * Ch. 4: Software testing
 * /Testing/
 * Ch. 2: Software design
 * Design
 * Architecture
 * UX and UI
 * Ch. 3: Software construction
 * /Code Style/
 * /Project Structure/
 * /Installation/
 * /Metadata/
 * /Command Line Interface/
 * /Documentation/
 * /Comments/
 * /Literate Programming/
 * /Docstrings/
 * /Project Documentation/
 * /READMEs/
 * /Command Line Help/
 * /Application Configuration/
 * /Logging/
 * /Test-First Programming/
 * Ch. 5: Software maintenance
 * /Refactoring/

/Sources/
See the article linked in the heading for a list of code examples and other sources I'm drawing from.