Técnicas y Prácticas de 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:
  • Tipo de curso: Núcleo de Formación Fundamental.

Descripción del Curso

En el curso técnicas y prácticas de computación se abordan los principales conceptos y técnicas que se aplican a los algoritmos, las estrategias de validación y de solución de problemas, los principales conceptos de control de errores y definición de casos de pruebas, y los conceptos fundamentales de construcción de programas. El curso desarrollará unos sólidos conceptos teóricos acompañados de prácticas semanales de los temas vistos en clase.

Objetivos

Al finalizar el curso los participantes podrán:

  • Conocer los diferentes comportamientos de los algoritmos, y realizar análisis asintóticos de límites de complejidad superior y esperados.
  • Establecer la clases de complejidad de un algoritmo ( Constante, logarítmica, lineal, cuadrática o exponencial)
  • Identificar y utilizar diferentes estrategias para la construcción de algoritmos, como: Divide y vencerás, algoritmos numéricos simples, algoritmos de búsqueda secuenciales y binarios, entre otros.
  • Conocer los conceptos de validación de entrada, Verificación de programas, computación simultánea múltiple, Objetivos de paralelismos vs concurrencia y la comparación informal de la eficiencia de un algoritmo.
  • Definir y utilizar estructuras básicas de datos como los arreglos y las cadenas de caracteres.
  • Identificar los diferentes tipos de errores (sintaxis, lógica, en tiempo de ejecución) en un programa.
  • Conocer el concepto de una especificación y la programación defensiva (Ej. codificación segura, manejo de excepciones)
  • Utilizar las revisiones de código y la generación casos de pruebas para mejor la calidad de los programas.
  • Identificar el papel y el uso de contratos, incluyendo pre- y post-condiciones.
  • Conocer los principios de diseño de sistemas y los diferentes paradigmas de diseño (diseño estructurado, análisis y diseño orientado a objetos, diseño orientado a eventos, diseño a nivel de componentes).
  • Aplicar en los procesos de codificación diferentes técnicas, prácticas de codificación defensiva, prácticas de código seguro y estándares de codificación.

Competencias técnicas específicas que se desarrollan

  1. Lenguaje de programación C++ (intermedio).

Contenido

Capítulo 1: Introducción y Conceptos de algoritmos

Sesión Horas teóricas Prácticas acompañadas Temas Bibliografía
1 1 Presentación del curso. conceptos básicos de algoritmos
1 2 Diferentes comportamientos de los algoritmos. Análisis asintótico de límites de complejidad superior y esperados
2 2 Práctica
3 3 Notación Big O: definición formal. Clases de complejidad ( Constante, logarítmica, lineal, cuadrática y exponencial)
3 2 Práctica
4 3 Las mediciones empíricas de desempeño. Balances de Tiempo y espacio en algoritmos
4 2 Práctica

Total de Horas: 15

Sesión Horas de trabajo independiente Temas Bibliografía
1 – 2 4 Búsqueda y reporte de comportamientos de algoritmos
3 – 4 4 Taller relacionado con Notación Big O y clases de complejidad

Total de Horas: 8

Capítulo 2: Estrategias algorítmicas

Sesión Horas teóricas Prácticas acompañadas Temas Bibliografía
5 3 Algoritmos de fuerza bruta
6 2 Práctica
7 3 Divide y vencerás (referencias cruzadas / Algoritmos y Diseño / estrategias de resolución de problemas)
8 2 Práctica
9 3 Algoritmos numéricos simples (cálculo de la media de una lista de números, encontrar el mínimo, máximo, encontrar el máximo común divisor, etc.)
10 2 Práctica
11 3 Algoritmos de búsqueda secuenciales y binarios
12 2 Práctica

Total de Horas: 20

Sesión Horas de trabajo independiente Temas Bibliografía
5 – 6 4 Taller – Aplicación de estrategia de fuerza bruta en la construcción de un algoritmo
7 – 8 4 Búsqueda de información de la estrategia de divide y vencerás – Discusión en clase
9 – 10 4 Taller – Desarrollo de algoritmos simples
11 – 12 4 Taller – Desarrollo de algoritmos secuenciales y binarios

Total de Horas: 16

Capítulo 3: Validación de algoritmos

