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?
March 16th, 2006 at 11:36 am
You could use JScheme or Jython or something similar if you want to use Lucene. Java is both a language and a platform, and most Java libraries are more about the platform than the language. (Same goes for .NET, Dot-Scheme, and IronPython.)
Which is why I don’t have an answer to your question– I haven’t learned a new language in ages, because I can use the ones I already know and like (Scheme and Java) with pretty much any technology I’m interested in.
Hm, I guess that’s not entirely true. I’ve been learning (or at least planning to learn more of) ECMAScript so I can do Volity UIs (and AJAX stuff, eventually). But I’m not learning it just for the sake of learning a new language, so I already have a target application to build.
But now I want to make a Scheme interpreter in ECMAScript…
March 16th, 2006 at 5:17 pm
JScheme? Is that different or better than SISC? Is it cool? I used SICS to prototype some things a couple years ago — dispatch based on parameter types made the prototype come together a lot faster.
I actually do use Jython for some things. I guess I was just thinking of it as Java, though, platform-wise. I wish a Jython with the more recent Python language features was available. It’s hard thinking of Jython as Python without generators… I suppose I was already thinking of “Java” as a platform more than the language, though the vast majority of the code I’ve written for the JVM has been in Java because all of my good JVM-y tools are for Java.
When I finally get around to using .NET for something again, I’m certainly going to check out IronPython. It’s been on the list, but I just haven’t needed to do anything with .NET.
I finally had to learn more JavaScript (er, ECMAScript) when I wanted to write a Firefox extension. That was when I discovered I had been judging JavaScript’s merit based on the sorry implementations of it that were available in browsers long ago. Of course, then I had to, in addition to the project I had in mind, write a MUD client Firefox extension.
March 16th, 2006 at 8:33 pm
I haven’t actually used JScheme or SISC, but I’ve used Kawa and it was pretty cool. I imagine they all more or less get the job done, i.e. let you write Scheme programs that can call into Java classes. Actually it’s not hard to hook any Scheme that has a foreign-function interface up to JNI– I remember doing it with Larceny, and I’m pretty sure people have done it with PLT Scheme.