Sumario rápido:
Porque en el mundo real, tarde o temprano, tienes que trabajar con código de procedimiento.
Porque los lenguajes de procedimiento pueden funcionar como una extensión o una introducción a los lenguajes orientados a objetos, en lugar de ser simplemente una alternativa.
Complemento a la respuesta 2. Debido a que la POO es más compleja que la Programación de procedimientos, por lo tanto, es mejor aprender la Programación de procedimientos, primero.
Porque en el mundo real, los programadores trabajan y combinan varias formas de resolver problemas, también conocida como "programación multiparadigma", no solo un paradigma único.
La mayoría de los lenguajes de programación son multiparadigm, en algún nivel, incluso, si sus diseñadores o desarrolladores comunes, dicen lo contrario.
[NUEVO] Debido a que la programación modular, que comúnmente se mezcla y se confunde con la programación de procedimientos, se puede aplicar a OOP. Por lo tanto, la pregunta puede leerse como "¿Por qué debemos aprender programación modular antes de aprender programación orientada a objetos?"
Descripción aburrida extendida:
El punto 1 es muy claro, no hay más explicaciones.
Punto 2, Clases, Herencia, Polimorfismo, Interfaces, etc.
Punto 3, codifico Pascal de procedimiento antes de aprender Pascal orientado a objetos, cuando llegué allí dije: "mira, las clases son como pequeños programas de procedimiento ... ... y puedes hacer que hablen entre sí, ¡genial! ".
Escuché lo mismo de personas que pasaron de C simple a C plus plus.
Punto 4, la mayoría de las veces los programadores combinan varias técnicas de programación o paradigmas, o formas de resolver un problema. Funcional, de procedimiento, POO, lógico.
Incluso Java "Pure OO" no es una programación de objetos tan simple como dice.
+1 punto por decir "Programación procesal" en lugar de "Programación estructurada". O programación modular. Esto es importante
Sin embargo, muchas veces estos términos se enseñan juntos y se usan indistintamente, no lo son. Programación estructurada, incluye muchos conceptos, no solo el uso de procedimientos, y uno de ellos es hacer que el programa no se vea como "Código de espagueti".
Hoy leí varios programas OO "puros" que se parecen a "Código de espagueti orientado a objetos", lo que significa que el programador usó OOP, pero su código parece un desastre.
Muchas veces, puedo leer un código OO y decir que el programador aprendió la Programación Estructurada antes de OOP, porque el código es claro y está organizado.
Y para la programación modular, he visto varias aplicaciones. en C ++ y PHP que no usa módulos. *