E-Dobavki - en nettjeneste for å søke mattilsetningsstoffer i Java og Spring Boot, skrevet av elevene mine

Innledning

Det skjedde slik at jeg de siste nesten to årene har undervist i programmering ved en av IT-skolene i Kiev. Jeg begynte å gjøre dette bare for moro skyld. Jeg skrev en gang en programmeringsblogg, så ga jeg den opp. Men ønsket om å fortelle nyttige ting til interesserte har ikke gått bort.

Mitt hovedspråk er Java. Jeg skrev spill for mobiltelefoner, programvare for radiokommunikasjon og ulike nettjenester på den. Og jeg underviser i Java.

Her vil jeg fortelle historien om treningen til min siste gruppe. Hvordan de gikk fra å starte opplæring til å skrive en fungerende webtjeneste. En nyttig nettjeneste for å finne kosttilskudd. Gratis, ingen reklame, registrering og SMS.

Selve tjenesten er her - E-Dobavki.com.

E-Dobavki - en nettjeneste for å søke mattilsetningsstoffer i Java og Spring Boot, skrevet av elevene mine

Prosjektet er lærerikt og inneholder ingen reklame. Som jeg forstår av denne publikasjonen, kan du gi lenker til slike prosjekter.

Før jeg beskriver selve prosjektet, vil jeg fortelle deg litt om gruppens læringsprosess; uten dette vil bildet være ufullstendig.

9 måneders trening

På skolen hvor jeg underviser er Java-kurset delt i 2 deler. Totalt tar kurset cirka 9 måneder, med alle pauser (nyttårsferie, tid til å skrive mellomprosjekter).

Den første delen introduserer elevene til de grunnleggende begrepene språk. Variabler, metoder, grunnleggende OOP og alt det der.

Den andre delen av kurset gir at studenten allerede mer eller mindre forstår hvordan man skriver i Java, og han kan få en "voksen" teknologistabel. Det hele starter med SQL, deretter JDBC, Hibernate. Deretter HTTP, servlets. Neste er våren, litt om git og maven. Og studentene skriver avsluttende prosjekter.

All opplæring er delt inn i moduler. Jeg holdt undervisning to ganger i uken. Varigheten av en leksjon er to timer.

Min tilnærming til læring

Jeg ga ut 5 grupper. Det virker som mye i to år, men jeg ledet nesten alltid 2 grupper parallelt.

Jeg har prøvd forskjellige tilnærminger.

Det første alternativet er at det tildeles ett par for en presentasjon med en teori. Det andre paret er ren praksis. Denne tilnærmingen fungerte på en eller annen måte, men den var ikke særlig effektiv, etter min mening.

Det andre alternativet som jeg kom til og som jeg jobber med nå, er ikke å vie et helt par til teori. I stedet blander jeg korte deler av teorien i 5-10 minutter, og forsterker dem umiddelbart med praktiske eksempler. Denne tilnærmingen fungerer bedre.

Hvis det er nok tid, kaller jeg elevene hjem til meg, setter dem ned ved den bærbare datamaskinen, og de gjør praktiske eksempler selv. Det fungerer utmerket, men det tar dessverre mye tid.

Ikke alle kommer til slutten

En åpenbaring for meg var det faktum at ikke hele gruppen når slutten av kurset.

I følge mine observasjoner er det bare halvparten av studentene som skriver sluttprosjektet. De fleste av dem blir eliminert i løpet av første del av kurset. Og de som har nådd den andre delen, faller vanligvis ikke av.

De drar av forskjellige grunner.

Den første er kompleksitet. Uansett hva de sier, er ikke Java det enkleste språket. For å skrive selv det enkleste programmet, må du forstå konseptet med en klasse, en metode. Og for å forstå hvorfor du trenger å skrive public static void main(String[] arg) Det er noen flere konsepter å forstå.

Sammenlign dette med Turbo Pascal, som er det mange begynte med, inkludert meg:

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

Så vidt jeg vet vil skolen løse dette problemet ved å innføre tilleggstesting. Nå kan ikke alle studere Java. Dette er fortsatt på konseptstadiet, men trinnet er helt klart det rette.

Og den andre grunnen er som på bildet nedenfor:

E-Dobavki - en nettjeneste for å søke mattilsetningsstoffer i Java og Spring Boot, skrevet av elevene mine

Folk tror ofte at programmering handler om å skrive mye tekst og få mye penger for det. Som en tekstforfatter, bare mer penger.

Virkeligheten er litt annerledes. Mye rutinekode, uopplagte feil, en konstant læringsprosess. Det er interessant, men ikke for alle.

Dette er statistikken. Først gjorde det meg opprørt, jeg tenkte at jeg kanskje gjorde noe galt. Nå forstår jeg at statistikken er omtrent den samme for de fleste kurs. Nå bekymrer jeg meg ikke for det, men lærer de menneskene som er interessert i det.

Serviceidé

Når studentene hadde fullført hele kurset, var det på tide å skrive sluttprosjektet. Det var forskjellige ideer. De tilbød ToDo-ark, prosjektledelsesprosjekter og noe annet.

Jeg ønsket å gjøre noe enkelt, men nyttig. Kriteriet mitt var enkelt – om vennene mine og jeg kunne bruke det. En webtjeneste for søk etter mattilsetningsstoffer oppfylte disse kravene.

Ideen er enkel. Når du kjøper et produkt i en butikk, ser du en slags E-additiv i sammensetningen. Det fremgår ikke av koden hvor farlig det er eller ikke (og det er også farlige tilsetningsstoffer som er forbudt i mange land).

Du åpner nettsiden, skriver inn navnet på tillegget (nummer, et av de alternative navnene), og får et sammendrag av tillegget:

E-Dobavki - en nettjeneste for å søke mattilsetningsstoffer i Java og Spring Boot, skrevet av elevene mine

Det finnes lignende prosjekter. Du kan også ganske enkelt skrive inn additivet i Google, selv om det ikke alltid viser informasjonen riktig.

Men siden prosjektet er lærerikt, stoppet ikke vanskelighetene ovenfor oss :)

implementering

Alle skrev på Java, kildekoden til prosjektet på Github.

Vi var 7, inkludert meg. Alle kom med en pull-forespørsel, og jeg, eller en annen person fra gruppen, godtok denne pull-forespørselen.

Gjennomføringen av prosjektet tok omtrent en måned - fra ideen ble uttrykt til tilstanden du ser nå.

Parsing tilsetningsstoffer

Det første en av studentene gjorde, i tillegg til den grunnleggende opprettelsen av et rammeverk rundt databasen (entiteter, repositories, etc.), var å analysere tillegg fra et eksisterende informasjonsnettsted.

Dette var nødvendig for å teste de resterende punktene. Ingen tilleggskode er nødvendig for å fylle ut databasen. Etter å ha analysert flere tilsetningsstoffer raskt, kunne vi teste brukergrensesnittet, sorteringen og filtreringen ytterligere.

Spring Boot lar deg lage flere profiler. En profil er en fil med innstillinger.

For utviklermiljøet brukte vi en profil med en lokal H2 DBMS og standard HTTP-port (8080). Derfor, hver gang applikasjonen ble lansert, ble databasen tømt. Parseren i dette tilfellet var det som reddet oss.

Søk og filtrering

Et viktig poeng er søk og filtrering. En person i en butikk må raskt klikke på koden til tillegget, eller et av navnene, og få resultatet.

Derfor har Additive-enheten flere felt. Dette er tilleggskoden, alternative navn, beskrivelse. Søket utføres med Like i alle felt samtidig. Og hvis du skriver inn [123] eller [amaranth], vil du få samme resultat.

Vi gjorde alt dette basert på spesifikasjoner. Dette er en del av Spring som lar deg beskrive grunnleggende søkebetingelser (som noen felt, for eksempel), og deretter kombinere disse betingelsene (ELLER eller OG).

Etter å ha skrevet et dusin spesifikasjoner, kan du stille komplekse spørsmål som "alle farlige fargetilsetningsstoffer som har ordet [rød] i beskrivelsen."

Når det gjelder å jobbe med Spring-databasen, synes jeg det er veldig praktisk. Dette gjelder spesielt når du arbeider med komplekse søk. Jeg forstår at dette har sin egen overhead, og en manuelt skrevet og optimert SQL-spørring vil kjøre raskere.

Men jeg holder meg også til synspunktet om at det ikke er behov for å optimalisere alt på forhånd. Den første versjonen må starte, fungere og tillate utskifting av individuelle deler. Og hvis det er en belastning, må disse enkeltdelene skrives om.

Sikkerhet

Det er enkelt. Det er brukere med ADMIN-rollen - de kan redigere tillegg, slette dem og legge til nye.

Og det er andre brukere (registrerte eller ikke). De kan bare bla gjennom listen over tilsetningsstoffer og søke etter de de trenger.

Spring Security ble brukt til å skille rettigheter. Brukerdata lagres i en database.

Brukere kan registrere seg. Nå gir det ingenting. Hvis studentene fortsetter å utvikle tjenesten og introdusere noen personaliserte funksjoner, vil registrering komme godt med.

Respons og Bootstrap

Neste punkt er tilpasningsevne. Når det gjelder tjenesten vår (i hvert fall slik vi så det), vil flertallet av brukerne være med mobiltelefoner. Og du må raskt se tillegget fra mobiltelefonen din.

For ikke å lide med CSS, tok vi Bootstrap. Billig, munter og ser anstendig ut.

Jeg kan ikke kalle grensesnittet ideelt. Hovedsiden er enda mindre, og siden for en detaljert beskrivelse av tilsetningsstoffet er smal; på mobiltelefoner må den gjøres bredere.

Jeg kan bare si at jeg prøvde å forstyrre arbeidet så lite som mulig. Dette er fortsatt et studentprosjekt. Og selvfølgelig vil gutta kunne korrigere slike øyeblikk senere.

Et minutt med SEO-optimalisering

