E-Dobavki - un service web de recherche d'additifs alimentaires en Java et Spring Boot, écrit par mes étudiants

introduction

Il se trouve que depuis presque deux ans, j'enseigne la programmation dans l'une des écoles d'informatique de Kiev. J'ai commencé à faire ça juste pour le plaisir. Une fois, j'ai écrit un blog de programmation, puis je l'ai abandonné. Mais le désir de dire des choses utiles aux personnes intéressées n'a pas disparu.

Mon langage principal est Java. J'y ai écrit des jeux pour téléphones mobiles, des logiciels de communication radio et divers services Web. Et j'enseigne Java.

Ici, je veux raconter l'histoire de la formation de mon dernier groupe. Comment ils sont passés du début de la formation à l'écriture d'un service Web fonctionnel. Un service Web utile pour trouver des suppléments nutritionnels. Gratuit, sans publicité, inscription et SMS.

Le service lui-même est ici - E-Dobavki.com.

E-Dobavki - un service web de recherche d'additifs alimentaires en Java et Spring Boot, écrit par mes étudiants

Le projet est pédagogique et ne contient aucune publicité. Si je comprends bien de cette publication, vous pouvez fournir des liens vers de tels projets.

Avant de décrire le projet lui-même, je vais vous parler un peu du processus d’apprentissage du groupe, sans quoi le tableau serait incomplet.

9 mois de formation

Dans l'école où j'enseigne, le cours Java est divisé en 2 parties. Au total, le cours dure environ 9 mois, avec toutes les pauses (vacances du Nouvel An, temps d'écriture de projets intermédiaires).

La première partie présente aux étudiants les concepts de base du langage. Variables, méthodes, bases de la POO et tout ça.

La deuxième partie du cours prévoit que l'étudiant comprenne déjà plus ou moins comment écrire en Java, et peut se voir doter d'une pile technologique « adulte ». Tout commence par SQL, puis JDBC, Hibernate. Puis HTTP, les servlets. Vient ensuite Spring, un peu sur git et maven. Et les étudiants écrivent des projets finaux.

Toutes les formations sont divisées en modules. J'ai donné des cours deux fois par semaine. La durée d'un cours est de deux heures.

Mon approche de l'apprentissage

J'ai sorti 5 groupes. Cela paraît beaucoup depuis deux ans, mais j'ai presque toujours dirigé 2 groupes en parallèle.

J'ai essayé différentes approches.

La première option est qu'une paire soit allouée pour une présentation avec une théorie. La deuxième paire est une pure pratique. Cette approche a fonctionné d’une manière ou d’une autre, mais elle n’a pas été très efficace, à mon avis.

La deuxième option à laquelle je suis arrivé et sur laquelle je travaille actuellement est de ne pas consacrer tout un couple à la théorie. Au lieu de cela, je mélange de courtes sections de théorie pendant 5 à 10 minutes et je les renforce immédiatement avec des exemples pratiques. Cette approche fonctionne mieux.

S'il me reste suffisamment de temps, j'appelle les étudiants chez moi, je les fais asseoir devant mon ordinateur portable et ils font eux-mêmes des exemples pratiques. Cela fonctionne très bien, mais malheureusement cela prend beaucoup de temps.

Tout le monde n'arrive pas au bout

Une découverte pour moi a été le fait que tout le groupe n'atteint pas la fin du cours.

D'après mes observations, seulement la moitié des étudiants rédigent le projet final. La plupart d'entre eux sont éliminés dès la première partie du cours. Et ceux qui ont atteint la deuxième partie ne tombent généralement pas.

Ils partent pour diverses raisons.

Le premier est la complexité. Quoi qu’on en dise, Java n’est pas le langage le plus simple. Pour écrire même le programme le plus simple, vous devez comprendre le concept de classe, de méthode. Et pour comprendre pourquoi il faut écrire public static void main (String[] arg) Il y a quelques concepts supplémentaires à comprendre.

Comparez cela à Turbo Pascal, avec lequel beaucoup de gens ont commencé, moi y compris :

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

Autant que je sache, l'école résoudra ce problème en introduisant des tests supplémentaires. Désormais, tout le monde ne pourra pas étudier Java. Nous en sommes encore au stade du concept, mais l’étape est clairement la bonne.

Et la deuxième raison est comme dans l’image ci-dessous :

E-Dobavki - un service web de recherche d'additifs alimentaires en Java et Spring Boot, écrit par mes étudiants

Les gens pensent souvent que programmer consiste à taper beaucoup de texte et à gagner beaucoup d’argent. Comme un rédacteur, seulement plus d'argent.

La réalité est un peu différente. Beaucoup de code routinier, des bugs non évidents, un processus d'apprentissage constant. C'est intéressant, mais pas pour tout le monde.

Ce sont les statistiques. Au début, ça m'a bouleversé, je pensais que je faisais peut-être quelque chose de mal. Maintenant, je comprends que les statistiques sont à peu près les mêmes pour la plupart des cours. Maintenant, je ne m'en soucie plus, mais j'enseigne à ceux qui s'y intéressent.

Idée de service

Une fois que les étudiants avaient terminé l’intégralité du cours, il était temps de rédiger le projet final. Il y avait différentes idées. Ils proposaient des fiches ToDo, des projets de gestion de projet et autre chose.

Je voulais faire quelque chose de simple mais utile. Mon critère était simple : si mes amis et moi pouvions l'utiliser. Un service web de recherche d’additifs alimentaires répondait à ces exigences.

L'idée est simple. Lorsque vous achetez un produit dans un magasin, vous voyez une sorte d'additif électronique dans la composition. Le code ne précise pas clairement à quel point il est dangereux ou non (et il existe également des additifs dangereux qui sont interdits dans de nombreux pays).

Vous ouvrez le site Web, saisissez le nom du supplément (numéro, un des noms alternatifs) et obtenez un résumé du supplément :

E-Dobavki - un service web de recherche d'additifs alimentaires en Java et Spring Boot, écrit par mes étudiants

Il existe des projets similaires. Vous pouvez également simplement saisir l'additif dans Google, même s'il n'affiche pas toujours les informations correctement.

Mais comme le projet est pédagogique, les difficultés ci-dessus ne nous ont pas arrêté :)

