2009-12-03 16 views
22

Tengo un fondo de desarrollo web pesado con PHP. Mis razones para aprender un lenguaje de programación funcional son:¿Qué aprender después de PHP? Scala o Clojure?

  1. para mejorar mis habilidades de programación. Se sugirió fuertemente que aprender un FPL ayuda. esto tiene alta prioridad porque quiero ser cada vez mejor.
  2. aprende un lenguaje de programación de propósito general para resolver tareas como scripts (sistema operativo de secuencias de comandos, manipulación de texto, etc.)
  3. para ser utilizado como una alternativa para PHP en el desarrollo web.

¿También que tiene la mejor asistencia de la comunidad, tutoriales y libros y el mejor marco de aplicación web?

Siéntase libre de sugerir otros idiomas.

Respuesta

-2

Sugeriría aprender idiomas que tengan frameworks 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 margen de maniobra un poco más con sus opciones de carrera, y sería capaz de conectar los componentes del servidor a una interfaz web con (relativa) facilidad.

+0

¿Entonces estás diciendo que no debería aprender Scala o Clojure? Estoy confundido, porque ambos cumplen tus criterios. ¿Qué tiene esto que ver con la pregunta? –

+0

Sea constructivo, los chicos pidieron una solución viable no fuz. –

+1

No tengo experiencia con Scala o Clojure, así que no puedo recomendar ninguno de esos. Sin embargo, recomiendo 2 plataformas bastante grandes que se usan en sistemas empresariales. – monksy

0

Probé Scala y encontré un poco mucho (gran cantidad de operadores que debe recordar cómo usar). Pero eso podría ser solo yo. He oído que Clojure es más funcionalmente puro y más parecido a Lisp, pero no lo ha comprobado.

F# es la versión de Microsoft de los lenguajes funcionales, es posible que desee comprobarlo. Escuché que se ha utilizado para varios proyectos en la industria.

+0

programando .NET en F #. Eso suena muy divertido. –

+3

Es, en realidad.Cuando la pregunta es sobre Scala vs Clojure, responder "F #" no es más incorrecto que responder "Python". –

+0

quiere una alternativa a PHP para la creación de scripts y desarrollo web. Dudo que tuviera en mente WMI y COM para la creación de scripts: P o el entorno .NET convuluted, por lo que dudo que encuentre mucha documentación fácil de usar. –

1

El desarrollo web depende ENTERAMENTE de: Primero, la calidad del marco web y, en segundo lugar, las herramientas para el desarrollo. No sé por qué quieres moverte 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 el desarrollo web o herramientas, sin embargo, su simplicidad/naturaleza primordial es su elegancia.

Ahora, como puritano, diría que miren a Haskell, pero eso es contraproducente: D ,. Tú mi amigo está buscando Python. No he evaluado a Ruby, pero podría tener algunas construcciones funcionales.

+1

Scala y Clojure son mucho mejores que Python en el área de compatibilidad con subprocesos múltiples, lo que puede ser una consideración en adelante ya que las CPU continúan generando más núcleos sin llegar mucho más rápido en el departamento de velocidad de reloj. –

+1

El proceso múltiple gobierna el entorno UNIX. enhebrar no es un problema. Uso la experiencia de la vida real en 32 máquinas centrales aquí: D –

+0

BTW la JVM utiliza primitivas de barra de memoria de la CPU para admitir primitivas de sincronización. Esas son contraproducentes para el rendimiento, si realmente quiere entrar en detalles: D –

24

Mi sugerencia es aprender JavaScript.

Quiero decir, realmente aprenderlo.

+2

lado del servidor javascript, eso no es muy productivo .... –

+3

no has oído hablar de Rhino, supongo ... http://ejohn.org/blog/bringing-the-browser-to-the-server/ –

+3

a good la comprensión de javascript parece funcionar bien con PHP debido a la plataforma web. también será importante para cualquier otro lenguaje web. Creo que una inmersión en javascript es un paso saludable. –

5

