Coffee bytes

Blog de desarrollo web con Python y Javascript

Python vs Javascript 2021 ¿Cuál es el mejor?

El jueves, 10 de diciembre de 2020

por Eduardo Zepeda

Tiempo de lectura: 10 minutos

Si has usado solamente Python o solamente Javascript, seguramente te de un poco de curiosidad saber como es el otro. Yo he usado ambos y te puedo platicar un poco sobre las diferencias y algunas cosas en común que tienen ambos lenguajes, para que encuentres el mejor para ti.

Un poco sobre ellos

Para empezar diremos que ambos son lenguajes interpretados. Si no sabes que es eso, significa que tienen un interprete 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.

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

Antigüedad

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.

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! 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 tiene 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 a los tipos de variables.

¿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 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.

// 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]
}

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.

# 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

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.

Soporte

Soporte para Javascript

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

Abajo puedes ver la consola de javascript del navegador web Firefox

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

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 verás que ya se encuentra instalado.

Usos

Usos de Javascript

Javascript se usa, como ya mencioné anteriormente, para manipular el DOM y ejecutarse principalmente en el navegador. Sin embargo Node permite utilizarlo también en tu ordenador, para ser usado como un lenguaje del lado del servidor, aunque originalmente no fue concebido de esa manera. Node js ha permitido que javascript se use fuera del navegador, por lo que su uso se ha extendido, incluso al machine learning.

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.

Usos de Python

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.

Popularidad

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 2015, Python ganó relevancia en comparación con Javascript y la tendencia se mantiene hasta el día de la fecha en que se escribió esta entrada.

Popularidad entre los desarrolladores

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.

Salarios

Según la última encuesta de Stackoverflow (2020), los profesionales que usan Python son ligeramente mejor pagados que aquellos que usan Javascript. Sin embargo la diferencia no es tan significativa.

Baterias 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

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.

Velocidad

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 que se encuentran aquí (todos los créditos al autor) y el programa multitime para el cálculo del tiempo promedio.

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.

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

async def function():
    response = await fetchData()
    return response

Web Frameworks de desarrollo web

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

Frameworks para Javascript

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

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

Frameworks 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, del cual tengo una entrada donde explico sus ventajas, o Flask y algunas más modernas como FastAPI, del que ya escribí una entrada anteriormente.

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 htmx y django para conocer más.

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:

Paquetes en Python

Pypi es la plataforma principal encargada del manejo de paquetes en Python. En la fecha en la que se escribió este artículo Pypi tiene 270,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…

Para finalizar

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. 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 ambos lenguajes y los usan indistintamente de acuerdo a sus necesidades.

Presume lo que aprendiste en redes

Posts de calidad en tu inbox

Regularmente publico posts relacionados con desarrollo web, principalmente con Python y Javascript. Suscríbete para recibirlos directamente en tu inbox.

* Campo obligatorio

Hola, ¿te está sirviendo el post?

Recibe mis posts por correo electrónico totalmente gratis. O por lo menos sígueme en Twitter. Me motivas a seguir creando contenido gratuito

* Campo obligatorio