E-Dobavki est un service de recherche de compléments alimentaires Java et Spring Boot écrit par mes étudiants

Présentation


Il se trouve que depuis près de deux ans, j'enseigne la programmation dans l'une des écoles informatiques de Kiev. J'ai fait ça juste pour le plaisir. Une fois, j'ai gardé un blog sur la programmation, puis abandonné. Mais le désir de dire des choses utiles aux personnes intéressées n'a pas disparu.


Ma langue principale est Java. J'y ai écrit des jeux pour mobile, des logiciels de radiocommunication et divers services web. Et j'enseigne spécifiquement Java.


Ici, je veux raconter l'histoire de la formation de mon dernier groupe. Comment ils sont passés de l'apprentissage à 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 .



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


Avant de décrire le projet lui-même, parlez un peu du processus d'enseignement au groupe, sans cela l'image sera incomplète.


9 mois d'études


À l'école où j'enseigne, le cours Java est divisé en 2 parties. Au total, le cours dure environ 9 mois, avec toutes les interruptions (vacances du Nouvel An, temps pour la rédaction de projets intermédiaires).


La première partie présente aux étudiants les concepts de base de la PJ. Variables, méthodes, bases de la POO et toutes ces choses.


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


Toute la formation est divisée en modules. J'ai donné des cours deux fois par semaine. La durée d'une leçon est de deux heures.


Mon approche d'apprentissage


J'ai sorti 5 groupes. Cela ressemble beaucoup à 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 se démarque pour une présentation avec théorie. La deuxième paire est une pure pratique. Cette approche a en quelque sorte fonctionné, mais l'efficacité n'était pas très bonne, comme pour moi.


La deuxième option, à laquelle je suis parvenu et sur laquelle je travaille actuellement, n'est pas de consacrer une paire entière à la théorie. Au lieu de cela, je mélange de courtes sections de la théorie pendant 5 à 10 minutes et les corrige immédiatement avec des exemples pratiques. Cette approche fonctionne mieux.


S'il reste du temps, j'appelle les élèves chez moi, je m'assois pour mon ordinateur portable et ils font eux-mêmes des exemples pratiques. Cela fonctionne bien, mais prend malheureusement beaucoup de temps.


Tous n'atteignent pas la fin


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


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


Partez pour diverses raisons.


Le premier est la complexité. Quoi qu'ils disent, Java n'est pas le langage le plus simple. Pour écrire même le programme le plus simple, vous devez comprendre le concept d'une classe, d'une méthode. Et pour comprendre pourquoi vous avez besoin d'écrire public main void statique (String [] arg), vous devez comprendre quelques concepts supplémentaires.


Comparez cela avec le Turbo Pascal, qui a commencé avec beaucoup, dont moi:


begin writeln(" "); end. 

Pour résoudre ce problème, pour autant que je sache, l'école sera l'introduction de tests supplémentaires. Désormais, tout le monde ne pourra pas apprendre Java. Bien que ce soit au stade du concept, mais l'étape est clairement la bonne.


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



Les gens pensent souvent que la programmation, c'est lorsqu'ils impriment beaucoup de texte et obtiennent beaucoup d'argent pour cela. En tant que rédacteur publicitaire, seulement plus d'argent.


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


Ces statistiques. Au début, cela m'a bouleversé, j'ai pensé que peut-être je fais quelque chose de mal. Maintenant, je comprends que sur les mêmes statistiques sur la plupart des cours. Maintenant, je ne suis pas inquiet à ce sujet, mais j'enseigne aux personnes intéressées.


Idée de service


Lorsque les étudiants ont terminé le cours complet, il est temps d'écrire le projet final. Il y avait différentes idées. Listes de tâches proposées, projets de gestion de projet, autre chose.


Je voulais faire quelque chose de simple, mais d'utile. Mon critère était simple - puis-je utiliser mes amis et moi. Sous ces exigences est venu un service Web pour trouver des additifs alimentaires.


L'idée est simple. Lorsque vous achetez un produit dans un magasin, vous voyez une sorte de supplément E-shnuyu. Selon le code, il n'est pas clair à quel point c'est dangereux ou non (et il existe des additifs dangereux qui sont interdits dans de nombreux pays).


