O E-Dobavki é um serviço de pesquisa de suplementos alimentares em Java e Spring Boot, escrito por meus alunos

1. Introdução


Aconteceu que nos últimos quase dois anos tenho ensinado programação em uma das escolas de TI de Kiev. Eu fiz isso apenas por diversão. Uma vez eu mantive um blog sobre programação, depois abandonei. Mas o desejo de contar coisas úteis às pessoas interessadas não desapareceu.


Minha linguagem principal é Java. Escrevi nele jogos para celular, software para comunicações via rádio e vários serviços da web. E eu ensino Java especificamente.


Aqui eu quero contar a história do treinamento do meu último grupo. Como eles passaram do aprendizado para a escrita de um serviço da web em funcionamento. Um serviço web útil para encontrar suplementos nutricionais. Gratuito, sem anúncios, cadastro e SMS.


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



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


Antes de descrever o projeto em si, conte um pouco sobre o processo de ensino do grupo, sem isso o quadro ficará incompleto.


9 meses de estudo


Na escola em que ensino, o curso de Java é dividido em 2 partes. No total, o curso leva cerca de 9 meses, com todas as interrupções (feriados de Ano Novo, tempo para escrever projetos intermediários).


A primeira parte apresenta aos alunos os conceitos básicos de YP. Variáveis, métodos, noções básicas de OOP e todas essas coisas.


A segunda parte do curso estabelece que o aluno já entende mais ou menos como escrever em Java e pode receber uma pilha de tecnologia "adulta". Tudo começa com SQL, depois JDBC, Hibernate. Em seguida, HTTP, servlets. Mais adiante, um pouco sobre git e maven. E os alunos escrevem projetos finais.


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


Minha abordagem de aprendizado


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


Eu tentei abordagens diferentes.


A primeira opção é que um par se destaque por uma apresentação com teoria. O segundo par é pura prática. Essa abordagem funcionou de alguma forma, mas a eficiência não foi muito boa, quanto a mim.


A segunda opção, na qual cheguei e estou trabalhando agora, não é dedicar um par inteiro à teoria. Em vez disso, misturo seções curtas da teoria por 5 a 10 minutos e as corrigo imediatamente com exemplos práticos. Essa abordagem funciona melhor.


Se houver tempo suficiente, chamo os alunos para minha casa, sento-me para o meu laptop e eles mesmos fazem exemplos práticos. Funciona bem, mas infelizmente leva muito tempo.


Nem todos chegam ao fim


A descoberta para mim foi o fato de que nem todo o grupo chega ao final do curso.


Segundo minhas observações, apenas metade dos estudantes escreve o rascunho final. A maioria é eliminada na primeira parte do curso. E aqueles que chegaram à segunda parte, geralmente não caem.


Deixe por várias razões.


O primeiro é a complexidade. O que eles dizem, Java não é a linguagem mais fácil. Para escrever até o programa mais simples, você precisa entender o conceito de uma classe, método. E para entender por que você precisa escrever public static void main (String [] arg), você precisa entender mais alguns conceitos.


Compare isso com o Turbo Pascal, que começou com muitos, inclusive eu:


begin writeln(" "); end. 

Para resolver esse problema, até onde eu sei, a escola será a introdução de testes adicionais. Agora, nem todos poderão aprender Java. Enquanto isso está na fase conceitual, mas a etapa é claramente a correta.


E a segunda razão é como na figura abaixo:



As pessoas costumam pensar que a programação é quando imprimem muito texto e recebem muito dinheiro por isso. Como redatora, apenas mais dinheiro.


A realidade é um pouco diferente. Um monte de código de rotina, bugs não óbvios, um processo de aprendizado contínuo. Isso é interessante, mas não para todos.


Tais estatísticas. No começo, isso me chateou, pensei que talvez estivesse fazendo algo errado. Agora eu entendo isso sobre as mesmas estatísticas na maioria dos cursos. Agora não estou preocupado com isso, mas estou ensinando as pessoas que estão interessadas.


Idéia de serviço


Quando os alunos concluíram o curso completo, é hora de escrever o projeto final. Havia idéias diferentes. Listas de tarefas oferecidas, projetos de gerenciamento de projetos, outra coisa.


Eu queria fazer algo simples, mas útil. Meu critério era simples - eu e meus amigos podemos usá-lo. Sob esses requisitos, surgiu um serviço da Web para encontrar aditivos alimentares.


A ideia é simples. Ao comprar um produto em uma loja, você vê algum tipo de suplemento E-shnuyu. De acordo com o código, não está claro o quanto isso é perigoso ou não (e existem aditivos perigosos que são proibidos em muitos países).


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



Existem projetos semelhantes. Você também pode direcionar o aditivo para o Google, embora ele nem sempre exiba as informações corretamente.


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


Implementação


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


Havia 7 de nós, incluindo eu. Todos fizeram uma solicitação de recebimento, e eu, ou outra pessoa do grupo, aceitamos essa solicitação.


A implementação do projeto levou cerca de um mês - da transmissão da ideia ao estado que você vê agora.


Analisando aditivos


A primeira coisa que um dos alunos fez, além da criação básica da ligação em torno do banco de dados (entidades, repositórios, etc.) foi a análise de aditivos no 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. Ao treinar rapidamente vários aditivos, foi possível testar ainda mais a interface do usuário, a classificação e a filtragem.


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


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


Pesquisa e filtro


Um ponto importante é a pesquisa e a filtragem. A pessoa na loja deve digitar rapidamente o código do suplemento, ou alguns dos nomes, e obter o resultado.


Portanto, a entidade Aditiva possui vários campos. Este é um código aditivo, nomes alternativos, descrição. A pesquisa continua como para todos os campos de uma vez. E se você digitar [123] ou [amaranto], obterá o mesmo resultado.


Fizemos tudo isso com base nas especificações. Isso faz parte do Spring, que permite descrever as condições básicas de pesquisa (como em alguns campos, por exemplo) e depois combinar essas condições (OR ou AND).


Ao escrever uma dúzia de especificações, você pode fazer consultas complexas como "todos os aditivos de corantes perigosos que possuem a palavra [vermelho] na descrição".


Em termos de trabalho com o banco de dados Spring, me parece muito conveniente. Isso é especialmente verdade ao lidar com consultas complexas. Entendo que isso gera sobrecarga, e as consultas SQL escritas e otimizadas manualmente serão mais rápidas.


Mas também considero que não é necessário otimizar tudo antecipadamente. A primeira versão deve iniciar, funcionar e permitir a possibilidade de substituir peças individuais. E se a carga acabar - essas são as partes separadas que precisam ser reescritas.


Segurança


Tudo é simples. Existem usuários com a função ADMIN - eles podem editar aditivos, excluir, adicionar novos.


E existem outros usuários (registrados ou não). Eles só podem ver a lista de suplementos e procurar os corretos.


Para separar os direitos, o Spring Security foi usado. Os dados do usuário são armazenados no banco de dados.


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


Adaptabilidade e Bootstrap


O próximo ponto é a adaptabilidade. No caso do nosso serviço (pelo menos como vimos), a maioria dos usuários estará com telefones celulares. E a partir do celular, você precisa ver rapidamente o suplemento.


Para não sofrer CSS, utilizamos o Bootstrap. Barato, alegre e decente.


Não posso chamar a interface perfeita. A página principal é ainda menor, e a página para uma descrição detalhada do aditivo é estreita, em telefones celulares é necessário torná-lo mais amplo.


Só posso dizer que tentei interferir no trabalho ao mínimo. Este ainda é um projeto do aluno. E, claro, os caras serão capazes de corrigir esses momentos mais tarde.


Minuto SEO Otimização


Desde há mais de dois anos que estou ocupado com sites e tudo relacionado a SEO, não pude iniciar um projeto sem pelo menos a otimização básica de SEO.


De fato, criei o título e a descrição da geração do modelo para cada suplemento. A URL é quase CNC, embora possa ser reduzida.


