Just read part of the book Founders At Work over the weekend. Although I haven’t decided to be a founder of a startup company, I found the stories there are trully inspirational. You can read part of the book at Google book.
One interview with Hotmail cofounder Sabeer Bahatia is very interesting with his thoughts on the differences of software and hardware designers:
Lost VMs or Containers? Too Many Consoles? Too Slow GUI? Time to learn how to "Google" and manage your VMware and clouds in a fast and secure HTML5 App.
Livingston: … Did your backgroud in hardware help you in terms of building servers that could handle massive loads?
Bahatia: It helped us because we knew what kind of hardware we would need to be able to handle the kind of traffic to our site. Also, when you are hardware designers, you have tremendously more discipline in writing and describing software because in hardware you cannot get it wrong. Every turn of every chip costs you millions of dollars, so when hardware designers design any piece of software, they normally get it right. They use something called state machines to describe the funtioning of the software. When you do that, you are very deterministic: if this is the input, then this will be the output.
So you write it in a very deterministic fashion and therefore you tend not to make too many mistakes. Whereas the pure software writers – they way they think and architect software is very creative. They put in lots of bells and whistles, but they think, “No big deal. If there is a bug, we’ll fix it. Put in patch.” You can’t do that in hardware. There is no patch. Once you ship a chip, it has to work all the time. So in terms of being able to test it out, there is somewhat of a difference, but I just think that hardware designers would be pretty good software designers as well.
Given his first hand experience from hardware to software, I would give much credit to his thoughts. The key point here is hardware designers make far less mistakes than software designers because hardware designers cannot afford hardware mistakes that are far more expensive than software mistakes.
Now if we make the software mistakes as expensive as hardware mistakes, will software designers build better quality software? Well, that is against the whole point of dividing a system into hardware and software. In the past, the complexity of hardware hasn’t increased as much as software. It’s mainly the software that handles the most logics and complexity of a system. It’s therefore expected for the software to be more vulnerable to bugs than hardware.
Having said that, software designers should definitely take the bugs as seriously as the hardware designers. Because we can have patches, we sometimes take it too lightly.
To get the attitude as hardware designers, it may be worthwhile for software designers to work as hardware designers at the start of professional career. But when the hardware training is over, will the creativity remain?