Saltar de PHP a Scala o Clojure va a ser un gran choque cultural. PHP está muy concentrado en hacer cosas rápidas/sucias (o en un 90% limpio con el último 10% sucio (- :), mientras que los lenguajes de programación funcionales fuerzan una cierta corrección y abstracción en su pensamiento. Antes de llegar a Scala o Clojure, van a querer algo intermedio. Si fuera yo, me

  1. elegir mi destino final como Clojure, ya que (como yo lo entiendo) se obtiene toda la biblioteca estándar de Java con Clojure, por lo que es inmediatamente más útil que algo puro como Scala

  2. Me gustaría dedicar algo de tiempo a crear algo en Java, solo para tener una idea de un lenguaje de OO fuertemente tipado.Escogí Java sobre C# (o incluso el estilo ZendFramework PHP) porque resultará útil una vez que llegue 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 nada PHP/HTML.

  3. Dedique un tiempo a ver las entrañas de jQuery, y desarrolle su propio módulo jQuery o agregue una característica principal. Esto te acostumbrará a la forma funcional de pensar, mientras la aplicas a un problema con el que estás familiarizado.

Último consejo: intente adoptar los métodos comunes de la plataforma/idioma que ha elegido. No trates de llevar tu estilo de codificación PHP a ninguno de los dos idiomas. Aunque al principio parezca más fácil y le permita obtener algún tipo de resultado, perderá el sentido del ejercicio, que es pensar de manera diferente y más amplia sobre los problemas.

¡Buena suerte!

+0

Sugeriría una trayectoria PHP -> Ruby -> Scala -> O'Caml -> Haskell, porque en mi opinión Scala es básicamente una mejor Java a menos que estés * realmente * comprometido a tratarla como un lenguaje funcional, por lo que en realidad no debería ser considerado un punto final. Puede publicar Clojure como posible punto final, pero algunas personas prefieren una diferenciación más sintáctica que la que le pueden brindar los LISP en el día a día. –

+1

No estoy de acuerdo. Dar el paso decisivo. ¿Por qué facilitarlo? El punto es desafiar y expandir tu mente, así que simplemente salta dentro y deja que el impacto de todo lo nuevo te enseñe. –

+0

Porque algunas personas (no todas las personas, y claramente usted no) solo pueden aprender algo si tiene una aplicación directa para el tipo de cosas en las que ya están trabajando. Si el OP fuera un tipo de persona que se zambulle, ya se habrían sumergido :) –

2

Ruby es probablemente el lenguaje mainstream más "funcional" que también es bueno para scripting. Python es un segundo cercano, 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 tus horizontes luego de programar PHP. Al mismo tiempo, permitirán muchas oportunidades para el aprendizaje incremental.

Ninguno de ellos usa expresiones S y ambos permiten la programación imperativa, por lo que no habrá nada que te obligue a renunciar al estilo imperativo de cold turkey.

Finalmente, el TCL muy lamentado es básicamente Scheme como lenguaje de scripting y extensión. No estoy seguro de dónde está en estos días, pero el Sistema de Comunidad ArsDigita fue escrito en TCL.

12

Esto es lo que un autodenominado defensor de Clojure tiene para decir sobre Scala. Decídase, por supuesto, pero puede encontrar su perspectiva útil.

También pueden estar interesados ​​en lo que tiene que decir acerca de PHP vs Clojure.

+0

Scala/Clojure: nivel de indirección incorporado en la JVM. Java tiene algunos frameworks y algunas herramientas, pero el nivel de indirection atornilla con eso.Un programador de PHP que quiere moverse hacia algo mejor no quiere un nivel de indirección jugando con él. –

+6

OP pregunta si debería aprender Scala o Clojure, etiqueta la pregunta con las etiquetas scala y clojure, y además específicamente dice que quiere aprender programación funcional, ¿y obtengo un voto negativo para vincular una comparación de Scala y Clojure? ¿Por qué no dejas que el programador de PHP decida lo que quiere? –

+0

Sí, creo que Vainstah rechazó a todos nosotros, LOL. –

2

