Dear Bosses: Don’t buy a Macbook for Programmers without asking first

Nav
9 min readNov 26, 2022

Happy, productive programmers are good for business. So if your programmer wants a Macbook, give them one (after evaluating if it’s really going to help them be productive). The rest of them would be more-than-happy with any other good computer which has Linux installed. Businesses need to understand this, because I’m not the only one saying it (See “How to tell your boss that you don’t want to use the expensive MacBook” and there’s also “Please stop lying that developers prefer MacOS”). Build quality and good design seems to no longer be a selling point for Mac. Linux is not Unix, and please don’t give a Mac to people for show.

Mac users: we know you love your Mac. We understand. Please use your Mac to your heart's content. There's no need to get defensive about it. What we'd like you to understand is that there are many others who can’t tolerate the Mac. Try not to force your choices on others. That's the main point. You can stop reading here.

Update: Many comments brought forward worthy points of view, and this article has been modified accordingly. My sincere apologies, if that creates any confusion while you go through the comments.

I’ve used Mac’s intermittently for almost four years (because the workplaces forced it), and the only things I’ve liked about Macs are the absolutely amazing display quality and certain software available on it which were incredibly well designed. A lot of other aspects about Macbooks have been annoying. I’m no expert, and I understand you may have differing opinions. Even with Windows, Linux, programming languages and software frameworks, it'd have been nice if the interfaces and syntax retained some familiarity. I have relatives who yearn for WindowsXP because that's what they got used to.

These are some problems I noticed with Macs.

Hardware problems

  • No Type A USB ports: This is by far the most horrible decision that they took. You can’t use your existing USB devices unless you buy a Type C USB adapter. There’s no excuse for phasing it out so early. What drove the decision? Greed?
  • Hardware architecture changed: Macbooks now have an ARM-based architecture. I’ve already had trouble compiling certain programs on it. Even had trouble building Docker containers with apps that needed an underlying x86 architecture.
  • Caps-Lock and other keys sometimes not detected: Poor build quality. When I press the caps-lock key, the key-press does not always get registered. The same happens even for the Ctrl and Command keys. This is on a brand new Macbook. Two months in, and the keys squeak.
  • Glassy monitor: Even when I turn the monitor away from any windows, and it’s facing a wall, I still see my own reflection and the wall on the monitor.
  • Headphone not detected on startup: I keep my headphones plugged in, and when I start the Mac, sound plays through the default speakers. Only when I disconnect the headphone jack and re-connect it, the sound is played via the headphone. Poor quality-testing.
  • Power cord jutting onto lap: This I admit is a problem with other laptops too (though it does not get disconnected in the way it does for a Macbook). When you keep the laptop on your lap, the power cord jutting out at the left, touches your knee or thigh, and makes it uncomfortable to keep the laptop on your lap. Bad design, for a device that’s named “lap”-top.
  • Can’t dual-boot Linux natively: On recent Mac’s, you can’t install a dual-boot Linux OS.
  • No space for webcam cover sliders: Ideally a slider should be built-in, but the Macbook doesn’t even have enough space to accommodate a webcam cover slider unless it’s paper-thin.
  • Repair/part-replacement costs: No elaboration needed.

Usability and muscle-memory annoyances

There’s a lot that could have been designed to be similar across operating systems. Being forced to spend time customizing settings and having to learn additional or different shortcuts and settings is frustrating.

  • Ctrl sometimes; command sometimes: In Linux, a lot of functionality just uses Ctrl+some.other.key. On Mac, the same things are sometimes Ctrl and sometimes Command. I know the functionality can be changed to some extent in settings or by using an external keyboard, but it’s unbelievably annoying! Why was it necessary to make such a mess out of a simple functionality?! It gets irritating when you use a Mac at work and use Linux at home.
  • Keys like Home and End don’t work: There are keyboard shortcuts for the Home and End buttons, but they don’t work when using the Terminal. They’ve also wrongly named “Backspace” as “Delete”. Programmers use Home, End, Del, Page Up, Page Down, and Backspace a lot. Not having these keys is extremely frustrating.
  • Keyboard backlight not available at login screen: Yet another example of poor quality checks. At the login screen, the keyboard backlight does not turn on.
  • Icons don’t auto-align in Finder: Even setting the icons to snap to grid and making it the default for all, won’t make it work for all folders.
  • Workspaces need work: Being able to use Ctrl+Alt+Arrow keys to switch between workspaces is one of the pleasures of using Linux. Mac OS seems to allow it only if you go to settings and enable it. Moreover, the “hot corners” tend to get confusing when one accidentally takes the mouse pointer to one of the corners and all windows suddenly disappear.
  • History not enabled by default: There are plenty more people asking about this. It was a silly decision not to save history…and then make it even more difficult to find the right options to enable history.
  • Exit does not exit: If you select the “Quit” option from the menus on the top right, the application does not actually quit. You are expected to go to dock and right click and exit. This gets annoying when using apps like GEdit, where if it’s opened from the terminal, you can’t proceed unless it has fully exited. There have been times when even shutdown didn’t shutdown on the first try.
  • Renaming is a pain: Right click to rename a file or folder, and even though the name is shown as highlighted, when you start typing, you realize that the text isn’t getting edited. Then you have to right click or click again to make it work.
  • Pointless audio previews: If you click the middle of a video file, it starts playing the audio from the file, when you just wanted a video player to open the file. So you have to be careful to click at the edge of the file icon. Who designed this usability nightmare?

Other minor annoyances

  • No cut and paste in Finder: You can’t right-click to cut a file and paste it. You are expected to copy it to a destination folder and then come back and delete the original file. There is of course a shortcut, and you can drag and drop the file to move it, but somebody in Apple doesn’t seem to understand good engineering.
  • Terminal not available on right click: For a programmer, one of the little pleasures in life is to open up any folder, right click on an empty space there and open a Terminal. That’s not available on Mac. It can be enabled, but being disabled by default shows that a Mac is clearly not designed for programmers.
  • Vim lazy exit won’t work in sudo: The vim editor has a shortcut for saving and exiting. You can press Esc Shift ZZ. It’s called the “lazy exit”. On a Mac, if you’ve opened a file using sudo, the lazy exit won’t work. You’ve got to use the “hard-working” exit ;-) Esc wq! (Or Esc x, as a person mentioned in the comments). There’s also some other commonly used functionality that’s not working in vim.
  • psutil needs sudo and io_counters is unavailable: This is meant to protect programs from accessing other program’s memory, but it’s really annoying that if I’m using a Python program that uses psutil, I’m expected to run the program each time as sudo python3 prog.py and type the password. The least that the designers of any OS (Operating System) could have done, would be to provide a modal box that asks and marks a program as trusted, so that Users won’t have to keep using sudo.
  • bashrc and profile don’t work: They shifted those files to /etc/profile. For anyone new to Mac, it takes a while to realize that it uses Zsh. So it’s only after a lot of searching that you get to have your aliases and startup scripts work (~/.zshrc).
  • Barely any good default favourites in Finder: Normally, it helps to have commonly used folders like Home, Downloads, Desktop etc. in the Finder favourites pane on the left by default. But no. You are expected to drag and drop them to create it.
  • Properties being “Get Info”: In Windows and Linux, when you want to see the properties of a file, you right click and find the properties option at the bottom of the menu. In Mac, you’ve got to adapt to recognizing it as “Get info”, and it’s not at the bottom of the menu. Nice in some ways, but annoying in other ways.
  • Updates are downloaded for different version: I was shown update suggestions for some software and a suggestion for upgrading to the next version of MacOS. I didn’t want to upgrade, but I decided to update the other software. So I start the 1.5GB update and lock screen. I come back after a while to see that the downloaded update encountered some error. After another try, I realize that these updates are meant for the next version of Mac OS. Why on earth did it download before the OS was upgraded? Such large updates even for other installed software are another issue with Mac.

The CPU, RAM, monitor size, keyboard, mouse and operating system matters a lot. Some programmers may even be particular about the colour and size of the computer. Linux is far more customizable and programmer-friendly. It’s especially helpful when you need to test locally and deploy onto Linux-based servers.

Points from the comments in support of using Mac

People commented that this article is brainless clickbait, a worthless ill-informed post, childish whining and grumpy. If you have questions about what's written below, you can find the relevant comment and ask them directly.

  • Support, sys admin, shortcuts, setup, supported software, compliance rules (MDM, OSX) is easier on Mac when working with inexperienced developers.
  • Things work out well when using an external keyboard and mouse.
  • Type A port isn’t required because everything is now USB-C or on cloud.
  • Zsh/oh-my-zsh/powerlevel10k is preferred over Bash. Homebrew is preferred over Snap and Deb.
  • People who work with ARM64 prefer Mac. You can install x64 libraries on Mac.
  • Bosses don’t care about user’s experience as much as tools that ensure enterprise data security (antivirus status, disk encryption state, firewall state and more), fleet management and compliance. Linux does not have good enough options.
  • Mac is designed to work well with its hardware, thus offering good performance and battery life.
  • Mac may work well as a dev machine if you use ARM EC2 instances, because of huge cost reductions that ARM gives.
  • Chinese and Japanese character support is excellent.

Points from the comments in support of using Linux

There have been comments like “Thanks Nav for speaking out loud for those who are suffering”. Again, you can find the relevant comment and ask your queries to them directly.

  • Power users who need to go low-level would need Linux. One person mentioned procfs too.
  • NPM was slow to support ARM (so it’d break people’s pipelines, especially when using maven-jib). Docker pipelines need enhancement to run on dev machines.
  • There’s a cognitive overhead, extra RAM and manual tweaks required because of not being able to run apps on a host Mac, and needing to use a VM.
  • Macs being a pain to automate and maintain. Underlying utilities are Mac specific: DNS and user management (cant do “useradd joe”).
  • Various GNU-like programs on Mac are different, so scripts written on Mac aren't immediately portable to Linux and vice versa.
  • No native commandline package manager in Mac. Homebrew has permission issues and is hacky. Macports needs to be installed, along with XTools.
  • Switching between windows of the same program is annoying in Mac because the simple Alt-Tab does not work.
  • Windows is fairly customisable and Linux is massively customisable, but Mac is horrendously uncustomisable so you end up having to map a lot of things to the Mac-way on other devices.
  • Tried development on MacOS and Linux. Had to give up MacOS because it was a useless drag. Another user just couldn’t get used to it.
  • The keyboard layout. It takes many months to re-build your muscle memory. And in those months you’ll live in the irritation.
  • Server environments run Linux, so you’d need a Linux dev machine.
  • You can buy the hardware you want, because Linux is an open platform. MacOS isn’t.
  • Using a self-signed CA can become an issue on Mac. You’d need to use ARM64 for most apps on Mac.
  • And more https://techhub.social/@bitman/109636250974542724.

But deciding between Mac and Linux is not enough

You also need to help employees (and yourself) avoid eye strain: https://nav9.medium.com/the-real-cure-for-eye-strain-6483490d150f

--

--

Nav

An eye strain veteran who learnt from a decade of experience