¿Por qué la programación funcional no es más popular en la industria? ¿Se da cuenta ahora? [cerrado]

61

Durante mis cuatro años en la universidad, hemos estado usando mucha programación funcional en varios lenguajes de programación funcional. Pero también he usado mucha programación orientada a objetos y, de hecho, uso más los lenguajes orientados a objetos cuando hago mi propio proyecto pequeño para prepararme para mi primer trabajo. Pero a menudo desearía estar codificando en un lenguaje de programación funcional al hacer estos proyectos.

Sin embargo, cuando se busca un trabajo, es muy raro ver un trabajo donde se requiere el conocimiento de un lenguaje de programación funcional.

¿Por qué los lenguajes de programación funcional no se usan más en la industria? Hay muchas noticias sobre los lenguajes de programación funcional en estos días, así que me pregunto si la programación funcional se está imponiendo en la industria ahora.

Jonas
fuente
3
Hasta cierto punto, no estoy de acuerdo con la premisa de su pregunta. Se están agregando características de lenguaje inspiradas en "lenguajes funcionales" a lenguajes como Java y JavaScript. De hecho, JavaScript siempre ha sido (de alguna manera) un lenguaje funcional, aunque mucha gente no se dio cuenta hasta hace poco.
MatrixFrog
1
@MatrixFrog: Uno podría preguntarse "¿Por qué ser funcional solo a la mitad agregando algunos conceptos funcionales a lenguajes no funcionales en lugar de adoptar un lenguaje FP completo? Después de todo, el paradigma ha existido durante muchos años y es muy maduro".
Giorgio el
el mundo no cambia a alternativas superiores (y FP puro es una alternativa superior) por diferentes razones, incluyendo compatibilidad con versiones anteriores, inercia, etc. Considere la disposición del teclado DVORAK: es más eficiente para la escritura táctil, pero todos nos quedamos con QWERTY simplemente porque hay mucho software con atajos qwerty-friendly.
KolA

Respuestas:

38

