E-Dobavki - en webbtjänst för sökning av livsmedelstillsatser i Java och Spring Boot, skriven av mina elever

Inledning

Det hände så att jag de senaste nästan två åren har undervisat i programmering på en av IT-skolorna i Kiev. Jag började göra det här bara för skojs skull. Jag skrev en gång en programmeringsblogg, sedan gav jag upp den. Men lusten att berätta användbara saker för intresserade har inte försvunnit.

Mitt huvudspråk är Java. Jag skrev spel för mobiltelefoner, programvara för radiokommunikation och olika webbtjänster på den. Och jag lär ut Java.

Här vill jag berätta historien om träningen av min sista grupp. Hur de gick från att börja träna till att skriva en fungerande webbtjänst. En användbar webbtjänst för att hitta kosttillskott. Gratis, ingen reklam, registrering och SMS.

Själva tjänsten finns här - E-Dobavki.com.

E-Dobavki - en webbtjänst för sökning av livsmedelstillsatser i Java och Spring Boot, skriven av mina elever

Projektet är pedagogiskt och innehåller ingen reklam. Som jag förstår av denna publikation, kan du ge länkar till sådana projekt.

Innan jag beskriver själva projektet ska jag berätta lite om gruppens inlärningsprocess; utan detta kommer bilden att vara ofullständig.

9 månaders träning

På skolan där jag undervisar är Javakursen uppdelad i 2 delar. Totalt tar kursen cirka 9 månader, med alla uppehåll (nyårslov, tid att skriva mellanprojekt).

Den första delen introducerar eleverna till språkets grundläggande begrepp. Variabler, metoder, OOP-grunderna och allt det där.

Den andra delen av kursen ger att studenten redan mer eller mindre förstår hur man skriver i Java, och han kan få en "vuxen" teknikstack. Allt börjar med SQL, sedan JDBC, Hibernate. Sedan HTTP, servlets. Nästa är våren, lite om git och maven. Och eleverna skriver slutprojekt.

All utbildning är uppdelad i moduler. Jag hade lektioner två gånger i veckan. Längden på en lektion är två timmar.

Mitt förhållningssätt till lärande

Jag släppte 5 grupper. Det verkar vara mycket under två år, men jag ledde nästan alltid 2 grupper parallellt.

Jag har provat olika tillvägagångssätt.

Det första alternativet är att ett par tilldelas för en presentation med en teori. Det andra paret är ren praktik. Detta tillvägagångssätt fungerade på något sätt, men det var inte särskilt effektivt, enligt min mening.

Det andra alternativet som jag kom fram till och som jag jobbar på nu är att inte ägna ett helt par åt teori. Istället blandar jag korta avsnitt av teorin i 5-10 minuter, och förstärker dem genast med praktiska exempel. Detta tillvägagångssätt fungerar bättre.

Om tiden räcker kallar jag eleverna till mig, sätter dem vid min bärbara dator och de gör praktiska exempel själva. Det fungerar utmärkt, men det tar tyvärr mycket tid.

Alla kommer inte till slutet

En uppenbarelse för mig var det faktum att inte hela gruppen når slutet av kursen.

Enligt mina observationer är det bara hälften av eleverna som skriver slutprojektet. De flesta av dem elimineras under den första delen av kursen. Och de som har nått den andra delen faller vanligtvis inte av.

De lämnar av olika anledningar.

Den första är komplexitet. Oavsett vad de säger är Java inte det enklaste språket. För att skriva även det enklaste programmet måste du förstå konceptet med en klass, en metod. Och för att förstå varför du behöver skriva public static void main(String[] arg) Det finns några fler begrepp att förstå.

Jämför detta med Turbo Pascal, vilket är vad många började med, inklusive jag:

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

Så vitt jag vet kommer skolan att lösa detta problem genom att införa ytterligare tester. Nu kan inte alla studera Java. Detta är fortfarande på idéstadiet, men steget är helt klart det rätta.

Och den andra anledningen är som på bilden nedan:

E-Dobavki - en webbtjänst för sökning av livsmedelstillsatser i Java och Spring Boot, skriven av mina elever

Folk tror ofta att programmering handlar om att skriva mycket text och få mycket pengar för det. Som en copywriter, bara mer pengar.

Verkligheten är lite annorlunda. Mycket rutinkod, otydliga buggar, en ständig inlärningsprocess. Det är intressant, men inte för alla.

Det här är statistiken. Först gjorde det mig upprörd, jag tänkte att jag kanske gjorde något fel. Nu förstår jag att statistiken är ungefär densamma för de flesta kurser. Nu oroar jag mig inte för det, utan lär de människor som är intresserade av det.

Serviceidé

När eleverna hade slutfört hela kursen var det dags att skriva slutprojektet. Det fanns olika idéer. De erbjöd ToDo-ark, projektledningsprojekt och något annat.