exécution

Tout le monde écrivait en Java, code source du projet sur Github.

Nous étions 7, moi compris. Tout le monde a fait une pull request, et moi, ou une autre personne du groupe, avons accepté cette pull request.

La mise en œuvre du projet a pris environ un mois - depuis l'expression de l'idée jusqu'à l'état que vous voyez aujourd'hui.

Additifs d'analyse

La première chose que l'un des étudiants a faite, outre la création de base d'un cadre autour de la base de données (entités, référentiels, etc.), a été d'analyser les modules complémentaires d'un site d'information existant.

Cela était nécessaire pour tester les points restants. Aucun code supplémentaire n'est nécessaire pour remplir la base de données. Après avoir rapidement analysé plusieurs additifs, nous avons pu tester davantage l'interface utilisateur, le tri et le filtrage.

Spring Boot vous permet de créer plusieurs profils. Un profil est un fichier avec des paramètres.

Pour l'environnement de développement, nous avons utilisé un profil avec un SGBD H2 local et le port HTTP par défaut (8080). Ainsi, à chaque lancement de l’application, la base de données était effacée. L'analyseur dans ce cas est ce qui nous a sauvés.

Recherche et filtrage

Un point important est la recherche et le filtrage. Une personne dans un magasin doit cliquer rapidement sur le code du supplément, ou sur l'un des noms, et obtenir le résultat.

L’entité Additif comporte donc plusieurs champs. Il s'agit du code additif, des noms alternatifs, de la description. La recherche s'effectue par Like dans tous les champs en même temps. Et si vous entrez [123] ou [amarante], vous obtiendrez le même résultat.

Nous avons fait tout cela sur la base d'un cahier des charges. Il s'agit d'une partie de Spring qui vous permet de décrire des conditions de recherche de base (comme certains champs, par exemple), puis de combiner ces conditions (OR ou AND).

Après avoir rédigé une douzaine de spécifications, vous pouvez poser des requêtes complexes telles que « tous les additifs colorants dangereux qui comportent le mot [rouge] dans la description ».

En termes de travail avec la base de données Spring, je trouve cela très pratique. Cela est particulièrement vrai lorsque vous travaillez avec des requêtes complexes. Je comprends que cela a sa propre surcharge et qu'une requête SQL écrite et optimisée manuellement s'exécutera plus rapidement.

Mais j'adhère également au point de vue selon lequel il n'est pas nécessaire de tout optimiser à l'avance. La première version devrait démarrer, fonctionner et permettre le remplacement de pièces individuelles. Et s'il y a une charge, ces parties individuelles doivent être réécrites.

Sécurité

C'est simple. Certains utilisateurs ont le rôle ADMIN : ils peuvent modifier les ajouts, les supprimer et en ajouter de nouveaux.

Et il y a d'autres utilisateurs (enregistrés ou non). Ils peuvent uniquement parcourir la liste des additifs et rechercher ceux dont ils ont besoin.

Spring Security a été utilisé pour séparer les droits. Les données utilisateur sont stockées dans une base de données.

Les utilisateurs peuvent s'inscrire. Maintenant, ça ne donne plus rien. Si les étudiants continuent à développer le service et à introduire certaines fonctions personnalisées, l'inscription sera alors utile.

Réactivité et Bootstrap

Le point suivant est l’adaptabilité. Dans le cas de notre service (du moins tel que nous le voyons), la majorité des utilisateurs seront équipés de téléphones portables. Et vous devez consulter rapidement le supplément depuis votre téléphone portable.

Afin de ne pas souffrir du CSS, nous avons pris Bootstrap. Pas cher, joyeux et semble décent.

Je ne peux pas qualifier l'interface d'idéale. La page principale l'est encore moins et la page de description détaillée de l'additif est étroite ; sur les téléphones mobiles, elle doit être élargie.

Je peux seulement dire que j'ai essayé d'interférer le moins possible avec le travail. C'est encore un projet étudiant. Et bien sûr, les gars pourront corriger ces moments plus tard.

Une minute d'optimisation SEO

