Smart and Gets Things Done Isn't Enough (redux)

I've recently had the pleasure of helping some clients with staffing needs. I haven't been helping from a recruiting perspective but more from a candidate vetting and team building perspective. I have long been from the Spolsky school of thought on hiring. Candidates should be smart and get things done.

Joel's premise is very simple. When recruiting, don't worry about years of experience, educational background, publications and so on. Instead ask yourself two key questions. Is the candidate smart, and can they get things done? If so hire, if not pass. For a town like Indianapolis, this can be a great way to hire, especially if you are using a technology stack that most candidates don't have experience in.

The thinking behind this premise is that if someone is smart, learning a new technology/language/etc is trivial. That's the easy part. I've personally found this to be very true and often hired people with little to no experience in the technologies employed at a company. But, smarts isn't enough. If you're a PhD with loads of publications and can't code your way out of a paper bag or worse, just can't produce, then you don't meet the second criteria. Hire people who get things done.

Recently I've been helping a client hire a senior systems engineer. As I started talking to potential candidates I realized that I needed to add a third criteria. Understands the fundamentals. I look at it this way. If I was looking for a doctor, smart and gets things done only gets them so far. If they can't diagnose, based on experience and understanding some fundamentals, I don't want them as a doctor. There are just some things that doctors need to know.

Granted, I'm not hiring anyone that will be in a life and death situation. However, there are some things in my opinion that people need to know. It's not a lot, but it's important. If you're a system engineer and you can't tell me the difference between a switch and a hub, or what some basic RAID levels are and what good applications are for them, those just seem like basic fundamentals to me. If you're a software engineer and you can't give me a basic rundown of the differences between a hash table and a binary tree, those are fundamentals.

Can people learn the fundamentals? Sure. Of course. Absolutely. And a smart person will pick them up very quickly. However, while they're learning those fundamentals they're likely making mistakes, some that could be very costly to recover from. This isn't a new idea but my point is this. Knowing the fundamentals gives you a broader base for sound decision making, and great employees make sound decisions.


8 Apps for Mac Developers

I write software on my Mac. Java, Ruby, PHP, Groovy, whatever. Sometimes it's running in a VM on my mac, sometimes it's running natively. Now, when I first switched to a Mac 3 years ago, I was coming from 7 years of being a Linux desktop guy who was used to WindowMaker. Keystrokes and shortcuts for everything, the shell and VIM, obnoxious customizations, that's the life for me. Below is my short list of apps that help me achieve Mac zen.

Alfred App is a functional replacement for Spotlight and mostly for Quicksilver as well. In a keystroke you can launch an app, open a file, calculate some numbers, manipulate iTunes, go to a web page, or any other number of things. Alfred learns from your usage patterns and gets better (quickly) at knowing what you intend to do. Love it. Pay for the power pack, it's cheap and supports the project.

Getting Started with Alfred from Alfred App on Vimeo.

SizeUp allows you to entirely manage your windows with only keyboard shortcuts. Maximize, move between monitors, split the screen, center, etc. It's magical.

Quicksilver Triggers
So why do I still have my trusty Quicksilver around if I have the amazing Alfred? Triggers! I like to be able to fire up an app via shortcuts. For example, the terminal console comes up automatically when I type 'alt + c'. Very nice.

zsh and oh-my-zsh
I switched to zsh after almost 10 years as a bash user and still finding all kinds of useful things it does for you. The oh-my-zsh add-on adds a bunch of nice functionality; themes, plugins, etc. You can find my fork of oh-my-zsh here. Some of my favorite zsh features:

  • Intelligent tab completion. Say you have the following files in a folder: servs.csv, servs-1.csv, servs-2.csv, ...., servs-n.csv. Just type -2 (or -n), hit tab, and zsh will complete the file name for you. No typing s-n like in bash.
  • Share history across sessions. If you ever have long running shell sessions, being able to hop back and forth between them and have a shared history is extremely nice.
  • Global variables. I find myself often doing something like: find . | grep -v svn or ls -la | grep -v svn. Just do alias -g XC='|grep -v svn'. Now you can run find . XC and be done with it.

Growl and Hardware Growler
Growl is great. It can annoy me about all kinds of things like failed unit tests, coworkers bothering me, etc. HardwareGrowler is a nice add-on that let's me know about all things hardware related: network card status, airport status, USB device changes, etc. Again, no sexy screenshot here but I find it pretty useful.

Skim PDF Reader and Note Taker
I read a lot of mostly technical and legal documents as PDF files. OS X comes with several options for reading PDF files (Preview is built in, Adobe Reader is free) but I dislike both apps: memory hog, takes up lots of disk space, is slow, has this terrible update mechanism that likes to overtake my computer, is missing lots of features (unless you upgrade to a professional version). I'm just not a fan. Skim is a free PDF Reader and Note Taker for OSX. I especially prefer Skim because it's lightweight (like Preview), but feature rich (note taking, bookmarks, highlighting). This screenshot shows 2 different types of notes (inline and anchored) and highlighting.

Homebrew is a package manager for OS X. I switched to it from Port because frankly Port sucked and was often missing or had out of date packages. Once you've installed brew you'll instantly have access to all of the nice command line tools you've become accustomed to: GNU coreutils (ls, df, etc), memcache, links, etc. Just brew install foo or brew search foo. That's it.

Okay so Spaces isn't exactly new but it's essential to my workflow (which is also may or may not be fairly specific to me). Think of spaces as being a collection of desktops. Each desktop can have it's own apps running on it. For me, I have 4 spaces (each accessible as keyboard shortcut alt-1 through alt-4) that each contain specific windows.

  • Space 1: Instant messenger, IRC, email
  • Space 2: Web browser
  • Space 3: Console windows, IDE, debuggers, VMware, etc
  • Space 4: Multimedia, iTunes, etc
This allows me to switch between essentially different work environments and helps me minimize distractions. IM windows stay on the IM space while I'm doing development work, etc. SizeUp also helps me out here by allowing me to very easily move windows between spaces.

That's it for now.


What's next?

My last day at ChaCha was on 10/15/2010. Since I left I've done a bunch of traveling, seen some family, done some volunteer work and generally tried to relax a bit. No one seems to care about that though, everyone just wants to know what's next. Well..