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

Integración Curricular

Resultados de Programa (ABET)

(A) La habilidad para aplicar conocimientos de matemáticas, ciencias e ingeniería.

(B) La habilidad para analizar un problema e identificar los requerimientos necesarios para su definición y solución.

(C) La habilidad para diseñar, implementar y evaluar procesos y sistemas computacionales.

(D) La habilidad para funcionar en equipos de trabajo.

(E) El entendimiento de la responsabilidad profesional y ética.

(F) La habilidad para comunicarse efectivamente.

(G) La habilidad para analizar los impactos de la computación y la ingeniería en las personas, organizaciones y la sociedad.

(H) El reconocimiento de la necesidad de, y la habilidad para, continuar con el desarrollo profesional.

(I) La habilidad para usar las técnicas, destrezas y herramientas modernas para la práctica de la computación.

(J) La habilidad para aplicar los fundamentos y principios de las matemáticas y de la computación en el modelamiento y diseño de sistemas computacionales de manera que se demuestre comprensión de las ventajas y desventajas en las decisiones de diseño.

(K) La habilidad para aplicar los principios de diseño y desarrollo de software en la construcción de sistemas de diferente complejidad.

Relevancia del curso con los resultados de programa

Resultados de Programa
A B C D E F G H I J K
Relevancia 3 1 2 2 2 2

Escala: (1) baja relevancia - (5) alta relevancia.

Integración de objetivos, contenido y metodología del curso

El curso es presencial y con participación y trabajo en clase. Se asignarán investigaciones, ejercicios y lecturas. Durante la sesión se expondrán los conceptos acompañados de ejemplos, se fomentará la participación de los estudiantes. Se realizará un taller semanal en el que se ponga en práctica algunos conceptos de computación.

Resultados del Programa Indicadores de Desempeño Objetivos/Contenido del Curso Actividades de aprendizaje Instrumentos de medición
(A) Aplicación de Conocimientos (A1) Identificar los fundamentos científicos y los principios de ingeniería que rigen un proceso o sistema. (Conocimiento) (A2) Resolver problemas relacionados con la disciplina y otras áreas por medio de la utilización de conocimientos, modelos y formalismos de las ciencias de la computación, las matemáticas y la ingeniería. (Aplicación) (A3) Analizar conjuntos de datos. (Análisis) Capítulos 1,2,3,4,5 Exposiciones del profesor, solución de ejercicios y lecturas Exámenes
(C) Diseño (C1) Utilizar estándares de codificación en la implementación de componentes de software. (Aplicación). (C2) Identificar componentes, interacciones, relaciones e interfaces entre componentes. (Análisis). Capítulo 6 Solución de ejercicios y lecturas Proyectos y tareas
(F) Comunicación efectiva (F1) Producir textos de manera efectiva teniendo en cuenta la estructura, coherencia, flujo, ortografía y correcto uso del lenguaje. (Aplicación). (F2) Comunicarse de manera efectiva de acuerdo al público objetivo haciendo uso correcto del lenguaje, estilo, tiempo y expresión corporal. (Aplicación). (F3) Utilizar recursos gráficos para comunicar y expresar una idea. (Aplicación). (F4) Defender ideas con precisión y claridad. (Evaluación). Capítulos 4,5,6 Proyectos y tareas Presentaciones orales y reportes escritos
(H) Desarrollo profesional. (H1) Reconocer la importancia del conocimiento tanto en amplitud como en profundidad. (Compresión). Capítulo 1 Tareas Tareas
(I) Uso de herramientas y técnicas (I1) Utilizar herramientas de desarrollo de software. (Aplicación). (I2) Utilizar herramientas de diseño, modelamiento y simulación. (Aplicación). (I3) Combinar herramientas de software y hardware para resolver un problema. (Síntesis). (I4) Demostrar flexibilidad para adaptarse a diferentes paradigmas y lenguajes de programación. (Valuación). Capítulos 2,3,4 Laboratorios y lecturas Proyecto y tareas
(J) Modelamiento y diseño de sistemas computacionales (J1) Reconocer la importancia del modelamiento cuando se resuelve un problema. (Compresión). (J2) Relacionar conceptos y principios teóricos para la resolución efectiva de un problema. (Síntesis). Capítulos 2,3,4,5,6 Lecturas Proyectos y tareas

Contribución al Desarrollo de Competencias Genéricas

La tabla muestra que aspectos de las competencias de Comunicación Escrita, Lectura Crítica y Razonamiento Cuantitativo son evaluados a través de los factores ABET correspondientes. Por otra parte, las competencias de Ciudadanía e Inglés se favorecen gracias a la metodología del curso y también, gracias a los factores ABET correspondientes.

Resultados de Programa
A B C D E F G H I J K
Ciudadanía
Comunicación escrita E
Lectura crítica U
Inglés U
Razonamiento cuantitativo E E E

E- Se evalúa. U - Se usa

Contribución a los objetivos educacionales

La Carrera de Ingeniería de Sistemas y Computación plantea los siguientes objetivos educacionales, El estudiante graduado de la carrera será capaz de:

  1. EO1. Ejercitar la práctica de la Ingeniería de Sistemas y Computación profesionalmente.
  2. EO2. Diseñar y operar sistemas de computación que contribuyen a la solución de problemas relacionados a la disciplina, otra área de la ciencia y la ingeniería u otras disciplinas.
  3. EO3. Contribuir al bienestar de las comunidades desde posiciones prominentes en la industria, academia, sector público o como un emprendedor.
  4. EO4. Ser distinguido por su bases sólidas en computación, su sentido de ciudadanía responsable, su profesionalismo y liderazgo.
  5. EO5. Continuar su desarrollo profesional o involucrarse en estudios de posgrado.
Resultados de Programa
A B C D E F G H I J K
EO1 X X X X
EO2 X X X X
EO3 X X
EO4 X X X
E05 X X

Reglas del curso

Calificación y Balance de Evaluación del Curso

Instrumento Porcentaje A B C D E F G H I J K
Tareas y talleres 15 % 30 % 10 % 40% 10 % 10 %
Exposición 10 % 20 % 80 %
Parcial 1 20 % 50 % 20 % 10% 10% 10 %
Parcial 2 25 % 50 % 10 % 30 % 10 %
Examen Final 30 % 50 % 10 % 40 %

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.

 
materias/tecnicaspracticasprogramacion.txt · Última modificación: 2016/09/04 10:54 por anavarro
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki