E-Dobavki: un servicio web para buscar aditivos alimentarios en Java y Spring Boot, escrito por mis alumnos

introducción

Dio la casualidad de que desde hace casi dos años enseño programación en una de las escuelas de informática de Kiev. Empecé a hacer esto sólo por diversión. Una vez escribí un blog de programación y luego lo dejé. Pero el deseo de contar cosas útiles a las personas interesadas no ha desaparecido.

Mi idioma principal es Java. Escribí juegos para teléfonos móviles, software para comunicaciones por radio y varios servicios web. Y enseño Java.

Aquí quiero contar la historia del entrenamiento de mi último grupo. Cómo pasaron de comenzar la capacitación a escribir un servicio web funcional. Un servicio web útil para encontrar suplementos nutricionales. Gratis, sin publicidad, registro y SMS.

El servicio en sí está aquí. E-Dobavki.com.

E-Dobavki: un servicio web para buscar aditivos alimentarios en Java y Spring Boot, escrito por mis alumnos

El proyecto es educativo y no contiene publicidad. Según tengo entendido por esta publicacion, puede proporcionar enlaces a dichos proyectos.

Antes de describir el proyecto en sí, les contaré un poco sobre el proceso de aprendizaje del grupo; sin esto, el panorama quedará incompleto.

9 meses de entrenamiento

En la escuela donde doy clases, el curso de Java se divide en 2 partes. En total, el curso dura aproximadamente 9 meses, con todos los descansos (vacaciones de Año Nuevo, tiempo para redactar proyectos intermedios).

La primera parte introduce a los estudiantes a los conceptos básicos del lenguaje. Variables, métodos, conceptos básicos de programación orientada a objetos y todo eso.

La segunda parte del curso establece que el estudiante ya comprende más o menos cómo escribir en Java y se le puede proporcionar una pila de tecnología "adulta". Todo comienza con SQL, luego JDBC, Hibernate. Luego HTTP, servlets. El siguiente es Spring, un poco sobre git y maven. Y los estudiantes escriben proyectos finales.

Toda la formación se divide en módulos. Dirigí clases dos veces por semana. La duración de una lección es de dos horas.

Mi enfoque para aprender

Lancé 5 grupos. Parece mucho para dos años, pero casi siempre lideré 2 grupos en paralelo.

He probado diferentes enfoques.

La primera opción es que se asigne un par para una presentación con una teoría. El segundo par es pura práctica. Este enfoque de alguna manera funcionó, pero en mi opinión no fue muy efectivo.

La segunda opción que se me ocurrió y en la que estoy trabajando ahora es no dedicar un par entero a la teoría. En lugar de eso, mezclo secciones cortas de teoría durante 5 a 10 minutos y las refuerzo inmediatamente con ejemplos prácticos. Este enfoque funciona mejor.

Si hay suficiente tiempo, llamo a los estudiantes a mi casa, los siento frente a mi computadora portátil y ellos mismos hacen ejemplos prácticos. Funciona muy bien, pero lamentablemente lleva mucho tiempo.

No todos llegan al final

Una revelación para mí fue el hecho de que no todo el grupo llega al final del curso.

Según mis observaciones, sólo la mitad de los estudiantes escriben el proyecto final. La mayoría de ellos son eliminados durante la primera parte del curso. Y los que han llegado a la segunda parte no suelen caer.

Se van por diversos motivos.

La primera es la complejidad. No importa lo que digan, Java no es el lenguaje más simple. Para escribir incluso el programa más simple, es necesario comprender el concepto de clase, método. Y para entender por qué necesitas escribir. principal vacío estático público (Cadena [] arg) Hay algunos conceptos más que entender.

Compare esto con Turbo Pascal, que es con lo que comenzaron muchas personas, incluido yo:

begin
    writeln("Первая программа");
end.

Hasta donde yo sé, la escuela resolverá este problema introduciendo pruebas adicionales. Ahora no todo el mundo puede estudiar Java. Esto todavía está en la etapa conceptual, pero el paso es claramente el correcto.

Y la segunda razón es como en la imagen de abajo:

E-Dobavki: un servicio web para buscar aditivos alimentarios en Java y Spring Boot, escrito por mis alumnos

La gente suele pensar que programar consiste en escribir una gran cantidad de texto y ganar mucho dinero por ello. Como redactor, sólo que más dinero.

La realidad es un poco diferente. Mucho código de rutina, errores no obvios, un proceso de aprendizaje constante. Es interesante, pero no para todos.

Estas son las estadísticas. Al principio me molestó, pensé que tal vez estaba haciendo algo mal. Ahora entiendo que las estadísticas son aproximadamente las mismas para la mayoría de los cursos. Ahora no me preocupo por eso, pero enseño a aquellas personas que estén interesadas en ello.

Idea de servicio

Una vez que los estudiantes completaron todo el curso, llegó el momento de escribir el proyecto final. Había diferentes ideas. Ofrecieron hojas de tareas pendientes, proyectos de gestión de proyectos y algo más.

Quería hacer algo simple pero útil. Mi criterio era simple: si mis amigos y yo podíamos utilizarlo. Un servicio web de búsqueda de aditivos alimentarios cumplía estos requisitos.

La idea es sencilla. Cuando compras un producto en una tienda, ves algún tipo de aditivo E en la composición. En el código no queda claro qué tan peligroso es o no (y también hay aditivos peligrosos que están prohibidos en muchos países).

Abres el sitio web, ingresas el nombre del suplemento (número, uno de los nombres alternativos) y obtienes un resumen del suplemento:

E-Dobavki: un servicio web para buscar aditivos alimentarios en Java y Spring Boot, escrito por mis alumnos

Hay proyectos similares. También puedes simplemente escribir el aditivo en Google, aunque no siempre muestra la información correctamente.

Pero como el proyecto es educativo, las dificultades mencionadas no nos detuvieron :)

implementación

Todos escribieron en Java, código fuente del proyecto en Github.

Éramos 7, incluyéndome a mí. Todos hicieron una solicitud de extracción y yo u otra persona del grupo aceptamos esta solicitud de extracción.

La implementación del proyecto tomó alrededor de un mes, desde que se expresó la idea hasta el estado que se ve ahora.

Aditivos de análisis

Lo primero que hizo uno de los estudiantes, además de la creación básica de un marco alrededor de la base de datos (entidades, repositorios, etc.), fue analizar complementos de un sitio de información existente.

Esto fue necesario para probar los puntos restantes. No se necesita código adicional para completar la base de datos. Habiendo analizado rápidamente varios aditivos, pudimos probar más la interfaz de usuario, la clasificación y el filtrado.

Spring Boot le permite crear múltiples perfiles. Un perfil es un archivo con configuraciones.

Para el entorno de desarrollo, utilizamos un perfil con un DBMS H2 local y el puerto HTTP predeterminado (8080). Por lo tanto, cada vez que se iniciaba la aplicación, se borraba la base de datos. El analizador en este caso fue lo que nos salvó.

Buscar y filtrar

Un punto importante es la búsqueda y el filtrado. Una persona en una tienda debe hacer clic rápidamente en el código del suplemento, o en uno de los nombres, y obtener el resultado.

Por tanto, la entidad Aditiva tiene varios campos. Este es el código del aditivo, nombres alternativos, descripción. La búsqueda se realiza mediante Me gusta en todos los campos al mismo tiempo. Y si ingresas [123] o [amaranto], obtendrás el mismo resultado.

Hicimos todo esto según las especificaciones. Esta es una parte de Spring que le permite describir condiciones de búsqueda básicas (como algún campo, por ejemplo) y luego combinar estas condiciones (O o Y).

Después de escribir una docena de especificaciones, puede hacer consultas complejas como "todos los aditivos colorantes peligrosos que tienen la palabra [rojo] en la descripción".

En cuanto a trabajar con la base de datos Spring, lo encuentro muy conveniente. Esto es especialmente cierto cuando se trabaja con consultas complejas. Entiendo que esto tiene su propia sobrecarga y una consulta SQL optimizada y escrita manualmente se ejecutará más rápido.

Pero también soy de la opinión de que no es necesario optimizar todo de antemano. La primera versión debe arrancar, funcionar y permitir la sustitución de piezas individuales. Y si hay una carga, estas partes individuales deben reescribirse.

Seguridad

Es sencillo. Hay usuarios con el rol ADMIN: pueden editar adiciones, eliminarlas y agregar otras nuevas.

Y hay otros usuarios (registrados o no). Sólo pueden navegar por la lista de aditivos y buscar los que necesitan.

Spring Security se utilizó para separar derechos. Los datos del usuario se almacenan en una base de datos.

Los usuarios pueden registrarse. Ahora no da nada. Si los estudiantes continúan desarrollando el servicio e introduciendo algunas funciones personalizadas, el registro les resultará útil.

Capacidad de respuesta y Bootstrap

El siguiente punto es la adaptabilidad. En el caso de nuestro servicio (al menos tal como lo vimos), la mayoría de usuarios serán con teléfonos móviles. Y necesitas ver rápidamente el suplemento desde tu teléfono móvil.

Para no sufrir con CSS, utilizamos Bootstrap. Barato, alegre y parece decente.

No puedo llamar ideal a la interfaz. La página principal lo es aún menos y la página para una descripción detallada del aditivo es estrecha; en los teléfonos móviles es necesario ampliarla.

Sólo puedo decir que traté de interferir lo menos posible con el trabajo. Este sigue siendo un proyecto de estudiantes. Y, por supuesto, los muchachos podrán corregir esos momentos más tarde.

