Wednesday, December 22, 2010

What do employers want?

I have pretty much had to teach myself everything I have for the last 2 years.  I taught myself perl (though not willingly).  I did get to go to some SAS and Sata training classes, but I had to actually learn how to send SCSI, SATA or SMP commands by myself (admittedly, by looking at other people's code).

I also taught myself the basics of SQL...just enough DDL to create some tables with constraints, and some simple queries (including inner joins) and enough inserts to populate the various tables.  This included figuring out JDBC (through jython and java) and how to work with the result sets they returned.  And speaking of jython, I had to figure out the differences between jython and python.  I also had to learn a tiny bit about java servlets as I used jetty for my test http server to serve up a jnlp file.  Learning the basics of maven came in real handy for this because not only did it do the verification and creation of the signed jars, it also launched the jetty server in my maven project.

I also taught myself a big portion of the more advanced uses of python, including lambdas, implementing some of the "magic methods", or using ctypes to call into shared C libraries instead of using the black box that is SWIG.  I also wrote a proto-type GUI using wxPython that had a built in pyshell (so that any element of the gui could be modified or read from the shell itself....python introspection rocks!).  It was in all my python work that I finally became comfortable with recursion.   And because I've been doing more python work, I got interested in the mercurial SCM (although I appear to have picked the losing horse in the DCVS game since git appears to be winning more and more converts).  And using Sphinx for documentation is really nice.

Right now, I am in the process of learning Eclipse plugins.  This by necessity also means that I have to understand SWT and OSGi.  I have so far written some really basic plugins, with the most advanced one being a stand-alone tree view that using JFace (unfortunately.....Eclipse is by far the worst documented gui toolkit/framework I have seen, and I have written modest GUIs in swing, wxWidgets, wxPython, and Qt).  Given that I consider myself a mediocre Java programmer at best, I consider it pretty amazing that I have gotten so far so fast.

The common theme running here is that I am self-taught.  For all the examples above save learning SQL, none of my co-workers helped me.  I am not afraid to learn and in fact I enjoy learning new things.  I have discovered that this is a rare trait.  Heck, I even taught myself the basics of C++ before I went to school.  So while I consider this a valuable trait, I often get the feeling this isn't what employers want.

My feeling from reading job postings is that they don't want someone who is teachable or trainable....they want someone who already has (some expert level in) some skill.  While to some extent I can understand this if they want a team lead or senior position, I don't understand this for ALL positions.  In my own opinion, some one who has shown that they can learn is more valuable than someone who has lots of experience in one thing.

Why?  Because someone who knows only one or two things really well hasn't proved that they can think in different terms.  One thing that learning multiple languages has taught me is that there are different ways to model or solve a problem.  When I first started learning python, I had a hard time wrapping my head around the fact that variables weren't typed.  When I started learning XML, I started making all config files xml files.  But when I started learning databases, I started thinking in terms of getting results from a database.  When I learned OOP languages like C++ and Java, I thought all solutions had to belong to classes (the kingdom of nouns), but as I started learning clojure, I realized that types and polymorphism didn't have to be object oriented.

Is it nice to know RabbitMQ or Selenium or Wicket or ActiveRecord...blah blah blah?  Sure.  But I think it's more important to find someone who can pick up anything new.  Someone who could write device drivers, write back end web server apps, find patterns from a database, write thick client GUIs, and everything in between.  Then again, maybe that's just me.  I am a jack of all trades, master of none....but that's how I like it.

No comments:

Post a Comment