Conclusion
Namespaces offer numerous advantages with very little programming effort. Not the least of these advantages is information hiding and increased modularity. Namespaces can be employed to help fix symbol name clashes. C++ provides extensive support for namespaces.
Exception handling code provides a substantial payback to programmers and end users. Critical errors can be elegantly handled by the C++ exception handling code rather than leaving them to the coarse-grained treatment meted out by the operating system. Just like namespaces, good exception handling code can add value to the interface between your functions and other programmers who call those functions.
I always think that the fine details differentiate the best designers and programmers! The best code employs good practices such as extensive use of design patterns, diligent use of namespaces and other modularization techniques, and solid exception handling. I hope showed you that these techniques are easy enough to learn and apply and are an essential element in day-to-day code production.