Being a software developer

I’m a software developer. There are tools I like and have successfully built applications using but I also enjoy learning new tools and languages. My goal is to use the best tool for the job. As I said before, most of the time the “best tool” is not a choice based entirely on the merits of one platform over another. If I want to hack my WordPress install, I have to use PHP. If I want to use Lucene for something, I have to use Java.

To this end, I try to at least play with a lot of tools and languages. I’m not going to develop a commercially interesting application in every language out there, but I try to at least write something one or two steps up from “hello world” in lots of environments. For a long time, my “hello world” of choice was a mud client. For the typical GUI programming toolkit/language, a MUD client has enough moving parts to at least touch on several parts of an environment — sockets, text display, an input box, event handling (connecting, disconnecting, receiving lines, etc), menus, config (if the client remembers a list of servers), and displaying windows. Sometimes the toy client is a little more ambitious and includes an MCP implementation and perhaps local editing. I’ve written essentially the same toy MUD client in a whole pile of languages with a variety of GUI toolkits (Tcl/Tk, Perl/Tk (oof), Python/Tk, Python/wxPython, C++/MFC, .NET/Windows Forms, STk (Scheme with Tk), Java/AWT, Java/Swing, WinWord/VBA (I don’t want to talk about it), …). Tk shows up more than once, but Tk’s been bound to a lot of languages…

My point is that it’s helpful to have a plausibly sized toy application in mind when you’re setting out to learn enough to be dangerous using a language or framework.

Sometimes the only reason I’m learning a language is to accomplish a particular extension to an existing app or other task, for example learning enough PHP to hack on my WordPress install. In that case, I obviously set out to do whatever it is that motivated me to learn the language at all.

I figure playing with lots of languages and tools and libraries (and reading about them) increases the likelyhood I’ll know how to use (or at least “of”) the “right tool for the job” when it’s time to actually get something done. Mostly, though, I just like playing with new languages and libraries.

I don’t yet have a good toy application for playing with web development environments. I tend to progress from “show a web page at all” to “do something” but the “something” has varied for each thing I’ve been trying to pick up.

What sorts of things do other people try to build when they’re learning a language?