1.ace.1 - Lenguajes y tecnologías de programación en entorno servidor

Objetivo

Identificar y caracterizar los principales lenguajes y tecnologías utilizados en programación web en entorno servidor, comprender sus modelos de ejecución y comparar sus ventajas, limitaciones y ámbitos habituales de utilización para seleccionar una tecnología adecuada según las necesidades de un proyecto.

1. Contenidos

1.1 Lenguajes de programación en entorno servidor

El código de una aplicación web de servidor puede escribirse en numerosos lenguajes. Todos pueden resolver problemas similares —procesar datos, aplicar reglas de negocio, acceder a bases de datos o construir APIs—, pero difieren en su modelo de ejecución, ecosistema, herramientas, rendimiento, curva de aprendizaje y tipos de proyectos en los que son especialmente habituales.

Entre los lenguajes y plataformas más utilizados en desarrollo web de servidor se encuentran:

  • PHP, diseñado con una fuerte orientación al desarrollo web.
  • Java, utilizado ampliamente en aplicaciones empresariales y servicios de gran tamaño.
  • Python, valorado por su legibilidad y rapidez de desarrollo.
  • JavaScript y TypeScript sobre Node.js, que permiten utilizar el ecosistema JavaScript también en el servidor.
  • C# sobre .NET, muy utilizado en aplicaciones empresariales y servicios web multiplataforma.
  • Otras alternativas como Go o Ruby, además de lenguajes que comparten plataformas con los anteriores, como Kotlin sobre la JVM.

Idea clave: no existe un «mejor lenguaje de servidor» para todos los proyectos. La elección depende del problema, del equipo, del ecosistema disponible, de los requisitos no funcionales y del coste de mantener la aplicación a largo plazo.

1.2 Lenguajes interpretados, compilados y modelos híbridos

Es frecuente clasificar los lenguajes como interpretados o compilados, pero en los entornos modernos esta división no siempre es absoluta. Muchos lenguajes combinan varias fases de traducción y ejecución.

Compilación a código máquina

Un compilador puede transformar el código fuente en código máquina nativo antes de ejecutar el programa. El resultado está preparado para una plataforma concreta.


Código fuente  →  Compilador  →  Ejecutable nativo  →  Procesador
      Go              go build          binario
				

Este modelo suele reducir el trabajo necesario durante la ejecución y facilita distribuir aplicaciones como binarios independientes.

Ejecución mediante máquina virtual o intérprete

Otros lenguajes transforman el código a una representación intermedia, como bytecode, que posteriormente ejecuta una máquina virtual o un intérprete.


Java:
Código .java → javac → bytecode .class → JVM → ejecución

Python (CPython, simplificado):
Código .py → bytecode → intérprete de CPython → ejecución
				

Compilación JIT

La compilación Just-In-Time (JIT) convierte durante la ejecución determinadas partes del programa a código máquina. Plataformas como la JVM o motores de JavaScript como V8 pueden utilizar este mecanismo para optimizar código que se ejecuta repetidamente.


Código fuente
     ↓
Representación intermedia / bytecode
     ↓
Runtime o máquina virtual
     ├── interpreta
     └── compila a código máquina cuando resulta conveniente (JIT)
				

¿Y PHP?

PHP se considera habitualmente un lenguaje de scripting. En una ejecución típica, el motor PHP analiza y transforma el código en instrucciones internas u opcodes, que posteriormente ejecuta. Por tanto, decir simplemente que PHP «interpreta cada línea directamente» es una simplificación.

TecnologíaProceso de ejecución simplificadoClasificación didáctica
PHPCódigo fuente → opcodes → motor PHPScripting / ejecución mediante runtime
JavaFuente → bytecode → JVM → interpretación/JITCompilado a bytecode + máquina virtual
Python (CPython)Fuente → bytecode → intérpreteCompilado a bytecode + interpretado
JavaScript en Node.jsFuente → motor V8 → interpretación/compilación JITRuntime con JIT
C# / .NETFuente → IL → runtime .NET → JIT o AOTCompilado a lenguaje intermedio
GoFuente → código máquina nativoCompilado

Importante: «compilado» no significa automáticamente «rápido» ni «interpretado» significa automáticamente «lento». El rendimiento real depende del runtime, el framework, el diseño de la aplicación, el acceso a datos, la carga y muchos otros factores.

1.3 PHP

PHP es un lenguaje de propósito general especialmente orientado al desarrollo web en servidor. Permite generar contenido dinámico, procesar formularios, gestionar sesiones, trabajar con bases de datos y construir aplicaciones web completas.

Características

  • Sintaxis pensada para integrarse fácilmente en proyectos web.
  • Tipado dinámico, con posibilidad de declarar tipos en numerosos elementos del lenguaje.
  • Amplio soporte de bases de datos y extensiones.
  • Gestión de dependencias mediante Composer.
  • Frameworks como Laravel o Symfony.

Ventajas

  • Curva de entrada relativamente accesible para desarrollo web.
  • Ecosistema maduro y abundante documentación.
  • Gran disponibilidad en servicios de alojamiento.
  • Permite desarrollar desde pequeños sitios hasta aplicaciones estructuradas mediante frameworks.

Limitaciones

  • Su flexibilidad puede facilitar código poco estructurado si no se aplican buenas prácticas.
  • En proyectos grandes es importante utilizar arquitectura, tipado, pruebas y herramientas de calidad de forma disciplinada.

Ámbitos habituales

Sitios y aplicaciones web, comercio electrónico, gestores de contenido, APIs, portales corporativos y aplicaciones desarrolladas con frameworks como Laravel o Symfony.

1.4 Java

Java es un lenguaje de propósito general, orientado a objetos y de tipado estático. El código se compila a bytecode y se ejecuta sobre la Java Virtual Machine (JVM).

Características

  • Tipado estático y comprobaciones en compilación.
  • Ejecución sobre la JVM.
  • Amplio ecosistema de librerías, herramientas y servidores.
  • Frameworks como Spring Boot, Jakarta EE o Quarkus.
  • Herramientas de construcción y dependencias como Maven y Gradle.

Ventajas

  • Buen soporte para aplicaciones grandes y equipos numerosos.
  • Tipado y herramientas que ayudan a detectar errores antes de ejecutar.
  • Ecosistema empresarial muy amplio.
  • Portabilidad proporcionada por la JVM.

Limitaciones

  • Puede requerir más estructura y configuración que alternativas orientadas a prototipado rápido.
  • La JVM añade un runtime y una fase de arranque que deben tenerse en cuenta en determinados despliegues.

Ámbitos habituales

Aplicaciones empresariales, banca, sistemas de gestión, APIs, arquitecturas de servicios y proyectos que necesitan una base tecnológica estable y mantenible a largo plazo.

1.5 Python

Python es un lenguaje de propósito general que prioriza la legibilidad y una sintaxis concisa. En desarrollo web suele utilizarse con frameworks como Django, Flask o FastAPI.

Características

  • Tipado dinámico, con anotaciones de tipos opcionales.
  • Sintaxis compacta y legible.
  • Amplio ecosistema de paquetes mediante pip.
  • Puede utilizarse tanto para aplicaciones web como para automatización, ciencia de datos e inteligencia artificial.

Ventajas

  • Alta productividad y rapidez para desarrollar prototipos y aplicaciones.
  • Código generalmente fácil de leer.
  • Gran ecosistema fuera del desarrollo web, útil cuando una aplicación se integra con análisis de datos o IA.

Limitaciones

  • El tipado dinámico exige disciplina adicional en proyectos grandes, aunque puede reforzarse con anotaciones y analizadores estáticos.
  • Para cargas intensivas de CPU suele apoyarse en extensiones, otros procesos o tecnologías complementarias.

Ámbitos habituales

Aplicaciones web, APIs, prototipos, automatización, backends conectados con ciencia de datos, aprendizaje automático y herramientas internas.

1.6 JavaScript y TypeScript con Node.js

Node.js no es un lenguaje de programación, sino un entorno de ejecución de JavaScript fuera del navegador. Gracias a él, JavaScript y TypeScript pueden utilizarse para desarrollar aplicaciones de servidor.

Características

  • Ejecuta JavaScript mediante el motor V8.
  • Modelo orientado a eventos y operaciones de entrada/salida no bloqueantes.
  • Gran ecosistema de paquetes mediante npm.
  • Frameworks y librerías como Express, Fastify o NestJS.
  • TypeScript añade tipado estático y se transforma a JavaScript para su ejecución.

Ventajas

  • Permite compartir lenguaje y parte del conocimiento entre frontend y backend.
  • Adecuado para aplicaciones con muchas operaciones de entrada/salida concurrentes.
  • Ecosistema muy amplio para servicios web y APIs.

Limitaciones

  • Las tareas intensivas de CPU pueden bloquear el hilo principal si no se diseñan correctamente.
  • El enorme ecosistema de dependencias exige controlar versiones, mantenimiento y seguridad.

Ámbitos habituales

APIs, aplicaciones en tiempo real, servicios con muchas operaciones de red, backends para aplicaciones JavaScript y arquitecturas de servicios.

1.7 C# y .NET

C# es un lenguaje de propósito general y tipado estático que forma parte del ecosistema .NET. Para desarrollo web se utiliza principalmente ASP.NET Core, framework multiplataforma y de código abierto para construir aplicaciones y servicios web.

Características

  • Tipado estático y orientación a objetos.
  • Compilación a lenguaje intermedio para el runtime .NET.
  • Amplia biblioteca estándar y herramientas de desarrollo.
  • Framework web ASP.NET Core.
  • Gestión de paquetes mediante NuGet.

Ventajas

  • Herramientas y soporte sólidos para aplicaciones empresariales.
  • Buen rendimiento y posibilidades de ejecución multiplataforma.
  • Integración natural con otros componentes del ecosistema .NET.

Limitaciones

  • Requiere conocer el ecosistema .NET además del propio lenguaje.
  • En proyectos sencillos puede aportar más estructura de la necesaria si se compara con soluciones más ligeras.

Ámbitos habituales

Aplicaciones empresariales, APIs, servicios internos, soluciones corporativas, sistemas integrados con tecnologías Microsoft y aplicaciones web multiplataforma.

1.8 Otras tecnologías de servidor

Go

Go es un lenguaje compilado y de tipado estático con soporte incorporado para concurrencia y una biblioteca estándar que incluye herramientas para crear servidores HTTP. Se utiliza con frecuencia en APIs, servicios de red, infraestructura cloud y microservicios.

  • Ventajas: compilación a binarios nativos, despliegue sencillo, concurrencia integrada y buen rendimiento.
  • Limitaciones: ecosistema web menos centrado en frameworks «todo incluido» y un estilo deliberadamente minimalista.

Ruby

Ruby es un lenguaje dinámico orientado a objetos. Su framework más conocido para desarrollo web es Ruby on Rails, que prioriza la productividad y las convenciones.

  • Ventajas: sintaxis expresiva y alta productividad con frameworks como Rails.
  • Limitaciones: menor presencia que otros ecosistemas en algunos mercados y cargas donde el rendimiento bruto sea prioritario.

Kotlin sobre la JVM

Kotlin puede utilizarse también en servidor sobre la JVM. Puede interoperar con bibliotecas Java y emplear frameworks como Spring, ofreciendo una sintaxis más concisa y características modernas del sistema de tipos.

No confundas lenguaje, runtime y framework: JavaScript es un lenguaje, Node.js es un runtime y Express es una librería/framework web; C# es un lenguaje, .NET es una plataforma/runtime y ASP.NET Core es un framework web.

1.9 Comparación de tecnologías

La siguiente tabla resume características relevantes para una primera comparación. No pretende decidir qué tecnología es «mejor», sino mostrar qué aspectos debemos analizar antes de elegir.

Tecnología Tipado habitual Runtime / ejecución Frameworks representativos Ámbitos frecuentes
PHPDinámico con declaraciones de tiposMotor PHPLaravel, SymfonyWeb, CMS, ecommerce, APIs
JavaEstáticoJVMSpring Boot, Jakarta EE, QuarkusEmpresa, APIs, servicios
PythonDinámico con anotaciones opcionalesIntérprete/runtimeDjango, Flask, FastAPIWeb, APIs, datos, IA
JavaScript / TypeScriptDinámico / estático en TypeScriptNode.js / V8Express, Fastify, NestJSAPIs, tiempo real, servicios de red
C#Estático.NETASP.NET CoreEmpresa, APIs, servicios
GoEstáticoBinario nativonet/http, Gin, otrosAPIs, cloud, red, microservicios
RubyDinámicoRuntime RubyRuby on RailsAplicaciones web y productos SaaS

1.10 Criterios para seleccionar una tecnología

Elegir una tecnología de servidor es una decisión de ingeniería. Para justificarla debemos relacionar las características del lenguaje y de su ecosistema con las necesidades concretas del proyecto.

Criterios técnicos

  • Tipo de aplicación: sitio web, API, aplicación en tiempo real, sistema empresarial, procesamiento de datos, etc.
  • Concurrencia y carga: número esperado de usuarios, conexiones simultáneas y naturaleza del trabajo.
  • Rendimiento: importancia de la latencia, consumo de memoria y trabajo de CPU.
  • Seguridad: herramientas y mecanismos disponibles para construir aplicaciones robustas.
  • Integración: bases de datos, APIs, sistemas existentes y servicios externos.

Criterios de proyecto

  • Experiencia del equipo: una tecnología conocida puede reducir tiempo, errores y coste.
  • Ecosistema: calidad de frameworks, librerías, documentación y herramientas.
  • Mantenibilidad: facilidad para comprender, probar y evolucionar el código.
  • Disponibilidad de profesionales: facilidad para formar o incorporar desarrolladores.
  • Coste de operación: infraestructura, despliegue y mantenimiento.

Regla práctica: una buena elección tecnológica no se justifica diciendo «es más rápida» o «es más moderna». Debe explicarse qué requisito del proyecto satisface y qué compromisos introduce.

2. Ejercicios

2.1 Rompecabezas de tecnologías - Jigsaw

Formad grupos base de cinco alumnos. Cada miembro será responsable de una tecnología: PHP, Java, Python, JavaScript/Node.js o C#/.NET.

Fase 1. Grupo de expertos

Reúnete con los alumnos de otros grupos que tengan asignada tu misma tecnología. Utilizando estos apuntes y la documentación indicada por el profesor, preparad una ficha que incluya:

  1. Lenguaje y runtime o plataforma que utiliza.
  2. Modelo de ejecución simplificado.
  3. Tipo de tipado.
  4. Dos frameworks o herramientas representativas.
  5. Tres ventajas.
  6. Dos limitaciones.
  7. Tres tipos de proyectos para los que resulte adecuada.
  8. Una situación en la que elegiríais otra tecnología y por qué.

Fase 2. Regreso al grupo base

Cada experto dispondrá de un máximo de cuatro minutos para explicar su tecnología. Mientras escucháis al resto, completad la siguiente matriz:

TecnologíaEjecuciónFrameworksVentajasLimitacionesUsos
PHP
Java
Python
JavaScript / Node.js
C# / .NET

Producto final

El grupo debe ser capaz de defender qué tecnología elegiría para los casos del ejercicio siguiente. No se valorará que todos los grupos seleccionen la misma opción, sino la calidad de la justificación.

2.2 Selección tecnológica para dos proyectos

Proyecto A. Plataforma de reservas para una clínica

Una clínica privada quiere desarrollar una aplicación web para gestionar las citas de sus pacientes.

La aplicación debe permitir:

  • Registro e inicio de sesión de pacientes.
  • Consulta de médicos y especialidades.
  • Reserva, modificación y cancelación de citas.
  • Área privada para pacientes.
  • Panel de administración para el personal de la clínica.
  • Acceso a una base de datos con pacientes, médicos, horarios y citas.
  • Envío de confirmaciones cuando se realiza una reserva.
  • Validación de permisos según el tipo de usuario.
  • Posibilidad de ampliar en el futuro la aplicación con nuevos servicios.

Proyecto B. Aplicación de resultados deportivos en tiempo real

Una empresa quiere crear una aplicación web para seguir competiciones deportivas en directo.

La aplicación debe:

  • Mostrar partidos y resultados en curso.
  • Actualizar automáticamente marcadores sin recargar la página.
  • Permitir que muchos usuarios consulten simultáneamente los resultados.
  • Recibir continuamente nuevos datos desde diferentes fuentes.
  • Mostrar estadísticas de jugadores y equipos.
  • Permitir a los usuarios seleccionar equipos favoritos.
  • Enviar actualizaciones rápidamente cuando cambia un resultado.
  • Disponer de una API para que otras aplicaciones consulten los resultados.
  • Poder escalar si aumenta significativamente el número de usuarios.

Tarea

Para cada proyecto:

  1. Selecciona un lenguaje y una plataforma de servidor.
  2. Propón un framework.
  3. Relaciona al menos tres requisitos del proyecto con características de la tecnología seleccionada.
  4. Indica al menos una limitación o riesgo de la elección.
  5. Selecciona una segunda alternativa y explica por qué también sería válida.

No existe una única respuesta correcta: se evaluará que la elección sea técnicamente viable y que la argumentación relacione requisitos, ventajas y limitaciones de manera coherente.

2.3 ¿Interpretado o compilado?

Clasifica y explica el proceso de ejecución de las siguientes tecnologías: PHP, Java, Python, JavaScript con Node.js, C#/.NET y Go.

  1. Dibuja para cada una una cadena similar a código fuente → transformación → runtime → ejecución.
  2. Indica cuáles producen bytecode o un lenguaje intermedio.
  3. Indica cuáles pueden utilizar compilación JIT.
  4. Indica cuál de ellas se compila normalmente a un binario nativo antes de ejecutarse.
  5. Explica en un máximo de cinco líneas por qué la clasificación «interpretado frente a compilado» puede resultar insuficiente para describir tecnologías modernas.

3. Bibliografía