I have a lot of experience, including 5 years with one of the leading internet companies. I have developed a wide range of software, from web applications using Django to distributed applications processing large quantities of data. In addition I have good in depth knowledge of the administration of linux servers and clusters.
My original background is in Linux systems administration, especially low level maintenance of clusters. From that I moved into large-scale machine life-cycle managment (cradle-to-grave automation of maintenance of hundreds of thousands of machines). The use of web based report and monitoring systems gave me a good grounding in Django and challenging web programming.
I currently focus on Django web programming, developing systems from scratch and also maintaining existing systems.
I place a high priority on clean, well written, readable. well-commented code.
I believe in Djikstra's aphorism that each line of code written should be seen as a line spent, not a line produced.
I believe that a system should be built for the future
- that code should be written so that it will be easy for a new programmer to read and understand what is going on.
- that a system should be written with the assumption that any particular part may need to be replaced as the system scales in any one of a number of ways.
- that a system should be build in a way that is easy to explain to a non-technical person.
University of Bradford
Postgraduate Diploma in Computting
1997 - 1998
various technical roles
2008 - Present
Worked on various short contracts on a variety of technical issues in IT, theatre and live music.
2003 - 2008
I worked on the management of Google's vast fleet of servers, focusing on automation of the tasks involved in testing, repairing, tracking and decommissioning these machines. This involved designing solutions on individual machines and then scaling these solutions up by many orders of magnitude so that the operations could be carried out on vast clusters. Typically I would solve low level system problems, then write code that would solve these problems automatically, taking into account the variety of architectures and platforms present, then write a dstribution and tracking layer that would allow the code to run on many many thousands of machines and allow the outcomes to be automatically monitored, displayed via web applications and further actions to be automatically if needed.