[This story was originally posted on my personal blog]
In this current age of technology saturation, almost every task can be performed with close to an infinite number of ways with hundreds of tools to select from. In the last few years, I've developed a new hobby, which is comparing tools, learning about them and trying to introduce them into my toolset to replace the already existing ones. Granted that many people I know would rather spend that precious time debating about political affairs on social media, sharing random videos over social messaging groups or binge-watching a useless television series, but hey, everyone is free to spend their time on what they want and so am I!
Defaults are there for a reason. Sometimes they are there to promote a particular product, like the Internet Explorer as the default web browser in Microsoft Windows, or due to a sponsor, or it's really a better alternative like Ubuntu switching from bash to dash as the default shell. Defaults can also be for if you're the kind of person who would rather use something that simply works, than to spend hours (days, weeks or even months) of your valuable time just to choose one from a growing set of options, specifically if you believe that at the end of the day which one you choose won't matter all that much.
This post mentions a few of those defaults that I replaced with opinionatedly better alternatives and learned so much in the process, and lists them in an almost a chronological order.
I come from a time when mobile phones were way more than just platforms to host WhatsApp, TikTok, and PUBG. They used to be gadgets using which one could make a phone call or send text messages, and during the early 2000s, one could run terminals, write code and run web servers from.
Nokia used to be 'the phone brand' even after being a little expensive in its product line as compared to the other rival brands in the cellphone market at that time. From Nokia's Series 50, Series 30 and Series 40 to Series 60, Series 90 and Series 70, to Windows Mobile 5, it was a 'journey' full of learning for us. Windows Mobile (not Windows Phone) was not for the mainstream crowd, except for a few models from HTC that made it to the general audience. Imagine needing to go to 'Control panel' to change the ringtone, as opposed to switching profiles like 'General', 'Vibrate' and 'Silent' on your smartphone from an easy access menu.
Having a super-powerful (and yet half-baked) mobile platform as the daily-driver was not only fun but also empowering in a sense. The hardware will sound too weak compared to today's trend with processors running at a couple of hundred MHz, with about 32 to 64 MBs of RAM and similar internal storage capacity using a QVGA to VGA resolution resistive touch-screen display. Being able to sync email messages on Outlook Mobile before mobile internet (and WiFi) was popular, transferring data between computers and Pocket PCs using Microsoft ActiveSync, installing newer versions of Windows Mobile (including custom ROMs downloaded from developer forums like XDA Developers), creating and joining WiFi networks for FTP and HTTP transfer between our devices, all that was just awesome.
Back in early 2012, I found it hard to understand why one would install a third-party web browser on their computer when almost every personal computer (assuming to run Windows) on this planet had Microsoft Internet Explorer pre-installed. Sure that was a cool thing and provided tabbed browsing way before IE, but why even bother?
Halfway through the year after getting my first front-end centric software project assignment (and being made fun of at my team for using IE), I had to switch to Google Chrome after quick realization of the difference it made for the user as well as for a developer. The Developer Tools in Chrome were so much better (something I didn't even know existed in a web-browser and just hitting F12 summons it up on screen) and Chrome 27 (if I remember correctly) was light-years ahead of IE9 at that time. I also tried Chromium for a while on Linux, due to its better availability on package repositories.
Coming from a Windows background where almost all computers I came across ran Windows, switching to Linux was very scary, considering the number of applications we depended on for our daily workflow. The biggest hurdles included Visual Studio, GoldWave, Nero, and a bunch of games that could only be run on Windows.
Beyond the initial hesitation for the switch I finally made in early 2013, Linux soon became my new fascination and also an important part of computing for me. I got to explore a variety of distros like Ubuntu, Kubuntu, Xubuntu, Lubuntu, Linux Mint, Debian, NetRunner, Elementary OS, Korora, Zorin OS, openSUSE, some more that I do not remember and finally Fedora, running desktop environments like Unity, KDE, XFCE, LXDE, LXQT, Gnome 2, Gnome Shell, Pantheon, Cinnamon, Mate, and more, on window managers like Open Box, Enlightenment, i3, etc. Compare that to working in Windows 3.1 Windows 95, Windows 98, Windows XP or Windows 7 where there is apparently no transparent concept (or flexibility) of a desktop environment or a window manager at all. Not to forget, trying out different Linux distros every couple of weeks without losing all your data was just another perk of being in the Linux world.
My current favorite workstation configuration is Fedora LXQT running i3, that mostly involves switching between Terminology, Emacs, PCManFM and Google Chrome, sandboxed inside a VM on my MacBook Pro running Mac OS Majove.
Visual Studio was at one time the most used application on my computer during my days as a DotNet developer and was one strong reason to stay on Windows. Even after I switched from Windows to Linux, I could not give away Visual Studio and used to work with a VM running Windows 7 Professional just for my development stuff. That is before I got introduced to Emacs out of a random conversation at work that changed a significant part of my development (and non-development) workflow.
Emacs took over my workstation at work and my personal computer at home and it still remains one of the most used software across my computers, apart from Google Chrome and a terminal. I ended up creating several packages/plugins for Emacs, creating a few starter packs, writing a few blog posts, creating a learning repo on GitHub, creating a few videos on YouTube, presenting a few talks at almost all of my workplaces and I do not have a count for how many co-workers I have bored with it.
It is an established fact all over the web that Windows Command Prompt is probably the most boring featureless terminal out there. It did improve by a great amount in Windows 10, but things as simple as copy and paste were not available directly until recently, let alone features like better command history, auto-completion, etc.
Having worked with a variety of Linux terminals, I do not find Command Prompt at all usable, not even to run a single command. Starting with a search to replace Guake, a cool dropdown terminal I used on some Linux setup a few years back, ConEmu was a pretty decent alternative with not only the drop-down terminal but also features like multiple tabs to work with. I remember someone at work having a tiled layout with terminals on ConEmu but I never explored that feature.
Hyper, a fairly new terminal built entirely on web stack feels fresh, responsive and is very customizable with a configuration file and many plugins that sort of work like NPM packages. Hyper is the primary terminal on my Mac but I've not been able to make it work as good on my Windows workstations at work, and fall back to ConEmu. I use Terminology on Fedora though which is another awesome terminal for Linux, with blazing fast response, cool customization, etc.
Out of all the desktop environments that the Linux distros on my computers used to come with, KDE was the one I used the most. Being probably the most feature-rich among other options, it has always been called the slowest environments out there until recently, when they made significant improvements in its speed and efficiency with version 5. My quest for a fast desktop environment made me travel through a variety of options like XFCE which was fast but not so pretty, LXDE which was just too basic to be used as my primary environment, Pantheon that came with Elementary OS but had issues with my system specifically around being stable enough to be used, Enlightenment that was cool and fast but not so bug-free.
After trying all stacking window managers I could, I learned that a tiling window manager was what I was looking for and after some research and experimenting, I settled for i3. After the usual initial friction, i3 felt so natural to me, it almost acted like an Emacs outside of Emacs. It not only helped me achieve a fast setup but also enabled me to operate my computer exclusively with keyboard shortcuts, just as I would do within Emacs. This also helped me with my carpal tunnel syndrome in my right hand which (at the time of this writing) has been running since over seven years now.
WhatsApp has been haunting me since the time it became popular and replaced all methods of communication including usual voice calls and text messages and to a certain extent, emails. The idea around the app is great but its users treat it as a religion and it has managed to get a very wide range of audience addicted to it, wider than any other digital platform/service I've seen. At my home town in Mumbai, WhatsApp is the platform responsible to make people get internet services on their phone, where the internet was considered a luxury and not everyone had access to it, at least on their phone. People lost their mind and I've heard arguments like "one who doesn't use WhatsApp doesn't need a smartphone in the first place". Someone even told me that I do not need a phone because I don't use WhatsApp, which I wish they would have asked me what I use my phone for and I would have responded with a truthful answer: "to manage my tasks using a To-Do app and to be more productive".
Hatred about WhatsApp aside, I do have a messaging platform in my daily workflow, which is Telegram and I use it for some light communication and updates but gladly, I am not addicted to it. I am a part of a very small number of groups created for very specific topics and are not spammed with unrelated messages. I did try IRC and a few flavors of it like Riot.im for a while but that didn't work out well though I'll keep trying.
Starting with a workflow involving nothing but mouse-clicks and ending up with one that mostly involves keyboard shortcuts, the shell is definitely a significant part of my setup. Previously, I spent so much of my time to find and compare interfaces and features around the ability to quickly switch to a terminal, move between tabs, hide them, etc. I recently re-read about a few different shells out there and with little reading, it's very easy to find articles by people switching to a different shell.
Learning that there are at least two major options along with bash: zsh and fish, it spun up another intensive research around the differences between the two and which one I can introduce into my workflow. Considering the balance between features and customizability, I decided to switch to fish-shell, at least for the moment, only to quickly learn that my bash configs won't work with fish directly. That started another long-running learning/development exercise in my dotfiles, a part of which involved of separating my reusable shell configs from bash configs so that I can at least use my already available shell aliases with fish. The massive update is still in progress as of this writing. Soon, I'll switch to fish completely on all my workstations and to be able to customize it, I may end up learning a decent amount of bash!
At this point, I won't mind if I never switch to fish (or even use it) as I have already learned so much about bash, other shells and their existence.
I tried replacing Gmail with different alternatives for my personal email and failed multiple times. The good thing about that is, I got to learn and realize the features provided by different email services and finally have a justification for myself to stay with Gmail, something that I have documented as a part of my recent post around unifying my email accounts.
Many times as a mobile developer I have to work on apps without the API ready that was crucial for the feature I was implementing. Either the backend was developed by another team that was not entirely in sync with us or our backend team had no chance to implement those endpoints earlier. For this reason, I was not able to satisfy the Definition of Done but it does not mean that I have implemented the UI only.