Todas las buenas respuestas.
Solo agregaría "minimizar estructura de datos". Esto podría ser aún más fácil en C, porque si C++ es "C con clases", OOP está tratando de alentarlo a tomar cada sustantivo/verbo en su cabeza y convertirlo en una clase/método. Eso puede ser muy derrochador.
Por ejemplo, supongamos que tiene una matriz de lecturas de temperatura en puntos en el tiempo, y desea mostrarlas como un gráfico de líneas en Windows. Windows tiene un mensaje PAINT, y cuando lo recibe, puede recorrer el conjunto haciendo funciones LineTo, escalando los datos a medida que avanza para convertirlos en coordenadas de píxeles.
Lo que he visto demasiadas veces es que, dado que el cuadro consta de puntos y líneas, las personas construirán una estructura de datos que consta de objetos puntuales y objetos de línea, cada uno capaz de dibujar yo mismo, y luego hacerlo persistente, en la teoría de que eso es de alguna manera "más eficiente", o que quizás, tal vez, tienen que poder pasar el ratón sobre partes del gráfico y mostrar los datos numéricamente, de modo que construyen métodos en los objetos para manejar eso, y eso , por supuesto, implica crear y eliminar aún más objetos.
Así que terminas con una gran cantidad de código que es muy fácil de leer y simplemente gasta el 90% de su tiempo en la gestión de objetos.
Todo esto se hace en nombre de "buenas prácticas de programación" y "eficiencia".
Al menos en C, la manera simple y eficiente será más obvia, y la tentación de construir pirámides será menos fuerte.
La filosofía de Unix es muy útil para organizar proyectos grandes: [http://www.faqs.org/docs /artu/ch01s06.html](http://www.faqs.org/docs/artu/ch01s06.html) – newDelete