E-Dobavki - um serviço web para busca de aditivos alimentares em Java e Spring Boot, escrito por meus alunos

Introdução

Acontece que há quase dois anos tenho ensinado programação em uma das escolas de TI de Kiev. Comecei a fazer isso apenas por diversão. Certa vez, escrevi um blog de programação e desisti. Mas o desejo de contar coisas úteis às pessoas interessadas não desapareceu.

Minha linguagem principal é Java. Escrevi jogos para celulares, software para comunicações de rádio e vários serviços web neles. E eu ensino Java.

Quero aqui contar a história da formação da minha última turma. Como eles passaram do treinamento para a criação de um serviço web funcional. Um serviço web útil para encontrar suplementos nutricionais. Gratuito, sem publicidade, cadastro e SMS.

O serviço em si está aqui - E-Dobavki.com.

E-Dobavki - um serviço web para busca de aditivos alimentares em Java e Spring Boot, escrito por meus alunos

O projeto é educativo e não contém nenhuma publicidade. Pelo que entendi de esta publicação, você pode fornecer links para esses projetos.

Antes de descrever o projeto em si, vou contar um pouco sobre o processo de aprendizagem do grupo; sem isso o quadro ficará incompleto.

9 meses de treinamento

Na escola onde dou aulas, o curso de Java é dividido em 2 partes. No total, o curso dura aproximadamente 9 meses, com todos os intervalos (feriados de ano novo, tempo para escrever projetos intermediários).

A primeira parte apresenta aos alunos os conceitos básicos da linguagem. Variáveis, métodos, noções básicas de OOP e tudo mais.

A segunda parte do curso prevê que o aluno já entenda mais ou menos como escrever em Java, podendo receber uma pilha de tecnologia “adulta”. Tudo começa com SQL, depois JDBC, Hibernate. Depois HTTP, servlets. O próximo é Spring, um pouco sobre git e maven. E os alunos escrevem projetos finais.

Todo o treinamento é dividido em módulos. Eu dava aulas duas vezes por semana. A duração de uma aula é de duas horas.

Minha abordagem para aprender

Eu liberei 5 grupos. Parece muito para dois anos, mas quase sempre liderei 2 grupos em paralelo.

Eu tentei abordagens diferentes.

A primeira opção é que uma dupla seja alocada para uma apresentação com uma teoria. O segundo par é pura prática. Esta abordagem funcionou de alguma forma, mas não foi muito eficaz, na minha opinião.

A segunda opção que encontrei e na qual estou trabalhando agora é não dedicar muito tempo à teoria. Em vez disso, misturo pequenas seções de teoria por 5 a 10 minutos e imediatamente as reforço com exemplos práticos. Essa abordagem funciona melhor.

Se houver tempo, chamo os alunos à minha casa, sento-os em frente ao meu laptop e eles próprios fazem exemplos práticos. Funciona muito bem, mas infelizmente leva muito tempo.

Nem todo mundo chega ao fim

Uma revelação para mim foi o fato de nem todo o grupo chegar ao final do curso.

De acordo com minhas observações, apenas metade dos alunos escreve o projeto final. A maioria deles é eliminada durante a primeira parte do curso. E quem chega à segunda parte geralmente não cai.

Eles saem por vários motivos.

A primeira é a complexidade. Não importa o que digam, Java não é a linguagem mais simples. Para escrever até mesmo o programa mais simples, você precisa entender o conceito de classe, método. E para entender por que você precisa escrever público estático void principal(String[] arg) Existem mais alguns conceitos para entender.

Compare isso com o Turbo Pascal, que foi com o qual muitas pessoas começaram, inclusive eu:

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

Tanto quanto sei, a escola resolverá este problema introduzindo testes adicionais. Agora, nem todos podem estudar Java. Isto ainda está na fase de conceito, mas o passo é claramente o mais acertado.

E o segundo motivo é como na imagem abaixo:

E-Dobavki - um serviço web para busca de aditivos alimentares em Java e Spring Boot, escrito por meus alunos

Muitas vezes as pessoas pensam que programar é digitar muito texto e ganhar muito dinheiro por isso. Como um redator, só que mais dinheiro.

A realidade é um pouco diferente. Muito código de rotina, bugs não óbvios, um processo de aprendizagem constante. É interessante, mas não para todos.

Estas são as estatísticas. No começo isso me chateou, pensei que talvez estivesse fazendo algo errado. Agora entendo que as estatísticas são aproximadamente as mesmas para a maioria dos cursos. Agora não me preocupo com isso, mas ensino quem tem interesse nisso.

Ideia de serviço

Depois que os alunos concluíram todo o curso, chegou a hora de escrever o projeto final. Havia ideias diferentes. Eles ofereceram planilhas de tarefas, projetos de gerenciamento de projetos e muito mais.

