¿Debo aprender Scala o PHP?

Editar: Tenga en cuenta que esta respuesta fue escrita hace casi dos años. PHP está en un estado un poco mejor ahora. Todavía no me gusta, pero al menos ya no es la elección absolutamente terrible en el momento en que se escribió esta respuesta.


Respuesta corta: aprende cualquier cosa menos PHP. Te quedarás atrapado haciendo personalizaciones de WordPress / Magento para compañías baratas, mientras que otros desarrolladores crearán cosas como Quora o Square, usando otras tecnologías, porque no se han detenido en los últimos 7 años.

Respuesta más larga:

La premisa de esta pregunta (PHP es impresionante para el desarrollo web) es incorrecta. PHP fue increíble para el desarrollo web en 2003-2005, cuando Facebook, WordPress, Digg, Wikipedia comenzaron con él.

Desde entonces, PHP, desafortunadamente, no ha avanzado como lenguaje. PHP NO es impresionante ahora. Es 2005, increíble.

De http://tmont.com/blargh/2010/7/p…

PHP se estanca
[…]
en octubre de 2008, 2.3 millones de personas usaron PHP 4 en su sitio web y 1.9 millones de personas usaron PHP 5 en su sitio web. En ese momento, PHP 5 había sido estable durante 4 años y PHP 4 había sido estable durante 8 años. Su uso en la producción es bastante parejo. PHP 5 agregó muchas características, como la programación orientada a objetos . Y, sin embargo, le lleva diez años (y seguimos contando) a PEAR salirse del culo y convertir su código a PHP 5.

Esto es lo que hará que PHP siempre esté ligeramente detrás de la curva tecnológicamente: la tasa de actualización de ritmo de caracol de sus usuarios. Eventualmente, su única fortaleza, la barrera de entrada extremadamente baja, se anulará a medida que otros idiomas descubran cómo ser más accesibles para las masas.

Como PHP está parado (medido en velocidad de Internet), otros frameworks están atrapando a los desarrolladores de PHP. Compare 2005 a ahora:
De: http://www.tiobe.com/index.php/p…

Además: ¿Cuáles son los horrores de PHP?

Aprende Scala. O Python O a Ruby. O Javascript (tal vez Node.js). Cualquier cosa menos PHP.

En esa generalidad, podría haber preguntado: ¿debería aprender inglés o chino? 🙂

¿Estás buscando construir algo no trivial en el menor tiempo posible o quieres disfrutar del proceso de aprender un hermoso idioma?

Después de leer todas las respuestas “negativas” sobre PHP, me gustaría agregar una respuesta positiva 🙂 Obviamente, se aplica específicamente a mi situación y de ninguna manera tiendo a generalizarla.

Se me ocurrió una experiencia de programación anterior en Perl, y necesitaba un lenguaje “convencional” que pueda usar para las transferencias de bases de datos, que sería compatible con la mayoría de los proveedores de la nube, por lo que tengo la mayor flexibilidad para elegirlos. Necesitaba lograr el resultado en el menor tiempo posible, que es tener un código compacto, de alta calidad y mantenible, cuyo propósito es descargar datos de terceros, procesarlos de manera personalizable y cargarlos en el backend que estoy usando ( Analizar gramaticalmente).

Tenga en cuenta que, debido a la forma en que se construye Parse, y al hecho de que mi aplicación (Búsqueda detallada de hoteles para viajeros ocupados) es principalmente Front End, no necesito ningún código del lado del servidor, por lo que no fue una consideración para elegir el idioma .

Con ese objetivo muy específico en mente, tuve que tomar una decisión. Los lenguajes que se consideraron fueron PHP, Python, Ruby y NodeJS. Haciendo la mayor parte del trabajo en JavaScript, estaba mirando seriamente a NodeJS e incluso comencé a escribir algo de código con él. Sin embargo, tuve que abandonar Nodo por varias razones:

(1) El informe de errores en el nodo es realmente difícil de entender y depurar;
(2) Por alguna razón, Node no se ejecutó en mi antiguo Mac OS 10.5;
(3) Me encontré con un problema molesto de que Node no me permitía asignar la memoria grande que necesitaba, esto parecía ser un problema grave en Stack Overflow sin una solución que funcionara;
(4) La naturaleza asíncrona de Node es un gran cambio (de Perl) al que acostumbrarse.

Por otro lado, PHP es:

(1) El más fácil para comenzar, especialmente después de Perl;
(2) Se ejecuta en cualquier sistema operativo antiguo fuera de la caja;
(3) Ampliamente compatible con la mayoría de los proveedores de la nube;
(4) Tiene una gran comunidad para obtener ayuda inmediata (más de 600 mil preguntas sobre Stack Overflow). Específicamente, el problema de memoria anterior se resolvió con una sola declinación 🙂
(5) Cualquier problema que enfrenté, encontré muchas referencias para leer u obtuve ayuda rápida;
(6) Tiene un conjunto de pruebas de unidad muy simple y eficiente (más simple);
(7) Tiene un amplio soporte para OOP con incluso algunos complementos excelentes, como variables privadas / protegidas o valores predeterminados de argumentos de funciones, que faltan, por ejemplo, en JS.

Me parece divertido leer todas las quejas sobre PHP, pero ninguna de ellas se sintió lo suficientemente sustancial como para lamentar mi elección.

Al comparar nuevos idiomas, una métrica interesante y útil que encontré es revisar las preguntas sin respuesta en Stackoverflow. Por ejemplo, mirando a Scala, veo en la parte superior esta pregunta con 53 (!) Votos:
Evitando pérdidas de memoria con Scalaz 7 zipWithIndex / group enumeratees,
la pregunta tiene casi 2 años y parece seria.
¡Varias preguntas más con más de 10 votos, nuevamente, sin respuestas! Lo que esto me dice es que, si tuviera un problema yo mismo, podría quedarme solo sin ayuda, no tan bueno.

En contraste, para PHP, la pregunta principal sin respuesta tiene 12 votos, tiene 2 meses y tiene una “url bonita” en su título, lo que me hace sonreír: trabajar con urls bonitas en apache y fastcgi después de la instalación de hhvm. Además, más de 50 nuevas preguntas cada hora, no muestran exactamente que el idioma está muerto. 🙂

Así que esta es mi lista de hechos concretos para defender PHP para el propósito específico que tengo. Sin embargo, una vez dicho esto, personalmente veo metas y habilidades más importantes para lograr un buen programador que aprender un idioma A o B o C. Escribir código modular, reutilizable, de alta calidad, legible y mantenible son algunos de los que importan. Construir proyectos reales que funcionen, también importa. El lenguaje es solo uno de los medios para lograr el objetivo.