E-Dobavki - layanan web untuk mencari bahan tambahan makanan di Java dan Spring Boot, yang ditulis oleh siswa saya

pengenalan

Kebetulan selama hampir dua tahun terakhir saya mengajar pemrograman di salah satu sekolah IT di Kyiv. Saya mulai melakukan ini Hanya Untuk Bersenang-senang. Saya pernah menulis blog pemrograman, lalu saya menyerah. Namun keinginan untuk menceritakan hal-hal bermanfaat kepada peminat belum hilang.

Bahasa utama saya adalah Java. Saya menulis permainan untuk ponsel, perangkat lunak untuk komunikasi radio, dan berbagai layanan web di dalamnya. Dan saya mengajar Java.

Disini saya ingin menceritakan kisah latihan kelompok terakhir saya. Bagaimana mereka memulai dari memulai pelatihan hingga menulis layanan web yang berfungsi. Layanan web yang berguna untuk menemukan suplemen nutrisi. Gratis, tanpa iklan, registrasi dan SMS.

Layanan itu sendiri ada di sini - E-Dobavki.com.

E-Dobavki - layanan web untuk mencari bahan tambahan makanan di Java dan Spring Boot, yang ditulis oleh siswa saya

Proyek ini bersifat mendidik dan tidak mengandung iklan apa pun. Seperti yang saya pahami dari publikasi ini, Anda dapat memberikan tautan ke proyek tersebut.

Sebelum menjelaskan proyek itu sendiri, saya akan bercerita sedikit tentang proses pembelajaran kelompok, tanpa ini gambarannya tidak akan lengkap.

pelatihan 9 bulan

Di sekolah tempat saya mengajar, kursus Java dibagi menjadi 2 bagian. Secara total, kursus ini memakan waktu sekitar 9 bulan, dengan semua istirahat (liburan Tahun Baru, waktu untuk menulis proyek perantara).

Bagian pertama memperkenalkan siswa pada konsep dasar bahasa. Variabel, metode, dasar-dasar OOP, dan sebagainya.

Bagian kedua dari kursus ini menyatakan bahwa siswa kurang lebih sudah memahami cara menulis di Java, dan ia dapat diberikan tumpukan teknologi β€œdewasa”. Semuanya dimulai dengan SQL, lalu JDBC, Hibernate. Lalu HTTP, servlet. Berikutnya adalah Spring, sedikit tentang git dan maven. Dan siswa menulis tugas akhir.

Semua pelatihan dibagi menjadi beberapa modul. Saya mengadakan kelas dua kali seminggu. Durasi satu pelajaran adalah dua jam.

Pendekatan saya untuk belajar

Saya merilis 5 grup. Sepertinya banyak selama dua tahun, tapi saya hampir selalu memimpin 2 kelompok secara paralel.

Saya sudah mencoba pendekatan yang berbeda.

Opsi pertama adalah satu pasangan dialokasikan untuk presentasi teori. Pasangan kedua adalah latihan murni. Pendekatan ini entah bagaimana berhasil, tetapi menurut saya tidak terlalu efektif.

Pilihan kedua yang saya ambil dan sedang saya kerjakan sekarang adalah tidak mencurahkan seluruh perhatian pada teori. Sebaliknya, saya menggabungkan bagian-bagian teori yang pendek selama 5-10 menit, dan segera memperkuatnya dengan contoh-contoh praktis. Pendekatan ini bekerja lebih baik.

Jika ada cukup waktu, saya memanggil siswa ke tempat saya, mendudukkan mereka di depan laptop saya, dan mereka mengerjakan sendiri contoh praktiknya. Ini berfungsi dengan baik, tetapi sayangnya membutuhkan banyak waktu.

Tidak semua orang berhasil mencapai akhir

Sebuah pencerahan bagi saya adalah kenyataan bahwa tidak seluruh kelompok mencapai akhir kursus.

Menurut pengamatan saya, hanya separuh mahasiswa yang menulis tugas akhir. Kebanyakan dari mereka tersingkir pada bagian pertama kursus. Dan yang sudah mencapai bagian kedua biasanya tidak terjatuh.

Mereka berangkat karena berbagai alasan.

Yang pertama adalah kompleksitas. Tidak peduli apa kata mereka, Java bukanlah bahasa yang paling sederhana. Untuk menulis program yang paling sederhana sekalipun, Anda perlu memahami konsep kelas, metode. Dan untuk memahami mengapa Anda perlu menulis public static void main(String[] arg) Ada beberapa konsep lagi yang perlu dipahami.