Eu também adicionei balcões de atendimento. Foi adicionado um site ao Yandex Webmaster e ao Google Search Console para rastrear alertas dos mecanismos de pesquisa.


Isto não é suficiente. Você também precisa adicionar robots.txt e sitemap.xml para a indexação completa. Mas, novamente, este é um projeto do aluno. Eu direi a eles o que precisa ser feito e, se eles quiserem, eles o farão.


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


O que vem a seguir com o projeto


Além disso, de fato, a escolha depende dos caras. A idéia inicial do projeto também incluiu um banco de dados de produtos com aditivos.


Digite "snickers" e veja que tipo de suplemento nutricional ele contém.


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


Agora você pode fixar os produtos, introduzir mais. pães. Se for um banco de dados extenso, os usuários serão encontrados.


Implantação


O projeto foi implantado no VPS, Aruba Cloud. Este é o VPS mais barato que conseguimos encontrar. Uso esse provedor há mais de um ano para meus projetos e isso me agrada agradavelmente.


Especificações VPS: 1 GB de RAM, 1 CPU (não sei a frequência), 20 GB SSD. Para o nosso projeto, basta isso com a cabeça.


O projeto está indo para o pacote mvn clean usual. Acontece que o frasco de gordura é um arquivo executável com todas as dependências.


Para automatizar tudo isso, escrevi alguns scripts bash.


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


O segundo script executa o jar montado, passando o nome do perfil que você precisa. Este perfil contém informações de conexão com o banco de dados.


DB - MySQL no mesmo VPS.


O reinício total do projeto inclui:


  • faça login no VPS via SSH
  • baixe as últimas edições do git
  • execute local-jar.sh
  • matar um aplicativo em execução
  • execute launch-production.sh

Este procedimento leva três minutos. Parece-me uma escolha razoável para um projeto tão pequeno.


Dificuldades


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


Há um grupo de pessoas que parecem capazes de programar, mas não de verdade. Eles sabem de algo, mas ainda não conseguem aplicá-lo. E agora eles precisam fazer o projeto em um mês.


Eu destaquei a liderança condicional da equipe neste grupo. Ele liderou um Google Doc com uma lista de tarefas, distribuiu tarefas, controlou sua adoção. Ele também aceitou solicitações de recebimento.


Também pedi aos alunos que escrevessem um breve relatório todas as noites sobre o trabalho realizado no projeto. Não fez nada - ok, então escreva "não fez nada". Essa é uma ótima prática que faz você se esforçar um pouco. Infelizmente, nem todos seguiram essa regra.


O objetivo de todo esse movimento era simples. Formar uma equipe, embora por pouco tempo, trabalhará em conjunto.


Eu queria que os caras percebessem a importância do trabalho deles. Entenda que eles não escrevem código esférico no vácuo. E o que eles fazem juntos em um projeto que as pessoas irão usar.


A primeira semana ou duas foi um acúmulo. Entidades feitas lentamente, pequenas confirmações. Pouco a pouco, agitei-os e o trabalho foi ficando mais divertido. As conversas ficaram animadas, os alunos ofereceram suas adições.


Eu acredito que o objetivo foi alcançado. O projeto está pronto, os caras têm um pouco de experiência na equipe. Há um resultado tangível visível que você pode mostrar aos seus amigos, pode desenvolver ainda mais.


Conclusões


Aprender é interessante.


Depois de cada casal, fiquei emocionalmente agitado. Tento tornar cada par único e transmitir o máximo de conhecimento.


É bom quando o grupo que eu treino chega à final. Especialmente legal quando os caras escrevem "Consegui um emprego, todas as regras, obrigado". Que seja um júnior, mesmo que não seja o maior dinheiro no começo. Mas o mais importante - eles deram um passo em direção a seus desejos e tiveram sucesso.


Embora o artigo tenha sido bastante volumoso, é claro, não foi possível revelar todos os pontos. Portanto, escreva suas perguntas nos comentários.

Source: https://habr.com/ru/post/pt448422/


All Articles