I write code for a living. I tend to write a great deal of Java and Scala code, along with a healthy dose of Python, Matlab, C, and SQL. Over the years, I’ve worked my way through several generations of high-end Macbooks and Macbook Pros. I’m going to describe my tools setup for my current Macbook Pro. This was inspired by the article here. This is not a comprehensive list of all my tools. I’m focusing on the ones that are my real workhorses or fill some very special niche.
- iTerm2 — THE Terminal replacement app on macOS. It’s got a ton of features, but honestly, I use it because it supports split panes … and font ligatures. Mine looks great via a material design theme and the Hasklig font.
- Fish — I love Bash. I write a ton of bash scripts. But for day to day command line slogging, I use fish for its fantastic auto-completion. Think of it like zsh, but already configured for you.
- neovim — Sooner or later you’re going to need a terminal editor. Vim is my terminal editor of choice although I prefer the neovim flavor of vim over the original. I won’t hold it against you very much if you like emacs.
- Visual Studio Code — My go-to text editor. Very full featured. Very extensible. The first extension you install should be the most excellent Settings Sync. With settings sync, I can have an identical text editor, with all my extensions, key-bindings, and sundry customizations, set up on any machine in about a minute. You can choose whatever extensions work best for your languages and tool chains, but I highly recommend taking a look at the REST Client extension. It gives about the sanest mechanism for testing REST calls that I’ve ever seen. Take a look at the Material Theme too; it makes VS Code pretty. Honorable mentions to TextMate (which I still use at times; it’s fantastically flexible), Atom, and Sublime Text. Just a side note … Visual Studio Code has excellent Java extensions and works as a surprisingly powerful, yet light-weight, Java IDE.
- IntelliJ IDEA — I been writing Java code for 20 years and Scala for about 7. Over that time I’ve used a huge range of IDEs and Java development tools. (Remember Borland JBuilder? TogetherJ?, Microsoft J++?) IDEA is the best. If you’re writing Scala, it’s really the only choice.
- Aqua Data Studio — A most-excellent cross-platform SQL Developer tool. Works with just about every database there is. Disclaimer: Besides being my favorite database tool, the parent company, AquaFold, has generously donated an open source license to support development of some of my projects. (Thanks AquaFold!)
- Dash — It’s an API documentation browser and it doesn’t add anything you can’t already find for free on the internet. But it makes it so convenient and easy to look up information on an API that it’s worth a few of your dollar simply for the time it will save you.
- Docker — It’s hard to succinctly describe Docker. Let me just say, it has become pervasive in today’s development world and you need to learn to use it. Besides making it really, really simple to create and deploy stable server apps, it’s great for any app that has specialized dependencies. And it’s been my way out of Python-environment-hell on my Mac.
- Kaleidoscope — You need a diff editor to handle those conflicts in git merges. This one is my favorite.
- MindNode — A mind map application. I find it very useful for brainstorming, to-do lists, and quick ad hoc documentation for REST APIs. I can share the mind maps with MindNode on my iPad.
- OmniGraffle — My diagramming app of choice. Invaluable for presentations, documentation, and communicating ideas to staff.
- Scapple — Not sure how to describe Scapple. You draw notes and connect them. It’s really simple but I find it insanely useful.
Command Line Tools
- Homebrew — Allows you to install and update pretty much everything. This is an absolute must have. You can use it to install most of the other command line tools.
- Git — The only version control you will ever need. Unless you work at Facebook or as a developer on Java.
- ctop — It’s bascially
topfor your docker containers allowing you to monitor their resource consumption.
- Ammonite REPL — If you use Scala, this is a much more capable REPL than the stock Scala REPL. Probably my favorite feature is the ability to add Maven/Ivy imports to scripts. This allows a script to fetch it’s own dependencies and gives them access to the entire Java ecosystem of libraries.
- tree — Recursively generates a tree view of the contents of a directory. Very handy for when you know the file is somewhere in this project directory.
- bazel, gradle, maven, mill, sbt — Java/Scala build tools. Pick one and run with it for your work. Each one is very capable and has features that will surprise you, so take time to get to know your preferred build tool. If you work with open source projects, you’ll eventually run into them all, so it’s handy to understand the basics and concepts of each tool.
- tldr — Have you ever pulled up a man page to grok how to use a shell command and left more bewildered than before? (Tar command … I’m looking at you) tldr is the help you’ve been looking for. Rather than dumping out every option a command has, it gives succinct examples on how to actually do things.