Mi $ .02 es retirar Perl. Puede sonar como un geezer, pero tenga en cuenta que Perl tiene CPAN (http://cpan.org) y muchos recursos en línea muy, muy útiles.

+0

y una transición natural de php, ya que php está basado libremente en perl – warren

+3

Opinión personal, por supuesto, pero consideraría esto saltar de la sartén a la plancha. Perl es popular debido a su ubicuidad, pero en términos de aprender técnicas útiles de sonido, programación limpia Perl es un accidente de tren en su camino hacia un volcán. –

+1

@CarlSmotricz Lol, qué odioso comentario. El siguiente lenguaje debe ser práctico y poderoso para el uso diario (como dijo OP: sistema de escritura del sistema operativo, manipulaciones de texto, web). El perl es la elección más lógica. Simplemente verifique cuántas soluciones prácticas disponibles todos los días en Perl y cuántas en Clojure. En mi humilde opinión, es incomparable y el Perl es el claro ganador. (ver metacpan.org). Todo el mundo puede hacer 'clean programmig' en perl también, pero la programación limpia en sí misma no ayuda a resolver problemas cotidianos. Y para FPL, recomendar leer un libro viejo pero bueno: High Order Perl (http://hop.perl.plover.com) – jm666

9

Esa es una llamada muy difícil. Personalmente, creo que Scala es más útil como lenguaje general para desarrolladores web. Hay muchos marcos web para él, o adaptados a él. En el muy rápido & lado sucio, por ejemplo, está Play. En el pleno con excelente soporte de Comet, está Lift.

Pero ha hablado de aprender a programar en un estilo funcional. En ese sentido, no hay forma de que Scala pueda competir con Clojure. Scala se puede usar con un estilo funcional, pero se asegura de que no sea necesario. Con Clojure, por otro lado, hacer cualquier cosa menos 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ítanme decir que no creo que Clojure no sea un lenguaje de propósito general, o que no se pueda usar para el desarrollo web. Creo que Scala es más en ambos aspectos.

46

Para idiomas funcionales, aprende Scala y Clojure. Aprenderá nuevas formas de pensar de ambos. Vaya a aprender algunos Reia y Erlang mientras usted también lo hace.

En serio, cuantos más idiomas tenga, mejor será como programador independientemente del idioma que termine usando.

Rant: "¿Qué idioma debo aprender?" las preguntas se vuelven tediosas Las respuestas deben ser las mismas siempre, sin embargo, nadie da el consejo sabio correcto. En cambio, todos difunden FUD y sugieren que el lenguaje que utilizan para su trabajo diario es el que usted debe aprender. Majaderías.

+9

Sí, esta es la única respuesta correcta. Aprenda todo y elija el que más le guste. No hay inconveniente para hacerlo. –

+2

Trabajo en Java y me encanta Scala, pero solo hay dos idiomas que se deben aprender: Lisp y Haskell – GClaramunt

+2

Estoy de acuerdo con Ryan, pero no estoy de acuerdo con Brian y GClaramunt. Cada problema tiene más de una respuesta correcta, pero a veces elegir la mejor respuesta implica usar un idioma diferente. POR ESO, debe tener tantos idiomas a su alcance como sea posible. – Dolph

5

Si está buscando una buena alternativa para PHP, sugiero Python y Ruby. Si necesita un lenguaje funcional con buen soporte para el desarrollo web, aprenda Erlang. He aquí algunos proyectos/marcos que le ayudarán a crear aplicaciones web altamente escalables en Erlang:

  • Yaws - Un servidor web Erlang especialmente adecuado para webapplications dinámica en el contenido. (También vea this Apache vs Yaws benchmark)
  • 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 da 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 la construcción de software distribuido, tolerante a fallas.

7

obtener una bolsa de cemento, se endurecen y Learn You a Haskell, for Great Good!

  1. Se es puramente funcional, por lo que no puede caer fuera de la nave.
  2. Es de uso general con muchas bibliotecas (incluida una pila de aplicaciones web) y sin penalización de tiempo de inicio de máquina virtual (los lenguajes JVM no son geniales para el sistema operativo y similares, ya que debe iniciar la JVM siempre).
24

Recientemente probé Scala y Clojure, en base a 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 escuetos y limpios. Scala tiene muchos constructos geniales que uno desearía tener, incluyendo un montón de extensiones funcionales. Pero cuando llegó el momento, terminé codificando Java imprescindible en el lenguaje Scala porque la complejidad de todas esas cosas geniales me abrumaba.

Hice un poco de Lisp en la Universidad, y siempre tuve el anhelo de volver a hacerlo. Algunas cosas muy interesantes de vanguardia las hacen personas muy inteligentes 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í a Scheme, y extrañé mi "fuente infinita de bibliotecas" de Java. No pude verme escribiendo una GUI en Scheme, y tuve problemas para visualizar una aplicación web.

Luego probé Clojure y parecía que todo encajaba en su lugar. Clojure se hizo intencionalmente más amigable con los extraños: se intenta reducir los paréntesis y utilizar diferentes signos de puntuación entre paréntesis para diferentes situaciones. Tratar cosas como matrices, texto y XML como secuencias, combinado con un poderoso conjunto de funciones de secuencia, hizo que muchos problemas fueran bastante simples, al igual que el soporte para matrices y hashpaps. Es (intencionalmente) como Java funcional. El mindeset funcional tarda un poco en acostumbrarse, pero en ninguna parte lo encontré tan accesible o agradable como en Clojure. Mi código apenas necesita bucles, sin embargo, es más claro sobre dónde está el bucle/secuenciación, y es más conciso. Puedo hacer 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 casi en una obviedad, a veces mi código se ejecuta de forma segura en paralelo sin ningún esfuerzo consciente propio.

No viene de Java, esto no te parecerá muy útil, pero Clojure puede hacer cualquier cosa que pueda hacer Java, incluidos los archivos .class totalmente compatibles. Lo más importante es que puede interactuar con todas las bibliotecas de Java, y esa capacidad por sí sola hará que PHP parezca un lenguaje de juguete para ti.

2

Soy un nuevo convertido a Clojure. Me está haciendo ampliar mi mente, pero es lo suficientemente accesible como para ser divertido y productivo. Soy un cliente feliz

Pero

PHP y Clojure viven en universos diferentes. He tenido algunas introducciones introductorias en lenguajes FP, y algunos inicios falsos en otros Lisps antes de abrazar Clojure. Para un desarrollador menos experimentado que viene directamente de PHP, Clojure podría ser un choque cultural demasiado grande.

Como un compromiso razonable entre los dos, y un lenguaje que es scripty suficiente para que se acerque a FP en un gradiente en lugar de una caída, lo recomiendo Rubí. Ruby es moderno, limpio y elegante. En su encarnación JRuby, incluso es rápido. Aprender Ruby y jugar con Rails es divertido e instructivo.

3

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. Sugeriría comenzar desde Haskell para sumergirse rápidamente en FP. Aprenderá cómo funcionan los siguientes conceptos de trabajo de FP (que no solo son compatibles, sino que se aplican y son omnipresentes en Haskell): 1) potente sistema de tipo estático con tipo de inferencia 2) evaluación lenta 3) cómputo libre de efectos secundarios

