Índice del contenido

Python vs Javascript ¿cuál es el mejor en 2024?

Python vs Javascript ¿cuál es el mejor en 2024?

Python y Javascript son dos de los lenguajes más populares entre las personas que están aprendiendo a programar, ambos son legibles, sencillos y con una curva de aprendizaje bastante plana si los comparamos con lenguajes como C, C++, Java o Rust. Ambos con sus fortalezas, debilidades, sus haters y sus defensores.

Usos de Python y Javascript

Javascript se usa en el navegador

Javascript se usa, principalmente, para desarrollar aplicaciones web. Es el lenguaje por defecto de los navegadores web, pero su versatilidad no se detiene ahí; Node permite utilizarlo también en tu ordenador, para ser usado como un lenguaje del lado del servidor, crear APIs, servidores, incluso al machine learning, aunque no es tan popular como Python en este rubro.

En los últimos años hay rumores de que deno, hecho por el creador de Node js, reemplazará a node, su predecesor, pero son solo eso, rumores. Además de Node, Javascript cuenta con muchísimos motores, tales como Bun winterJS que ofrecen un rendimiento superior y más amenidades que Node.

Python es un lenguaje multipropósito

Python es un lenguaje multipropósito, te permite crear aplicaciones nativas con interfaz de usuario, programar redes o servidores web, inteligencia artificial, desarrollo de aplicaciones web, prácticamente lo que sea.

Aunque su fuerte en este momento es machine learning, creación de scripting y podriamos decir que un poco de desarrollo web, estando muy por debajo de Javascript en este campo.

Popularidad entre ambos lenguajes

Javascript empezó siendo mucho más popular que Python, probablemente debido al auge de los navegadores web. Sin embargo, en algún punto cercano al 2017, Python ganó relevancia en comparación con Javascript y la tendencia se mantiene hasta finales del 2022.

Gráfico de google trends comparando Python vs Javascript
Python gana relevancia frente Javascript en Google trends

Stackoverflow muestra en sus encuestas que, entre los desarrolladores, Python es mucho más popular que Javascript. Sin embargo, Typescript (el super set de Javascript con tipado fuerte que mencioné anteriormente) es ligeramente más popular que Python.

Resultados de la encuesta de StackOverflow para los lenguajes más apreciados por desarrolladores. Python se encuentra por arriba de Javascript
Python supera a Javascript en popularidad en 2023

Python tiene mejores salarios que Javascript

Según la última encuesta de Stackoverflow (2023), los profesionales que usan Python son ligeramente mejor pagados que aquellos que usan Javascript. Sin embargo la diferencia no es tan significativa. Typescript también se encuentra por encima de Javascript.

Salarios de los desarrolladores de acuerdo al lenguaje de programación usado.
Python supera a Javascript en salarios en 2023

Antigüedad, Python es más antiguo

Python apareció a finales de los 80, mientras que Javascript apareció a principios de los 90, por lo que Python es más antiguo que Javascript.

Velocidad, Javascript es más rápido que Python

Al ser lenguajes interpretados son mucho más lentos que lenguajes compilados, por lo que quedarán bastante mal parados si los comparas con C, C++, Java, Rust, etc. Sin embargo entre ellos la diferencia es evidente: se puede afirmar que Javascript ejecutado en Node es mucho más rápido que Python con su intérprete original.

El gráfico de abajo compara el tiempo de ejecución promedio de diez repeticiones del problema de las N-Reinas (mientras más bajo mejor), usé los respectivos códigos de javascript y python de Sean P. Gallivan (todos los créditos al autor) y el programa multitime para el cálculo del tiempo promedio.

Gráfico del tiempo de ejecución del problema de las N-Reinas entre Javascript y Python. Javascript tiene mejor rendimiento.
Rendimiento del problema de las n-Reinas. Tiempo de ejecución en eje de las Y y número de reinas en el eje de las X. (Menor es mejor, javascript es mejor)

