I never thought I would come to this - as I am writing this blog on my Debian installation dual booted with my beloved Windows I have been using decades.
It all started when I joined my current company back in January 2019, TrueLayer - which is a fastest growing fintech startup company in London and like other fintech companies, we deal with financial information (PII, transactions etc). This makes fintech a lucrative target for a hacker. Therefore Windows is pretty much banned here. You get to choose a Linux or a macOS laptop as your workhorse.
I am not going to debate about why/whether Windows is less secure than Linux/macOS because
- I will be biased towards Windows 🤷
- I am nobody to make any statements, DevSecOps seat 5 rows away from me, you know!
Since my personal laptop happened to be a Mac for many years (which was just a fancy internet browser as I did all of my development work in my Windows desktop then) - so my natural choice was a Mac. Also not to mention bad experiences when I tried to install Linux on different computers I owned. They all crashed due to driver issues or instability etc. Although I have heard people argue it's the device manufacturer being uncooperative with Linux. It never worked for me (or maybe I didn't try enough?).
The first struggle I had after switching to Mac at work was, the placement of Cmd, Ctrl- and this started injuring my muscle memory. Moreover when I'd return home and worked on my side projects in my beloved Windows PC - I'd injure it even more. Think of it, I'm a keyboard-heavy user and I'm spending my days with macOS and the evenings and weekends on Windows. I could not have caused more injury to my muscles memories than this ever.
I had to stop this madness and make a decision, changing the work was not an option because these are the highest number of nerdiest, genius and also down to the earth people I have worked with. So abandoning them was not an option. So I chose to switch my personal projects into the MacBook Pro I bought some months before joining TrueLayer.
Within this time, I was super comfortable with the scary terminals, tmux etc. I starting doing things faster using the cli. The useful
base64 and many other unix cli tools were unconventional to adapt at first but then made a lot of the task easier. I stopped using Gui for kubernetes and some other tasks with the exception being Git and REST client. I more and more find myself spending a considerable amount of time in the terminal.
One of the first things I did after switching to a Mac at work was to find some kind of REPL for C#, an inferior replacement of LinqPad - failed to find something that is cross-platform, I had to write cant-run-linqpad, this is closest to a REPL I use that "gets the work done". But I still wish LinqPad was cross-platform, something that RoslynPad is trying to do but far away from completion.
JetBrains Raider made the transition to being a full time C# developer on a mac a breeze! Rider achieved all of these in years which Visual Studio (my all-time favourite IDE and the gold standard of IDEs) took decades to perfect. Apart from the missing memory and performance profiler and my favourite LinqPad I pretty much don't miss anything else.
2019, Long year of solely using macOS
After exclusively using Windows for 18 years I've got used to with macOS however that was not without its issues. It all come down to one thing- At the end of the day (just a phrase, we deploy many times a day) I have to deploy my code into a linux machine. So there will be some kind of frictions when developing in macOS.
Some of the issues I faced was,
- Scripts needed to be catered such a way it works on both mac and Linux (some CLI tools come pre-installed with Linux but not with macOS). So there had to be some conditions like this in most of the scripts
if [[ "$OSTYPE" == "darwin"* ]]; then
- We use gRPC on many internal services and HTTP/2 over TLS is not yet (as of writing) supported by macOS. It's not a huge issue, but this is something that would not be an issue with a Linux (or Windows) machine.
- That time after few excruciating days of debugging, I found out a popular bank's payment API only works when the HTTP request is made using
WebClientand from linux machine. Otherwise It just "worked on my machine" but failed without any hint on production. This is ofcourse due to some issues on their API (Hint: Character Encoding and how
HttpClientis different than
WebClientacross platform) - but I'd have solved the issue had I been using a Linux distro at least a couple of days early. This was one rare moment, I didn't feel like going into the bottom of the issue to find out the root cause, as soon as it started working. I deployed the changes and called it a day.
So those along with some other issues, I started asking to myself, how long can I keep myself away from the destination? If I'm going to be deploying to Linux, I must be developing in Linux. I have to give up my new found love on some macOS apps like iTerm2, Paw, LittleSnitch, Postico etc. Yes I agree macOS has some of the polished apps I've ever used - but I have to say goodbye.
I started my transition by installing Debian (after a couple of failure with Ubuntu) into my desktop PC alongside Windows. Which I've been using for a couple of weeks now.
2020 The year of Linux / Ubuntu
I got a new XPS 15 7590 at work and I'm gonna spend the next few days setting up Ubuntu and transfer my files over. The installation experience was the worst as most of the pain points are written in details here by a good Samaritan.
The fingerprint reader doesn't work, which is helpful when I have to copy a password from LastPass's vault as typing my master password is a PITA. oh I forgot, LastPass doesn't offer any GUI for Linux. So that means I have to type my login password (will miss TouchID). The membrane keyboard feels like I am back in dark age - Even MacBook's terrible keyboard has better tactile feedback than these. My list goes on and on - but I have to get used to with these limitations to make myself free on some other aspects. It's all a trade-off I'm willing to accept.
Yes, I am far far away from Windows now. However, I still speak more C# than my native language, promote Azure, Visual Studio. I am doing the same thing with just a little less friction.