Resulta que realmente amo Javascript, pero a menudo me han visto raro. Javascript se ejecutará en más computadoras y dispositivos de computadora (teléfonos inteligentes, SmartTV, etc.) que cualquier otra tecnología o plataforma en el mundo, sin modificaciones. Es decir, podría escribir algo en C ++ y quizás golpear todas las computadoras con Windows … después de una instalación … y quizás algunas actualizaciones de Windows. O tal vez escriba C ++ multiplataforma y golpee más computadoras pero no teléfonos inteligentes. O tal vez escriba algo de Java que se ejecutará en máquinas que tengan Java instalado y habilitado, que es menos de lo que podría esperar … y tiene que ser la JVM correcta o no funcionará … y así sucesivamente. Al final, Javascript los supera a todos. Durante un tiempo, Flash estuvo por delante de JS aquí, pero como ya sabrán, Flash ahora también está en declive. iOS (iPhone y iPad) lo prohíbe, IE10 lo deshabilita sin la aprobación de la aplicación por parte de Microsoft, y algunos teléfonos Android no lo ejecutan. Todos estos dispositivos ejecutan Javascript sin instalar nada adicional.
Con Javascript, puede escribir software sorprendentemente complejo y terminar con algo que se ejecuta en cualquier navegador hoy en día: más del 99.9% de cobertura. Si te gusta la codificación porque quieres que las personas puedan usar tu trabajo, es una cobertura increíble y algo a lo que ningún otro lenguaje o tecnología se puede acercar. En el caso de Chrome, incluso puede escribir Extensiones de navegador en el mismo Javascript y crear aplicaciones basadas en Chrome o hacks de sitios. Y, por supuesto, con Node.js, ASP / Jscript y otros enfoques de Javascript del lado del servidor, incluso puede escribir el lado del servidor de su aplicación web en … más Javascript.
A las personas que me ven como extraño por amar Javascript, no les gusta porque JS en sí es extraño, y tienen toda la razón. Es un lenguaje extraño con tipos detrás de escena pero sin tipos explícitos, tipeo de patos, un espacio de nombres global desordenado, cobertura limitada de la biblioteca, trucos raros para usarlo de manera eficiente, y para al menos codificadores novatos, sin métodos o propiedades privadas.
- ¿Cuál es la pila de tecnología utilizada en yourstory.com?
- ¿Dónde busco un codificador con un buen conocimiento sobre HTML5 y PHP?
- En qué campo, es decir, back-end (Node.js, etc.) o front-end (AngularJS, etc.), ¿los desarrolladores de JavaScript tienen salarios atractivos?
- ¿Cómo puedo configurar mi sitio web después de comprar el dominio y el alojamiento? No puedo instalar el proveedor de alojamiento de WordPress nextraone?
- Servidores web: ¿Cómo almacenan las imágenes los sitios de manera eficiente con el equilibrio correcto entre buena calidad y tamaño de almacenamiento requerido? ¿En qué formato y con qué otras prácticas (compresión, base de datos vs sistema de archivos)?
Admito que algunos de estos son problemas reales, y hay varios movimientos en marcha para abordarlos, algunos de los cuales ya están disponibles en el lado del servidor. Pero algunas de estas desventajas percibidas son, en mi opinión, grandes ventajas, creo que el mundo de la programación está atrasado. En particular, en mi opinión, casi nada debería ser privado, y sin embargo, cada curso CS101 comienza enseñando a los niños algo de Java donde cada variable que declaran es privada. Consideremos a dónde lleva eso.
A menudo, las innovaciones más convincentes en software las escriben codificadores novatos que intentan resolver un problema. Muchas de las mejores herramientas no están escritas por alguien que aprende un idioma durante 10 años y luego se encuentra con el problema perfecto para resolver con sus habilidades. En cambio, alguien que apenas ha codificado lidia con un problema molesto durante 10 años, se harta y aprende el idioma suficiente para ir y arreglar con lo que está luchando. El resultado es que gran parte del código más útil en el mundo de código abierto simplemente no está bien escrito, pero debes admitir que es muy útil, incluso si está estructurado de manera ofensiva.
A menudo, este software increíblemente útil tiene errores. Me encontré con un error de este tipo en una biblioteca de fechas ExtJS en un proyecto, donde ciertas fechas de un formato específico se analizaron incorrectamente. Todo lo demás era correcto al respecto, pero este caso de borde estrecho estaba mal y el cliente se había dado cuenta: no podíamos dejar el error allí. El error estaba en una sola línea de código enterrada en aproximadamente 1000 líneas de clases y funciones. Reescribir todas las funciones de manejo de fechas de ExtJS sería un movimiento doblemente malo: si se publicaran actualizaciones, tendríamos que separar las actualizaciones de la parte de la fecha o perder nuestras correcciones, dejando la aplicación en el pasado. Y perderíamos mucho tiempo y esfuerzo (para el cliente: dinero) arreglando un error de fecha muy limitado.
Javascript al rescate. Debido a que las propiedades y los métodos en este código de formato de fecha ExtJS no eran privados (porque los codificadores que lo escribieron eran novatos resolviendo un problema, no expertos en JS), pude usar parches de mono para sobrescribir solo una propiedad y método dentro de la fecha formatear objetos que estaban en uso en nuestra aplicación, sin modificar la fuente ExtJS. Los parches futuros para ExtJS se aplicarían sin complicaciones, y si el error se corrigiera alguna vez, podríamos eliminar el hack.
Comparemos eso con Java, C ++ o C #, que la mayoría de los programadores que ven JS como extraño preferirían. Primero, probablemente tenga un archivo DLL o .class compilado que necesito descompilar, no es fácil trabajar con él. Si tengo suerte, tengo acceso a la fuente o puedo usar una herramienta Reflection para volcar dicha fuente. Pero incluso entonces, tengo que modificar esa fuente. Java no tiene tipo de pato, y los codificadores de Java tienen la actitud colectiva de que si declara una variable, debe ser privada, a menos que haya una buena razón para que se declare lo contrario. C ++ y C # tienen limitaciones técnicas y culturales similares. Si al menos lo declararan protegido, podría haber subclasificado la clase problemática y haber solucionado el método en la subclase. Pero, en cambio, generalmente me manguito. La única solución para este error sería reemplazar toda la biblioteca, ya sea reescribiendo todo yo mismo o modificando la fuente y bloqueando la aplicación en el pasado.
Entonces, Javascript es increíblemente útil, y creo que tiene algunas ventajas interesantes sobre otros idiomas que extraño cuando los uso. Si fuera por mí, mis actualizaciones adoptarían una sintaxis de tipo explícito opcional, acortarían la sintaxis para declarar una función (“sintaxis lambda”) y adoptarían una sintaxis / protocolo explícito “requiere / usa”. La mayoría de los otros cambios generales propuestos por aquellos con un fondo de Java … probablemente lo prescindiría.
Entonces, sí, recomendaría aprender Javascript, creo que es un excelente lenguaje y un conjunto de plataformas. Encantado de responder preguntas más específicas.