May 15, 2009 at 11:25 Tags Python

Almost exactly a year ago I wrote here about giving Python a try as my main programming language. Before that I was mainly writing in Perl, and eying Ruby from time to time as the replacement.

Well, it will come as no surprise to the readers of this blog that Python won big-time. In the past year I've posted more than 30 posts in the Python category of this blog, and it's clear than Python has indeed become my main programming language. In this post I want to summarize what I've done with Python over the last year, and my general thoughts about the language.

General impression My thoughts on Python are not much different from the short summary I posted just a few weeks after starting with the language. If anything, the small deficiencies "grew on me" - I got used to the couple little quirks in the syntax, and found out that the other things are not so bad. For example, although Python doesn't have CPAN, I haven't yet encountered a need for which no Python library has been written. In this aspect the last year, at least in my view, has shown a trend towards Python from other languages. Google and other companies are releasing Python-only APIs, for instance. And I think it's hard to find another language with two such great bindings to complete GUI frameworks like PyQt and wxPython. I also lamented the clutter in Python's standard library. Well, that is being fixed with Python 2.6 and especially 3.0, which will become mainstream in a few months. Regarding Python's pluses, the significant whitespace turned out to be a much bigger one than I've ever expected. Over the last year I've read the code of many libraries, and almost always found it quite readable and simple to follow. Python's PEP-8 is a good set of rules that's followed to some extent by virtually everyone in the community, which adds a lot. Company-wide coding standards exist for a reason, and PEP-8 is a community-wide coding standard. Moreover, I've taught Python to a few junior engineers and interns at work - people with little programming experience. I was amazed at how easy their code was to understand. I've had the "pleasure" to read Perl code written by programming newbies, and it's a painful experience I would never want to go through again. Python is different.

Python-mania Python is taking over practically all my programming. Over the past year, it has completely replaced Perl and Ruby. It has also somewhat shoved C and C++ out of the picture, because Python has such great bindings to existing C code ( ctypes ), and also because it has great libraries for practically everything. But the most surprising effect of Python on me is that it's slowly but surely pushing Lisp out of my mind. Back when I was programming in Perl, I kept coming back to Lisp from time to time, trying to make the shift, not succeeding and going back. I guess I just felt unsatisfied with what I had. With Python, this is just gone. I'm fully satisfied with this language. I've very glad that I learned the functional programming paradigms from Lisp, and I use them daily in Python. But overall, Python is simply a better language. Moreover, it has a much larger ecosystem - libraries, development community, bindings, and support from large companies.

Getting things done I did a rough count of the amount of Python code I've written this year. I count commented, tested lines of code, meaning that comments and unit tests are included in the count. The result is roughly 40 KLOC, which isn't bad at all. Here's a partial list of stuff I've implemented with Python so far. Some of it at work, some at home: A couple of simple web-applications for my own use. One using plain CGI, and the other using the TurboGears web framework.

pycparser - a complete parser for ANSI C90.

Parts of a VHDL parser. This is still work in progress.

A converter between binary data description formats, such as Intel HEX.

Several versions of a recursive-descent parser for a simple language

Many scripts for Scite

At work I've developed a framework for using Python for verification of VHDL models. Python is used to write the test scenarios and generate VHDL testbenches from them.

A few applications for controlling embedded hardware via the serial port (with elaborate wxPython & PyQt GUIs)

A few applications for analyzing test reports and building summaries in a user-friendly format

A complex multi-threaded web-page download and analysis program for my own use

A couple of games: a Tetris clone with wxPython and a small game with Pygame as part of a tutorial

Analysis of numeric data with matplotlib

Parts of an assembler and linker for a synthetic language

Solved dozens of Project Euler problems, all in Python. Most of these projects were covered at least to some extent in this blog, and can be found by searching. If something interests you and you can't find it in the blog search box, drop me an email.