Pendahuluan
Kebetulan hampir dua tahun terakhir saya mengajar pemrograman di salah satu sekolah IT Kiev. Saya melakukan Just For Fun ini. Setelah saya menyimpan blog pada pemrograman, kemudian ditinggalkan. Tetapi keinginan untuk mengatakan hal-hal yang bermanfaat kepada orang-orang yang tertarik belum hilang.
Bahasa utama saya adalah Java. Saya menulis di atasnya game untuk seluler, perangkat lunak untuk komunikasi radio, dan berbagai layanan web. Dan saya mengajar Jawa secara khusus.
Di sini saya ingin menceritakan kisah pelatihan kelompok terakhir saya. Bagaimana mereka beralih dari belajar menjadi menulis layanan web yang berfungsi. Layanan web yang bermanfaat untuk menemukan suplemen nutrisi. Gratis, tanpa iklan, pendaftaran, dan SMS.
Layanan itu sendiri ada di sini - E-Dobavki.com .

Proyek ini mendidik, tidak mengandung iklan apa pun. Seperti yang saya mengerti dari publikasi ini , Anda dapat memberikan tautan ke proyek-proyek tersebut.
Sebelum menggambarkan proyek itu sendiri, ceritakan sedikit tentang proses mengajar kelompok, tanpa ini gambarnya tidak akan lengkap.
9 bulan belajar
Di sekolah tempat saya mengajar, kursus Java dibagi menjadi 2 bagian. Secara total, kursus ini memakan waktu sekitar 9 bulan, dengan semua gangguan (liburan Tahun Baru, waktu untuk menulis proyek perantara).
Bagian pertama memperkenalkan siswa pada konsep dasar YP. Variabel, metode, dasar-dasar OOP dan semua hal ini.
Bagian kedua tentu saja menyatakan bahwa siswa sudah kurang lebih memahami cara menulis di Jawa, dan ia dapat diberi tumpukan teknologi βdewasaβ. Semuanya dimulai dengan SQL, lalu JDBC, Hibernate. Kemudian HTTP, servlets. Selanjutnya Spring, sedikit tentang git dan maven. Dan siswa menulis tugas akhir.
Semua pelatihan dibagi menjadi beberapa modul. Saya melakukan kelas dua kali seminggu. Durasi satu pelajaran adalah dua jam.
Pendekatan pembelajaran saya
Saya merilis 5 grup. Sepertinya sangat mirip selama dua tahun, tetapi saya hampir selalu memimpin 2 kelompok secara paralel.
Saya mencoba berbagai pendekatan.
Opsi pertama adalah bahwa satu pasangan menonjol untuk presentasi dengan teori. Pasangan kedua adalah latihan murni. Pendekatan ini entah bagaimana berhasil, tetapi efisiensinya tidak terlalu bagus, seperti bagi saya.
Pilihan kedua, yang saya datangi dan sedang saya kerjakan sekarang, adalah tidak mencurahkan seluruh pasangan pada teori. Sebagai gantinya, saya mencampur bagian pendek dari teori selama 5-10 menit, dan segera memperbaikinya dengan contoh-contoh praktis. Pendekatan ini bekerja lebih baik.
Jika ada cukup waktu, saya memanggil siswa ke tempat saya, duduk untuk laptop saya, dan mereka sendiri membuat contoh-contoh praktis. Ini bekerja dengan baik, tetapi sayangnya membutuhkan banyak waktu.
Tidak semua mencapai akhir
Penemuan bagi saya adalah fakta bahwa tidak seluruh kelompok mencapai akhir kursus.
Menurut pengamatan saya, hanya setengah dari siswa yang menulis draf akhir. Sebagian besar dihilangkan di bagian pertama saja. Dan mereka yang mencapai bagian kedua, biasanya tidak jatuh.
Tinggalkan karena berbagai alasan.
Yang pertama adalah kompleksitas. Apa pun yang mereka katakan, Jawa bukanlah bahasa yang paling mudah. Untuk menulis bahkan program yang paling sederhana, Anda perlu memahami konsep kelas, metode. Dan untuk memahami mengapa Anda perlu menulis public static void main (String [] arg), Anda perlu memahami beberapa konsep lagi.
Bandingkan ini dengan Turbo Pascal, yang dimulai dengan banyak, termasuk saya:
begin writeln(" "); end.
Untuk mengatasi masalah ini, sejauh yang saya tahu, sekolah akan menjadi pengantar ujian tambahan. Sekarang, tidak semua orang bisa belajar Java. Meskipun ini pada tahap konsep, tetapi langkahnya jelas yang benar.
Dan alasan kedua adalah seperti pada gambar di bawah ini:

Orang sering berpikir bahwa pemrograman adalah ketika mereka mencetak banyak teks dan mendapatkan banyak uang untuk itu. Sebagai copywriter, hanya lebih banyak uang.
Kenyataannya sedikit berbeda. Banyak kode rutin, bug yang tidak jelas, proses pembelajaran yang berkelanjutan. Ini menarik, tetapi tidak untuk semua orang.
Statistik seperti itu. Pada awalnya itu membuatku kesal, kupikir mungkin aku melakukan sesuatu yang salah. Sekarang saya mengerti tentang statistik yang sama pada kebanyakan kursus. Sekarang saya tidak khawatir tentang ini, tetapi saya mengajar orang-orang yang tertarik.
Ide layanan
Ketika siswa menyelesaikan kursus penuh, saatnya untuk menulis tugas akhir. Ada beberapa ide berbeda. Daftar ToDo yang ditawarkan, proyek manajemen proyek, sesuatu yang lain.
Saya ingin membuat sesuatu yang sederhana, tetapi bermanfaat. Kriteria saya sederhana - bisakah saya dan teman saya menggunakannya. Di bawah persyaratan ini muncul layanan web untuk menemukan bahan tambahan makanan.
Idenya sederhana. Saat membeli produk di toko, Anda melihat beberapa jenis suplemen E-shnuyu. Menurut kode, tidak jelas seberapa berbahaya atau tidaknya ini (dan ada zat tambahan berbahaya yang dilarang di banyak negara).
Anda membuka situs, mengemudi atas nama suplemen (nomor, salah satu nama alternatif), dan mendapatkan ringkasan suplemen:

