Ada situasi yang menarik di pasar tenaga kerja dalam pembangunan Jawa. Ada
lebih dari 100.000 resume aktif untuk pengembang, dan satu lowongan per resume. Pada saat yang sama, pengusaha dan agen perekrutan mengeluh tentang kurangnya personel, dan meskipun ada ribuan resume, sulit untuk menemukan spesialis yang baik. Misalnya, pengembang Java memiliki produk langka: jarang, pemotongannya tidak terpengaruh, gaji tumbuh, dan persaingan menurun. Kami tidak akan menyelidiki penyebab dari fenomena ini, tetapi akan berbicara tentang salah satu cara untuk menyelesaikan masalah ini.

Anda dapat mencari spesialis teknis untuk waktu yang lama, tetapi pekerjaan itu tidak menunggu, jadi Anda harus mempekerjakan tenaga yang tidak berkualitas dan melatih dalam proses tersebut. Pilihan: belajar sendiri di waktu luang atau kursus dan seminar di tempat kerja, tetapi Anda dapat memilih game.
Artyom Larin (
artem_larin ) akan menjelaskan mengapa metode pengajaran tradisional tidak dapat diandalkan dan mengapa permainan dalam beberapa hal lebih baik daripada yang lain.
Permainan papan tim khusus tidak hanya mengajarkan topik kompleks pengembangan perangkat lunak, secara aktif melibatkan setiap peserta, tetapi juga membentuk bahasa teknis umum dalam tim, serta memecahkan masalah pembentukan tim dan membentuk budaya perusahaan.
Tentang pembicara: Artyom Larin di Jawa sejak 2004. Dia bekerja sebagai pengembang terkemuka, dan sebagai senior, rekan kerja yang terlatih secara berkala, memberikan kuliah dan seminar pelatihan internal. Sayangnya, ada pengalaman belajar negatif yang mengarahkan Artyom pada gagasan bahwa permainan papan adalah apa yang dibutuhkan dalam pengembangan.

Ini akan tentang bagaimana memompa dalam tim tidak sulit, tetapi keterampilan teknis yang sulit. Laporan ini terdiri dari dua bagian: kemanusiaan dan kreatif. Bahkan jika Anda bukan seorang teknisi, di bagian kedua Anda harus meregangkan otak kemanusiaan Anda, karena tanpa informasi teknis, di mana pun - saya akan berbicara tentang keterampilan keras dan leveling mereka.
Masalah IT
Saya percaya bahwa ada masalah besar di TI - dan ini adalah
kekurangan staf . Masalah ini telah dibahas berkali-kali, ada
statistik dari hh.ru dan publikasi tentang topik ini. Untuk jaga-jaga, periksa sendiri statistiknya. Jika Anda memasukkan "Java" di mesin pencari hh.ru, kita akan melihat 5-6 ribu pekerjaan di Rusia, dan jumlah resume pada hh.ru yang sama lebih dari 100 ribu. Tampaknya tidak ada kekurangan pengembang - resume adalah urutan besarnya lebih besar daripada lowongan. .

Mari kita lihat dari sisi yang lain. Situs hh.ru memiliki indeks khusus, yang disebut
indeks hh . Ini adalah rasio resume dan lowongan aktif. Untuk permintaan Java, kira-kira sama dengan satu: untuk satu lowongan, satu resume. Lagi-lagi, ternyata tidak ada kekurangan personel? Perusahaan membutuhkan programmer, membuka lowongan, dan, menurut indeks, senior harus segera datang, mendapatkan pekerjaan dan menutup lowongan.
Tuan "harus" datang, tetapi tidak datang. Angka-angka mengatakan bahwa tidak ada kekurangan personil, tetapi di dunia nyata, dan tidak di dunia indeks-hh, itu. Jawa adalah profesi yang sangat langka. Ada perburuan kepala berdarah untuk manula Jawa: HR dan perekrut mengepung mereka dengan tawaran untuk mendapatkan pekerjaan. Rata-rata, satu pengembang Java
menerima 5-6 penawaran , bahkan jika dipekerjakan.
Ada apa? Dari mana datangnya kekurangan staf? Dari pengalaman wawancara pribadi saya, saya percaya bahwa masalahnya adalah kebanyakan pencari kerja yang mengirim resume dan datang untuk wawancara memiliki
pendidikan yang tidak memadai dan kualifikasi yang rendah. Tetapi karena ada kekurangan staf, perusahaan terpaksa mempekerjakan orang-orang ini dan melatih sendiri - orang-orang dengan kualifikasi tinggi menghabiskan waktu mereka mendidik orang-orang dengan keterampilan rendah.
Kami tidak bisa mengalahkan kelaparan personel - hanya untuk menyatakan. Oleh karena itu, kami beradaptasi dan menyelesaikan masalah di sisi lain - kami berlatih. Mari kita pikirkan cara mendidik orang-orang di industri TI.
Cara belajar di industri IT
Pada tahun 1980, Laboratorium Pelatihan Nasional di Amerika Serikat melakukan penelitian tentang efektivitas berbagai metode pelatihan. Ternyata
kuliah dan membaca buku memiliki efisiensi yang sangat rendah - hanya 5-10% . Selanjutnya adalah menonton video ceramah dan mendengarkan audio. Efisiensi maksimum 90% adalah pelatihan oleh orang-orang lain - pendampingan dan penerapan langsung pengetahuan yang diperoleh dalam praktik.

Berdasarkan piramida pelatihan, kami akan melakukan analisis tersurat atas metode pelatihan TI.
Kursus
Tentunya Anda bertemu iklan kontekstual di Internet yang berjanji untuk mengubah pemula menjadi programmer profesional: "Menjadi pengembang dalam 3 bulan." Saya sendiri mengikuti kursus semacam itu beberapa kali demi minat, dan menasihati mereka untuk murid-murid saya. Saya dapat mengatakan bahwa ya, kursus ini efektif, tetapi mereka memiliki dua masalah: hanya
pengetahuan dasar yang diberikan dalam kursus - mereka tidak akan mengubah Juni menjadi senior, dan efektivitas pelatihan
tidak lebih tinggi dari 20% . Kursus adalah cara yang tidak efisien, jadi kita akan melupakannya.
Bengkel internal
Saya sangat menyukai seminar internal dan telah mengadakannya berkali-kali. Saya percaya bahwa mereka hanya efektif jika audiens berinteraksi secara interaktif dengan guru. Sayangnya, ini jarang terjadi. Biasanya orang datang ke seminar, duduk dan mendengarkan secara pasif dosen sambil minum burung camar. Tanpa interaktivitas,
efisiensi rendah - maksimal 50% . Karena itu, seminar juga bisa dilupakan.
Konferensi
Tujuan dari konferensi ini adalah untuk memperkenalkan inovasi industri, tetapi bukan pelatihan keras.
Konferensi adalah komunikasi , ide-ide segar, tetapi bukan pelatihan - efektivitas dalam kasus ini hanya 5-30%. Konferensi juga bukan yang kita butuhkan.
Belajar mandiri
Saya, seperti kebanyakan teman saya, programmer, masuk ke profesi ini melalui pendidikan mandiri. Ini adalah metode yang efektif, saya akan memberikan
efisiensi 75% , jika bukan karena satu kelemahan besar - daftar buku untuk dipelajari.

Ini adalah daftar yang saya berikan kepada orang-orang yang ingin menjadi pengembang Java dan menulis kode industri nyata. Ketika saya menunjukkannya kepada pemula, saya melihat
ketakutan, keputusasaan dan keputusasaan di mata mereka. Antusiasme cepat hilang.
Untuk menjadi seorang programmer, seseorang harus melalui "dataran putus asa". Menurut konsep ini, setelah seseorang menerima pengetahuan awal di belakang antusiasme, periode yang lama datang ketika dia tidak lagi menerima pengetahuan dan harga diri dengan cepat jatuh.

