functional programming - programacion - ¿Debería enseñarse la programación funcional antes que la programación imperativa?
programacion funcional ventajas y desventajas (15)
Entonces, mi pregunta es, ¿la programación funcional debe enseñarse en la escuela antes de ser imperativa y, de ser así, por qué no es más común comenzar con ella?
Aunque no tuve la suerte de comenzar con un lenguaje funcional, sí tengo colegas que sí. También tenía un amigo que estudiaba Matemáticas, ¡y el único idioma que aprendió mientras estaba en la escuela fue Haskell!
Realmente hay dos cosas: la informática y la ingeniería informática. Aunque la línea es muy delgada, IMO, depende mucho del curso (como se mencionó anteriormente) y del área de enfoque del departamento en cuestión con qué idioma cortar los dientes. La mayoría de las escuelas de ingeniería comienzan con una de C, C ++ o Java, que tiene un mercado laboral potencialmente grande. Otros, pueden comenzar con Lisp, Haskell, etc.
Me parece que la programación funcional es una gran cosa. Elimina el estado y hace que sea mucho más fácil hacer que el código se ejecute automáticamente en paralelo.
A muchos programadores a quienes se les enseñó por primera vez los estilos de programación imperativos, les resulta muy difícil aprender programación funcional, ya que es muy diferente. Comencé a preguntarme si a los programadores a quienes se les enseñó la programación funcional primero les resultaría difícil comenzar la programación imperativa. Parece que no sería tan difícil como al revés, así que pensé que sería bueno si a los programadores se les enseñara primero la programación funcional.
Entonces, mi pregunta es, ¿la programación funcional debe enseñarse en la escuela antes de ser imperativa y, de ser así, por qué no es más común comenzar con ella?
Creo que debería, sí.
Además, no hay aplicaciones de consola ni "mezcladores de paletas de colores", pero la unidad prueba primero.
Solo si los estudiantes se comportan bien y escriben casos de prueba con una cobertura extremadamente alta, PUEDEN permitírseles echar un vistazo rápido a cómo leer los caracteres desde el teclado.
En mi opinión, la mayoría de las malas prácticas de codificación (olores de código, antipatrones) provienen de una ignorancia total hacia la teoría y las mejores prácticas.
Entonces, enséñeles F # primero, prohíba el uso de la consola de E / S y las GUI y solo use pruebas unitarias.
Segundo, enséñeles estilo mixto imperativo / funcional en un contexto de POO con uso completo y explicación de los patrones de diseño.
Luego, y SOLO entonces pueden intentar colocar botones de clic en algún lugar, tal vez como recompensa. Pero la teoría y las buenas prácticas de codificación primero. De lo contrario, creamos la próxima generación de "RAD": víctimas que ni siquiera pueden usar la sangría correctamente y confunden ctrl + c / ctrl + v para el desarrollo de software.
El claro flujo de control de la programación imperativa se presta bien para la implementación y análisis de algoritmos en un entorno de enseñanza. La programación orientada a objetos es una extensión conveniente de eso, por lo que es naturalmente lo que se usa más a menudo. La programación funcional (programación declarativa de cualquier tipo en realidad), por otro lado, es un paradigma completamente separado que requiere un nuevo conjunto de consideraciones (rendimiento y otras cosas) muchas de las cuales son mucho más fáciles de visualizar si primero comprende la programación imperativa. Después de todo, todo se reduce a un lenguaje imperativo al final.
En realidad, algunas escuelas ya lo hacen de esta manera. Donde estudio (Universidad de Copenhague), enseñan SML en el primer semestre, como introducción a la programación. Luego enseñan Java después, como una introducción a la POO.
Creo que funciona extremadamente bien, y estoy de acuerdo contigo, es mejor que al revés. La programación funcional es bastante intuitiva para alguien que aún no es programador. Se asigna mucho mejor a lo que nos enseñaron como matemáticas en la escuela secundaria o antes, por lo que las personas que aún no han estado expuestas a la programación imperativa, generalmente lo aprenden sin demasiados problemas.
De hecho, hay una tendencia de que las personas que son nuevas en la programación cuando se inscriben seleccionan SML más rápido que aquellas que ya han aprendido Java o C ++.
Parece que hay un gran salto conceptual al pasar de lo imperativo a lo funcional, pero lo contrario parece mucho más fácil para la mayoría. Los estudiantes generalmente no encuentran difícil Java cuando están expuestos a eso después de aprender SML. Una vez que conoce los conceptos "puros" de la programación, pegar en los efectos secundarios es bastante sencillo. Pero si toda su comprensión de la programación se basa en efectos secundarios, es mucho más difícil imaginar que todo sea posible sin ellos.
Creo que un gran beneficio de este enfoque es que los principios de programación funcional se convierten en una parte esencial de su caja de herramientas de programación, en lugar de algunos complementos esotéricos que puede usar si quiere presumir. Incluso cuando se programa en lenguajes imperativos, creo que es beneficioso tener su experiencia en un lenguaje funcional. Incluso cuando se programa en algo tan bajo como C, hay un beneficio al pensar en minimizar los efectos secundarios y de estado, y estar acostumbrado al concepto de funciones de orden superior (aunque no estén disponibles en el idioma)
En realidad, solo estuve en una charla dada por la persona que está desarrollando Bootstrap (un plan de estudios de programación actualmente administrado por Citizen Schools). Parecía pensar que el estilo de programación funcional proporcionaba un mejor fondo para el álgebra, ya que afecta al concepto de funciones como procesos y objetos (con propiedades propias). (Por supuesto, los lenguajes de programación declarativos también pueden tener funciones de primera clase, pero el enfoque no se centra tanto en eso).
Personalmente, creo que primero vale la pena enseñar programación funcional. El enfoque declarativo se enseña muy temprano en la clase de matemáticas, por lo que la programación funcional proporciona algunos conceptos nuevos que la programación declarativa no proporciona. Estoy de acuerdo con muchos de los carteles anteriores de que el mero hecho de que sea "demasiado difícil" es un mito, se ha hecho.
Honestamente, creo que esta es la pregunta incorrecta.
Si el objetivo de una clase introductoria es enseñar informática básica, algoritmos, resolución de problemas mediante programación, entonces su curso es fundamental y puede elegir uno basado en la claridad, la simplicidad y la difusión de sus ideas. Algunos lenguajes funcionales serán geniales para esto. Particularmente si los estudiantes tienen poca o ninguna experiencia previa.
Sin embargo, generalmente este no es realmente el objetivo de muchas clases introductorias. Pueden requerir ciertas técnicas o ciertos idiomas para un curso posterior. Es posible que quieran aprovechar bibliotecas particulares, etc. Es posible que solo tengan que coincidir con la lista de "características" de la casilla de verificación de otra persona.
Así que creo que quieres convertir tu pregunta en su cabeza. Averigüe qué es lo que realmente está tratando de lograr el curso y elija el mejor lenguaje que pueda para ese propósito. En algunos casos, este puede ser un lenguaje funcional.
Si lo que realmente estás preguntando es cómo enseñar mejor la programación de nivel introductorio y la informática, eso es una lata diferente de gusanos.
La programación funcional se imparte en la mayoría de las universidades. Parte de la razón por la que no se enseña en la escuela secundaria se debe probablemente al mito de que "la programación funcional es muy difícil".
Muchas (¿la mayoría?) Escuelas enseñan programación funcional. Muy pocos lo enseñan primero, por muchas razones.
La mayoría de los entornos de desarrollo para lenguajes funcionales apestan, y requieren un amplio conocimiento de programación para usarlos adecuadamente. Esto se está volviendo cada vez menos cierto, pero aún estamos lejos de Visual Studio para Haskell.
Es más difícil saltar en las ''cosas llamativas''. Los kits de herramientas de GUI y las bibliotecas apestan para la mayoría de los lenguajes funcionales. Mostrar cosas en la pantalla y recompensar al estudiante es importante.
Los programadores autodidactas tienden a gravitar a los lenguajes imperativos / OO por razones históricas. Disponibilidad de BASIC en su juventud, sabiendo que su juego favorito fue escrito en C o C ++, lo que sea.
Los recursos simples y los tutoriales para lenguajes de programación funcionales son más difíciles de conseguir. Compare la cantidad de muestras de C # con muestras de Lisp en el Proyecto de Código. Tenga en cuenta que Lisp es 5 veces más viejo.
Muchas escuelas enseñan programación funcional. Algunos de ellos incluso lo enseñan primero. Creo que MIT, durante mucho tiempo, solía enseñar esquemas en su introducción a las clases de programación de computadoras.
En mi escuela cubrimos ML como parte de una "clase de lenguajes de programación comparativa" que todos debían tomar.
En cualquier caso, no creo que la programación funcional sea tan difícil de aprender para las personas que provienen de lenguajes imperativos. Al menos no fue para mí.
Mucha gente piensa que la razón por la cual los lenguajes como Haskell y Scheme no se han adoptado de forma más amplia es porque la gente se "arruina" por la imperativa programación. Eso es una tontería.
La verdadera razón por la que esos idiomas no han sido adoptados ampliamente es porque no usan llaves. Seriamente.
El estilo de sintaxis de C / Algol prevalece porque a la gente le gusta su apariencia.
La clave para aumentar la adopción de la programación funcional es no hablar de cuán grande es Haskell y de los efectos secundarios del mal, o decir la palabra "mónada" repetidamente. En su lugar, simplemente cree un lenguaje funcional que utilice llaves y puntos y comas. La gente lo usará.
No sabía sobre su escuela en mis estudios de licenciatura ML era una parte esencial del curso de lenguajes de programación básicos y había un curso de currículo adicional dedicado a Haskel.
Posiblemente podría ser un problema de mentalidad compartida, ya que la mayoría de los maestros / profesores probablemente también aprendan estilos imperativos primero.
Además, creo que hay mucho más trabajo disponible para enseñar estilos imperitivos.
Primero, encuentro la base de su pregunta defectuosa porque me enseñaron programación funcional en la escuela. (No fue con lo que empecé, pero sí hicimos algo de programación funcional).
En segundo lugar, cuestiono la facilidad de transferencia de la codificación funcional a la codificación imperativa. No creo que sea tan fácil como lo haces.
Tercero, la programación es (para la mayoría de las personas) una habilidad de trabajo. La gran mayoría de las tiendas utilizan la programación imperativa. Por lo tanto, es más útil para los futuros codificadores aprender la programación imperativa.
Solo puedo asumir que es el hecho de que OOP parecía ser una palabra de moda / estilo favorito, así que las escuelas se apegaron a eso,
Me enseñaron el diseño de POO desde el principio, solo recientemente he estado enseñándome el estilo funcional de programación y puedo ver que tiene sus ventajas.
Tiene que haber un ángulo histórico para esto (mostrar mi edad) para los planes de estudio en la escuela. Funcional era todo lo que tenía que aprender cuando empecé.
Pero dejando eso de lado, tienes que empezar en algún lugar, por lo que uno de ellos debe ser el primero. Si empiezas con imperativo, habrá cosas que alcanzarás que no estarán allí cuando aprendas funcional y tendrás que acostumbrarte a hacer las cosas de manera diferente. Si empiezas con funcional y te mueves a imperativo, entonces tendrás que acostumbrarte a aprender nuevos conceptos / construcciones y recordar que están ahí para usar.
Cuando estás programando estás intentando resolver un problema. Es bueno tener ambos en su caja de herramientas para tratar de resolver el problema en cuestión. Por eso creo que sería mejor comenzar con imerativo y luego aprender funcional: si te encuentras buscando algo que no está ahí, eso es indicativo de haber elegido la herramienta incorrecta para resolver tu problema.
Aparte de eso, creo que es un lanzamiento.
Edit: Lo que sigue refleja el título original: " ¿Por qué la programación funcional no se enseña en las escuelas? " Las escuelas tienen maestros, no profesores. Los maestros de escuela no escriben sus propios libros de texto.
El mayor problema son las empresas de libros de texto a las que los maestros pueden comprar sus materiales. Las compañías de libros de texto se apresuran a saltar sobre "la próxima gran cosa", que fue OOP hace unos años. La programación funcional se ha quedado en el camino. Muchos maestros no pueden o no pueden enseñar un curso sin un libro de texto, por lo que la selección del curso generalmente sigue la disponibilidad de libros de texto de los grandes proveedores.