E-Dobavki è un servizio web per trovare integratori alimentari in Java e Spring Boot, scritto dai miei studenti

Introduzione

È successo così che negli ultimi quasi due anni ho insegnato programmazione in una delle scuole di informatica di Kiev. Ho preso questo Just For Fun. Una volta ho gestito un blog sulla programmazione, poi l'ho abbandonato. Ma la voglia di raccontare cose utili agli interessati non è passata.

La mia lingua principale è Java. Ci ho scritto giochi per cellulare, software radio e vari servizi web. E insegno Java.

Qui voglio raccontare la storia della formazione del mio ultimo gruppo. Come sono passati dall'apprendimento alla scrittura di un servizio web funzionante. Un servizio web utile per la ricerca di integratori alimentari. Gratuito, senza pubblicità, registrazione e SMS.

Il servizio stesso è E-Dobavki.com.

E-Dobavki è un servizio web per trovare integratori alimentari in Java e Spring Boot, scritto dai miei studenti

Il progetto è educativo, non contiene alcuna pubblicità. Come ho capito da questa pubblicazione, puoi fornire collegamenti a tali progetti.

Prima di descrivere il progetto stesso, ti parlerò un po 'del processo di formazione del gruppo, senza questo il quadro sarà incompleto.

9 mesi di formazione

Nella scuola dove insegno, il corso Java è diviso in 2 parti. In totale, il corso dura circa 9 mesi, con tutte le pause (vacanze di Capodanno, tempo per scrivere progetti intermedi).

La prima parte introduce gli studenti ai concetti di base del PL. Variabili, metodi, OOP di base e tutto il resto.

La seconda parte del corso prevede che lo studente comprenda già più o meno come scrivere in Java e gli possa essere fornito uno stack tecnologico "adulto". Tutto inizia con SQL, quindi JDBC, Hibernate. Quindi HTTP, servlet. Ulteriore primavera, un po' di git e maven. E gli studenti scrivono progetti finali.

Tutta la formazione è suddivisa in moduli. Ho preso lezioni due volte a settimana. La durata di una lezione è di due ore.

Il mio approccio all'apprendimento

Ho pubblicato 5 band. Sembra tanto per due anni, ma ho quasi sempre guidato 2 gruppi in parallelo.

Ho provato diversi approcci.

La prima opzione: questa è una coppia assegnata per una presentazione con una teoria. La seconda coppia è pura pratica. Questo approccio in qualche modo ha funzionato, ma l'efficienza non era molto, come per me.

La seconda opzione, che mi è venuta in mente e su cui sto lavorando ora, non è quella di allocare un'intera coppia per la teoria. Invece, mescolo brevi pezzi di teoria per 5-10 minuti e li rafforzo immediatamente con esempi pratici. Questo approccio funziona meglio.

Se c'è abbastanza tempo, chiamo gli studenti a casa mia, mi faccio sedere al mio laptop e loro stessi fanno esempi pratici. Funziona alla grande, ma sfortunatamente ci vuole molto tempo.

Non tutti arrivano alla fine

La scoperta per me è stata il fatto che non tutto il gruppo arriva alla fine del corso.

Secondo le mie osservazioni, solo la metà degli studenti scrive la bozza finale. La maggior parte viene eliminata nella prima parte del corso. E quelli che hanno raggiunto la seconda parte di solito non cadono.

Se ne vanno per vari motivi.

Il primo è la complessità. Non importa quello che dicono, Java non è il linguaggio più semplice. Per scrivere anche il programma più semplice, è necessario comprendere il concetto di classe, metodo. E per capire perché devi scrivere public static void main(String[] arg) ci sono ancora alcuni concetti da capire.

Confronta questo con Turbo Pascal, con cui molte persone, incluso me stesso, hanno iniziato:

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

Per risolvere questo problema, per quanto ne so, la scuola introdurrà ulteriori test. Ora non tutti possono andare a imparare Java. Mentre è nella fase concettuale, ma il passo è chiaramente quello giusto.

E il secondo motivo è come nella foto qui sotto:

E-Dobavki è un servizio web per trovare integratori alimentari in Java e Spring Boot, scritto dai miei studenti

Le persone spesso pensano che la programmazione sia quando digitano molto testo e ottengono molti soldi per questo. Come un copywriter, solo più soldi.

La realtà è un po' diversa. Un sacco di codice di routine, bug non ovvi, un processo di apprendimento costante. È interessante, ma non per tutti.

Tali statistiche. All'inizio mi ha sconvolto, ho pensato che forse stavo facendo qualcosa di sbagliato. Ora capisco che le statistiche sono più o meno le stesse per la maggior parte dei corsi. Ora non me ne preoccupo, ma insegno a quelle persone che sono interessate.

Idea di servizio

Quando gli studenti hanno completato l'intero corso, è arrivato il momento di scrivere il progetto finale. C'erano idee diverse. Hanno offerto elenchi di cose da fare, progetti di gestione dei progetti, qualcos'altro.