Dengan analogi dengan "dataran putus asa", saya memperkenalkan konsep "dinding putus asa". Ini adalah dinding 15 buku tebal, yang tidak memungkinkan ratusan ribu pengembang awal dengan hh.ru masuk ke dalam 5 ribu lowongan aktif yang didambakan senior dan menengah.

Ternyata untuk menjadi pengembang, seorang pemula menghabiskan waktu untuk belajar mandiri, dan bukan pada keluarga atau hobi. Tampaknya metode ini juga tidak terlalu baik.
Mentoring dan Coaching
Ini adalah cara paling efektif, menurut piramida pembelajaran -
efisiensi 90% . Namun dia juga memiliki kekurangan yang tidak memungkinkan menyebut metode ini sebagai "pil ajaib".
Mentoring selalu merupakan
perbandingan 1: 1 , yaitu, satu mentor dan satu
menti - pelajar . Dalam latihan saya, saya belum melihat kasus di mana seorang mentor dapat melatih 10 orang. Mentoring
memiliki skala yang sangat
buruk dan
mengalihkan perhatian para senior dari pekerjaan utama. Saya dapat mengatakannya sendiri - saya punya 2 menit, maksimum. Dan pada saat yang sama, setengah dari waktu kerja saya, dan kadang-kadang lebih banyak, dihabiskan untuk pendampingan, dan bukan untuk menyelesaikan tugas-tugas produksi di mana saya dibayar uang. Karena itu, 3-4 orang atau lebih, tidak mungkin untuk menjadi mentor, jika kita berbicara tentang mentoring yang berkualitas tinggi.
Studi jangka panjang - 1-2 tahun. Dalam pengalaman saya, seorang programmer telah bekerja selama rata-rata 2 tahun di sebuah perusahaan. Ternyata gambaran yang menyedihkan: Anda membimbing seseorang, mendorong pengetahuan ke dalam dirinya, dan kemudian seseorang berhenti - baik Anda atau dia, dan semua bimbingan tidak pergi ke mana-mana.
Mentoring itu efektif, tetapi karena kekurangannya, saya pikir - mengapa tidak menemukan beberapa cara yang akan efektif sebagai mentoring, tetapi tanpa minus: menyenangkan, menarik, dan scalable. Berpikir, saya datang dengan ide permainan - itu menyenangkan, saya suka orang dan menyelesaikan masalah bimbingan.
Game!
Game apa yang kita ketahui? Catur, catur, kumparan dan kartu domino adalah pekerjaan intelektual, meskipun sederhana.
Kartu juga merupakan permainan intelektual. Siapa yang tidak suka klasik, ada "Magic: The Gathering". Banyak orang IT menyukai game ini, termasuk saya. Banyak perusahaan IT menyelenggarakan seluruh turnamen yang didedikasikan untuknya.

Semua game ini adalah game untuk hiburan, bukan untuk programmer, dan saya bertanya-tanya - apakah ada game untuk programmer? Dan saya menemukan, misalnya, permainan seperti itu.

Pemain beroperasi dengan blok warna, mengkompilasi kode sumber dari mereka untuk mengendalikan astronot. Jelas, permainan ini benar-benar kekanak-kanakan, saya akan mengatakan - TK. Dia tidak mengubah pemain menjadi senior.
Kemudian permainannya tiba-tiba: 3D-landscape dan robot-pahlawan tiga dimensi.

Dalam beberapa bahasa mirip C, Anda perlu menulis kode semu untuk mengendalikan robot.
Di bawah ini adalah tangkapan layar dari game ketiga yang saya temukan.

Di sini, sekali lagi, pada pseudo-code, Anda perlu menulis sebuah program untuk mengontrol karakter: memindahkannya melalui labirin, membuka dan menutup pintu, memanipulasi objek.
Semua gim lainnya mirip dengan ketiganya, dan semuanya memiliki banyak kekurangan serius.
Kerugian game
Permainan ini hanya mengajarkan
konsep -
konsep dasar - seperti variabel, loop, fungsi - sesuatu yang bahkan dipelajari oleh junior di institut. Game terpisah
dari tugas industri nyata , karena mereka tidak memiliki multithreading, atau transaksionalitas - semua yang diketahui oleh senior atau menengah. Game seperti ini tidak diajarkan, dan ini masalah mereka.
Pemain mengontrol karakter atau "robot" , sementara pada kenyataannya para seigneurs dan middle bekerja dengan objek bisnis yang sangat kompleks. Dan selain itu,
pemain selalu sendirian , sementara di IT mereka bekerja dalam tim. Setiap proyek perangkat lunak adalah kerja tim. Karena banyak programmer tumbuh dari introvert dan kerja tim sering kali sulit bagi kami, saya ingin permainan juga memompa keterampilan tim.
Pengalaman bermain game pribadi
Pada saat yang sama, ada budaya permainan papan yang kaya di dunia: Munchkin, Magic: The Gathering, Dungeons & Dragons. Tapi, sayangnya, saya tidak memenuhi "desktop" untuk programmer.
Secara pribadi, saya dan seluruh keluarga saya: istri, anak perempuan dan kucing Tishka, kami menyukai "desktop". Terlebih lagi, putri saya dan saya suka menciptakan mereka. Kami menciptakan permainan sesuai dengan program populer pada satu waktu "Revizorro" dan berbagai game petualangan lainnya. Dalam foto sederhana ini ada 3 contoh "desktop" kami.