Bandingkan dengan Turbo Pascal, yang dimulai oleh banyak orang, termasuk saya:

begin
    writeln("ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°");
end.

Sejauh yang saya tahu, sekolah akan mengatasi masalah ini dengan memperkenalkan tes tambahan. Sekarang tidak semua orang bisa belajar Java. Ini masih dalam tahap konsep, namun langkahnya jelas sudah tepat.

Dan alasan kedua seperti pada gambar di bawah ini:

E-Dobavki - layanan web untuk mencari bahan tambahan makanan di Java dan Spring Boot, yang ditulis oleh siswa saya

Orang sering berpikir bahwa pemrograman adalah tentang mengetik banyak teks dan mendapatkan banyak uang untuk itu. Seperti copywriter, hanya lebih banyak uang.

Kenyataannya sedikit berbeda. Banyak kode rutin, bug yang tidak terlihat, proses pembelajaran yang konstan. Ini menarik, tapi tidak untuk semua orang.

Ini adalah statistiknya. Awalnya itu membuatku kesal, kupikir mungkin aku melakukan sesuatu yang salah. Sekarang saya memahami bahwa statistiknya kira-kira sama untuk sebagian besar kursus. Sekarang saya tidak mengkhawatirkannya, tetapi mengajari orang-orang yang tertarik dengan hal itu.

Ide layanan

Setelah siswa menyelesaikan seluruh mata kuliah, tibalah waktunya untuk menulis tugas akhir. Ada ide yang berbeda. Mereka menawarkan lembar ToDo, proyek manajemen proyek, dan hal lainnya.

Saya ingin melakukan sesuatu yang sederhana namun bermanfaat. Kriteria saya sederhana - apakah saya dan teman dapat menggunakannya. Layanan web untuk mencari bahan tambahan makanan memenuhi persyaratan ini.

Idenya sederhana. Saat Anda membeli suatu produk di toko, Anda melihat semacam aditif E dalam komposisinya. Tidak jelas dari kodenya seberapa berbahaya atau tidaknya (dan ada juga bahan tambahan berbahaya yang dilarang di banyak negara).

Anda membuka situs web, memasukkan nama suplemen (nomor, salah satu nama alternatif), dan mendapatkan ringkasan suplemen:

E-Dobavki - layanan web untuk mencari bahan tambahan makanan di Java dan Spring Boot, yang ditulis oleh siswa saya

Ada proyek serupa. Anda juga dapat mengetikkan tambahan tersebut ke Google, meskipun tidak selalu menampilkan informasi dengan benar.

Namun karena proyek ini bersifat mendidik, kesulitan di atas tidak menghentikan kami :)

Implementasi

Semua orang menulis di Jawa, kode sumber proyek di Github.

Kami berjumlah 7 orang, termasuk saya. Semua orang membuat permintaan penarikan, dan saya, atau orang lain dalam grup, menerima permintaan penarikan ini.

Implementasi proyek ini memakan waktu sekitar satu bulan - mulai dari menyuarakan ide hingga keadaan yang Anda lihat sekarang.

Mengurai aditif

Hal pertama yang dilakukan siswa, selain pembuatan dasar kerangka kerja seputar database (entitas, repositori, dll.), adalah mengurai add-on dari situs informasi yang ada.

Ini diperlukan untuk menguji poin yang tersisa. Tidak diperlukan kode tambahan untuk mengisi database. Setelah menguraikan beberapa aditif dengan cepat, kami dapat menguji lebih lanjut UI, penyortiran, dan pemfilteran.

Spring Boot memungkinkan Anda membuat banyak profil. Profil adalah file dengan pengaturan.

Untuk lingkungan dev, kami menggunakan profil dengan DBMS H2 lokal dan port HTTP default (8080). Jadi, setiap kali aplikasi diluncurkan, database dibersihkan. Parser dalam hal ini adalah hal yang menyelamatkan kita.

Pencarian dan pemfilteran

Poin penting adalah pencarian dan pemfilteran. Seseorang di toko harus segera mengklik kode suplemen, atau salah satu namanya, dan mendapatkan hasilnya.

Oleh karena itu, entitas Aditif memiliki beberapa bidang. Ini adalah kode aditif, nama alternatif, deskripsi. Pencarian dilakukan dengan menggunakan Like di semua kolom secara bersamaan. Dan jika Anda memasukkan [123] atau [bayam], Anda akan mendapatkan hasil yang sama.