Diría que una de las razones por las que la programación funcional no es más frecuente es la falta de base de conocimiento. Mi experiencia es que las corporaciones son muy reacias al riesgo en términos de implementación de tecnologías que no son la corriente principal y prefieren invertir en marcos probados y verdaderos (Java, C ++, C #). Solo cuando hay una necesidad comercial (como en Ericsson) se consideran nuevos paradigmas. ¡Pero incluso en el caso de Ericsson, escuché que la gerencia exigió que se usara c ++ y Joe Armstrong se vio obligado a codificar las llamadas de erlang en c ++! ¡Esto debería mostrar cuán renuentes son las corporaciones para implementar nuevas tecnologías!

ennuikiller
fuente
99
¿Cómo es la programación funcional de alguna manera "nueva"?
Evan Plaice
77
Creo que quiso decir 'no utilizado' en lugar de 'nuevo'.
Vinko Vrsalovic
10
Entonces, no se usa ... porque no se usa. Hm.
Alex Baranosky
21
@Alex - Exactamente. Apesta, ¿no?
KeithS
55
@ Stargazer712: ¿Cuáles son esas razones? Conozco a muchos desarrolladores que no conocen la programación funcional, por lo que la ignorancia tiene sentido para mí. ¿La programación funcional tuvo una falla masiva en el pasado que alejó a la industria de la que no estoy al tanto?
Sean McMillan
67

Yo era profesor y, al igual que los programadores, los profesores siempre están buscando la próxima gran cosa. Cuando piensan que han encontrado uno, lo convierten en un carro y todos se amontonan. Como están predicando a los estudiantes que piensan que los profesores deben ser realmente inteligentes, de lo contrario, ¿por qué serían profesores? No tienen resistencia.

La programación funcional es un carro de este tipo. Claro que tiene muchas preguntas interesantes para investigar, y muchos artículos de conferencias interesantes para escribir. No es una idea particularmente nueva, y puede hacerlo en casi cualquier lenguaje moderno, y las ideas no tienen que ser nuevas para ser interesantes. También es una buena habilidad tener.

Dado que, la programación funcional es solo una flecha para tener en su carcaj, no la única, así como OOP no es la única.

Mi problema con la academia de informática es la falta de interacción práctica con la industria para determinar lo que realmente tiene sentido en el mundo real, es decir, el control de calidad. Si ese control de calidad estuviera allí, podría haber un énfasis diferente, en clasificar los problemas y los rangos de soluciones a ellos, con compensaciones, en lugar de solo los últimos vagones.

Mike Dunlavey
fuente
1
Este es un muy buen comentario. +1 a las flechas en su carcaj y rangos de soluciones con compensaciones.
user21007
2
+1 para el control de calidad. Esa maestría habría sido mucho más útil con temas dedicados que cubren pruebas, revisión de código, complejidad de código y similares. Ser capaz de verificar automáticamente que un programa hace lo que debería después del último parche vale cualquier cantidad de galimatías onduladas a mano "debería funcionar ahora".
l0b0
55
@ l0b0: Gracias, aunque en realidad estaba pensando en el control de calidad de lo que se enseña y cómo. Tal como están las cosas, los profesores de CS solo enseñan lo que personalmente les parece más interesante. Compare eso con la ingeniería, donde hay interacción con la industria, o la medicina, donde la relevancia en el mundo real es muy alta. Los profesores de IME y CS creen que el mundo real enseñará lo que importa en el mundo real, pero los estudiantes no están ansiosos por aprender, sino que están ansiosos por hacer proselitismo por lo que los profesores estaban más entusiasmados.
Mike Dunlavey
@ Mike: ¿casi cualquier lenguaje moderno? ¿Incluye C ++ y Java?
Kevin Cline
+1. No podría haberlo dicho mejor.
Riwalk
25

Porque el mayor problema en el desarrollo de software en estos días es la capacidad de gestionar la complejidad. Este no es el foco de la mayoría de los lenguajes de programación funcionales. Como tal, las lenguas que hacen hacen que una prioridad (es decir, los lenguajes de POO más populares) tienden a robar solo algunas de las características más frescas que salen de los lenguajes funcionales más académicos y así mantenerse en la cima.

Fishtoaster
fuente
48
Estoy en desacuerdo. Los lenguajes de programación funcional intentan minimizar el uso de un estado, y con eso se vuelven menos complejos. Los programas programados en un lenguaje funcional también son más fáciles de probar y refactorizar.
Jonas
77
@Jonas: a muchos programadores les resulta extremadamente difícil escribir un programa utilizando casi ningún estado (incluido yo mismo). Desde ese punto de vista, en realidad es más complejo. (¡Tenga en cuenta que no estoy debatiendo la utilidad de la programación funcional de ninguna manera!)
ShdNx
3
@ShdNx: Sí, lo sé. Incluso pensé que la programación funcional era difícil cuando la aprendí en la universidad. Pero después de un tiempo comencé a preferirlo a la programación imperativa y la OOP más específica. En mi universidad, la programación funcional se enseñaba antes de la programación imperativa y los estudiantes que no habían hecho ninguna programación antes de la universidad pensaban que la programación imperativa era muy difícil al principio y que la programación funcional estaba más cerca de las matemáticas.
Jonas
16
Hay una diferencia entre dificultad y complejidad. OOP es definitivamente más difícil que la programación estructurada porque agrega más conceptos. Para cantidades de código suficientemente grandes, reducen la complejidad al proporcionar una estructura al código. FP es lo mismo: si está escribiendo solo dos líneas, parece excesivo, pero si su código es lo suficientemente grande, estructurar el código como subunidades sin estado mejora la escalabilidad y reduce la complejidad del código.
Muhammad Alkarouri
66
Uno de los principales énfasis de la programación funcional es la componibilidad. Si esa no es una herramienta para gestionar la complejidad, no sé qué es.
dan_waterworth
23

La programación funcional definitivamente está comenzando a ponerse al día, lenta pero seguramente.

Por ejemplo, la startup que estoy construyendo usa un lenguaje funcional (Clojure) como lenguaje de desarrollo primario por las siguientes razones:

  • Productividad : aprender FP es difícil, pero una vez que lo dominas es muy difícil de superar en términos de poder y expresividad. Probablemente estoy escribiendo aproximadamente 1/10 del número de líneas para implementar cualquier funcionalidad dada en comparación con lo que hubiera necesitado en C # o Java

  • Fiabilidad : las funciones puras son mucho más fáciles de razonar y probar que los objetos con estado. Por lo tanto, puede escribir mejores pruebas y validar la corrección de su código mucho más fácilmente.

  • Concurrencia : los lenguajes funcionales enfatizan la inmutabilidad, que tiene enormes beneficios para las aplicaciones concurrentes que necesitan ejecutarse de manera efectiva en múltiples núcleos. Y nos guste o no, correr en múltiples núcleos es el futuro. Consulte http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey para obtener una explicación brillante de por qué esto es tan importante.

  • Composabilidad / modularidad : los lenguajes funcionales parecen prestarse para conectar componentes más fácilmente que los sistemas OO complejos. Todavía no he descubierto todas las razones de esto, pero parte de esto se debe al hecho de que no tienes toda la "complejidad incidental" que los modelos OO arrastran con ellos. La charla sobre simplicidad radical de Stuart Halloway explora estas ideas con mucha más profundidad.

EDITAR : en respuesta al comentario de Despertar, un ejemplo de la "complejidad incidental" de los sistemas OOP que limita la modularidad son los problemas con la clonación profunda frente a la clonación superficial: no se pueden componer objetos y pasarlos como estructuras compuestas sin un Análisis cuidadoso de la semántica de clonación y mutación. En casos pequeños, esto es manejable, pero en sistemas complejos se convierte rápidamente en un problema importante. Este problema no existirá en primer lugar si confía en estructuras de datos funcionales puras.

mikera
fuente
+1, estaría muy interesado en escuchar tu proceso de toma de decisiones sobre por qué elegiste Clojure (No estoy a favor o en contra de Clojure, solo estoy interesado).
dan_waterworth
44
"aprender FP es difícil": aprender cualquier paradigma es difícil. Recuerdo cuántas horas pasé con el código imperativo (Pascal) antes de tener suficiente experiencia para ser razonablemente productivo. Creo que FP es menos conocido porque muchos programadores aprendieron primero un lenguaje imperativo y una vez que aprendieron a programar no tuvieron tiempo para mirar otra cosa. Soy un programador de C ++ a tiempo completo y actualmente estoy aprendiendo Scala en la noche después del trabajo. Si tuviera una familia que cuidar, simplemente podría olvidarlo.
Giorgio el
1
Creo que los primeros 3 son excelentes casos, sin embargo, no estoy de acuerdo con el 4to. OOP es extremadamente modular y compositivo; Para mí esta es una de sus mayores fortalezas. También es excelente para ocultar la complejidad a través de la encapsulación y la abstracción.
Despertar
1
@Giorgio. Exactamente. "Aprender FP es difícil, aprender OOP es fácil" es tan absurdo como "Aprender español es difícil pero el chino es fácil". Depende de cuál fue tu primer idioma. Y no elegí el chino como un análogo arbitrario de OOP, porque los modismos de OO son como jeroglíficos: fáciles de aprender uno por uno, pero difíciles de recordar todos e imposibles de componer. FP se parece mucho a un idioma con un alfabeto: las letras separadas son inútiles de forma aislada, pero permiten componer cualquier cosa con un conjunto de reglas razonablemente pequeño
KolA
1
(continuación) Entonces, ¿por qué no es popular, todavía, por las mismas razones? Los jeroglíficos existieron mucho antes de que se inventara y madurara el primer alfabeto. Puede tomar otra generación que tenga lectura y escritura alfabética. Me refiero a FP como su primer paradigma
KolA
12

Falta de aplicación asesina

Oye, este de aquí parece nuevo. (cavar cavar cavar)

Creo que la mayoría de los lenguajes de programación prosperaron al tener una "aplicación asesina", algo atractivo que era exclusivo del lenguaje (o visto de esa manera). Esto no quiere decir que toda la aceptación fue esa aplicación, sino que llevó el lenguaje a una mayor aceptación.

Aquí está mi visión no terriblemente precisa de qué nicho ha impulsado la adopción de algunos de los idiomas que tenemos hoy:

  • C: funciona en todas partes (esto fue a finales de los 70 y 80)
  • C ++: marcos de GUI (principios de los 90)
  • Java: Applets y servlets (a finales de los 90)
  • Objective-C: aplicaciones iOS (antes de eso, aplicaciones OS X)
  • Ruby: rieles
  • C #: ASP.NET, WinForms
  • PHP: Wordpress, etc.
  • Javascript: AJAX, especialmente a través de frameworks
  • lua: secuencias de comandos del juego, especialmente WoW

Aparte de eso, muchos lenguajes propietarios han entrado en la puerta a través de poderosas organizaciones de ventas (Oracle y, en menor medida, los idiomas de Microsoft), creando efectivamente su propio nicho.

Una nota muy importante sobre esa lista: el "nicho" del lenguaje, como lo indica la aplicación asesina, se vuelve cada vez más específico a medida que pasan las décadas. Tenga en cuenta el último en la lista: secuencias de comandos del juego , específicamente. Cada vez es más difícil para los idiomas llamar la atención debido a la lista de cosas que otro idioma ya ha hecho lo suficientemente bien.

Entonces, lo que cualquier lenguaje funcional necesita realmente despegar es un nicho. En realidad, todavía no hay grandes lenguajes funcionales, pero hay muchos en nichos más pequeños:

  • Emacs Lisp: uso constante desde los años 80 en Emacs por los desarrolladores. ( Casi nunca se usa en ningún otro lugar).
  • Erlang: En cualquier lugar que desee muchos agentes concurrentes.
  • Esquema: educación
  • APL / J / K: Finanzas (Llamemos a estos funcionales, por el bien del argumento)
  • Common Lisp: "AI" - Esto es para lo que la gente tiende a decir que se usa, lo cual es una bendición y una maldición.

Ahora, el único idioma principal que siento que he dejado fuera de esta discusión es Python. Python ha hecho algo muy interesante; Ha tenido éxito sin parecer ser el ganador en ningún nicho importante. Esto podría significar que estoy completamente equivocado al ver la popularidad del lenguaje de esta manera. También podría significar que un lenguaje lo suficientemente bueno puede volverse popular sin una aplicación asesina para impulsar la adopción y la aceptación, pero es muy difícil y puede llevar mucho tiempo. (Perl tiene una historia similar, pero llegó unos años antes y ahora tiene menos aceptación).

A partir de esto, puedo decir qué lenguajes funcionales creo que están en aumento:

  • Clojure: programación web, esp. a través de Heroku
  • Scala: Lift (o quizás Play, estos días) - JVM sin Java

Si me preguntara dónde buscar luego los lenguajes funcionales populares, diría que esté atento a un lenguaje funcional con desarrollo llave en mano en la nube (a la Heroku o GAE) o desarrollo llave en mano de aplicaciones móviles.

Jesse Millikan
fuente
Consideraría Perl como un idioma importante también. Es un lenguaje antiguo que diría que se usa con mayor frecuencia con sistemas tipo Unix. Aunque Python parece ser una alternativa más moderna. Todavía es un lenguaje popular que ha recibido mucha atención y tiene una gran comunidad.
Despertar
1
@Despertar: no estaba tratando especialmente de ser igualitario sobre los idiomas que mencioné :) Y acepté, la historia se parece mucho a Python, excepto en los últimos años.
Jesse Millikan
1
Perl hizo un par de nichos. El primero se reflejó en versiones anteriores de su documentación, que se refería al nombre como un acrónimo de "lenguaje práctico de extracción e informes". El segundo llegó un poco más tarde, y fue una secuencia de comandos CGI: durante muchos años, Perl fue el lenguaje de la web. Obviamente, ha perdido mucha popularidad ahora, pero eche un vistazo a los sitios web antiguos que todavía se ejecutan en el mismo software con el que se construyeron originalmente, y verá mucho perl (estoy pensando en slashdot.org, en este momento , pero hay bastantes más).
Julio
9

Por la misma razón por la que Lisp nunca se dio cuenta (¡que comiencen las guerras de llamas!). La programación funcional es un paradigma muy extraño en comparación con la programación imperativa y orientada a objetos. Si, como la gran mayoría de los estudiantes de CS, comenzó con C y avanzó a C ++ / Java, tiende a no querer aprender a pensar de una manera completamente ortogonal a la forma en que normalmente piensa.

Chinmay Kanchi
fuente
2
Paradigma alienígena? Está más cerca de las matemáticas que la programación imperativa. Aquí en Suecia, creo que la mayoría de los estudiantes de CS en la universidad es primero la programación funcional. Por ejemplo, comenzamos con Standard ML, antes de C, Erlang y Java.
Jonas
44
Lo suficientemente justo. Sé que a muchos estudiantes de ingeniería en el Reino Unido y la India se les enseña primero C, seguido de C ++ y / o Java. A menudo no se les enseña un lenguaje funcional en absoluto.
Chinmay Kanchi
14
@Jonas Para muchas personas, las matemáticas son un paradigma extraño y cualquier cosa que aleje la programación de las matemáticas hace que sea más fácil de entender.
scriptocalypse 01 de
55
He oído hablar de personas que nunca han oído hablar de los árboles, y mucho menos de la programación de funciones, después de haberse graduado.
dan_waterworth
1
@ Tux-D, en realidad, no, estoy hablando de estudiantes en el Reino Unido.
dan_waterworth
6

Consideremos negocios y programación.

Hay empresas que usan su software como un activo estratégico. Esto no es típico. Para la mayoría de las empresas, TI es algo que respalda los negocios reales de la compañía. Es un gasto necesario. Son conservadores porque saben que por $ X pueden obtener la TI que necesitan, mientras que si cambian a algo diferente ahorrarán menos de $ X si todo va bien, y perderán mucho si todo sale mal.

Además, en las empresas, lo más barato es lo que hicieron ayer. El cambio, sin embargo, deseable, es costoso. Si una empresa cambiara, por ejemplo, de una solución C # / .NET, incluso a F #, tendrían problemas. Sus programadores (que probablemente no sean los mejores programadores) tendrían que aprender un nuevo idioma y ser competentes en ambos, y usar ambos con frecuencia. Habría rutinas escritas en ambos durante mucho tiempo. Si se mudaran a algo como Haskell, o si estuvieran usando C ++ / MFC en primer lugar, estarían cambiando mucho más, y eso sería mucho más costoso.

Además, habrá un suministro de programadores de C # y un soporte continuo de Microsoft durante mucho tiempo. Se puede contar con las prácticas actuales de TI. No existe el mismo nivel de apoyo institucional o garantía de disponibilidad continua de programadores.

Por lo tanto, para la mayoría de las empresas, hacer un cambio en la programación funcional sería costoso por adelantado, y solo se pagará por sí solo si la reducción en los costos de TI es suficiente a largo plazo, excepto que el largo plazo es potencialmente dudoso.

David Thornley
fuente
2

Ya escribes código en estilo funcional, solo que no lo sabes.

Cuando se requiere que realice pruebas unitarias para su código, tiende a escribir funciones comprobables, que no crean ni dependen de los efectos secundarios, y siempre devuelve el mismo resultado en los mismos argumentos (llamadas funciones puras). Esta es la principal ventaja de los programas funcionales.

Creo que los lenguajes funcionales son demasiado limitantes. Entonces, en lugar de reemplazar los lenguajes imperativos por funcionales, los lenguajes imperativos obtendrán características funcionales. Hoy en día casi todos los lenguajes de programación tienen cierres y lambdas.

Calmarius
fuente
1

Creo que solo hay una respuesta real a tu pregunta. Puede entrar en muchas razones relacionadas por las cuales esta respuesta es el caso, pero esas son preguntas diferentes.

Aquí está:

  • Los arquitectos de software proporcionan soluciones en las que confían que funcionarán.
  • La mayoría de los arquitectos no trabajan en lenguajes funcionales.
  • Una vez que se eligen las tecnologías y los idiomas, las empresas encuentran personas que pueden trabajar con ellos.

¿Se está poniendo de moda? Todo depende de si las personas que confían en el uso de lenguajes funcionales se están convirtiendo en arquitectos y eligen usarlo para los proyectos en los que trabajan.

John Fisher
fuente
0

El verdadero problema es el estado.

Los lenguajes funcionales no tienen estado global. La mayoría de los problemas industriales requieren un estado a gran escala (cómo se representa un libro mayor o un conjunto de transacciones) incluso si algunas funciones a pequeña escala no lo requieren realmente (procesamiento de un libro mayor).

