The toolset of your fellow Software Craftsman
TL;DR: A description of how I have setup my development environment and what software and services I use.
The choices of software and machine configurations used by a developer are very personal and rarely the same among programmers. Some use a third party bundled integrated development environment (IDE) to make them feel productive. Others prefer to use a set of hand-picked tools, crafted together over months or even years of experimenting. The latter is usually chosen by brave fellows that are unafraid of setting out on an adventure in a jungle of manuals and open source code, in order to understand their tools closely, seeking the Holy Grail of productivity.
I like to know the tools I work with intimately and I also enjoy the possibility of changing every piece of my toolset if necessary. In this article I am going to walk you through the tools I use every day, and which make me more productive. It is worth mentioning that this set of tools is constantly changing. Maybe in a few months I will have discovered some aspect of my daily work can be enhanced by replacing a tool or adjusting the way something is configured. I seek to use the best tools and do not blindly follow any specific technology or brand.
The code editor is the most personal tool of a modern programmer. The ability to move around, express an idea, and understand what is displayed are the key factors influencing productivity. I currently use Emacs for programming. I have been a VIM user for years before I switched to Emacs in the beginning of this year. I use the Prelude distribution of Emacs which enhances the bare metal experience.
Editing Connexion code in my Emacs.
Apart from using Prelude I have customized the configuration and added my own key bindings and plugins. All the configurations are stored in a repository, where I can clone them and install on any other machine I need to work with. My Emacs configurations reflect almost perfectly my old VIM personalized key bindings. It took me a few weeks to get all the configurations right, but now I am happy with what I have. And yes, I have a Nyan Cat dancing in front of me all the time.
Another important tool,where we probably spend most of our time, is the terminal. The MacOS comes with a default terminal, but I use iTerm2 configured to use Z Shell by default, for better experience. Additionally, I have the oh-my-zsh framework installed, which provides me with interesting features when using the command line, such as better visuals and plugins. A tmux session with Vim-like key bindings is the first thing I always create after opening my terminal. Working in a tmux session is safer since I don’t have to worry if the iTerm2 crashes, or if I want to restart the terminal, my shell session will continue running in background. It is good because I keep the state of my shell and my open tabs intact.
Yes, I usually stay up that late at night.
I mostly work on Python projects and I need to test them on different versions of the interpreter. I use pyenv to efficiently manage the diverse Python installations I have. Pyenv is easy to understand and configure, so the usage of different Python interpreters is straightforward. Other configurations that I have can be found in my ~/.zsh file. I am starting to identify some common commands I use frequently and adding them as alias to my shell configuration.
When it comes to looking for documentation, communicating with other team members or testing endpoints, a browser plays an important role in the Backend Developer’s work life. Good plugins are also essential: they increase our productivity by adding complementary features to our browsers.
I mostly use Chrome due to its great integration with my Google Account. Chrome is currently the winner in the browsers’ war in terms of popularity, and is doing an amazing job positioning itself as a leader in pushing web technologies forward. I am also a great supporter of Mozilla Firefox and use it as my primary alternative to Chrome. The main reason why I have not switched to Firefox as my primary browser is Chrome’s seamless integration with all my devices that I use: my smartphone, my personal computer, my personal laptop, and my company’s machine. If I have a tab open on my smartphone, I can continue reading it in my computer’s browser without copying the URL manually—it is just there, two clicks away.
To enhance my browsing experience I use a series of plugins to add some specific features to Chrome that are important while working with web development. Most of the microservices that I have to interact with at work use OAuth2, and expect requests to have an OAuth Token in the request’s header. To add this token automatically in specific domain’s requests I have installed the oauth-bearer-plugin. For better visualization of the contents of APIs endpoint’s response body I use the JSON Formatting plugin. Great ideas come by unexpectedly and to have a handy place to save quick notes I use the Google Keep plugin. All my passwords are stored in my 1Password file vault and, consequently, the 1Password plugin is also installed in my browser to fill out password fields automatically. Finally, to remove the annoying advertisements from some websites I have the AdBlock plugin always on.
I cannot neglect to mention that I have also developed a Chrome plugin to better visualize CSS gradients (it was featured in a blog post at the Mozilla Hacks blog). The CSS Gradient Inspector is a small plugin published as open source that adds a new section to the Chrome DevTools allowing better visualization of how CSS gradients are applied to a DOM Element.
In addition to the tools mentioned above, I use some other software that makes my life easier. Utilitaires that are convenient for specific tasks like password management, VPN connection, and data backup.
Password is a very sensitive piece of information that should be both handy and safe at all times. Using the same password everywhere is risky, while creating a different password for every single service one uses and remembering it is akin to mission impossible. A good solution is to use a password manage software to have your passwords saved in an encrypted vault. There are several applications out there ranging from open source to commercial, as well as offering online and offline storages. I have chosen the 1Password for my personal password management. It has a very good interface and an awesome mobile app. I particularly like the idea that my password vault is with me and not on their servers. It really misses a Linux version though and I hope that one day they will implement an official client for it. Meanwhile, I use an open source alternative to read my passwords while on Linux.
Privacy is an hot topic lately, and for a number of reasons I use the Mullvad VPN service. You can use it without any software, but they also provide a handy client for multiple platforms including Windows, Linux, MacOS, iOS, and Android. Their service has a fair price of 5 EUR/month that you can pay in various ways — including Bitcoin. The service is totally anonymous, you do not even need a password to be able to use it, simply register to get a user ID and use it to authenticate.
Everyone places an immense value on their data and thus backup solutions are essential. I use Dropbox. It does not need any introduction, it is a great product and it is worth your money. Apart from Dropbox, my files are redundantly saved in Google Drive. Both applications are installed on my smartphone and computers — always syncing all my photos, videos and other files.
While discussing the tools I use with fellow software creators I always discover ways to improve my environment or learn about new tools that might be interesting. I like to listen to others and get feedback on what and how I do things.
I have already identified some ways to improve my current setup. A better color scheme for code in my Emacs might be something to change in the near future. Another possible change is the way I use Emacs. I currently run it in the GUI mode, but I want to use it inside the terminal and for that I have to tune in some of my configurations. I might also give the Alfred for Mac (or Albert for Linux) a try some time soon. It is an application that provides a search box which includes hotkeys, commands and keywords aiming to boost productivity. It seems like an interesting addition to my toolset, but I will not be entirely sure until I actually try it.
Lastly, I would like to switch back to Linux as my primary OS. MacOS is really good, but it has its limits and many open source tools run better on Linux. The development environment being similar to what our final application will be running on is also a big plus. Docker and other virtualization software currently solves this problem for me, but even those tools work better on Linux.
I am open to listen what are the tools you use and any recommendations are very welcome. Please contact me on Twitter at @rafaelcaricio. I hope you have enjoyed this article and I will continue publishing information about my experience with Software Craftsmanship.Post by: Rafael Caricio