Este semestre será interesante, se intentaran cosas nuevas que no

Anuncio
Este semestre será interesante, se intentaran cosas nuevas que no se han intentado semestres
anteriores, es un curso relativamente distinto a los curso tradicionales
Puede que después de la presentación introductoria los estudiantes del curso caigan en
pánico, aunque a esta altura de la carrera ya quizás no suele suceder.
No hay razones para entrar en pánico con esta materia, al final no es para tanto.
El profesor de la materia es Demián Gutierrez, Ingeniero de Sistemas, y tiene experiencia en el
mundo profesional y académico, lo que hace más interesante el curso por haber trabajado
mucho en el área. En este curso usaremos métodos agiles de desarrollos de software.
En este curso aprenderemos cosas que nunca habíamos visto hasta ahora de la Programación
orientada a objetos (OO). Pasaremos de aquello de desarrollar software artesanalmente a
desarrollar software usando ingeniería como un producto final.
Siendo esta diapositiva la columna vertebral del curso, basado en aplicar técnicas y conceptos
de agilidad, arquitectura de software, diseño orientado a objetos, pruebas, gestión de
proyectos, entre otros.
Además, tenemos como objetivos que nosotros los estudiantes del curso como futuros
ingenieros, podamos desarrollar criterios ante distintos escenarios y tipos de proyectos de
desarrollo de software.
El rectángulo verde representa todo lo que se puede hacer, todos los métodos y tecnologías
que existen en la ingeniería del software, y el punto negro representa sólo lo que podemos
cubrir en este curso, por lo tanto, la importancia de desarrollar criterios es para poder
enfrentar en un futuro el rectángulo verde y no quedarnos en el punto negro.
Aún más extraoficialmente, si queremos, podemos soñar y volar un poco, tratar de pensar un
poco diferente, tal como la gente de Apple se especializó con este slogan.
Debemos buscar la innovación, buscar encontrar formas distintas de ver el mundo y los
problemas, desatar la creatividad y la imaginación es realmente importante.
Aunque mucha gente tienda a ver a los ingenieros de sistemas y a los ingenieros de software
como personas muy frías, mecánicas, etc, no debe ser así, sin creatividad no vamos a ningún
lado.
Debemos ser capaces de tomar riesgos, y a su vez, asumir las consecuencias sean buenas o
malas.
La idea de esta materia, es que nosotros como estudiantes, pasemos de simples
programadores a desarrolladores de software, por supuesto, transformarnos en mejores
programadores más cerca de ser ingenieros, y porque no estar más cerca de ser
emprendedores, quizás al montar una empresa y producir fuentes de trabajo, riqueza, etc en
un futuro.
Como estrategia de aprendizaje se usa desde hace 3 años más o menos en el curso, RAIS que
es de Reproducción del Ambiente Industrial en el salón de clases.
RAIS básicamente funciona con 3 componentes, el primero es el producto (producto a
desarrollar), el segundo componente es la sinergia de capacitación de conocimientos, y es
que, para desarrollar el producto hay que aprender ciertas técnicas y conceptos que veremos
en el curso de la manera tradicional, y el tercer componente es la sinergia de desarrollo del
producto con discusiones, exposiciones y otras técnicas sobre el producto.
El curso está centrado en nosotros los estudiantes, y de nosotros depende aprovecharlo o no.
Y se basa en la premisa de que todos nosotros (los estudiantes) somos extremadamente
talentosos.
El conocimiento está en el salón de clases y con el profesor, pero también existe el riesgo que
se pueda causar polémica con la gente que está afuera, por lo tanto, debemos abrir los ojos
para poder argumentar, dialogar, debatir, etc…. Estamos a un click de distancia de cualquier
conocimiento.
Nuestro objetivo es hacer del curso de Ingeniería de Software empresas de Desarrollo de
software.
Por el reality show El Aprendiz, podemos encontrar semejanzas con el curso, debemos
procurar ser despedidos de nuestra compañía.
Y para evitar ser despedidos, en este curso no vamos a enseñar ingeniería, si no vamos a
hacerla.
Para hacer ingeniería, nos vamos a transformar en emprendedores, debemos dejar de pensar
como estudiantes, y para ello crearemos y nos organizaremos con las compañías.
Cada compañía va a definir logos, imagen, ect para definir una identidad y así poder ser
identificados.
Y cada uno va a tener roles, además, cada compañía tendrá un gerente (ir pensando en
quienes quieren ser gerentes), que será el responsable de su compañía y el profesor en cierto
sentido, trabajara como jefe ejecutivo, responsable también de los productos, cabe destacar,
que contamos con el apoyo y ayuda de él.
El trabajo de gerente es un poco más duro de lo normal, implica dirigir la compañía y además
implica ensuciarse las manos junto con los demás para desarrollar el producto final.
Pero ser gerente, deja como ganancia la experiencia y el aprendizaje, además que no es un
cargo nada fácil.
Usando RAIS, la idea principal del curso es desarrollar el producto, y si no lo terminamos, al
final del semestre hemos fracasado así se hayan aprobado los exámenes escritos.
Semestres anteriores se han desarrollado juegos, como productos finales, este semestre no es
necesario desarrollar juegos, desarrollaremos 2 proyectos interesantes, necesarios para el
profesor y quizás para más personas, usando principalmente JAVA (pues se cuenta con
personas preparadas en JAVA para que nos apoyen y nos guíen)
Nuestro clientes son principalmente, nosotros mismos, incluyendo a toda la facultad, pues al
salir y exponer el proyecto en patio central debemos sentirnos orgullosos del trabajo logrado.
Además de trabajar desarrollando el producto, debemos divertirnos, es decir si hacemos lo
que nos gusta nada se hace difícil.
Como anteriormente se ha hecho, haremos una presentación pública tengamos lo que
tengamos, si hacemos un mal producto pasaremos la pena delante de todos y si hacemos un
producto bueno podremos jactarnos ante los demás del fruto de nuestro trabajo.
El factor humano juega un papel muy importante en el desarrollo del proyecto, es un reto que
va mucho más allá del producto tradicional de las demás materias, debe producirse un
verdadero trabajo en grupo y una adecuada distribución del trabajo, esto quiere decir que en
un lapso determinado de tiempo debemos trabajar así sea integrando código, trabajando en
conjunto y luego trabajando individualmente, y así.. A eso nos enfrentamos cuando hacemos
Ing del software, nos enfrentamos a un grupo de trabajo, a un grupo de proyecto que requiere
trabajar de manera coordinada para cumplir un objetivo.
Es muy importante el trabajo en grupo, pues por un miembro que no cumpla su trabajo,
retrasa a toda la compañía. Por supuesto, existirán problemas, mal entendidos o conflictos,
pero lo importante, es la manera como se resuelvan. El profesor estará disponible para
ayudarnos a resolver cualquier inconveniente que se presente. En un grupo de trabajo “Se
comparte la victoria, se comparte la derrota”.
En cuanto a la evaluación, usaremos la entrega de iteraciones cada 15 días, con el motivo de
medir el avance de las compañías frecuentemente (establecer un ritmo de trabajo).
Preguntaremos: Que fue lo que se hizo durante la iteración?, Quien lo hizo? Cuánto tiempo se
empleó? Costo mucho o poco? Que dificultades tuvimos durante la ejecución de la iteración? Y
Como puede el profesor ayudarnos a solventarlas? Que se va a hacer en la próxima iteración?
Y Quien lo va a hacer? (esto tiene que ver con la parte de distribuirse el trabajo en los
miembros del grupo de la compañía.)
Además, por medio del link publicado en la diapositiva, se realizara cada 15 días una auto y
evaluación de desempeño, para evaluarnos nosotros mismos y a los compañeros. De esta
manera, el profesor va procesando y calificando la información para facilitar el trabajo.
La diferencia con un proyecto tradicional, es que, el profesor (jefe ejecutivo) hará un
seguimiento de todo y tendrá una idea de cómo estamos funcionando.
El plan de evaluación, consistirá en 3 exámenes escritos que equivalen a un 40%, el proyecto
(evaluación del desarrollo del producto) 40%, hetereovaluación (nota apreciativa) 10%,
coevaluación/ autoevaluación (la hacemos nosotros mismos) 10%. Pero, si la nota promedio de
los exámenes escritos es menor que 10pts, entonces el estudiante no tendrá derecho a
presentar el proyecto. Este semestre, como nueva modalidad, trataremos de presentar los
exámenes en línea, con la idea de que tengamos feedback inmediato, es decir, saber la nota de
una vez.
Cabe destacar, que todos los miércoles tendremos laboratorio con clases dictadas por la
preparadora, sobre las tecnologías que iremos a usar para desarrollar el producto, empezando
por java.
Hay también un bono extra, de dos puntos en la definitiva, con transcripciones textuales de los
videos (tal cual como este archivo).
Es importante saber, que la nota del proyecto es individual, a través de ciertas estrategias que
el profesor considere. Los exámenes escritos son a libro abierto (se acepta todo menos los
teléfonos celulares), y OJO con las inasistencias pues se aplicara el reglamento (75% mínimo de
asistencia), y más aún, OJO con los gerentes, deben estar siempre presentes.
Considerémonos en la libertad de preguntar, discutir y argumentar, sin miedos!
En cuanto a comunicación se refiere, como medio principal está el foro, si no llega a funcionar,
entonces puede ser por los demás medios (twitter), o en caso de extrema emergencia al
correo: [email protected]
Tal cual como en la industria, o en el campo laboral, se nos exige como primera tarea; un
resumen curricular, completar la encuesta de reclutamiento de personal (ver link en la
diapositiva) y describir en una carta de presentación lo que hemos hecho para saber que
podemos aportar a la compañía. Considerando “cero tolerancias a excusas”, si nos
comprometemos a algo hay que procurar cumplirlo.
En el curso se necesita gente responsable, comprometida y motivada para desarrollar un
producto
De referencias bibliográficas, los dos libros de las esquinas son referencias clásicas, mucha
teoría para la parte práctica pero sin embargo pueden llegar a ser útiles.
El libro de la izquierda útil para interfaz de usuarios y el de la derecha útil para adquirir
conocimientos sobre patrones de diseño.
Cuando lleguemos a UML usaremos estos, pero más adelante seremos mas específicos al
respecto.
Agilidad es lo que vamos a hacer y a utilizar en este curso, tal cual como lo están haciendo las
industrias y les ha resultado excelente. La idea es terminar el curso con los conocimiento
básicos y necesarios de métodos agiles, para después enfrentarnos a esto en la industria, y
para prepararnos también como agentes de propagación con esto.
Jens Ostergaard, con muchos años de experiencia para obtener esa certificación, en su charla
introductoria a Scrum (link en la lámina), discute por qué el Scrum y por qué usarlo en las
compañías. Habla sobre el trabajo que hacían en el dpto. de tecnologías de información (a
finales de los 80), la cual en aquélla época la gente no tenía ni idea de que era eso, y lo que sea
que hiciera la organización, los usuarios pensaban que era una especie de magia, por la misma
falta de conocimientos que tenían. Pero en 1989, el primer líder de proyectos de ellos, dijo,
“Ustedes no pueden hablar con los usuarios, nunca más!” (Es decir los desarrolladores, tenían
prohibido hablar con los usuarios), “todo tiene que pasar a través de mí, yo tengo que tener la
“visión global”, la “vista de helicóptero””, tal como el proyecto comando- control, en la que el
líder de proyecto lo controla y el desarrollador hace lo que el líder dice que haga, generando
así, problemas de comunicación quizás. (En nuestro caso del curso, el profesor va a tener la
visión global). Continua Ostergaard.. “todo esto hace, en cierto sentido que se pierda la
responsabilidad”, pues yo estoy haciendo un producto para alguien que nunca conoceré, a
todo esto se empieza a añadir más procesos, mas procedimientos y más burocracia, (siendo
muy difícil trabajar en un ambiente así). Todo esto produjo en ese tiempo, limitar la
creatividad, mas recetas (decirme como hacer el trabajo) y menos chance para crear o innovar
al hacer el trabajo.
Hacer software, es una cuestión de responsabilidad y pasión, aunque hayan días infernales en
las que las cosas no funcionan como uno quiere, también hay días en que obtienes los
resultados que anhelas. Es una cuestión de valores. Hay gente que trabaja en el mercado
haciendo software y les va mal por no tener la actitud correcta para desarrollar software.
Hay varias formas de desarrollar software.
-La forma artesanal: es desarrollar sin método, sin estrategia clara, sin plan, sin gestión y sin
seguimiento “mientras vamos viendo vamos yendo”, aunque puede funcionar en algunos
casos, es mala idea.
-La forma usando ingeniería: es desarrollar usando método y estrategia bien definida, con una
planificación, tecnología, arquitectura y gestión adecuada, teniendo dos visiones: la de
Métodos tradicionales o métodos pesados (en los años 70 más o menos), donde ocurrió la
llamada crisis del software, en la que el 70% de los proyectos de software fallaban, por estar
concentrados en el proceso como tal, por usar recetas, métodos descriptivos, burocráticos y
con planificaciones rígidas (el plan ejecutable no se modifica). Y la segunda visión, es la de
métodos agiles, concentrado en el producto. Se basa en cumplir el plan si se puede, pero más
importante es el éxito del producto de software: que se cumplan los objetivos (se resuelva el
problema) con el tiempo y presupuesto predefinidos, además que el equipo de desarrollo
haya sobrevivido a pesar de las inconvenientes. Tenemos que tener la manera de enfrentar los
cambios, pues actualmente la concepción de la gente en cuanto a productos de software se
refiere, cambia de la noche a la mañana.
Como proceso clásico, tenemos el de cascada. De hecho, todavía se utiliza y es interesante
desde el punto de vista académico y conceptual pues nos permite encontrar ciertas categorías
de lo que se hace en la ingeniera de software, pero en la mayoría de los casos no funciona.
Pues se definen los requerimientos (lo que tengo que hacer) junto con el cliente, se hacen
compromisos iniciales (como ejemplo un software con interfaz gráfica), luego se hace el
diseño del sistema y de software (la arquitectura del proyecto, junto con los planos del
sistema), luego de eso se implementa según los planos (programación) y después se hacen
pruebas (se prueba que el sistema esté bien programado) y eventualmente pongo el sistema
en operación y mantenimiento. El problema está en que este proceso no está sujeto a
cambios, pues al modificar algo por ejemplo en la implementación se tendría que comenzar el
proceso de nuevo desde su inicio, lo cual genera altos costos.
En cambio, el proyecto ideal (explicado por Javier González Jiménez, español), muestra como
actividades para realizarlo una especie de cascada; con la primera fase de requerimientos, luego el
análisis, seguido por el diseño, la construcción (programación) y las pruebas. En la que el cliente sabe
perfectamente lo que quiere y lo que necesita, los desarrolladores de software saben cómo hacer para
conseguir lo que el cliente quiere y se toman requisitos detallados al inicio del proyecto con el cliente,
en base a eso se hace un plan de cumplimiento de las actividades y no es necesario volver a hablar con
el cliente hasta el final del proyecto.
La gente de requisitos en el proyecto ideal, toma nota de lo que el cliente quiere, pasa esos documentos
a la gente de análisis, la gente de análisis hace su análisis y pasa esos documentos a la gente de diseño,
la gente de diseño hace su diseño con los respectivos planos y pasa eso a los programadores, los
programadores saben exactamente que implementar y todo sale bien , nada cambia durante el
desarrollo del proyecto.
Al final, el cliente recibe lo que esperaba y no hay que cambiar absolutamente nada.
Al final de esta clase, hicimos una dinámica con legos, el cliente (era el profesor) necesitaba un avión
para vuelos internacionales, este avión obviamente debía ser grande y tener las alas en amarillo. El
cliente se reunió con el gerente de la empresa y le expuso su caso, el gerente o jefe se reunió luego con
el ingeniero del software para explicarle lo que el cliente necesita, este, realizó los planos del proyecto y
el logo requerido para dárselo a los constructores. Cabe destacar, que en este proceso hubo falta de
información, los constructores en un tiempo definido trataron de desarrollar el avión, pero había que
tomar en cuenta varios factores, como que los legos de color amarillo para las alas eran muy pequeños y
era casi imposible hacerlas, además que quizás en ese tiempo no podían culminar con el proyecto, había
presión, habían nervios, dudas… Resultando así, que el cliente no quedara satisfecho. De ahí, la
importancia de organizarse y hacer cumplir al pie de la letra, las actividades requeridas para hacer un
proyecto ideal (explicado anteriormente).
Descargar