Volevo fare qualcosa di semplice ma utile. Il mio criterio era semplice: io e i miei amici saremmo stati in grado di usarlo. Un servizio web per la ricerca di integratori alimentari risponde a questi requisiti.

L'idea è semplice. Quando acquisti un prodotto in un negozio, vedi una sorta di integratore elettronico nella composizione. Non è chiaro dal codice quanto sia pericoloso o meno (e ci sono additivi pericolosi che sono vietati in molti paesi).

Apri il sito, digita il nome dell'additivo (numero, uno dei nomi alternativi) e ottieni un riepilogo dell'additivo:

E-Dobavki è un servizio web per trovare integratori alimentari in Java e Spring Boot, scritto dai miei studenti

Ci sono progetti simili. Puoi anche semplicemente guidare il componente aggiuntivo in Google, anche se non sempre mostra le informazioni correttamente.

Ma poiché il progetto è educativo, le difficoltà di cui sopra non ci hanno fermato 🙂

implementazione

Tutti hanno scritto in Java, codice sorgente del progetto su github.

Eravamo in 7 compreso me. Tutti hanno fatto una richiesta pull e io, o un'altra persona del gruppo, abbiamo accettato questa richiesta pull.

L'implementazione del progetto è durata circa un mese, dalla voce dell'idea allo stato che vedi ora.

Addendum analisi

La prima cosa che ha fatto uno degli studenti, a parte la creazione di base di un collegamento attorno al database (entità, repository, ecc.), è stata l'analisi dei componenti aggiuntivi da un sito di informazioni esistente.

Questo era necessario per testare il resto dei punti. Non è necessario alcun codice aggiuntivo per popolare il database. Dopo aver analizzato rapidamente diversi additivi, è stato possibile testare ulteriormente l'interfaccia utente, l'ordinamento, il filtro.

Spring Boot ti consente di creare più profili. Un profilo è un file con le impostazioni.

Per l'ambiente di sviluppo, abbiamo utilizzato un profilo con un DBMS H2 locale e la porta HTTP predefinita (8080). Pertanto, ogni volta che l'applicazione veniva avviata, il database veniva cancellato. Il parser in questo caso è stata la cosa che ci ha salvato.

Cerca e filtra

Un punto importante è la ricerca e il filtraggio. La persona nel negozio deve fare clic rapidamente sul codice del supplemento, o su alcuni dei nomi, e ottenere il risultato.

Pertanto, l'entità additiva ha diversi campi. Questo è il codice additivo, i nomi alternativi, la descrizione. La ricerca procede con Mi piace in tutti i campi contemporaneamente. E se inserisci [123] o [amaranto], otterrai lo stesso risultato.

Abbiamo fatto tutto questo sulla base delle specifiche (Specification). Questa è una parte di Spring che ti consente di descrivere le condizioni di ricerca di base (come per alcuni campi, ad esempio), e quindi combinare queste condizioni (OR o AND).

Dopo aver scritto una dozzina di specifiche, puoi porre domande complesse come "tutti gli additivi coloranti pericolosi che hanno la parola [rosso] nella descrizione".

In termini di lavoro con il database Spring, mi sembra molto conveniente. Ciò è particolarmente evidente quando si lavora con query complesse. Capisco che questo dà il suo sovraccarico e una query SQL scritta e ottimizzata manualmente verrà eseguita più velocemente.

Ma aderisco anche al punto di vista che non è necessario ottimizzare tutto in anticipo. La prima versione dovrebbe avviarsi, funzionare e consentire la possibilità di sostituire singole parti. E se il carico va, queste parti separate devono essere riscritte.

Sicurezza

Tutto è semplice. Ci sono utenti con il ruolo ADMIN: possono modificare aggiunte, eliminare, aggiungerne di nuove.

E ci sono altri utenti (registrati o meno). Possono solo consultare l'elenco degli integratori e cercare quelli di cui hanno bisogno.

Spring Security viene utilizzato per separare le autorizzazioni. I dati dell'utente sono memorizzati nel database.

Gli utenti possono registrarsi. Adesso non fa niente. Se gli studenti continuano a sviluppare il servizio e introducono alcune funzionalità personalizzate, la registrazione tornerà utile.

Reattività e Bootstrap

Il punto successivo è l'adattabilità. Nel caso del nostro servizio (almeno nel modo in cui l'abbiamo visto), la maggior parte degli utenti utilizzerà i telefoni cellulari. E da un cellulare devi vedere velocemente il supplemento.

Per non soffrire con i CSS, abbiamo preso Bootstrap. Economico, allegro e sembra decente.

Non posso chiamare l'interfaccia ideale. La pagina principale è ancora più piccola e la pagina con una descrizione dettagliata dell'additivo è stretta, sui telefoni cellulari è necessario allargarla.

Posso solo dire che ho cercato di interferire al minimo con il lavoro. È ancora un progetto studentesco. E, naturalmente, i ragazzi saranno in grado di correggere questi momenti in seguito.

Un minuto di ottimizzazione SEO