Jag ville göra något enkelt men användbart. Mitt kriterium var enkelt - om mina vänner och jag kunde använda det. En webbtjänst för att söka efter livsmedelstillsatser uppfyllde dessa krav.

Tanken är enkel. När du köper en produkt i en butik ser du någon form av E-tillsats i sammansättningen. Det framgår inte av koden hur farligt det är eller inte (och det finns även farliga tillsatser som är förbjudna i många länder).

Du öppnar webbplatsen, anger namnet på tillägget (nummer, ett av de alternativa namnen), och får en sammanfattning av tillägget:

E-Dobavki - en webbtjänst för sökning av livsmedelstillsatser i Java och Spring Boot, skriven av mina elever

Det finns liknande projekt. Du kan också helt enkelt skriva in tillsatsen i Google, även om den inte alltid visar informationen korrekt.

Men eftersom projektet är lärorikt stoppade svårigheterna ovan oss inte :)

genomförande

Alla skrev på Java, källkoden för projektet på Github.

Vi var 7 stycken, inklusive jag. Alla gjorde en pull-förfrågan och jag, eller någon annan person från gruppen, accepterade denna pull-förfrågan.

Genomförandet av projektet tog ungefär en månad – från att man uttryckte idén till det tillstånd man ser nu.

Parsing av tillsatser

Det första en av eleverna gjorde, förutom det grundläggande skapandet av ett ramverk runt databasen (entiteter, repositories, etc.), var att analysera tillägg från en befintlig informationssida.

Detta var nödvändigt för att testa de återstående punkterna. Ingen ytterligare kod behövs för att fylla i databasen. Efter att snabbt ha analyserat flera tillsatser kunde vi ytterligare testa användargränssnittet, sorteringen och filtreringen.

Spring Boot låter dig skapa flera profiler. En profil är en fil med inställningar.

För utvecklingsmiljön använde vi en profil med en lokal H2 DBMS och standard HTTP-porten (8080). Således rensades databasen varje gång applikationen startade. Parsern i det här fallet var det som räddade oss.

Sök och filtrering

En viktig punkt är sökning och filtrering. En person i en butik måste snabbt klicka på koden för tillägget, eller ett av namnen, och få fram resultatet.

Därför har Additive-entiteten flera fält. Detta är tilläggskoden, alternativa namn, beskrivning. Sökningen görs med Gilla i alla fält samtidigt. Och om du anger [123] eller [amaranth] får du samma resultat.

Vi gjorde allt detta baserat på specifikationer. Detta är en del av Spring som låter dig beskriva grundläggande sökvillkor (som vissa fält, till exempel), och sedan kombinera dessa villkor (ELLER eller OCH).

Efter att ha skrivit ett dussin specifikationer kan du ställa komplexa frågor som "alla farliga färgtillsatser som har ordet [röd] i beskrivningen."

När det gäller att arbeta med Spring-databasen tycker jag att det är väldigt bekvämt. Detta gäller särskilt när man arbetar med komplexa frågor. Jag förstår att detta har sin egen overhead, och en manuellt skriven och optimerad SQL-fråga kommer att köras snabbare.

Men jag håller också fast vid synpunkten att man inte behöver optimera allt i förväg. Den första versionen måste starta, fungera och tillåta utbyte av enskilda delar. Och om det finns en belastning måste dessa enskilda delar skrivas om.

Säkerhet

Det är enkelt. Det finns användare med rollen ADMIN - de kan redigera tillägg, ta bort dem och lägga till nya.

Och det finns andra användare (registrerade eller inte). De kan bara bläddra i listan över tillsatser och söka efter de de behöver.

Spring Security användes för att separera rättigheter. Användardata lagras i en databas.

Användare kan registrera sig. Nu ger det ingenting. Om studenterna fortsätter att utveckla tjänsten och införa några personliga funktioner, kommer registreringen väl till pass.

Lyhördhet och Bootstrap

Nästa punkt är anpassningsförmåga. När det gäller vår tjänst (åtminstone som vi såg det) kommer majoriteten av användarna att ha mobiltelefoner. Och du måste snabbt se tillägget från din mobiltelefon.

För att inte lida av CSS tog vi Bootstrap. Billigt, glad och ser anständigt ut.

Jag kan inte kalla gränssnittet idealiskt. Huvudsidan är ännu mindre, och sidan för en detaljerad beskrivning av tillsatsen är smal, på mobiltelefoner måste den göras bredare.

Jag kan bara säga att jag försökte störa arbetet så lite som möjligt. Detta är fortfarande ett studentprojekt. Och naturligtvis kommer killarna att kunna korrigera sådana ögonblick senare.

En minuts SEO-optimering

