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…
- 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.
- 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.
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.
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.
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.
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.
- 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.
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.
For other languages, having a sandbox source file that you can quickly save, compile, and run is almost as good.
A few online examples:
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: