¿Qué aprender después de PHP? Scala o Clojure?
(17)
Tengo un fondo de desarrollo web pesado con PHP. Mis razones para aprender un lenguaje de programación funcional son:
- para mejorar mis habilidades de programación. Se sugirió en gran medida que el aprendizaje de un FPL ayuda. Esto tiene una alta prioridad porque quiero ser mejor y mejor.
- aprender un lenguaje de programación de propósito general para resolver tareas como scripts (scripting de SO, manipulación de texto, etc.)
- Para ser utilizado como una alternativa para PHP en el desarrollo web.
Además, ¿cuál tiene el mejor soporte comunitario, tutoriales y libros y el mejor marco de aplicaciones web?
Siéntete libre de sugerir otros idiomas.
¡Consigue una bolsa de cemento, endurece y aprende Haskell, para un gran bien!
- Es puramente funcional, por lo que no puedes caerte del barco.
- Es de uso general con un montón de bibliotecas (incluida una pila de aplicaciones web) y sin penalización de tiempo de inicio de VM (los lenguajes JVM no son excelentes para las secuencias de comandos del sistema operativo y similares, ya que tiene que iniciar la JVM cada vez).
Aunque Scala es mi idioma favorito por ahora, creo que no es la mejor opción para aprender FP. Es principalmente OOPL con buen soporte de FP. Yo sugeriría comenzar desde Haskell para sumergirse rápidamente en FP. Aprenderá cómo funcionan los siguientes conceptos de FP (que no solo son compatibles, sino que se aplican y son omnipresentes en Haskell): 1) sistema de tipo estático potente con inferencia de tipo 2) evaluación perezosa 3) computación sin efectos secundarios
Después de haber escrito de forma dinámica "pragmático" PHP y funcional "académico", Haskell tendrá una imagen bastante completa del panorama de lenguajes de programación.
El desarrollo web depende totalmente de: Primero, la calidad del marco web y, en segundo lugar, las herramientas para el desarrollo. No sé por qué quiere cambiar a lenguajes funcionales para programar aplicaciones web.
Python permite algunas construcciones funcionales para la programación y tiene marcos y herramientas. Lua permite el mismo nivel de programación funcional y no tiene marcos de alta calidad para desarrollo web ni herramientas, sin embargo, su simplicidad / naturaleza primordial es su elegancia.
Ahora, como un puritano, diría que haskell, pero eso es contraproducente: D ,. Tú mi amigo estás buscando a Python. No he evaluado a Ruby, pero podría tener algunas construcciones funcionales.
Esa es una llamada muy difícil. Personalmente, creo que Scala es más útil como lenguaje general para los desarrolladores web. Hay muchos marcos web para ello, o adaptados a él. En el lado muy rápido y sucio, por ejemplo, está el Play . En el lado derecho con un excelente soporte de cometa, hay Lift .
Pero hablaste de aprender a programar en un estilo funcional. En ese sentido, no hay manera de que Scala pueda competir con Clojure. Scala se puede utilizar en un estilo funcional, pero se asegura de que no tenga que hacerlo. Con Clojure, por otra parte, hacer algo que no sea un estilo funcional es doloroso.
Entonces, si quieres una alternativa a PHP, apostaría por Scala. Si realmente quieres aprender programación funcional, Clojure.
Finalmente, permítame decirle que no creo que Clojure no sea un lenguaje de propósito general, o que no se pueda usar para el desarrollo web. Solo creo que Scala es más en ambos aspectos.
Esto es lo que un defensor de Clojure autoproclamado tiene que decir sobre Scala. Decídete, por supuesto, pero puedes encontrar su perspectiva útil.
También te puede interesar lo que tenga que decir sobre PHP vs Clojure .
He intentado tanto en Scala como en Clojure recientemente, basado en motivaciones similares. Esto es lo que encontré:
Scala es enormemente versátil y potente; Scala le permite definir tipos con gran precisión y le permite definir DSL que son concisos y limpios. Scala tiene muchas construcciones geniales que uno desearía que Java tuviera, incluyendo un montón de extensiones funcionales. Pero cuando llegó el momento, terminé codificando el imperativo Java en el lenguaje Scala porque la complejidad de todas esas cosas geniales me abrumaba.
Hice algo de Lisp en la universidad, y siempre tuve ganas de volver a ello. Algunas personas muy inteligentes hacen cosas realmente interesantes en Lisp, y en muy pocas líneas. Quería ser una de esas personas inteligentes, o al menos tratar de ser como ellos. Pero nunca entendí realmente Scheme, y extrañé mi "suministro infinito de bibliotecas" de Java. No podía verme escribiendo una GUI en Esquema, y tuve problemas para visualizar una aplicación web.
Entonces probé Clojure y parecía que todo encajaba en su lugar. Clojure se hizo intencionalmente más amigable para los forasteros: hay un intento de reducir los paréntesis y de usar diferentes signos de puntuación entre paréntesis para diferentes situaciones. Tratar cosas como arreglos, texto y XML como secuencias, combinadas con un poderoso conjunto de funciones de secuencia, hizo que muchos problemas fueran bastante simples, al igual que el soporte para arreglos y hashmaps. Es (intencionalmente) como Java funcional. La mentalidad funcional requiere un poco de tiempo para acostumbrarse, pero en ninguna parte lo encontré tan accesible o agradable como en Clojure. Mi código ya casi no necesita bucles, sin embargo, es más claro acerca de dónde se encuentra en bucle / secuencia, y más conciso. Puedo hacer un estado mutable si realmente lo necesito, pero tengo que ser explícito al respecto; a cambio, ese estado está protegido por los mecanismos de concurrencia de Clojure. La concurrencia, entonces, se convierte en casi una obviedad, a veces mi código se ejecuta de forma segura en paralelo sin ningún esfuerzo consciente por mi cuenta.
No provenir de Java, esto no le parecerá muy útil, pero Clojure puede hacer todo lo que Java puede hacer, incluidos los archivos .class totalmente compatibles. Lo más importante es que puede interactuar con todas las bibliotecas de Java, y esa sola capacidad hará que PHP parezca un lenguaje de juguete para ti.
Mi $ .02 es para revisar Perl. Puede que parezca un geezer, pero tenga en cuenta que Perl tiene CPAN ( http://cpan.org ) y muchos recursos en línea muy, muy útiles.
Mi sugerencia es aprender JavaScript.
Quiero decir, realmente aprenderlo.
Para lenguajes funcionales, aprende tanto Scala como Clojure . Aprenderás nuevas formas de pensar de ambos. Aprende algo de Reia y Erlang mientras tú también.
En serio, cuantos más idiomas tengas en tus manos, mejor estarás como programador, independientemente del idioma que termines usando.
Rant: "¿Qué idioma debo aprender?" Las preguntas se están volviendo aburridas. Las respuestas deben ser las mismas cada vez, pero nadie da los consejos correctos de los sabios. En su lugar, todos difunden FUD y sugieren que el idioma que deben usar para su trabajo diario es el que debe aprender. Majaderías.
Probé Scala y lo encontré un poco (una gran cantidad de operadores que debes recordar cómo usarlo). Pero eso podría ser yo. He escuchado que Clojure es funcionalmente más puro y más cercano a Lisp, pero no lo he comprobado.
F# es la versión de Microsoft de los lenguajes funcionales, es posible que desee revisarlos. He oído que se ha utilizado para varios proyectos en la industria.
Puede que no parezca tan elegante, pero sugiero fuertemente JavaScript.
Hace muchos años fui fuerte en el desarrollo de PHP, pero luego cambié a Java, C #, C, Objective-C. Durante mi tiempo de Java entré profundamente en JavaScript e hice algunas cosas muy buenas con él. Alguien que conozco desarrolló todo un DBMS ligero temporal del lado del cliente. Basta con echar un vistazo a Ext.js lo que hacen con JavaScript. Es tan subestimado, pero no lo merece. Le sugiero que busque "Douglas Crockford Video" en Google. En Yahoo, ha creado varias presentaciones excelentes sobre JavaScript, también te sugiero que obtengas el libro "Javascript - The Good Parts" de Douglas Crockford, y "JavaScript - The Definitive Guide". Los dos mejores libros de JavaScript disponibles. Y te sorprenderás de lo que es posible y de qué hermoso lenguaje es en realidad. De hecho, puedes hacerlo con AI, tiene Lambda, ¡en realidad no hay nada más "genial" que eso! Qué pena solo se usa para scripts del lado del cliente. Pocas personas saben que JavaScript también puede usarse para la programación en el servidor, pero eso es muy raro / no está bien documentado.
Y gracias a Adobe Air puedes traer JavaScript al escritorio.
Sería una adición óptima a su conocimiento de PHP. Siempre es bueno hacer cosas relacionadas. Puede ser el mejor desarrollador web o el mejor software de escritorio Architekt. Pero nuestros cerebros son demasiado lentos para captar toda la profesión necesaria hoy en día para ser el Gurú en múltiples direcciones. Beeing the Guru es esencial para el éxito, creo. Algunos de mis amigos solo hacen una cosa: Beeing the Guru. Ellos estudian toda su vida un pequeño tema y son extremadamente exitosos. Ellos ganan 5 veces más que cualquier desarrollador de I-can-do-it-it-but-know-know-just-5% en este tema solo en un cuarto de tiempo.
Así que también sugiero: escriba un libro de PHP de 600 páginas antes de que olvide su conocimiento de PHP mientras hace algo totalmente diferente.
Olvidé casi todo lo que sabía sobre PHP y JavaScript, pero en esos primeros tiempos definitivamente fui uno de los expertos que mostró muchas cosas a los demás. Ahora es un dolor que tengo que volver a preguntar a muchos conceptos básicos para recordarlos en mi pequeño cerebro. Al escribir su libro, recordará su experiencia en PHP muy rápido, incluso después de algunos años de hacer algo diferente, porque es su libro, que se ajusta a su cerebro, desde su cerebro. Y no perderá su estado de experto en PHP incluso después de varios años de hacer otra cosa.
Buena suerte.
Ruby es probablemente el lenguaje general más "funcional" que también es bueno para las secuencias de comandos. Python está muy cerca, pero el hábito de Ruby de devolver implícitamente el resultado de la última expresión en una función / bloque es el desempate para mí.
Ambos tienen excelentes frameworks web (Rails y Django, respectivamente), y ambos definitivamente ampliarán sus horizontes después de programar PHP. Al mismo tiempo, brindarán muchas oportunidades para un aprendizaje incremental.
Ninguno de los dos utiliza expresiones en S y ambos permiten la programación imperativa, por lo que no habrá nada que obligue a renunciar al estilo imperativo del pavo frío.
Finalmente, el muy lamentado TCL es básicamente Scheme como un lenguaje de scripting y extensión. No estoy seguro de dónde está en estos días, pero el Sistema de la Comunidad ArsDigita fue escrito en TCL.
Saltar de PHP a Scala o Clojure va a ser un gran choque cultural. PHP está muy enfocado en hacer cosas rápidas / sucias (o un 90% de limpieza con el último 10%) (- :), mientras que los lenguajes de programación funcionales imponen cierta corrección y abstracción en su pensamiento. Antes de llegar a Scala o Clojure, voy a querer algo entre medio. Si fuera yo, yo
Elija mi objetivo final como Clojure, ya que (como lo entiendo) obtiene toda la biblioteca estándar de Java con Clojure, lo que lo hace de inmediato más útil que algo puro como Scala
Pasaría algo de tiempo construyendo algo en Java, solo para tener una idea de un lenguaje OO fuertemente tipado. Escogí Java sobre C # (o incluso ZendFramework estilo PHP) porque será útil una vez que llegues a Clojure. Google Web Tools podría ser un buen lugar para comenzar con esto. Es una especie de desarrollo web, pero muy similar a Java y no similar a PHP / HTML.
Dedique algo de tiempo a observar las entrañas de jQuery y desarrolle su propio módulo de jQuery o agregue una función principal. Esto lo acostumbrará a la manera funcional de pensar, mientras lo aplica a un problema con el que está familiarizado.
Último consejo: intente adoptar los métodos comunes del lenguaje / plataforma que ha elegido. No intentes llevar tu estilo de codificación PHP a ninguno de los dos idiomas. Aunque al principio le parecerá más fácil y le permitirá obtener algún tipo de resultados, perderá el punto del ejercicio, que es pensar de manera diferente y más amplia sobre los problemas.
¡Buena suerte!
Si bien tiene menos cobertura de la prensa que Clojure y Scala, realmente te recomiendo que eches un vistazo a Fantom: http://fantom.org/
Es como el mejor de los dos mundos y realmente debería merecer más atención.
Si estás buscando una buena alternativa para PHP, te sugiero Python y Ruby. Si necesita un lenguaje funcional con un buen soporte para el desarrollo web, aprenda Erlang. Aquí hay algunos proyectos / marcos que te ayudarán a crear aplicaciones web altamente escalables en Erlang:
- Yaws : un servidor web Erlang especialmente adecuado para aplicaciones web de contenido dinámico. (También vea este punto de referencia de Apache vs Yaws )
- Erlyweb : un marco de desarrollo web orientado a componentes escrito en Erlang y diseñado para trabajar con Yaws.
- Erlang Web : Erlang Web es un marco de código abierto para aplicaciones basadas en protocolos HTTP, que le brinda al desarrollador un mejor control de la administración de contenido.
- Nitrogen : un marco web basado en eventos para Erlang.
También es uno de los pocos idiomas que está diseñado específicamente para crear software distribuido y tolerante a fallos.
Soy un nuevo converso a Clojure . Me está haciendo expandir mi mente pero es lo suficientemente accesible para ser divertido y productivo. Soy un cliente feliz.
Pero
PHP y Clojure viven en diferentes universos. He tenido algunas incursiones introductorias en los idiomas de PF, y algunos inicios falsos en otros Lisps antes de aceptar Clojure. Para un desarrollador menos experimentado que viene directamente de PHP, Clojure puede ser un choque cultural demasiado grande.
Como un compromiso razonable entre los dos, y un lenguaje que es lo suficientemente simple como para permitirte acercarte a FP en un gradiente en lugar de una zambullida, te recomiendo a Ruby . Ruby es moderno, limpio y elegante. En su encarnación JRuby, es incluso rápido. Aprender a Ruby y jugar con Rails es divertido e instructivo.
Sugeriría aprender idiomas que tengan marcos más allá del front-end web, como Java EE (Java EE [JSP / JSF] + Java) o .NET ( ASP.NET + C #, etc.). Eso le daría un poco más de margen de maniobra con sus opciones de carrera, y podría conectar los componentes del servidor a un front-end web con una facilidad (relativa).