Pero estamos ejecutando código en máquinas de arquitectura Von-Neuman que son inherentemente completas. Entonces, en realidad no nos hemos librado del estado, los lenguajes funcionales simplemente ocultan la complejidad del estado al desarrollador. Esto significa que el lenguaje / compilador tiene que lidiar con el estado detrás de escena y administrarlo.

Entonces, aunque los lenguajes funcionales no tienen un estado global, su información de estado se pasa como parámetros y resultado.

Entonces, la pregunta es si el lenguaje puede manejar el estado de manera eficiente detrás del sentido. Especialmente cuando el tamaño de los datos supera con creces el tamaño de la arquitectura.

Mirándolo desde el lado del hardware

El sistema operativo ha ayudado mucho en los últimos años en la visualización del espacio de direcciones para que las aplicaciones no tengan que preocuparse oficialmente. Pero las aplicaciones que no se preocupan por caer en la trampa de agotar el hardware cuando la presión de la memoria se vuelve intensa (agitar el hardware ralentizará sus procesos).

Como el programador no tiene control directo sobre el estado en el lenguaje funcional, debe confiar en el compilador para manejar esto y no he visto lenguajes funcionales que manejen esto bien.

En el lado inverso de la moneda, el programador de estado completo tiene control directo sobre el estado y, por lo tanto, puede compensar las condiciones de poca memoria. Aunque no he visto muchos programadores que sean lo suficientemente inteligentes como para hacerlo.

Mirando desde el lado de la industria:

La industria tiene muchos programadores ineficientes llenos de estado.

Pero es fácil medir las mejoras en estos programas a lo largo del tiempo. Lanzas a un equipo de desarrolladores al problema de que pueden mejorar el código al mejorar la forma en que el programa maneja el estado.

Para los programas funcionales, las mejoras son más difíciles de medir, ya que necesita mejorar las herramientas que mejorarán los programas (solo estamos viendo cómo las aplicaciones manejan el estado subyacente de manera eficiente aquí, no la mejora general del programa).

Entonces, para la industria, creo que se trata de la capacidad de medir las mejoras en el código.

Desde una perspectiva de contratación

Hay muchos programadores con estadísticas completas disponibles para contratar. Los programadores funcionales son difíciles de encontrar. Por lo tanto, su modelo básico de oferta y demanda entraría en acción si la industria cambiara a una programación de estilo funcional y eso no es algo que quieran que suceda (los programadores son lo suficientemente caros como es).

Martin York
fuente
2
Los lenguajes funcionales, especialmente los lenguajes funcionales "impuros", pueden manejar perfectamente el estado global. Encuentro que a menudo los programas se descomponen en capas alternas: por ejemplo, estado global ... pero transiciones de estado funcional ... con estado local ocasional (enmascarado) para implementar partes críticas de rendimiento de esas transiciones, etc. El problema con los lenguajes imperativos , OMI , es que a menudo llevan a los programadores a usar el estado de manera inapropiada, cuando los patrones funcionales funcionarían mejor. Pero los idiomas parecen estar evolucionando en la dirección de soportar bien ambos estilos.
Ryan Culpepper
1
Es muy fácil lidiar con el estado en lenguajes funcionales, pero requiere un cambio de énfasis. Mientras que en los lenguajes imperativos se escriben procedimientos que modifican el estado, en los lenguajes funcionales se escriben funciones que devuelven procedimientos que modifican el estado.
dan_waterworth
"Los lenguajes funcionales no tienen estado global": no necesita un estado global. Casi toda la gestión estatal puede hacerse a través de mónadas.
Arunav Sanyal
-3

