People who buy laptops for computer programming are often very picky about their hardware and generally have strong preferences about their type of machine. Some like a laptop which is thin and light, like a Macbook, and others demand a 7 row Thinkpad keyboard. People who spend hours using a machine for many hours a day tend to form strong opinions about it, especially if it is their job to understand how that machine works. Many programmers know exactly what kind of machine they want to work on, and it drives them nuts to use another type of machine.
If you are one of those types of people who already knows exactly what you want in a laptop, then you can ignore the rest of this essay. In fact, you should stop reading now, because the recommendations that I give will probably annoy you. If you like something different, this post will grate on your nerves and you will have a compelling urge to tell me why I am not only wrong, but also brain damaged, or at least slightly addled in the brain. If you have these urges, then you are passionate about your hardware, which is why you became a programmer in the first place. I understand, because I am cut from the same cloth.
Take my recommendations as the preferences of one very opinionated programmer who has spent years discovering what he likes and dislikes in laptops. I will try to give you reasons why I think certain features are more important for programmers, but programmers are often idiosyncratic by nature and often develop their own preferences, so don’t worry if you value other things in a laptop.
The first thing to look for in a good programming laptop is the screen. You will spend hours staring at code, so you want a screen that will be easy on the eyes. Color accuracy, full color gamut coverage and all the other things that videophiles worry about it are not important for a programmer. What is important is that the screen be matte (non-glare) so it doesn’t reflect light in your eyes, especially if you work in a place with windows or overhead lights. Staring at code when light is reflected in my eyes drives me batty and makes it hard for me to concentrate. The simple requirement that the screen be matte disqualifies most consumer-grade laptops, since only the enterprise laptops generally offer matte screens.
If you plan to work in a bright environment, or occasionally take your laptop outside, then also check for the maximum number of NITs the screen can output. I find that screens that are rated at 300 NITs or higher are much better to use in bright rooms that the standard screens which are rated around 200 NITs. If you will be working in a dim environment, make sure to check out whether the screen uses Pulse Width Management (PWM) to dim the screen and whether people report being bothered by it.
Programmers often need to be able to see two pages of code, side by side, so make sure that it has a relatively high screen resolution. Don’t even consider buying a laptop with a low screen resolution of 1366×768. I reduce the height of the horizontal panels in the operating system or even move them to sides of the screen, so that I have more vertical screen space to read code. I refuse to use any graphical interface like Mac OS, GNOME 3 Shell or Ubuntu’s Unity, that forces me to stare at a horizontal panel at the top of the screen, because it distracts me from the code.
I used to buy older laptops that sported taller screens with more vertical pixels, because I find it harder to read code when I constantly have to scroll. When the laptop industry started switching to the 9:16 aspect ratio in 2008-9, it was still possible to find enterprise laptops with the old 10:16 screens. However, all of the 2011 models and later have sported the 9:16 screens, so you now have to buy a laptop with very dated hardware to get a taller screen. The only laptop manufacturer which has bucked this trend is Apple, which still offers 10×16 screens, but then you have to live with Apple’s restrictions and its pricing, which I find unacceptable.
The second thing to look for in a programming laptop is a good keyboard. I prefer keyboards which have enough depth, so I can feel the key depress and spring back. The trend is toward thinner and thinner laptops, but I find it hard to type on many of the thin laptops when they have less than 2 mm of key travel. I also find it hard to type comfortably on netbooks and tiny laptops, because I have big hands and my fat fingers will press two keys at a time. If buying a laptop with a small form factor, I recommend trying out the keyboard before buying.
I refuse to buy any laptop that skimps on keys. If the laptop doesn’t have separate Home, End, PageDown, PageUp, Delete, Insert and F1-F12 keys, then I find it a hassle to use. Apple started the trend of making keyboards where the user has to press an additional Fn key in combination to get these keys, and unfortunately many of the other laptop manufacturers have followed Apple’s bad example in keyboard design. Most of today’s laptops have mapped functions on top of the F1-F12 keys, so you have press the Fn key to get the F1- F12 keys. I regularly use key combination like Control+Home/End, Shift+Home/End and Alt+F4 when programming. I find it much harder to press 3 keys at the same time than to press 2 keys, so Apple-style keyboards make me much less productive. If a laptop doesn’t have an option in the BIOS to make the F1-F12 keys the default, then I will not consider buying the laptop. I don’t use functions like Volume Up or Screen Brightness Down enough to want them to be the default keys and I never use them in combination with other keys.
I prefer laptops with the old style of keys and status lights for caps lock, number lock, harddrive access and wireless activity, but it has now become impossible to find a laptop with these features. For years I bought Thinkpads, mainly because of their excellent Linux support, but also because of their 7 row keyboards and their status lights. I liked to be able to tell at a glance what was happening with the harddrive and WiFi. I loved the old Thinkpad keyboards, because the keys were designed to pop off, so that I could clean out any gunk under the keys.
When Lenovo switched the Thinkpad series in 2012 to 6-row chiclet-style keyboards and eliminated the status lights, I vowed that I would never buy another Thinkpad. However, when my old Thinkpad T410 broke down after 5 years of use, I looked around and found that none of the other laptop manufacturers offered a decent laptop with old-style keys, status lights and the 10:16 aspect ratio in the screen. Repairing the T410 would have cost me more than it was worth, so I gave up and bought a new T450s. I had used chiclet-style keyboards in other models at work, so I expected to detest the chiclet keys on the T450s, but they worked much better than I expected. In fact, I find that I have fewer key misses on the T450s, especially on the space bar, than with the T410. However, the F1-F12 keys on the T450s are smaller with little intervening space and their labels are even smaller, so that I often press the wrong function key by accident.
Switching between different keyboards at home and work can be tricky and trying to retrain your muscle memory to a new key layout can take time. Whenever I buy a new laptop, I like to first try out its keyboard in a store like Best Buy, where I can compare it to several other models. After I tried out the MacBook Pro’s keyboard, I knew for sure that I would have trouble working with it. Not only did the keys feel less responsive than the Thinkpad keys, but the need to constantly press the Fn key took me longer to edit code. I had an even worse experience with the keyboard on the Sony Vaio. The keys were so hard and took so much pressure, that I started to develop carpal tunnel syndrome after using it for several weeks at work. Typing on the Vaio’s keyboard made the tips of my fingers grow numb and tingly. I have found the keyboards on some Dell laptops to be better for carpal tunnel syndrome, since they have a softer touch and require the less force in the key press.
There is also a great deal of variety in touchpads. I don’t particularly care for the larger touchpads which Apple popularized and have now been widely copied. I rarely use multiple finger gestures, and I find that the larger surface causes more accidental palm brushes when I am typing. Unfortunately, the Linux drivers for touchpads are often very poor. If you plan to run Linux on a laptop, then make sure to search online for Linux users’ opinions about the touchpad, especially if you don’t like using an external mouse. I look for laptops with Synaptics touchpads, because they tend to work better than Elantech and ALPS in Linux, but I am still frustrated by their poor palm detection when typing. I have to fiddle with synclient to turn off the touchpad when keys are being pressed.
Most of the other features that you will need in a programming laptop depend on how you work and your type of programming. If your laptop will be used in place of a desktop PC, then you probably need a docking station, especially if it is a thin-and-light laptop without many ports. If your laptop will be plugged into two monitors on your desk, then you will probably want a dedicated graphics card to drive both screens. If programming for many different operating systems, then load up on RAM and buy a fast CPU in order to run multiple virtual machines at the same time. If planning to run Linux, then look for models whose components run well with free/open source drivers. I avoid nVidia graphics cards because I don’t want to use proprietary graphics drivers in Linux. If a laptop requires a proprietary driver to run the fingerprint reader, wireless card or media card reader, then I avoid buying it. Long experience has taught me to avoid hardware that requires proprietary drivers in Linux. The components might work well with one kernel, but not with the next kernel upgrade.
If you plan to lug around your laptop all over the place and want it to last a while, then do NOT buy consumer-grade laptops. They simply aren’t designed for much wear and tear and they won’t hold up over time.
I am very rough on my personal laptops. I eat food while I am programming, so bread crumbs get under the keys and drinks get spilled on the keyboard. I frequently trip over the power cord, yanking the laptop off table tops. I like to lie in bed and work on code, but that means that I occasionally forget about it and roll over on it or accidentally sit down on it when it gets hidden under the covers. I destroy every power cord, fraying it at the point where it plugs into the laptop, because the cord frequently gets tugged at an angle. I end up killing the optical drives on my laptops, because I watch hours of movies on them. I throw my laptops in my backpack and pile books or groceries on top. Before I started buying T-series Thinkpads, I wore out every laptop I owned after 2 to 3 years of heavy usage. The screens got scored because I loaded too much weight on top of them in my bag. The AC-DC power converters died. The power cords frayed and needed to be resoldered and wrapped in tape. Keys stop registering presses or popped off. Hinges broke. CCFL screen lights burned out. Harddrives died. Batteries inevitably degraded until they could no longer hold a decent charge.
Most consumer-grade laptops aren’t designed to be fixed, especially the ones made in the last decade, so when something breaks, it is often easier to throw them away than try to fix them. After you have attempted to open a couple cheap consumer-grade laptops which are held together with plastic pressure tabs and have glued down or soldered down components, you quickly decide that it is worth paying a premium for an enterprise-grade laptop like a Dell Latitude, Lenovo Thinkpad or HP Elitebook which undergoes stress and drop tests and is designed to be opened up and fixed. Enterprise-grade laptops typically cost 50% more than a consumer-grade laptop with the same components but I find that they save me money, because they generally last twice as long. These machines are designed for long warranty service, so they are well constructed with quality components are expected to last for at least 5 years.
In contrast, the laptops that I use at work in the office hardly ever have a problem. They sit quietly on my desk and never move. The optical drives never die because I rarely ever use DVDs at work. These laptops never get yanked off my desk and their power cords never fray, because they lie coiled under my desk where nobody can trip on them. Aside from an occasional meeting, these laptops are never picked up and hauled around. I don’t spill my drinks on them, because I don’t eat at my desk when I’m working at the office. I am currently using a 7-year old low-grade Acer Aspire, which is slower than a turtle, but the company hasn’t assigned me a better laptop, because I can use it as a remote screen to my desktop PC which does the heavy lifting.
I no longer buy consumer-grade devices or thin-and-light devices which aren’t designed to be fixed. I have needed to upgrade the RAM and hardrrive and replace the keyboard and cooling fan enough times in my lifetime, that I refuse to buy any laptop where the SSD and RAM is soldered on the motherboard and case isn’t designed to be opened with a standard screwdriver. I won’t even consider buying a laptop which doesn’t have a removable battery, because I know that lithium ion batteries typically loose their charge capacity very quickly after 500 full charge/discharge cycles, and I want my laptops to last longer than two years. It impossible to find any recent tablets which have removable batteries, but I always check ifixit before buying tablets to check out how tedious a job it will be to replace the battery in a couple years time.
Many programmers have a totally different attitude toward their hardware. They expect to replace their devices every two or three years, so longevity and fixability are much less important to them. They are willing to spend the money to buy the latest shiny toy on the market, so they don’t worry about replacing a laptop’s components. They also don’t get a kick out of cracking open the case and looking inside like I do. Part of the reason that I program is because I like to figure out how stuff works. I want to be able to take my laptops apart and put them back together. I assemble my own desktop PCs, because I find hardware inherently fascinating and enjoy learning about each of the components.
Most professional programmers that I know own an expensive laptop with a recent Core i5 or i7 processor and a fast SSD drive. Some own premium thin-and-light laptops like a MacBook or a Thinkpad X-series and others own hefty workstation laptops like a Dell Precision, HP ZBook or a Thinkpad W-series, but their laptops are inevitably expensive models if they are out of school and no longer on a tight budget.
If they are working on large C/C++ programs, then they might need a fast CPU, so that they don’t have to twiddle their thumbs while their code compiles. Likewise, they might need a fast GPU if doing game development or programming GPGPU (general-purpose computing on graphics processing units). Most programmers, however, don’t do that kind of coding. According to RedMonk, the 20 most popular languages are:
The most common type of programming today is web development, which doesn’t require a very powerful machine. The development of mobile apps, which is a growing category of programming, also doesn’t require much horsepower. Most programming is done with interpreted languages, so long compile times aren’t an issue. Few programmers work on scientific programs or other types of code where performance is truly important, and if they do, they often off-load the processing to a server, so they don’t need a fast processor in their laptops.
Most programmers who need a fast processor do most of their coding on desktop PCs, so the laptop is mainly a secondary tool for when they want to take their work home. They buy the laptop for working while on the road, attending meetings or giving presentations, but most of their work is done on the desktop PC, where high performance costs much less.
If most programmers don’t need that much processing power or the latest hardware, why do they often buy expensive laptops? Mainly it comes down to the fact that they are people who appreciate good hardware and they don’t enjoy working on machinery that they consider inferior. Most could work on a machine that costs $1000, but they buy laptops that cost closer to $2000, because they enjoy owning high quality devices.
If they are buying thin-and-light, then they appreciate how much can be packed into such a tiny form factor. They appreciate the carbon fiber or aluminum alloy casing, that is stronger and lighter than the cases on cheap laptops. They appreciate good styling and he tway a thin-and-light laptop feels when held in the hands. Some of the best coders have a strong sense of aesthetics, so they appreciate the styling that goes into an expensive thin-and-light laptop. Linus Torvalds famously used a Macbook Air for a while to the chagrin of free software advocates who detest Apple’s policies, because he likes the clean, minimalist design of the hardware and wanted a silent computer without the distraction of a whirring fan. I often see two types of laptops being carried around at developer conferences, Macbooks and Thinkpads. They have two totally different aesthetics, but they both do it well, and programmers can appreciate their styling and the careful thought that went into their design. Since I’m a tinkerer and an environmentalist, I detest the locked-down design and the planned obsolescence in Apple’s devices, but other programmers feel just as passionately that Thinkpads are ugly and boxy.
If programmers buy desktop replacement laptops, then they often buy beefy machines with the fastest CPUs and GPUs they can find. They may not truly need the performance, but they appreciate the speed of the latest Core i7 and the number of frames per second that the latest nVidia card can push on the screen. They run benchmarks on their machines and can tell you the exact model number of their CPU and GPU. They may have swapped out the RAM or SSD that came in the machine. They obsessively read the online reviews that benchmark the best hardware. They can tell you exactly why they bought a Samsung 860 Pro PCIe 3.0 M.2 SDD and won’t shut up about why that old mechanical harddrive on your laptop sucks.
The truth is that you will probably not notice the difference between a second generation Sandy Bridge and an seventh generation Kaby Lake processor when writing code, except in amount of energy the CPU sucks and how much the fan has to spin to cool it. The biggest improvement for most people has been the fact that latest Intel processors can fit in thinner and and lighter cases, so they aren’t as heavy to lug around in a backpack. However, cutting and pasting code in your code editor won’t be any faster than it was 5 years ago and your code will probably be fast enough on your local machine running PHP+MySQL+Apache+Chrome or a Android emulator that you will hardly notice the difference. Shrinking from a planar 32nm to a FinFET 14nm process node might be fascinating on a technical level, but new CPUs won’t make most programmers any more productive.
However, there is a reason why it is worth your time to pay for expensive hardware. If you like the machine that you have to work on, then you will be happier and more content when coding. If it delights you that your machine is lightening fast and it completes each task milliseconds faster, then you will want to spend more time using it. If you constantly notice something that is poorly designed, then it will constantly niggle at the back of the mind, making it harder to concentrate on your code. Paying a 1000 extra dollars for a machine that you like might be worth it to you, because it makes you more productive and causes you less stress. I know that staring a glossy screen for hours on end puts me in a bad mood, as does looking at a poorly designed laptop case. Likewise, I get annoyed and distracted when I have to use Windows 10, GNOME 3 Shell or Mac OS, because I don’t like their interfaces, but Mate and Cinnamon can be configured just the way I like them, so it is much easier for me to concentrate on my work.
For me, paying $2000 for a top of the line laptop is not worth it, nor do I feel the urge to buy a new laptop every two years just to try out something new, but if it makes you happier and more productive then it is money well spent. Many people got into programming, because they are technophiles that love to play with the latest gizmo or run benchmark tests to see how hard they can push the hardware. If that is what gives you joy, then I wouldn’t worry too much about the extra expense. If you have to spend 8 hours or more every day staring at your laptop, then you might as well buy a device that you enjoy using. People buy $200,000 cars just for the sheer pleasure of driving them and purchase jewelry costing $50,000 just to wear it a couple times a year. Count yourself lucky that you can be made happy by a device that costs so little compared to all the other things in life, but be aware that it isn’t really necessary so don’t get too upset if you have to occasionally do a job using inferior hardware.
I have met programmers schlepping around a T61 or X61 built in 2007, because it was the last Thinkpad model with a 3:4 screen, or a T420 from 2011 because it was the last model with a 7 row keyboard, or an X230 from 2012 because it was the last model to support Coreboot. These programmers have figured out that they don’t really need that much processing power and other features like additional screen space, special keys, or 100% free software are more important to them.
What is worth it to me is not the latest and fastest hardware, but rather hardware that I can control and doesn’t violate my principals. Every time I buy a new laptop, I am willing to spend a couple days configuring it to run exactly as I like in Linux. I try out new desktop environments and different distros and I spend hours experimenting with different settings and upgrading to new versions of the software. If I ever bothered to calculate the hours I spend fiddling with Linux and put a price on those hours, I probably loose far more money than the technophiles who waste a couple thousand dollars on new hardware every year. However, I consider my time fiddling with Linux to be well worth the price, because it makes me far happier and more productive when I am coding to use a laptop and a software environment that I enjoy using.
Whatever laptop you end up using when you are coding, choose a model that sports the features that you find to be important. I find that I don’t need a very fast CPU nor a powerful GPU. I need 8 gigabytes of RAM or more to be able run virtual machines, but I can get by with any decent mobile dual core processor since Arrandale in 2010 that has integrated graphics and supports virtualization. I can tell the difference between the speed of a harddrive and an SSD, but the biggest difference for me is the fact that I can’t hear the SSD. On the other hand, I am much more productive when I have a high resolution matte screen, a quality keyboard with decent key travel and a full complement of keys and Linux-compatible hardware. I want a laptop which is designed to withstand abuse and is easy to fix and upgrade.
Other programmers, however, want wholly different things in their laptops than I. The best advice that I can give is to choose the kind of laptop with the features that you appreciate, since those features will make you most comfortable when coding, so that you can better concentrate on your work. For some people, the best programming laptop is a Macbook Air, but for me, it is a Thinkpad T-series. For most types of programming, the hardware doesn’t matter that much, so the most important question is what kind of laptop you prefer to use. Answer that question, and you probably have the perfect programming laptop for you.