Eu queria fazer algo simples, mas útil. Meu critério era simples: se meus amigos e eu poderíamos usá-lo. Um serviço web para busca de aditivos alimentares atendeu a esses requisitos.

A ideia é simples. Ao comprar um produto em uma loja, você vê algum tipo de aditivo eletrônico na composição. Não está claro no código quão perigoso é ou não (e também existem aditivos perigosos que são proibidos em muitos países).

Você abre o site, digita o nome do suplemento (número, um dos nomes alternativos) e obtém um resumo do suplemento:

E-Dobavki - um serviço web para busca de aditivos alimentares em Java e Spring Boot, escrito por meus alunos

Existem projetos semelhantes. Você também pode simplesmente digitar o aditivo no Google, embora nem sempre ele mostre as informações corretamente.

Mas como o projeto é educativo, as dificuldades acima não nos impediram :)

Implementação

Todo mundo escreveu em Java, código fonte do projeto no Github.

Éramos 7, incluindo eu. Todos fizeram uma solicitação pull e eu, ou outra pessoa do grupo, aceitamos essa solicitação pull.

A implementação do projeto demorou cerca de um mês - desde a expressão da ideia até o estado que você vê agora.

Analisando aditivos

A primeira coisa que um dos alunos fez, além da criação básica de um framework em torno do banco de dados (entidades, repositórios, etc.), foi analisar add-ons de um site de informações existente.

Isso foi necessário para testar os pontos restantes. Nenhum código adicional é necessário para preencher o banco de dados. Depois de analisar rapidamente vários aditivos, poderíamos testar ainda mais a interface do usuário, a classificação e a filtragem.

Spring Boot permite criar vários perfis. Um perfil é um arquivo com configurações.

Para o ambiente de desenvolvimento, usamos um perfil com um SGBD H2 local e a porta HTTP padrão (8080). Assim, toda vez que o aplicativo era iniciado, o banco de dados era limpo. O analisador, neste caso, foi o que nos salvou.

Pesquisa e filtragem

Um ponto importante é a pesquisa e filtragem. Uma pessoa em uma loja deve clicar rapidamente no código do suplemento, ou em um dos nomes, e obter o resultado.

Portanto, a entidade Aditivo possui vários campos. Este é o código aditivo, nomes alternativos, descrição. A pesquisa é realizada através de Like em todos os campos ao mesmo tempo. E se você inserir [123] ou [amaranto], obterá o mesmo resultado.

Fizemos tudo isso com base nas especificações. Esta é uma parte do Spring que permite descrever condições básicas de pesquisa (como algum campo, por exemplo) e depois combinar essas condições (OR ou AND).

Depois de escrever uma dúzia de especificações, você pode fazer perguntas complexas como “todos os aditivos corantes perigosos que contenham a palavra [vermelho] na descrição”.

Em termos de trabalhar com o banco de dados Spring, acho muito conveniente. Isto é especialmente verdadeiro quando se trabalha com consultas complexas. Entendo que isso tem sua própria sobrecarga e uma consulta SQL escrita manualmente e otimizada será executada mais rapidamente.

Mas também defendo o ponto de vista de que não há necessidade de otimizar tudo com antecedência. A primeira versão deve iniciar, funcionar e permitir a substituição de peças individuais. E se houver carga, essas partes individuais precisarão ser reescritas.

Segurança

É simples. Existem usuários com função ADMIN - eles podem editar adições, excluí-las e adicionar novas.

E existem outros usuários (cadastrados ou não). Eles só podem navegar na lista de aditivos e procurar aqueles de que precisam.

Spring Security foi usado para separar direitos. Os dados do usuário são armazenados em um banco de dados.

Os usuários podem se registrar. Agora não dá nada. Se os alunos continuarem a desenvolver o serviço e a introduzir algumas funções personalizadas, o registo será útil.

Capacidade de resposta e Bootstrap

O próximo ponto é a adaptabilidade. No caso do nosso serviço (pelo menos da forma como vimos), a maioria dos utilizadores estará com telemóvel. E você precisa visualizar rapidamente o suplemento do seu celular.

Para não sofrer com CSS, pegamos o Bootstrap. Barato, alegre e parece decente.

Não posso chamar a interface de ideal. A página principal é ainda menos, e a página de descrição detalhada do aditivo é estreita; nos celulares precisa ser alargada.

Só posso dizer que tentei interferir o mínimo possível no trabalho. Este ainda é um projeto de estudante. E claro, a galera vai poder corrigir esses momentos depois.

Um minuto de otimização de SEO