Comme je suis étroitement impliqué dans les sites Web et tout ce qui touche au référencement depuis plus de deux ans, je ne pourrais pas lancer un projet sans au moins une optimisation de base du référencement.

En fait, j'ai créé un modèle de génération de titre et de description pour chaque module complémentaire. L'URL est presque CNC, bien qu'elle puisse être raccourcie.

J'ai également ajouté des compteurs de présence. Ajout du site à Yandex Webmaster et Google Search Console pour surveiller les avertissements des moteurs de recherche.

Ce n'est pas assez. Vous devez également ajouter robots.txt et sitemap.xml pour une indexation complète. Mais encore une fois, c'est un projet étudiant. Je leur dirai ce qu'il faut faire et s'ils le souhaitent, ils le feront.

Vous devez joindre un certificat SSL. Le logiciel gratuit Let's Encrypt fonctionnera également. J'ai fait ça pour Spring Boot. Ce n’est pas difficile à faire et la confiance du PS augmente.

Quelle est la suite du projet ?

Ensuite, en fait, le choix appartient aux gars. L'idée originale du projet comprenait également une base de données de produits avec des liens vers des additifs.

Entrez « Snickers » et voyez quels additifs nutritionnels il contient.

Même au début du projet, je savais que nous n'aurions aucun produit :) Nous avons donc commencé uniquement avec des additifs.

Vous pouvez désormais ajouter des produits et en introduire d’autres. petits pains. S'il s'agit d'une base de données étendue, il y aura des utilisateurs.

Déploiement

Le projet a été déployé sur VPS, Aruba Cloud. C’est le VPS le moins cher que nous puissions trouver. J'utilise ce fournisseur depuis plus d'un an pour mes projets et j'en suis agréablement satisfait.

Caractéristiques du VPS : 1 Go de RAM, 1 CPU (je ne connais pas la fréquence), 20 Go de SSD. Pour notre projet, cela suffit.

Le projet est construit en utilisant le package mvn clean habituel. Le résultat est un gros pot - un fichier exécutable avec toutes les dépendances.

Pour automatiser un peu tout cela, j'ai écrit quelques scripts bash.

Le premier script supprime l'ancien fichier jar et en crée un nouveau.

Le deuxième script lance le pot assemblé en lui passant le nom du profil requis. Ce profil contient des informations de connexion à la base de données.

La base de données est MySQL sur le même VPS.

Le redémarrage total du projet comprend :

  • connectez-vous au VPS via SSH
  • téléchargez les dernières modifications de git
  • exécutez local-jar.sh
  • tuer l'application en cours d'exécution
  • exécuter launch-production.sh

Cette procédure prend trois minutes. Cela me semble être un choix judicieux pour un si petit projet.

Difficultés

Les principales difficultés liées à la création du projet étaient d'ordre organisationnel.

Il y a un groupe de personnes qui semblent savoir programmer, mais pas très bien. Ils savent quelque chose, mais ils ne peuvent toujours pas vraiment l’appliquer. Et maintenant, ils doivent terminer le projet en un mois.

J'ai identifié un chef d'équipe conditionnel dans ce groupe. Il tenait un Google Doc avec une liste de tâches, répartissait les tâches et contrôlait leur acceptation. Il a également accepté les pull request.

J'ai également demandé aux étudiants de rédiger chaque soir un court rapport sur le travail qu'ils ont effectué sur le projet. Si vous n’avez rien fait, ok, écrivez simplement « n’avez rien fait ». C’est une excellente pratique et cela vous rend un peu tendu. Malheureusement, tout le monde n’a pas suivi cette règle.

Le but de tout ce mouvement était simple. Formez une équipe, même pour une courte période, pour travailler ensemble.

Je voulais que les gars sentent que leur travail était important. Comprenez qu’ils n’écrivent pas de code sphérique dans le vide. Et ce qu’ils font ensemble est un projet que les gens utiliseront ensuite.

La première ou les deux premières semaines ont été une préparation. Les entités et les petits commits ont été réalisés lentement. Petit à petit, je les ai réveillés et le travail est devenu plus amusant. La communication dans le chat est devenue plus vivante, les étudiants ont proposé leurs ajouts.

Je crois que l'objectif a été atteint. Le projet est terminé, les gars ont acquis un peu d'expérience en travaillant en équipe. Il existe un résultat visible et tangible qui peut être montré à des amis et développé davantage.

résultats

L'apprentissage est intéressant.

Après chaque cours, je revenais émotionnellement agité. J'essaie de rendre chaque paire unique et de transmettre autant de connaissances que possible.

C'est bien quand le groupe auquel j'enseigne atteint la finale. C'est particulièrement cool quand les gars écrivent « J'ai trouvé un travail, tout va bien, merci ». Même si c’est un junior, même si ce n’est pas le plus gros gain au début. Mais le plus important, c’est qu’ils ont fait un pas vers leurs désirs, et ils ont réussi.

Même si l’article s’est avéré assez volumineux, il n’a certainement pas été possible d’en couvrir tous les points. Par conséquent, écrivez vos questions dans les commentaires.

Source: habr.com

Ajouter un commentaire