Vous ouvrez le site, conduisez au nom du supplément (numéro, l'un des noms alternatifs), et obtenez un résumé du supplément:



Il existe des projets similaires. Vous pouvez également simplement ajouter l'additif à Google, bien qu'il n'affiche pas toujours correctement les informations.


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


Implémentation


Tout le monde a écrit en Java, le code source du projet dans Github .


Nous étions 7, dont moi. Tout le monde a fait une demande de tirage et moi, ou une autre personne du groupe, avons accepté cette demande de tirage.


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


Additifs d'analyse


La première chose que l'un des étudiants a fait, en dehors de la création de base de la liaison autour de la base de données (entités, référentiels, etc.), a été l'analyse des additifs du site d'information existant.


C'était nécessaire pour tester les points restants. Aucun code supplémentaire n'est nécessaire pour remplir la base de données. En entraînant rapidement plusieurs additifs, il a été possible de tester davantage l'interface utilisateur, le tri et le filtrage.


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


Pour l'environnement de développement, nous avons utilisé un profil avec un SGBD H2 local et un 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 la chose qui nous a sauvés.


Rechercher et filtrer


Un point important est la recherche et le filtrage. La personne dans le magasin doit rapidement piquer le code du supplément ou certains des noms et obtenir le résultat.


Par conséquent, l'entité Additive a plusieurs champs. Ceci est un code additif, des noms alternatifs, une description. La recherche se poursuit comme pour tous les champs à la fois. Et si vous entrez [123] ou [amarante], vous obtiendrez le même résultat.


Nous avons fait tout cela en fonction des spécifications. Cela fait partie de Spring, qui vous permet de décrire les conditions de recherche de base (comme par certains champs, par exemple), puis de combiner ces conditions (OR ou AND).


En écrivant une douzaine de spécifications, vous pouvez poser des questions complexes comme «tous les additifs de colorants dangereux qui ont le mot [rouge] dans la description».


Pour ce qui est de travailler avec la base de données Spring, cela me semble très pratique. Cela est particulièrement vrai lorsqu'il s'agit de requêtes complexes. Je comprends que cela donne sa surcharge, et les requêtes SQL écrites et optimisées manuellement seront plus rapides.


Mais je pense également qu'il n'est pas nécessaire d'optimiser tout à l'avance. La première version devrait démarrer, fonctionner et permettre la possibilité de remplacer des pièces individuelles. Et si la charge continue - ce sont les parties séparées qui doivent être réécrites.


La sécurité


Tout est simple. Il y a des utilisateurs avec le rôle ADMIN - ils peuvent éditer des additifs, en supprimer, en ajouter de nouveaux.


Et il y a d'autres utilisateurs (inscrits ou non). Ils peuvent uniquement afficher la liste des suppléments et rechercher les bons.


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


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


Adaptabilité et Bootstrap


Le point suivant est l'adaptabilité. Dans le cas de notre service (du moins tel que nous l'avons vu), la plupart des utilisateurs utiliseront des téléphones portables. Et depuis le mobile, vous devez voir rapidement le supplément.


Afin de ne pas souffrir de CSS, nous avons pris Bootstrap. Bon marché, joyeux et décent.


Je ne peux pas appeler l'interface parfaite. La page principale est encore moins, et la page pour une description détaillée de l'additif est étroite, sur les téléphones mobiles, vous devez l'élargir.


Je peux seulement dire que j'ai essayé d'interférer avec le travail au minimum. Il s'agit toujours d'un projet étudiant. Et bien sûr, les gars pourront corriger de tels moments plus tard.


Optimisation SEO en quelques minutes


Depuis plus de deux ans que je suis occupé par les sites internet et tout ce qui concerne le référencement, je ne pouvais pas lancer un projet sans au moins une optimisation basique du référencement.


En fait, j'ai fait le titre et la description de la génération de modèles pour chaque supplément. L'URL est presque CNC, bien qu'elle puisse être raccourcie.


J'ai également ajouté des compteurs de présence. Ajout d'un site à Yandex Webmaster et à Google Search Console pour suivre les alertes des moteurs de recherche.


Ce n'est pas suffisant. 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 qui doit être fait et s’ils le souhaitent, ils le feront.