Como estou intimamente envolvido com sites e tudo relacionado a SEO há mais de dois anos, não poderia lançar um projeto sem pelo menos uma otimização básica de SEO.

Na verdade, fiz uma geração de template de Título e Descrição para cada add-on. A URL é quase CNC, embora possa ser reduzida.

Também adicionei contadores de presença. Adicionado o site ao Yandex Webmaster e ao Google Search Console para monitorar avisos dos mecanismos de pesquisa.

Não é suficiente. Você também precisa adicionar robots.txt e sitemap.xml para indexação completa. Mas, novamente, este é um projeto de estudante. Direi a eles o que precisa ser feito e, se quiserem, farão.

Você precisa anexar um certificado SSL. O Let's Encrypt gratuito também funcionará. Eu fiz isso para o Spring Boot. Não é difícil de fazer e a confiança do PS aumenta.

O que vem a seguir para o projeto?

Então, na verdade, a escolha é da galera. A ideia original do projeto também incluía um banco de dados de produtos com links para aditivos.

Entre em “Snickers” e veja quais aditivos nutricionais ele contém.

Já no início do projeto eu sabia que não teríamos nenhum produto :) Portanto, começamos apenas com aditivos.

Agora você pode adicionar produtos e apresentar outros. pães. Se for um banco de dados extenso, haverá usuários.

Desdobramento, desenvolvimento

O projeto foi implantado em VPS, Aruba Cloud. Este é o VPS mais barato que encontramos. Uso este provedor há mais de um ano para meus projetos e estou agradavelmente satisfeito com ele.

Características do VPS: 1 GB de RAM, 1 CPU (não sei a frequência), SSD de 20 GB. Para o nosso projeto isso é suficiente.

O projeto é construído usando o pacote mvn clean usual. O resultado é um jar grosso - um arquivo executável com todas as dependências.

Para automatizar um pouco tudo isso, escrevi alguns scripts bash.

O primeiro script exclui o arquivo jar antigo e cria um novo.

O segundo script inicia o jar montado, passando-lhe o nome do perfil necessário. Este perfil contém informações de conexão com o banco de dados.

Banco de dados - MySQL no mesmo VPS.

A reinicialização total do projeto inclui:

  • faça login no VPS via SSH
  • baixe as últimas alterações do git
  • execute local-jar.sh
  • matar aplicativo em execução
  • execute lançamento-produção.sh

Este procedimento leva três minutos. Esta me parece uma escolha inteligente para um projeto tão pequeno.

Dificuldades

As principais dificuldades na criação do projeto foram de natureza organizacional.

Tem um grupo de pessoas que parece saber programar, mas não muito bem. Eles sabem alguma coisa, mas ainda não conseguem aplicá-la. E agora eles precisam concluir o projeto em um mês.

Identifiquei um líder de equipe condicional neste grupo. Ele mantinha um Google Doc com uma lista de tarefas, distribuía tarefas e controlava sua aceitação. Ele também aceitou solicitações pull.

Também pedi aos alunos que escrevessem um pequeno relatório todas as noites sobre o trabalho que realizaram no projeto. Se você não fez nada, ok, basta escrever “não fez nada”. Esta é uma ótima prática e deixa você um pouco tenso. Nem todos seguiram esta regra, infelizmente.

O propósito de todo esse movimento era simples. Forme uma equipe, mesmo que por pouco tempo, para trabalhar em conjunto.

Queria que os rapazes sentissem que o trabalho deles era importante. Entenda que eles não escrevem código esférico no vácuo. E o que eles estão fazendo juntos é um projeto que as pessoas usarão.

A primeira ou duas semanas foi um acúmulo. Entidades e pequenos commits foram feitos lentamente. Aos poucos fui estimulando-os e o trabalho ficou mais divertido. A comunicação no chat ficou mais animada, os alunos ofereceram seus acréscimos.

Acredito que o objetivo foi alcançado. O projeto está concluído, a galera ganhou um pouco de experiência trabalhando em equipe. Há um resultado visível e tangível que pode ser mostrado aos amigos e desenvolvido.

Descobertas

Aprender é interessante.

Depois de cada aula eu voltava emocionalmente agitado. Procuro tornar cada par único e transmitir o máximo de conhecimento possível.

É bom quando o grupo que ensino chega às finais. É especialmente legal quando os caras escrevem “Consegui um emprego, está tudo bem, obrigado”. Mesmo que seja um júnior, mesmo que não seja muito dinheiro no início. Mas o mais importante é que deram um passo em direção aos seus desejos e conseguiram.

Embora o artigo tenha se revelado bastante volumoso, certamente não foi possível cobrir todos os pontos. Portanto, escreva suas dúvidas nos comentários.

Fonte: habr.com

Adicionar um comentário