This is an archived course. Information may be out of date, some links are broken and email addresses have been removed.

03 My career: programming/research

Brief overview: I'm a 23 year old computer programmer. I've only been
out of university for the last year, and since then I've had two jobs:
the first as a research assistant/research programmer, and the second
one as a Python developer in a company working primarily on financial
systems. I'm currently divided in the medium term between a few career
paths: research and programming.

My family had their first computer from when I was aged 8 or so (very
late 1980s). The computer was pretty old for the time: it dated from
MS-DOS 1 days and didn't have a hard drive. It was using this computer
that I taught myself to program, but not very well. After a certain
point I was afflicted with a programmer's block: "I don't know what to
code!" and while I retained some of the knowledge I'd taught myself,
including a fairly considerable knowledge of the DOS command line, I
didn't do any programming for years after that. We got a then-new
computer in 1993, but I hardly did any programming on it. I spent a lot
of time playing with the fractal generator fractint instead, together
with games.

I did a computing/programming course in late high school and learnt
Visual Basic. I didn't have a very good experience with my teacher and
some of my classmates though and while I enjoyed computers a lot I was
vaguely intending to do theoretical science and mathematics at

I ended up enrolling in the classic all-rounder degree in Australia: a
combined Bachelor of Science and Bachelor of Arts degree. (This is also
a bit of a parental nightmare: it's a five year program instead of three
for one degree, and it has no obvious vocational merits.) I really
wanted to do chemistry and mathematics in the science degree, but I
needed four first year subjects so I took philosophy (for the BA) and
computer science.

It worked out during that first year of university that I didn't
actually like my chemistry classes that much (I also became ill at a
really bad time and ended up bombing organic chemistry). I also began to
learn C that year and found some fun in (small) program design, so when
I continued with the science subjects in my second year I continued the
computing as well as the mathematics.

Now we come to the first regret: mathematics. I have good mathematical
ability, although I don't think enough for a mathematics research
career. And I loved it in high school, in large part due to having an
excellent teacher during the last three years. But I just didn't put
enough effort into it at university. Those three years of mathematics
are pretty much a waste: I've retained very little of it. In hindsight I
would enrol in slightly easier mathematical courses, the ones designed
for people who need it as a secondary skill rather than for mathematics
research, and would focus on courses that support computer science. I
probably would have emerged with far *more* mathematical knowledge than
I did from taking harder, research-oriented, courses.

Anyway, I finished the maths and computing parts of my degree in 2001
and in 2002 I finished the BA with philosophy and linguistics majors.
The latter, another course I enrolled in essentially to fill in credit
points ended up interesting me a lot.

In 2003 I switched universities to do a one year honours degree in
computing with a computational linguistics -- computers and human
language -- thesis. (An honours degree in Australia is based on the
Scottish system: most Bachelor degrees are three years duration, and an
honours year is an optional four year with a major research project. If
you get a "first class" or good "second class" mark in the honours year
you can proceed to a three year PhD program.)

I actually think of computational linguistics as being divided into two
things. The first is using computational techniques on linguistic
problems: as a hypothetical example think about trying to create a
mapping of Mandarin phrase structure onto English phrase structure.
Computational techniques might be useful because computers are such fast
data crunches: they will almost inevitably do a better statistical
analysis than you will trying to do it in your head. The second is
trying to integrate human language into computing applications: voice
interfaces to programs, natural language output, and that sort of thing.

It works out that I'm more interested in the first problem than the
second: I want to use computers to help me learn about language, rather
than using language to make better applications. But the money, and
hence a lot of research energy, is really in the latter.

After this I'd been at university for five years and I was pretty tired
of it. My aim last year was to work for long enough to go on a trip
around the world. I ended up doing this by working as a research
assistant for academics I'd done honours work with. I worked for six
months from February to August last year, mainly in Python and Perl on
various projects.

I found this oddly dissatisfying in many ways. At university I met a lot
of people who were dedicated to software engineering almost as an art
form: programming style was very important to them. Whenever that meets
the real world it's a bit of a shock, but I found the academic work very
frustrating actually because the programming is very much behind the
scenes. You never display your code actually running when you present at
conferences. The code need not be able to stand up by itself, it just
has to hang together long enough for you to be able to analyse its
performance. This is partly due to the way computational linguistics
works: you're aiming for a high degree of, say, speech recognition or
text understanding, but not for 100% accuracy as you might be when
working on, say, parsing a programming language input file.

Anyway, my contract ended in August 2004 and I travelled from Australia
to the US, several European countries and Thailand before arriving home
in late November with very few savings left.

I applied for a couple of jobs in Python programming in December and got
both of them. Python isn't a bad language for a graduate level
programmer in Sydney and Melbourne: there's not huge demand for it, but
there's even less people who know it well, so if you're one of the few
people who do, you can get a job relatively easily.

I heard about the first job through a friend who was leaving it to take
another position, and I got the second job by emailing someone who had
been looking six months ago and asking if they were still looking!

I ended up decided to take a job in a company with ten or so other
programmers rather than being the sole programmer in a hosting company.
I chose this because when it comes down to it, I'm not hugely
experienced. I'd rather get experience working with clever people with
more experience than by muddling along by myself at this stage of my
knowledge. (I know several programming languages quite well but I'm not
very experienced at working in teams.)

This is probably not the best time for a 'current job' summary: I've
only been at the new job for about five weeks! At the moment I'm
enjoying getting to grips with a large in-house code-base: it's a
different skill from building code from scratch.

My current job is working with a Python codebase that's evolved over
five or so years to perform various "financial" tasks (such as credit
card transactions and the like). I'm actually surprised at how much I'm
enjoying it: I started the job a month or so ago with the intention of
leaving eventually to do a PhD. But if it continues working out well I
may rethink that: I don't have a research problem that I'm really
passionate about at the moment and I think giving up three or more years
of work for a very poorly paid research studentship is something that
requires a lot of passion.

Some random conclusions I've drawn from my career history, such as it

1. Going to university is rather pointless unless you're motivated to
do well. If you're going to spend four years drifting that's great (no
really, I have a lot of respect for people who decide that full-time
careery stuff isn't their thing and they want to work a bit to pay rent
and then spend a lot of time hanging out), but why pay for tuition
you're not really using when you could have more free time and less
stress with a part time job? These days I tend to encourage people to
drop out or defer their course if they're having motivation issues,
having seen some people stick with it go through six or seven years
losing every single academic passion they've ever had.

In my case, I really wish I'd spent less time beating myself up over my
lack of motivation to study for certain subjects and spent more time
trying to find subjects that would motivate me more. Motivation is a
two way thing: it's as likely to be a problem with the course as it is
with you, and most likely it's that you're not designed for each other.

2. Going to university can be great. The good things I got out of
university personally were contacts with a lot of very smart and
interesting people; and exposure to people who were amazingly
passionate about their work. Oddly, I found the very smart students in
computer science and maths (largely) and the amazingly passionate
lecturers and researchers in history, philosophy and linguistics

3. Networking is super-important, and Linux User Groups and free
software groups in general are a great way to meet smart people, and to
meet people who can help you get a job. University is also a pretty
good way to meet these people. If you're keen enough to get involved in
a computing user group and do some volunteer work for it, people will
remember you as someone who is likely to be a good employee.