Introducción a la Programación

Información Básica

  • Créditos: 3
  • Horas de trabajo acompañado: 5 / semana (3 horas clase, 2 horas taller)
  • Horas de trabajo independiente: 4 / semana
  • Pre-requisitos: Ninguno
  • Tipo de curso: Núcleo de Formación Fundamental.

Descripción del Curso

Esta asignatura presenta al estudiante una alternativa para apropiar la disciplina de la programación como herramienta conceptual y tecnológica que permite solucionar problemas reales en ingeniería.

Objetivos

Al finalizar el curso los participantes podrán:

  1. Describir un sistema con sus elementos e interacciones.
    1. Conocer la noción de modelo.
    2. Relacionar sistemas con modelos computacionales.
    3. Especificar las constantes, variables y tipos de datos de un sistema.
    4. Identificar los estados de un sistema.
    5. Reconocer las operaciones que tiene un sistema para cambiar su estado.
    6. Construir algoritmos.
  2. Definir, implementar y aplicar operaciones.
    1. Construir operaciones con parámetros.
    2. Aplicar operaciones con argumentos acordes con los parámetros definidos.
    3. Determinar el alcance de variables.
    4. Reconocer la diferencia entre función y procedimiento.
    5. Depurar códigos simples.
    6. Desarrollar programas con documentación y usando librerías.
    7. Conocer el valor de verdad de una condición.
    8. Describir el flujo de ejecución de un algoritmo.
    9. Implementar operaciones con condicionales.
    10. Utilizar programación defensiva y control de versiones.
    11. Trabajar con cadenas de caracteres.
  3. Resolver problemas usando algoritmos que involucren repeticiones.
    1. Seguir algoritmos con un flujo de ejecución repetitivo.
    2. Implementar operaciones iterativas y recursivas.
    3. Construir programas con interfaz gráfica.
    4. Comparar la eficiencia de dos algoritmos.
  4. Conocer la noción de estructura de datos.
    1. Construir y manipular listas.
    2. Solucionar problemas con listas.
    3. Trabajar con diccionarios.
    4. Desarrollar video juegos sencillos.
    5. Leer y escribir en archivos.
    6. Incluir la noción de persistencia en aplicaciones.
    7. Reconocer la diferencia entre archivos texto y archivos binarios.
    8. Conocer sistemas para manejar archivos binarios.

Competencias técnicas específicas que se desarrollan

  1. Modelamiento computacional de sistemas.
  2. Desarrollo de programas usando Python 3 y librerías del lenguaje.
  3. Sistema de control de versiones Git.
  4. Desarrollo de video juegos sencillos.

Contenido

Capítulo 1: Nociones de Sistema, Observación y Estado

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
1 3 Definición de Sistema. Rol y propósito de un sistema operativo. Modelos. Variables y constantes. Tipos de datos primitivos (e.g. números, caracteres, Booleans). Subtipos y supertipos. Bits, bytes y otras medidas de almacenamiento, y su relación con los tipos de datos. Familiaridad [1]
2 2 Desglose de un sistema en sus elementos observando las interacciones. Evaluación [1]
3 3 Estado de un sistema. Operaciones que modifican el estado. El concepto y propiedades de algoritmos. Expresiones y asignaciones. Uso [1,2]
4 2 Sintaxis y semántica de un lenguaje de programación de alto nivel. El rol de los algoritmos en el proceso de solución de un problema. Evaluación [1,2,3,4,9]

Total de Horas: 10.

Sesión Horas de trabajo independiente Temas Bibliografía
1-2 4 Tomar diferentes sistemas, realizar una observación, encontrar los elementos del sistema, diferenciar cuáles son variables y cuáles son constantes, y hallar el tipo de datos de las variables. [1]
3-4 4 Resolver problemas sencillos usando el lenguaje de programación Python y librería de la Tortuga. [1,2,3,4]

Total de Horas: 8

Capítulo 2: Nociones de Abstracción y Condición

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
5 3 Abstracción. Uso [1,2,4]
6 2 Descomposición de un programa. Evaluación [1,2,4]
7 3 Funciones, procedimientos, parámetros y argumentos. Variables locales y globales, alcance. Uso [1,2,4]
8 2 Implementación de funciones y procedimientos. Evaluación [1,2,3,4]
9 3 Errores en programación. Tipos de errores (sintaxis, lógicos, en ejecución). Comprensión de programas. El concepto de especificación. El rol y uso de contratos, incluyendo pre- y post-condiciones. Familiaridad [4]
10 2 Estrategias de depuración. Pruebas unitarias. Correctitud de un programa. Búsqueda y acceso a librerías. Evaluación [4]
11 3 Condicionales. Conectivos lógicos. Uso [1,2,4]
12 2 Programación defensiva. Documentación y estilo de programación. Diagramas de flujo. Uso de IDEs. Uso de control de versiones. Evaluación [4,9]
13 3 Cadenas de caracteres y procesamiento de cadenas. Uso [1,2,4]
14 2 Práctica del tipo de dato cadenas de caracteres. Evaluación [1,2,3,4]