Esta pregunta tiene una premisa ligeramente incorrecta. Por las siguientes razones:

  1. La programación funcional es bastante común en la industria. Pero solo se usa donde hay programadores experimentados disponibles. No se puede esperar que los principiantes lo sepan. Casi todos los grandes proyectos de programación lo están utilizando, pero solo lo mantienen en áreas que son manejadas por programadores experimentados. Los principiantes tratarán con los módulos fáciles que no requieren programación funcional.
  2. Dada esta realidad, las empresas que contratan personas (generalmente jóvenes que vienen de la universidad) realmente no pueden pedir experiencia en programación funcional. Cualquier persona en proyectos que requiera programación funcional ya ha estado en la misma compañía durante 15 años.
  3. Las universidades están comenzando a enseñarlo, porque ya saben que el conocimiento de programación funcional será muy útil en 30 años. Su rango de tiempo es de 30 años, no el medio año normal como en las empresas.
  4. Estos puntos son la razón por la cual las personas se decepcionan cuando ingresan a la fuerza laboral y ven que las cosas que aprendieron en la universidad no se usan. Pero fueron diseñados para un período de tiempo de 30 años, y eventualmente será útil, es solo que las empresas están usando las cosas simples, las cosas que pueden esperar que la gente sepa.
  5. También sería arrogante si piensa que después de unos años de universidad, conoce la programación funcional lo suficientemente bien como para usarla en proyectos de software reales. Comience desde las cosas simples primero. Realmente no necesita hacer el software más complejo como su primera tarea cuando comienza a trabajar. Eventualmente llegarás a las cosas complejas, pero lleva tiempo.
tp1
fuente
2
1) "casi todos los grandes proyectos de programación lo están usando". Mi experiencia es que esto está lejos de la realidad. Muy pocas compañías están usando programación funcional como lo que yo sé. La mayoría solo usa Java y C # (aunque C # ha tenido construcciones más funcionales en los últimos años), C ++ y C.
Jonas
2
2) Mi experiencia es lo contrario. Las personas de las universidades parecen ser las únicas que conocen la programación funcional. Aquí en Suecia, la mayoría de las universidades enseñan programación funcional desde el primer año. Y las universidades como MIT han estado utilizando hasta hace poco programación funcional en su primer curso de programación (Esquema).
Jonas
@jonas: no, el lenguaje de programación no tiene nada que ver con eso. Por supuesto, C y C ++ y Java, etc., son utilizados por una gran cantidad de proyectos. La programación funcional también funciona en código c ++. La práctica actual parece ser que parte del proyecto usa OO y parte de él usa programación funcional. Ambas partes usan el mismo lenguaje (usualmente c / c ++)
tp1
Sí, podrías hacer OO en C también. Pero no es recomendable. C y C ++ no tienen muchas construcciones para la programación funcional, por ejemplo, no son inmutables de forma predeterminada, no tienen un buen soporte para la coincidencia de patrones, no se incluyen estructuras de datos inmutables, etc.
Jonas
Bueno, por eso requiere programadores experimentados. Dado que es prácticamente imposible cambiar el lenguaje de programación de los principales, lo mejor es hacer programación funcional en c ++. También c ++ tiene cosas como const que ayudan bastante.
tp1
-10

Porque es más difícil depurar FP.

interestar
fuente
11
Estoy en desacuerdo. Sin efectos colaterales, el proceso de depuración es más fácil. Tal vez piense que es más difícil porque el paradigma funcional es diferente y necesita experiencia para sentirse cómodo con una nueva forma de hacer las cosas, incluida la depuración.
Maniero
2
Los lenguajes de programación funcional son en realidad más fáciles de probar, ya que las funciones puras no tienen estado.
Jonas
44
Jonas, no dije "prueba", dije "depurar", es decir. encuentra un error que has cometido. Las pruebas son parte de eso, pero también lo es el razonamiento sobre el programa, etc. bigown: defiendo esto. Es una función del poder de FP. Cuanto más trabajo haga una línea de código en particular, más difícil será ver qué línea de código está causando un problema. La asignación entre la línea de código y el efecto es más difusa, por ejemplo. una sola función de orden superior podría tocar docenas de comportamientos del programa y viceversa. Los síntomas pueden variar enormemente entre diferentes puntos para el mismo error.
interstar
En mi experiencia, no es difícil depurar en absoluto. Estoy usando F # y no puedo encontrar ninguna razón por la que sea más difícil depurar que C #, por ejemplo. Puede que la depuración sea más difícil en Haskell debido a la pereza (no tengo idea), pero la programación de FP es más simple debido a la apatridia, como dijo Jonas. En otras palabras, el código FP es más predecible porque sabe que el resultado no está influenciado por variables invisibles.
Muhammad Alkarouri
2
Mientras sus funciones sean puras, la depuración es fácil. Si no puede depurar agregando pruebas unitarias, entonces no está haciendo un trabajo adecuado al escribir pruebas.
dan_waterworth