views:

786

answers:

17

Coming from a Mac background, I've never really spent much time tinkering with / assembling / tweaking my own computer beyond occasional RAM upgrades and swapping out hard disks. I feel like I have a good grasp on how a computer works at a conceptual level, CPU, bus, memory etc, but I haven't really got much practical experience in putting it all together / taking it apart.

My question is, is there anything to be gained in terms of software engineering skills by learning to assemble my own computer? If you have spent your whole life putting bits of hardware together, how has it influenced the way you write or think about software?

A: 

If you wear shoes, you should probably know how to tie one. But, most likely, if you're smart enough to wear them, you can figure it out.

If not, you've got problems.

Will
+2  A: 

Benefits are obvious:

  • You can save a couple of bucks for good use
  • If you loose your software engineer position for hanging to much on SO you can make money assembling computers.

Last time I bought assembled computer I found that there was no heat-conducting paste between CPU and radiator.

As for software engineering skills, I didn't find any benefits.

aku
True enough - Assuming I don't account for my time that is :)
Matt Sheppard
+6  A: 

You don't learn much that's usefull to a programmer from putting together a computer. Knowing where to put the pci cards and how to plug in a processor isn't really useful for anything apart from building computers.

I do think you need some low level knowledge about how computers work but all the stuff that's interesting for programmers is already soldered together on the mainboard. You'll learn much more from programming c or assembly and maybe reading Charles Petzold's book Code...

Mendelt
+2  A: 

Eh.

I honestly feel that the actual act of assembling a computer does not really fundamentally improve your understanding of computers. You're not building these parts, you're assembling them into a case by following instructions.

There is some improvement to be gained, though, in making the operating system work correctly with the components and debugging issues relating to that.

And Aku's point about saving money is a good one.

John Christensen
A: 

Well, honestly, I wouldn't know which parts to pick to assemble a top class development or gaming PC. I know how everything fits together, I know software bottlenecks, etc.

What I do when I have to assemble a PC is find the purpose first. Dev PC? gaming? multimedia? Office? Then I think about the requirements. Obviously, a simple office PC works with a lot less harddrive space, an onboard GPU, etc. When I figured that out I scour the internet for reviews, already composed systems, tom's hardware benchmarks, to try to find the best combination within my budget. Another thing to take into account is new developments. If for instance Intel is releasing a new CPU model within the month, I'd wait for that so the prices of the lower models will drop. Once I have the list of required components I either go to my local computer store or find the best price on the net. I prefer a local store, because that saves me a lot of time when I get a dead component or need to claim my warranty. Usually a bit more expensive though.

Assembling is mainly logical thinking, a bit of patience and staying focused ;)

Erik van Brakel
+2  A: 

Beware of programmers who carry screwdrivers. (Leonard Brandwein)

You don't learn anything as a programmer from assembling a PC. I can use a toilet just fine without installing a sewerage system.

Tom Hawtin - tackline
+1  A: 

No not neccessarily, but I think programmers should know about how code can be optimised for the hardware it runs on.

CPU, memory, network and disk resources have a big effect on performance. Programmers should know when and how to use caching to increase the performance of the application and also how to exploit code to use large resources when available.

Being a geek I would say learn how to assemble a computer for fun.

andyuk
A: 

To quote one of our founding fathers (Jeff Atwood):

In my book, one of the best ways to understand the hardware is to get your hands dirty and put one together, including installing the OS, yourself. It's a shame Apple programmers can't do this...

While I'm not so sure it makes you that much of a better programmer - but it is the tool you use. These machines constant break or need upgrades. I think its a good idea to be able to do this and building one from scratch is THE way to learn this.

Aardvark
A: 

I have built my own computer, but I do not think it has added my ability to be a software engineer. Nor would knowing how to build one help make you a better engineer.

Understanding how a computer works and how software interacts with hardware is what makes you a better engineer.

Just because I can put a multi-core CPU into a mother board doesn't mean I understand why parallel processes help me, or what it means to enter a critical part of a function call. And because it has a 4 MB cache that doesn't mean I understand what the cache does and how paging works.

There are allot of people who can build computers, but there are fewer that can engineer software for them. If that was the case then software engineers’ would make far less than they do.

David Basarab
A: 

I used to build my own Windows and Linux computers before I joined the Cult of Mac. I did learn a bit, I don't think it made me a better programmer.

It's not useless knowledge though. It's like a chef who also knows a little about plumbing. The knowledge doesn't really apply to your core tasks, but it can be handy when something goes wrong.

Edit:

There is a big difference between understanding the fundamentals of how computers work, and putting one together with parts from Newegg. An understanding of how the CPU, cache, and memory function are invaluable for programming. Knowing how upgrade your video is a useful skill, but it doesn't help in day-to-day software development.

amrox
+2  A: 

Depends on what kind of learner you are. If you have a good imagination you can probably learn all there is to know about hardware without touching anything more than a book, there are people who needs to look at things to improve their understanding.

That said, you could learn a lot if you take the opportunity of building a new computer as a learning one, for instance take the time to look at where the southbridge is, which chip is it and look it up, find where is the SATA controller, which brand is it, and look it up, see their characteristics and so on and so forth. If you just put the pieces together as fast as you can you¡ll probably learn what to do in case of failure and save a few bucks, nothing more.

Also, building things increases curiosity about them, which can't be bad.

Vinko Vrsalovic
A: 

If everything in the series "Write Great Code" makes sense then I'd say no, there's not much more you're going to get out of actually building up a system, for your job that is. Now working as a tech and having to diagnose problems, hardware and software, adds to your ability to tackle problems and would help. The problem is its not something you can learn by putting a couple computers together for fun. You end up missing out on all the little weird things various manufactures do, and if you can apply it, it can help broaden your overall picture of good and bad design choices.

ddowns
A: 

I tend to think anytime you learn something and expand your knowledge and horizons, it is a good thing, so I am going to say 'yes'.

Geoffrey Chetwood
A: 

Yes, but not in the sense you're thinking. I think it's incredibly valuable to learn about basic microprocessor design, memory architecture, etc. Even better if you can get a project kit to do something basic with a PIC or Stamp. Get the abstractions out of the way and learn a little at the bit level. A review of the relevant Patterson and Hennessy books is also recommended.

Building a PC up from components is a good one-time exercise, just to understand the compatibility issues of the various parts.

infinitetape
+1  A: 

This is the similar to the question about Software and Electronic Engineering.

Peter Hilton
A: 

Building your own computers makes you a better generalist, not a better specialist. If you look on programming as the specialized application of code in an editor turning into applications, then building your own systems does nothing to help that practice.

However, if you need to put a server in a colo, administer it, figure out when it crashes whether it's your application or a bad drive or a bad fan than went south, then yah, knowing what all the pieces are, understanding what they do, which ones you bought and why, whether the hardware or the software is likely to be the problem, then building a computer is the minimum first step down that road. If you aren't responsible for the actual execution and utility of your code, then it's a waste of time.

A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects.

Tim Howland
A: 

As a programmer who has built computers for years, I would say that it has not given me a sizable influence over the quality or structure of my code, but it has given me a good basis of how the quality of your hardware affects the end user experience of running code.

Additionally, and I think perhaps this is the greatest benefit: building your own PC gives you enough knowledge to say whether or not a development system given to you as an employee is a good one or not. Giving an informed opinion to an IT/Management person about why the system they have provided is inferior may be the key to getting an upgrade.

Thunder3