Vous devez joindre un certificat SSL. Free Let's Encrypt fera également l'affaire. Je l'ai fait pour Spring Boot. Ce n'est pas difficile et la confiance du PS augmente.


Quelle est la prochaine étape avec le projet


De plus, en fait, le choix appartient aux gars. L'idée initiale du projet comprenait également une base de données de produits avec des additifs.


Entrez "snickers" et voyez quel type de supplément nutritionnel il contient.


Même au début du projet, je savais que nous n'aurions pas de produits :) Par conséquent, nous avons commencé uniquement avec des additifs.


Vous pouvez maintenant attacher les produits, en introduire d'autres. petits pains. S'il s'agit d'une base de données étendue, les utilisateurs seront trouvés.


Déploiement


Le projet a été déployé sur VPS, Aruba Cloud. C'est le VPS le moins cher que nous ayons pu trouver. J'utilise ce fournisseur depuis plus d'un an pour mes projets, et cela me plaît agréablement.


Spécifications VPS: 1 Go de RAM, 1 CPU (je ne connais pas la fréquence), 20 Go SSD. Pour notre projet, cela suffit avec la tête.


Le projet va vers le package propre mvn habituel. Il s'avère que fat jar est 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 recueille un nouveau.


Le deuxième script exécute le pot assemblé, en lui passant le nom du profil dont vous avez besoin. Ce profil contient des informations de connexion à la base de données.


DB - MySQL sur le même VPS.


Le redémarrage total du projet comprend:


  • connectez-vous à VPS via SSH
  • télécharger les dernières modifications git
  • exécutez local-jar.sh
  • tuer une application en cours d'exécution
  • lancez launch-production.sh

Cette procédure dure trois minutes. Cela me semble un choix raisonnable pour un si petit projet.


Des difficultés


Les principales difficultés rencontrées lors de la création du projet étaient d'ordre organisationnel.


Il y a un groupe de personnes qui semblent pouvoir programmer, mais pas vraiment. Ils savent quelque chose, mais ils ne peuvent toujours pas vraiment l'appliquer. Et maintenant, ils doivent réaliser le projet en un mois.


J'ai souligné le chef d'équipe conditionnel dans ce groupe. Il a dirigé un Google Doc avec une liste de tâches, distribué des tâches, contrôlé leur adoption. Il a également accepté les demandes de retrait.


J'ai également demandé aux étudiants de rédiger un bref rapport tous les soirs sur le travail effectué dans le cadre du projet. N'a rien fait - d'accord, alors écrivez "n'a rien fait". C'est une excellente pratique qui vous oblige à vous épuiser un peu. Malheureusement, tout le monde n'a pas suivi cette règle.


Le but de tout ce mouvement était simple. Former une équipe, quoique pour une courte période, travaillera ensemble.


Je voulais que les gars aient une idée de l'importance de leur travail. Comprenez qu'ils n'écrivent pas de code sphérique dans le vide. Et que font-ils ensemble un projet que les gens utiliseront ensuite.


La première semaine ou deux a été une accumulation. Entités lentement créées, petits commits. Peu à peu, je les ai remués et le travail s'est poursuivi de façon plus amusante. Le chat est devenu vivant, les étudiants ont offert leurs ajouts.


Je crois que l'objectif a été atteint. Le projet est terminé, les gars ont acquis une petite expérience dans l'équipe. Il y a un résultat tangible visible que vous pouvez montrer à vos amis, vous pouvez développer davantage.


Conclusions


L'apprentissage est intéressant.


Après chaque couple, je suis venu émotionnellement agité. J'essaie de rendre chaque paire unique et de transmettre le maximum de connaissances.


C'est sympa quand le groupe que je forme arrive en finale. Particulièrement cool quand les gars écrivent "J'ai un travail, toutes les règles, merci." Que ce soit un junior, même s'il n'est pas le plus gros au départ. Mais le plus important - ils ont fait un pas vers leurs désirs et ils ont réussi.


Bien que l'article se soit avéré assez volumineux, bien sûr, tous les points n'ont pas pu être révélés. Par conséquent, écrivez vos questions dans les commentaires.

Source: https://habr.com/ru/post/fr448422/


All Articles