Bagaimana saya menemukan ide permainan papan untuk programmer? Saya melewati empat tahap:
pengalaman negatif melatih karyawan,
analisis mengecewakan dari game saat ini ,
pengalaman bermain "trik" dan
pengalaman menciptakan mereka . Semua ini membawa saya ke "desktop" untuk programmer. Memang, mengapa tidak membuat game sendiri?
Persyaratan gim
Berapa harganya futuristik atau turun ke bumi?
Sesi permainan singkat tidak lebih dari 15-20 menit, karena seperti yang direncanakan, Anda harus memainkan permainan ini selama jam kerja. Bermain selama lebih dari 20 menit, orang akan terbawa suasana dan keluar dari proses produksi, dan bos akan berjalan dan memotong rumput. Karenanya, 20 menit sangat ideal: kami bermain dan terus bekerja.
Gim ini harus mengajarkan
tugas -
tugas industri nyata yang dihadapi oleh senior dan middle:
multithreading, JPA, database, dan struktur data bersamaan . Ini adalah topik yang sering tidak memungkinkan junior melompat di kepala tingkat teknis tertentu dan menjadi senior. Saya berbicara tidak hanya tentang Java, tetapi secara umum tentang semua bahasa, termasuk Python, C ++ - di mana-mana ada multithreading, database, dan struktur bersamaan.
Tugas selanjutnya yang harus diselesaikan oleh permainan adalah
memompa keterampilan dalam kerja tim : pembentukan satu bahasa teknis di dalam tim dan kemampuan untuk membahas kode. Sekarang hampir setiap perusahaan memiliki ulasan kode, dan situasi sering dijumpai: pengembang, terutama pemula, melihat kode sumber, tetapi tidak dapat menggambarkan dengan kata-kata apa yang terjadi di dalamnya. Mereka dapat menulis kode, tetapi mereka tidak dapat mendiskusikannya - tidak ada kamus teknis di kepala. Saya ingin permainan memompa kamus teknis ini. Selain itu, memiliki bahasa teknis membantu Anda menulis dokumentasi berkualitas.
Membangun tim adalah persyaratan yang akan dinikmati SDM. Saya tidak berbicara tentang pembentukan tim, di mana orang-orang berkumpul dan minum alkohol, tetapi tentang pertemuan di mana mereka membahas kode sumber. Ada pembangunan tim seperti itu, dan tugas permainan ada di dalamnya.
Untuk menyenangkan tuan dan tim. Saya ingin permainan disukai secara pribadi oleh saya, sebagai senior dan tuan rumah dari permainan ini, dan tim - sehingga itu akan menarik, menyenangkan, bahkan mungkin secara provokatif di suatu tempat.
Persyaratan terakhir sangat penting - permainan harus benar-benar permainan papan nyata,
tidak online, hanya offline . Beberapa kali saya diminta untuk menulis versi online dari game ini, tetapi saya selalu menolak. Banyak yang akrab dengan permainan Go, tetapi tidak semua orang tahu bahwa dalam permainan Cina asli, chip hitam terbuat dari basal, dan putih - dari kulit kerang khusus. Keripik plastik bukan lagi permainan Go. Orang Cina peka terhadap sensasi sentuhan selama pertandingan - mereka harus menjadi bagian dari itu. Saya pikir persis sama. Karena itu, permainan saya juga harus hidup dan memberikan kenikmatan sentuhan.
Contoh dari "Tabel"
Game yang saya kembangkan disebut
"Who Stole the Monitor?" Karena kita semua teknisi, kita tahu bahwa monitor itu bukan TV yang kita tonton di tempat kerja, tetapi konsep multi-threading.
Tujuan permainan ini adalah untuk secara kolaboratif memperkenalkan tim ke jalan buntu di multithreading Java . Para pemain dalam tim tidak saling bersaing, tetapi bersama-sama memecahkan masalah yang sama - membangun tim yang nyata. Saya memilih topik multithreading, karena ini adalah bilah untuk bulan Juni, di mana ia sering tidak dapat melompat, dan mulai menulis kode industri yang benar-benar bagus. Bisnis membutuhkan kapasitas besar dari kami, dan
hampir setiap program industri multithreaded . Oleh karena itu, sangat penting bagi bisnis dan programmer untuk mengetahui apa itu multithreading.
Elemen gim
Elemen pertama adalah
bidang Kode Sumber pada selembar karton tebal. Ini menunjukkan potongan kode tertentu - dalam bahasa kita Java.

Elemen selanjutnya adalah
tongkat dari garis saat ini . Ini adalah bingkai berwarna yang terbuat dari kawat.

Setiap pemain pada gilirannya memindahkan staf alirannya melalui kode sumber, sehingga menampilkan bilah kemajuan saat ini.

Permainan ini memiliki dua bidang permainan. Yang pertama adalah
mesin negara - kotak dan panah dengan tulisan.

Saya mengambil mesin negara dari dokumentasi Java standar. Setiap senior, menengah dan bahkan junior harus tahu mesin negara ini dengan hati, tetapi dalam pengalaman saya tidak semua pengembang Java tahu itu, banyak yang menulis kode tanpa sepengetahuan ini. Salah satu tugas dari permainan ini adalah untuk
memompa keterampilan dalam mengetahui mesin negara dari benang Java .
Elemen berikutnya adalah
token aliran dua sisi .

Di satu sisi, mata tertutup ditarik - ini berarti aliran tidak aktif. Di sisi lain - seorang lelaki berlari - sebuah aliran aktif.
Saya akan menggambarkan bagaimana chip bergerak di sekitar mesin negara. Jika utas mulai bekerja, maka pemain memindahkan token status ke status
" baru" - keadaan awal saat utas baru saja dibuat.

Selama permainan, sebagai hasil dari beberapa peristiwa, pemain memindahkan chip ke kondisi "
runnable" , tidak lupa untuk membalikkannya dengan sisi di mana orang
kecil yang berlari digambar, yang berarti sekarang alirannya bekerja.

Elemen berikutnya dari permainan ini adalah
kartu monitor .

