He leído el controvertido artículo Teaching FP to freshmen publicado por Robert Harper, profesor de CMU. Afirmó que CMU ya no enseñaría programación orientada a objetos en el curso introductorio, ya que es "inadecuado para un plan de estudios CS moderno".
Y afirmó que:
La programación orientada a objetos se elimina por completo del plan de estudios introductorio, porque es tanto antimodular como antiparalelo por su propia naturaleza.
¿Por qué considerar OOP como antimodular y antiparalelo?
Respuestas:
Tenga en cuenta que las necesidades de Harper para enseñar una clase introductoria de currículo de CS son muy diferentes de las necesidades de un proyecto de la vida real . Su trabajo es enseñar conceptos fundamentales (por ejemplo, modularidad, paralelismo, inducción) a estudiantes de primer año. Como tal, es muy importante que el lenguaje (y paradigma) elegido pueda expresar estos conceptos con la menor ceremonia (sintáctica y conceptual) posible. La familiaridad, el soporte de herramientas, las bibliotecas disponibles, el rendimiento de ejecución, etc. son completamente irrelevantes en este contexto. Así que tenga esto en cuenta al considerar lo siguiente ...
La opinión de que OO es antimodular resulta de la gran cantidad de dependencias de otras clases, incluso los objetos de clases bien diseñadas tienden a terminar. Que esto es un problema, incluso a los ojos de los defensores de OO, se hace evidente cuando se observa la proliferación de marcos , artículos, libros y publicaciones de blog de Dependency Injection en los últimos años (también es interesante el aumento de simulacros y trozos).
Otra pista es la importancia de los Patrones de diseño y la complejidad de implementarlos, en comparación con otros paradigmas de programación, por ejemplo, Fábricas, Constructor, Adaptador, Puente, Decorador, Fachada, Comando, Iterador, Mediador, Observador, Estrategia y Método de plantilla y tal vez los compuestos están relacionados de alguna manera con la mejora de la modularidad del código OO.
La herencia también es problemática (por ejemplo , un problema de clase base frágil ) y el polimorfismo (subtipo) seduce a uno para que derrame la implementación de un algoritmo entre varias clases, donde los cambios pueden afectar toda la cadena de herencia (¡arriba y abajo!).
El cargo de ser antiparalelo está relacionado con el énfasis del estado en comparación con el cómputo (también conocido como mutabilidad vs. inmutabilidad). El primero hace que sea más complicado expresar dependencias de subcomputaciones (¡lo cual es la toma de paralelismo de Harper!), Ya que generalmente no se puede inferir desde la ubicación donde se administra el estado (también conocido como el archivo, donde se declara la variable de instancia) qué actores externos lo cambiará en qué punto del tiempo.
El énfasis en la inmutabilidad y la computación hace que la expresión de dependencias de subcomputaciones sea mucho más fácil, ya que no hay administración de estado, solo funciones / computaciones que se combinan en el lugar donde desea expresar las dependencias de subcomputaciones.
fuente
Probablemente sea una afirmación audaz, pero de alguna manera sospecho que este Robert Harper nunca escribió un software real en su vida. Todo lo que parece preocuparse es ML y sistemas de tipo estático. Tan grande como podría ser esa contribución, no veo cómo sus afirmaciones sobre la OOP tienen relevancia.
Este artículo no es controvertido. La controversia implica examen, discusión y discusión. Lo que tienes aquí es un académico ignorante que presenta dos acusaciones bastante fundamentales en una sola declaración, sin molestarse en proporcionar ningún argumento.
La afirmación de que OOP es antimodular es una tontería. Ni siquiera sé cómo responder, no solo no se proporcionaron argumentos, sino que también el diseño orientado a objetos es un enfoque para establecer la modularidad con un acoplamiento muy bajo entre módulos individuales a través de encapsulación y abstracción.
Afirmar que la POO es antiparalela solo demuestra una falta de comprensión. OOP no bloquea ninguna decisión sobre concurrencia. OOP solo dicta ocultarlos: si se construye correctamente, no se puede decir si la implementación de un objeto es paralela o no.
Así, en última instancia, la programación orientada a objetos y la programación paralela son ortogonales. El modelo de actor es un modelo elegante de concurrencia que puede reflejarse directamente en un sistema de objetos (pero no necesariamente), produciendo una combinación formidable de ambos.
El problema con OOP es que pocas personas realmente lo entienden en el sentido en que Alan Kay lo definió.
Es por eso que Java es para OOP lo que los palos puntiagudos son para el combate naval. Esto también es cierto para muchos otros llamados "lenguajes OOP", pero lo que pasa con Java es que parece ser una creencia común en las universidades, que Java debería usarse para enseñar OOP.
Estoy de acuerdo con todos aquellos que piensan que las introducciones a OOP con Java deberían eliminarse de los currículos de CS. También creo que las personas que claramente carecen de una comprensión fundamental de la POO no deberían enseñarla. Por lo tanto, probablemente sea mejor si Bob se adhiere a ML para sus cursos y simplemente enseña lo que tiene una comprensión firme.
En este momento, OOP es más una etiqueta de moda, que a la gente le gusta adherirse a todo. Esto perjudica a OOP y dijo la gente. OOP no está desactualizado. Edad de oro de programación orientada a objetos está aún por venir, cuando la gente finalmente se entienden de qué se trata lo que es no sobre (por ejemplo, la solución de todos los problemas posibles mediante el uso de la palabra clave
class
500 veces).fuente
Tienes fanáticos de cada raya.
La programación orientada a objetos no es una bala de plata. Nunca fue Lo que es, es una víctima de la exageración. Inevitablemente, las personas se cansan de la exageración y comienza a desarrollarse una reacción violenta (independientemente de la utilidad real del paradigma).
Dentro de veinte años, sin duda, tendremos alguna otra reacción contra la programación funcional.
fuente
No puedo responder a esta pregunta en su totalidad porque uno solo puede adivinar los vagos pensamientos de su autor. Sospecho firmemente que este artículo está a punto de causar cierta vergüenza a su autor. No hay nada sobre OOP que sugiera que no sea modular ni paralelo:
Modularidad : una faceta importante de OOP es que es modular (pero modularidad significa cosas diferentes en diferentes contextos). Entonces, independientemente de si el autor está hablando de generalización o programación estática, él es incorrecto.
Paralelismo : en cuanto a la programación paralela, la mayoría de los frameworks han admitido interrupciones y luego subprocesos y ahora una paralelización adecuada, como lo que vemos en .Net framework 4.0 y los lenguajes OOP que se atornillan.
Sospecho que el autor se ha convertido en una víctima de la moda, ya que existe una idea errónea de que la programación funcional y la OOP son mutuamente excluyentes en el uso. Hay estilos funcionales en los lenguajes OOP que están bien documentados, por ejemplo, Oliver Sturm ha publicado en esta área.
fuente
El autor sostiene que OOP es demasiado difícil de entender para los programadores de primer año, lo cual puede ser cierto, aunque lo dudo, dados los requisitos de entrada para CMU. Las declaraciones antimodulares y antiparalelas pueden ser ciertas en un contexto limitado en comparación con los lenguajes puramente funcionales, pero no son una condena de todo el paradigma (que parece funcionar bien para aquellos que saben cómo usarlo).
El plan de estudios propuesto enseñaría programación funcional en una clase, programación imperativa (de procedimiento) en otra clase y estructuras de datos en otra clase. Una vez que un estudiante de primer año ha dominado estas 3 cosas, él / ella debe estar listo para aprender OOP.
Personalmente, creo que es exagerado, pero a los académicos les gusta probar cosas nuevas y extremas. Como contrapeso, el MIT solía (y aún podría) enseñar todos los principales paradigmas de programación en una clase de primer año.
Por extraño que parezca, ambas escuelas han producido algunos programadores realmente buenos. Imagínate.
fuente