Ahora estoy en el cuarto año en una universidad de TI, y cuando hablo con mi profesor sobre este tema, él rechaza mi opinión y me critica mucho (en mi universidad, nos estaban enseñando C (ANSI) (en Procedimiento) Clase de programación: en el 1er año en la universidad) antes de C ++ (en la clase OOP en el 2do año) y otros ...
Pero a los 13 años, a mi hermano le enseñaron Java primero y nada más. Ahora, él puede hacer casi todo lo que un estudiante normal de segundo año puede hacer con Java.
Para ustedes, profesionales, me gustaría saber por qué creen que primero se nos debe enseñar la programación de procedimientos.
Respuestas:
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. *
fuente
Creo que la analogía sería similar a las matemáticas. Primero debe aprender algunos conceptos básicos (suma / resta / ...) y luego pasar a temas más complejos (álgebra / cálculo). El programa de procedimientos es muy lineal y es más fácil comprender el flujo de control mientras aprende la sintaxis. Quizás se piensa que OOP es más complejo, se basa en las construcciones más simples utilizadas en los lenguajes de procedimiento, pero es más abstracto y más difícil de entender. Comenzar con lenguajes como C también te acerca al hardware y te hace lidiar con problemas de asignación de memoria y punteros, que debes entender pero que realmente no puedes usar en lenguajes como Java / C #. Hay un valor real en estar expuesto a esto en la escuela, independientemente de si es primero o segundo.
FWIW, está obligado a cambiar eventualmente. Cuando comencé la escuela aprendimos en Pascal y PL / 1. No llegamos a C hasta la clase de idiomas avanzados (que data de mí). No aprendí Java hasta la escuela de posgrado, ¡todavía no se había inventado!
fuente
La programación orientada a objetos es una colección de fragmentos de procedimientos de manera organizada. Creo que la lección que está aprendiendo es que la metodología orientada a objetos ayuda a mantener la organización y la mantenibilidad. Hay muchos programadores que no pueden hacer esta distinción y afirman que sus programas están orientados a objetos cuando son más procesales.
fuente
Usted no
Aprendimos programación funcional primero, con Scheme. Luego pasamos a procedimientos, luego a POO y luego a programación declarativa. Y lo creas o no, aunque ya conocía la programación, creo que en realidad también fue más fácil para otras personas: ¡porque FP es como las matemáticas! Entonces ya sabes lo básico.
He debatido esto conmigo mismo muchas veces, y finalmente he llegado a la conclusión de que realmente depende de qué tan bien tu maestro te enseñe los conceptos.
No hay una respuesta única porque:
Comenzar con algo de procedimiento como C (o incluso ensamblaje) podría ser una buena opción, porque aprende cómo funcionan realmente las computadoras
Comenzar con algo orientado a objetos Java podría ser una buena opción, porque es relativamente fácil de aprender y aplicar OOP a la vida real, y porque te enseña sobre ** la formación
Comenzar con una programación funcional como Scheme podría ser una buena opción porque le enseña a pensar de manera más abstracta (en términos de funciones en lugar de variables), lo que finalmente lo convierte en un mejor programador
Si tu maestro no lo enseña bien, entonces realmente no importa con qué comiences; prácticamente resultarán lo mismo.
fuente
Un lenguaje puede estar orientado a objetos como C ++, Java o C #. Y puedes comenzar con estos idiomas. Pero el punto es que, incluso con estos lenguajes OO, primero debe aprender la programación de procedimientos, luego OOP. Creo que tú hiciste lo mismo con tu hermano.
fuente
=
asignación,if
,for
, etc) en trozos grandes (métodos), ¿cómo se puede tener la esperanza de entender programación orientada a objetos. Al igual que con la mayoría de las habilidades, ser muy inteligente, motivado y / o tener acceso a la instrucción individual puede permitirle aprender múltiples temas relacionados simultáneamente.La programación de procedimientos, al menos en un lenguaje como C, elimina la programación a una práctica muy básica: algoritmos y estructuras de datos, y en un nivel de abstracción que es un medio feliz entre el código fuente entendible humano y el código de ensamblaje.
De esta manera, los estudiantes pueden aprender un poco de ciencia (algoritmos, estructuras de datos) y un poco de ingeniería (fuente-> objeto-> compilación de máquinas, arquitectura von-neuman (probable)) al mismo tiempo.
OOP, a través de C ++ / obj-C, presenta un patrón de organización de código, que es solo una cosa más para aprender. Esto podría dificultar el aprendizaje de los conceptos anteriores.
OOP a través de Java (entre otros) va más allá al abstraer el hardware y el entorno. Ahora el producto subyacente no es código de máquina, sino algún tipo de intermediario que no revela cómo funciona el hardware subyacente, pero el efecto es que le permite al estudiante concentrarse en los patrones de organización del código.
Al final, creo que es una compensación entre aprender cómo funciona el hardware o aprender un patrón de organización de código. En cuanto a lo que es más importante, realmente no lo sé. El mundo real requiere conocimiento de ambos, al menos hasta cierto punto.
Voy a adivinar que un programa de pregrado que comienza con una programación de procedimientos de bajo nivel probablemente produce científicos / ingenieros informáticos, y un programa que comienza con conceptos de nivel superior produce ingenieros / desarrolladores / programadores de software.
fuente
Las entrañas de los objetos OOP están formadas por programación de procedimientos.
Si no puede hacer un bucle for, use los punteros correctamente, declare sus tipos y funciones, no podrá escribir interfaces para sus clases y mucho menos hacer que el interior haga algo que valga la pena hacer.
De todos modos, realmente no estarías aprendiendo OOP en una clase introductoria, solo sería sintaxis: saltar directamente a OOP haría que las cosas sean más complicadas de entender (al principio) de lo que ya es.
OOP no se trata de declarar sintaxis para formar clases, se trata de estructuras de datos, patrones de diseño, polimorfismo, herencia y composición.
Para hacer todas esas cosas, necesita saber la programación de procedimientos, algo que se hace fácilmente en C. Puede llevar casi todo lo que aprende con C a Java o C ++ de todos modos, es posible que deba repensar algunas cosas que dio por sentado en C, PERO ... Debe conocer la gramática (dónde se encuentra en la introducción C) para escribir oraciones (debe escribir procedimientos para definir interfaces), luego párrafos (debe conocer las estructuras de datos) y luego conocer algunos patrones de diseño (tragedia, comedia, imperfecto héroe, cómo interactúan; y cuándo no usarlos) antes de que puedas escribir novelas completas (sistema OOP completo).
Si fuera usted, elegiría algunos de los siguientes libros: El lenguaje de programación C , el lenguaje de programación Java , los patrones de diseño , la pandilla de cuatro y la eclosión de patrones . Definitivamente elegiría una copia de The C Programming Language si hablara en serio sobre C / C ++.
Si solo quiere ir hasta Java (y hacerlo por la identificación de $), recoja algunos libros sobre patrones de diseño de Java y cómo usar Java con los servidores web Apache y Tomcat y algunos libros sobre programación de bases de datos SQL. Java patea tanto el culo en la web, lo siento, pero PHP ha tenido un historial de toneladas de agujeros de seguridad, lo que hace que sea tan difícil como Windows evitar que su servidor se arraigue o se inyecten sus bases de datos SQL.
También debe tomarse el tiempo para aprender SQL, Oracle MySQL Postgresql y MSSQL tienen mucho en común con respecto a la sintaxis, pero si tuviera que elegir aprender uno solo, elija Postgresql solo porque tiene licencia BSD en lugar de GPL (debe buscar una comparación y contraste en las licencias GPL / BSD también)
fuente
Debo decir que la mayoría del código escrito en lenguajes orientados a objetos como Java no está realmente orientado a objetos. Comprender realmente las ideas detrás de OO es difícil, como resultado, el código supuestamente OO es en su mayoría de procedimiento.
Sin embargo, esto no tiene nada de malo en escribir código de procedimiento en Java. Sí, hay beneficios al hacer OO, pero no es algo con lo que me gustaría confundir a un programador principiante. Sobre esa base, no veo nada de malo en enseñar Java. No esperes OO real, pero funciona.
Sin embargo, Java oculta muchos de los detalles de bajo nivel sobre lo que sucede dentro de la computadora. C deja estos mucho más a la intemperie. Se puede argumentar que los estudiantes deben aprender cómo funcionan estos detalles de bajo nivel antes de usar un lenguaje que los cuide. Pero también puede argumentar que debe ignorar esos detalles y aprenderlos más tarde.
fuente
Varios otros ya han respondido a lo largo de este tema, pero creo que vale la pena declararlo más explícitamente.
Incluso si comienza a aprender programación con un lenguaje orientado a objetos como Java, comienza aprendiendo técnicas de programación de procedimientos antes de llegar a los conceptos de OO . Cuando se enseña un nuevo programador Java, no se les presentan objetos y clases primero, se les presentan declaraciones y variables. Cuando el alumno está en condiciones de aprender mucho sobre objetos y clases, ya tiene al menos los fundamentos de la programación de procedimientos.
Por lo menos, debe aprender la programación de procedimientos en Java y luego aprender la programación orientada a objetos en Java. Ya sea que pase todo un año en la programación de procedimientos o simplemente pase las primeras semanas del curso de programación, y si usa un lenguaje diferente para ello o no, solo está discutiendo sobre los detalles.
fuente
Para ser demasiado franco al respecto, creo que el impulso para esto proviene principalmente de viejos programadores que desean viejos tiempos.
Antes de decir cualquier otra cosa, absolutamente no mantengo ninguna contención para los programadores de edad avanzada, muchos muchos de ellos son simplemente asombroso de cualificados. Desafortunadamente, a veces, aquellos que no lo son, que se desvanecen y nunca fueron realmente buenos en la programación para empezar ... se convierten en profesores cuando no pueden piratearlo en el "mundo real". (No todos los profesores tampoco ... pero ... MUCHOS)
OOP no es el santo grial de la programación, ni la programación procesal es una reliquia. Es bueno saber al menos algunos de los dos, pero creo que la práctica general de lo que termina siendo enseñado como programación procesal tiende a ser una enorme pérdida de tiempo y esfuerzo. Necesitamos aprender programación en la academia, no solo un estilo u otro. Atribuyo bastante código terrible y conceptos erróneos a esto, incluido el mío.
fuente
Dos razones para mí: una programación OO vino a resolver problemas de programación de procedimientos. Entonces, al escribir algo de codificación de procedimiento y luego lo mismo en OO, es más fácil entender la diferencia.
También hay un elemento adicional aquí: los dos enfoques para educar sobre temas de programación. Uno puede comenzar con lo más bajo posible (ejemplo de ensamblaje, en muchos lugares de procedimiento, algunos otros comienzan con circuitos) y luego subir (hacia OO / Funcional / Administrado). El otro enfoque es comenzar desde el mundo físico (por ejemplo, navegador / Windows 7, etc.) y luego comenzar a profundizar. Hay ventajas y desventajas de cada enfoque. Su universidad eligió la primera y comenzar con procedimientos. Puede haber alguna razón o simplemente copiaron a alguien más :-).
fuente
No hay otra razón que la inercia institucional. Mire CMU, tiraron todo su plan de estudios de OOP y lo reemplazaron con programación funcional. Entonces, una vez más, la respuesta a su pregunta es que es una elección arbitraria hecha por los administradores de cualquier escuela a la que asista. En caso de que alguien se pregunte acerca de las declaraciones de hechos que he hecho aquí, es la publicación sobre el cambio del plan de estudios en CMU por un profesor / administrador: Enseñar FP a estudiantes de primer año .
fuente