Without discipline, a programmer easily loses control of his or her code's reliability and maintainability. At higher levels, a lack of discipline reduces productivity and increases maintenance costs. Although the need for discipline applies to programming in all languages, using C and C++ amplifies its importance.
As this tutorial demonstrates, C has scores of traps that can ensnare an unwary programmer. Without invoking discipline to stay clear of C's traps, sooner or later - usually sooner - a programmer will get caught. And because C provides great freedom in combining low-level operations, there often are dozens of techniques for implementing a particular application function. If, through discipline, a consistent standard isn't applied across programs and projects, maintenance becomes difficult and dangerous because a programmer can't depend on his or her understanding of standard techniques. The potential for slip-ups is high when each section of code has to be learned from scratch.
Using C++ does not lessen the need for discipline. C++ retains almost all of C's low-level operations and adds several additional layers of language features. Although classes, inheritance, templates, and other C++ language features allow a programmer to work at a higher level of abstraction, these features can also increase the complexity of writing programs, if they're not used in a well-thought-out and highly consistent manner.