Desarrollador Web Full Stack – Escuela Municipal de Tecnología
Perfil del Graduado
El graduado de esta carrera puede desempeñarse como programador o desarrollador de sistemas web dentro de equipos de trabajo. Se encontrará capacitado para trabajar con las tecnologías más actuales. Además tendrá una visión amplia de los procesos relacionados a su posición laboral.
El desarrollo de sistemas suele realizarse en un conjunto de tecnologías específicas, lo que se llama el “stack” de tecnologías utilizado. El graduado estará orientado al desarrollo de sitios o sistemas web en stack Javascript/Typescript, incluyendo la base de datos. Se le darán las herramientas conceptuales y metodológicas para poder aplicar los mismos conocimientos en otras tecnologías.
Los sistemas web suelen dividirse en front-end y back-end, siendo el primero la presentación visual e interacción con el usuario y la segunda el servidor donde se controlan permisos y se almacena información. El graduado tendrá versatilidad en ambas partes del desarrollo, lo que se denomina Desarrollador Web Full Stack. Se profundizará más en el área Front-End, sin descuidar otros aspectos transversales como los diferentes niveles y componentes involucrados en el ciclo de desarrollo de un software.
Estructura
La carrera está organizada en cuatro semestres a lo largo de dos años. El total de horas a lo largo de estos años es de 720 hs. En cada semestre se cursarán dos materias, en general en una de las materias se desarrollan aspectos técnicos con una carga de 6 hs semanales, y en la otra se desarrollan aspectos formativos complementarios durante 3 hs semanales. Se estiman que en cada semestre se darán 5 meses de clases (incluyendo exámenes) por semestre, aproximando 20 semanas y 180 hs por cuatrimestre. Se busca que la mayor parte del trabajo de los alumnos sea dentro de las horas de clase. Una materia es un espacio educativo donde se desarrolla un conjunto de contenidos centrados en un área de saber. Al aprobarse una materia se brindará una certificación intermedia que acredite los saberes parciales adquiridos. Esta certificación es solo para uso interno de seguimiento de la carrera.
Cada materia estará a cargo de un Docente Coordinador. Este docente coordinará y conducirá la dinámica necesaria en los encuentros. A su vez podrá haber Docentes Técnicos Específicos que impartirán un conjunto de horas en función de ahondar contenidos particulares. Por último en base a la cantidad de alumnos habrá Docentes Tutores que asistirán a los alumnos en la resolución de problemas, que acompañan la conducción del docente coordinador, coordinando grupos más pequeños, y respondiendo las consultas y correcciones de los alumnos y trabajos.
Cada materia definirá su método de acreditación, ya sea uno o más exámenes y/o un trabajo desarrollado a lo largo del semestre. Se incluirán en las evaluaciones tanto aspectos prácticos como teóricos para asegurar tanto la formación como la capacitación de los estudiantes. Cada cuatrimestre los alumnos desarrollarán un proyecto cuatrimestral. Dicho proyecto deberá ser defendido dentro del mes de terminada la materia, y en dicha evaluación se incluyen los aspectos teóricos y conceptuales trabajados. En dicha evaluación estarán los Docentes de ambas materias del cuatrimestre como jurado examinador.
Habrá un curso nivelatorio inicial, en dicho curso se verán algunos conceptos básicos de informática. Este curso tiene dos objetivos, por un lado nivelar conocimientos básicos del grupo, por otro lado servir de orientación vocacional para que los estudiantes conozcan el tipo de trabajos y habilidades que desarrollarán y utilizarán a lo largo de su carrera profesional, así como la dedicación requerida. El curso nivelatorio será obligatorio y excluyente, dado que busca nivelar la carrera y servir como autoevaluación para los estudiantes del esfuerzo necesario para la carrera.
Metodología de Enseñanza / Aprendizaje
A lo largo de la carrera habrá una gran orientación del aprendizaje hacia resolver proyectos realistas. En los mismos se utilizarán las dinámicas utilizadas realmente en las empresas de la industria IT. Así, en la sección de contenidos, se ejemplifica el tipo de proyectos que se logran desarrollar en dicha etapa para cada cuatrimestre.
El método de enseñanza-aprendizaje estará siempre centrado en el estudiante. Permanentemente se enfrentará a los alumnos a ejercicios y problemáticas donde se desarrollan e integran conocimientos, habilidades y actitudes. Atendiendo a los conocimientos específicos y también al proceso de solución del problema, desde la investigación hasta la solución del problema, creación de un producto o la búsqueda de respuesta a una pregunta o problemática conocida.
Las clases generarán lugar para poner en práctica la expresión de pensamiento crítico, comunicación efectiva, uso de tecnologías y trabajo en equipo. A modo de ejemplo, una clase de 3hs podría estar compuesta por una primera hora de puesta en común de los avances logrados por los alumnos, luego el docente plantea alguna problemática a resolver, y da tiempo a los alumnos para buscar y desarrollar herramientas para resolver el problema. En otros casos, según el tema, el docente introduce los conceptos necesarios para luego dar otras problemáticas a los alumnos para que resuelvan por sus propios medios aplicando dichos conceptos.
Las materias técnicas de 6 hs plantean problemas técnicos a resolver. Luego de dar lugar a investigación individual se procederá a explicar el tema y problemas donde aplicar dichos conceptos. Se intentará en lo posible alinear estas clases con los proyectos a desarrollar en cada cuatrimestre en la segunda materia. La segunda materia (Proyectos grupales) se basará mayormente en el desarrollo de un proyecto a lo largo del cuatrimestre. El contenido se dará basado en las necesidades de la etapa correspondiente y Durante los dos años en estas materias se dará trabajaran incrementalmente aspectos complementarios a la formación, desde pensamiento lógico y matemático, hasta metodologías de trabajo, tecnologías de redes utilizadas por las aplicaciones web, aspectos de calidad durante el desarrollo, inglés, y habilidades blandas (softskills). Todas estas habilidades son super necesarias para el desarrollo efectivo como profesional del software, por lo tanto la adquisición de las mismas desde el aspecto práctico es fundamental.
Se buscará la colaboración de ambas materias para la alineación de tiempos y contenidos en pos del proyecto. El proyecto del semestre debe ser el orientador y la necesidad de los contenidos dados. Así los contenidos descritos debajo son una guía flexible en base a las necesidades reales de los proyectos a trabajar
Detalle Académico
Curso Inicial Nivelatorio
Esquema de funcionamiento de una web en Internet. Backend, front end. Estructura general del curso y objetivos. Interpretación de texto y redacción. Aprendizaje y resolución de problemas con computadora, utilizando sistemas tipo Scratch. Estos sistemas buscan proveer una interfaz visual para introducir conceptos de programación, y ha demostrado gran efectividad a cualquier edad, siendo el tipo de enseñanza usada en la educación primaria y secundaria para introducir los mismos.
Se utilizará un sistema web con el contenido ya cargado, en las clases sincrónicas se hará puesta en común con los alumnos, se resolverán las dudas surgidas, se relacionarán los mismos con lo que verán a lo largo de la carrera y se dejará tiempo para resolver los mismos estando el docente disponible para asistirlos.
Se hará un encuentro adicional con aquellos que no hayan alcanzado las metas mínimas para analizar si ameritan cursarla igualmente con un plan de compensación de saberes faltantes y analizar puntos de mejoras para futuras ediciones. Programación de Sitios Web. Concepto de estructura de datos y de control. Declaración, inicialización, actualización y entrada/salida de datos. Estructuras de control básicas: secuencia, selección e iteración.
Modularización de un problema. Funciones. Arreglos y manipulaciones básicas. Testing unitario de funciones. Nociones de ordenamiento.
Sitios web. HTML. CSS. Implementación de layouts simples. Javascript. Manipulación de la página desde Javascript. Eventos. Interacción con el usuario. Browser testing automation (Cypress).
Proyecto Grupal Intermedio
Comunicación de problemas técnicos. Búsqueda de información y curación de respuestas. Uso de inglés básico para búsqueda de información. Sistemas de versionado. Git básico. Logica, algebra de bool. Capacidades personales para el aprendizaje de la programación y técnicas de estudio. Comprensión de Problemas. División de un problema y mapeo de las partes a posibles soluciones. Binario. Conjuntos. Inglés: vocabulario técnico (palabras) y uso para la búsqueda de información.
Desarrollo de un proyecto web simple, integrando todo lo realizado. Perspectivas iniciales de gestión de proyectos: división de tareas, control de calidad. No se utilizarán frameworks en esta etapa.
Ejemplo de proyecto: Una página web con alguna parte interactiva utilizando Javascript.
Programación Front end
Gestores de dependencias. Typescript. Concepto de programación orientada a objetos. Clases, instancias, atributos y métodos, palabra reservada “this”. JSON vs objetos con clase. Encapsulamiento y composición. Polimorfismo, herencia e interfaces. Herencia por composición y especialización. Patrones de diseño. Manejo de errores/excepciones. Inyección de dependencias. Testing unitario usando mocks.
Desarrollo con un Framework Front End. Uso de herramientas para el desarrollo web de proyectos grandes (linters, lenguajes de estilos avanzados, etc). División en componentes. Tipos de componentes (presentacionales, lógicos, etc). Testing de componentes. JSON. Conexión
Proyecto Grupal Intermedio
Manejo de la terminal. Trabajo en equipo. Uso de GIT colaborativo. Ciclo de vida de un proyecto. Modelado del mundo real. Estructuración de datos. Planillas de cálculo: filtros, fórmulas, funciones, formatos condicionales, validación, cruzado de datos, análisis con gráficos y tablas pivot. Medidas estadísticas y su significado. Tendencias y ajuste de funciones. Concepto de alcance del sistema. Organización de proyectos. Seguimiento. Sistemas de seguimiento de tareas. Análisis de sistemas. Técnicas. User story. Trabajo en equipo. User story mapping y división del trabajo. Scrum. Refactorización, manejo de la calidad. Deuda técnica. Protocolo HTTP. Redes. Arquitectura de internet. Protocolos TCP/IP. IP privada vs pública. SSL. Ejemplo de proyecto: Una aplicación web (sólo front end) con gran dinamismo. Utilizando APIs dadas por la materia o con alguna generada por herramientas web. Programación Back End Servidor HTTP de archivos estáticos. JSON. GET de un archivo JSON. Aplicación backend REST (ruteo). Patrón MVC. Implementación de Altas, Bajas y Modificaciones (ABM) en un servicio REST.
Gestores de base de datos. Instalación. Modelos de datos. Bases de datos NoSQL. MongoDB. SQL, manipulación de metadatos y de datos (DDL y DML). Consultas multitabla. Consultas con agrupamiento. Conexión del backend a una base de datos. ABM de una entidad. Mapeo Objeto Relacional. TypeORM. Autenticación.
Desarrollo de Aplicaciones web
Contenedores, Docker. Nociones de despliegue. Conexiones a terminales remotas (SSH). Sincronismo y atomicidad. ACID vs BASE; SQL vs NoSQL; diferencias en el modelado. MVC y otros patrones arquitectónicos frecuentes, 3 capas, 3 capas de DDD y otras arquitecturas usadas. Arquitecturas distribuidas, servicios/microservicios, cola de eventos/notificaciones, ventajas y desventajas. Ejemplos en otras tecnologías. Estructuras de datos. Complejidad. Preparación de CV, perfil de Linkedin. Preparación para entrevistas laborales. Portfolio. Servidor SSL local. Otros protocolos de internet. DNS, FTP, etc.
Proyecto Grupal Final
Ambientes de desarrollo. Configuración de ambientes. Niveles clásicos de ambientes. Concepto de bounded context, relación de arquitectura empresarial con arquitecturas de sistemas.
Proyecto a desarrollar en grupo aplicando todas las tecnologías y conocimientos vistos. Inglés: primero hacer las user story en inglés, después hacer los reportes de tareas en las reuniones en inglés. Comunicación efectiva. Trabajo en equipo. Ejemplo de proyecto: Una aplicación web (full stack) con gran dinamismo, persistencia de datos y testing automático.