Dato che mi occupo da vicino di siti Web e di tutto ciò che riguarda la SEO da più di due anni, non potrei rilasciare un progetto senza almeno un'ottimizzazione SEO di base.

In effetti, ho creato una generazione di modelli di titolo e descrizione per ogni componente aggiuntivo. L'URL è quasi NC, anche se può essere accorciato.

Ho anche aggiunto i contatori di presenze. Aggiunto un sito a Yandex Webmaster e Google Search Console per tenere traccia degli avvisi dai motori di ricerca.

Non è abbastanza. Devi anche aggiungere robots.txt e sitemap.xml per l'indicizzazione completa. Ma ancora una volta, questo è un progetto studentesco. Dirò loro cosa deve essere fatto e, se lo desiderano, lo faranno.

Devi allegare un certificato SSL. Funzionerà anche Let's Encrypt gratuito. L'ho fatto per Spring Boot. È facile da fare e la fiducia del PS aumenta.

Quali sono le prospettive del progetto

Dopotutto, la scelta spetta ai ragazzi. L'idea originale del progetto prevedeva anche un database di prodotti con link ad additivi.

Inserisci "snickers" e guarda quali supplementi nutrizionali contiene.

Anche all'inizio del progetto, sapevo che non avremmo prodotti 🙂 Pertanto, abbiamo iniziato solo con additivi.

Ora puoi allacciare i prodotti, introdurne altri. panini. Se si tratta di un database esteso, ci saranno utenti.

Distribuzione

Il progetto è stato implementato su VPS, Aruba Cloud. Questo è il VPS più economico che abbiamo trovato. Utilizzo questo provider da più di un anno ormai per i miei progetti e mi rende felice.

Specifiche VPS: 1 GB RAM, 1 CPU (non so per la frequenza), 20 GB SSD. Questo è più che sufficiente per il nostro progetto.

Il progetto è costruito con il solito pacchetto mvn clean. Risulta fat jar, un file eseguibile con tutte le dipendenze.

Per automatizzare un po' tutto questo, ho scritto un paio di script bash.

Il primo script rimuove il vecchio file jar e crea quello nuovo.

Il secondo script esegue il jar assemblato, passandogli il nome del profilo necessario. Questo profilo contiene i dettagli della connessione al database.

DB - MySQL sullo stesso VPS.

Il riavvio totale del progetto prevede:

  • accedere al VPS tramite SSH
  • scarica le ultime modifiche a git
  • eseguire local-jar.sh
  • uccidere l'applicazione in esecuzione
  • eseguire launch-production.sh

Questa procedura richiede tre minuti. Mi sembra una scelta ragionevole per un progetto così piccolo.

complessità

Le principali difficoltà nella realizzazione del progetto sono state di natura organizzativa.

C'è un gruppo di persone che sembra essere in grado di programmare, ma non molto. Sanno qualcosa, ma non riescono ancora ad applicarlo davvero. E ora devono completare il progetto in un mese.

Ho individuato un caposquadra condizionale in questo gruppo. Ha mantenuto un documento Google con un elenco di compiti, ha distribuito compiti, ne ha controllato l'accettazione. Ha anche accettato richieste pull.

Ho anche chiesto agli studenti di scrivere ogni sera una breve relazione sul lavoro svolto sul progetto. Non ho fatto niente - ok, quindi scrivi "non ho fatto niente". Questa è un'ottima pratica che ti fa sentire un po' teso. Purtroppo non tutti hanno seguito questa regola.

Lo scopo di tutto questo movimento era semplice. Formare una squadra, anche se per poco tempo, lavorerà insieme.

Volevo che i ragazzi avessero un senso dell'importanza del loro lavoro. Comprendi che non scrivono codice sferico nel vuoto. E quello che stanno facendo insieme è un progetto che poi le persone useranno.

La prima settimana o due è stata un accumulo. Entità, piccoli commit sono stati fatti lentamente. A poco a poco li ho stimolati e il lavoro è andato più allegramente. La comunicazione in chat è diventata più vivace, gli studenti hanno offerto le loro aggiunte.

Credo che l'obiettivo sia stato raggiunto. Il progetto è terminato, i ragazzi hanno acquisito una certa esperienza di lavoro in gruppo. C'è un risultato tangibile visibile che può essere mostrato agli amici, può essere ulteriormente sviluppato.

risultati

L'apprendimento è interessante.

Dopo ogni coppia, sono arrivato emotivamente agitato. Cerco di rendere unico ogni paio e di trasmettere quanta più conoscenza possibile.

È bello quando il gruppo a cui insegno arriva in finale. È particolarmente bello quando i ragazzi scrivono "Ho un lavoro, va tutto bene, grazie". Lascia che sia un junior, anche se all'inizio non i soldi più grandi. Ma soprattutto, hanno fatto un passo verso i loro desideri e ci sono riusciti.

L'articolo, sebbene si sia rivelato piuttosto voluminoso, ovviamente non è stato possibile rivelare tutti i punti. Quindi scrivi le tue domande nei commenti.

Fonte: habr.com

Aggiungi un commento