Einführung
So kam es, dass ich in den letzten fast zwei Jahren an einer der Kiewer IT-Schulen Programmieren unterrichtete. Ich habe das nur zum Spaß gemacht. Einmal habe ich einen Blog über Programmierung geführt, dann aufgegeben. Aber der Wunsch, interessierten Menschen nützliche Dinge zu erzählen, ist nicht verschwunden.
Meine Hauptsprache ist Java. Ich schrieb darauf Spiele für Handys, Software für die Funkkommunikation und verschiedene Webdienste. Und ich unterrichte speziell Java.
Hier möchte ich die Geschichte des Trainings meiner letzten Gruppe erzählen. Wie sie vom Lernen zum Schreiben eines funktionierenden Webdienstes übergingen. Ein nützlicher Webservice zum Auffinden von Nahrungsergänzungsmitteln. Kostenlos, ohne Werbung, Registrierung und SMS.
Der Service selbst ist hier - E-Dobavki.com .

Das Projekt ist lehrreich, enthält keine Werbung. Wie ich aus dieser Veröffentlichung verstehe, können Sie Links zu solchen Projekten geben.
Bevor Sie das Projekt selbst beschreiben, erzählen Sie ein wenig über den Prozess des Unterrichts der Gruppe. Andernfalls ist das Bild unvollständig.
9 Monate Studium
In der Schule, in der ich unterrichte, ist der Java-Kurs in zwei Teile unterteilt. Insgesamt dauert der Kurs ca. 9 Monate mit allen Unterbrechungen (Neujahrsferien, Zeit für das Schreiben von Zwischenprojekten).
Der erste Teil führt die Schüler in die Grundkonzepte von YP ein. Variablen, Methoden, die Grundlagen von OOP und all diese Dinge.
Der zweite Teil des Kurses sieht vor, dass der Schüler bereits mehr oder weniger versteht, wie man in Java schreibt, und dass er einen Technologie-Stack für Erwachsene erhalten kann. Alles beginnt mit SQL, dann JDBC, Hibernate. Dann HTTP, Servlets. Weiter Frühling, ein bisschen über Git und Maven. Und die Schüler schreiben Abschlussprojekte.
Alle Schulungen sind in Module unterteilt. Ich habe zweimal pro Woche Unterricht gegeben. Die Dauer einer Lektion beträgt zwei Stunden.
Mein Lernansatz
Ich habe 5 Gruppen veröffentlicht. Es scheint zwei Jahre lang sehr ähnlich zu sein, aber ich habe fast immer zwei Gruppen parallel geführt.
Ich habe verschiedene Ansätze ausprobiert.
Die erste Option ist, dass sich ein Paar durch eine Präsentation mit Theorie auszeichnet. Das zweite Paar ist reine Übung. Dieser Ansatz hat irgendwie funktioniert, aber die Effizienz war für mich nicht sehr gut.
Die zweite Option, zu der ich gekommen bin und an der ich gerade arbeite, besteht darin, der Theorie kein ganzes Paar zu widmen. Stattdessen mische ich kurze Abschnitte der Theorie für 5-10 Minuten und korrigiere sie sofort mit praktischen Beispielen. Dieser Ansatz funktioniert besser.
Wenn genügend Zeit vorhanden ist, rufe ich die Schüler zu mir nach Hause, setze mich für meinen Laptop und sie machen selbst praktische Beispiele. Es funktioniert cool, braucht aber leider viel Zeit.
Nicht alle erreichen das Ende
Die Entdeckung für mich war die Tatsache, dass nicht die gesamte Gruppe das Ende des Kurses erreicht.
Nach meinen Beobachtungen schreibt nur die Hälfte der Studenten den endgültigen Entwurf. Die meisten werden im ersten Teil des Kurses eliminiert. Und diejenigen, die den zweiten Teil erreicht haben, fallen normalerweise nicht ab.
Aus verschiedenen Gründen verlassen.
Das erste ist die Komplexität. Was auch immer sie sagen, Java ist nicht die einfachste Sprache. Um selbst das einfachste Programm zu schreiben, müssen Sie das Konzept einer Klassenmethode verstehen. Und um zu verstehen, warum Sie public static void main (String [] arg) schreiben müssen , müssen Sie einige weitere Konzepte verstehen.
Vergleichen Sie dies mit dem Turbo Pascal, der mit vielen begann, einschließlich mir:
begin writeln(" "); end.
Um dieses Problem zu lösen, wird die Schule meines Wissens zusätzliche Tests einführen. Jetzt kann nicht jeder Java lernen. Dies ist zwar in der Konzeptphase, aber der Schritt ist eindeutig der richtige.
Und der zweite Grund ist wie im Bild unten:

Die Leute denken oft, dass Programmieren ist, wenn sie viel Text drucken und viel Geld dafür bekommen. Als Texter nur mehr Geld.
Die Realität sieht etwas anders aus. Viel Routinecode, nicht offensichtliche Fehler, ein fortlaufender Lernprozess. Das ist interessant, aber nicht für jedermann.
Solche Statistiken. Zuerst hat es mich verärgert, ich dachte, dass ich vielleicht etwas falsch mache. Jetzt verstehe ich das ungefähr mit den gleichen Statistiken für die meisten Kurse. Jetzt mache ich mir darüber keine Sorgen, aber ich unterrichte die Leute, die interessiert sind.
Service-Idee
Wenn die Schüler den vollständigen Kurs abgeschlossen haben, ist es Zeit, das endgültige Projekt zu schreiben. Es gab verschiedene Ideen. Angebotene Aufgabenlisten, Projektmanagementprojekte, etwas anderes.
Ich wollte etwas einfaches, aber nützliches machen. Mein Kriterium war einfach - kann ich und meine Freunde es verwenden? Unter diesen Anforderungen kam ein Webservice zum Auffinden von Lebensmittelzusatzstoffen.
Die Idee ist einfach. Wenn Sie ein Produkt in einem Geschäft kaufen, sehen Sie eine Art E-Shnuyu-Ergänzung. Dem Kodex zufolge ist nicht klar, wie gefährlich dies ist oder nicht (und es gibt gefährliche Zusatzstoffe, die in vielen Ländern verboten sind).
Sie öffnen die Site, geben den Namen des Supplements ein (Nummer, einer der alternativen Namen) und erhalten eine Zusammenfassung des Supplements:

Es gibt ähnliche Projekte. Sie können das Additiv auch einfach in Google einbinden, obwohl die Informationen nicht immer korrekt angezeigt werden.
Aber da das Projekt lehrreich ist, haben uns die oben genannten Schwierigkeiten nicht aufgehalten :)
Implementierung
Jeder schrieb in Java, dem Quellcode für das Projekt in Github .
Wir waren 7, einschließlich mir. Jeder hat eine Pull-Anfrage gestellt, und ich oder eine andere Person aus der Gruppe haben diese Pull-Anfrage akzeptiert.
Die Umsetzung des Projekts dauerte ungefähr einen Monat - von der Äußerung der Idee bis zu dem Zustand, den Sie jetzt sehen.
Analysieren von Additiven
Das erste, was einer der Schüler tat, abgesehen von der grundlegenden Erstellung der Bindung um die Datenbank (Entitäten, Repositorys usw.), war das Parsen von Additiven von der vorhandenen Informationsseite.
Dies war notwendig, um die verbleibenden Punkte zu testen. Zum Auffüllen der Datenbank ist kein zusätzlicher Code erforderlich. Durch schnelles Sparring mehrerer Additive konnten die Benutzeroberfläche, das Sortieren und das Filtern weiter getestet werden.
Mit Spring Boot können Sie mehrere Profile erstellen. Ein Profil ist eine Einstellungsdatei.
Für die Entwicklungsumgebung haben wir ein Profil mit einem lokalen H2-DBMS und einem Standard-HTTP-Port (8080) verwendet. Somit wurde bei jedem Start der Anwendung die Datenbank gelöscht. Der Parser in diesem Fall hat uns gerettet.
Suchen und filtern
Ein wichtiger Punkt ist das Suchen und Filtern. Die Person im Geschäft sollte schnell den Ergänzungscode oder einige der Namen eingeben und das Ergebnis erhalten.
Daher verfügt die additive Entität über mehrere Felder. Dies ist ein additiver Code, alternative Namen, Beschreibung. Die Suche wird wie für alle Felder gleichzeitig fortgesetzt. Und wenn Sie [123] oder [Amaranth] eingeben, erhalten Sie das gleiche Ergebnis.
Wir haben dies alles basierend auf der Spezifikation gemacht. Dies ist Teil von Spring, mit dem Sie die grundlegenden Suchbedingungen beschreiben können (z. B. in einem bestimmten Feld) und diese Bedingungen dann kombinieren können (ODER oder UND).
Wenn Sie ein Dutzend Spezifikationen schreiben, können Sie komplexe Fragen stellen wie "alle gefährlichen Farbstoffadditive, deren Beschreibung das Wort [rot] enthält".
In Bezug auf die Arbeit mit der Spring-Datenbank erscheint es mir sehr praktisch. Dies gilt insbesondere für komplexe Abfragen. Ich verstehe, dass dies den Overhead verursacht und manuell geschriebene und optimierte SQL-Abfragen schneller sind.
Ich bin aber auch der Meinung, dass es nicht notwendig ist, alles im Voraus zu optimieren. Die erste Version sollte starten, funktionieren und die Möglichkeit bieten, einzelne Teile auszutauschen. Und wenn die Last geht - das sind die einzelnen Teile, die neu geschrieben werden müssen.
Sicherheit
Alles ist einfach. Es gibt Benutzer mit der ADMIN-Rolle - sie können Additive bearbeiten, löschen und neue hinzufügen.
Und es gibt andere Benutzer (registriert oder nicht). Sie können nur die Liste der Ergänzungen anzeigen und nach den richtigen suchen.
Um die Rechte zu trennen, wurde Spring Security verwendet. Benutzerdaten werden in der Datenbank gespeichert.
Benutzer können sich registrieren. Jetzt gibt es nichts. Wenn die Schüler den Service weiterentwickeln und einige personalisierte Funktionen einführen, ist die Registrierung hilfreich.
Anpassungsfähigkeit und Bootstrap
Der nächste Punkt ist die Anpassungsfähigkeit. Bei unserem Service (zumindest so, wie wir ihn gesehen haben) werden die meisten Benutzer Mobiltelefone verwenden. Und vom Handy aus müssen Sie die Ergänzung schnell sehen.
Um nicht unter CSS zu leiden, haben wir Bootstrap genommen. Billig, fröhlich und anständig.
Ich kann die Benutzeroberfläche nicht als perfekt bezeichnen. Die Hauptseite ist noch kleiner und die Seite für eine detaillierte Beschreibung des Additivs ist schmal. Auf Mobiltelefonen müssen Sie es breiter machen.
Ich kann nur sagen, dass ich versucht habe, die Arbeit auf ein Minimum zu beschränken. Dies ist noch ein Studentenprojekt. Und natürlich können die Jungs solche Momente später korrigieren.
Minute SEO-Optimierung
Da ich seit mehr als zwei Jahren mit Websites und allem, was mit SEO zu tun hat, beschäftigt bin, konnte ich kein Projekt ohne zumindest grundlegende SEO-Optimierung starten.
Tatsächlich habe ich die Vorlagengenerierung Titel und Beschreibung für jede Ergänzung erstellt. Die URL ist fast CNC, obwohl sie kürzer gemacht werden kann.
Ich habe auch Anwesenheitsschalter hinzugefügt. Yandex Webmaster und Google Search Console wurde eine Website hinzugefügt, um Warnungen von Suchmaschinen zu verfolgen.
Das ist wenig. Sie müssen auch robots.txt und sitemap.xml hinzufügen, um eine vollständige Indizierung zu erhalten. Aber auch dies ist ein Studentenprojekt. Ich werde ihnen sagen, was zu tun ist, und wenn sie wollen, werden sie es tun.
Sie müssen ein SSL-Zertifikat anhängen. Free Let's Encrypt reicht ebenfalls aus. Ich habe das für Spring Boot gemacht. Es ist nicht schwierig und das Vertrauen der PS steigt.
Was kommt als nächstes mit dem Projekt?
Außerdem liegt die Wahl bei den Jungs. Die ursprüngliche Idee des Projekts beinhaltete auch eine Produktdatenbank mit Additiven.
Geben Sie "snickers" ein und sehen Sie, welche Art von Nahrungsergänzungsmittel es enthält.
Schon zu Beginn des Projekts wusste ich, dass wir keine Produkte haben würden :) Deshalb haben wir nur mit Additiven begonnen.
Jetzt können Sie die Produkte befestigen, zusätzlich einführen. Brötchen. Wenn es sich um eine umfangreiche Datenbank handelt, werden Benutzer gefunden.
Bereitstellung
Das Projekt wurde auf VPS, Aruba Cloud, bereitgestellt. Dies ist das billigste VPS, das wir finden konnten. Ich benutze diesen Anbieter seit mehr als einem Jahr für meine Projekte und es freut mich sehr.
VPS-Spezifikationen: 1 GB RAM, 1 CPU (die Frequenz ist mir nicht bekannt), 20 GB SSD. Für unser Projekt reicht das mit dem Kopf.
Das Projekt geht zum üblichen mvn clean-Paket. Es stellt sich heraus, dass fat jar eine ausführbare Datei mit allen Abhängigkeiten ist.
Um dies alles ein wenig zu automatisieren, habe ich ein paar Bash-Skripte geschrieben.
Das erste Skript löscht die alte JAR-Datei und sammelt eine neue.
Das zweite Skript führt das zusammengestellte Glas aus und übergibt ihm den Namen des gewünschten Profils. Dieses Profil enthält Informationen zur Datenbankverbindung.
DB - MySQL auf demselben VPS.
Der vollständige Neustart des Projekts umfasst:
- Melden Sie sich über SSH bei VPS an
- Laden Sie die neuesten Git-Änderungen herunter
- Führen Sie local-jar.sh aus
- Beenden Sie eine laufende Anwendung
- Führen Sie launch-production.sh aus
Dieser Vorgang dauert drei Minuten. Es scheint mir eine vernünftige Wahl für ein so kleines Projekt zu sein.
Schwierigkeiten
Die Hauptschwierigkeiten bei der Erstellung des Projekts waren organisatorischer Natur.
Es gibt eine Gruppe von Leuten, die programmieren können, aber nicht wirklich. Sie wissen etwas, können es aber immer noch nicht wirklich anwenden. Und jetzt müssen sie das Projekt in einem Monat machen.
Ich habe den bedingten Teamleiter in dieser Gruppe hervorgehoben. Er leitete ein Google Doc mit einer Liste von Aufgaben, verteilte Aufgaben und kontrollierte deren Annahme. Er akzeptierte auch Pull-Anfragen.
Ich bat die Schüler auch, jeden Abend einen kurzen Bericht über die Arbeit am Projekt zu schreiben. Hat nichts getan - ok, also schreibe "habe nichts getan". Dies ist eine großartige Übung, die Sie ein wenig anstrengen lässt. Leider haben nicht alle diese Regel befolgt.
Das Ziel all dieser Bewegungen war einfach. Bilden Sie ein Team, wenn auch für kurze Zeit, wird zusammenarbeiten.
Ich wollte, dass die Jungs ein Gefühl für die Wichtigkeit ihrer Arbeit haben. Verstehen Sie, dass sie keinen sphärischen Code im luftleeren Raum schreiben. Und was machen sie zusammen mit einem Projekt, das die Leute dann nutzen werden?
Die ersten ein oder zwei Wochen waren ein Aufbau. Langsam gemachte Entitäten, kleine Commits. Nach und nach rührte ich sie um und die Arbeit machte mehr Spaß. Das Chatten wurde lebhaft, die Schüler boten ihre Ergänzungen an.
Ich glaube, dass das Ziel erreicht wurde. Das Projekt ist abgeschlossen, die Jungs haben ein wenig Erfahrung im Team. Es gibt ein sichtbares greifbares Ergebnis, das Sie Ihren Freunden zeigen und weiterentwickeln können.
Schlussfolgerungen
Lernen ist interessant.
Nach jedem Paar war ich emotional aufgeregt. Ich versuche, jedes Paar einzigartig zu machen und das maximale Wissen zu vermitteln.
Es ist schön, wenn die Gruppe, die ich trainiere, das Finale erreicht. Besonders cool, wenn die Jungs schreiben: "Ich habe einen Job, alle Regeln, danke." Lass es ein Junior sein, auch wenn es zunächst nicht das größte Geld ist. Vor allem aber machten sie einen Schritt in Richtung ihrer Wünsche und es gelang ihnen.
Obwohl sich der Artikel als ziemlich umfangreich herausstellte, war es natürlich nicht möglich, alle Punkte aufzudecken. Schreiben Sie daher Ihre Fragen in die Kommentare.