Después de PHP "pragmático" de tipo dinámico y Haskell "académico" funcional puro, tendrá una idea bastante completa del panorama de los lenguajes de programación.

1

Puede que no parezca tan elegante, pero recomiendo encarecidamente 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, profundicé en JavaScript e hice algunas cosas geniales con él. Alguien que conozco desarrolló todo un DBMS ligero temporal del lado del cliente. Solo eche un vistazo a Ext.js lo que hacen con JavaScript. Está muy subestimado, pero no se lo merece. Le sugiero que busque en google para "Douglas Crockford Video". En Yahoo ha creado varias presentaciones excelentes sobre JavaScript, también sugiero que obtenga el libro "Javascript - The Good Parts" de Douglas Crockford, y "JavaScript - The Definitive Guide". Los mejores libros de JavaScript disponibles. Y te sorprenderá lo que es posible y lo hermoso que es en realidad. De hecho, puedes hacer AI con él, tiene Lambda, ¡en realidad no hay nada realmente "más genial" que eso! Qué pena que solo se use para secuencias de comandos del lado del cliente. Pocas personas saben que JavaScript también se puede usar para programación en el servidor, pero eso es muy raro/no está bien documentado.

Y gracias a Adobe Air puede 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. Creo que Beeing the Guru es esencial para el éxito. Algunos amigos míos solo hacen una cosa: Beeing the Guru. 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-all-but-only-just-5% -in-this-topic en solo un cuarto del tiempo.

Así que también sugiero: Escribir un libro PHP de 600 páginas antes de Olvidas tu conocimiento de PHP mientras haces algo totalmente diferente.

I olvidé casi todo lo que sabía sobre PHP y JavaScript, pero en esos primeros días definitivamente era uno de los tipos expertos que mostraban a los demás muchas cosas. Ahora es un dolor que tengo que pedir tantos conceptos básicos para recordarlos en mi pequeño cerebro. Al escribir su libro, recordará su experiencia PHP muy rápido, incluso después de unos años de hacer algo diferente, porque es su libro, que se adapta 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.

4

A pesar de que recibe menos cobertura de la prensa de Clojure y Scala, realmente te recomiendo echar un vistazo a Fantom: http://fantom.org/

Es como el mejor de los dos mundos y realmente debería merecer más atención.

Cuestiones relacionadas