Sesión Horas teóricas Prácticas acompañadas Temas Bibliografía
13 3 Conceptos básicos de validación: Validación de entrada,Verificación de programas, computación simultánea múltiple, Objetivos de paralelismos vs concurrencia, Comparación informal de la eficiencia de un algoritmo
14 2 Práctica

Total de Horas: 5

Sesión Horas de trabajo independiente Temas Bibliografía
13 – 14 4 Lectura y realización de mapa conceptual

Total de Horas: 4

Capítulo 4: Estrategias de Solución de problemas y estructuras básicas de datos

Sesión Horas teóricas Prácticas acompañadas Temas Bibliografía
15 3 Comparación informal de la eficiencia de un algoritmo. Estrategia divide y vencerás
16 2 Práctica
17 3 Sintaxis básica y semántica de lenguajes de alto nivel. Variables y tipos de datos simples (números, caracteres, booleanos)
18 2 Práctica
19 3 Arrays. Strings y procesamiento de cadena de caracteres
20 2 Práctica

Total de Horas: 15

Sesión Horas de trabajo independiente Temas Bibliografía
15 – 16 4 Lectura y resumen para discusión en clase
17 – 18 4 Búsqueda de información y realización de comparativo para diferentes lenguajes relacionado con Variables y tipos de datos
19 – 20 4 Taller de Arreglos y cadena de caracteres

Total de Horas: 12

Capítulo 5: Comprensión y correctitud de programas

Sesión Horas teóricas Prácticas acompañadas Temas Bibliografía
21 1 Comprensión de programas
21 2 Correctitud de programas: Tipos de errores (sintaxis, lógica, en tiempo de ejecución)
22 2 Práctica
23 3 El concepto de una especificación. Programación defensiva (Ej. codificación segura, manejo de excepciones)
24 2 Práctica
25 3 Revisiones de código. Pruebas y generación casos de pruebas.
26 2 Práctica
27 3 El papel y el uso de contratos, incluyendo pre- y post-condiciones. Prueba de la unidad. Estrategias de depuración
28 2 Práctica

Total de Horas: 20

Sesión Horas de trabajo independiente Temas Bibliografía
21 – 22 4 Taller – Revisión e identificación de tipos de errores
23 – 24 4 Taller – Revisiones de código y definición de casos de Prueba
25 – 26 4 Estudio para Examen Final
27 – 28 4 Estudio Para Examen Final

Total de Horas: 16

Capítulo 6: Principios de desarrollo de sistemas

Sesión Horas teóricas Prácticas acompañadas Temas Bibliografía
29 3 Principios de diseño de sistemas. Paradigmas de diseño (diseño estructurado, análisis y diseño orientado a objetos, diseño orientado a eventos, diseño a nivel de componentes, etc.). Las relaciones entre los requisitos y diseños: transformación de los modelos, el diseño de los contratos, invariantes
30 2 Práctica
31 3 Cualidades internas de diseño (eficiencia, rendimiento, redundancia, tolerancia a fallos, etc.). Prácticas de codificación (técnicas, expresiones idiomáticas / patrones, etc.). Prácticas de codificación defensivos. Prácticas de código seguro. Estándares de codificación
32 2 Práctica

Total de Horas: 10

Sesión Horas de trabajo independiente Temas Bibliografía
29 – 30 4 Taller – Diseño de programas
31 – 32 4 Investigación y resumen prácticas y estándares de codificación

Total de Horas: 8

Uso de material en exámenes

No está permitido el uso de notas de clase ni bibliografía. El uso de computadores personales, teléfonos celulares o cualquier otro equipo electrónico se utilizará de acuerdo a las indicaciones del docente.

Asistencia

Obligatoria

Bibliografía

  1. Cormen, Leiserson, Rivest, and Stein. Introduction to Algorithms, 3rd Edition (MIT Press). 2009
  2. S. Dasgupta, C. H. Papadimitriou, and U. Vazirani. Algorithms. McGraw-Hill Science/Engineering/Math, 2006.
  3. T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein. Introduction to algorithms. MIT Press, Cambridge, MA, USA, 2001.
  4. S. S. Skiena. The algorithm design manual. Springer-Verlag New York, Inc., New York, NY, USA, 1998.
  5. Roger S. Pressman. Ingeniería de Software, un enfoque práctico. 7ed. McGraw Hill. México, 2010.
  6. Ian Sommerville. Ingeniería de Software. 9ed. Pearson Educación S.A. México, 2011.

Instalaciones

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