Se usó Node.js v15.10.0 y Python 3.8.6. El código se ejecutó directamente desde la terminal, sin ningún otro programa ejecutándose. Si quieres saber las especificaciones de la computadora puedes escribirme a mis redes sociales y con gusto te las hago saber.

Aclaro, a pesar de ser bastante obvio, que no es una metodología con el rigor científico adecuado, sin embargo es útil a manera de comparación grosso modo.

¿Qué tipo de lenguajes son?

Para empezar diremos que Python es un lenguaje interpretado. Si no te suena el término, significa que tiene un intérprete que traduce las instrucciones, una por una, a lenguaje máquina, para que se ejecuten al momento. Por lo que no tienes que compilar todo tu código cada vez que quieras ejecutarlo, como sí lo harías con C++, Java, Rust, etc.

Javascript nació como un lenguaje interpretado, sin embargo los motores modernos han logrado que se convierta en un lenguaje compilado JIT (“Just in Time”). Prácticamente todos los navegadores hacen compilado JIT de Javascript, exceptuando, como siempre, IE8. En mi opinión su diseño no es más elegante que el de Python, esto se nota por ejemplo en el manejo de fechas de Javascript, que por cierto detesto.

Si quieres aprender como funciona el motor de Javascript a un nivel más profundo, te dejo un enlace a una serie de videos en youtube donde se trata el tema más detalladamente.

Observa este esquema súper simplificado que compara los lenguajes compilados e interpretados.

Esquema súper simplificado de las diferencias entre código compilado e interpretado
Diferencias entre un lenguaje interpretado y uno compilado.

En este esquema me refiero a Javascript al momento de su creación, como lenguaje interpretado, no a la compilación JIT de la que te hablaba.

Si bien no son los lenguajes con mayor rendimiento, su flexibilidad es ideal para iterar una y otra vez en una startup o proyecto nuevo

Soporte

Soporte para Javascript

Javascript se encuentra en todos los navegadores de manera nativa, basta con que abras la terminal de tu navegador preferido para que empieces a utilizarlo. Es el lenguaje preferido para manipular el DOM .

Abajo puedes ver la terminal de javascript del navegador web Firefox

terminal del navegador web ejecutando javascript

Además puedes usar node para ejecutarlo en tu computadora.

terminal de Nodejs en GNU/Linux ejecutando javascript

Soporte para Python