Kami melakukan semua ini berdasarkan Spesifikasi. Ini adalah bagian dari Spring yang memungkinkan Anda mendeskripsikan kondisi pencarian dasar (seperti beberapa bidang, misalnya), dan kemudian menggabungkan kondisi ini (ATAU atau DAN).

Setelah menulis selusin spesifikasi, Anda dapat mengajukan pertanyaan kompleks seperti β€œsemua bahan tambahan pewarna berbahaya yang memiliki kata [merah] dalam deskripsinya”.

Dalam hal bekerja dengan database Spring, saya merasa sangat nyaman. Hal ini terutama berlaku ketika bekerja dengan kueri yang kompleks. Saya memahami bahwa ini memiliki overhead tersendiri, dan kueri SQL yang ditulis secara manual dan dioptimalkan akan berjalan lebih cepat.

Namun saya juga berpandangan bahwa tidak perlu mengoptimalkan semuanya terlebih dahulu. Versi pertama harus dimulai, berfungsi, dan memungkinkan penggantian masing-masing bagian. Dan jika ada beban, bagian-bagian individual ini perlu ditulis ulang.

Security

Itu mudah. Ada pengguna dengan peran ADMIN - mereka dapat mengedit tambahan, menghapusnya, dan menambahkan yang baru.

Dan masih ada pengguna lain (terdaftar atau tidak). Mereka hanya dapat menelusuri daftar bahan tambahan dan mencari yang mereka butuhkan.

Keamanan Musim Semi digunakan untuk memisahkan hak. Data pengguna disimpan dalam database.

Pengguna dapat mendaftar. Sekarang tidak memberikan apa-apa. Jika siswa terus mengembangkan layanan dan memperkenalkan beberapa fungsi yang dipersonalisasi, maka pendaftaran akan berguna.

Responsif dan Bootstrap

Poin berikutnya adalah kemampuan beradaptasi. Dalam hal layanan kami (setidaknya seperti yang kami lihat), sebagian besar penggunanya menggunakan telepon seluler. Dan Anda perlu segera melihat suplemen dari ponsel Anda.

Agar tidak menderita dengan CSS, kami menggunakan Bootstrap. Murah, ceria, dan tampak layak.

Saya tidak bisa menyebut antarmukanya ideal. Halaman utama bahkan lebih sempit lagi, dan halaman untuk penjelasan rinci tentang bahan tambahan tersebut sempit; pada telepon seluler perlu dibuat lebih luas.

Saya hanya bisa mengatakan bahwa saya berusaha sesedikit mungkin mengganggu pekerjaan. Ini masih proyek pelajar. Dan tentunya para cowok akan bisa mengoreksi momen-momen seperti itu nantinya.

Satu Menit Optimasi SEO

Karena saya telah terlibat erat dalam situs web dan segala sesuatu yang berhubungan dengan SEO selama lebih dari dua tahun, saya tidak dapat merilis proyek tanpa setidaknya optimasi SEO dasar.

Faktanya, saya membuat pembuatan template Judul dan Deskripsi untuk setiap add-on. URL-nya hampir CNC, meski bisa dibuat lebih pendek.

Saya juga menambahkan penghitung kehadiran. Menambahkan situs ke Yandex Webmaster dan Google Search Console untuk memantau peringatan dari mesin pencari.

Ini tidak cukup. Anda juga perlu menambahkan robots.txt dan sitemap.xml untuk pengindeksan penuh. Tapi sekali lagi, ini adalah proyek pelajar. Saya akan memberitahu mereka apa yang perlu dilakukan, dan jika mereka mau, mereka akan melakukannya.

Anda perlu melampirkan sertifikat SSL. Let's Encrypt gratis juga bisa digunakan. Saya melakukan ini untuk Spring Boot. Hal itu tidak sulit dilakukan dan kepercayaan PS semakin meningkat.

Apa selanjutnya untuk proyek ini?

Sebenarnya pilihan ada di tangan teman-teman. Ide awal proyek ini juga mencakup database produk dengan tautan ke bahan aditif.

Masukkan β€œSnickers” dan lihat bahan tambahan nutrisi apa yang dikandungnya.

Bahkan pada awal proyek, saya tahu bahwa kami tidak akan memiliki produk apa pun :) Oleh karena itu, kami memulai hanya dengan bahan tambahan.

