2.12. Fundamentos de Desarrollo de Software (SDF)
La fluidez en el proceso de desarrollo de software es fundamental para el estudio de las ciencias de la computación. Para utilizar las computadoras de manera más efectiva para resolver problemas, los estudiantes deben ser competentes en la lectura y escritura de programas. Sin embargo, más allá de las habilidades de programación, deben poder seleccionar y utilizar estructuras de datos y algoritmos apropiados, así como herramientas modernas de desarrollo y prueba.
El área de conocimiento SDF reúne conceptos y habilidades fundamentales relacionados con el desarrollo
de software, centrándose en aquellos que deben enseñarse al inicio de un programa de ciencias de la
computación, típicamente en el primer año. Esto incluye conceptos de programación fundamentales y su uso
efectivo para escribir programas, el uso de estructuras de datos fundamentales que pueden ser proporcionadas
por el lenguaje de programación, conceptos básicos de buenas prácticas de programación para escribir
programas de calidad, la lectura y comprensión de programas, y cierta comprensión del impacto de los
algoritmos en el rendimiento de los programas. Las 43 horas de material en esta área de conocimiento pueden
complementarse con material central de otras áreas a medida que los estudiantes avanzan a cursos de nivel
intermedio y superior.
Esta área de conocimiento asume un lenguaje de programación contemporáneo con soporte incorporado para tipos de datos comunes, incluidos tipos de datos asociativos como diccionarios/mapas, como vehículo para introducir a los estudiantes a la programación (por ejemplo, Python, Java). Sin embargo, esto no pretende desalentar el uso de lenguajes más antiguos o de bajo nivel para SDF: las unidades de conocimiento a continuación pueden adaptarse adecuadamente al lenguaje real utilizado.
El surgimiento de la IA generativa y los Modelos de Lenguaje Grande (LLMs), que pueden generar programas para muchas tareas de programación, sin duda afectará a la profesión de programación y, en consecuencia, a la enseñanza de muchos temas de CS. Sin embargo, para poder utilizar efectivamente la IA generativa en tareas de programación, un programador debe tener una buena comprensión de los programas y, por lo tanto, aún debe aprender los fundamentos de la programación y desarrollar habilidades básicas de programación, que es el objetivo de SDF. En consecuencia, consideramos que los resultados deseados para SDF deberían permanecer iguales, aunque diferentes instructores ahora podrían dar más énfasis a la comprensión, documentación, especificaciones, análisis y pruebas de programas. (Esto es similar a enseñar a los estudiantes multiplicación, suma, etc., aunque se puedan usar calculadoras para hacerlo).
| área de Conocimiento (Knowledge Area-KA) (KA) | Core Tier1 | Core Tier2 | Electivo |
| 2.12.1 Fundamentos de Programación I |
|
| No |
| 2.12.2 Fundamentos de Programación II |
|
| No |
| 2.12.3 Estructuras de Datos Fundamentales |
|
| No |
| 2.12.4 Algoritmos |
|
| No |
| 2.12.5 Prácticas de Desarrollo de Software |
|
| No |
| 2.12.6 Sociedad, ética y la Profesión |
|
| No |
2.12.1. SDF/Fundamentos de Programación I
Temas:
Core
- Conceptos básicos como variables, tipos de datos primitivos, expresiones y su evaluación
- Cómo funcionan los programas imperativos: estado y transiciones de estado en la ejecución de sentencias, flujo de control
- Construcciones básicas como sentencias de asignación, sentencias condicionales e iterativas, E/S básica
- Construcciones clave de modularidad como funciones (y métodos y clases, si son compatibles en el lenguaje) y conceptos relacionados como paso de parámetros, alcance, abstracción, encapsulamiento de datos Fundamentos de los Lenguajes de Programación (FPL) -ObjectOrientedProgramming
- Entrada y salida usando archivos y APIs
- Tipos de datos estructurados disponibles en el lenguaje de programación elegido como secuencias (por ejemplo, arreglos, listas), contenedores asociativos (por ejemplo, diccionarios, mapas), otros (por ejemplo, conjuntos, tuplas) y cuándo y cómo usarlos Fundamentos Algorítmicos (AL) -FoundationalDataStructuresAlgorithms
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Desarrollar programas que utilicen las construcciones fundamentales de programación: asignación y expresiones, E/S básica, sentencias condicionales e iterativas [Crear]
- 2.
- Desarrollar programas utilizando funciones con paso de parámetros [Crear]
- 3.
- Desarrollar programas que utilicen efectivamente los diferentes tipos de datos estructurados proporcionados en el lenguaje, como arreglos/listas, diccionarios y conjuntos [Crear]
- 4.
- Desarrollar programas que utilicen E/S de archivos para proporcionar persistencia de datos a través de múltiples ejecuciones [Crear]
- 5.
- Desarrollar programas que utilicen APIs para acceder o actualizar datos (por ejemplo, desde la web) [Crear]
- 6.
- Desarrollar programas que creen clases simples e instancien objetos de esas clases (si es compatible con el lenguaje) [Crear]
- 7.
- Rastrear el flujo de control durante la ejecución de un programa [Trazar/Rastrear]
- 8.
- Usar la terminología apropiada para identificar elementos de un programa (por ejemplo, identificador, operador, operando) [Usar]
2.12.2. SDF/Fundamentos de Programación II
Temas:
Core
- Bibliotecas y frameworks proporcionados por el lenguaje (cuando/donde sea aplicable)
- Recursión
- Manejo de errores de tiempo de ejecución en programas (por ejemplo, manejo de excepciones).
- Conceptos básicos de errores de programación, pruebas y depuración Ingeniería de Software (SE) -Construction,SEC-Coding
- Documentar/comentar código a nivel de programa y de módulo. Ingeniería de Software (SE) -Construction
-
Desarrollar una mentalidad de seguridad. Seguridad (SEC) -Foundations
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Desarrollar programas que utilicen bibliotecas y frameworks proporcionados por el lenguaje (donde sea aplicable) [Crear]
- 2.
- Explicar el concepto de recursión e identificar cuándo y cómo usarlo efectivamente [Explicar]
- 3.
- Desarrollar funciones recursivas [Crear]
- 4.
- Desarrollar programas que puedan manejar errores de tiempo de ejecución [Crear]
- 5.
- Leer un programa dado y explicar lo que hace [Explicar]
- 6.
- Escribir comentarios para un programa o módulo especificando lo que hace [Escribir]
2.12.3. SDF/Estructuras de Datos Fundamentales
Temas:
Core
- Tipos abstractos de datos estándar como listas, pilas, colas, conjuntos y mapas/diccionarios, incluyendo operaciones sobre ellos.
- Seleccionar y usar estructuras de datos apropiadas.
- Implicaciones de rendimiento de la elección de estructura(s) de datos.
- Cadenas y procesamiento de cadenas.
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Escribir programas que utilicen cada uno de los tipos abstractos de datos clave proporcionados en el lenguaje (por ejemplo, arreglos, tuplas/registros/estructuras, listas, pilas, colas y tipos de datos asociativos como conjuntos, diccionarios/mapas) [Escribir]
- 2.
- Seleccionar la estructura de datos apropiada para un problema dado [Evaluar]
- 3.
- Explicar cómo puede cambiar el rendimiento de un programa al usar diferentes estructuras de datos u operaciones [Explicar]
- 4.
- Escribir programas que trabajen con texto utilizando las capacidades de procesamiento de cadenas proporcionadas por el lenguaje [Escribir]
2.12.4. SDF/Algoritmos
Temas:
Core
- Concepto de algoritmo y noción de eficiencia algorítmica
- Algunos algoritmos comunes (por ejemplo, ordenación, búsqueda, recorrido de árboles, recorrido de grafos)
- Impacto de los algoritmos en la eficiencia tiempo-espacio de los programas
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Explicar el rol de los algoritmos para escribir programas [Explicar]
- 2.
- Demostrar cómo un problema puede ser resuelto por diferentes algoritmos, cada uno con diferentes propiedades [Demostrar]
- 3.
- Explicar algunos algoritmos comunes (por ejemplo, ordenación, búsqueda, recorrido de árboles, recorrido de grafos) [Explicar]
- 4.
- Explicar el impacto en el rendimiento espacio/tiempo de algunos algoritmos [Explicar]
2.12.5. SDF/Prácticas de Desarrollo de Software
Temas:
Core
- Pruebas básicas, incluido el diseño de casos de prueba
- Uso de un IDE de propósito general, incluido su depurador
- Estilo de programación que mejora la legibilidad
- Especificar la funcionalidad de un módulo en lenguaje natural.
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Desarrollar pruebas para módulos y aplicar una variedad de estrategias para diseñar casos de prueba [Crear]
- 2.
- Explicar algunas limitaciones de las pruebas de programas [Explicar]
- 3.
- Compilar, ejecutar y depurar programas utilizando un IDE moderno y herramientas asociadas como depuradores visuales [Analizar]
- 4.
- Aplicar pautas básicas de estilo de programación para ayudar a la legibilidad de los programas, como comentarios, sangría, nombres adecuados de variables, etc [Aplicar]
- 5.
- Escribir especificaciones de un módulo como comentario de módulo que describa su funcionalidad [Escribir]
2.12.6. SDF/Sociedad, ética y la Profesión
Temas:
Core
- Derechos de propiedad intelectual de los programadores para los programas que desarrollan.
- Plagio e integridad académica.
- Responsabilidad y obligación de los programadores con respecto al código que desarrollan para soluciones. Seguridad (SEC) -Foundations
- ética profesional básica del trabajo de los programadores.
Aprendizaje esperado (Learning Outcomes):
Core:
- 1.
- Explicar/comprender algunos de los problemas de propiedad intelectual relacionados con programas [Explicar]
- 2.
- Explicar/comprender cuándo se puede utilizar código desarrollado por otros y las formas adecuadas de revelar su uso [Explicar]
- 3.
- Explicar/comprender la responsabilidad de los programadores al desarrollar código para una solución general (que puede ser desarrollada por un equipo) [Explicar]
- 4.
- Explicar/comprender uno o más códigos de conducta aplicables a los programadores [Explicar]