Tuesday, November 16, 2010

Mac computers for programmers?

I temporarily switched to an Apple Mac laptop, but after about two years I switched back to Linux. Here's why.

My original reasoning was that Macs support all the Unix goodness I value for programming, and furthermore they have better shell features such as network configuration and file managers. True, they have a higher price, and they are closed source, but it's worth spending money on good tools, and I don't plan to hack the kernel or the graphics engine, right? After a long sequence of individual observations, I came to realize this summation is not very accurate.

Software support. The software support can be summed up as: everything I need is available on Macs, none of it works better, some of it works worse, and a lot of it needs to be installed manually. In detail:
  • The X server is crashy. I lost a lot of time trying to make X apps work decently, but they just don't.
  • Eclipse works identically to Linux.
  • Java works identically, though for the longest time they were stuck at version 1.5 when the rest of the world was using 1.6.
  • There's no Debian or Ubuntu, but there is Fink. Fink has several essential packages, most importantly Latex. However, it's an order of magnitude smaller than the Linux distributions it mimicks. I like software distributions. They provide a great way for software developers to help each other. With Apple, you get what Apple gives you and the third-party market is much skimpier.
  • Gnu Emacs works fine. I experimented with Aquamacs for a long time, to try and do better than on Linux, but I found it had a lot of quirky problems.
  • Scripts work just like in Linux.
  • Scala and Scheme Shell work fine.
  • I tried the built-in calender, email, and contacts support. Ultimately I switched to Google equivalents, however, which are much better.
  • The built-in word processor and spreadsheet are just OpenOffice, the same as on Linux.
Operating system shell. Apple is famed as building great user interfaces. I'm coming to ask why that is, though. Sometimes they make something easy, and sometimes they make it impossible and then try to pretend like you'd never want to do it. It's as if they optimized for demos and didn't do any user studies. Over time, I found myselef replacing one chunk of the shell after another. Specifically:
  • Display management I will concede: it works great on a Mac. If I unplug an external monitor in a Mac, the display mode readjusts to display just on the built-in monitor. If I unplug an external monitor on Linux, it stays in that state, and it can be really difficult to get the display fixed back up.
  • Suspending to disk and to ram is about the same on both. I've had times where my Mac wouldn't resume, and I've had times when resuming a suspend-to-ram took longer than fully booting a Linux machine from scratch.
  • VPN software works better on Linux, in my experience. The Internet was developed on ancestors of Linux, so it has good networking in its genes.
  • The file manager on Linux is superior. I pulled my hair out trying to find a way to manipulate archive files (tar, zip, jar) with the Mac finder. There's nothing built in for it on a Mac, and I tried 2-3 extensions but none of them worked well. They act like archive files don't exist.
  • The default terminal program on a Mac is terrible. There's a decent replacement named iTerm, and iTerm is about par with gnome-terminal.
  • The window manager doesn't do multiple desktops. I hear there are extensions for that, but I never braved trying one.
  • The window manager shifts focus at the granularity of an application, and it has a notion of "application" that is terrible for programmers. If you click on any terminal window, they all come forward. If you click on any browser window, they all come forward. Likewise for hiding: you hide one terminal, they all go away. In general, the window manager is optimized for the way a graphics designer or an audio engineer works: 3-4 apps at a time at the most. When I program, I have 3-4 browser windows and 3-4 terminal windows, each with their own tabs internally.
  • The app launcher bar is okay, but I prefer how the Gnome launcher has a row of mini-icons plus a nice hierarchical menu of the whole system's software. I have tons of software installed, so a row of gigantic icons doesn't work.
  • Selecting wifi networks works well, but then it also does on Linux nowadays.
  • Network sharing is better on Macs. I use network sharing on a laptop maybe once a year, but when I do, it's easier on a Mac. On Linux, I have to install some extra software, pray my wifi driver has AP Mode, and read some docs on how to configure it all.

I would sum up the system software as sometimes much better and often much worse. Several aspects that work great out of the box on Linux, I have to install upgrades on a Mac to match it.

When I add up all the above individual things, I notice that there is hardly anything I particularly like about Macs, and there is quite a lot where I have to replace things to get it up to par. The applications I use aren't any better, and are sometimes worse. Surprisingly, the system software isn't particularly good, either. I vastly prefer Ubuntu to Fink -- it's just a larger, richer community. Also, while I don't hack the kernal or graphics software myself, it is nice to be able to apply patches that third-party people have written.

Macs are good computers for programmers, to be sure, but I'd still give Linux the edge.


Unknown said...

Great summary Lex! Very useful to me, a long long time Linux user.

In the Smalltalks events I see lot of people using Mac, and asked some of my friends why. Now your summary compare the exact two things I want to compare: Mac and Linux for a programmer context.


Unknown said...

I've come to the same conclusion, really, but in fairness to the Mac side, don't the recent Mac versions (Leopard and Snow Leopard) do multiple desktops out of the box? "Spaces", I think they call it.

And while fink and macports are nowhere as good as apt, I've heard good things about "brew", recently? The hip ruby kids seem to like it, anyway.

Hooray for Ubuntu! :)

Unknown said...

As the others have said, great summary.

I use Linux, Mac and Windows, but each for a different purpose, which I suppose is probably the best way to look at the three, each is useful for a specific purpose, or set of purposes. Windows is good for the average business person, home office, casual use, gammers, Macs are great for audio/visual type work, average home use and light duty business use, and of course college students and Linux is awesome for development, networking, etc. So i guess it all really boils down to what do you want to use it for?

Marcel Weiher said...

I am confused by your comments about the window manager: when I click on a Terminal window, only that window comes forward. If I click on the Terminal icon in the dock, all the Terminal windows will come forward. Same for hiding: I can minimize a single window (Cmd-M or yellow button), or I can hide the entire app (Cmd-H).