Un minuto de optimización SEO

Como he estado estrechamente involucrado en sitios web y todo lo relacionado con SEO durante más de dos años, no podría lanzar un proyecto sin al menos una optimización SEO básica.

De hecho, hice una generación de plantilla de Título y Descripción para cada complemento. La URL es casi CNC, aunque se puede acortar.

También agregué contadores de asistencia. Se agregó el sitio a Yandex Webmaster y Google Search Console para monitorear las advertencias de los motores de búsqueda.

No es suficiente. También debe agregar robots.txt y sitemap.xml para una indexación completa. Pero nuevamente, este es un proyecto de estudiantes. Les diré lo que hay que hacer y, si quieren, lo harán.

Debe adjuntar un certificado SSL. El programa gratuito Let's Encrypt también funcionará. Hice esto para Spring Boot. No es difícil hacerlo y la confianza del PS aumenta.

¿Qué sigue para el proyecto?

Entonces, de hecho, la elección depende de los chicos. La idea original del proyecto también incluía una base de datos de productos con enlaces a aditivos.

Ingrese a "Snickers" y vea qué aditivos nutricionales contiene.

Ya al ​​inicio del proyecto sabía que no tendríamos ningún producto :) Por lo tanto, comenzamos sólo con aditivos.

Ahora puedes agregar productos e introducir otros adicionales. bollos. Si es una base de datos extensa, habrá usuarios.

Despliegue

El proyecto se implementó en VPS, Aruba Cloud. Este es el VPS más barato que pudimos encontrar. Llevo más de un año utilizando este proveedor para mis proyectos y estoy gratamente satisfecho con él.

Características del VPS: 1 GB de RAM, 1 CPU (no sé la frecuencia), 20 GB de SSD. Para nuestro proyecto esto es suficiente.

El proyecto se construye utilizando el paquete mvn clean habitual. El resultado es un frasco gordo: un archivo ejecutable con todas las dependencias.

Para automatizar un poco todo esto, escribí un par de scripts bash.

El primer script elimina el archivo jar antiguo y crea uno nuevo.

El segundo script inicia el jar ensamblado y le pasa el nombre del perfil requerido. Este perfil contiene información de conexión a la base de datos.

DB - MySQL en el mismo VPS.

El reinicio total del proyecto incluye:

  • iniciar sesión en VPS a través de SSH
  • descargar los últimos cambios de git
  • ejecutar local-jar.sh
  • matar la aplicación en ejecución
  • ejecutar lanzamiento-producción.sh

Este procedimiento dura tres minutos. Me parece una elección inteligente para un proyecto tan pequeño.

Dificultades

Las principales dificultades para la creación del proyecto fueron de carácter organizativo.

Hay un grupo de personas que parecen saber programar, pero no muy bien. Saben algo, pero todavía no pueden aplicarlo. Y ahora necesitan completar el proyecto en un mes.

Identifiqué a un líder de equipo condicional en este grupo. Mantenía un documento de Google con una lista de tareas, las distribuía y controlaba su aceptación. También aceptó solicitudes de extracción.

También pedí a los estudiantes que escribieran un breve informe cada noche sobre el trabajo que realizaron en el proyecto. Si no hiciste nada, está bien, simplemente escribe "no hice nada". Esta es una gran práctica y te pone un poco tenso. Desafortunadamente, no todos siguieron esta regla.

El propósito de todo este movimiento era simple. Formar un equipo, aunque sea por poco tiempo, para trabajar juntos.

Quería que los chicos sintieran que su trabajo era importante. Comprenda que no escriben código esférico en el vacío. Y lo que están haciendo juntos es un proyecto que luego la gente utilizará.

La primera o segunda semana fue una preparación. Las entidades y los pequeños compromisos se realizaron con lentitud. Poco a poco los fui animando y el trabajo se volvió más divertido. La comunicación en el chat se volvió más animada, los estudiantes ofrecieron sus adiciones.

Creo que se ha conseguido el objetivo. El proyecto está terminado, los muchachos adquirieron un poco de experiencia trabajando en equipo. Hay un resultado visible y tangible que se puede mostrar a los amigos y desarrollar más.

Hallazgos

Aprender es divertido.

Después de cada clase regresaba emocionalmente agitada. Intento que cada par sea único y transmitir el mayor conocimiento posible.

Es agradable cuando el grupo al que enseño llega a la final. Es especialmente genial cuando los chicos escriben "Conseguí un trabajo, todo está bien, gracias". Incluso si es un junior, incluso si no es el dinero más grande al principio. Pero lo más importante es que dieron un paso hacia sus deseos y lo lograron.

Aunque el artículo resultó bastante voluminoso, ciertamente no fue posible abarcar todos los puntos. Por lo tanto, escribe tus preguntas en los comentarios.

Fuente: habr.com

Añadir un comentario