Curricula CS-UNI
5.1. BIC01. Introducción a la Computación (Obligatorio)

5.1. BIC01. Introducción a la Computación (Obligatorio)

  • Semestre: 1er Sem. Créditos: 4
  • Horas del curso: Teoría: 2 horas; Laboratorio: 4 horas;
  • Sílabo:

    Español

    English
  • Prerrequisitos: Ninguno

Figura 5.1: Mapa de Conexión. BIC01 Introducción a la Computación

5.1.1. Justificación

Este es el primer curso de la secuencia de cursos introductorios a la Ciencia de la Computación. Este curso introduce a los participantes a los conceptos fundamentales de programación usando Python. Los temas incluyen tipos de datos, estructuras de control, funciones, listas, recursión, y la mecánica de ejecución, prueba y depuración. La programación es uno de los pilares de la Ciencia de la Computación; cualquier profesional en el área necesitará programar para materializar sus modelos y propuestas.

5.1.2. Objetivos Generales

1.
Introducir los conceptos fundamentales de programación.
2.
Desarrollar la capacidad de abstracción usando lenguaje de programación.
3.
Desarrollar habilidades de resolución de problemas mediante el pensamiento algorítmico.
4.
Comprender estructuras de datos básicas y sus aplicaciones.
5.
Dominar el lenguaje de programación Python para la resolución de problemas.

5.1.3. Contribución a los resultados (Outcomes)

AG-C08) Análisis de Problemas: Identifica, formula y analiza problemas complejos de 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. (Usage)

5.1.4. Contenido

5.1.4.1. Introducción a la Programación y su Historia (4 horas) [Habilidades AG-C08,AG-C12]

Referencias Bibliográficas: [Zelle, 2010Guttag, 2013Brookshear and Brylow, 2019a]

Temas

1.
Breve historia de la computación y los lenguajes de programación.
2.
Visión general del lenguaje de programación Python.
3.
Entornos y herramientas de programación.
4.
Estructura básica y ejecución de programas.
5.
Escritura, ejecución y depuración de programas simples.

Aprendizaje esperado (Learning Outcomes)

1.
Identificar tendencias importantes en la historia de la computación. [Familiarizarse]
2.
Discutir el contexto histórico de los paradigmas de lenguajes de programación. [Familiarizarse]
3.
Comparar la vida diaria antes y después de las computadoras personales e Internet. [Evaluar]
4.
Escribir, compilar y ejecutar un programa simple en Python. [Usar]
5.1.4.2. Sistemas de Tipos I: Fundamentos (6 horas) [Habilidades AG-C08,AG-C12]

Referencias Bibliográficas: [Zelle, 2010Guttag, 2013]

Temas

1.
Un tipo como un conjunto de valores junto con un conjunto de operaciones:
a)
Tipos primitivos (por ejemplo, números, booleanos)
b)
Tipos compuestos construidos a partir de otros tipos (por ejemplo, registros/estructuras, uniones, arreglos, listas, funciones, referencias usando operaciones de conjuntos)
2.
Seguridad de tipos y errores causados por usar valores inconsistentemente dados sus tipos pretendidos
3.
Objetivos y limitaciones del tipado estático y dinámico: detectar y eliminar errores lo antes posible.
4.
Tipos de datos primitivos en Python (int, float, str, bool).
5.
Conversión de tipos y casting.

Aprendizaje esperado (Learning Outcomes)

1.
Describir, tanto para un tipo primitivo como para uno compuesto, los valores que tienen ese tipo [Familiarizarse]
2.
Describir ejemplos de errores de programa detectados por un sistema de tipos [Familiarizarse]
3.
Usar tipos y mensajes de error de tipos para escribir y depurar programas [Usar]
4.
Explicar el sistema de tipado dinámico de Python. [Familiarizarse]

5.1.4.3. Programación Orientada a Objetos I: Fundamentos (14 horas) [Habilidades AG-C08,AG-C12]

Referencias Bibliográficas: [Zelle, 2010Guttag, 2013Brookshear and Brylow, 2019a]

Temas

1.
Programación imperativa como subconjunto de la programación orientada a objetos.
2.
Definición de clases: campos, métodos y constructores.
3.
Propiedades dinámicas vs estáticas.
4.
Variables, expresiones y asignaciones.
5.
Operaciones de entrada y salida.
6.
Sentencias condicionales (if, elif, else).
7.
Estructuras de iteración (bucles for, bucles while).
8.
Bucles anidados y sentencias de control de bucle.
9.
Fundamentos del manejo de excepciones.

Aprendizaje esperado (Learning Outcomes)

1.
Componer una clase a través del diseño, implementación y prueba para cumplir con los requisitos de comportamiento [Usar]
2.
Predecir y validar el flujo de control en un programa usando despacho dinámico [Evaluar]
3.
Usar mecanismos de encapsulación orientados a objetos como interfaces y miembros privados [Usar]
4.
Implementar programas usando estructuras condicionales e iterativas. [Usar]
5.
Depurar programas con errores de sintaxis y lógicos. [Usar]
6.
Diseñar e implementar algoritmos simples usando bucles. [Usar]
5.1.4.4. Funciones y paso de parámetros (10 horas) [Habilidades AG-C08,AG-C12]

Referencias Bibliográficas: [Zelle, 2010Guttag, 2013Hunt and Thomas, 1999]

Temas

1.
Definición e invocación de funciones.
2.
Mecanismos de paso de parámetros (por valor, por referencia).
3.
Valores de retorno y múltiples retornos.
4.
Alcance y tiempo de vida de variables (local, global, nonlocal).
5.
Fundamentos de recursión.
6.
Expresiones lambda y funciones de orden superior.
7.
Funciones como objetos de primera clase.
8.
Documentación y prueba de funciones.

Aprendizaje esperado (Learning Outcomes)

1.
Definir e implementar funciones con paso de parámetros adecuado. [Usar]
2.
Explicar la diferencia entre paso por valor y paso por referencia. [Familiarizarse]
3.
Implementar soluciones recursivas a problemas simples. [Usar]
4.
Usar expresiones lambda para construcciones de programación funcional. [Usar]
5.
Diseñar funciones con alcance y documentación apropiados. [Evaluar]
5.1.4.5. Estructuras de datos básicas (10 horas) [Habilidades AG-C08,AG-C12]

Referencias Bibliográficas: [Zelle, 2010Guttag, 2013]

Temas

1.
Listas y operaciones con listas (indexación, segmentación, mutabilidad).
2.
Tuplas e inmutabilidad.
3.
Diccionarios y mapeo clave-valor.
4.
Conjuntos y operaciones con conjuntos.
5.
Cadenas como secuencias.
6.
Comprensión de listas y expresiones generadoras.
7.
Algoritmos básicos de búsqueda y ordenamiento.
8.
Introducción a la complejidad algorítmica para operaciones básicas.

Aprendizaje esperado (Learning Outcomes)

1.
Implementar programas usando listas, diccionarios y conjuntos. [Usar]
2.
Elegir estructuras de datos apropiadas para problemas dados. [Evaluar]
3.
Explicar las compensaciones entre diferentes estructuras de datos. [Familiarizarse]
4.
Implementar operaciones básicas de búsqueda y ordenamiento en listas. [Usar]
5.1.4.6. Programación Orientada a Objetos I: Fundamentos (10 horas) [Habilidades AG-C08,AG-C12]

Referencias Bibliográficas: [Zelle, 2010Guttag, 2013]

Temas

1.
Subclases, herencia (incluyendo herencia múltiple) y sobrescritura de métodos.
2.
Despacho dinámico: definición de llamada a método.
3.
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.
4.
Clases y objetos en Python.
5.
Atributos y métodos.
6.
Fundamentos de herencia y polimorfismo.
7.
Encapsulamiento y ocultación de información.

Aprendizaje esperado (Learning Outcomes)

1.
Construir una jerarquía de clases simple utilizando subclases que permita reutilizar código para subclases distintas [Usar]
2.
Explicar la relación entre la herencia orientada a objetos (compartición de código y sobrescritura) y el subtipado (la idea de que un subtipo sea usable en un contexto que espera el supertipo) [Familiarizarse]
3.
Comparar y contrastar los beneficios y costos/impacto de usar herencia (subclases) y composición (específicamente, cómo basar la composición en funciones de orden superior) [Evaluar]
4.
Diseñar e implementar clases simples en Python. [Usar]
5.
Explicar los beneficios de la POO para la organización del código. [Familiarizarse]
5.1.4.7. Estrategias Algorítmicas (6 horas) [Habilidades AG-C08,AG-C12]

Referencias Bibliográficas: [Guttag, 2013Cormen et al., 2009]

Temas

1.
Paradigmas:
a)
Fuerza Bruta (por ejemplo, búsqueda lineal, ordenamiento por selección, viajante de comercio, mochila)
b)
Disminuir y Vencer:
1)
Por una Constante (por ejemplo, ordenamiento por inserción, ordenamiento topológico)
2)
Por un Factor Constante (por ejemplo, búsqueda binaria)
3)
Por un Tamaño Variable (por ejemplo, Euclides)
c)
Dividir y Vencer (por ejemplo, búsqueda binaria, quicksort, mergesort, Strassen)
d)
Voraz (por ejemplo, Dijkstra, Kruskal, Mochila)
e)
Transformar y Vencer:
1)
Simplificación de instancia (por ejemplo, encontrar duplicados mediante preordenamiento de lista)
2)
Cambio de representación (por ejemplo, heapsort)
3)
Reducción de problema (por ejemplo, mínimo común múltiplo, programación lineal)
4)
Programación dinámica (por ejemplo, Floyd, Marshall, Bellman-Ford)
f )
Compromisos espacio vs tiempo (por ejemplo, hash)
2.
Iteración vs recursión (por ejemplo, factorial, búsqueda en árbol)
3.
Estrategias de descomposición de problemas.
4.
Técnicas de diseño de algoritmos.
5.
Estrategias de depuración y prueba.
6.
Seguimiento de la ejecución del programa.

Aprendizaje esperado (Learning Outcomes)

1.
Para cada uno de los paradigmas en esta unidad:
a)
Explicar sus características definitorias
b)
Explicar un ejemplo que demuestre el paradigma incluyendo cómo este ejemplo satisface las características del paradigma.

[Familiarizarse]

2.
Dar ejemplos de algoritmos iterativos y recursivos que resuelvan el mismo problema, explicar los beneficios y desventajas de cada enfoque [Usar]
3.
Evaluar si un enfoque voraz conduce a una solución óptima [Evaluar]
4.
Aplicar técnicas sistemáticas de depuración para localizar y corregir errores. [Usar]
5.
Analizar la complejidad algorítmica para problemas simples. [Familiarizarse]
5.1.4.8. Métodos Modernos de Desarrollo y Uso de Herramientas (4 horas) [Habilidades AG-C08,AG-C12]

Referencias Bibliográficas: [Zelle, 2010Hunt and Thomas, 1999]

Temas

1.
Uso de entornos de programación modernos (IDEs, notebooks).
2.
Mejores prácticas de búsqueda y reutilización de código.
3.
Uso de bibliotecas estándar y APIs.
4.
Técnicas de depuración y prueba.
5.
Fundamentos de control de versiones.
6.
Documentación de código y guías de estilo.
7.
Entornos virtuales y gestión de paquetes.

Aprendizaje esperado (Learning Outcomes)

1.
Usar herramientas de desarrollo modernas efectivamente. [Usar]
2.
Aplicar principios de reutilización de código mediante bibliotecas y APIs. [Usar]
3.
Depurar y probar programas sistemáticamente. [Usar]
4.
Seguir estándares de codificación y prácticas de documentación. [Familiarizarse]
5.
Gestionar paquetes y entornos de Python. [Familiarizarse]

5.1.5. Referencias Bibliográficas

[Zelle, 2010]

[Guttag, 2013]

[Brookshear and Brylow, 2019a]

[Hunt and Thomas, 1999]

[Cormen et al., 2009]

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

Escanea para abrir en tu teléfono