Curricula CS-UNI
5.7. CS100. Introducción a la Ciencia de la Computación (Obligatorio)

5.7. CS100. Introducción a la Ciencia de la Computación (Obligatorio)

  • Semestre: 2do Sem. Créditos: 3
  • Horas del curso: Teoría: 2 horas; Práctica: 2 horas;
  • Sílabo:

    Español

    English
  • Prerrequisitos: Ninguno

Figura 5.7: Mapa de Conexión. CS100 Introducción a la Ciencia de la Computación

5.7.1. Justificación

Este curso sirve como base para comprender los conceptos fundamentales del pensamiento computacional aplicables en diversas profesiones.

El curso proporciona, partiendo desde cero, una visión panorámica de: pensamiento computacional introductorio, almacenamiento de datos, arquitectura de computadoras, sistemas operativos, redes e Internet, algoritmos, métodos de ordenamiento, ingeniería de software, bases de datos, estructuras de datos, ingeniería de software, gráficos por computadora. Además, todos los conceptos son integrados con los nuevos conceptos de la inteligencia artificial.

Diseñado como un curso introductorio a la Ciencia de la Computación, los conceptos se presentan de manera lúdica y utilizando una metodología de Aprendizaje Activo. A lo largo del curso, se fomenta la participación activa de la audiencia, similar a una representación teatral.

Las áreas de conocimiento relacionadas cubiertas están directamente alineadas con los Planes de Estudio de Computación ACM/IEEE-CS.

El curso no requiere conocimientos previos en temas de manejo de computadoras y puede ser tomado por estudiantes de cualquier campo.

5.7.2. Objetivos Generales

1.
Introducir los conceptos fundamentales del Pensamiento Computacional y la Ciencia de la Computación a estudiantes de cualquier formación profesional.
2.
Desarrollar su capacidad de abstracción.
3.
Comprender cómo se aplica el Pensamiento Computacional en cada una de sus profesiones.
4.
Aplicar conceptos avanzados de manera simplificada en cualquier carrera.

5.7.3. Contribución a los resultados (Outcomes)

AG-C08) Análisis de Problemas: Identifica, formula y analiza problemas complejos de computación. (Familiarity)

AG-C02) Ética: Aplica principios éticos y se compromete con la ética profesional y las normas de la práctica profesional de la computación. (Familiarity)

AG-C12) Aplica la teoría de la ciencia de la computación y los fundamentos de desarrollo de software para producir soluciones basadas en computadora. (Familiarity)

5.7.4. Contenido

5.7.4.1. Pensamiento Computacional (Parte I) (4 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Explicación del sistema de evaluación.
2.
Instrucciones generales del curso.
3.
Definición de Computación.
4.
La Computación como un binomio Humano-Computadora.
5.
Distorsiones en la definición de computación.
6.
La Computación como la automatización de la abstracción.
7.
Computación e Ingeniería: similitudes y diferencias.
8.
Resolución de problemas algorítmicos.
9.
Dinámica: Comprender la ejecución de un algoritmo a velocidad humana.

Aprendizaje esperado (Learning Outcomes)

1.
Aplicar los conceptos fundamentales de la computación en situaciones de la vida real. [Usar]
2.
Identificar distorsiones de la Computación en situaciones de la vida real. [Usar]
3.
Identificar claramente al menos 3 contextos de uso de la palabra Engineeren inglés. [Evaluar]
4.
Identificar las limitaciones humanas para resolver problemas computacionales. [Usar]
5.7.4.2. Pensamiento Computacional (Parte II) (4 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Descomposición (Dividir un problema en piezas más pequeñas).
2.
Abstracción (Enfocarse en lo importante).
3.
Reconocimiento de patrones (Identificar secuencias similares basadas en problemas previos).
4.
Diseño de algoritmos.

Aprendizaje esperado (Learning Outcomes)

1.
Aplicar el Pensamiento Computacional a problemas del mundo real. [Usar]

5.7.4.3. Conceptos Generales (4 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Numeración binaria vs. decimal.
2.
Representación de caracteres: la tabla ASCII.
3.
Búsqueda binaria.
4.
Complejidad computacional de un algoritmo.

Aprendizaje esperado (Learning Outcomes)

1.
Aplicar varios sistemas de numeración a problemas del mundo real. [Usar]
2.
Comprender la representación interna de caracteres en las tablas ASCII y UTF-8. [Familiarizarse]
3.
Aplicar la estrategia algorítmica de Divide y Vencerás. [Usar]
4.
Determinar análisis básicos de complejidad algorítmica. [Usar]
5.7.4.4. Representación de Datos a Nivel de Máquina (4 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Visión general e historia de la arquitectura de computadoras
2.
Bits, bytes y palabras
3.
Representaciones sin signo, con signo y complemento a dos
4.
Representación de datos numéricos y bases numéricas:
a)
Punto fijo
b)
Punto flotante
5.
Representación de datos no numéricos
6.
Representación de registros, arreglos y tipos de datos UTF

Aprendizaje esperado (Learning Outcomes)

1.
Discutir por qué todo en las computadoras son datos, incluyendo instrucciones [Debatir]
2.
Explicar cómo las representaciones numéricas de longitud fija pueden afectar la exactitud y precisión [Explicar]
3.
Describir cómo se almacenan los enteros negativos en representaciones de magnitud con signo y complemento a dos [Describir]
4.
Discutir cómo diferentes formatos pueden representar datos numéricos [Debatir]
5.
Explicar la representación a nivel de bits de datos no numéricos, como caracteres, cadenas, registros y arreglos [Explicar]
6.
Traducir datos numéricos de un formato a otro [Traducir]
7.
Describir cómo un sumador único (sin detección de desbordamiento) puede manejar tanto entrada con signo (complemento a dos) como sin signo (binario) sin "saber"qué formato está usando una entrada dada [Describir]
5.7.4.5. Abstracción y Representación de Programas (2 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Programas que toman (otros) programas como entrada, como intérpretes, compiladores, verificadores de tipos, generadores de documentación
2.
Componentes de un lenguaje:
a)
Definiciones de alfabetos, delimitadores, oraciones, sintaxis y semántica
b)
Sintaxis vs semántica
3.
Programa como un conjunto de oraciones significativas no ambiguas
4.
Abstracciones básicas de programación: constantes, variables, declaraciones (incluyendo declaraciones anidadas), comando, expresión, asignación, selección, iteración definida e indefinida, iteradores, función, procedimiento, módulos, manejo de excepciones
5.
Tipos de variables: estáticas, locales, no locales (nonlocal), globales; necesidad y problemas con variables no locales y globales.
6.
Reglas de ámbito (scope): estático vs dinámico; visibilidad de variables; efectos secundarios (side-effects).
7.
Entorno (environment) vs almacén (store) y sus propiedades
8.
Abstracción de datos y de control
9.
Mecanismos para intercambio de información entre unidades de programa como procedimientos, funciones y módulos: variables no locales, variables globales, paso de parámetros, importación-exportación entre módulos
10.
Representación de instrucciones de bajo nivel como instrucciones de máquina virtual, lenguaje ensamblador y representación binaria

Aprendizaje esperado (Learning Outcomes)

1.
Ilustrar el ámbito de variables y visibilidad usando programas simples [Aplicar]
2.
Ilustrar diferentes tipos de paso de parámetros usando un lenguaje de programación pseudo simple [Aplicar]
3.
Explicar el efecto secundario usando variables globales y no locales y cómo corregir tales programas [Explicar]
4.
Explicar cómo los programas que procesan otros programas tratan a los otros programas como sus datos de entrada [Explicar]
5.
Describir una gramática y un árbol de sintaxis abstracta para un lenguaje pequeño [Describir]
5.7.4.6. Fundamentos de Criptografía (2 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Basic concepts on Cryptography
2.
Public-keys, Private-keys

Aprendizaje esperado (Learning Outcomes)

1.
Explicar el papel de la criptografía en el soporte de la seguridad y la privacidad [Explicar]
2.
Discutir los riesgos de inventar los propios métodos criptográficos [Debatir]
3.
Discutir la importancia de los números primos en criptografía y explicar su uso en algoritmos criptográficos [Debatir]
4.
Implementar y criptoanalizar cifrados clásicos [Implementar]
5.7.4.7. Gestión de Memoria (4 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Revisión de memoria física, traducción de direcciones y hardware de gestión de memoria. Ver también: Arquitectura y Organización (AR) -MemoryHierarchy, Fundamentos Matemáticos y Estadísticos (MSF) -Discrete
2.
Impacto de la jerarquía de memoria incluyendo concepto de caché, búsqueda en caché y almacenamiento en caché por CPU en mecanismos y políticas del sistema operativo Ver también: Arquitectura y Organización (AR) -MemoryHierarchy, Fundamentos de Sistemas (SF) -Performance
3.
Direccionamiento lógico y físico, virtualización de espacio de direcciones. Ver también: Arquitectura y Organización (AR) -MemoryHierarchy, Fundamentos Matemáticos y Estadísticos (MSF) -Discrete
4.
Conceptos de paginación, reemplazo de páginas, trashing y asignación de páginas y marcos
5.
Técnicas de asignación/desasignación/almacenamiento (algoritmos y estructura de datos) rendimiento y flexibilidad
a)
Arenas, asignadores de losas (slab allocators), listas libres, clases de tamaño, páginas de tamaño heterogéneo (páginas enormes)
6.
Almacenamiento en caché de memoria y coherencia de caché y el efecto de vaciar la caché para evitar vulnerabilidades de ejecución especulativaVer también: Arquitectura y Organización (AR) -FunctionalOrganization, Arquitectura y Organización (AR) -MemoryHierarchy, Fundamentos de Sistemas (SF) -Performance)
7.
Memoria virtual: aprovechando el hardware de memoria virtual para servicios del SO y eficiencia

Aprendizaje esperado (Learning Outcomes)

1.
Explicar jerarquía de memoria y compensaciones costo-rendimiento [Explicar]
2.
Resumir los principios de memoria virtual aplicados a almacenamiento en caché y paginación [Resumir]
3.
Evaluar las compensaciones en términos de tamaño de memoria (memoria principal, memoria caché, memoria auxiliar) y velocidad del procesador [Evaluar]
4.
Describir la razón y el uso de la memoria caché (rendimiento y proximidad, cómo las cachés complican el aislamiento y la abstracción de máquina virtual) [Describir]
5.7.4.8. Rol y Propósito de los Sistemas Operativos (2 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Los sistemas operativos median entre el hardware de propósito general y el software específico de la aplicación.
2.
Funciones universales del sistema operativo (por ejemplo, proceso, interfaces de usuario y dispositivos, persistencia de datos)
3.
Influencias de seguridad, redes, multimedia, computación paralela y distribuida

Aprendizaje esperado (Learning Outcomes)

1.
Comprender los objetivos y funciones de los sistemas operativos modernos [Explicar]
2.
Evaluar los problemas de diseño en diferentes escenarios de uso (por ejemplo, sistema operativo en tiempo real, móvil, servidor) [Evaluar]
3.
Comprender cómo la evolución y la estabilidad son deseables y mutuamente antagónicas en las funciones del sistema operativo [Explicar]
5.7.4.9. Principios del Sistema Operativo (2 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Diseño y enfoques de software del sistema operativo (por ejemplo, monolítico, en capas, modular, micro-kernel, unikernel)
2.
Abstracciones, procesos y recursos
3.
La evolución del vínculo entre la arquitectura del hardware y las funciones del sistema operativo
4.
Aprovechamiento de interrupciones desde el nivel de hardware: rutinas de servicio e implementaciones. Ver también: Arquitectura y Organización (AR) -AssemblyLevelMachineOrganization
a)
Interrupciones de temporizador para implementar segmentos de tiempo
b)
Interrupciones de E/S para poner hilos bloqueados en espera sin sondeo

Aprendizaje esperado (Learning Outcomes)

1.
Comprender cómo la aplicación de enfoques de diseño de software al diseño/implementación de sistemas operativos (por ejemplo, en capas, modular, etc.) afecta la robustez y mantenibilidad de un sistema operativo [Explicar]
2.
Categorizar llamadas al sistema por propósito [Categorizar]
3.
Aplicar técnicas de SO para aislamiento, protección y rendimiento a través de las funciones del SO (por ejemplo, similitudes de inanición en planificación de procesos, planificación de solicitudes de disco, semáforos, etc.) y más allá [Aplicar]
5.7.4.10. Fundamentos de Redes y Comunicaciones (4 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Importancia de las redes en la informática contemporánea, y desafíos asociados. Ver también: Sociedad, ética y la Profesión (SEP) -Context, Sociedad, ética y la Profesión (SEP) -Privacy
2.
Organización de Internet (por ejemplo, usuarios, Proveedores de Servicios de Internet, sistemas autónomos, proveedores de contenido, redes de entrega de contenido)
3.
Capas y sus roles (aplicación, transporte, red, enlace de datos y física)
4.
Elementos de red (por ejemplo, routers, switches, hubs, puntos de acceso y hosts)
5.
Conceptos básicos de colas (por ejemplo, relación con latencia, congestión, niveles de servicio, etc.)

Aprendizaje esperado (Learning Outcomes)

1.
Articular la organización de Internet [Articular]
2.
Listar y definir la terminología de red apropiada [Listar/Enumerar]
3.
Describir la estructura en capas de una arquitectura de red típica [Describir]
5.7.4.11. Aplicaciones en Red (4 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Esquemas de denominación y direccionamiento (por ejemplo, DNS e Identificadores Uniformes de Recursos)
2.
Paradigmas de aplicaciones distribuidas (por ejemplo, cliente/servidor, peer-to-peer, nube, edge y fog). Ver también: Computación Paralela y Distribuida (PDC) -Communication, Computación Paralela y Distribuida (PDC) -Coordination
3.
Diversidad de demandas de aplicaciones en red (por ejemplo, latencia, ancho de banda y tolerancia a pérdidas). Ver también: Computación Paralela y Distribuida (PDC) -Communication, Sociedad, ética y la Profesión (SEP) -Sustainability, Sociedad, ética y la Profesión (SEP) -Context
4.
Cobertura de protocolos de capa de aplicación (por ejemplo, HTTP)
5.
Interacciones con APIs de TCP, UDP y Socket. Ver también: Computación Paralela y Distribuida (PDC) -Programs

Aprendizaje esperado (Learning Outcomes)

1.
Definir los principios de denominación, direccionamiento y localización de recursos [Definir]
2.
Analizar las necesidades de demandas específicas de aplicaciones en red [Analizar]
5.7.4.12. Marco de Análisis de Complejidad (2 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Marco de Análisis de Complejidad:
a)
Rendimiento de un algoritmo en el mejor caso, caso promedio y peor caso
b)
Mediciones empíricas y relativas (Orden de Crecimiento)
c)
Tamaño de entrada y operaciones primitivas
d)
Eficiencia de tiempo y espacio
2.
Mediciones empíricas de rendimiento
3.
Compromisos tiempo-espacio en algoritmos

Aprendizaje esperado (Learning Outcomes)

1.
Preparar una presentación que explique a estudiantes de primer año los conceptos básicos de complejidad algorítmica incluyendo comportamiento de algoritmo en mejor caso, caso promedio y peor caso, notaciones Big-O, Omega y Theta, clases de complejidad, compromisos tiempo-espacio, medición empírica e impacto en problemas prácticos [Explicar]
2.
Para cada algoritmo en la unidad Fundamentos Algorítmicos (AL) -FoundationalDataStructuresAlgorithms, explicar su clase de complejidad de tiempo de ejecución y por qué pertenece a esta clase [Explicar]
3.
Evaluar informalmente la clase de complejidad fundamental de algoritmos simples [Evaluar]
4.
Desarrollar estudios empíricos para determinar y validar hipótesis sobre la complejidad de tiempo de ejecución de varios algoritmos ejecutando algoritmos con entradas de varios tamaños y comparando el rendimiento real con el análisis teórico [Crear]
5.
Explicar ejemplos que ilustren los compromisos tiempo-espacio de algoritmos [Explicar]
6.
Explicar cómo el balance del árbol afecta la eficiencia de las operaciones de árbol de búsqueda binaria [Explicar]
5.7.4.13. Notación Asintótica y Clases de Complejidad (1 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Análisis de complejidad asintótica (cotas promedio y peor caso):
a)
Notaciones formales Big-O, Big-Omega y Big-Theta
b)
Clases de Complejidad Fundamentales y Ejemplos/Problemas Representativos:
1)
O(1) Constante (por ejemplo, acceso a arreglo)
2)
O(log 2n) Logarítmica (por ejemplo, búsqueda binaria)
3)
O(n) Lineal (por ejemplo, búsqueda lineal)
4)
O(nlog 2n) Log Lineal (por ejemplo, mergesort)
5)
O(n2) Cuadrática (por ejemplo, ordenamiento por selección)
6)
O(nc) Polinomial (por ejemplo, O(n3) eliminación gaussiana)
7)
O(2n) Exponencial (por ejemplo, Mochila, Satisfactibilidad (SAT), Viajante de Comercio (TSP), todos los subconjuntos)
8)
O(n!) Factorial (por ejemplo, circuito hamiltoniano, todas las permutaciones)

Aprendizaje esperado (Learning Outcomes)

1.
Usando ejemplos, explicar cada una de las clases de complejidad fundamentales en esta unidad [Explicar]
2.
Para cada clase de complejidad fundamental en esta unidad, explicar un algoritmo que demuestre la complejidad de tiempo de ejecución asociada [Explicar]
3.
Explicar a una audiencia no técnica la importancia de los algoritmos tratables versus intratables usando una explicación intuitiva de la complejidad Big-O [Explicar]
5.7.4.14. Análisis de Complejidad II: Recursión, Amortización y Cotas Ajustadas (1 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Notaciones Little-o, Little-Omega y Little Theta

Aprendizaje esperado (Learning Outcomes)

1.
Dado un problema para programar para el cual puede haber varios enfoques algorítmicos, evaluarlos y determinar cuáles son factibles, y seleccionar uno que sea óptimo en implementación y comportamiento de tiempo de ejecución [Evaluar]
5.7.4.15. Estructuras de Datos Fundamentales (3 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Tipo de Dato Abstracto (ADT) y operaciones sobre un ADT:
a)
Operaciones de diccionario (insertar, eliminar, encontrar)
2.
Arreglos:
a)
Numéricos vs no numéricos, cadenas de caracteres
b)
Unidimensionales (vector) vs multidimensionales (matriz)
3.
Registros/Estructuras/Tuplas y Objetos
4.
Listas enlazadas (por razones históricas):
a)
Simples vs Dobles y Lineales vs Circulares
5.
Pilas
6.
Colas y deques:
a)
Cola de prioridad basada en montículo
7.
Tablas/mapas hash:
a)
Resolución de colisiones y complejidad (por ejemplo, sondeo, encadenamiento, rehash)
8.
árboles:
a)
Binarios, n-arios y árboles de búsqueda
b)
Balanceados (por ejemplo, AVL, Rojo-Negro, Montículo)

Aprendizaje esperado (Learning Outcomes)

1.
Para cada ADT/Estructura de Datos en esta unidad:
a)
Explicar su definición, propiedades, representación(es) y operaciones de ADT asociadas.
b)
Explicar paso a paso cómo las operaciones de ADT asociadas con la estructura de datos la transforman.

[Explicar]

2.
Explicar cómo se maneja la evitación de colisiones y la resolución de colisiones en tablas hash [Explicar]
3.
Explicar la propiedad de montículo y el uso de montículos como una implementación de una cola de prioridad [Explicar]
5.7.4.16. Algoritmos Fundamentales (3 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Grafos (por ejemplo, [no]dirigidos, [a]cíclicos, [no]conexos y [no]ponderados):
a)
Representación de grafos: lista de adyacencia vs matriz
2.
Algoritmos de búsqueda:
a)
Complejidad O(n) (por ejemplo, búsqueda lineal/secuencial en arreglo/lista)
b)
Complejidad O(log 2n) (por ejemplo, búsqueda binaria)
c)
Complejidad O(log bn) (por ejemplo, búsqueda en árbol no informada en profundidad/amplitud)
3.
Algoritmos de ordenamiento (por ejemplo, estables, inestables):
a)
Complejidad O(n2) (por ejemplo, inserción, selección)
b)
Complejidad O(nlog n) (por ejemplo, quicksort, merge, timesort)
4.
Algoritmos de grafos:
a)
Camino más corto (por ejemplo, Dijkstra, Floyd)
b)
árbol de expansión mínima (por ejemplo, Prim, Kruskal)
5.
Algoritmos de ordenamiento:
a)
Complejidad O(nlog n) heapsort
b)
Pseudo O(n) complejidad (por ejemplo, bucket, counting, radix)
6.
Algoritmos de grafos:
a)
Clausura transitiva (por ejemplo, Warshall)
b)
Ordenamiento topológico

Aprendizaje esperado (Learning Outcomes)

1.
Para cada algoritmo en esta unidad explicar paso a paso cómo opera el algoritmo [Explicar]
2.
Para cada enfoque algorítmico (por ejemplo, ordenamiento) en esta unidad aplicar un ejemplo prototípico del enfoque (por ejemplo, ordenamiento por mezcla) [Aplicar]
3.
Dados los requisitos para un problema, desarrollar múltiples soluciones usando varias estructuras de datos y algoritmos. Posteriormente, evaluar la idoneidad, fortalezas y debilidades seleccionando un enfoque que satisfaga mejor los requisitos [Crear]
4.
Explicar factores más allá de la eficiencia computacional que influyen en la elección de algoritmos, como el tiempo de programación, la mantenibilidad y el uso de patrones específicos de la aplicación en los datos de entrada [Explicar]
5.7.4.17. Algoritmos Avanzados (2 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Algoritmos de criptografía (por ejemplo, SHA-256)
2.
Algoritmos paralelos

Aprendizaje esperado (Learning Outcomes)

1.
Una apreciación de la computación cuántica y su aplicación a ciertos problemas [Explicar]
5.7.4.18. Conceptos Fundamentales de Sistemas de Bases de Datos (4 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Propósito y ventajas de los sistemas de bases de datos
2.
Componentes de los sistemas de bases de datos
3.
Diseño de funciones fundamentales de DBMS (por ejemplo, mecanismos de consulta, gestión de transacciones, gestión de búfer, métodos de acceso)
4.
Gestión de transacciones
5.
Normalización
6.
Enfoques para gestionar grandes volúmenes de datos (por ejemplo, sistemas de bases de datos NoSQL, uso de MapReduce)
7.
Bases de datos distribuidas/sistemas basados en la nube
8.
Uso de un lenguaje de consulta declarativo

Aprendizaje esperado (Learning Outcomes)

1.
Identificar al menos cuatro ventajas que proporciona el uso de un sistema de base de datos [Analizar]
2.
Enumerar los componentes de un sistema de base de datos (relacional) [Enumerar]
3.
Defender el valor de la independencia de datos [Defender]
4.
Componer una consulta simple de selección-proyección-unión en SQL [Componer]
5.
Describir las ventajas de eliminar datos duplicados repetidos [Describir]
6.
Esbozar cómo MapReduce usa paralelismo para procesar datos eficientemente [Esquematizar/Esbozar]
5.7.4.19. Programación Orientada a Objetos I: Fundamentos (4 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Programación imperativa como subconjunto de la programación orientada a objetos.
2.
Diseño orientado a objetos:
a)
Descomposición en objetos que poseen estado y tienen comportamiento.
b)
Diseño de jerarquía de clases para modelado.
3.
Definición de clases: campos, métodos y constructores.
4.
Subclases, herencia (incluyendo herencia múltiple) y sobrescritura de métodos.
5.
Despacho dinámico: definición de llamada a método.
6.
Idiomas orientados a objetos para encapsulación:
a)
Privacidad, ocultación de datos y visibilidad de miembros de clase.
b)
Interfaces que revelan solo firmas de métodos.
c)
Clases base abstractas, rasgos (traits) y mixins.

Aprendizaje esperado (Learning Outcomes)

1.
Enumerar las diferencias entre los paradigmas de programación imperativa y orientada a objetos [Enumerar]
2.
Componer una clase a través del diseño, implementación y prueba para cumplir con los requisitos de comportamiento [Componer]
3.
Usar mecanismos de encapsulación orientados a objetos como interfaces y miembros privados [Usar]

5.7.4.20. Control de Versiones y CI/CD (2 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Gestión de configuración de software y control de versiones: Fundamentos de Desarrollo de Software (SDF) -Practices
a)
Configuración en control de versiones, builds/configuración reproducibles.
b)
Estrategias de ramificación en control de versiones. Ramas de desarrollo vs ramas de lanzamiento. Desarrollo basado en tronco (trunk-based development).
c)
Estrategias de fusión/rebase, cuando sean relevantes.
2.
Gestión de lanzamientos (release management).
3.
Automatización de procesos de software:
a)
Sistemas de construcción (build systems): el valor de builds rápidos, herméticos y reproducibles, comparar/contrastar enfoques para construir un proyecto.
b)
Integración Continua (CI): el uso de automatización y pruebas automatizadas para hacer una validación preliminar de que la revisión actual del tronco se construye y pasa las pruebas (básicas).
c)
Despliegue Continuo (CD): el uso de automatización para liberar de forma automática cada cambio que supera las pruebas hacia el entorno de producción, garantizando entregas frecuentes y confiables.
d)
Gestión de dependencias: actualización de dependencias externas/aguas arriba, gestión de paquetes, SemVer.
4.
Conceptos y mecanismos de integración de herramientas. Fundamentos de Desarrollo de Software (SDF) -Practices
5.
Uso de las facilidades de un IDE moderno: depuración, refactorización, búsqueda/indexación, asistentes de código basados en ML, etc. Fundamentos de Desarrollo de Software (SDF) -Practices

Aprendizaje esperado (Learning Outcomes)

1.
Describir la diferencia entre la gestión de configuración de software centralizada y distribuida [Describir]
2.
Describir cómo el control de versiones puede usarse para ayudar en la gestión de lanzamientos de software [Describir]
3.
Identificar elementos de configuración y usar una herramienta de control de código fuente en un proyecto pequeño basado en equipo [Analizar]
4.
Comprender el uso de sistemas de CI/CD como una fuente de verdad para el estado del código compartido del equipo (éxito en la construcción y pruebas) [Explicar]
5.
Demostrar la capacidad de usar herramientas de software para apoyar el desarrollo de un producto de software de tamaño mediano [Demostrar]

5.7.4.21. Ingeniería de Requisitos (2 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Describir requisitos funcionales usando, por ejemplo, casos de uso o historias de usuario.
a)
Usar al menos un método para documentar y estructurar requisitos funcionales.
b)
Comprender cómo el método apoya el diseño y la implementación.
c)
Fortalezas y debilidades de usar un enfoque específico.
2.
Obtención (elicitation) de requisitos.
a)
Fuentes de requisitos, por ejemplo, usuarios, administradores o personal de soporte.
b)
Métodos de recopilación de requisitos, por ejemplo, encuestas, entrevistas o análisis de comportamiento.
3.
Requisitos no funcionales, por ejemplo, seguridad, usabilidad o rendimiento, también llamados Atributos de Calidad. Sociedad, ética y la Profesión (SEP) -Sustainability
4.
Identificación y gestión de riesgos, incluyendo consideraciones éticas en torno al producto propuesto. Sociedad, ética y la Profesión (SEP) -ProfessionalEthics
5.
Comunicar y/o formalizar especificaciones de requisitos.
6.
Prototipado de una herramienta tanto para obtener como para validar/confirmar requisitos.
7.
Evolución del producto: cuando cambian los requisitos, cómo entender qué efecto tiene eso y qué cambios deben realizarse.
8.
Estimación de esfuerzo:
a)
Aprender técnicas para estimar mejor el esfuerzo requerido para completar una tarea;
b)
Practicar la estimación y compararla con cuánto tiempo toman las tareas;
c)
La estimación de esfuerzo es bastante difícil, por lo que es probable que los estudiantes se equivoquen en muchos casos, pero ver el proceso desarrollarse con su propio trabajo es valioso.

Aprendizaje esperado (Learning Outcomes)

1.
Comparar diferentes métodos de obtención de requisitos a lo largo de múltiples ejes [Comparar]
2.
Identificar diferencias entre dos métodos de describir requisitos funcionales (por ejemplo, entrevistas con clientes, estudios de usuarios) y las situaciones donde se preferiría cada uno [Analizar]
3.
Identificar qué comportamientos son requeridos, permitidos o prohibidos a partir de un conjunto dado de requisitos y una lista de comportamientos candidatos [Analizar]
4.
Recopilar un conjunto de requisitos para un sistema de software simple [Analizar]
5.
Identificar áreas de un sistema de software que deben cambiarse, dada una descripción del sistema y un conjunto de nuevos requisitos a implementar [Analizar]
6.
Identificar los requisitos funcionales y no funcionales en un conjunto de requisitos [Analizar]
7.
Estimar el tiempo para completar un conjunto de tareas, luego comparar las estimaciones con el tiempo real tomado [Estimar]
8.
Determinar una secuencia de implementación para un conjunto de tareas, respetando las dependencias entre ellas, con el objetivo de retirar el riesgo lo antes posible [Determinar]
9.
Escribir una especificación de requisitos para un sistema de software simple [Escribir]
5.7.4.22. Aprendizaje Automático I: Fundamentos (1 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Definición y ejemplos de una amplia variedad de tareas de aprendizaje automático:
a)
Aprendizaje supervisado:
1)
Clasificación
2)
Regresión
b)
Aprendizaje por refuerzo
c)
Aprendizaje no supervisado:
1)
Agrupamiento
2.
Ideas fundamentales:
a)
Teorema de no hay almuerzo gratis: ningún aprendiz puede resolver todos los problemas; las decisiones de diseño de representación tienen consecuencias.
b)
Fuentes de error e indecidibilidad en el aprendizaje automático
3.
Un aprendizaje supervisado simple basado en estadísticas como regresión lineal o árboles de decisión:
a)
Enfocarse en cómo funcionan sin entrar en detalles matemáticos o de optimización; suficiente para entender y usar implementaciones existentes correctamente

Aprendizaje esperado (Learning Outcomes)

1.
Describir las diferencias entre los tres estilos principales de aprendizaje (supervisado, por refuerzo y no supervisado) y determinar cuál es apropiado para un dominio de problema particular [Explicar]
2.
Diferenciar los términos: IA, aprendizaje automático y aprendizaje profundo [Evaluar]
3.
Explicar cómo funciona el aprendizaje automático como un proceso de optimización/búsqueda [Explicar]
5.7.4.23. Aprendizaje Automático III: Redes Neuronales y Ética (1 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Redes neuronales básicas:
a)
Fundamentos de comprensión de cómo funcionan las redes neuronales y su proceso de entrenamiento, sin detalles de los cálculos
b)
Introducción básica a redes neuronales generativas (por ejemplo, modelos de lenguaje grandes)
2.
ética para el Aprendizaje Automático:
a)
Enfocarse en datos reales, escenarios reales y estudios de caso
b)
Sesgo de conjunto de datos/algorítmico/de evaluación y consecuencias no deseadas
3.
Aprendizaje profundo:
a)
Redes feed-forward profundas (solo intuición, sin matemáticas)
b)
Redes neuronales convolucionales (solo intuición, sin matemáticas)
c)
Visualización de representaciones de características aprendidas de redes profundas
d)
Otras arquitecturas (NN generativas, NN recurrentes, transformers, etc.)
4.
ética para el Aprendizaje Automático:
a)
Continuar enfocándose en datos reales, escenarios reales y estudios de caso
b)
Privacidad
c)
Equidad
d)
Propiedad intelectual
e)
Explicabilidad

Aprendizaje esperado (Learning Outcomes)

1.
Describir el proceso de entrenamiento de redes neuronales y las representaciones aprendidas resultantes [Explicar]
2.
Visualizar el progreso del entrenamiento de una red neuronal a través de curvas de aprendizaje en un kit de herramientas establecido (por ejemplo, TensorBoard) y visualizar las características aprendidas de la red [Aplicar]
3.
Dada una aplicación real de aprendizaje automático, describir problemas éticos respecto a las elecciones de datos, pasos de preprocesamiento, selección de algoritmo y visualización/presentación de resultados [Aplicar]
5.7.4.24. Conceptos Fundamentales de Gráficos y Técnicas Interactivas (2 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Descripción general del pipeline de gráficos por computadora y sistemas interactivos
2.
Conceptos básicos de renderizado: rasterización, trazado de rayos (ray tracing), modelos de sombreado
3.
Teoría del color y espacios de color
4.
Sistemas de coordenadas y transformaciones
5.
Técnicas básicas de interacción: dispositivos de entrada, manejo de eventos
6.
Conceptos avanzados de renderizado: iluminación global (global illumination), renderizado basado en física
7.
Hardware gráfico y técnicas de aceleración
8.
Percepción humana y cognición visual

Aprendizaje esperado (Learning Outcomes)

1.
Explicar las etapas básicas del pipeline de gráficos por computadora [Explicar]
2.
Describir técnicas básicas de renderizado como rasterización y trazado de rayos [Describir]
3.
Aplicar teoría del color para diseñar gráficos visualmente efectivos [Aplicar]
4.
Implementar transformaciones de coordenadas para gráficos 2D y 3D [Implementar]
5.
Diseñar aplicaciones interactivas básicas utilizando dispositivos de entrada comunes y manejo de eventos [Diseñar]
6.
Comparar técnicas avanzadas de renderizado como iluminación global y renderizado basado en física [Comparar]
7.
Analizar el rol del hardware gráfico en acelerar tareas de renderizado [Analizar]
8.
Explicar cómo la percepción humana influye en el diseño de gráficos e interacción [Explicar]
5.7.4.25. Renderizado Aplicado y Técnicas (2 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Trazado de rayos (ray tracing): estructuras de aceleración, muestreo (sampling), sombreado
2.
Mapeo de texturas (texture mapping) y filtrado

Aprendizaje esperado (Learning Outcomes)

1.
Implementar algoritmos de rasterización para renderizado de primitivas [Implementar]
2.
Implementar trazado de rayos básico con estructuras de aceleración [Implementar]
5.7.4.26. Clase de cierre: ¿Cómo funciona un motor de búsqueda como Google? (2 horas) [Habilidades AG-C02,AG-C08,AG-C12]

Referencias Bibliográficas: [Brookshear and Brylow, 2019b]

Temas

1.
Análisis del problema.
2.
El índice no crece linealmente con el tamaño de la información indexada.
3.
El tiempo de respuesta no depende del tamaño de la "base de datos".
4.
El tiempo de respuesta no depende del número de ocurrencias encontradas.
5.
Combinar varias estructuras de datos para llegar a una solución.
6.
Analizar la escalabilidad de la solución.

Aprendizaje esperado (Learning Outcomes)

1.
Comprender los principios bajo los cuales se crea un motor de búsqueda [Usar]
2.
Aplicar correctamente estructuras de datos para resolver el problema [Usar]
3.
Aplicar conceptos relacionados con la complejidad algorítmica en un motor de búsqueda [Usar].

5.7.5. Referencias Bibliográficas

[Brookshear and Brylow, 2019b]

¿Encontraste una errata, un curso desactualizado, un enlace roto, o tienes una sugerencia? Cuéntanos.

Escanea para abrir en tu teléfono