Ada proyek serupa. Anda juga dapat mengarahkan aditif ke Google, meskipun tidak selalu menampilkan informasi dengan benar.
Tapi karena proyek ini mendidik, kesulitan di atas tidak menghentikan kami :)
Implementasi
Semua orang menulis di Jawa, kode sumber untuk proyek di Github .
Ada 7 dari kita, termasuk saya. Semua orang melakukan permintaan tarikan, dan saya, atau orang lain dari grup, menerima permintaan tarikan ini.
Implementasi proyek ini memakan waktu sekitar satu bulan - dari menyuarakan ide ke keadaan yang Anda lihat sekarang.
Mengurai Aditif
Hal pertama yang dilakukan oleh salah satu siswa, terlepas dari penciptaan dasar pengikatan di sekitar database (entitas, repositori, dll.) Adalah penguraian aditif dari situs informasi yang ada.
Ini diperlukan untuk menguji poin yang tersisa. Tidak diperlukan kode tambahan untuk mengisi basis data. Dengan sparring cepat beberapa aditif, dimungkinkan untuk menguji UI lebih lanjut, menyortir, dan memfilter.
Spring Boot memungkinkan Anda membuat banyak profil. Profil adalah file pengaturan.
Untuk lingkungan dev, kami menggunakan profil dengan DBMS H2 lokal dan port HTTP default (8080). Jadi, setiap kali aplikasi diluncurkan, basis data dihapus. Pengurai dalam kasus ini adalah hal yang menyelamatkan kami.
Cari dan filter
Poin penting adalah pencarian dan penyaringan. Orang di toko harus dengan cepat menyodok kode suplemen, atau beberapa nama, dan mendapatkan hasilnya.
Oleh karena itu, entitas Aditif memiliki beberapa bidang. Ini adalah kode tambahan, nama alternatif, deskripsi. Pencarian berlangsung Suka untuk semua bidang sekaligus. Dan jika Anda memasukkan [123] atau [bayam], Anda akan mendapatkan hasil yang sama.
Kami melakukan semua ini berdasarkan Spesifikasi. Ini adalah bagian dari Pegas, yang memungkinkan Anda untuk menggambarkan kondisi pencarian dasar (seperti oleh beberapa bidang, misalnya), dan kemudian menggabungkan kondisi ini (OR atau AND).
Dengan menulis selusin spesifikasi, Anda dapat menanyakan pertanyaan kompleks seperti "semua zat pewarna berbahaya yang memiliki kata [merah] dalam deskripsi."
Dalam hal bekerja dengan database Spring, menurut saya sangat nyaman. Ini terutama benar ketika berhadapan dengan pertanyaan kompleks. Saya mengerti bahwa ini memberikan biaya overhead, dan query SQL yang ditulis secara manual dan dioptimalkan akan lebih cepat.
Tetapi saya juga berpandangan bahwa tidak perlu mengoptimalkan semuanya terlebih dahulu. Versi pertama harus memulai, bekerja, dan memungkinkan kemungkinan penggantian bagian-bagian individual. Dan jika bebannya - ini adalah bagian-bagian terpisah yang perlu ditulis ulang.
Keamanan
Semuanya sederhana. Ada pengguna dengan peran ADMIN - mereka dapat mengedit aditif, menghapus, menambah yang baru.
Dan ada pengguna lain (terdaftar atau tidak). Mereka hanya dapat melihat daftar suplemen dan mencari yang tepat.
Spring Security 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.
Adaptasi dan Bootstrap
Poin selanjutnya adalah kemampuan beradaptasi. Dalam hal layanan kami (setidaknya seperti yang kami lihat), sebagian besar pengguna akan menggunakan ponsel. Dan dari ponsel Anda perlu dengan cepat melihat suplemen.
Agar tidak menderita CSS, kami mengambil Bootstrap. Murah, ceria, dan sopan.
Saya tidak bisa menyebut antarmuka sempurna. Halaman utama bahkan lebih sedikit, dan halaman untuk deskripsi rinci aditif sempit, pada ponsel Anda harus membuatnya lebih luas.
Saya hanya dapat mengatakan bahwa saya mencoba mengganggu pekerjaan seminimal mungkin. Ini masih proyek siswa. Dan tentu saja, para pria akan dapat memperbaiki momen seperti itu nanti.
Optimasi SEO Menit
Sejak lebih dari dua tahun saya sibuk dengan situs web dan semua yang berhubungan dengan SEO, saya tidak bisa meluncurkan proyek tanpa setidaknya optimasi SEO dasar.
Bahkan, saya membuat Judul dan Deskripsi pembuatan template untuk setiap suplemen. URLnya hampir CNC, meskipun bisa dibuat lebih pendek.
Saya juga menambahkan konter kehadiran. Menambahkan situs ke Yandex Webmaster dan Google Search Console untuk melacak peringatan dari mesin pencari.
Ini tidak cukup. Anda juga perlu menambahkan robots.txt dan sitemap.xml untuk pengindeksan lengkap. Tetapi sekali lagi, ini adalah proyek siswa. Saya akan memberi tahu mereka apa yang perlu dilakukan, dan jika mereka mau, mereka akan melakukannya.
Anda harus melampirkan sertifikat SSL. Free Let's Encrypt juga bisa digunakan. Saya melakukan ini untuk Spring Boot. Itu tidak sulit, dan kepercayaan dari PS meningkat.
Apa selanjutnya dengan proyek ini
Lebih jauh lagi sebenarnya pilihannya terserah orang. Gagasan awal proyek juga termasuk database produk dengan aditif.
Masukkan "snickers" dan lihat suplemen nutrisi apa yang dikandungnya.
Bahkan pada awal proyek, saya tahu bahwa kami tidak akan memiliki produk :) Oleh karena itu, kami mulai hanya dengan aditif.
Sekarang Anda dapat mempercepat produk, memperkenalkan tambahan. roti. Jika ini adalah basis data yang luas, pengguna akan ditemukan.
Penempatan
Proyek ini dikerahkan di VPS, Aruba Cloud. Ini adalah VPS termurah yang bisa kami temukan. Saya telah menggunakan penyedia ini selama lebih dari setahun untuk proyek-proyek saya, dan itu menyenangkan saya.
Spesifikasi VPS: 1 GB RAM, 1 CPU (Saya tidak tahu frekuensinya), 20 GB SSD. Untuk proyek kami, ini sudah cukup dengan kepala.
Proyek ini akan menuju paket mvn clean yang biasa. Ternyata guci lemak adalah file yang dapat dieksekusi dengan semua dependensi.
Untuk mengotomatiskan semua ini sedikit, saya menulis beberapa skrip bash.
Script pertama menghapus file jar lama, dan mengumpulkan yang baru.
Script kedua menjalankan toples yang sudah dirakit, memberikannya nama profil yang Anda butuhkan. Profil ini berisi informasi koneksi basis data.
DB - MySQL pada VPS yang sama.
Restart total proyek termasuk:
- masuk ke VPS melalui SSH
- unduh suntingan git terbaru
- jalankan local-jar.sh
- bunuh aplikasi yang sedang berjalan
- jalankan launch-production.sh
Prosedur ini memakan waktu tiga menit. Menurut saya, ini pilihan yang masuk akal untuk proyek sekecil itu.
Kesulitan
Kesulitan utama dalam menciptakan proyek adalah sifat organisasi.
Ada sekelompok orang yang tampaknya dapat memprogram, tetapi tidak benar-benar. Mereka tahu sesuatu, tetapi mereka masih belum bisa menerapkannya. Dan sekarang mereka perlu membuat proyek dalam sebulan.
Saya menyoroti pemimpin tim kondisional dalam grup ini. Dia memimpin Google Doc dengan daftar tugas, membagikan tugas, mengontrol adopsi mereka. Dia juga menerima permintaan penarikan.
Saya juga meminta siswa untuk menulis laporan singkat setiap malam tentang pekerjaan yang dilakukan pada proyek. Tidak melakukan apa pun - ok, jadi tulis "tidak melakukan apa-apa". Ini adalah latihan hebat yang membuat Anda sedikit tegang. Sayangnya, tidak semua orang mengikuti aturan ini.
Tujuan dari semua gerakan ini sederhana. Bentuk tim, meskipun untuk waktu yang singkat, akan bekerja bersama.
Saya ingin para lelaki memiliki rasa akan pentingnya pekerjaan mereka. Pahami bahwa mereka tidak menulis kode berbentuk bola dalam ruang hampa. Dan apa yang mereka lakukan bersama proyek yang kemudian akan digunakan orang.
Satu atau dua minggu pertama adalah penumpukan. Entitas yang dibuat perlahan, komit kecil. Sedikit demi sedikit, saya mengaduknya, dan pekerjaan itu semakin menyenangkan. Obrolan menjadi hidup, siswa menawarkan tambahan mereka.
Saya percaya bahwa tujuan telah tercapai. Proyek selesai, kawan-kawan mendapat sedikit pengalaman di tim. Ada hasil nyata yang dapat Anda tunjukkan kepada teman-teman Anda, yang dapat Anda kembangkan lebih lanjut.
Kesimpulan
Belajar itu menarik.
Setelah setiap pasangan, saya menjadi gelisah secara emosional. Saya mencoba membuat setiap pasangan unik, dan menyampaikan pengetahuan maksimal.
Sangat menyenangkan ketika kelompok yang saya latih mencapai final. Terutama keren ketika orang-orang menulis, "Saya mendapat pekerjaan, semua aturan, terima kasih." Biarkan itu menjadi junior, bahkan jika bukan uang terbesar pada awalnya. Tetapi yang paling penting - mereka mengambil langkah ke arah keinginan mereka, dan mereka berhasil.
Meskipun artikel itu ternyata sangat banyak, tentu saja, tidak mungkin untuk mengungkapkan semua poin. Karena itu, tulis pertanyaan Anda di komentar.