Esta asignatura tiene una serie de mecanismos específicos para su evaluación y entrega; estos mecanismos son los mismos que se usan en las empresas de desarrollo de software. Con este objetivo se pretende que el estudiante aprenda a usar correctamente estos mecanismos, así cómo el proceso de aprendizaje guiado que se va a llevar en esta asignatura.
A la vez, el estudiante tendrá que describir un problema general que se irá resolviendo, a través de la asignatura, usando software. Este problema tendrá que incluir obligatoriamente un componente que se pueda desplegar en la nube. Este es el objetivo secundario: que el estudiante entienda el concepto de “problema” y de “solución basada en la nube”.
Pensar en una idea o problema a resolver que tenga entidad suficiente para poder llevar a cabo su desarrollo durante el resto de la asignatura.
Hago énfasis en el resto de la asignatura. Realmente tendrás que intentar desarrollar un producto que resuelva parcialmente el problema que has planteado aquí. En el siguiente objetivo tendrás que plantar los hitos de desarrollo del proyecto y plasmar las necesidades del usuario, y en el segundo objetivo comenzar a modelizar el problema de forma que se pueda empezar a trabajar en él en los objetivos siguientes.
En este caso, no necesariamente trabajarás en tu problema, sino en otro de otro estudiante de la asignatura.
En resumen: vas a tener que vivir con este proyecto, trabajar con él, hacerlo avanzar y darle cuerpo y realidad el resto de la asignatura. Tenlo en cuenta a la hora de plantearlo.
En este objetivo cero de la asignatura, y punto de partida del proyecto que se
desarrollará en la misma, se trata de poner a punto las herramientas que se van
a usar para mostrar el progreso del aprendizaje durante el resto del curso, a la
vez que se busca que se interioricen una serie de buenas prácticas en desarrollo
de software, que están siempre mediados por git
en los entornos de trabajo
actuales, que en general siguen el denominado manifiesto
ágil.
Un factor esencial en el desarrollo ágil es la preocupación poor la calidad. Una ingeniería debe ser capaz de proporcionar productos de calidad al cliente, y en esta asignatura se persigue que, en cada uno de los pasos, os preocupéis por la calidad de lo que entregáis. Por eso, se aconseja no os quedéis satisfechos con poner algo que parezca suficiente, sino que comprobéis que efectivamente muestra que habéis comprendido y puesto en práctica lo que se persigue que aprendáis en cada objetivo. En este caso concreto bastará con que repaséis de forma crítica con vosotros mismos la lista de comprobación; más adelante, además, habrá que pasar algunos tests, pero una vez pasados los tests para poder entregar el objetivo, la preocupación por la calidad os pide que efectivamente probéis manualmente que lo que se requiere en cada objetivo es efectivamente lo que estáis entregando. Eso os servirá para asimilar mejor las prácticas de cada objetivo, pero también para evitar trabajo por parte de quien corrige y también por vuestra parte, que tendréis que revisar el trabajo hasta que sea capaz de revisar el objetivo.
Para ello, se creará un repositorio que se usará durante el resto de la asignatura para mostrar el avance el proyecto en diferentes hitos en el desarrollo y despliegue de una aplicación. El repositorio contendrá inicialmente:
Un fichero con el nombre, formato y extensión convencional, que explique de qué va a ir el proyecto, en qué va a estar basado y algunas referencias relacionadas con el mismo. El fichero sólo hablará del problema que se quiere resolver. Las herramientas (excepto el lenguaje) se irán decidiendo sobre la marcha (a partir del objetivo 3.
Licencia que se va a usar en el proyecto, ya que se trata de un proyecto de software libre.
Otro fichero u otra serie de ficheros de uso habitual en repositorios.
En cuanto a la idea o problema que se quiere resolver, tiene que ser un problema que tenga entidad suficiente para poder crear, eventualmente, algún tipo de servidor que se pueda desplegar en la nube; es decir, tiene que tener descrita correctamente una lógica de negocio, que es el código propio que resuelve el problema.
Propio quiere decir que toda la lógica de negocio tendrá que ser programada por el estudiante, principalmente en el objetivo 4, y de ahí en adelante. Es decir, en este punto tienes que tener al menos una idea vaga de cómo resolver el problema mediante código con tus propios medios.
En general, este tipo de problemas requieren, por parte de la solución informática, una parte considerable de “computación” o “procesamiento” o “generación”. Si la idea y la descripción del problema sólo incluye palabras como “almacenamiento” y “búsqueda”, mientras que puede ser una aplicación completa perfectamente válida (dotada de un interfaz de usuario adecuado), los diferentes pasos por los que pasará la resolución del problema en los siguientes objetivos no van a dar mucho de sí. Es decir, si se trata simplemente de objetos con un ciclo CRUD (create, read, update y delete), descártala y piensa en otra que sí realice algún tipo de procesamiento.
De la misma forma, aplicaciones que tengan una dependencia externa fuerte (por ejemplo, que recojan datos de un API externo, que pidan una gran cantidad de datos al usuario o que simplemente integren una biblioteca externa para llevar a cabo una operación sobre datos también externos) tampoco van a ser buenos proyectos, porque sus pruebas van a ser complicadas y no van a incluir ningún tipo de modelo. Lo esencial siempre es que la aplicación incluya un valor añadido en forma de lógica de negocio, y que se describa correctamente el problema a solucionar de forma que haga falta tal lógica de negocio para solucionarlo.
En general, la descripción de la solución del problema (que tiene que pasar por la lógica de negocio) debe:
La lógica de negocio será creada y testeada más adelante, a partir del objetivo 4. Por eso es esencial que sea no trivial, para que los tests efectivamente comprueben que se está resolviendo el problema correctamente. Así mismo, los tests deben servir para validar que se ha resuelto el problema a través del programa, por lo que el problema debe ser formulado de forma que efectivamente, el procesamiento de la información que lleva a cabo el programa se pueda validar como una solución aceptable al problema.
En general, encontrar un proyecto que se pueda desarrollar en la asignatura es una cuestión personal, sobre todo porque es necesario que se trate de un proyecto donde uno tiene algún interés y conocimiento, y pueda identificar claramente cuales son los retos y qué es lo que funciona y aporta valor al cliente (que puede ser uno mismo). La metodología denominada design thinking te da una serie de pasos para poder entender posibles contextos en los cuales existe un problema, definirlo y proponer posibles soluciones.
Incluso con interés, un problema adicional es encontrar proyectos en los cuales existan ya datos. No se va a ser suficientemente empático (como pide la metodología de design thinking) en un proyecto que requiera del usuario introducir gran cantidad de datos para obtener un resultado puntual. Por eso, y también porque las fuentes de datos públicos suelen coincidir con problemas y preocupaciones de la ciudadanía, pueden ser interesantes como base para un proyecto en esta asignatura. Por ejemplo, pueden ser interesantes estos portales:
Estos se pueden usar tanto para completar datos de una aplicación, como para crear un backend de la aplicación, siempre que se le añada valor suficiente en forma de una lógica de negocio.
Considera esto aclaraciones a las posibles revisiones que se puedan hacer a lo enviado. Dado que se puede enviar este objetivo (y los demás) cuantas veces haga falta, en general este tipo de objeciones se harán por parte del profesor cuando lo entregues. Por supuesto, conviene tenerlas presentes antes de hacer el envío para cubrir este objetivo.
La ingeniería resuelve un problema para alguien, en nuestro caso por medios informáticos. Durante el curso se va a desarrollar esa solución, y hay que validar que efectivamente resuelva el problema. Si no lo entiendes o no te es cercano, no vas a poder validar la solución, ni entender qué es una posible solución al problema.
Problemas en los que tengas todos los datos necesarios y se sepa más o menos bien qué algoritmo se va a usar, o conjunto de procesamiento no trivial, para hallar la solución. También unos en los cuales una vez obtenido el resultado se pueda comprobar de forma más o menos independiente.
Todos los problemas que requieran entradas físicas; todos aquellos en los que el usuario o cliente tenga que introducir mucha información. En general, todo problema que no se entienda bien.
No. En inglés se usa a veces business para indicar la parte importante de algo, o la que hace el trabajo. Evidentemente, en una eventual publicación de la aplicación habría que basar un negocio en ella, porque es la que aporta valor al cliente; también con ello se destaca que el código que compone la lógica de negocio es el que aporta valor al cliente; pensando en cómo se puede aportar ese valor puede, a la vez, descubrir diferentes tipos de clientes que puedan estar interesados en la aplicación.
A la vez, se distingue entre clientes (son los que se benefician de alguna forma con la aplicación) y simples usuarios (que pueden beneficiarse o no, pero aportan información que pueda usarse para la lógica de negocio y por lo tanto el cliente).
Porque el estudiante tiene que programar esa lógica de negocio en los tests de los objetivos a partir del cuatro. Si es trivial, ni siquiera requiere tests; si es de almacena y busca, ni siquiera es lógica de negocio.
Si requiere un modelo complejo del programa, o un algoritmo complejo para trabajar con ella, puede ser un problema, porque, insisto, lo tiene que programar el estudiante. Si requiere predicción y por tanto un algoritmo de machine learning, doble problema, porque requiere conjunto de entrenamiento y programar el algoritmo. Se pueden usar, sin embargo, modelos ya entrenados siempre que esos modelos los programe uno.
Cualquiera que requiera muchos usuarios situados en muchos lugares diferentes, tendrán que desplegarse en la nube, siempre que los datos que necesite cada usuario estén en el servidor o bien proporcionados por el resto de usuarios. También los que usen datos agregados para generar información para otro cliente.
Las que estén dirigidas a un solo cliente, que tenga todos los datos necesarios para aplicar la lógica de negocio.
Haber rellenado en la hoja de cálculo compartida la equivalencia entre nombre real y nick en GitHub, así como nick en Telegram.
En general, va a ser necesario que entiendas el mecanismo de la asignatura y sus contenidos. Por ello, consulta los objetivos impartidos en la primera sesión si no has podido asistir a clase.
Primero, hay que configurar correctamente el entorno de desarrollo para este y otros proyectos, lo que incluye
Usar un repositorio de forma correcta no solo permite organizar el trabajo de desarrollo de forma más eficiente, sino que también contribuye a que sea más fácil colaborar con él y a la creación de buenos hábitos de trabajo colaborativo. Hay una serie de buenas prácticas, que incluyen, pero no se limitan, a
Usar o bien el sistema de control de versiones que se incluya en el entorno de desarrollo, y con esto quiero decir, por ejemplo, que si se suele usar Emacs, VSCode, o algún editor específico para el lenguaje de programación que se vaya a usar, suelen tener un sistema de control de versiones integrado, o bien la línea de órdenes, lo que se recomienda, pero solo para las órdenes propias de git (es decir, excluyendo órdenes de GitHub como crear repositorios, que son propias de la web y del cliente de línea de órdenes de GitHub).
Entender bien el concepto de commit; por esa razón, hacer commits que abarquen una sola funcionalidad o tarea, pero solo si la funcionalidad es correcta (no tiene errores sintácticos, por ejemplo). Hacer commits a menudo.
De la misma forma, recordar que commit y push no son inseparables. Se hace push cuando se quiere sincronizar, y cuando se quieren pasar los tests. En caso de recursos de test limitados (créditos limitados, por ejemplo), cuantos menos push se hagan, mejor. Por eso, hacerlos sólo cuando se haya terminado una sesión de trabajo o se quiera sincronizar con el resto del equipo.
Usar desde el principio un fichero .gitignore
para evitar añadir
accidentalmente ficheros que no deban estar en el repositorio, como ficheros
de respaldo o ficheros generados en compilación o construcción. Si se
encuentran estos ficheros, se advertirá en la corrección, pero eventualmente
pueden significar que no se alcance la máxima nota en el objetivo correspondiente.
Siempre comprobar, antes de hacer un pull request, que se está trabajando
sobre la última copia del fichero compartido (el de la entrega) para evitar
conflictos que imposibiliten que se lleve a cabo la fusión por parte de la
persona encargada del mismo. Para ello, hacer git pull --rebase
inmediatamente antes de hacer push a una rama desde la que se vaya a
hacer PR.
El proceso de design thinking para decidir sobre qué problema trabajar está descrito también en esta presentación o este tema.
El concepto de lógica de negocio se explica en este vídeo.
Cada proyecto tendrá su propio repositorio en GitHub. La documentación se incluirá en ficheros con el formato Markdown (en su sabor GitHub, en caso de que se desee). Esta descripción de la aplicación irá evolucionando con los diferentes objetivos.
En este objetivo, los ficheros solicitados se crearán, en general,
simplemente respondiendo a las preguntas de creación del
repositorio. Sin embargo, adicionalmente hay que incluir en el fichero
README.md
una descripción de un problema que se vaya a intentar
solucionar a lo largo de la asignatura, en las entregas del proyecto
que se van a hacer, un proyecto que se desplegará en la nube. A partir
de ahora, en todos los objetivos se seguirá el siguiente
procedimiento.
Para auxiliar al estudiante en estas labores se ha creado un plugin de
git
específico para la asignatura. Seguir las instrucciones en el mismo plugin para descargarlo e instalarlo.
git iv
objetivo 0
, que creará la rama y se trabajará en la misma.git iv sube-objetivo
. El mismo git imprimirá
instrucciones que se podrán seguir (pinchando en un enlace) para
crear el pull request (de una rama en tu repositorio a la rama
principal).Una vez hecho lo anterior, se añadirá al fichero de entrega del
proyecto,
en la fila correspondiente (que estará ya pre-rellena con tu nombre), el nombre
del proyecto, un enlace al PR que has creado desde una rama de tu repositorio
y una versión, que seguirá el formato estándar vx.y.z
, llamado versionado
semántico. Para enviar este PR crearás también una
rama específica del repositorio de la asignatura, y harás un nuevo PR desde la
misma.
Por si queda poco claro, son dos PRs en dos repositorios diferentes. Uno en tu repositorio, desde una rama creada específicamente para cada objetivo a la principal, otro en el de la asignatura, desde una rama también específica del objetivo a la principal.
El sistema de tests asegura la contención de cualquier tipo de cambio por parte del estudiante en el que se haga algo que pueda afectar al repositorio de la asignatura. Por lo tanto se aconseja al estudiante que pruebe y experimente con los envíos, siguiendo únicamente las condiciones que se indican en la propia plantilla de envíos:
El README.md
del proyecto será, efectivamente, la descripción del proyecto en
sí. Documentación adicional (por ejemplo, en la documentación de este objetivo
mostrar que se han llevado a cabo las configuraciones que se han solicitado) se
deben poner en un directorio aparte y enlazarse desde el README.md en un
apartado específico (al final del mismo, por ejemplo). Por ejemplo, pantallazos
u otro tipo de documentación que pruebe que se ha configurado correctamente git.
En general, el README.md sólo incluirá temas relativos al proyecto en sí. Lo necesario para valorar si se ha alcanzado el objetivo o no deberán ir en documentos aparte, para que se puedan corregir.
Cuando el profesor apruebe el PR en el repositorio del estudiante, se podrá fusionar ese contenido con su rama principal; en ese momento se estimará que se ha alcanzado el objetivo requerido. El profesor revisará, uno por uno, todos los envíos y hará preguntas (que habrá que aclarar generalmente investigando algún aspecto que no quede claro y cambiando el código) o sugerencias, que encaminarán al estudiante a entender mejor los objetivos correspondientes, y eventualmente a superar el objetivo.
Por esto, se puede entregar el objetivo todas las veces que necesites, siguiendo los consejos del profesor. No trates de poner lo que pide en la primera ocasión, ni en la segunda. Trata de entender qué es lo que tienes que aprender en cada objetivo, y transmítelo en lo que entregues. Lo importante siempre es lo que aprendas, no lo que pongas o escribas. Esto se aplica a este objetivo, y por supuesto al resto de la asignatura.
Importante: el título de este pull request tiene que incluir la cadena
[IV-22-23]
para que pueda filtrar fácilmente los mensajes recibidos. Cuando se
hagan en el PR las mejoras como respuesta a la revisión del profesor, el
estudiante deberá pedir explícitamente revisiones adicionales con un comentario
en el mismo que diga “Listo para revisión”.
Hazte estas preguntas cuando envíes el objetivo. Tendrá que ser positiva la respuesta a todas, si quieres tener posibilidades de superación del objetivo, pero que las marques como conseguidas no garantiza ni tiene relación alguna con la consecución del mismo. Así que marca solamente las que efectivamente hayas superado.
* [ ] ¿Se trata de un problema real del que se tenga conocimiento personal?
* [ ] ¿Se trata de un problema que para solucionar requiera el despliegue
de una aplicación en la nube?
* [ ] ¿La solución requiere una cierta cantidad de lógica de negocio, en vez
solucionarse sólo almacenando y buscando?
* [ ] ¿Se ha incluído la configuración del repositorio y se ha enlazado desde el
`README`?
* [ ] ¿Tienes todos los datos necesarios para poder resolver el problema, o vas
a requerir que el usuario los introduzca?
* [ ] ¿Has seguido la lista de comprobación o estás marcando al buen tuntún
todo?
Puedes pegar este texto al PR que hagas en tu propio repositorio, e ir marcando según vayas comprobando que la respuesta es afirmativa. Ayudará si pones alguna explicación de por qué la respuesta es afirmativa. El objetivo de esta lista de comprobación es que te ayude a prepararte para entregar el contenido del objetivo, no que pongas y marques absolutamente todo. Hacerlo así no contribuye en absoluto a la superación del objetivo, y sí aumenta la carga de trabajo de quien lo revisa, que tendrá que comprobar que efectivamente lo has hecho o indicarte en la revisión cuando has marcado algo que no has cumplido de ninguna de las maneras.
El alcanzar este objetivo avanzará, aproximadamente, 5% de la parte correspondiente de la asignatura.
Los objetivos no tienen fecha de entrega. Sin embargo, hay que superar un número mínimo de objetivos para aprobar la asignatura. Podemos dar, por tanto, medidas estadísticas a partir del desempeño en años anteriores, para que los estudiantes se organicen.
Una vez entregado, puedes comenzar por tu cuenta con el siguiente objetivo. Puedes tener todos los PRs que desees abiertos en tu repositorio.