Contact
My email address is in my resume.
If you don't like the resume route, it's a gmail account with a username from the following pseudo code:
n = (my name as given in the footer of this page); return n.toLowerCase().split(" ").join(".");
A few short bits
If I won the lottery tomorrow, I'd still be writing code.
I just love it too much.
The Mythical Man-Month anniversary edition, in the section "The Joys of the Craft" p. 7, really explains
why software engineering holds such a strong appeal to me.
To quote Brooks from that section, "The programmer, like the poet, works only slightly removed from pure thought-stuff", and
that rocks.
I had a friend who dropped out of CS from the realization that a new programming language, platform, or paradigm could come along every few years. I've realized that picking up a new toy every 6 to 12 months is a key selling point for me. I'd probably switch professions if the evolution related to CS didn't have such a rapid turn-around.
A conversation with an extended family member about what appeals to me in my current job revealed the fact that I'm almost as fascinated with the politics and people in life as I am with programming. Life has so many puzzles. I read once that part of the definition of fun is the joy of pattern recognition and reapplication. I wonder sometimes if there aren't far more interesting patterns to be found in people than in programming, I just wish people and interactions came with a REPL! ;-)
Good Languages
Clojure: You might notice that Java is in the Ugly list.
This only means that I dislike traditional approaches to development in Java - I have
no problem with the Java Runtime - or it's billion libraries.
Combine those two with the clean AST-like syntax of Lisp and encourage the use of
delimiters other than parens and we have a deal!
ActionScript 3: Where to begin? ECMAScript with enhancements is a plus. Flash player distribution is a plus. A general OOP approach is not too much of a negative, since the language supports many non-OOP 'loop-holes'. Simple syntax and a very easy learning curve is a plus. There are only two main negatives: it's not fully Free, and it's in a pretty restrictive sandbox.
XSLT: If you're looking for a semi-gentle introduction to Functional programming this might be it. It's an interesting experience working in a language that has no concept of variables. I haven't touched it in years and years, but it twisted my mind sufficiently enough so that I wasn't too put-off when I came across OCaml, Scheme, Lisp, or Clojure.
OCaml: Really a fantastic language. Too bad it's wrapped up in academia. I really wish that it came with a mini scripting language. It has everything else... Functional, Procedural, and OOP. REPL, runtime interpreted, compiled to bytecode, and compiled to native code. I really struggled getting past it's odd syntax. Lines can end with no semi-colon, one semi-colon, or two semi-colons. It's almost as if they made the learning curve steep to keep the masses out.
Ruby: I used to do quite a bit of quick-n-dirty scripting with Ruby. Then Rails came along, and it seemed so hard to have a conversation about anything but. Nice that Ruby is more widely known, bad that it's not known for all the other cool facets.
Verilog: To be able to say that I created a CPU from the most basic logic gates is pretty energizing, even if I didn't design it. This language almost had me switching from CS to EE or CE. I still think it was the right choice to stick with CS.
Bad Languages
Assembly: I've only had this for part of an introductory CS class years ago, and it
just took too much to get things done. Ruby's conciseness ruins Assembly's verbosity.
C: Pretty much the same claims as those against Assembly. It's not really so much a bad language as it is a boring one.
C#: Microsoft. Sorry. ECMAScript is a good foundation though.
Ugly Languages
Java: For very entertaining reading please refer to
one of the best blog posts I've seen about Java.
C++: Yeah, this could easily make it out of the Ugly list if I had 3-5 years professional exposure to it. For now though, it's just too much.
Scheme and Lisp: Homoiconic - fantastic. Not recognizing symbols other than a paren for data structures - really not fantastic. I was getting pretty geared up for using Lisp (Clisp) in my day to day work until I stumbled upon the, "We can't do threads and we won't be doing threads" barrier (again, Clisp). The search for a threaded lisp ended with Clojure.