Sekarang Anda dapat menambahkan produk dan memperkenalkan produk tambahan. roti. Jika itu adalah database yang luas, akan ada penggunanya.

Penyebaran

Proyek ini diterapkan di VPS, Aruba Cloud. Ini adalah VPS termurah yang bisa kami temukan. Saya telah menggunakan penyedia ini selama lebih dari setahun untuk proyek saya, dan saya sangat senang dengannya.

Ciri-ciri VPS: RAM 1 GB, 1 CPU (frekuensinya kurang tahu), SSD 20 GB. Untuk proyek kami ini sudah cukup.

Proyek ini dibangun menggunakan paket mvn clean biasa. Hasilnya adalah toples gemuk - file yang dapat dieksekusi dengan semua dependensi.

Untuk sedikit mengotomatiskan semua ini, saya menulis beberapa skrip bash.

Skrip pertama menghapus file jar lama dan membuat yang baru.

Skrip kedua meluncurkan toples yang telah dirakit, meneruskannya ke nama profil yang diperlukan. Profil ini berisi informasi koneksi database.

DB - MySQL pada VPS yang sama.

Total restart proyek meliputi:

  • masuk ke VPS melalui SSH
  • unduh perubahan git terbaru
  • jalankan local-jar.sh
  • mematikan aplikasi yang sedang berjalan
  • jalankan peluncuran-produksi.sh

Prosedur ini memakan waktu tiga menit. Ini sepertinya pilihan cerdas bagi saya untuk proyek sekecil itu.

Kesulitan

Kesulitan utama dalam pembuatan proyek bersifat organisasi.

Ada sekelompok orang yang sepertinya tahu cara memprogram, tapi tidak begitu baik. Mereka tahu sesuatu, tapi masih belum bisa menerapkannya. Dan sekarang mereka harus menyelesaikan proyek tersebut dalam sebulan.

Saya mengidentifikasi pemimpin tim bersyarat dalam kelompok ini. Dia menyimpan Google Doc dengan daftar tugas, mendistribusikan tugas, dan mengontrol penerimaannya. Dia juga menerima permintaan penarikan.

Saya juga meminta para siswa untuk menulis laporan singkat setiap malam tentang pekerjaan yang mereka lakukan pada proyek tersebut. Jika Anda tidak melakukan apa pun, oke, tulis saja β€œtidak melakukan apa pun”. Ini adalah latihan yang bagus dan membuat Anda sedikit tegang. Sayangnya, tidak semua orang mengikuti aturan ini.

Tujuan dari semua gerakan ini sederhana. Bentuklah tim, meski hanya sebentar, untuk bekerja sama.

Saya ingin mereka merasa bahwa pekerjaan mereka penting. Pahami bahwa mereka tidak menulis kode sferis dalam ruang hampa. Dan apa yang mereka lakukan bersama adalah sebuah proyek yang nantinya akan dimanfaatkan oleh orang-orang.

Satu atau dua minggu pertama adalah peningkatan. Entitas dan komitmen kecil dibuat dengan lamban. Sedikit demi sedikit saya membangkitkannya, dan pekerjaan menjadi lebih menyenangkan. Komunikasi dalam chat menjadi lebih hidup, siswa memberikan tambahannya.

Saya yakin tujuan telah tercapai. Proyek selesai, teman-teman mendapat sedikit pengalaman bekerja dalam tim. Ada hasil yang terlihat dan nyata yang bisa ditunjukkan kepada teman dan dikembangkan lebih lanjut.

Temuan

Pembelajaran itu menarik.

Setelah setiap kelas saya kembali gelisah secara emosional. Saya mencoba membuat setiap pasangan unik dan menyampaikan pengetahuan sebanyak mungkin.

Senang rasanya ketika kelompok yang saya ajar mencapai final. Sangat keren ketika para pria menulis, β€œSaya mendapat pekerjaan, semuanya baik-baik saja, terima kasih.” Meskipun itu junior, meskipun itu bukan uang terbesar pada awalnya. Namun yang terpenting adalah mereka mengambil langkah menuju keinginan mereka, dan mereka berhasil.

Meskipun artikelnya ternyata cukup banyak, namun tentu saja tidak mungkin mencakup semua poinnya. Oleh karena itu, tulis pertanyaan Anda di komentar.

Sumber: www.habr.com

Tambah komentar