Regardless of the language you’re writing, dialing in your environment is what makes or breaks your efficiency. The focus of this post will be on my Ruby environment, namely the configuration and tools I use on a daily basis. This isn’t a comprehensive list, but lists the vitals of my day to day operations. Using and doing the following have saved me countless hours and really given me the room to grow. Use them to break the glass ceiling of inefficiency. After a few months as part of the consulting team at I’ve found a few new tools thanks to the other consultants there, and really solidified my opinion on everything below.
Enter a saying about a craftsman not being better than his tools or a pithy retort that a good craftsmans tools don’t limit him. Tools won’t limit your talent or thinking abilities, but they’ll definitely increase your consistency and output. Spend more time building, and less time cursing at subpar equipment. Look for the following traits in your tools:
- Simplicity: You should be able to start working right away, minimal to no configuration needed to take advantage of advanced features. Talking about you, Emacs1
- Powerful: It can do what you need all the time, provided you know how to type into and articulate to Google what you want.2
- Focused: Do a task, and don’t distract from that.3
- Free: Many good tools have paid versions, but it speaks volumes when an author is confident enough to let you use a 99% uninhibited version for no cost. Thanks guys.
I’ve tried a handful of editors over the years, and Sublime’s my goto for everything now. Easy customization and concise package management make adding language highlighting or tweaking any functionality a breeze. What brought me to it was my search for something that can edit multiple lines simultaneously. What’s kept me with it is the fantastic amount of packages available to handle extra functionality and built in regex or regular find/replace that can search whole directories easily. DRY up your typing life and give multiline and regex editing a whirl.
Manage collections of API calls, share said collections, and clone them to make minor edits. Hell, you can even set variables. Never have to reverse search your terminal history again to find that CURL command with tons of headers and a long URL with multiple params. Real lifesaver the instant you start to develop APIs or interact with them.
Insert the above into your code wherever you need a breakpoint (or webconsole in your views/controllers to investigate front end issues). It’s a great way to jump right in and identify where an error is occuring. Sometimes I’ll cheat the TDD process by playing around in a binding.pry to identify issues and then writing a test off of that rather than trying to write a failing test (hard when you’re dealing with legacy spaghetti code where you may have to instantiate a multitude of objects with a certain state). It’s also an excellent tool to insert into a test suite to manipulate your setup as the first line of an it block rather than restarting your test suite to make tweaks. This is extremely helpful when dealing with monolothic apps with a long boot time.
I fucking love terminal interaction. However, git’s an amazing graph based versioning software, and adding visuals to it makes the process more natural. Shift some of the burden of processing what’s going on with all your branches onto the visual parts of your brain. Integrating github and pivotal tracker with issue tagging really eases the workflow and keeps an excellent trail of what you’ve been up to, which is fantastic to have on hand if a client ever asks. It’s much better than emailing them a git log.
Having your system properly configured will save numerous headaches and time sinks down the road.
GoRails keeps this updated for various popular systems. If you’re not using one of the more popular systems then you’ve probably got the smarts to make the appropriate changes for your setup.4
Setup your global credentials and password caching.
git push origin master… never have that queue a password prompt again.
Allow individual directories to run on different ruby versions plus easily switch ruby versions and the associated gems with quick commands. Absolutely essential if you have more than one project going or think you’ll ever want to try out a new ruby branch. Some people prefer rvm
It’s like rbenv, but for environment variables. Again, this is essential when you’re engaging with multiple clients or projects. Simply do
VARIABLE='230r823fhjwuve' and you’re good to go. A quick note: quotes aren’t necessary, but they can sure save you time down the line when you deploy to a system that takes issues with a special character in authentication tokens for APIs. Bash and unquoted
Location, location, location. 90% of you were thinking that anyways; it’s fulfilling to have writing exactly meet expectations, however briefly. This is highly subjective matter, but think about what I say and identify whether or not those same things apply to you. Imagine that for every 10 people that read this, one person finds one item in the following that increases their productivity a few percentage points. After a certain amount of traffic, I’m essentially solving energy and income crises. Just throw my Nobel in the corner.
A noisy work environment saps my energy and will to work. Noise and action means it’s time to either party or work out. For whatever reason, I can give about 30 minutes of dedicated work when there’s audible distractions. Given the exact same conditions minus the noise, I’ll work for hours, no issues. Even having mid level studio headphones that aren’t noise cancelling is usually enough to block out the external noise to a degree that I’m highly functional.
Clutter in my immediate physical surroundings projects clutter into my brain. The best way I can describe this is like having a fog over my focus. Imagine a bubble that extends between you and your screen(s)/notepad. Each additional item within that bubble adds a little mental noise to what your brain processes; even if it doesn’t move. Personally, my limit is about 3 non work related items within this area.
External movement has essentially no effect on me. As long as it’s not within a few feet, I couldn’t give a damn. Some people get distracted by cars hundreds of feet away, while I find that same style of motion mentally stimulating, like an ant run or a good visualizer5. I’m sure there’s a portion of people in the world who would be driven crazy by either the ants or visualizers, but for me, traffic and visualizers both share the common trait of following patterns that flow, project and evolve on themselves. It’s a metaphor for learning and internal development, or something like that.
As I mentioned earlier, given enough blog traffic, this post could literally save the world. At least until the sun expires or throws some crazy EMs our way, fries all electronics and we enter a dystopian future with roaming gangs of cannibals and other madness. For anyone who says that makes me a pessimist, I direct you towards5 the fact that I truly believe Winamp will come back. Now go out there, and do something useful.
Emacs was like a high maintenance car for me. Loved the damn thing, but fuck life if your settings weren’t backed up and easily accessible. Definitely something to be said for checking your ~/.* files and folders into a git repo. ↩
Mixed language file indentation and highlighting, notably Ruby/HTML were never 100% correct. Again, Emacs. ↩
No, my toaster should not be social media connected and compliment me. Just make the damned toast. The instant something does more than it should is when its actual inteded purpose starts to lose momentum. Never compromise your momentum. ↩
Possibly you’re more enamored with wasting time rather than developing. Making life harder than necessary is a trademark of idiocy. ↩
If you enjoy having free time and the peace of mind that a professional is on your side, then you’d love to have me work on your project.