Eftersom jag har varit nära engagerad i hemsidor och allt relaterat till SEO i mer än två år kunde jag inte släppa ett projekt utan åtminstone grundläggande SEO-optimering.

Faktum är att jag skapade en mallgenerering av titel och beskrivning för varje tillägg. URL:en är nästan CNC, även om den kan göras kortare.

Jag lade också till närvaroräknare. Lade till webbplatsen till Yandex Webmaster och Google Search Console för att övervaka varningar från sökmotorer.

Det är inte tillräckligt. Du måste också lägga till robots.txt och sitemap.xml för fullständig indexering. Men återigen, det här är ett studentprojekt. Jag kommer att berätta för dem vad som behöver göras, och om de vill så kommer de att göra det.

Du måste bifoga ett SSL-certifikat. Den kostnadsfria Let's Encrypt kommer också att fungera. Jag gjorde detta för Spring Boot. Det är inte svårt att göra, och PS:s förtroende ökar.

Vad är nästa för projektet?

Sen är faktiskt valet upp till killarna. Den ursprungliga idén med projektet inkluderade också en databas med produkter med länkar till tillsatser.

Ange "Snickers" och se vilka näringstillsatser den innehåller.

Redan i början av projektet visste jag att vi inte skulle ha några produkter :) Därför började vi bara med tillsatser.

Nu kan du lägga till produkter och introducera ytterligare. bullar. Om det är en omfattande databas kommer det att finnas användare.

Spridning

Projektet distribuerades på VPS, Aruba Cloud. Detta är den billigaste VPS vi kunde hitta. Jag har använt denna leverantör i mer än ett år för mina projekt, och jag är trevligt nöjd med den.

VPS-egenskaper: 1 GB RAM, 1 CPU (jag vet inte om frekvensen), 20 GB SSD. För vårt projekt räcker detta.

Projektet är byggt med det vanliga mvn clean-paketet. Resultatet är en fettburk - en körbar fil med alla beroenden.

För att automatisera allt detta lite skrev jag ett par bash-skript.

Det första skriptet tar bort den gamla jar-filen och bygger en ny.

Det andra skriptet startar den sammansatta burken och ger den namnet på den önskade profilen. Den här profilen innehåller databasanslutningsinformation.

DB - MySQL på samma VPS.

Total omstart av projektet inkluderar:

  • logga in på VPS via SSH
  • ladda ner de senaste git-ändringarna
  • kör local-jar.sh
  • döda ett program som körs
  • kör launch-production.sh

Denna procedur tar tre minuter. Det här verkar vara ett smart val för mig för ett så litet projekt.

komplexitet

De största svårigheterna med att skapa projektet var av organisatorisk karaktär.

Det finns en grupp människor som verkar veta hur man programmerar, men inte särskilt bra. De vet något, men de kan fortfarande inte riktigt tillämpa det. Och nu behöver de slutföra projektet om en månad.

Jag identifierade en villkorlig teamledare i denna grupp. Han hade ett Google-dokument med en lista över uppgifter, distribuerade uppgifter och kontrollerade att de accepterades. Han accepterade också pull-förfrågningar.

Jag bad också eleverna att varje kväll skriva en kort rapport om arbetet de gjorde med projektet. Om du inte gjorde något, ok, skriv bara "gjorde ingenting." Detta är bra övning och gör dig lite spänd. Alla följde inte denna regel, tyvärr.

Syftet med all denna rörelse var enkel. Bilda ett team, även om det bara är för en kort tid, för att arbeta tillsammans.

Jag ville att killarna skulle känna att deras arbete var viktigt. Förstå att de inte skriver sfärisk kod i ett vakuum. Och det de gör tillsammans är ett projekt som folk sedan kommer att använda.

Den första veckan eller två var en uppbyggnad. Enheter och små åtaganden gjordes trögt. Lite i taget rörde jag om dem, och arbetet blev roligare. Kommunikationen i chatten blev livligare, eleverna erbjöd sina tillägg.

Jag tror att målet är uppnått. Projektet är klart, killarna fick lite erfarenhet av att jobba i team. Det finns ett synligt, påtagligt resultat som kan visas för vänner och vidareutvecklas.

Resultat

Att lära sig är intressant.

Efter varje lektion kom jag tillbaka känslomässigt upprörd. Jag försöker göra varje par unikt och förmedla så mycket kunskap som möjligt.

Det är skönt när gruppen jag undervisar når finalen. Det är särskilt coolt när killar skriver "Jag har ett jobb, allt är bra, tack." Även om det är en junior, även om det inte är de största pengarna i början. Men det viktigaste är att de tog ett steg mot sina önskningar, och de lyckades.

Även om artikeln visade sig vara ganska omfattande gick det verkligen inte att täcka alla punkter. Skriv därför dina frågor i kommentarerna.

Källa: will.com

Lägg en kommentar