MacBook Air M4 for development: 1 year review

Almost a year ago I switched from my good Linux Ryzen 7 PRO-based ThinkPad to a MacBook Air M4. I wasn't really looking to switch, but my ThinkPad had broken down (because of bad luck).

I was interested in M-series MacBook laptops back then. My company had given me a MacBook Pro with an M4 Pro chip and I was amazed. So I kinda planned to buy one as my next laptop, and the time had come sooner than expected.

At $WORK I've noticed I've never pushed the MacBook Pro's M4 Pro chip to its limits, so I decided to save a few bucks and consider an Air (M4) instead of a Pro (M4 Pro).

Background

For context, I'm coming from a Linux background, and I spend most of my time in a terminal with typical workloads that fall into two categories.

Frequent workloads:

Occasional workloads:

The Ryzen 7 PRO I previously had was excellent performance-wise, and bonus: it had AVX-512, which is pretty sweet since ffmpeg and some codecs can leverage it. It worked very well. (well, needless to say those workloads drained the battery very fast.)

But overall I could hear it blow even on modest workloads and the battery drained pretty fast. Not as fast as older AMD or Intel generations, but still. For a laptop I was ready to trade some performance for comfort. I mean, it's in the name: laptop. That thing is supposed to be on my lap without burning my skin. I also wanted to have that peace of mind, knowing I wouldn't need a high power USB-C charger everywhere I go, even for a couple of hours.

The recent Ryzen CPUs ("U" series, designed for power efficiency and mobile applications) are not that terrible, they're much better than a few years ago. But compared to an Apple M chip, it's a totally different story.

Pro vs Air

Overall performance

I noticed no difference in performance between $WORK's Pro and my Air. My typical workloads are pretty similar: I compile Go projects on both, I use the same Neovim + LSP setup on both, same browser, etc.

Heat management

The Pro has fans, while the Air relies on its aluminum chassis to conduct heat outside the machine. I worried about thermal throttling, but it turns out I worried for nothing, because the thermal dissipation is very manageable and pretty fast. When I run MLX models the chip and the bottom of the chassis get pretty hot, but fortunately the machine cools down pretty fast. Having a stand certainly helps here. It's pretty much the same story with big ffmpeg batches, and it never triggers throttling when I compile moderately-sized Go projects, or type-check a big TypeScript codebase. For Rust (well, LLVM), it's kind of okay too, but I've never tried compiling a big project.

During "regular" operations (Web browsing, coding, watching videos), the laptop stays perfectly cool.

But, beware: aluminum conducts heat both ways, so having it on my lap can make it warm: body-heat-warm. It's okay though, I don't think that causes noticeable performance degradation on regular workloads.

Memory: is 24GB enough?

My previous Linux laptop had 32GB of RAM, so I was a bit worried about stepping down to 24GB. I hesitated between the 24GB and 32GB configurations, but after months of use 24GB seems perfectly fine for my purposes. 16GB would have been tight, though.

For instance, I need to run a full Linux VM to get podman working, and I've never encountered any memory-related error even during big image builds.

As for inferences, since I usually use the 4-bit quantized models, they fit in RAM without much problem, with peaks at 5GB-8GB of memory.

Conclusion

Those M4 laptops, whether Air or Pro, are genuinely impressive hardware. The performance is there and the battery life is there too. I think I wouldn't pick a Mac for a desktop workstation (I'd rather get a Ryzen 7 and Linux for that), but for a laptop: absolutely no regrets.