In this paper, the author mentions that despite the reliance on software in everything from televisions and cars to medical equipment, it often doesn't work correctly. Everyone has had problems with software like text editors that freeze, answering machines that won't answer. Others are far more serious, such as the program on a satellite that contains an error, causing the loss of expensive equipment, or Web servers that have bugs enabling an attacker to break in and steal personal data. In the case of medical equipment, poor software could cost lives. To develop a better software, one way is to make good programming as much a part of learning computer science as good writing is a part of studying English and law. To test this idea, a secure-programming clinic was developed. Principles of robust programming are widely taught in beginning and advanced programming courses. They're a large part of good programming style and require the realization that things can go wrong. A user might enter a string when the program expects an integer. A function that opens a file might fail. The program must check for these possibilities and handle them correctly. Grading in these programming courses takes such practices into account. But all too often in advanced computer science courses, students don't follow these practices.