Esta pregunta puede parecerle obvia a muchos, pero todavía hay cantidad de gente que no lo tiene claro...
Dado que comparten una palabra al principio de su nombre, muchas personas piensan que Java y JavaScript están relacionados, o que JavaScript es un subconjunto de Java y cosas parecidas... Nada más lejos de la realidad.
Java nació en el año 1991 en la empresa Sun Microsystems, de la mano de James Gosling. Su objetivo inicial era crear aplicaciones para receptores de televisión y dispositivos embebidos, aunque al final haya terminado funcionando en casi todas partes. Inicialmente iba a llamarse Oak, y luego Green, pero finalmente el nombre elegido es el que todos conocemos. La Wikipedia tiene información muy interesante sobre su historia y su nombre que te recomiendo que te leas.
JavaScript es un lenguaje de programación posterior, creado a mediados de los años ‘90 por Brendan Eich, de la empresa Netscape. Su objetivo era dotar de interactividad a las páginas web visualizadas con su navegador de Internet, Netscape Navigator, el líder del mercado por aquella época. Su nombre en código durante el desarrollo del lenguaje era Mocha, y pensaban lanzarlo finalmente como LiveScript, aunque al final se acabó denominando JavaScript por la gran influencia en su sintaxis por parte del lenguaje Java, aunque las similitudes son únicamente estéticas. En la actualidad, además de ser el lenguaje utilizado casi en exclusiva para añadir interactividad a las páginas Web, JavaScript se encuentra integrado en otras muchas aplicaciones además de los navegadores: servidores, lenguajes de programación de propósito específico como Node.js o sistemas operativos como Windows.
Bien es cierto que la gente de Netscape intentó aprovechar el tirón de marketing que ofrecía Java en aquel momento, y usando la palabra "Java" en el nombre del nuevo lenguaje pretendían darle un halo de seriedad. Me imagino que, dada la confusión que generaron, se arrepintieron pronto de su decisión y de no haberle dejado el nombre de LiveScript.
Aparte de esa raíz común en el nombre, Java y JavaScript son lenguajes totalmente diferentes. He aquí algunos ejemplos importantes de sus muchas diferencias:
- JavaScript tradicionalmente ha sido un lenguaje interpretado, y Java es compilado. Para entendernos, y dicho muy básicamente, los programas JavaScript son archivos de texto que pueden leer tanto los ordenadores como las personas y que se interpretan a medida que se leen para luego ejecutarlos, mientras que los de Java se compilan a un archivo especial optimizado para que lo lea un ordenador y lo ejecute. Podríamos entrar en detalles de que Java se compila a un lenguaje intermedio llamado bytecode que es interpretado por un ejecutar JIT que facilita que sea multiplataforma, pero no es el objeto de este artículo y quiero mantenerlo intencionadamente simple. Por otro lado, y abundando en lo mismo, en la actualidad mucho código JavaScript es compilado (por ejemplo el motor V8 de Chrome y Node.js compila a código nativo el código JavaScript y puede llegar a ser tan rápido como cualquier otro). Así que en la actualidad la distinción no es tan clara entrando en detalle, pero sí se puede afirmar que son de naturaleza diferente porque JavaScript no requiere una compilación explícita para ser ejecutado.
- Java se depura en dos fases y JavaScript en una. Como con todos los lenguajes interpretados, en JavaScript solamente sabes si has cometido inadvertidamente un error de sintaxis cuando vas a ejecutar el programa (salvo que uses herramientas especializadas como Visual Studio o WebStorm, que interpretan el código en segundo plano). En Java sin embargo, primero se realiza la fase de compilación, en la que el compilador ya indica los posibles errores de sintaxis que existan. Luego al ejecutar podrían surgir errores de lógica o de otra índole. En JavaScript todos ellos se depuran al mismo tiempo, haciéndolo más complicado.
- Java es un lenguaje orientado a objetos puro, pero JavaScript está basado en prototipos. En realidad JavaScript debe simular muchas de las características de orientación a objetos que se dan en la mayoría de los lenguajes. A cambio proporciona diversos paradigmas de programación (funcional, imperativo, dinámico y orientado a objetos) lo que lo convierte en un lenguaje tremendamente versátil. De hecho en JavaScript es posible cambiar la "base" de la que hereda una clase en cualquier momento, afectando a todas, cosa imposible en la mayoría de los lenguajes orientados a objetos.
- Java es fuertemente tipado, y JavaScript es débilmente tipado. En Java todas las variables tienen un tipo determinado y una vez definidas no se pueden cambiar. En JavaScript una misma variable puede contener primero un texto, luego un número, luego una fecha o un objeto, etc... Esto es un arma de doble filo pues permite una gran flexibilidad a cambio de muchos posibles errores si no tenemos cuidado.
- Java tiene ámbito por bloque y JavaScript lo tiene por función: el acceso a las variables depende de dónde las hayamos definido. JavaScript tiene algunas reglas que pueden despistar bastante a los programadores de otros lenguajes.
- JavaScript tiene clausuras, Java las acaba de incorporar. Uno de los conceptos más importantes en la programación con JavaScript (y en otros lenguajes) son las clausuras. Java no las tuvo hasta la versión 8 aparecida hace muy poco tiempo, que añadió también las funciones lambda, para dar soporte al paradigma de programación funcional.
- Las funciones en JavaScript son multi-argumento siempre. En Java es necesario indicarlo.
- JavaScript es estándar, Java no. El control del lenguaje JavaScript lo lleva la organización sin ánimo de lucro European Computer Manufacturers Association (ECMA). De hecho su nombre oficial es ECMAScript, y está estandarizado. Por el contrario el control sobre Java lo tiene Oracle, una empresa privada que decide a su antojo lo que se hace con él.
En resumen, y para dejar bien clara la diferencia sin palabras técnicas, desmiento a continuación algunos falsos mitos:
- JavaScript NO es lo mismo que Java.
- JavaScript NO es un subconjunto de Java.
- JavaScript NO es una versión de Java para programar páginas web.
- JavaScript NO comparte prácticamente nada con Java. Si acaso la misma sintaxis que comparte con otros lenguajes como C, C++ o C#, y algún detalle más como algunos nombres de clases (Math o Date, por ejemplo), pero nada más.
- JavaScript NO es más fácil que Java. De hecho en algunas áreas concretas es más difícil de dominar.
- Si sabes programar en Java NO sabes programar en JavaScript. Y viceversa.
- JavaScript NO es solo un lenguaje para páginas web, al igual que Java no es un lenguaje solo para servidor.
Espero que esto sirva para aclararlo de una vez por todas :-)