This is amazing. I was just interviewed by Fog Creek on their development blog. We talked about how I got into software development, what I currently do, my current setup and my favorite books. I've been a lifetime fan of Fog Creek Software and it just feels so great to be interviewed by them.
I'm making a backup copy of the interview here on catonmat. This is the full interview and has some extra content and pics.
My friends and blog followers offered to translate the interview in several languages. Currently Russian and Chinese translations are available:
- Russian translation
- Chinese translation
- Portuguese translation
- English original
- Want to help with translation in your language? Email me firstname.lastname@example.org!
Here's the full interview.
How did you get into software development?
I’ve been playing with computers since around the age of 6 when I first got access to a 386 or 486 computer at mom’s work. The first time I sat at a computer I was completely hooked. From then on I was dreaming every day to have my own computer. It took me a while to get a computer and until I did I tried to get access anywhere I could. I made a ton of friends who were interested in computers and used their computers. I even pretended to be a student at several universities while being just a kid to gain access to the Internet!
I actually got a laptop first. I had a friend called Zombie and he was this amazing sysadmin. Somehow he had a spare laptop and he gave it to me for free. I still have it. The IBM Butterfly laptop (ThinkPad 701CS). It had 8 MB of RAM, 800MB disk, and I dual booted Windows 95 and OpenBSD on it. I later upgraded it to 40MB of RAM. I just tried booting it but it no longer works. It also had a thinnet PCMCIA network adapter card and my first home network was 10Mbit/s thinnet. For those of you who haven’t heard of thinnet, it’s Ethernet over coaxial cable, aka 10BASE2.
IBM ThinkPad 701CS butterfly laptop. No longer working.
I finally got my own computer much later though at the age of 15. It was a killer machine running a 400Mhz Celeron with 256MB of RAM, 8GB hard drive, a 3D Blaster Banshee 16MB video card, and a 17” 75Hz 1024x768 CRT screen. The computer was running Windows 98 that just had come out.
Intel Inside Celeron.
What language did you start out with?
Self taught, or learned at school?
I’m 100% self taught. By the time I finished high school I already knew so much about computers that I could’ve taught practical courses at universities. I didn’t know much about the theory of computation though. I learned the theory much later. I realized that I’d be wasting time if I studied computer science so instead I went to study physics and it was an awesome choice. I learned so much about nature and also a lot of math that I was later able to use to learn the analysis of algorithms and to understand advanced computer science topics.
Tell us a little about your current role (and/or personal projects). What do you do and what does a typical day involve?
My typical day involves writing a lot of code, managing servers, working with my customers and my employees. I love what I do and I currently can’t imagine myself doing anything else than running a software company. I was a huge Paul Graham fan and his essays encouraged me to start a startup. A while ago I wrote a blog post about how I started Browserling and raised money for it.
Catonmat is one of my personal projects. About 10 years ago I had this big dream to create a really popular programming blog. I was reading Coding Horror and Joel on Software and I wanted my own programming blog as well. So in 2005 I bought the catonmat.net domain and soon started blogging. I simply started writing about all things computing. People liked my articles and my blog quickly gained popularity. Right now I’ve over 17,000 subscribers and I get about 100,000 unique visitors a month.
In 2011 my articles were exploding in popularity, getting millions of views, so I thought it would be interesting to convert some of my most popular articles into books. One day I just opened book.tex, copied articles to the file, edited and converted them to LaTeX, integrated PayPal payments and published the book on my blog. Sometimes opening a text editor is all it takes to create a new product. So far I’ve published books about Awk, Sed and Perl. It’s been a success and I’ve sold thousands of copies of my books. Take a look at my books.
What are you currently working on (or other interesting recent project), what challenges has it thrown up and how did you overcome them?
I’m currently 100% focused on growing the business. I don’t do any side projects and have stopped writing books as that would shift my focus away from the company. The number one rule of building a successful company is having 100% product focus. I’m currently growing revenue and building an international remote team at Browserling. I just hired a great engineer in Ukraine and I’m expanding the company to non-English markets. I’m also solving a lot of technical problems, such as how to efficiently stream browsers running on virtual machines to clients and how to capture hundreds of browser screenshots per second. I also love working with servers and I’m planning to move the server stack from EC2 and Rackspace cloud instances to real hardware. Cloud servers are great when you just start but once you get to a certain point it makes a lot sense to switch to your own hardware. It saves a lot of money and increases performance.
When are you at your happiest whilst coding?
I’m happiest when I’m in the zone and when I get things done. I’m able to get into zone quite often and I can share my secret. I’m up during the night and I sleep all day. Night is the perfect time for being in the zone. Night eliminates all distractions and keeps you alert and focused. Another secret to being in the zone is closing twitter, facebook, skype, gtalk and g+. When you’re in the zone, you don’t want be disturbed by sudden sound alerts or messages.
What is your dev environment? - What's your development setup? hardware, OS/distro, editor, plugins
I’ve a dual Windows/Linux setup. I use Windows 7 on my primary workstation and I ssh into my Linux servers. I just built a brand new workstation last month. I got an Intel i7 4790K and overclocked it to 4.7Ghz. I love to overclock computers. You can get so much free computing power by doing so. This new CPU has the base frequency is 4Ghz, but I’m running it at 4.7Ghz, which is 17.5% of free computing power! I actually want to lap this CPU and heatsink and get it running at 5Ghz. I wrote a blog post earlier this month about how I built the computer. The blog post is called My New Workstation for the Next Two Years.
Kitties helping me to build my new workstation.
Then I’ve a Linux firewall server, a Linux file server and a Linux development server. I mount the Linux file server on Windows over samba, and it runs a bunch of drives in RAID6, which allows for two drive failures. All these Linux servers run Slackware. I love the simplicity of Slackware. I go with minimalistic installs and then add only the packages that I need. So for example the firewall doesn’t have much more than bash, vim and iptables. The file server has bash, vim, cryptsetup and samba. And the development server has everything I need for development.
I cycle computers every few years. I get a more powerful workstation and move the old workstation as a server.
I use vim on Windows and Linux, and gvim and Visual Studio on Windows. I can’t imagine doing Windows application programming in an environment without IntelliSense. I’ve a highly customized vim and I use two dozen plugins, such as:
- surround.vim (quickly edit surrounding text)
- repeat.vim (repeat surround commands)
- matchit.vim (extend what % key matches)
- snipmate.vim (code snippets)
- nerd_tree.vim (explore filesystem from vim)
- a.vim (alternate C and H files)
- ragtag.vim (mappings for editing HTML)
- tabular.vim (aligning text)
- bufexplorer.vim (working with buffers)
- python.vim (better python support)
- exchange.vim (exchange text quickly)
- abolish.vim (substitute words)
- speeddating.vim (increment dates)
And many others. You can find and download these plugins at the scripts section of Vim homepage. I started an article series called Vim Plugins You Should Know About, where I teach you how to use these plugins. Take a look, if you want to customize your vim and be much quicker.
What software tools do you use and couldn’t live without?
There are so many tools that I couldn’t live without. On my Windows computer, I couldn’t live without:
- Total Commander (file manager)
- Visual Studio (can’t beat IntelliSense)
- SQLyog (GUI manager for MySQL databases)
- SQLiteSpy (GUI manager for SQLite databases)
- pgAdmin (GUI manager for Postrgres databases)
- WinSCP and SecureFX (secure ftp clients)
- Putty and SecureCRT (ssh clients)
- KeePass (password manager)
- ClipX (clipboard manager)
- Launchy (program launcher)
- Locate32 (file indexer)
- allSnap (window manager)
- AutoHotkeys (automate tasks and programs)
- Virtual CloneDrive (mount disk images)
- IsoBuster (extract disk images)
- ImgBurn (image burner)
- Enounce MySpeed (speedup or slow down videos)
- Hex Workshop (hex editor)
- VMWare Workstation (virtual machines)
- Cygwin (unix tools)
- UltraMon (multi-screen support)
- Beyond Compare (diffing tool)
- Tclock2 (better clock)
- Fineprint (printer proxy)
- SumatraPDF (better PDF viewer)
- AviSynth (edit videos programmatically)
- ffmpeg (convert videos)
- VirtualDub (convert and edit videos)
- WinDirStat (disk space visualization)
- clink (better cmd.exe)
- IDA Pro (debugging)
- Sysinternals tools
I once wrote about all these programs on my blog in an article called Must Have Windows Programs.
On Linux, I couldn’t live without:
- samba (mounting Linux on Windows)
- tmux and screen (persistent shell sessions)
- all the standard UNIX utilities (awk, sed, grep, head, tail, uniq, sort, etc.)
- perl (rapid prototyping, quick hacks, one-liners)
- iptables and nftables (firewalling)
- htop (better top)
- mtr (better traceroute)
- multitail (tail multiple files in multiple windows)
- nc (netcat, TCP/IP swiss army knife)
- iftop (bandwidth monitor)
- ack (better grep)
- ipcalc (network address calculator)
- pv (pipe viewer - UNIX pipe progress bar)
- rsync (backups)
- ncdu (disk space visualization)
- curl (http client)
- nmap (network scanner)
- tcpdump and wireshark (for network debugging)
- sysdig (strace + lsof + tcpdump combined)
- youtube-dl (downloading all online videos)
And many more tools.
Do you code sitting, standing? listening to music? any coding quirks?
I code sitting. I’ve never tried coding standing or walking. That just seems too weird. When I’m in the zone, I listen to Vocal Trance stream from di.fm. But only if I’m in the zone. Otherwise music is too distracting. I couldn’t code without a Microsoft Natural keyboard. I’ve had mine for over 10 years. It still works well but is showing age.
My 10 year old Microsoft Natural Multimedia keyboard.
I take a lot of notes when trying to figure something out. As soon as I’ve a more complicated problem, I try to break it up in smaller sub tasks that can be easily solved. Then I create a todo list for the tasks, get them done one by one, and cross them out. Actually I’ve several todo lists of long term tasks (next 1-2 years), mid (next few months) and short term tasks that I’m doing right now.
I take a ton of notes when working on problems. I blurred the photo because it contains private information.
I also keep a printed copy of Google Calendar for the next few months and the next year somewhere near me. I use the yearly calendar to keep track of milestones and projections and I use the monthly calendars to keep track of the most important things I need to done soon.
Pen and paper are programmer’s best friends.
My best friends when programming.
What are your favorite books/articles about coding or development practices?
I’m crazy about computer books and science books in general. Every few months I spend a day researching the latest literature and buying the most interesting titles. I could probably go on forever about my favorite books. I’ve so many. I’ll list my top 5 coding, development and computer books.
A must read for anyone interested in computers. This excellent book contains 66 short essays on the most important and interesting computing topics, such as compression, Turing machines, formal grammars, non computable functions, and neural networks. The writing style of this book is casual and it contains almost no math. It’s my favorite book of all time.
This book teaches how to think about multithreaded execution and how to solve synchronization problems. I highly recommend it, especially if you’re self taught. It leads the reader step by step through a series of classical and not so classical synchronization problems. It’s great fun to work through the problems and I’ve been recommending it to everyone ever since I found it.
Classic programming books. Jon Bentley knows how to write clearly and enthusiastically about algorithms. These books are timeless and they teach you how to reason about problems, break them apart, and efficiently implement the solutions. You’ll pass the Google interview if you read these two books.
The Little Schemer teaches you a little bit of LISP in the most fun style ever. The book is a dialogue between you and the authors about hundreds of tiny Scheme programs and it teaches you to think recursively. This book will make you think and will stretch your mind a little. It’s one of the most fun programming books ever written.
The Elements of Style is not exactly a development or coding book but a book on writing. To be a great programmer you need to communicate clearly and writing skills are essential. It’s 100 pages long and you can read it in one evening.
The Elements of Programming Style is a classic programming book by Kernighan and the form of this book is strongly influenced by The Elements of Style. It’s an old book but mostly everything it teaches still applies today. It contains 70 rules of programming such as:
- Write clearly – don’t be too clever.
- Say what you mean simply and directly.
- Choose a data representation that makes the program simple.
- Let the data structure the program.
And I just got started. I could easily do my top 100 favorite books. Message me if you need book advice or want to talk books with me!
As a bonus, I recommend my own book Perl One-Liners, published by No Starch Press. Being fast in the command line will save you thousands of hours throughout your career. Once you master one-liners, you’ll be solving quick one-time tasks in seconds. I’ve seen programmers spend hours writing programs for tasks that can be done in 20 seconds with a one-liner. Don’t be that programmer.
What technologies are you currently trying out or want an excuse to try?
There is so much technology that I want to try that I don’t even know where to start.
I’m a big Visual Studio fan so I just downloaded Visual Studio 2015 Preview and have been playing with it. I also just installed Windows 10 Preview on a virtual machine. Since I do so much cross-browser testing, I’m really looking forward to see what Microsoft’s new browser called Spartan will offer. I’ll be adding this browser to Browserling as soon as it comes out.
Google just open sourced Kythe a few days ago that should be a way better code indexer and explorer than anything else out there. I heard about it last year already from a Googler friend and I was been impatiently waiting for it. I’ll be trying it on Linux Kernel’s source this weekend.
If I had more time, I’d combine Oculus Rift with a motion platform to build a true virtual reality rig. I’ve tried Oculus Rift alone and it felt unreal but with a motion platform it would feel even closer to reality. And then I’d do a Kickstarter and mass produce this for everyone.
When not coding, what do you like to do?
I like to keep myself in shape. I do track and field. I’ve found that sprint workouts are better than coffee. On the days when I do 10x60m sprints I get energized for 10-12 hours and I code like a beast all night long. I also like to compete in track meets. 400m sprint and 800m race are my favorite distances.
Running a 800m race.
What advice would you give to a younger version of yourself starting out in development?
I can think of four advices to my younger self:
1. Get things done quickly, efficiently and move on.
2. Don’t do things that don’t create value.
3. Start a programming blog much earlier.
4. Release early and often.
If you're interested in translating my interview to other languages, email me email@example.com.
Until next time!
A few days ago I watched How Computers Learn talk by Peter Norvig. In this talk, Peter talked about how Google did machine learning and at one point he mentioned that at Google they also applied machine learning to hiring. He said that one thing that was surprising to him was that being a winner at programming contests was a negative factor for performing well on the job. Peter added that programming contest winners are used to cranking solutions out fast and that you performed better at the job if you were more reflective and went slowly and made sure things were right.
Watch the relevant video fragment from the lecture:
Peter Norvig says that being good at programming competitions correlates negatively with being good on the job at Google.
Video URL: https://www.youtube.com/watch?v=DdmyUZCl75s.
You can watch the full lecture here:
How Computers Learn - Vienna Gödel Lecture 2015 by Peter Norvig.
Video URL: https://www.youtube.com/watch?v=T1O3ikmTEdA.
I extracted the fragment from the QA session at 1h 11m 50s.
If you're a first time entrepreneur incorporated in Delaware and you've authorized the standard 10,000,000 shares, you'll probably freak out when you receive your first Delaware franchise tax bill for approximately $70,000.
I received a franchise tax bill for $71k.
Don't freak out! You can pay just $400 instead of $70k. Here's why. In the state of Delaware tax can be calculated using two methods:
- The Authorized Shares Method (default method used to issue the tax bill)
- The Assumed Par Value Capital Method
You can calculate and pay tax using one of these methods. One of them will produce a smaller tax bill depending on the structure of your corporation.
Just call your Delaware registered agent and they'll take care of this.
Your registered agent will use the assumed par value capital method to recalculate the tax and you'll pay $400.
And that's what I did. I paid $400 in Delaware state taxes using par value capital method instead of $70,000 that was on the bill.
Here's a brief overview of both methods.
The Authorized Shares Method
Using the authorized shares method you pay $75 for every 10,000 authorized company shares. Here's how you approximately calculate the franchise tax using this method:
total number of authorized shares / 10,000 * $75
If you've 10,000,000 authorized shares, you'll get hit with a $75,000 tax. This is the default method that is used to calculate the franchise tax in Delaware. This is the tax bill you'll get. Don't pay this. Instead use the assumed par capital method.
The Assumed Par Value Capital Method
The assumed par value capital method uses a completely different way to calculate tax that involves total gross assets, issued and authorized shares, and the par value per share. This method is much more complicated but it produces $400 in the end. :)
It's quite impossible to explain the steps you need to take to calculate the tax using this method in a blog post. Please see examples, calculator and more information see How To Calculate Franchise Taxes on the State of Delaware website. Or better yet just call your registered agent and they'll calculate and pay this on your behalf.
Until next time!
I love my customers and users at Browserling so my team and I launched a public support forum a little while ago. Everyone is welcome to participate, even if you're not a Browserling's user. I love my blog readers, too. :)
The implementation was very straight forward. We created two database tables - one for discussion topics, the other for answers. The main support page selects all visible topics from the discussion topics table and renders them as html. When you go to a particular discussion topic, the answers get loaded from the answers table.
Being in touch with your users and solving their problems quickly and efficiently is something that every company should focus on. We strive to be excellent to our customers and users at Browserling.
Until next time!
I love working fast and I love getting things done quickly. To get things done quickly I need fast computers so I just built a new, fast and pretty cheap workstation. I'll use it for the next two years, then move it as a server, and get a faster workstation again. My budget for this build was $2,000 (± $250) but I managed to get a great build for less than $1,500.
Here's the build that I got:
- Chipset: Intel Z97
- Motherboard: ASRock Z97 Extreme6.
- CPU: Intel i7 4790K aka Devil's Canyon. 4 cores, 8 threads. 4Ghz. Haswell architecture.
- Memory: Crucial Ballistix Tactical 2x8GB. PC3-14900 (1866Mhz).
- HDD: 2 x Samsung EVO 840 250GB SSD SATA 6Gb/s in RAID1.
- PSU: Corsair AX760.
- Video: built in (Intel HD Graphics 4600).
- CPU Cooler: Phanteks PH-TC14PE.
- Case: Corsair Obsidian 550D.
- Extra 140mm case fan: Noctua NF-A14 PWM Premium Fan.
- New keyboard: Microsoft Natural Ergonomic 4000.
I spent a lot of time choosing the components. I was optimizing for performance per dollar and electronic component quality. I run my computers 24/7/365 and do very important things on them, so I was ready to invest in high quality electronic components that won't fail on me.
At first I was thinking of going with the latest Intel's X99 chipset and the latest 22 nanometer Haswell-E architecture 5960X processor (8 cores) but after some research I decided to go with the Z97 chipset and 22nm Haswell 4790k processor (4 cores).
The new X99 chipset only supports DDR4 memory. DDR4 is just still too new and expensive, and it doesn't run much faster than DDR3 in real world applications. The 5960X has a base clock speed of 3Ghz but the 4790K runs at 4Ghz. 4790K outperforms 5960X by a huge margin in single threaded applications because of this extra gigahertz. It's actually the top #1 CPU in single threaded benchmarks, beating all Xeons, and other CPUs. And it overclocks like a beast to 4.7Ghz and more with no problems.
I chose the ASRock z97 Extreme6 motherboard. According to Tom's Hardware this motherboard leads the performance per dollar chart. Unlike other motherboards in the $150 range, this motherboard has the high quality 12K capacitors and a 12-phase electric power circuit for the CPU. It was a no brainer to go with this board at this price.
My build has no graphics card because I don't play games and the 4790K has an integrated graphics processor (Intel HD Graphics 4600). Intel 4600 supports up to 3 screens and ASRock's Exteme6 motherboard has exactly 3 video outputs HDMI, DVI and Display Port.
Choosing the memory was very simple - the cheapest 16GB 1866Mhz DDR3 memory with 9ns CAS latency, which at the purchase day happened to be Crucial Ballistix Tactical BLT2KIT8G3D1869DT1TX0. There is no point in going with more expensive DDR3 memory (such as 2133Mhz memory or faster) because the benchmarks show that as the frequency goes up (to 2133Mhz or faster), the latency goes down (to 11ns or slower) and you don't get much benefits in real world applications. The synthetic benchmarks (raw write/read) show an increase, but the real world applications don't work that way and you get no benefits. 1866Mhz CL9 is the speed you want to go with with DDR3.
For cooling I went with the top ranking air-cooling beast Phanteks PH-TC14PE. A cooler processor computes faster and has a longer life span. Unfortunately my Phanteks cooler arrived scratched, dirty and with someone else's fingerprints. The package had thermal paste smeared on it as well. It looks like Amazon messed up and put a returned cooler on sale. That was really upsetting because this cooler was priced at $80 so I was expecting a brand new product.
Mounting it on the motherboard wasn't easy. The spring screws simply wouldn't align properly and it took me more than 5 attempts to get it secured to the board. Perhaps that's why it was so scratched when I got it. The previous owner couldn't attach it to the board as well. Also the instructions were very confusing and I mounted the fans the wrong direction.
For my next build I'm going with the Noctua NH-D15 cooler. The benchmarks show Phanteks and Noctua perform pretty equally. I tried Phanteks, was disappointed and now you, Noctua, have my attention.
I'd never go with water/liquid cooling though (such as Corsair H100i) because liquid systems need too much maintenance and they can leak if installed improperly. Even if installed properly, a liquid cooler can start leaking or it can have micro-leaks that will slowly cause problems down the road. I don't want to deal with these sorts of problems and I don't want to do any maintenance once my computer is under the desk.
As for the PSU, I went with Corsair AX760. It has brilliant engineering and is considered to be one of the best PSUs. It's also very expensive, currently priced at $180. Corsair AX760 is a 760 Watt 80+ Platinum Certified PSU. When you're building a professional workstation, the PSU is the one thing you don't save money on and go all in.
Corsair AX760 runs at 90% efficiency at moderate loads.
Corsair AX760 runs at 90% efficiency at moderate loads.
I know 760 Watts is an overkill for a workstation that consumes 250 Watts at most but there aren't lower power Corsair AX-series PSUs. I'd have gone with 400W or 500W if there was one from Corsair. Corsair has a good reputation for the AX-series PSUs and I didn't want to try something new or less tested.
AX760 is also designed to be quiet. It doesn't use the fan if the load is less than 70% (530W).
Corsair AX760 has zero RPM fan mode if the load is less than 70% (530W).
I can't recommend Corsair AX760 highly enough. Corsair AX760 produces extremely low current ripple and current noise levels. Your motherboard, cpu and drives will love it. This is the PSU you're going with if you're building a similar PC.
Now talking about the hard drives, I messed up. I intended to go with Samsung 840 PRO 250GB drives, but I accidentally got Samsung EVO 840 250GB drives. Notice difference? PRO vs EVO.
I chose the drives based on The SSD Endurance Expriment. It shows that you just can't wear a Samsung 840 PRO. It's still kicking after 2PB of writes, while other drives in the experiment died at 800TB. I went on Amazon to get Samsung 840 PRO drive but didn't know there was EVO too, so I probably typed Samsung 840 in Amazon and ordered the first drives I saw. I just discovered this as I was writing this blog post. I thought I had the PROs until this moment.
I chose two identical drives for the system. I always go with multiple drives to prevent data loss in case of a failure. For this workstation I configured the drives in RAID1 (mirror). If one of the drives fails, I'm safe.
I've moved away from regular spinning HDDs for workstations. They're just too slow. My system boots in less than 10 seconds with the SSDs. The latest Intel Rapid Storage Technology's RAID drivers can read data from both drives in RAID1 mode, effectively doubling the read speed. I get 1GB/s read speed on my simple Samsung 840 EVO RAID array.
1000MB/s (1GB/s) read speed on Samsung 840 EVOs running in RAID1.
I still use HDDs for my Linux file server. They run in RAID6. I store terabytes of data for projects, random data (stuff) and data for workstation. The data is shared as network drives on Windows via Samba. But that's another story.
Network mounted drives for projects, stuff and workstation data.
Choosing the PC case was the hardest part. The PC case makers have all gone insane designing crazy cases with windows, buttons on top panel, weird shapes, etc. I just don't get it. A PC case should be a closed rectangular box with a power and reset button in the front. It took me forever to find a case that I liked. After reading many reviews I decided to go with the quiet Corsair Obsidian 550D case.
I don't recommend this PC case. At $150 the quality just isn't there. I've seen better quality $50 cases. I've no idea why it's ranked so highly by others. It's a trap.
Here are examples of the poor quality. Uneven front-panel USB ports with very sharp edges. So sharp you can cut fingers on the edges! Lowest quality USB ports I've ever seen on any front panel.
Rushed cut and gluing of sound isolating material everywhere:
Corsair has lost my respect as a PC case manufacturer and I won't buy a case from them again. Lame and unacceptable quality for a $150 case.
Finally the extra bottom intake fan. Noctua NF-A14 140mm PWM Premium Fan. Impressive fan quality for an impressive price of $25. I'd pretty much buy everything from Noctua if they manufactured all the computer parts.
The computer started working right away after I powered it up.
Here are some additional pro-tips if you're building your own PC. The very first thing what you always want to do is to enable XMP and load the fastest memory profile.
The memory chips come with factory pre-configured XMP profiles so why stick with the default values when you can get extra performance for free.
After you've setup your computer and installed the software, the next thing you probably want to do is overclock the CPU. I overclocked this PC to 4.7Ghz at 1.32V. If you're not overclocking, you're losing out on free computing power. I just got a free 17.5% performance increase over the base speed of 4.0Ghz. Modern motherboards let you do so with a single click.
I overclocked my Intel i7 4790K to 4.7Ghz at 1.32 Volts.
My next upgrade is going to be in about two years and I'll probably go with Intel's new Skylake platform. It's going to be very exciting. 14nm lithography!