📚 TEMA 18
Oposición Técnico/a Especialista en Informática | Servicio Andaluz de Salud
🎯 1. Introducción y Relevancia del Tema
Mira, este tema es de los que me encantan porque es puro núcleo duro de informática, ¿verdad? No hay medias tintas aquí. O sabes cómo funciona un compilador, o no lo sabes. Y te aseguro que en el examen van a ir a por ti con preguntas técnicas de las buenas.
¿Por qué es tan importante este tema para tu futuro en el SAS? Pues verás, en el Servicio Andaluz de Salud no solo usamos lenguajes de programación… ¡vivimos rodeados de ellos! Diraya está desarrollado en Java, muchos de nuestros scripts de automatización están en Python, las aplicaciones web usan JavaScript masivamente, y cuando tengas que integrar sistemas heterogéneos (que créeme, será a menudo), necesitarás entender perfectamente qué lenguaje usar y por qué.
1.1. Relevancia para el Técnico Especialista en Informática del SAS
En tu día a día como TFA-STI del SAS, te vas a encontrar con situaciones como estas:
Escenario Real 1: Integración de Sistemas – Llega un nuevo sistema de gestión de citas que está desarrollado en .NET, y necesitas integrarlo con Diraya (Java). Tienes que entender las diferencias entre la plataforma .NET y la JVM, cómo se comunican, qué formato de datos usar (XML, JSON), y las limitaciones de cada entorno.
Escenario Real 2: Automatización de Procesos – El Jefe de Servicio te pide que automatices la generación de informes mensuales de actividad asistencial. Podrías hacerlo en Python (interpretado, rápido de desarrollar, excelente para scripts), en PowerShell (si es Windows), o incluso en Bash. Tienes que elegir el lenguaje adecuado y justificar tu decisión.
Escenario Real 3: Desarrollo de Microservicios – Estás participando en la evolución de Diraya hacia una arquitectura de microservicios. Algunos servicios se desarrollan en Java (Spring Boot), otros en Python (Flask/Django), y el frontend en JavaScript (Angular/React). Necesitas entender perfectamente cómo se compilan, ejecutan y despliegan estos lenguajes.
1.2. Importancia en la Oposición
Este tema es de los que tienen un peso específico alto en el examen. Te van a preguntar tanto conceptos teóricos puros (¿qué es un compilador?, ¿diferencias con un intérprete?) como aplicaciones prácticas (¿qué lenguaje usarías para X?, ¿cómo funciona la JVM?).
• Pregunta sobre JVM y Java: 85% de probabilidad
• Pregunta sobre Python (tipado dinámico, interpretado): 75%
• Pregunta sobre compiladores vs intérpretes: 70%
• Pregunta sobre lenguajes de scripting: 60%
• Pregunta sobre POO (Programación Orientada a Objetos): 80%
1.3. Esquema del Tema
Vamos a abordar este tema con la siguiente estructura lógica:
Parte 1: Fundamentos – Qué es un lenguaje de programación, paradigmas, niveles de abstracción.
Parte 2: Traductores – Compiladores, intérpretes, ensambladores, preprocesadores. Aquí es donde más preguntas caen.
Parte 3: Estado del Arte – Java, .NET, Python, lenguajes de scripting. Aplicaciones en el SAS.
Parte 4: Entornos de Desarrollo – IDEs, herramientas, Git.
🔧 2. Lenguajes de Programación: Conceptos Fundamentales
2.1. Definición y Características
Un lenguaje de programación es, en esencia, un sistema de comunicación entre el ser humano y la máquina. Pero ojo, no es una comunicación cualquiera, es una comunicación formal, con reglas sintácticas y semánticas muy estrictas.
Piensa en ello como un idioma, pero mucho más riguroso que el español o el inglés. Si en español puedes decir «voy a la tienda» o «a la tienda voy» y ambas son correctas, en un lenguaje de programación el orden importa, cada símbolo importa, cada espacio puede importar (¡Python, te estoy mirando a ti!).
2.1.1. Características Fundamentales
| Característica | Descripción | Ejemplo Práctico SAS |
|---|---|---|
| Sintaxis | Conjunto de reglas que definen la estructura válida del código | En Java: if (condición) { ... }En Python: if condición: |
| Semántica | Significado de las construcciones sintácticas | Un bucle while siempre ejecuta mientras la condición sea verdadera |
| Expresividad | Capacidad de expresar conceptos de forma natural | Python permite: pacientes = [p for p in lista if p.edad > 65] |
| Abstracción | Nivel de alejamiento del hardware | Ensamblador (bajo nivel) vs Python (alto nivel) |
| Portabilidad | Capacidad de ejecutarse en diferentes plataformas | Java: «Write Once, Run Anywhere» (WORA) gracias a la JVM |
2.2. Clasificación de Lenguajes de Programación
2.2.1. Por Nivel de Abstracción
Lenguajes de Bajo Nivel – Están muy próximos al hardware. El ejemplo clásico es el ensamblador (Assembly). Cada instrucción se traduce casi directamente a una instrucción del procesador. Ventaja: máximo control y eficiencia. Desventaja: complejidad brutal, dependiente de la arquitectura del procesador.
Lenguajes de Nivel Medio – Como C o C++. Ofrecen un equilibrio entre control del hardware (punteros, gestión manual de memoria) y abstracción (funciones, estructuras). Son los lenguajes preferidos para desarrollar sistemas operativos, drivers, y software de alto rendimiento.
Lenguajes de Alto Nivel – Como Java, Python, C#, JavaScript. Están muy alejados del hardware y muy cerca del lenguaje humano. Ofrecen gestión automática de memoria (garbage collection), abstracción de tipos de datos complejos, y portabilidad.
2.2.2. Por Paradigma de Programación
Esto es importante porque en el examen suelen preguntar sobre paradigmas, especialmente sobre Programación Orientada a Objetos (POO).
Programación Imperativa – El código es una secuencia de instrucciones que modifican el estado del programa. Es el paradigma más tradicional y natural.
Programación Declarativa – El código describe QUÉ se quiere obtener, no CÓMO obtenerlo. SQL es el ejemplo clásico.
Programación Orientada a Objetos (POO) – El código se organiza en objetos que encapsulan datos (atributos) y comportamiento (métodos). Java, C#, Python, Ruby son lenguajes orientados a objetos.
• Encapsulación: Ocultar detalles internos, exponer solo interfaz pública
• Herencia: Una clase «hija» adquiere propiedades de clase «padre»
• Polimorfismo: Usar objetos de diferentes tipos con una interfaz común
• Abstracción: Simplificar realidad compleja mediante modelos
Programación Funcional – El código se basa en funciones matemáticas puras, sin efectos secundarios. Haskell es puramente funcional, pero Python y JavaScript soportan programación funcional.
2.2.3. Por Tipado
El tipado determina cómo se gestionan los tipos de datos en el lenguaje. Esta es otra área de preguntas frecuentes.
| Tipo de Tipado | Descripción | Lenguajes | Ejemplo |
|---|---|---|---|
| Tipado Estático | Los tipos se verifican en tiempo de compilación | Java, C, C# | int edad = 30; (tipo explícito) |
| Tipado Dinámico | Los tipos se verifican en tiempo de ejecución | Python, JavaScript, Ruby | edad = 30 (tipo inferido) |
| Tipado Fuerte | No permite operaciones entre tipos incompatibles | Python, Java | Python: "3" + 5 → Error |
| Tipado Débil | Permite conversiones implícitas entre tipos | JavaScript, PHP | JS: "3" + 5 → «35» |
• Python es dinámico y fuerte
• Java es estático y fuerte
• JavaScript es dinámico y débil
• C es estático y débil
⚙️ 3. Traductores de Lenguajes: Compiladores, Intérpretes y Ensambladores
Aquí viene la parte que MÁS cae en examen. He visto este tema en prácticamente todas las convocatoriones desde 2015. Así que, respira hondo y vamos a dejarlo cristalino.
3.1. El Problema de la Traducción
Verás, los procesadores (CPU) solo entienden un lenguaje: código máquina binario. Es decir, secuencias de 0s y 1s que representan instrucciones muy básicas (suma dos números, mueve datos de un sitio a otro, salta a otra instrucción si se cumple una condición, etc.).
Pero nosotros, los humanos, no queremos programar en binario. Queremos escribir código legible, expresivo, mantenible. Por eso necesitamos «traductores» que conviertan nuestro código de alto nivel a código máquina que el procesador pueda ejecutar.
3.2. Compiladores
Un compilador es un programa que traduce TODO el código fuente de un lenguaje de alto nivel (como C, C++, Go) a código máquina ANTES de ejecutarlo. El proceso completo ocurre en varias fases.
3.2.1. Fases de la Compilación
3.2.2. Características de los Compiladores
| Ventajas | Desventajas |
|---|---|
| ✅ Mayor velocidad de ejecución – El código ya está traducido a máquina | ❌ Proceso de compilación lento – Hay que compilar antes de probar |
| ✅ Detección temprana de errores – Muchos errores se detectan en compilación | ❌ Menos portabilidad – El ejecutable es específico de la plataforma |
| ✅ Optimización del código – El compilador puede optimizar agresivamente | ❌ Ciclo de desarrollo más lento – Codificar → Compilar → Probar → Repetir |
| ✅ No necesita el código fuente para ejecutarse – Distribuyes solo el binario | ❌ Dificulta la depuración – El código máquina es ilegible |
Respuesta: El compilado, porque ya está traducido completamente a código máquina antes de ejecutarse. El interpretado debe traducir cada instrucción durante la ejecución.
3.3. Intérpretes
Un intérprete es un programa que traduce y ejecuta el código fuente LÍNEA A LÍNEA, instrucción por instrucción, en tiempo de ejecución. No genera un ejecutable independiente.
3.3.1. Funcionamiento de un Intérprete
3.3.2. Características de los Intérpretes
| Ventajas | Desventajas |
|---|---|
| ✅ Desarrollo rápido – No hay fase de compilación | ❌ Ejecución más lenta – Traduce en tiempo real |
| ✅ Mayor portabilidad – El mismo código fuente funciona en cualquier plataforma con intérprete | ❌ Necesita el intérprete instalado – No puedes distribuir solo el código |
| ✅ Depuración más sencilla – Puedes ver el código fuente original | ❌ Errores en tiempo de ejecución – Un error en línea 1000 no se detecta hasta llegar ahí |
| ✅ Ciclo de desarrollo ágil – Modificas y pruebas inmediatamente | ❌ Mayor consumo de memoria – El intérprete debe estar en memoria |
Lenguajes Interpretados Comunes: Python, JavaScript, Ruby, PHP, Perl, Bash
3.4. Ensambladores
Un ensamblador es un tipo especial de traductor que convierte código en lenguaje ensamblador (Assembly) a código máquina. Es el traductor más simple porque hay una correspondencia casi 1:1 entre instrucciones en ensamblador e instrucciones en código máquina.
Hoy en día, casi nadie programa directamente en ensamblador, salvo para casos muy específicos: drivers de bajo nivel, optimizaciones críticas de rendimiento, malware (los investigadores de seguridad lo analizan), o programación de sistemas embebidos.
3.5. Soluciones Híbridas: Bytecode y Máquinas Virtuales
Aquí es donde Java entra en juego, y créeme que esto ES PREGUNTA FIJA en el examen del SAS.
3.5.1. Java y la JVM (Java Virtual Machine)
Java usa un enfoque híbrido genial que combina lo mejor de compilación e interpretación.
Respuesta Correcta: La JVM es un entorno de ejecución que convierte el código BYTECODE de Java (.class) en instrucciones que el hardware puede interpretar. Actúa como una capa de abstracción entre el bytecode y el sistema operativo/hardware, permitiendo que el mismo código Java se ejecute en cualquier plataforma que tenga una JVM instalada.
❌ NO ES:
• El compilador que convierte .java a .class (eso es javac)
• La biblioteca de clases de Java (eso es la Java API)
• Un sistema operativo específico para Java
3.5.2. Compilación JIT (Just-In-Time)
La JVM moderna no solo interpreta el bytecode, sino que usa una técnica llamada compilación JIT. Durante la ejecución, identifica las partes del código que se ejecutan frecuentemente (hot spots) y las compila a código máquina nativo. Así obtienes lo mejor de ambos mundos: portabilidad del bytecode y velocidad del código nativo.
3.5.3. Python y el Bytecode
Python también usa bytecode, aunque de forma más transparente.
3.6. Preprocesadores
Un preprocesador realiza transformaciones textuales en el código ANTES de que se compile. El ejemplo clásico es el preprocesador de C.
3.7. Cuadro Comparativo: Compilación vs Interpretación
| Aspecto | Compilación | Interpretación | Híbrido (Java) |
|---|---|---|---|
| Velocidad de Ejecución | ⭐⭐⭐⭐⭐ Muy rápida | ⭐⭐ Más lenta | ⭐⭐⭐⭐ Rápida (con JIT) |
| Velocidad de Desarrollo | ⭐⭐ Lenta (compilar cada cambio) | ⭐⭐⭐⭐⭐ Muy rápida | ⭐⭐⭐ Media |
| Portabilidad | ⭐⭐ Baja (binario específico) | ⭐⭐⭐⭐⭐ Alta (mismo código) | ⭐⭐⭐⭐⭐ Alta (WORA) |
| Detección de Errores | ⭐⭐⭐⭐⭐ Temprana | ⭐⭐ Tardía (runtime) | ⭐⭐⭐⭐ Media-Temprana |
| Uso de Memoria | ⭐⭐⭐⭐ Bajo | ⭐⭐⭐ Medio-Alto | ⭐⭐⭐ Medio |
| Ejemplos | C, C++, Go, Rust | Python, Ruby, PHP | Java, C#, Kotlin |
🚀 4. Estado del Arte: Lenguajes y Tecnologías Actuales
Ahora vamos con la parte práctica y aplicada al SAS. Aquí es donde tienes que conocer los lenguajes que realmente se usan en producción.
4.1. Java: El Pilar de las Aplicaciones Empresariales del SAS
Java es EL lenguaje por excelencia en el SAS. Diraya está desarrollado en Java (con framework Spring), muchos de los sistemas corporativos usan Java EE, y es el estándar para aplicaciones empresariales robustas y escalables.
4.1.1. Características Principales de Java
1. Orientado a Objetos – Todo en Java es un objeto (excepto tipos primitivos). Soporta encapsulación, herencia, polimorfismo y abstracción.
2. Multiplataforma (WORA) – «Write Once, Run Anywhere». Gracias a la JVM, el mismo .class funciona en Windows, Linux, MacOS, Solaris…
3. Gestión Automática de Memoria – El Garbage Collector (GC) libera automáticamente la memoria de objetos no utilizados.
4. Robusto y Seguro – Fuertemente tipado, manejo de excepciones obligatorio, sin punteros directos (previene errores de memoria).
5. Multihilo – Soporte nativo para programación concurrente y paralela.
4.1.2. Ecosistema Java en el SAS
Frameworks Principales:
• Spring Framework – Framework de desarrollo empresarial. Diraya lo usa extensivamente.
• Spring Boot – Para microservicios. Usado en las nuevas arquitecturas del SAS.
• Hibernate – ORM (Object-Relational Mapping) para persistencia de datos.
Servidores de Aplicaciones:
• Apache Tomcat – Contenedor de servlets ligero
• WildFly (antes JBoss) – Servidor de aplicaciones Java EE completo
• WebLogic – Usado en algunos sistemas legacy del SAS
4.2. Plataforma .NET y C#
Aunque Java domina en el SAS, también hay sistemas en .NET, especialmente aplicaciones Windows y herramientas de escritorio.
4.2.1. Características de .NET
1. Plataforma Completa – No es solo un lenguaje, es toda una plataforma de desarrollo que incluye lenguajes (C#, VB.NET, F#), runtime (CLR), librerías (BCL), y frameworks (ASP.NET, WPF, etc.).
2. CLR (Common Language Runtime) – Equivalente a la JVM de Java. Ejecuta código en formato IL (Intermediate Language).
3. .NET Core / .NET 5+ – Versión moderna, multiplataforma (Windows, Linux, MacOS), open source.
Comparación Java vs .NET/C#:
| Aspecto | Java | C# / .NET |
|---|---|---|
| Portabilidad | Excelente (JVM en todas partes) | Buena (.NET Core es multiplataforma) |
| Ecosistema | Muy maduro, muchas librerías | Muy rico, excelente integración Microsoft |
| Curva de Aprendizaje | Media | Media (más fácil si vienes de Java) |
| Uso en SAS | ⭐⭐⭐⭐⭐ Muy alto (Diraya, BPS, etc.) | ⭐⭐⭐ Medio (aplicaciones Windows) |
| IDEs | IntelliJ IDEA, Eclipse, NetBeans | Visual Studio, VS Code, Rider |
4.3. Python: El Lenguaje Multiusos
Python es mi lenguaje favorito para scripts, automatización, análisis de datos, IA/ML. En el SAS se usa mucho para:
• Scripts de automatización de tareas
• Procesamiento de datos y ETL
• Análisis de datos y Business Intelligence
• Desarrollo de APIs REST ligeras (Flask, FastAPI)
4.3.1. Características de Python
Respuesta Correcta: Es un lenguaje interpretado y de tipado dinámico.
Explicación:
• Interpretado: Se ejecuta línea a línea sin compilación previa a ejecutable
• Tipado dinámico: No declaras el tipo de las variables explícitamente
• Tipado fuerte: No permite operaciones entre tipos incompatibles
4.3.2. Librerías Esenciales de Python
Para Análisis de Datos (muy usado en BI del SAS):
• Pandas – Manipulación y análisis de datos tabulares
• NumPy – Computación numérica, arrays multidimensionales
• Matplotlib / Seaborn – Visualización de datos
Para Desarrollo Web:
• Django – Framework web completo (MVC)
• Flask – Microframework ligero para APIs
• FastAPI – Framework moderno para APIs REST de alto rendimiento
Para IA/Machine Learning:
• scikit-learn – Machine Learning clásico
• TensorFlow / PyTorch – Deep Learning
4.4. Lenguajes de Scripting
Los lenguajes de scripting son ideales para automatización, tareas del sistema, y gluing (pegar sistemas). Los más importantes:
4.4.1. JavaScript
JavaScript es EL lenguaje de la web. En el SAS, todas las aplicaciones web (Diraya Web, ClicSalud+, portales corporativos) usan JavaScript masivamente en el frontend.
Respuesta: JavaScript
Por qué: JavaScript es el lenguaje estándar para programación del lado del cliente en navegadores web. Permite manipular dinámicamente el DOM, responder a eventos del usuario, y crear interfaces interactivas.
Frameworks JavaScript Modernos (pregunta posible en examen):
| Framework | Tipo | Características | Uso en SAS |
|---|---|---|---|
| Angular | Frontend | Framework completo, TypeScript, MVC | Usado en aplicaciones web corporativas |
| React | Frontend | Librería de componentes, Virtual DOM | Usado en portales y SPAs modernas |
| Vue.js | Frontend | Framework progresivo, curva suave | Usado en aplicaciones web ligeras |
| Node.js | Backend | JavaScript en servidor, asíncrono | Usado para APIs REST, microservicios |
A) ASP.NET (Backend – Microsoft)
B) Angular (✅ Frontend – Google)
C) Django (Backend – Python)
D) Spring (Backend – Java)
4.4.2. Bash Scripting
En servidores Linux del SAS (que son la mayoría), Bash es fundamental para automatización, mantenimiento, backups, y tareas administrativas.
4.4.3. PowerShell
En entornos Windows Server del SAS, PowerShell es la herramienta de automatización y administración por excelencia.
4.5. Otros Lenguajes Relevantes
4.5.1. SQL (Structured Query Language)
SQL no es un lenguaje de programación de propósito general, sino un lenguaje declarativo para gestión de bases de datos relacionales. Es FUNDAMENTAL en el SAS porque todos los sistemas corporativos (Diraya, BPS, GERHONTE, etc.) usan bases de datos relacionales.
4.5.2. Lenguajes Emergentes
Go (Golang) – Desarrollado por Google, ideal para microservicios de alto rendimiento, sistemas distribuidos. Compilado, muy rápido, concurrencia nativa. Empieza a usarse en el SAS para servicios críticos de backend.
Rust – Lenguaje de sistemas, seguridad de memoria sin garbage collector, rendimiento comparable a C/C++. Ideal para software de infraestructura crítica.
TypeScript – Superconjunto de JavaScript con tipado estático. Cada vez más usado en desarrollo web del SAS porque reduce errores y mejora mantenibilidad.
🛠️ 5. Entornos de Desarrollo Integrados (IDEs) y Herramientas
5.1. Entornos Visuales
Los IDEs modernos son mucho más que editores de texto. Son entornos completos que integran edición, compilación, depuración, control de versiones, y mucho más.
| IDE | Lenguajes | Características Destacadas | Uso en SAS |
|---|---|---|---|
| IntelliJ IDEA | Java, Kotlin, Scala | Refactoring inteligente, análisis de código | ⭐⭐⭐⭐⭐ Principal para desarrollo Java |
| Eclipse | Java, C++, PHP | Open source, extensible con plugins | ⭐⭐⭐⭐ Usado en proyectos legacy |
| Visual Studio | .NET (C#, VB, F#) | Integración total con ecosistema Microsoft | ⭐⭐⭐ Aplicaciones Windows |
| VS Code | Todos (con extensiones) | Ligero, multiplataforma, muy extensible | ⭐⭐⭐⭐⭐ Muy popular para Python, JS, etc. |
| PyCharm | Python | Excelente para desarrollo Python profesional | ⭐⭐⭐⭐ Principal para Python |
5.2. Control de Versiones: Git
Git es LA herramienta de control de versiones en el SAS (y en todo el mundo del desarrollo). Es fundamental que lo domines.
Respuesta:
git pushOtros comandos importantes:
•
git clone – Clonar repositorio remoto•
git pull – Descargar y fusionar cambios remotos•
git commit – Guardar cambios en historial local•
git add – Añadir archivos al área de staging•
git branch – Gestionar ramas
📊 6. Aplicación Práctica en el SAS
6.1. Casos de Uso Reales
Caso 1: Desarrollo de Microservicio para Integración con Receta XXI
Contexto: Necesitas desarrollar un microservicio que integre Diraya con el sistema de Receta XXI para sincronizar prescripciones.
Decisión de tecnología:
• Lenguaje: Java 17 (LTS) con Spring Boot 3.0
• Por qué: Ecosistema consolidado en SAS, compatibilidad con infraestructura existente, soporte a largo plazo, excelente para APIs REST
• Alternativas consideradas: Python (descartado por rendimiento), Node.js (descartado por falta de experiencia del equipo), Go (descartado por curva de aprendizaje)
Caso 2: Script de Migración de Datos entre Bases de Datos
Contexto: Migrar datos históricos de pacientes desde base de datos Oracle legacy a PostgreSQL.
Decisión de tecnología:
• Lenguaje: Python 3.11 con librerías cx_Oracle y psycopg2
• Por qué: Rápido de desarrollar, excelente para ETL, librerías maduras para ambas BDs, fácil manejo de errores y logging
Caso 3: Interfaz Web de Consulta de Citas
Contexto: Portal web para que pacientes consulten sus citas.
Decisión de tecnología:
• Frontend: Angular 15 + TypeScript
• Backend: Java Spring Boot (API REST)
• Por qué: Angular es el estándar en aplicaciones corporativas SAS, TypeScript mejora mantenibilidad, Spring Boot ya usado en otros sistemas
6.2. Selección de Lenguaje según Requisitos
| Requisito | Lenguaje Recomendado | Justificación |
|---|---|---|
| Aplicación empresarial crítica | Java, C# | Robustez, escalabilidad, soporte empresarial |
| Script de automatización | Python, Bash, PowerShell | Desarrollo rápido, expresividad |
| Interfaz web interactiva | JavaScript (React, Angular, Vue) | Estándar de facto para frontend web |
| Análisis de datos / BI | Python, R | Ecosistema de librerías científicas |
| Microservicio de alto rendimiento | Go, Rust, Java | Rendimiento, concurrencia, bajo overhead |
| Aplicación de escritorio Windows | C# (.NET WPF/WinForms) | Integración nativa con Windows |
| Procesamiento de texto / logs | Python, Perl, awk/sed | Expresiones regulares, manipulación strings |
🎯 7. Mapa Conceptual del Tema
📝 8. Cuestionario de Preguntas (35 Preguntas)
Aquí tienes 35 preguntas tipo test basadas en el tema Y en preguntas reales de exámenes anteriores del SAS. Practica con ellas hasta que las domines.
Por qué las otras son incorrectas:
A) El compilador es javac, no la JVM.
C) La biblioteca de clases es la Java API, no la JVM.
D) La JVM no es un sistema operativo, sino un proceso que se ejecuta sobre un SO.
Por qué las otras son incorrectas:
A) Python es de alto nivel, muy alejado del hardware.
C) Python es multiparadigma: soporta POO, funcional, imperativo, etc.
D) No requiere compilación previa (aunque genera bytecode .pyc internamente).
Matiz importante: Con técnicas modernas como JIT (Just-In-Time compilation) en Java o PyPy en Python, la diferencia se reduce, pero en general, el código compilado sigue siendo más rápido.
Por qué las otras son incorrectas:
A) Un compilador traduce TODO el código ANTES de la ejecución, no durante.
B) Un preprocesador realiza transformaciones textuales previas a la compilación.
C) Un ensamblador traduce ensamblador a código máquina, pero no durante la ejecución.
Java, Ruby y Python sí son lenguajes orientados a objetos (aunque Python y Ruby también soportan otros paradigmas).
Nota: C++ sí es orientado a objetos (extensión de C con POO).
Python, Ruby y Perl son lenguajes de servidor principalmente, no se ejecutan en el navegador (aunque existen proyectos experimentales como Brython o Pyodide).
Por qué las otras son incorrectas:
A) ASP.NET es framework backend de Microsoft para .NET.
C) Django es framework backend de Python.
D) Spring es framework backend de Java.
Por qué las otras son incorrectas:
A) Java es multiplataforma, no solo Windows.
B) Java compila a bytecode, no a código máquina específico.
D) No requiere recompilación, el bytecode es universal.
+ se usa para concatenar strings.Ejemplo:
"Hola" + " " + "SAS" → «Hola SAS»Nota: El operador
* se usa para repetir strings:"A" * 3 → «AAA»
enviarNotificacion() aunque cada una lo implemente de forma diferente (SMS, email, push).Diferencias:
• Herencia: Una clase adquiere propiedades de otra.
• Encapsulación: Ocultar detalles internos.
• Abstracción: Simplificar la complejidad.
"3" + 5 → «35» (convierte número a string).Por qué las otras son incorrectas:
A) Python es dinámico y FUERTE.
C) Java es ESTÁTICO y fuerte.
D) C es ESTÁTICO y débil.
git push sube (push) los commits locales al repositorio remoto.Diferencias:
• git pull: Descarga y fusiona cambios desde el remoto.
• git commit: Guarda cambios en el historial LOCAL.
• git upload: No existe este comando en Git.
Por qué las otras son incorrectas:
A) La velocidad de ejecución es MENOR en interpretados.
C) C++ ofrece MAYOR control sobre hardware (punteros, gestión manual de memoria).
D) La detección temprana de errores es ventaja de lenguajes COMPILADOS.
javac compila archivos .java (código fuente) a archivos .class (bytecode).Aclaraciones:
• .java → Código fuente
• .class → Bytecode compilado
• .jar → Archivo comprimido que contiene múltiples .class
• .exe → Ejecutable de Windows (Java no genera .exe directamente)
Lenguajes funcionales puros: Haskell, Elm
Lenguajes que soportan programación funcional: Python, JavaScript, Scala, F#
#include, #define, #ifdef, etc.El código resultante del preprocesador es lo que ve el compilador.
Por qué las otras son incorrectas:
B) HTML es lenguaje de marcado para estructura web.
C) CSS es lenguaje de estilos para presentación.
D) SQL es para consultas a BD, pero no para crear APIs completas.
Por qué las otras son incorrectas:
B) DevOps promueve colaboración y transparencia entre equipos.
C) DevOps INTEGRA desarrollo y operaciones, no los separa.
D) La automatización es FUNDAMENTAL en DevOps (CI/CD pipelines).
Java, Ruby y C# son lenguajes orientados a objetos profesionales.
Alternativas: Python también sería válido, pero Bash es más directo para scripts de sistema en Linux.
Usado en: JVM (Java), CLR (.NET), PyPy (Python), V8 (JavaScript)
El ensamblador es más simple porque hay correspondencia directa entre instrucciones.
Esta pregunta es muy probable en el examen porque evalúa conocimiento específico del SAS.
Por eso se usa mucho en BI corporativo del SAS, análisis de datos asistenciales, y proyectos de IA.
Otros componentes de la JVM:
• JIT Compiler: Optimiza bytecode a código nativo
• ClassLoader: Carga clases dinámicamente
• Bytecode Verifier: Verifica seguridad del bytecode
IntelliJ IDEA, VS Code y Eclipse son IDEs.
Git es una herramienta que se INTEGRA en los IDEs, pero no es un IDE en sí mismo.
Cada vez más usado en el SAS para desarrollo web (Angular está escrito en TypeScript).
• Muy bajo nivel, acceso directo al hardware
• Gestión manual de memoria (punteros)
• Alto rendimiento
• Portabilidad (con precauciones)
Python y JavaScript son demasiado alto nivel. SQL es para bases de datos.
Es el estándar para automatización en entornos Windows Server del SAS.
Fases típicas de compilación:
1. Análisis léxico (tokenización)
2. Análisis sintáctico (AST)
3. Análisis semántico (verificación de tipos)
4. Optimización
5. Generación de código
• Configuración mínima (convention over configuration)
• Servidor embebido (Tomcat, Jetty) – no necesitas servidor externo
• Arranque rápido de microservicios
• Autoconfiguración inteligente
Por eso es el estándar en el SAS para nuevos desarrollos.
Los lenguajes de scripting son interpretados, de desarrollo rápido, típicamente usados para automatización, gluing de sistemas, y tareas específicas (Python, JavaScript, Bash, Perl, Ruby, etc.).
• Definir endpoints REST fácilmente con anotaciones
• Integración con seguridad (OAuth2, JWT)
• Validación de datos
• Documentación automática (Swagger/OpenAPI)
• Integración con bases de datos (JPA/Hibernate)
Las otras opciones no son apropiadas para APIs REST.
📚 9. Referencias Normativas y Bibliográficas
Documentación Técnica Oficial:
- Oracle Java Documentation – https://docs.oracle.com/en/java/
- Python Documentation – https://docs.python.org/
- JavaScript MDN Web Docs – https://developer.mozilla.org/
- Microsoft .NET Documentation – https://docs.microsoft.com/dotnet/
- Spring Framework Documentation – https://spring.io/projects/spring-framework
- Git Documentation – https://git-scm.com/doc
Bibliografía Recomendada:
- «Effective Java» (3rd Edition) – Joshua Bloch
- «Clean Code» – Robert C. Martin
- «The Pragmatic Programmer» – Andrew Hunt, David Thomas
- «Python for Data Analysis» – Wes McKinney
- «You Don’t Know JS» – Kyle Simpson
- «Pro Git» – Scott Chacon, Ben Straub
Recursos Online del SAS:
- Portal de Desarrollo SAS (acceso interno)
- GitLab Corporativo SSPA
- Documentación técnica de Diraya (Wiki interna)
- Guías de desarrollo del SAS (Confluence)
🎓 10. Conclusiones y Estrategia de Estudio
Mira, hemos cubierto MUCHO terreno en este tema. Si has llegado hasta aquí, ya tienes una base sólida. Pero déjame darte algunos consejos finales basados en mi experiencia preparando opositores…
10.1. Ideas Clave para Recordar (The Big Five)
1. JVM y Portabilidad de Java – Esta pregunta cae SIEMPRE. Tienes que tener clarísimo qué es la JVM, cómo funciona el bytecode, y qué significa WORA. Si te preguntan «¿Qué es la JVM?», la respuesta es: «Un entorno de ejecución que convierte bytecode a instrucciones nativas del procesador».
2. Compilación vs Interpretación – Domina las diferencias. Los compilados son más rápidos en ejecución pero más lentos en desarrollo. Los interpretados son al revés. Y no olvides las soluciones híbridas (Java con JIT).
3. Tipado: Estático/Dinámico y Fuerte/Débil – Son conceptos ortogonales. Python es dinámico y fuerte. Java es estático y fuerte. JavaScript es dinámico y débil. C es estático y débil.
4. POO: Los 4 Pilares – Encapsulación, Herencia, Polimorfismo, Abstracción. Sobre todo, entiende el polimorfismo (interfaz común para objetos diferentes).
5. Tecnologías del SAS – Diraya = Java Spring. Scripts = Python/Bash. Frontend = JavaScript (Angular). APIs = Spring Boot. Esto es conocimiento aplicado que demuestra que sabes del SAS.
10.2. Estrategia de Memorización
Para Conceptos Teóricos: Usa tarjetas Anki o flashcards. Una cara: «¿Qué es un intérprete?». Otra cara: «Programa que traduce y ejecuta código línea a línea en tiempo de ejecución». Repasa espaciadamente.
Para Lenguajes y Características: Crea una tabla comparativa en Excel o Google Sheets con columnas: Lenguaje, Tipado, Paradigma, Compilado/Interpretado, Uso en SAS. Rellénala y revísala regularmente.
Para Código: No basta con leer código, tienes que ESCRIBIRLO. Instala Java, Python, y practica ejemplos básicos. Entender cómo funciona el ciclo compilar-ejecutar en Java te ayudará a responder preguntas.
10.3. Aplicabilidad Práctica en tu Futuro Puesto
Como TFA-STI del SAS, vas a:
• Dar soporte a Diraya – Necesitas entender Java, Spring, bases de datos Oracle/PostgreSQL.
• Automatizar tareas – Python y Bash serán tus mejores amigos para scripts de mantenimiento, backups, procesamiento de logs, etc.
• Integrar sistemas – Entender cómo se comunican aplicaciones en Java con aplicaciones en .NET, o cómo exponer APIs REST.
• Resolver incidencias – Cuando un sistema falla, saber leer stack traces de Java, entender errores de tipado en JavaScript, o depurar scripts de Python es crucial.
• Participar en desarrollos – Aunque no seas desarrollador full-time, participarás en proyectos de evolución de sistemas, y necesitas hablar el mismo idioma que los developers.
10.4. Últimos Consejos
Este tema es TÉCNICO y PRÁCTICO. No es de los que puedes estudiar solo leyendo, necesitas ENTENDER los conceptos. Mi recomendación:
1. Instala un entorno de desarrollo – Bájate IntelliJ IDEA Community (gratis), instala Java 17, y haz el «Hola Mundo». Compila con javac, ejecuta con java, y mira los archivos .class generados. Eso te quedará grabado para siempre.
2. Practica con las 35 preguntas – Hazlas hasta que las domines. Luego busca exámenes de otros años y haz las preguntas de lenguajes de programación que encuentres.
3. Conecta con otros temas – Este tema se relaciona con el Tema 14 (Ciclo de vida del software), Tema 15 (Metodologías ágiles), Tema 17 (Herramientas de desarrollo y Git). Estudiarlos juntos refuerza el aprendizaje.
4. No te agobies con los detalles – Es imposible saber TODO de TODOS los lenguajes. Céntrate en los conceptos fundamentales y en los lenguajes más usados en el SAS (Java, Python, JavaScript).
Has trabajado duro para llegar hasta aquí. Este tema es denso, pero si lo dominas, tienes una ventaja competitiva enorme en el examen. La mayoría de opositores estudia de forma superficial, memorizando sin entender. Tú no. Tú ENTIENDES cómo funciona un compilador, qué es la JVM, por qué Python es interpretado, y cuándo usar cada lenguaje en el SAS.
Eso te convierte en un técnico de verdad, no solo en un opositor.
Sigue así. La plaza está cerca.
– Esteban Castro