Total de Horas: 25.

Sesión Horas de trabajo independiente Temas Bibliografía
5-6 4 Construir programas que solucionen problemas definiendo operaciones. [1,2,3,4]
7-8 4 Definir funciones o procedimientos que solucionen problemas dados. [1,2,3,4]
9-10 4 Encontrar errores en programas, proteger un programa contra posibles errores simples, definir correctamente contratos de programas. [2,4,9]
11-12 4 Resolver problemas usando condicionales. [1,2,3,4]
13-14 4 Resolver problemas con cadenas de caracteres. [1,2,3,4]

Total de Horas: 20

Capítulo 3: Noción de Repetición

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
15 3 Estructuras de control iterativas. Uso [1,2,4]
16 2 Repetición con while. Evaluación [1,2,4]
17 3 Funciones matemáticas iterativas. Uso [1,2,4]
18 2 Práctica de funciones iterativas. Evaluación [1,2,4]
19 3 Interfaces gráficas. Familiaridad [1,5]
20 2 Construcción de interfaces gráficas. Evaluación [1,5]
21 3 El concepto de recursión. Funciones matemáticas recursivas. Familiaridad [1,4]
22 2 Práctica de funciones recursivas. Evaluación [1,4]
23 3 Comparación informal de la eficiencia de algoritmos (e.g. conteo de operaciones). Familiaridad [4]
24 2 Comparación y refactorización simple de programas. Evaluación [4]

Total de Horas: 25.

Sesión Horas de trabajo independiente Temas Bibliografía
15-16 4 Resolver problemas iterativos. [1,2,3,4]
17-18 4 Resolver problemas matemáticos como series usando while. [1,2,3,4]
19-20 4 Desarrollar un programa con interfaz gráfica. [1,5]
21-22 4 Resolver problemas recursivos. [1,3,4]
23-24 4 Encontrar la complejidad de programas simples y crear programas con una complejidad dada. [4]

Total de Horas: 20

Capítulo 4: Nociones de Abstracción de datos y Persistencia

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
25 3 Listas y arreglos. Uso [1,2,4,7]
26 2 Algoritmos numéricos simples como calcular el promedio de una lista de números, encontrar el min, max y la moda en una lista, aproximar la raíz cuadrada de un número, o encontrar el máximo común divisor. Evaluación [4,7]
27 3 Conjuntos y Diccionarios. Uso [4,7]
28 2 json y programación web. Familiaridad [6]
29 3 Recorridos iterativos y recursivos de estructuras de datos. Implementación de juegos. Uso [1,4,8]
30 2 Ciclo for-each. Evaluación [1,2,4]
31 3 Archivos. Uso [1,2,4]
32 2 Entrada y salida de datos con archivos. Evaluación [1,2,4]

Total de Horas: 20.

Sesión Horas de trabajo independiente Temas Bibliografía
25-26 4 Resolver problemas con listas. [1,2,3,4,7]
27-28 4 Construir una página web y recuperar datos json. [6]
29-30 4 Crear un juego simple. [1,3,8]
31-32 4 Desarrollar programas que almacenen y recuperen datos de archivos. [1,2,3,4]

Total de Horas: 16

Uso de material en exámenes

No está permitido el uso de computadores personales, teléfonos celulares ó cualquier otro dispositivo electrónico.

Asistencia

Obligatoria.

Bibliografía

  1. Gerardo M. Sarria M. y Mario J Mora. “Introducción a la Programación”. Lulu Press. Enero, 2015.
  2. Guido Van Rossum. “An Introduction to Python”. Network Theory Ltd. March, 2011.
  3. Guido Van Rossum. “The Python Language Reference Manual (Python Manual)”. Network Theory Ltd. March, 2011.
  4. John V. Guttag. “Introduction to Computation and Programming Using Python”. The MIT Press. August, 2013.
  5. Burkhard A. Meier. “Python GUI Programming Cookbook”. Packt Publishing. December, 2015.
  6. Ryan Mitchell. “Web Scraping with Python: Collecting Data from the Modern Web”. O’Reilly Media. July, 2015.
  7. Bradley N. Miller y David L. Ranum. “Problem solving with algorithms and data structures using Python”. Franklin, Beedle & Associates Incorporated. August, 2011.
  8. Alejandro Rodas de Paz and Joseph Howse. “Python Game Programming by Example”. Packt Publishing. October, 2015.
  9. Mark Lutz y David Ascher. “Learning Python”. O’Reilly & Associates. July, 2013.

Instalaciones

Salón de clase con computador y proyector. Laboratorio de Ingeniería de Sistemas y Computación.

Material de este semestre