Siden jeg har vært tett involvert i nettsider og alt relatert til SEO i mer enn to år, kunne jeg ikke gitt ut et prosjekt uten minst grunnleggende SEO-optimalisering.

Faktisk laget jeg en malgenerering av tittel og beskrivelse for hvert tillegg. URL-en er nesten CNC, selv om den kan gjøres kortere.

Jeg la også til fremmøtetellere. La til nettstedet til Yandex Webmaster og Google Search Console for å overvåke advarsler fra søkemotorer.

Det er ikke nok. Du må også legge til robots.txt og sitemap.xml for full indeksering. Men igjen, dette er et studentprosjekt. Jeg vil fortelle dem hva som må gjøres, og hvis de vil, vil de gjøre det.

Du må legge ved et SSL-sertifikat. Den gratis Let's Encrypt vil også fungere. Jeg gjorde dette for Spring Boot. Det er ikke vanskelig å gjøre, og tilliten til PS øker.

Hva er det neste for prosjektet?

Da er faktisk valget opp til gutta. Den opprinnelige ideen til prosjektet inkluderte også en database med produkter med lenker til tilsetningsstoffer.

Skriv inn "Snickers" og se hvilke ernæringsmessige tilsetningsstoffer den inneholder.

Allerede i starten av prosjektet visste jeg at vi ikke ville ha noen produkter :) Derfor begynte vi kun med tilsetningsstoffer.

Nå kan du legge til produkter og introdusere flere. boller. Hvis det er en omfattende database, vil det være brukere.

Utplassering

Prosjektet ble distribuert på VPS, Aruba Cloud. Dette er den billigste VPS vi kunne finne. Jeg har brukt denne leverandøren i mer enn et år for prosjektene mine, og jeg er fornøyd med den.

VPS-egenskaper: 1 GB RAM, 1 CPU (jeg vet ikke om frekvensen), 20 GB SSD. For vårt prosjekt er dette nok.

Prosjektet er bygget med den vanlige mvn clean-pakken. Resultatet er en fettkrukke - en kjørbar fil med alle avhengigheter.

For å automatisere alt dette litt, skrev jeg et par bash-skript.

Det første skriptet sletter den gamle jar-filen og bygger en ny.

Det andre skriptet starter den sammensatte krukken og gir den navnet på den nødvendige profilen. Denne profilen inneholder informasjon om databasetilkobling.

DB - MySQL på samme VPS.

Total omstart av prosjektet inkluderer:

  • logg inn på VPS via SSH
  • last ned de siste git-endringene
  • kjøre local-jar.sh
  • drep kjørende applikasjon
  • kjøre launch-production.sh

Denne prosedyren tar tre minutter. Dette virker som et smart valg for meg for et så lite prosjekt.

kompleksitet

De største vanskelighetene med å lage prosjektet var av organisatorisk karakter.

Det er en gruppe mennesker som ser ut til å vite hvordan de skal programmere, men ikke så godt. De vet noe, men de kan fortsatt ikke bruke det. Og nå må de fullføre prosjektet om en måned.

Jeg identifiserte en betinget teamleder i denne gruppen. Han holdt et Google-dokument med en liste over oppgaver, distribuerte oppgaver og kontrollerte at de ble akseptert. Han godtok også pull-forespørsler.

Jeg ba også elevene skrive en kort rapport hver kveld om arbeidet de gjorde med prosjektet. Hvis du ikke gjorde noe, ok, bare skriv "gjorde ingenting." Dette er flott trening og får deg litt anspent. Ikke alle fulgte denne regelen, dessverre.

Hensikten med all denne bevegelsen var enkel. Form et team, selv om det bare er for en kort stund, for å jobbe sammen.

Jeg ville at gutta skulle føle at arbeidet deres var viktig. Forstå at de ikke skriver sfærisk kode i et vakuum. Og det de gjør sammen er et prosjekt som folk da vil bruke.

Den første uken eller to var en oppbygging. Entiteter og små forpliktelser ble gjort tregt. Litt etter litt rørte jeg i dem, og arbeidet ble morsommere. Kommunikasjonen i chatten ble livligere, studentene tilbød sine tillegg.

Jeg tror at målet er nådd. Prosjektet er ferdig, gutta fikk litt erfaring med å jobbe i team. Det er et synlig, håndfast resultat som kan vises til venner og videreutvikles.

Funn

Læring er interessant.

Etter hver time kom jeg tilbake følelsesmessig opphisset. Jeg prøver å gjøre hvert par unikt og formidle så mye kunnskap som mulig.

Det er kjekt når gruppen jeg underviser kommer til finalen. Det er spesielt kult når gutta skriver "Jeg har fått jobb, alt er bra, takk." Selv om det er en junior, selv om det ikke er de største pengene i begynnelsen. Men det viktigste er at de tok et steg mot sine ønsker, og de lyktes.

Selv om artikkelen viste seg å være ganske omfangsrik, var det absolutt ikke mulig å dekke alle punktene. Skriv derfor spørsmålene dine i kommentarene.

Kilde: www.habr.com

Legg til en kommentar