One of my professors said this in class this past week regarding writing robust software:
You can make programs fool-proof. You can make programs idiot-proof. Unfortunately, fools and idiots rarely will use your software.
He then went on to say that usually software users are instead afraid or have no clue. He was talking about writing your code defensively, as if at any point a cat may walk across the keyboard and your software should be able to handle it.
Even though it was a low-level technical argument, I think it goes hand-in-hand with what Steve Pavlina said in If No Independent Developers Are 100 Times Smarter Than You, Then Why Do Some Get 100 Times the Results?:
If you hold a core belief that your customers are idiots, then this will be reflected in your product design, marketing, web site, etc. You will then attract idiots as customers because that’s the type of person you had in mind throughout your design process. If, however, you start from a core belief that your customers are brilliant, friendly, honest people who want you to succeed, you will make different decisions in product design, marketing, etc, and you will attract those types of customers.
So on the one hand you want to make sure your code is robust to handle the random and uncontrollable. On the other hand, you don’t want to do so while also making the customer feel like you hate him/her. I think user interface design plays a big role in that, at least for the software. I don’t have much experience creating UIs, so I may need to purchase a book or two.
Then again, I should probably just read the books I have now. I need to walk before I can run, and my object-oriented programming is weak. To help, I bought the huge tome Object-Oriented Programming in C++. The first couple of chapters are basic overviews of C++ and OOP, which I was tempted to skim, but then I thought I might as well keep reading through it. I learned one new thing that I didn’t know before, and that made all the difference.