If you would ask me to tell one thing about the world that is pretty clear, but as humans we keep forgetting, I would say, there is always a balance, and nothing is actually definitely good or bad.
It’s a pretty obvious thing that when we make a choice we put away something else and pay the consequences. What matters is that if it’s worth to go on with whatever we choose and what it means to us.
If you are a developer who works in a 9-5 job and dream of running your own company, or working at home, being free or something like that, be aware that there are lots to pay here as well.
The hurdle of running a company aside, working by yourself, while no one else expecting anything from you and you’re actually free to sleep or surf the web all day, requires a great level of self-discipline.
Over the past three years, I have tried so many things to harden my self-discipline and tried to learn the best practices in this area. I have read books, articles, listened to podcasts, tried many apps & applications and here I am to share a couple of my insights and experiences with you.
This post will be more about the technical aspects of being productive, and we will talk about more on the human aspects in the upcoming articles. So I would like to start with some tools and applications that I’ve been finding very useful and using for a while.
First of all, I have to say that I am not an Apple Fanboy at all. I love my Android phone and being a Linux user for more than 16 years, I’m more at the open source side and find companies that don’t give you the freedom of choice (philosophical debates of if we ever have such thing in the first place aside) irritating, and I don’t think Apple is much different than Microsoft in that sense.
But, being a “pragmatic programmer”, I have to admit that MacBook provides a different kind of value here.
Along my experience in computer science including years at the University, I have used almost all well-known distributions of Linux (Redhat, Mandrake, SuSE, Slackware, Debian, Ubuntu, Kubuntu…), all the major versions of Windows from 3.1 to version 7 (including Vista 🙁 ) , over the past 18 years. After switching to MacBook three years ago, I can honestly say that a decent amount of what I’ve done previously was just a waste of time.
First of all I love Linux and I still do. But it was especially a big pain in the neck when I have first started to use around 1998. I remember that I was compiling kernel code just to be able to use a new piece of hardware that suppose to be plug and play. Also package management systems those days were not elegant as of now, you either had to install them by yourself using make & configure scripts or even if you use package managers like rpm, you should keep track of and deal with the whole dependency tree by yourself.
To be honest, I was pretty happy with using Linux when I started to use Ubuntu, but there are still many differences between the releases of same distribution, the location of the menu on Ubuntu being the most bothersome one as I remember. I had switched using Kubuntu just because I was so disappointed by not being able to move the menu from left to bottom of the screen. It still seems a terribly bad decision to me. So stability is not only about the hardware/software harmony, it’s also being able to keep up a good user experience between releases, something I think any Linux distribution still suck badly.
MacBook is a great combination of a stable derivative of Unix (MacOS) combined with powerful hardware, beautiful graphics and design, supported by different kind of high-quality third-party applications. Based on my previous experiences, I can assure you that once you feel comfortable with working in Mac environment, you will never look back again. And I don’t think it will take more time than a couple of weeks regardless of where you are migrating from.
The best thing about having a Unix environment is being able to use the terminal. It should be a good friend of any developer. It will make you a better developer, better problem solver and a better computer engineer in general. The design of Unix is probably the best example of how a system should be designed, in a simple, powerful and elegant way.
As our beloved Dennis Ritchie says;
“UNIX is very simple; it just needs a genius to understand its simplicity.”
The terminal is the best way to get used to the Unix environment, and Mac is one. iTerm2, on the other hand, is the best terminal application that I’ve come across so far on Mac. I used to use Terminator on Linux, and now iTerm2 on Mac.
iTerm2 is highly customizable and allows you to open many terminals within the same window, and tabs also. You can easily switch between tabs and terminals using shortcuts (like Cmd+[/] or Cmd+Left/Right). Definitely a must have (and use).
If you are a Linux user you should already be quite familiar with terminal. But if you use Windows, and (hopefully) thinking of migrating to either Linux or Mac, you may want to give Cygwin a try to ease the progress. It allows you to use Unix commands in Windows environment. Not that natural but it still makes a difference on how you work.
Probably it would be better for me to say “Keyboard” before even mentioning other things. Keyboard should be the best friend of every developer, regardless of the operating system or the tools being used. Whenever you move your hands away from the keyboard, you loose time and the chance to do things in a more efficient way, almost every time.
When I was a Windows user mostly because company regulations, I had rarely use my mouse, if ever. I was even right clicking, resizing and moving application windows using keyboard, with regarding keys and Alt+Space window menu. I had known and use almost all shortcuts on Windows, like Win+R for running applications, Win+E for explorer and so on.
The first thing I pined for when I have migrated to Mac was the shortcuts I was accustomed in Windows and Linux. Because MacBooks come with a nice and powerful trackpad, Apple mostly encourages you to use it by giving many features you can do with more than one finger like switching between desktops, seeing all application windows or installed applications and more.
But when you want to deal with application windows, it falls apart and resizing, maximizing, minimizing and moving windows becomes just a waste of time.
Spectacles comes to rescue! This is a very small app (2.9 MB) and allows you to resize, move, maximize windows inside the same desktop or even between desktops. Definitely a great time saver. Once you get used to the shortcuts, you will find it much more efficient than using the mouse every time.
I have told a little bit about my past painful experiences with Linux, when I was trying to install a piece of software. Actually along the years Linux has made a great progress, and Debian (RIP. Ian Murdock) was the first distribution who had the concept of software repositories and auto dependency management with apt (Advanced Package Tool).
Mac doesn’t have an equivalent of apt by default. How you install software in Mac can be considered pretty much the same as you do in Windows. But thanks to open source community, we have brew to the rescue.
Brew is “the missing package manager for MacOS”, as they define it. It does exactly the apt (or yum on Redhat distros) does. It allows you to easily and efficiently install, remove, update and manage software. It resolves dependencies automatically and keeps track of what is installed.
When you want to install a package (scala as an example), all you have to do to issue a search first with:
brew search scala
and then when you find the one you’re interested, all you have to to do say;
brew install scala
That’s all. The package you want to install and all the dependent ones will be downloaded as installed. Much better choice than wasting time with downloads, windows, interactions and so on.
5. Rescue Time
The previous applications were mostly regarded to the technical aspect of development. This one is more on the self-discipline and time management (or soft skills) side.
While I was working in big enterprises, I have always got irritated by the company policies that forces you to keep track of every minute you’ve spent in the workspace. Because I was generally more on the R&D site, our policies were not that strict, but nevertheless, we had to provide time logs under the Jira tasks for 8 hours we spend a day, which was something I keep neglecting almost everytime.
When you begin to work on your own behalf, things change. When you start to realize that you can’t keep up with being optimistic about how you spend your time by yourself, which is something that happens within a couple of weeks at most, you start to seek for a solution.
RescueTime is a great solution for the ones who want to keep track of the time they spent on both mobile and computer. It keeps track of every application you use, both in mobile and desktop, even with the detail level of different tabs (and sites) of the same browser. It then separates actions based on their productivity level, Very Productive, Productive, Neutral, Distractive and so on. You can change the labels if it falls apart of identifying some applications or sites. You can define targets like “At least 4 hours of productivity per day”, or you can even block all distractive websites when you reach a certain amount of distractive time. It sends you weekly reports on your achievements and fails and many more features.
It comes with a free package but I’ve been using Premium because of the advanced features I’ve mentioned, for a long time. Definitely, recommend you to check out and give a try.
Of course, these are not the only ones but let’s keep the others for an another article. This topic is also a candidate for a series of articles and I will keep sharing my experiences with the upcoming ones.
We value our comments, please share your thoughts with us here or feel free to contact via mail, Linkedin and Twitter. Subscribe to our newsletter for updates, check out other popular articles and hope to see you again soon.