As the title says, I am currently learning to be a programmer, and my tablet does not suffice for the job.
I have already finished a small MEAN-Stack application for learning Typescript, learned some Java syntax (I expect nothing more exciting than a sorting algorithm, but exam language is Java, so…) and the next stop will most likely be plain vanilla C to learn about handling hardware.
Windows I hate with a passion, and I don’t know squat about Macs, so I am thinking of getting myself a decently sized laptop for a sensible Linux install.
History (I started my Liux journey with SuSE Linux 4.4.1, way back when) taught me to be very wary of driver issues on laptops, so I thought I could ask you for recommendations that play fair with Linux.
(as an aside, if I could play GuildWars2 on it in the evening and attach my two big monitors when at home, that would be super cool)
I can not recommend the framework laptop enough. Love their mission of producing a reparable and user-friendly laptop. You can even buy it without windows, to install your own OS from the get go.
I’ve only heard great things about Framework (https://frame.work/) however their laptops are not cheap. I wouldn’t necessarily assume that they fit a student budget. OP didn’t say what their budget is but you can definitely get a laptop that is adequate for programming for less than half of the price. That being said if the budget is there the upgradability and repairability may make it an economical option over the long-term.
Yeah, Framework seems like a premium product for sure. I want one but I definitely can’t afford it anytime soon. Also worth noting that a new framework mainboard rivals the price of some entire laptops. So while it is definitely upgradable and one of the most repairable laptops in the world, it is still a pricy ecosystem to be in.
I had been holding off on a laptop purchase waiting for framework to ship an AMD board, but they took so long that I had to buy another laptop instead. The new models they were showing off at Computex look so cool though. I am really excited about their swappable GPUs.
I would highly recommend a Framework if it’s within your budget and you care at all about right to repair. Otherwise I’d highly recommend a used Thinkpad as they hold up exceptionally. I’ve used Linux on both very smoothly.
old thinkpad FTW!
got a T430s for 115Euros one year ago
Laptops these days do much better with Linux than before. But if you really want ~0% chance of dealing with driver issues, I’d go with System76 laptops. They’re made for Linux, and with Linux pre-installed.
Dell and Lenovo also offer laptops with Ubuntu pre-installed and supported.
can’t speak to lenovo, but i’ve had very mixed results with Dell. it certainly isn’t as smooth as system76 or the old (pre lenovo) think pads but they’re workable. the 13in dell models are better supported then the 15in in my experience
Thank you all for your suggestions, I will have a look at used thinkpads or tuxedos. Scratches never bothered me.
You are all very helpful!
pickup a t440p for peanuts, can add more ram and processor if you want
wasn’t the t440p the I’ve that did away with the trackpoint buttons?
Checkout Framework laptops. If they don’t do it for you, maybe try System76.
if you are from the EU i can recommend Tuxedo Computers. they have a wide range of laptops to fit your budget, and among those a lot of customisation options.
the only downside about mine ive noticed, would be that the keyboard legends seem to wear a bit faster than normal. then again that is because they are laser etched, which means for a small upcharge they will put whatever you want on there.
or Framework as others have mentioned, not only because they seem to have produced a great product, but also because their mission is definitely worth supporting.
I tried a Tuxedo Laptop a few years ago and the keyboard was noticeably worse than my T480s and a MX Keys Mini. But that probably depends on the model.
My usual suggestion: Get a generation-old business or workstation class machine from one of the major manufacturers, as a refurb. Mostly meaning keep an eye on Dell Refurbished or Lenovo Outlet - sometimes you can also get a deal on a refurb via woot - for something that appeals to you. The stock is always changing at those, and there are almost always sales/coupons for around 40% off at the first-party refurb stores, so +/- a week of patience can save you a bunch of money.
Business or workstation class machines (think Dell Latitude or Precision, especially the ones with models that start with a 7, or Thinkpad) are typically mechanically much better built than their consumer counterparts, and usually full of reputable components that are connected in standard ways - low end consumer stuff sometimes has issues where they got weird less-common components or connected things in stupid ways to save a few cents per unit that will cause driver issues.
Waiting a generation gives time for mainline kernel driver support to fully mature to minimize driver problems, and drastically cuts the price.
I’ve had several machines following that advice, and I think the only driver trouble I’ve had with them has been with unsupported fingerprint/smartcard readers, which I …don’t care about anyway.
Or, if you want a way cheap beater and don’t mind some hackin’, grab a used/refurbished AUE Chromebook that is on the Mr. Chromebox Supported List. AUE means they no longer receive ChromeOS updates, so their price craters to like $50, and you can flash a normal UEFI payload and use them as a (feeble, storage starved, low resolution) computer. Not a good main machine, but they make fun beaters for experimenting. There are often batches of them being dumped via woot.
…also, don’t buy anything with an Nvidia GPU unless you have a specific compelling reason, it’ll be a pain in your ass for the life of the machine.
I’ve used pre-owned corporate thinkpads for years. At least in here we have multiple of stores to purchase previously leased (and since wiped+inspected) laptops for quite cheap (your definition of cheap may vary). Just now I have one waiting at the post office, T495 for 299€. Granted that’s never been a top line model, but it’s well sufficient for my usage and it’ll happily replace the old x240 I’ve been lugging around.
I’ve ran them with ubuntu/debian, dualboot and pretty much every combination. They just seem to work, altough there may be more or less hiccups specially with keyboard lights and (to me) minor things like that. Networking, hardware itself, suspend and everything else just works. And there’s mountains of information on various wikis etc to check before purchasing.
+1 for used thinkpads. If you can live with some scratches you can find great deals. Plus you can look up the model you would like to get on https://wiki.archlinux.org/title/Laptop/Lenovo and make sure compatibility isn’t a concern.
I (and many of my colleagues) do this since I switched to laptop 7 years ago. I use them during my whole time in university (CS using Linux).
They are very reliable. And (at least the old models that I use) can be fixed manualy when something is wrong (change SSD, RAM, thermal paste,…)
If money is no issue, I would go with a framework (I have no first hand experience with them). If money is to be considered, I would go with a refurbished ThinkPad.
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
Now Linux is obviously a great OS for development, but there’s so much misinfo here.
Other people (MacOS/Winblows) will spend a significant amount of time trying to emulate a Linux environment.
It’s 2023, most shit is either platform-agnostic (Anything front-end, Java, etc) or runs in Docker nowadays. Or both. I run plenty of Java shit in Docker despite the fact that it’d run natively on any major desktop OS. It’s easier to guarantee an environment in a container than get a bunch of Linux users to agree on an environment. Otherwise you get one dev with Java 8 as default as per company spec and then another with Java 17 because some tool they use requires it and they’re too lazy to set 8 as the default and invoke 17 specially for that use case.
Matter of fact, I know most companies I know people at, either use Macbooks or give you a choice.
Does it really take a significant amount of time trying to emulate a Linux environment? Eh, I suppose. I first install brew and THEN install docker. Whereas on Linux, I’d just use the distro’s built-in package manager to install docker, because everything gets deployed in containers for k8s anyway, so why would I run it without docker locally and complicate things?
Linux is the correct (and only) choice for programmers
Also, funnily enough, according to the latest Stack Overflow survey, Windows is actually the most popular OS among developers. Probably because of all the ancient legacy win32 shit. MacOS is second, but if Linux wasn’t split into different distros, it would likely be second (multiple choice survey, so y’know, can’t just add them together linearly), but it’d be a close call anyway.
99.9% of the internet runs on Linux. When you get a job, you’ll most likely deploy to Linux servers
This part is technically true (I believe the real number is closer to 96%, with Windows Server and FreeBSD accounting for the rest), but it’s highly irrelevant because most modern backend applications in production run on multiple layers of abstraction to the point where it doesn’t matter if the development takes place in Windows, Linux or MacOS.
At the end of the day, I want my dev machines to always work, so they’re Macs. My personal desktop is mostly used for gaming and tinkering, so it doesn’t matter if I fuck something up and have downtime. That runs Gentoo with nVidia, KDE and Wayland because I hate myself and want to suffer. That said, OP is a student and should use Linux precisely because they can probably afford the downtime so what better time to tinker? But for work, reliable and polished > tinkering and infinite customizability.
Preface: I’m assuming most people are going to get jobs at a SaaS or hardware company. Obviously, this doesn’t make sense if you’re a macOS, iOS or Windows developer. Also, this is about the work experience, not casual, personal.
most shit is either platform-agnostic… or runs in Docker nowadays
This kind of ties into my point. Docker, WSL, Vagrant, brew. Think of all the time and effort spent on these tools that… just try to create a Linux environment on other OSes. Plus, you have to learn how to use those tools and configure them. Or just use the thing they’re trying to minic, Linux?
Especially at work, making things “platform-agnostic” sucks. You’re always going to need to support Linux—optionally you can add macOS and Windows support, but that’s not required and adds unnecessary complexity. It doubles or triples your workload with low-to-no value tasks that your customers, CI, and app don’t care about.
You could be done with your
sed
bash script to get CI working again, but wait, you have to go back and handle macOS differently and if you have Windows, sheesh. Debugging something? Oh,ip
isn’t on macOS. Ohss
isn’t on macOS. Ohnc
is on macOS, but it’s different.tar
is on macOS, but it’s different.Who wants to learn the tooling and workings of 3 different OSes, when only 1 is required?
Am I saying that software doesn’t run on other platforms? No. I’m saying, when you’re ready, you won’t have to.
Windows is actually the most popular OS
I’m not talking about developer preferences. I’m talking about the tools that are required at work.
it’s highly irrelevant because … multiple layers of abstraction
This is simply not true. And in fact, this is actually a huge problem. Sure, everything is nice when it works, but the problem is when something goes wrong and you’re trying to debug. The layers of abstraction will get in the way. At some point, you’ll have to SSH into a machine and figure out why your app is crashing. Or if you don’t SSH, you’ll try to reproduce the issue locally. The closer your dev environment is to the prod environment, the easier debugging gets.
Additionally, all of those abstractions will change. Each job will use slightly different services or new products will come and old ones will die. Linux skills are more transferrable from job to job and over the long term.
But for work, reliable and polished > tinkering and infinite customizability
Yeah, I’m with you here. Linux gives you the freedom to do whatever the heck you want, even if it’s wrong. I would advise against using Linux for tinkering and customizability. That’s how you break stuff. Stick to well tested hardware and software and get your work done. I’ve always been issued a boring Ubuntu LTS laptop at jobs and I don’t customize it.
Preface: I’m assuming most people are going to get jobs at a SaaS or hardware company. Obviously, this doesn’t make sense if you’re a macOS, iOS or Windows developer. Also, this is about the work experience, not casual, personal.
But that is also what I’m talking about. I don’t know of a single modern SaaS company that deploys straight on Linux anymore. It’s always going to be some form of container nowadays, making it irrelevant which OS you use. Sure docker might be replaced one day by something else, but you’re still unlikely to run anything straight on Linux.
Especially at work, making things “platform-agnostic” sucks. You’re always going to need to support Linux—optionally you can add macOS and Windows support, but that’s not required and adds unnecessary complexity. It doubles or triples your workload with low-to-no value tasks that your customers, CI, and app don’t care about.
What are you talking about here? MacOS and Windows support for the actual backend you’re developing? It’s highly irrelevant, because you’d be using Docker so it only needs to support Linux. And for most popular runtimes nowadays, it’s actually easy to do cross-platform if you were so inclined. JVM doesn’t care what it runs on, Python doesn’t care much either, and Rust compiles for multiple platforms. My jars and Rust binaries still go inside docker if they’re supposed to be backend services, rather than client applications.
Or if you were talking about MacOS and Windows support for desktop applications… I don’t think NOT supporting Windows is wise, MacOS is pretty optional.
You could be done with your sed bash script to get CI working again, but wait, you have to go back and handle macOS differently and if you have Windows, sheesh.
Why do you need to have CI working on your local machine rather than your CI servers (which should be running Linux)?
I’m not talking about developer preferences. I’m talking about the tools that are required at work.
Actually, I’m saying Windows is used more, not that people prefer it more. 47% of people reported using Windows for work, 33% MacOS, 26% Ubuntu and so on.
it’s highly irrelevant because … multiple layers of abstraction This is simply not true. And in fact, this is actually a huge problem. Sure, everything is nice when it works, but the problem is when something goes wrong and you’re trying to debug. The layers of abstraction will get in the way. At some point, you’ll have to SSH into a machine and figure out why your app is crashing. Or if you don’t SSH, you’ll try to reproduce the issue locally. The closer your dev environment is to the prod environment, the easier debugging gets.
My dev environment is actually closer to the prod environment than it would be if I was running everything without these abstraction layers. The abstraction layers are precisely what guarantee sameness. Prod is a Linux container running on Linux. Dev is a Linux container running on MacOS. Since they’re both pulling from the same base images, it guarantees that I have the same version of each system library, etc. No chance of something like prod being Ubuntu 20.04 and dev being 22.04, or prod having Eclipse Temurin while I use Azul, or prod being OpenJDK 17.0.7 and dev being OpenJDK 17.0.8.
Yeah, I’m with you here. Linux gives you the freedom to do whatever the heck you want, even if it’s wrong. I would advise against using Linux for tinkering and customizability. That’s how you break stuff. Stick to well tested hardware and software and get your work done. I’ve always been issued a boring Ubuntu LTS laptop at jobs and I don’t customize it.
And that’s why most companies I know about, give their devs Macbooks nowadays. Much harder to fuck up and regardless of whether you give your employee a Macbook or a boring Ubuntu LTS laptop, they’re going to be running nearly everything in containers anyway.
I know one company near me that does give out Linux laptops - they created their own distro for better control of what updates get installed from the repos. The rest of us use containers to abstract away the host operating system of the dev machine.
I disagree with your take on the framework. The inferior build quality alone is not a good enough reason to say they aren’t worth it over an X1 Carbon or XPS. Neither of those offer easy repairability and the XPS has atroucious IO.
I use a Framework and have run it primarily using Plasma Wayland and Hyprland. Both of these have had fantastic HiDPI support. Both can scale Wayland and Xwayland apps seperately so that you do not have any fuzziness and both support Wayland’s newest fractional scaling protocol.
If you’re running a modern distro (one with good wayland support), you should have no problem with hidpi. The more recent comments in the thread you linked support this.
I highly recommend the X1 carbon too. I run it and fucking love it.
At work we used to roll-out the XPS 13" because Dell officially supports Linux. I personally don’t like it because there’s no USB-A port, but our employees were very happy with it.
g14 6800s open box is 800 atm at bestbuy , if you’re in the US I don’t think that deal can be beat.
But we’d need to know your budget, and some more of your requirements to help more.
If you dont care about gaming, then an old thinkpad would last you the rest of your life.
Don’t make the same mistake I did and get it with a good CPU. Good CPU bad GPU far outweights good GPU bad CPU
Go for Framework, you can upgrade components in a few years instead of buying a whole new laptop.
even better if you can stick it out for a few months and get their new one when it releases
Thinkpads are absolute tanks and support Linux quite well. Would shy away from the T470 and T480 though. The touchpad on those isn’t really well implemented. If you don’t care about reliability my Surface Laptop Go does Fedora Silverblue 38 really well.