1. Vim: Powerful text editor.

    • Steep learning curve, but worth it.
    • Great support for most languages and markups.
    • Extensive library of useful plug-ins.
    • Vim’s predecessor, vi is everywhere, so even if you end up working on some strange device from twenty years ago, you will still have a familiar text editor available.
    • My favorite cheat sheet…
  2. Version Control: Fossil, Git, or Mercurial.

    • Easily share sets of changes with your collaborators.
    • Make point-in-time “snapshots” of your project that can be reverted to or compared against other snapshots.
    • Track changes, see who made them, and when they were made.
    • “Push” your project history over SSH to a remote machine for easy backups.
  3. Development VM

    • Use a desktop virtualization package like VirtualBox, KVM, Parallels, or VMWare Workstation.
    • Create a virtual machine, and pre-configure it with your favorite tools and preferences.
    • Make a cold backup of your VM, and deploy it to any machine that you or your collaborators may end up developing on (desktop, laptop, etc.).
    • Saves others the trouble of establishing a working development environment.
    • Makes hardware failures and upgrades a non-issue.
    • You can use the SSH-push/pull functionality of Git or Mercurial to keep changes in-sync between different machines.
  4. Actual Desk and Chair

    Hunching over a laptop on any-old-surface will mess you up.

    Get a chair that makes you sit up straight. It doesn’t have to be some kind of million-dollar-status chair — just something that keeps you sitting up straight. This can be done for well under $100.

    Have your chair or monitor adjusted so that you don’t have to crane your neck to see. Again, no million-dollar-ergo-station required. A book or two under your monitor will do.

  5. Multiple Monitors

    Most development consists of code or markup that is compiled or interpreted into an output of some sort. Having a second monitor eliminates the need to juggle between your editor, your debugger, and your output. This saves a metric buttload of time. It will also reduce your likelihood of getting a repetitive stress injury.

    If a second monitor is not feasible, try using tmux for terminal sessions, or a tiling window manager for your GUI sessions. There is a slight learning curve, but totally worth it for the reduction in window juggling.

  6. Clicky or Semi-Clicky Keyboard

    Strong tactile feedback lets you type with a lighter touch. This makes typing for extended periods of time more comfortable and less injury-inducing.

    An ergonomic clicky keyboard is even better.

  7. Streaming Radio

    Having some kind of background music helps your tune-out distractions and focus.

    Music with stark dramatic or textural shifts is probably not a good choice, so skip the Wagner and Beethoven. Go for something like ambient, chill, or some other variety of wallpaper music that doesn’t offend you.

    VLC Media Player can browse the Icecast Radio Directory from its playlist.

  8. Bug Tracking System: Fossil, Mantis, Redmine, Trac, etc…

    • Tracks and prioritizes open bugs and feature requests.
    • Facilitates better communication within your team.
    • Provides a history of why certain design/implementation choices were made.
    • Much easier than sifting through e-mails and code comments.
  9. Read-Eval-Print Loop (REPL) or Sandbox for Target Language

    Language and API documentation is frequently ambiguous. Having a small project or REPL at-the-ready for probing various APIs and language constructs lets you resolve this ambiguity quickly.

    Most functional languages (Lisp, Scheme, Clojure, Haskell, etc.) have a built-in REPL.

    For other languages, having a sandbox source file that you can quickly save, compile, and run is almost as good.

    A few online examples:

  10. UNIX Userland Tools

    Having a tool set that is semi-consistent across platforms is a big help. Getting this tool set from a single mechanism is much more manageable that having to seek-out and evaluate a variety of proprietary or freeware tools for each individual need.

    Most development is text and file intensive.

    awk Text processing / data extraction
    cat Print / concatenate files
    diff Highlight differences between files
    find Find files by patterns or attributes
    grep Find in files
    less Read-only file navigation
    lsof List open files / sockets / pipes / devices
    more Print file page-at-a-time
    sed Stream editor
    sort Sort lines of file(s)
    split Split file into pieces
    tail Display last n lines of file
    wc Count lines, words, characters, bytes in file

    Most modern development touches the network at some point.

    dig Forward and reverse DNS resolution
    lsof List open files / sockets / pipes / devices
    netstat Display network connections, routing tables, interfaces, and statistics
    ping Test reachability of host
    tcpdump Packet capture and analysis
    traceroute Display route and transit delays to a host

    Where to get:

    Linux / Unix Built-In + Native package manager (apt-get, yum, pkg, etc.)
    Mac OS X Built-In + Homebrew
    Windows Cygwin

← Older   Newer →

Leave a Reply


<a href="" title="">, <abbr title="">, <acronym title="">, <b>, <blockquote cite="">, <cite>, <code>, <del datetime="">, <em>, <i>, <q cite="">, <s>, <strike>, <strong>