Software carpentry: best practices and tools

Course material

Slides of the course: Morning, Part I, Morning, Part II, Afternoon, Object Oriented Design

Exercises: Part I, Part II_

Solution to the exercises:

Cheat sheets that summarize the agile development work cycles, and the main features and syntax of Python tools

Good programming practices

Software carpentry in general

Two comprehensive software carpentry courses:

University of Alberta

Tiziano's course at the Bernstein center in Berlin

Coding standards

PEP8, the official Python style guide


Refactoring home page, maintained by the author of the main refactoring book, //Refactoring: Improving the Design of Existing Code//, Martin Fowler


pdb, the standard python debugger

winpdb, a graphical interface for pdb. It's platform-independent despite its name.

DDD (DataDisplayDebugger), graphical general-purpose debugger.

Python IDEs often have a built-in debugger.


cProfile, the batteries included Python profiler

timeit, built-in Python module to measure the execution time of small code parts

RunSnakeRun, a wxPython-based visualization of profiling results – very intuitive!

Test suites

unittest, the standard Python test framework

py.test, an alternative framework that simplifies writing tests and allows for extension and customization of test experience

nose, another popular alternative

Version control

Subversion (SVN)

SVN book; particularly important is the basic work cycle

A useful and complete one-page cheat sheet for SVN

subclipse, SVN plug-in for Eclipse

TortoiseSVN, SVN integration for the Windows Explorer

Distributed version control

Object Oriented Programming and Software Design

Here is is state pattern example that I talked about: State Pattern Example

Here are a few interesting links about advanced Python OO stuff:

To learn more about software design and design patterns you can read some old-school books:

And for fun you can also read blogs, like:

day1.txt · Last modified: 2009/09/01 18:04 by nikow
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki