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

5.1. 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
    - htmlonly
  • Prerrequisitos: Ninguno
Figura 5.1: Mapa de Conexión. BIC01 Introducción a la Computación

5.1.1. Justificación ↑ Volver arriba

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 ↑ Volver arriba

  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) ↑ Volver arriba

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 ↑ Volver arriba

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

Referencias Bibliográficas: (Zelle, 2010; Guttag, 2013; Brookshear 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. Fundamentos de Sistemas de Tipos (6 horas) [Habilidades AG-C08,AG-C12] ↑ Volver arriba

Referencias Bibliográficas: (Zelle, 2010; Guttag, 2013)

Temas

  1. Un tipo como un conjunto de valores junto con un conjunto de operaciones:
    1. Tipos primitivos (por ejemplo, números, booleanos)
    2. Tipos compuestos construidos a partir de otros tipos (por ejemplo, registros/estructuras, uniones, arreglos, listas, funciones, referencias usando operaciones de conjuntos) enumerate
    3. Seguridad de tipos y errores causados por usar valores inconsistentemente dados sus tipos pretendidos
    4. Objetivos y limitaciones del tipado estático y dinámico: detectar y eliminar errores lo antes posible.
    5. Tipos de datos primitivos en Python (int, float, str, bool).
    6. 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. Fundamentos de Programación Orientada a Objetos (14 horas) [Habilidades AG-C08,AG-C12] ↑ Volver arriba

    Referencias Bibliográficas: (Zelle, 2010; Guttag, 2013; Brookshear 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] ↑ Volver arriba

    Referencias Bibliográficas: (Zelle, 2010; Guttag, 2013; Hunt 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] ↑ Volver arriba

    Referencias Bibliográficas: (Zelle, 2010; Guttag, 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. Fundamentos de Programación Orientada a Objetos (10 horas) [Habilidades AG-C08,AG-C12] ↑ Volver arriba

    Referencias Bibliográficas: (Zelle, 2010; Guttag, 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:
      1. Privacidad, ocultación de datos y visibilidad de miembros de clase.
      2. Interfaces que revelan solo firmas de métodos.
      3. Clases base abstractas, rasgos (traits) y mixins. enumerate
      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] ↑ Volver arriba

      Referencias Bibliográficas: (Guttag, 2013; Cormen et al., 2009)

      Temas

      1. Paradigmas:
        1. Fuerza Bruta (por ejemplo, búsqueda lineal, ordenamiento por selección, viajante de comercio, mochila)
        2. 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) enumerate
          4. Dividir y Vencer (por ejemplo, búsqueda binaria, quicksort, mergesort, Strassen)
          5. Voraz (por ejemplo, Dijkstra, Kruskal, Mochila)
          6. 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) enumerate
            5. Compromisos espacio vs tiempo (por ejemplo, hash) enumerate
            6. Iteración vs recursión (por ejemplo, factorial, búsqueda en árbol)
            7. Estrategias de descomposición de problemas.
            8. Técnicas de diseño de algoritmos.
            9. Estrategias de depuración y prueba.
            10. Seguimiento de la ejecución del programa.

            Aprendizaje esperado (Learning Outcomes)

            1. Para cada uno de los paradigmas en esta unidad:
              1. Explicar sus características definitorias
              2. Explicar un ejemplo que demuestre el paradigma incluyendo cómo este ejemplo satisface las características del paradigma. enumerate [Familiarizarse]
              3. Dar ejemplos de algoritmos iterativos y recursivos que resuelvan el mismo problema, explicar los beneficios y desventajas de cada enfoque [Usar]
              4. Evaluar si un enfoque voraz conduce a una solución óptima [Evaluar]
              5. Aplicar técnicas sistemáticas de depuración para localizar y corregir errores. [Usar]
              6. 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] ↑ Volver arriba

              Referencias Bibliográficas: (Zelle, 2010; Hunt 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 ↑ Volver arriba

              Zelle, J. M. (2010). Python Programming: An Introduction to Computer Science. Franklin, Beedle & Associates Inc, 2nd edition.

              Guttag, J. V. (2013). Introduction to Computation and Programming Using Python. MIT Press, 1st edition.

              Brookshear, J. G. and Brylow, D. (2019a). Computer Science: An Overview. Pearson, global edition edition.

              Hunt, A. and Thomas, D. (1999). The Pragmatic Programmer: From Journeyman to Master. Addison-Wesley, 1st edition.

              Cormen, T. H., Leiserson, C. E., Rivest, R. L., and Stein, C. (2009). Introduction to Algorithms. MIT Press, 3rd edition.

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

              Escanea para abrir en tu teléfono