2006-06-05

In the spirit of Guido's old-timers blog entry

Guido posted to his blog asking for comments from old-timers. In the spirit of that, this youngser is going to blog about his history with Python and I ended up on python-dev.

I learned Python in late 2000. Before I transferred to Berkeley from junior college in January 2000 I had the intention of double majoring in philosophy and computer science (I had taken two CS courses; intro C and PASCAL in junior college previously, but basically had no programming experience). Unfortunately I had been bad information back while I was deciding what I wanted to major in after my first semester of junior college, leading to me dropping the possibility of majoring in computer science.

Not double majoring was actually okay, at the time. It was the Boom and you could get a good intro programming job if you take the lower division CS courses at Cal. And so I had decided to take those courses and whatever upper division courses I could.

I didn't get around to taking the first CS course, CS 61A, until Spring 2001. Leading up the course I knew it focused on exposing you to various programming paradigms, which included OOP. I took it upon myself to learn an OOP language before I started the class so I could be prepared. I researched online a good language for OOP and I had settled on Perl or Python. After reading enough times that Perl should be your "fifth or sixth" language you learn, I went with Python, version 1.5.2 .

I bought "Learning Python" and read the book. I instantly just clicked with the language. I subsequently used the language for *all* personal programming projects, even after I ended up learning Scheme, Java, C, and MIPS in the 61 series at Berkeley.

During this time I was doing web site work for my dad. I charged him by the hour (and at a family discount =) and I needed to record my hours. I wrote a simple command-line app to act as a punch clock, but I needed a way to read the logs and calculate the amount of time. Unfortunately time.strptime(), which I wanted to read the timestamps in the log file, was not available on Windows.

So, doing what any good programmer does, I scratched an itch. An implementation of strptime() already existed online, but I didn't like how it was structured. I ended up writing strptime() in pure Python from scratch, still requiring locale information.

Also going on at this time was the creation of the Python Cookbook. Thinking it was a cool idea and wanting to see what people thought of my code, I posted strptime() and some other code up.

Nothing much happened until O'Reilly started to deal with licenses on the code. I had put a simple license at the top of my file and O'Reilly wanted everything in the book under the same license. This is when Alex Martelli emailed me to relicense my work. I started to email with Alex some and basically got to know him a little.

Time moved on and I began approaching graduation. The whole time since I wrote strptime() I hated that I had to provide the locale information. There had to be a way to get the info you needed automatically. This is when I had the revelation that everything I needed was already available in strftime(). The trick was figuring out how to get the data from it. That led to the second epiphany of a well-crafted format string with the proper date would lead to an output string that could be parsed with regexes to figure out the locale information to be used by strptime().

So I coded up strptime() to use strftime() to get the information it needed the weekend after I graduated. At this point I was already a strong proponent of Python and a hater of Java. I emailed Alex if he thought this should go into the stdlib, and he said yes. So I posted it to SF and emailed python-dev on what the next step was.

I was told I did what I needed to and I got some help to add the function to the 'time' module (since strptime() is in pure Python while the 'time' module is in C). Since I had already subscribed to python-dev, I just stayed on.

Realizing that I enjoyed python-dev, wanted to contribute, and that I needed coding experience, I decided to force myself to get deep into Python. So, during my year off between my bachelors of philosophy and masters in CS, I started writing the Python-Dev Summaries in August 2002. Having to actually comprehend what everyone was talking about made me learn very quickly how Python worked underneath the hood.

I continued to submit patches and bug reports as time went on. I went to PyCon 2003 and participated in the sprints that year. Met everyone for the first time there; Guido, Jeremy, Tim, Barry, Thomas Wouters, Fred, Ping, Aahz, and probably others that I can't remember right now. It was a great experience.

The following month, I bugged python-dev to look at a patch I wrote. Guido asked why I didn't check it in myself. I told him I didn't have checkin privileges. He said I did now (as of April 2003). =)

My addiction to Python continued. I became a major proponent of Python at Cal Poly SLO where I got my masters. Did my thesis on type inference in Python. I gave a tutorial in Python while I was there. Rumour spread at school and I ended up random people asking me, "if I was that Python developer".

I continued to attend PyCon. I have yet to have missed either a conference or sprint. I have been lucky enough to meet almost every member of python-dev over the years.

Come PyCon 2005 I stopped doing the Python-Dev Summaries. But that didn't stop me from still contributing to Python when I could. I managed to get an internship at Google based on my Python experience which was really cool (and it has managed to get me another one this summer). My Ph.D. dissertation topic even involves Python. The last thing to do to complete my Python addiction is to push Python at UBC, which I plan to do when I get back there after my internship. =)