Python no se encuentra en los navegadores, sin embargo está instalado en la mayoría de los sistemas GNU/Linux de manera predeterminada, si usas una distribución de GNU/Linux y abres la terminal de tu sistema operativo y ejecutas el comando Python lo más probable es que ya se encuent` instalado.

terminal de Python en GNU/Linux

Comparación del tipado

Respecto al tipado, es un tema muy complejo en el que no he encontrado un consenso claro y uniforme sobre que se considera tipado fuerte y que tipado débil. Sin embargo los expertos suelen decir que los lenguajes fuertemente tipados no permiten cambios en los tipos de datos una vez declarados, mientras que los débilmente tipados sí.

Te dejo un par de ejemplos para que los consideres

Tipado en Javascript

Primero veamos que sucede si intentamos cambiar un tipo en Javascript.

//javascript
let numeroEnTexto = "1"
numeroEnTexto = 1 // no pasa nada
const numero = 1 
numero = "2"
Uncaught TypeError: Assignment to constant variable.

Además de const, Javascript permite declarar una variable, let o var. Si en lugar de usar const hubieramos usado var o let el error no se presentaría.

Pero ahora mira lo que sucede si sumamos un entero y una cadena de texto.

//javascript
console.log(1 + "1")
"11"

¡No pasa nada! El intérprete de Javascript los suma sin problema alguno, incluso aunque uno es de tipo string y el otro un entero. Si eres de los que prefieren usar tipado fuerte con javascript, ya sea porque traes un background de C++, Java u otro lenguaje furtemente tipado o simplemente prefieres las ventajas de un tipado fuerte, dale una mirada a lo que Typescript y su compilador tienen para ofrecer.

// Este es código Typescript
// Observa como cada tipo de variable requiere su correspondiente tipo de dato
let idUser: number | string;
const months: Array<string> = ["Enero", "Febrero"]

Tipado en Python

Python no requiere, de manera forzosa, que especifiques el tipo de variable. Mira lo que sucede si intentamos cambiar el tipo de una variable en Python.

# Python
numero = "1"
numero = 1
numero = [1]
numero = {1:1} # no hubo error en ningún caso

Y ¿qué pasa si ahora intentamos sumar dos variables de tipo distintas como hicimos en Javascript?

# Python
print(1 + "1")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Como puedes apreciar, Python no permite realizar transformaciones implícitas de un tipo de variable a otro.

 def titleToNumber(columnTitle: str) -> int:
    # ...

Tipado opcional en Python

¿Y el Typescript para Python? Pues ya va incluido, Python incorpora tipado opcional, a partir de su versión 3.5, el tipado puede ser usado por algunos linters para mostrarte errores en el código, sin embargo el intérprete no obliga a su uso. Revisa la documentación oficial para aprender a usarlos.

Sintaxis

Sintaxis de Javascript

La sintaxis de Javascript es bastante parecida a la de C++ y otros lenguajes de programación clásicos. La separación entre partes del código se hace por medio de llaves y puntos y comas. Javascript usa this como referencia al propio objeto y no se requieren al declarar métodos en los objetos.

// true con minúsculas
if(true){"resultado"}
console.log("El punto y coma al final es opcional");
class MiClase {
  constructor(propiedad) {
    this.propiedad = propiedad;
  }
}

function(argumento, argumento_por_defecto="predeterminado"){
    let myFirstArgument = arguments[0]
    return myFirstArgument
}

try {
  functionThatCausesError();
} catch(error){
  console.error(error);
}

Sintaxis de Python

Por otro lado, Python favorece la legibilidad, el uso de caracteres especiales se encuentra reducido al mínimo y la separación para las partes del código se hace por medio de indentaciones y saltos de linea. Python usa self para referirse al propio objecto y requiere que se pase como primer argumento a cada método del objeto.

# True con mayusculas
if True: 
    return "resultado"

print("También puedes incluir punto y coma al final, pero la convención es no hacerlo")

class MiClase:
    def __init__(self, propiedad):
        self.propiedad = propiedad

def funcion(argumento_por_defecto = "predeterminado", *args, **kwargs):
    mi_lista_de_argumentos = args
    mi_diccionario_de_argumentos = kwargs
    return mi_list_de_argumentos

try:
  do_something()
except:
  print("An exception occurred")

Las diferencias de sintaxis son mucho más extensas que las que aquí expongo, cada uno tiene sus propias funciones, sus propias librerías integradas y una sintaxis diferente, pero espero que al menos hayas apreciado las pequeñas diferencias entre ambos.

Baterías incluidas

Python se caracteriza por ser un lenguaje con baterías incluidas, es decir, ya incluye por defecto muchísimas funcionalidades que solo tienes que importar para empezar a usarlas, ¿quieres trabajar con redes? importa el modulo socket, ¿quieres crear un GUI?, usa tkinter, ¿manipular audio?, usa audioop. Python incluye librerías para la mayoría de las necesidades comunes. Incluso incluye numpy, una poderosa librería para el análisis númerico.

Por otro lado, Javascript incluye solo lo necesario, aunque tiene una gigantesca comunidad de usuarios creando paquetes y poniéndolos a disposición de cualquiera que quiera tomarlos.

Capacidad de asincronismo

Asincronismo en Javascript

Las funciones asíncronas de javascript se ejecutan en un hilo separado y regresan al principal cuando se completan.

async function(){
    await downloadData()}

Asincronismo en Python

En Python las funciones asíncronas corren en un hilo sencillo y únicamente cambian a otra corrutina cuando una operación asíncrona es encontrada.

A partir de Python 3.5 se incorpora asincronismo mediante la misma sintaxis de async y await

from tortoise import Tortoise, run_async
from database.connectToDatabase import connectToDatabase

async def main():
    await connectToDatabase()
    await Tortoise.generate_schemas()

if __name__ == '__main__':
    run_async(main())

Frameworks para desarrollo web

Javascript y Python tienen bastantes frameworks para elegir cuando se trata de desarrollo web.

Frameworks web para Javascript

Existen muchísimos frameworks de Javascript para desarrollo web tanto para el backend como para el frontend; para el backend, express, nustjs, meteor, sails; para el frontend, vue, react, svelte, angular.

Frameworks de desarrollo web para Javascript

Incluso aún a pesar de la abundancia de opciones que hay salen nuevos frameworks de Javascript más frecuentemente que para Python.

Frameworks web para Python

Debido a que Python no se encuentra instalado en los navegadores, el desarrollo web actual usando Python se centra principalmente en la parte del Backend, donde tenemos soluciones bastante maduras como Django, con sus ventajas y desventajas, o Flask y algunas más modernas como el rapidísimo framework de desarrollo web FastAPI, del que ya escribí una entrada anteriormente.

Frameworks de desarrollo web de Python

Puedes escribir código HTML y CSS usando Python para el frontend, pero nunca tendrás la misma versatilidad que ejecutar código javascript directamente en el navegador del usuario.

Actualización: Me enteré de una librería que está ganando popularidad, llamada htmx, que te permite generar aplicaciones modernas devolviendo html en lugar de respuestas JSON. Entra en mi entrada sobre django y htmx para conocer más.

Comunidad y paquetes

Tanto la comunidad de Python, como la de Javascript, tienen librerías disponibles que solucionan la mayoría de los problemas más comunes a la hora de programar.

Paquetes en Javascript

Javascript usa npm para el manejo de paquetes y hay bastantes de donde elegir. En junio del 2019 npm superó el millón de paquetes publicados. ¡Muchísima variedad para elegir! Aunque también te encuentras cosas como esta:

Paquete is-odd de NPM
El paquete para saber si un número es impar tiene casi medio millón de descargas

Meme del rapero usando el paquete is-odd en lugar de el operador modulo.
Meme del rapero burlándose de la cantidad de descargas

Paquetes en Python

Pypi es la plataforma principal encargada del manejo de paquetes en Python. En la fecha en la que se actualizó este artículo Pypi tiene 348,000 paquetes publicados, ¡solo una quinta parte de la cantidad que tiene Javascript! Y como son menos paquetes podemos esperar paquetes más relevantes ¿no? A ver…

Paquete is-odd de pip
Python también tiene un paquete que revisa si un número es impar

Reflexión final ¿cuál deberías elegir?

Espero que esta pequeña comparación te haya mostrado un poco las diferencias que existen entre ambos lenguajes y si estás pensando en centrarte en alguno de ellos tengas más información sobre la mesa para tomar la decisión correcta.

Si te urge empezar a desarrollar sitios web ya, sin complicarte, yo me iría por Javascript.

Si quieres dedicarte al machine learning y análisis de datos, o quieres una solución más integral en los sitios web y más flexibilidad, yo me iría por Python.

De cualquiera manera no tienes porque reducirlo todo a una dicotomía, si tienes tiempo para dedicarle a ambos puedes hacerlo, muchos desarrolladores web dominan múltiples lenguajes y los usan indistintamente de acuerdo a sus necesidades.

Eduardo Zepeda
Desarrollador web, entusiasta de los sistemas GNU/Linux y el Software Libre. Py, Ts y Go, pero abierto a otras opciones como el Rustaceanismo. Creo en las bondades de las criptodivisas más allá de la especulación monetaria.
Leer más