varoquaux@normalesup
org I find that the literature and the web strangely miss good references to learn programming techniques. You can find either pretty basic tutorial on a specific language, or full-on courses intended for computer science students. This page is work in progress, but I would really like it to be one day an introduction to software design accessible for the non-programmer.
All the material exposed here focuses on Python as a language, as it is the language I use and advocate.
Listed in order of difficulty:
These are the notes from Greg Wilson course on software engineering at the university of Toronto. This course is specifically intended for scientists, but not computer science students. It is very basic and does not cover design issues.
http://www.informit.com/articles/article.asp?p=23100&seqNum=3&rl=1.
This tutorial is easier to follow than Guido's tutorial, thought it does not go as much in depth.
http://www.informit.com/articles/article.asp?p=453682&rl=1
http://www.informit.com/articles/article.asp?p=459269&rl=1
These are two chapters out of David Beazley's excellent book Python Essential Reference. They allow to understand more deeply how python works. I strongly recommend this book to anybody serious about python.
http://www.informit.com/articles/article.asp?p=20454&rl=1
If you are going to do any sort of text manipulation, you absolutely need to know how to use regular expressions: powerful search and replace patterns.
http://gael-varoquaux.info/computers/traits_tutorial/index.html
Building interactive graphical application is a difficult problem. I have found that the traitsUI module provides a great answer to this problem. This is a tutorial intended for the non programmer.
http://www.informit.com/articles/article.asp?p=26895&rl=1
This article may not be terribly easy to follow, but iterator are a great feature of Python, so this is definitely worth reading.
http://www.getfreesofts.com/script/290/12196/Functional_programming_in_Python.html
Functional programming is a programming style where mathematical functions are successively applied to immutable objects to go from the inputs of the program to its outputs in a succession of transformation. It is appreciated by some because it is easy to analyze and prove. In certain cases it can be very readable.
http://www.suttoncourtenay.org.uk/duncan/accu/pythonpatterns.html.
This document exposes a few design patterns in Python. Design patterns are solutions to recurring development problems using object oriented programming. I suggest this reading only if you are familiar with OOP.
http://www-128.ibm.com/developerworks/linux/library/l-cpdecor.html.
A very beautiful article for the advanced python user. Meta-programming is a programming technique that involves changing the program at the run-time. This allows to add new abstractions to the code the programmer writes, thus creating a "meta-language". This article shows this very well.
http://www.onlamp.com/lpt/a/3388
Metaclasses allow to define new style of objects, that can have different calling, creation or inheritance rules. This is way over my head, but I am referencing it here for the record.
http://us.pycon.org/common/talkdata/PyCon2007/028/IteratorsInActionWithNotes.pdf
Brilliant slides about non trivial uses of iterators. I love the producer/consumer slide !
Related to the producer/consumer problem with iterators, see:
http://www.oluyede.org/blog/2007/04/09/producerconsumer-in-python/