Java cumple hoy 20 años. El 23 de Mayo de 1995 vió la luz de forma pública, durante la conferencia SunWorld ¡Qué tiempos! La compañía Sun Microsystems presentó el lenguaje en el que había estado trabajando durante más de cinco años de forma interna el equipo de James Gosling (el padre de la criatura). Un auténtico lenguaje moderno concebido para funcionar en cualquier dispositivo, esa fue la idea.
|
etiquetas: java
- 20 formas diferentes de encapsular código, extender funcionalidad, crear constructores, ... para ser productivo quiero que haya una clara.
- Falta de estandarización de cómo definir módulos y cargar otros módulos, y más entre servidor y cliente.
- Tipado dinámico. Es muy gracioso para hacer cosas pequeñas, pero para que sea seguro requiere una cantidad de test unitarios que a veces pierde el sentido. Por otro lado, la flexibilidad y falta de tipado que tiene hace que hacer mocks sea muy sencillo.
- No estandarización de cosas tan básicas como Array.prototype.forEach, o String.prototype.trim
- El infierno del scope, que es muy gracioso para hackear el lenguaje, pero es un sinsentido mayúsculo para conseguir hacer algo funcional.
Y lo peor... que una de cada 10 personas que dice saber Javascript sólo sabe copiar y pegar bloques de jQuery mal estructurado.
Cada día me gusta más Golang. Sencillo, claro, una forma de hacer cosas. Muy cercano a código máquina con muy poca magia por debajo. Con lo que uno espera encontrar en una librería estandar en 2015: http, sync de coroutines, listas, mapas, unit test, compresión de ficheros, ...
En lo que se veía venir: En una puta mentira.
Java sigue siendo una maravilla en cuanto a productividad. Te permite concentrarte en el problema en lugar de bregar con el lenguaje.
- 20 formas diferentes de encapsular código, extender funcionalidad, crear constructores, ... para ser productivo quiero que haya una clara.
- Falta de estandarización de cómo definir módulos y cargar otros módulos, y más entre servidor y cliente.
- Tipado dinámico. Es muy gracioso para hacer cosas pequeñas, pero para que sea seguro requiere una cantidad de test unitarios que a veces pierde el sentido. Por otro lado, la flexibilidad y falta de tipado que tiene hace que hacer mocks sea muy sencillo.
- No estandarización de cosas tan básicas como Array.prototype.forEach, o String.prototype.trim
- El infierno del scope, que es muy gracioso para hackear el lenguaje, pero es un sinsentido mayúsculo para conseguir hacer algo funcional.
Y lo peor... que una de cada 10 personas que dice saber Javascript sólo sabe copiar y pegar bloques de jQuery mal estructurado.
Cada día me gusta más Golang. Sencillo, claro, una forma de hacer cosas. Muy cercano a código máquina con muy poca magia por debajo. Con lo que uno espera encontrar en una librería estandar en 2015: http, sync de coroutines, listas, mapas, unit test, compresión de ficheros, ...
No sé yo si llegó a tanto ¿eh?
Golang es un lenguaje que pinta muy bien, su paradigma de interfaces es genial, aunque no entiendo muy bien el concepto de no tener excepciones, a mi parecer es más una excusa que una característica planeada. Además, el hecho de que pueda ser interpretado o compilado a nativo es algo que esperé mucho de lenguajes como Java o Python, y nunca se dio. Pero, por desgracia y como todo lo de Google, tiene una etapa experimental excesivamente larga, tanto que ya muchos hemos perdido la esperanza de verlo pronto adoptado por grandes proyectos. Yo por ejemplo, esperaré a que tenga GUIs decentes.
Para hacer chorradas bien, pero para hacer cosas medianamente grandes es demasiado inconsistente.
Java permite hacer código mantenible y fiable.
Hay excepciones, pero sólo hay un tipo. Y visto todo lo que se abusa de las cientos de excepciones y la jerarquía de las mismas en Java, ... me parece bunea opción. En mi actual empresa hay proyectos en los que se está haciendo todo en Golang.
Un saludo
plus.google.com/+DouglasCrockfordEsq/posts/FeZkpuHKPWN
Yo es que estoy enamorado de JS desde hace un tiempo, y antes le tenia mucho odio irracional, y todo porque no entendía la forma de trabajar con el correctamente, no me entraba en la cabeza las ventajas que tiene el tipado dinámico y como javascript lo explota.
Entre la 2 y la 3 sí hay bastantes, tanto que tu código en 2 puede no ser compatible en la 3, pero no hay mucho problema con esto ya que siempre puedes instalar una u otra versión del runtime (en Linux vienen las dos preinstaladas), o si compilas a .exe te empaqueta la versión adecuada.
No recomendaría pasarse de la 2 a la 3 a menos que sea un proyecto pequeño o estés preparado a hacer cambios en buena parte de tu código, aunque las ventajas de la 3 bien puede valer la pena, como el uso de Unicode por defecto.
Golang es como el C++ del siglo 21, pero bien hecho.
GTK+
Pq demosnios alguien querria hacer eso cuando hay alternativas???
Basicamente lo primero que dice #8....
Ademas es bastante eficiente, por mucho que digan...
Eso si, como existe J2EE en la que le ponen 50 millones de capas a cada aplicacion hay gente que piensa que es lento cundo no lo es.
Tiene 20 y tantos años y aun no existe un GUI decente para ella
Lo cual da una imagen de lo usable que es para hacer cosas complejas....
Espero con paciencia el día cuando la gente diferencie entre "sobretodo" y "sobre todo".
Edit: y no olvidemos qt, que está de aniversario.
Hay muchos lenguajes porque hay muchas necesidades.
La verdad es que Java, en la experiencia que llevamos acumulada de varios años, diremos que como mínimo es frustrante. Estoy hablando de aplicaciones J2EE, corriendo en weblogic, coherence, etcétera, vamos un stack clásico en aplicaciones empresariales, el resultado son constantes problemas de rendimiento, problemas de trazabilidad, y sobretodo muy poca productividad. No puedo decir que nuestra experiencia sea un criterio válida para juzgar una tecnología pero la realidad es que tardamos 1/3 en hacer las mismas aplicaciones en C# y con muchos menos problemas. Lo dicho igual el problema es nuestro, o tenemos mas experiencia en c# pero la realidad es que esta diferencia de productividad no deja de llamarme la atención, incluso he hablado con compañeros que pasaron de c# a Java, y prácticamente todo comparten este punto...
Por otro lado conozco bien un caso de intento de migración de aplicaciones c# a phyton, y en este caso parece ser que la experiencia esta siendo muy grata en términos de productividad, escalabilidad de las soluciones, y TCO.
Lo dicho, es una opinión sin mas valor que la experiencia propia.
Aunque sí es cierto que, con autodisciplina y disciplina de equipo en hacer las cosas siempre de la misma manera, con un linter que te pare las builds si algo no está como debería, y con paciencia con los nuevos desarrolladores que entran al equipo, y con una buena dosis de unit tests, y un sistema decente de definir módulos (requireJS estricto, por ejemplo) se puede escribir JS sin perder la cabeza... Yo lo hago todos los santos días.
El problema es que los lenguajes decentes vienen con todo eso de serie y te hacen difícil no seguirlo. Javascript es un chiste, para que digan de PHP...
oops no te ví #34 , busqué en el hilo "write"
Y te aseguro que sé de que hablo.
Eso no quita que sea un lenguaje muy veloz y que se está trabajando mucho, y con muchísima demanda y muy bien pagado (sobre todo la gente de angular, en Madrid se está pagando hasta 46K a gente con 1 año de experiencia en angular).
Ahora mismo es un lenguaje "trending topic", echa un ojo por ejemplo al estado de las ofertas de trabajo de UK:
www.itjobswatch.co.uk/jobs/uk/angularjs.do
En enero del 2013 ninguna oferta de angular. En enero del 2014 el 2% de las ofertas incluían angular en sus peticiones. A día de hoy, casi el 10%, y la curva es ascendente, con salario medio de 63.291€ en UK, si hablamos de Londres un salario medio de 73.839€, por un lenguaje por el cual piden un año de experiencia normalmente.
www.destroyallsoftware.com/talks/wat
No sé... creo que es bueno intentar no dejarse llevar por ciertas tendencias que no son si no modas. En cambio, TypeScript me parece un buen conjunto de decisiones para llevar adelante a JS.
iSaludos!
Quizá la explicación esté en que la aplicaciones de escritorio nunca fueron el campo de desarrollo principal de Java, que siempre estuvo en el desarrollo web y ahora en el desarrollo para móviles con el "java" de Android
Por otro lado para mi gusto python > java
A ver para cuándo una renovación real.
Despues de meter 50 capas no se puede esperar que nada funcione fluidamente...
#32 No, no es que haya gente que piense que es lento. La ejecución en Java ES lenta, lenta y pesada en cuanto a recursos además, porque requiere la capa adicional de la máquina virtual. El equipo ejecuta la máquina virtual que es la que interpreta el código. No es lo que diga la gente, es que haces un programa, incluso uno sencillo, en Java y en C++ por ejemplo, haces medidas de tiempos y rendimiento, y te das cuenta.
Ejemplo:
Django 1.4 no es compatible con django 1.5.... Entre otras cosas han cambiado LOS NOMBRES DE LOS PAQUETES.... por ${DEITY}....
Y java no es multiplataforma? obviamente una aplicacion para escritorio no te va a funcionar en un android pero mientras haya una jvm si. A que nos referimos al decir que se quedo en un sueño a que no puedes ejecutarlo en tu frigorifico?
benchmarksgame.alioth.debian.org/u64q/compare.php?lang=gpp&lang2=j
La ejecucion de java no es pesada: funciona en lavadoras y hasta en nokias 3210.
Las mierdas que se hacen en java son pesadas y lentas, pero el lenguaje en si NO.
#67 ¿tu crees que no es mas pesada una aplicacion que pasa por la maquina virtual de java que una que no lo hace? Yo no creo que sea muy apreciable en estos tiempos pero la verdad hace no tanto o en equipos viejos si que noto un tipo de aplicacion sencilla en java frente a una en c. Que puede ser que por dentro la de java este fatal, pero yo veo como la interfaz grafica por ejemplo es algo que se nota mucho mas lenta en la mayoria de programas escritos en java y en pcs un poco viejos, sera jswing o las librerias que usen o sera que pasan por una mv.
A cuenta de que se cambia el nombre de los paquetes de una subversion a otra... acaso es tan importante eso como para que TODO lo que hay escrito en ese framework deje de ser actualizable?
Hablando claro, alguien puede hacer una aplicación en JS y mandarle un enlace a su madre para que lo ejecute, en java, no.
Para temas "empresariales" me parece estupendísisimo.
#8 Confundes Java con JavaScript, son dos conceptos muy diferentes, cada uno vale para lo que vale, que eso aquí ya se ha discutido mucho, y por tanto, no esperes hacer lo mismo y de la misma forma en un programa y en otro. Es una manía que cuando venimos de un lenguaje queremos que el siguiente se comporte lo mismo que el anterior.
#14 Como se entere Brendan Eich de lo que has dicho:
es.wikipedia.org/wiki/Brendan_Eich
Yo por mi parte uso flask.
El resto es problema de librerias y de como esta programado, de abandono de las aplicaciones de escritorio y sobre todo de capas y capas sobre capas....
PYTHON 3 NO ES COMPATIBLE CON PYTHON 2
Te entiendo, si, generlemente coges una version para desarrollar y punto... si cambias de version puedes tener problemas....
Pero es que con python olvidate! no vas a poder cambiar nada!!! no es que puedas tener problemas es que directamente olvidalo
Por lo demas, por el lenguaje en si, me encanta python.
Es algo tan facil de entender como el mecanismo de un chupete
Vale que he mirado todo muy rápido y sobre todo la tabla de benchmarks, pero sin leer mucho la otra tabla decía en qué proporción de tiempo respecto a Java se ejecutaba algo equivalente en C++ y he visto muchas fracciones...
Que no sé, que igual lo he mirado todo mal y lo he entendido todo mal...
PD: Por otra parte, sí, muchos sistemas empotrados como lavadoras y demás ejecutan Java... Pero eso es irrelevante si estamos hablando de ejecución en PCs por dos motivos: Uno, porque los programas que ejecutan en sistemas empotrados son enormemente menos complejos. Y dos, porque esos mismos sistemas empotrados ejecutan Java sobre ARM, que tiene la genial característica de poder ejecutar Java bytecode (lo que se genera al compilar Java, que luego ejecuta la máquina virtual) de forma nativa. Jazelle, se llama, para quien lo quiera mirar.
- 20 formas diferentes de encapsular código, extender funcionalidad, crear constructores, ... para ser productivo quiero que haya una clara.
Es un lenguaje multiparadigma con la libertad y flexibilidad que eso supone. Ideal para programadores muy versados ya en muchos lenguajes diferentes y que quieren lo mejor de cada uno. Si sólo quieres aprender una forma de hacer las cosas y burocratizar el código, desde luego ECMAScript no es tu lenguaje.
- Falta de estandarización de cómo definir módulos y cargar otros módulos, y más entre servidor y cliente.
Hay muchos frameworks y entornos y cada uno sigue sus propias normas y tiene sus propios módulos y extensiones, sólo tienes que elegir el que más se adecue a tu forma de trabajar. Personalmente espero que algo así no se estandarice nunca; porque una sola forma no puede ser adecuada a todas las situaciones.
- Tipado dinámico. Es muy gracioso para hacer cosas pequeñas, pero para que sea seguro requiere una cantidad de test unitarios que a veces pierde el sentido. Por otro lado, la flexibilidad y falta de tipado que tiene hace que hacer mocks sea muy sencillo.
Como todo, esto tiene sus ventajas y desventajas. Puedes hacer mucho más en menos líneas y con un poco de cuidado no habrá riesgos. En cualquier caso, entre muchas otras cosas, es una consecuencia de poder expandir clases y objetos en tiempo de ejecución; un precio pequeño para una feature tan grande.
- No estandarización de cosas tan básicas como Array.prototype.forEach, o String.prototype.trim
Mira ECMAScript 6.
- El infierno del scope, que es muy gracioso para hackear el lenguaje, pero es un sinsentido mayúsculo para conseguir hacer algo funcional.
¿Clausuras? ¿Cálculo lambda? Tiene muchísima gracia que utilices el término "algo funcional" quejándote de las clausuras es.wikipedia.org/wiki/Clausura_(informática) ¿te suena la programación funcional? es.wikipedia.org/wiki/Programación_funcional
Y lo peor... que una de cada 10 personas que dice saber Javascript sólo sabe copiar y pegar bloques de jQuery mal estructurado.
1 de cada 10? En realidad 99 de cada 100. Y ese es el mayor lastre del lenguaje, la gente que se cree que aprender un lenguaje es conocer su sintaxis. Y en muchos casos ni eso...
Es un lenguaje en el que puedes hacer verdadera magia en muy poco tiempo, y si eres cuidadoso será tan robusto como tu quieras. Por supuesto siempre habrá proyectos para los que no sea adecuado, como todo... es cuestión de estudiar qué necesitas.
Un ejemplo, > 2 + "2"
Por cierto, sí que ha tenido gracia lo de algo funcional. Esas funciones ya están en ECMA 5, ... A lo que voy es que hay lenguajes que implementan todas estas funcionalidades, pero con una ruta clara, estándar, ... Creo que la frase que lo resume es "Javascript no tiene una forma idiomática de hacer las cosas". Y que esto no exista en cosas tan del día a día como cargar módulos, definir parámetros opcionales en funciones, etc... me hierve la sangre. Y ya, ECMA 6 estará muy bien, pero sus características se podrán empezar a usar de verdad en un año en entornos muy específicos: apps tipo PhoneGap o NodeWebkit, servidor con io.js o node.js, o extensiones de Chrome... que no es poco, pero me parece que tendremos que seguir teniendo cuidado durante muchos años.
Salud
No querrías decir algo como: 5 > 2 +"2" //false
La pregunta es, deberiamos poder sumar un entero con un caracter ? Sin mas ? Como si tal cosa oye. Este tipo de detalles puede inducir a un porronazo de errores segun quien escriba el codigo.
A mí como programador me facilita bastante la vida, frente a otros lenguajes más modernos, más sexys y con más hype que a la hora de desarrollar algo serio y crítico o eres una super estrella de la programación de esos a los que acude Silicon Valley a su puerta o más vale que te prepares para unos cuantos palos.
Por tanto aludiendo lo que has dicho:
- Falta de estandarización de cómo definir módulos y cargar otros módulos, y más entre servidor y cliente.
JavaScript NO fue creado para trabajar al lado del servidor ( se han creado Node.js, Jaxer o RingoJS para trabajar de manera sícrona, callbacks etc.)
Y acerca de los módulos:
// Module definition
MyLibrary = (function () {
var p1, p2;
function aPrivateMethod() {
}
return {
publicMethod: function () {
},
anotherPublicMethod () {
}
}
}());
- Tipado dinámico. Es muy gracioso para hacer cosas pequeñas, pero para que sea seguro requiere una cantidad de test unitarios que a veces pierde el sentido. Por otro lado, la flexibilidad y falta de tipado que tiene hace que hacer mocks sea muy sencillo.
Te falto terminar la frase. JavaScript tiene un tipado dinámico blando o débil.
Pero para los puritanos:
var foo = new Boolean( ‘true’ ); ...
- No estandarización de cosas tan básicas como Array.prototype.forEach, o String.prototype.trim
Intenta con esto:
-Array.prototype.forEach.call
-Array.prototype.forEach.apply
-Array.prototype.forEach = funtion(){ //aquí mi código}
Y lo mismo para trim.
- El infierno del scope, que es muy gracioso para hackear el lenguaje, pero es un sinsentido mayúsculo para conseguir hacer algo funcional.
Aqui un par de sugerencias para tu infierno:
var person = function () {
var name = "Robert";
return {
getName : function () {
return name;
},
setName : function (newName) {
name = newName;
}
};
}();
o esta:
(function () {
var dog = "La vida es simple.";
alert(dog);
})();
Tu te crees que si el panorama es como lo pintas, las grandes multinacionales de internet no ya lo habrían cambiado. Evidentemente, todos los lenguajes tienes sus pro y sus contras pero sin eso, perderían su gracia.
Algunas referencias: Gordon Dickens Why Java Developers Hate JavaScript, Dean Edwards o john resig entre otros
#76
Js es como el inglés todo el mundo dice que lo habla pero lo habla mal.
A mi las colecciones de java (pilas, colas,listas arrays) y si elección, aunque entiendo su utilidad en el rendimiento y análisis, me parece un coñazo.
Me recuerda este debate a cuando en mi trabajo la gente pedía uniforme "para no pensar que ponerse".
Js te da la libertad para que expreses tu programa si no quieres pensar hazlo siempre igual.
Bueno esa es mi opinión, un salido a todos
El problema es que han dejado de distribuir los binarios WTF!
No parece la mejor forma de promocionar una tecnología
gluonhq.com/products/downloads/
Lo que pasa con Java es que, como dice #32, te pones a ver código de proyectos J2EE, ves la inmensa bola de mierda que son, capa sobre capa, y te echa para atrás. Pero afortunadamente ahora mismo hay alternativas mucho más ligeras, sobre todo para desarrollos web.
#9 Es que no se trata de eso. Se trata de que el lenguaje ayude al programador, no que exija atención a detalles estúpidos que fomentan los errores rutinarios, a eso se refería #8 en parte. Ejemplos, a cascoporro: problemas de tipos, gestión manual errónea de la memoria, índices fuera de rango, etc. Ejemplo de lenguaje que ayuda al programador, y que enlaza con lo que decía en el primer párrafo: Scala.
Ojo, me gusta javascript porque se puede trabajar con un paradigma funcional con él y eso le da una potencia enorme, siendo el lenguaje de facto para navegadores. Pero tiene lagunas, y si surgen alternativas como TypeScript bienvenidas sean.
Puede que esté algo sesgado en este tema porque trabajo programando en Scala, pero es una gozada que el compilador trabaje para ti, y detectar muchísimos errores comunes estáticamente, y no en tests, o peor aún, en producción.