To Steve Yegge

Below is a good chunk of an e-mail I sent to Steve Yegge. It was basically a summary of what programming related things I have been doing and where he thought it was enough to get a job.

First a short list of some of the things I am now doing related to that aim (I'm sure you will recognize some of these from your posts):

+ I subscribe to a number of programming blogs
+ I use emacs (though I'm still not happy with my configuration)
+ I started learning to touch type (in Colemak)
+ I'm programming in lots of languages
+ I'm trying to optimize the way I work
+ I read a bit of wikipedia, stackoverflow, ted.com most days
+ I've started Project Euler challenges in python
+ I have written a minimal Scheme interpreter in C++ & Digital Mars D
+ I have written very simple scripts in BASH/grep/find/cat/sed
+ I use Linux (in the lab), Windows (at home) and Mac OS (at work)
+ I have read SICP, GEB, Design Patterns, The Pragmatic Programmer

About me (if you're actually interested)

I am a UK PhD student currently studying Electrical Power Systems, which involves a lot of work on artificial intelligence. Before that I did a BEng in Electrical Engineering involving writing a Genetic Algorithm to optimize settings on a controller for a virtual mag-lev train. I wrote the GA, the integration algorithm, the simulator and the GUI in C++.

Started programming in Macromedia Director Lingo, moved on to VB/VBA in school, taught myself HTML, CSS and a little bit of PHP so I could design a couple of websites. Took an online course in Game Programming that taught me C++ & DirectX/Win32 API. At University I had courses on Unix & C, Java, Matlab, and PIC programming in assembly. I would only really say I am comfortable writing C++ and python, I can read and understand the others, not sure why but I really dislike Java. I haven't been taught much computer science but I think my math is good.

My Aims

+ Learn a pure functional language
+ Learn a bit of Forth
+ Learn a more of Python
+ Read a book on:
- Compliers
- Algorithms
- Regular Expressions
- Mathematics for Programmers
+ Read the following:
- Programming Language Pragmatics by Michael L. Scott
- Hacker's Delight by Henry S. Warren
- Refactoring by Martin Fowler
+ Improve my scheme interpreter by:
- Implementing macros
- Implementing call/cc (then hopefully understand it better)
- Re-writing in python
+ Learn how to use threads

The Questions

1. I'm struggling to learn a different keyboard layout, do you think it's really worth it?

2. As I haven't done a CS degree is there any thing I really need to know that I haven't covered?

3. Out of my aims which do you think are more important, are there any pointless ones, or ones you would like to add?

4. Do you think that if I achieved my aims I would be good enough to be hired?

5. Is there resources other than Project Euler that will give me tasks to make me learn a language better.

6. How important is doing the exercises in the book I read? How many do you do when you read a new book?

My emacs Annoyance

I found emacs to be like my iPhone; amazing yet annoying. When I got my iPhone I was amazed at all the new things I could do and how easy most tasks were, shortly after that I was annoyed that they hadn't done more, it's not complete.

emacs has the potential to be just about the best application ever made but for me the default settings suck. It took days to be able to use (which isn't a problem) but weeks in and I'm still struggling to get things like auto-completion working how I want it to. It's as if you have to live in emacs and hack everything together yourself. Still, I cant go back to any other editor now, emacs is just too good. But I will remain frustrated that all those things that I want to do and I know are possible are going to elude me, unless I take the time to get it working myself.

It's like the difference between Firefox and Opera. Firefox gives you a pretty basic web browser with the magic ability to add to it. Opera gives you an advanced web browser out of the box without the ability to add to it. I used to use Opera because the addons for Firefox don't work well with each other and it would take a long time to get it working how I wanted. It's the same with emacs, but there is no equivalent (maybe TextMate).

Before this get too long I will end it, thanks for reading up to this point.

James Brooks