Linux is the correct (and only) choice for programmers. 99.9% of the internet runs on Linux. When you get a job, you'll most likely deploy to Linux servers. Other people (MacOS/Winblows) will spend a significant amount of time trying to emulate a Linux environment.
My daily driver is a Dell XPS 13 9310. The build and finish is pretty good. All the hardware works out of the box.
I also used a Lenovo X1 Carbon for a few years. Also very good. I think the speakers sounded better on the X1 compared to the XPS. I think at this point all the hardware is supported by the latest kernel. When I had it, I think I had to wait for microphone support because the X1 had some fancy array of microphones. Eventually the software support caught up though.
Not recommend: I've also tried a System76 laptop. I quickly returned it because the build quality felt super cheap and I had a dead pixel. I also didn't like that the power adapter was a barrel plug. (Although, yes, you can also charge with USB-C, but then you still have a useless barrel plug.)
Not recommend: Framework laptops. They seem cool, and they are, but the build quality is not as good as the XPS or the X1 Carbon. Also, the biggest reason to avoid Framework is due to the poorly supported HiDPI display. This goes for all laptops, by the way.
Finally, I'd also like to mention to be successful in Linux, you have to adopt a different mindset too. If you go into Linux expecting MacOS or expecting Winblows, you're going to be disappointed. Linux is Linux. It's great for computer science. It's not great for video/image editing, music production, gaming. Sure, technically you can find a way to run those apps, but it's not going to be the best experience. Similarly, it doesn't make sense for me to go to MacOS and complain that I can't use systemd or LUKS.
tl;dr
- Linux is the right choice, can't avoid it.
- I'd recommend the Dell XPS 13 or the Lenovo X1 Carbon.
- Avoid HiDPI displays (unless you want to debug issues and still end up with slightly fuzzy apps)
- Avoid NVIDIA
- Different tools for different jobs