PC Build

I have been using Macintosh as my main development machine since collage years. In my opinion it was a step up compared to Windows XP and it has been a popular choice for software development. Apple computer in the 2010s were one of the most powerful and upgradable machine, with stable OS and easy to use developer tools. Up until recently, my last personal machine was a 2011 iMac with upgraded 16GB ram and 256GB SSD in fusion drive.

However, recently I decided to built a new PC instead for my future experiments, which I haven’t done for a long time. I have chosen this path because of both hardware and software reasons. This will be a slight departure of my software mythologies blog, and documenting my journey of learning and experimenting the different technologies at home.

Here is the specification if you must know.

AMD Ryzen 5900x with 12-core CPU ASUS ROG STRIX B550-F GAMING* 64GB memory
Nvidia 2070 8GB memory
2x1TB SSD storage
3x3TB Hard drives
Fractal Meshify 2 case
Noctua NF-A14 and NH-D15 fan

*included motherboard for reference because not all boards support VFIO seamlessly1.

Picking Right Hardware For The Right Job

Most software development jobs should provide a computer for obvious reasons. Some companies would select few models and standardize for the entire company. Such as a laptop for meetings and work from home purpose, or full desktop high performance machine for development.

Tip - There are also companies that provide you a 15 year old 2nd hand machine. In that case, you should prepared to run, or continue to read on for things you can do.

Although higher budget usually means a better machine, not all high performance machine are created equally. As my previous example, a laptop would be more expansive because of its mobility, and slower than a desktop machine with the same budget.

In general, I would look at a machine in 4 areas:

  • CPU ( i.e. Number of cores, clock speed )
  • Memory Capacity
  • Storage ( i.e. NVMe SSD )
  • GPU ( i.e. Productivity benchmark, memory capacity )

A machine learning development focused machine is different than mobile application development, with high-end graphics card to accelerate the machine learning process.

Conversely, a machine focused on app containerization development, or mobile application development will have high core counts CPU ( i.e. 12-core or more ), higher capacity memory ( i.e. 64GB or more ) but emphasize much less on GPU performance.

There are many other hardware factors too, such as 10GBE network card, efficient power supply and future upgrade options.

Tip - I found synthetic benchmarks, such as Geekbench, match quite well for common software development tasks.

Noise IS a Factor

There are many factors beside machine performance. One of the most important requirement for me, would be its fan noise during operation. It is not necessary to have a fanless PC, but I think it should blend in to the environment and not distracting during most workload. This was one of the main reasons I switched to Macintosh many years ago.

P.S. New PC idling at 30dB, still a touch louder than iMac 2019 😢.

A poorly placed fan will have unnecessary turbulence noise, or results in inadequate cooling causing the fan will rapidly spin up and down during short intensive load, such as compiling code.

Allocating some budgets on quality cooling solution too, such as PWM fan with adjusted fan curve, can significantly quiet down the machine and provide a much better user experience.

Tip: An exponential fan curve is better than a linear fan curve, because it will not affected by CPU temperature fluctuations as much during normal usage.

A much less common source of noise from modern PC was hard drive. Its high rotational speed and physical moving parts, creates vibrations and distinctive clicking sound. In 2021, Hard drive should not be used for main storage device, such as storing programs, and should be replaced by Solid State Drive ( SSD ), which is silent and provide massive performance improvement.

Tip: If you must have hard drives in your machine, it can be “spin down” if only needed occasionally.

Apart from setting fan curves, memory profiles. One of most popular topic in recent years would be undervolting the CPU. It enables the CPU run faster with less power, which can further quiet down the machine1.

It Might Be Useful Someday

Although this post was about building a PC at home, it could be relevant at work. You could contribute in specifying a machine that suits your team, or propose upgrades in existing hardware for much better performance.

Tip: Use Three Bullets and a Call to Action instead of just complaining.

Having good work equipment could boost productivity team morale and attract talents too2. I would not work for a company just because of fancy hardware, but having it in job advertisement does draw my attention.

Note: I have proposed the new mac mini for iOS development recently (2021) at work, very interested in how it will perform.

Apple M1 chip with 8‑core CPU, 8‑core GPU and 16‑core Neural Engine
16GB of unified memory
512GB of SSD storage
Gigabit Ethernet

Every Software Developer Should Build a PC Once For Themselves

There are pre-built PCs that cost the same, if not cheaper than building it yourself. They are also very customizable too.

However, I think software developer should at least build their own machine once just like Linus Torvalds just did3. Building a PC even from the ground up has become a lot easier today. There are also pre-assembled options, such as Intel NUC, which the only thing left to do are inserting memory and storage device.

Reference