Ciertamente, estoy de acuerdo con el objetivo principal de la respuesta aceptada, y dado que básicamente te estás sumergiendo en las cosas al intentar Erlang, parece que probablemente tienes una buena comprensión de cómo aprendes y solo necesitas un pequeño empujón en la derecha dirección, así que claramente fue una buena respuesta para usted ... Pero, creo que abordaría la pregunta un poco diferente, ya que veo que esta respuesta no me habría ayudado mucho; ¡Siempre codifico para aprender! Entonces, aquí están mis pensamientos ...
(Por cierto, tiendo a continuar con detalles más adecuados para, por ejemplo, capítulos en un libro, y estoy seguro de que no puedo sofocar mis instintos por completo aquí, pero voy a intentar una táctica diferente; estoy voy a resumir mis pensamientos aquí, y en caso de que alguien quiera más detalles sobre algo, o piense que algo que digo es engañoso en este formato, haré todo lo posible para recordar leer los recordatorios de respuesta ...)
Para tratar de mantenerme concentrado en la tarea, aquí tengo mi comprensión de las preguntas clave formuladas en el OP; Mantendré el margen al mínimo según sea necesario para explicar ...
Primero las respuestas rápidas:
¿Estaba en una situación similar? Era al menos similar; Estaba en una posición de liderazgo haciendo muchos proyectos variados que, sin embargo, estaban relacionados ... (CRM / Web / DB / Data Integration / etc.)
¿Cómo / por qué di el salto a funcional? " . Vi algunos ejemplos de LINQ y, aunque definitivamente había soñado con algún tipo de lenguaje de consulta integrado, tipado estáticamente [ya que había usado principalmente lenguajes tipados estáticamente (principalmente C ++ y luego C # )] a lo largo de mi carrera ... Pero, era un entorno bastante rápido en el que me encontraba, y aunque a menudo había logrado ver lo que venía en el pasado, nunca lo había pensado realmente, así que nunca preví que podría / permitiría operaciones en Objetos antiguos simples (¡jaja!) con la misma facilidad; cuando lo vi supe que tenía que tenerlo ... así que ese es el por qué y el comienzo del cómo: me concentré en aprender a entender LINQ .
Cuatro pensamientos ... errr, no, eso no está bien ... Pensamientos previos
Cuando leo la respuesta de Martijn Verburg , la mención de la funcionalidad comercial me hace pensar de inmediato en comenzar a implementar código para lo que sea que esté trabajando ... Dependiendo de cuán superficial sea la experimentación inicial, podría responder de manera diferente, pero suponiendo que fuera solo sumergiendo el dedo gordo del pie, no estoy seguro de tener algo directamente por trabajo (o que pronto se convierta en trabajo) que me haya proporcionado la emoción / pasión que creo que probablemente deberías tener por los primeros problemas que empiezas a enfrentar ...
Me basé casi por completo en lenguajes tipados estáticamente + metáforas y patrones de OOP + lo que sea que terminé envolviendo mi cerebro accidentalmente mientras resolvía mis problemas reales a lo largo de los años ... Señale que, si es como soy, Es probable que tengas mucho cerebro dedicado a cosas que no te ayudarán tanto con LINQ / FP.
Creo que es algo así como la programación pura de procedimiento versus OO: hay muchas cosas de procedimiento que terminarás usando en OOP, pero aquellos que vienen a C ++ desde C sin que sea una prioridad grok / ken / "get" OO terminar siendo muy muy malo en C ++. De hecho, he entrevistado a muchísimos (más de 15) desarrolladores de firmware y controladores de dispositivos que creían conocer C ++, pero que, a lo sumo , tenían una comprensión terriblemente básica / de libros de texto de C ++, prácticamente sin entender o experiencia en OOP, porque en realidad nunca hicieron OOP ... Escribieron clases multipropósito singleton con miembros estáticos y funciones estáticas con cierta cantidad de clases no estáticas / no singleton que se usaron como estructuras.
Y FP tiene algunos conceptos igualmente alucinantes (para aquellos que no están formados en el paradigma) y otras cosas que lo acompañan, y (aunque he encontrado que la hibridación de muchas técnicas es ideal para mí) entiendo más y más a medida que pasa el tiempo exactamente cuán limitado era mi pensamiento antes de obtener habilidades funcionales reales en mi conjunto de herramientas; Me las arreglé para implementar muchas cosas en el pasado de una manera que era un poco más creativa que la mayoría de los programadores de OO, pero a medida que uso los conceptos de lo atrofiado que era mi pensamiento antes ... Hay clases enteras de problemas que pueden resolverse en unas pocas líneas que solían ser muy retorcidas en C ++ / C #.
de repente te encuentras ...
En una publicación "demasiado larga"
Estás en un laberinto de retorcidos "no leídos", todos iguales.
Ves una teleconferencia en el futuro cercano, que se acerca rápidamente.
> conciso
UH Huh. Seguro. Bien, diremos que el modo "conciso" está "activado".
Ves una teleconferencia en el futuro cercano, que se acerca rápidamente.
> ¿Qué se supone que significa eso?
Sólo digo'. ¿No tenías que hacer algo esta mañana?
Ves una teleconferencia en el futuro cercano, que se acerca rápidamente.
> hey, ¿eso es una porquería detrás de ti?
¿¡Qué!? ¡¿DÓNDE?! [huye gritando]
> Lo siento, no entendí ¿QUÉ DÓNDE, reformular?
[continuó corriendo y gritando, sarcasmo inadvertido]
Entonces ... ¿Qué debo aprender, querido PSE, querido PSE?
Yo personalmente comencé en C # con LINQ. Me permitió introducir algunos conceptos a la vez, y mientras leía constantemente sobre FP y sus conceptos, y más LINQ, y la relación entre los dos, me dio un camino a seguir mientras seguía haciendo un trabajo productivo. Agregué algunas cosas a la vez, las consultas de datos se convirtieron rápidamente en una herramienta útil para mí sin tener que entender mucho.
Ahora, mirando hacia atrás, ojalá hubiera podido hacer mi próximo proyecto (abordado aproximadamente un año después) primero; Me familiaricé moderadamente con F # (que, por cierto, me dio una gran ventaja para aprender ML (metalenguaje) y sus otros derivados (por ejemplo, OCaml también).
Básicamente, creo que una respuesta decente a 'qué' depende de encontrar un buen emparejamiento de algún problema de programación que le interese, pero por supuesto debe emparejarse con un poco de FP que desea aprender ... (y puede enjuagar / repetir / hacer espuma después de eliminar algo de la lista ...) Y, por supuesto, siempre terminas aprendiendo un poco más de lo que te propusiste hacer; Al principio tomé algunos pasos pequeños, pero luego terminé haciendo cosas más grandes y dejando que las cosas más pequeñas se acomodaran mientras las hacía.
Primero, ¿qué flota tu bote? Especialmente al principio, es mejor tener algo divertido y emocionante (para usted) y que mantenga su interés lo suficiente como para que valga la pena. Entonces, IOW problemas para trabajar y técnicas que abordan esos problemas ... LINQ y consultas de datos en línea para mí al principio. La recursión fue otra para mí, incluida la recursividad de la cola, cavo el GodelEscherBach-ness de ella; y había estado leyendo sobre la recursión de la cola. Alrededor de este tiempo, las cosas en las que estaba trabajando se suspendieron, y terminé teniendo un gran bloque de tiempo, por lo que pude mantenerlo durante mucho tiempo. Fue más fácil con menos interrupciones, pero debido a que elegí cosas que pensé que eran divertidas, no fue tan difícil incluso con la interrupción del trabajo. :)
Y aunque no se me ocurrió nada interesante que pueda contarte, como el Programa Crab consciente de sí mismo, logré ser bastante bueno en eso.
Y ... ¿Con qué lo aprenderé, querido PSE, querido PSE, con qué?
Para esto, utilicé varios algoritmos que me interesaban de todos modos, además de varias cosas que me preguntaba si podría hacer en F #, y cuando me quedara sin ideas abordaría cosas como 99 botellas de cerveza y el Proyecto Euler problemas ...
Estoy seguro de que puede encontrar muchas cosas que le interesan para las cuales FP es relevante; ofrece de todo, desde mejoras hasta POO que lo ayudan a expresar las cosas un poco más sucintamente hasta torcer la forma en que lo habría pensado antes en una forma que no reconoce y que probablemente ni siquiera tenía el modelo mental para expresar antes de.
Pero ... Hay un agujero en mi modelo, querido PSE, un agujero ...
Y es por eso que es importante que, especialmente al principio, pero realmente a lo largo de tu tiempo de aprendizaje (¿y no es siempre cierto cuando estás aprendiendo algo?) Al menos te tomas un poco de tiempo entre problemas para leer cosas no relacionadas pero todavía FP y tiempo para leer el código fuente escrito por expertos, preferiblemente resolviendo el mismo problema o problemas similares; así como sus explicaciones de las cosas ...
Y todo el tiempo, tienes que esforzarte para entenderlo todo, no desde tu antigua perspectiva sino desde dentro de la propia PF ... En algún momento para mí, hizo clic y ... lo que mejor puedo relacionarlo to se está volviendo más o menos fluido en holandés; en algún momento logré ponerme lo suficientemente en la mentalidad (lo hice por inmersión, que es básicamente lo que he descrito aquí; sumergiéndome en la PF en lugar de tratar de aprenderlo únicamente a través de "larnin de libro" ...
Y, finalmente lo hice; Me las arreglé para internalizar todo y girar mi cerebro hasta que comenzó a aparecer FP / LINQ sin siquiera tener que hacer un esfuerzo para traducirlo de nuevo a OOP. (Sí, hice eso; tenía que tener algo para colgar mi falda. Sombrero. Lo que sea.)
Pensamientos finales...
Dios mío, parece que estás perdiendo tu capacidad de pensar en tu firma inteligente
títulos de la sección Qué lástima.
La teleconferencia todavía se acerca rápidamente. Parece mucho más grande ahora.
> sí, sí, bueno ... conciso y todo. Veo que lograste perder esa tristeza.
llamada cerrada, eso ... bueno, sí, estoy siendo ter ... OH NO ESTÁ DE VUELTA!
AAAAAAAHHHHHH !! [huye gritando, una vez más]
La teleconferencia todavía se acerca rápidamente.
De alguna manera se parece a Sir Lancyjohn Cleezewiz.
Ya casi está sobre ti.
> hey, date prisa! Tengo un experimento para probar contigo! (y un po-ta-to)
Puede encontrar una gran cantidad de información en línea sobre FP, naturalmente. Lo principal es comprender los conceptos básicos y luego aprender a aplicarlos. Por ejemplo, aprenda sobre la inmutabilidad y por qué es importante / útil para FP. Recomiendo aprender un poco de teoría para acompañar todo, como cómo la PF pura puede ser mucho más susceptible a la prueba formal. Esta fue una fuerza impulsora detrás del progenitor de F #, ML. YMMV, por supuesto, puede ser alguien aburrido hasta las lágrimas, en cuyo caso, muchos ejemplos, muchos ensayos y errores para ver exactamente por qué las técnicas utilizadas son lo que son, lo ayudarán a tener ese '¡Ajá!' momento de bombilla.
Entonces, lo dejaré así por ahora. Espero que esto sea de alguna utilidad para alguien. Quería aprender un poco más sobre cosas específicas para aprender, pero por el momento no tengo tiempo. Espero encontrar algo de tiempo para volver pronto, aunque parece ser una semana larga para mí, por lo que probablemente será al menos el fin de semana.
<3 "Presentamos GRUEBOL, un recurso provisional; solo hasta que SnozzML haya terminado. Debería ser pronto; un gran comité me ayudó esta vez". --Grace Hopperwit Egghead, Famosas últimas palabras , XX97 GUE <3