Kartu-kartu ini pertama-tama terletak di tumpukan umum, dan kemudian para pemain mengambilnya ke tangan mereka sendiri. Setiap monitor terpasang ke objek Java, yang ada dua: "satu" dan "dua".
Elemen terakhir adalah
jam dari arus .

Mungkin, semua teknisi tahu bahwa utas dapat "tertidur" selama waktu tertentu. Untuk mengukur waktu ini dalam permainan, ada jam tangan tempat Anda bisa menggerakkan tangan.
Pertimbangkan beberapa langkah dari sesi permainan.
Contoh Sesi Game
Kami memiliki tiga pemain:
- Michael bekerja untuk utas βutamaβ - utas Java utama.
- Eugene - streaming "t1".
- Svetlana - aliran "t2".
Masing-masing pemain menempatkan dirinya di tempat salah satu aliran dan menjalani hidupnya dalam proses permainan. Jadi dia mengerti apa artinya menjadi utas Java.
Michael memindahkan tongkat stream ke baris kode pertama.

Eugene dan Svetlana masih tidur - utasnya belum dibuat, dan Mikhail memindahkan staf alirannya ke baris kode berikutnya, di mana dikatakan <code> Utas t1 = Utas baru () </code> - ini artinya aliran akan dibuat Eugene "t1" .

Eugene tidak menguap, mengambil chip stream-nya dan meletakkannya di "runnable" state - sisi dengan running man.
Contoh Kerja Tim
Svetlana memberi tahu Eugene:
- Eugene, mengapa Anda menempatkan chip aliran Anda tidak dalam status "baru", tetapi segera dalam kondisi "runnable"?
Dapat dilihat bahwa Eugene adalah junior yang paling tidak berpengalaman dalam tim, tetapi Svetlana lebih berpengalaman dan mengatakan:
- Eugene, menurut mesin negara, keadaan awal aliran adalah "baru".
Eugene setuju dengan Svetlana dan memindahkan chip alirannya ke posisi yang benar.

Ini adalah contoh bagaimana tim mentransfer pengetahuan selama pertandingan. Permainan berlanjut ...
Pada langkah tertentu, Michael sudah membuat komentar ke Eugene:
- Eugene, Anda memasuki blok sinkronisasi, tetapi lupa melakukan sesuatu ...
- Tepat, saya lupa mengambil monitor dari objek ini!
Eugene mengambil monitor dari objek "
satu" . Ternyata aliran "t1" Eugene memiliki monitor ini.

Kemudian muncul permainan: banyak gerakan, kelalaian, bekerja dengan waktu. Baca lebih lanjut
di video atau
di slide dalam presentasi .
Di akhir permainan, Eugene memiliki satu monitor, dan Svetlana memiliki yang lain, dan aliran masing-masing
diblokir oleh harapan monitor . Akibatnya, aliran "t1" dan aliran "t2" berada dalam kondisi "diblokir", yaitu, kami mengamati kebuntuan.
Selama sesi permainan, masing-masing pemain akan memeriksa secara pribadi, merasakan kebuntuan, bagaimana itu muncul dan apa itu.
Kesimpulan
Sesi permainan ini singkat . 20 , , ,
. , β
1:n .
β . , ,
. Deadlock β β , «» β heisenbug, .
β . , , , . .
. , . : Delphi, β C++, β Haskell.
, Java- 20 . 5 ,
.
, β , , , . .
deadlock, :
- Race conditions β , .
- wait/notify .
- join/isAlive .
?
, ,
. , .
JPA- JEE/Spring. , JPA-.
Google, Β« JPA-Β».

, , β .

, «» .
- JEE.
- SQL.
- : , , HashMap.
- java.util.concurrent.
, , .
, ,
- . , - , . - , .
, . ,
. , : , , , . - , , .
β «». , . , .
.
Linkedin- GitHub.
.
, , . 26 KnowledgeConf . , . , .