
Insinyur kawan, ini adalah tahun keempat sejak saya mulai mengajar di Institut Politeknik Kiev . Selama waktu ini, saya telah mengumpulkan sejumlah besar contoh kode dan materi, sekitar 90 kuliah . Saya harus mengatakan bahwa selama seluruh periode kegiatan profesional saya (dan ini adalah 24 tahun menulis kode hampir setiap hari), saya tidak pernah meningkatkan level pemrograman saya, seperti dalam beberapa tahun terakhir, bekerja dengan siswa. Jika sebelumnya saya merasa bahwa menulis dengan singkat, sulit dan mengesankan adalah puncak dari keterampilan, sekarang saya menyadari bahwa siswa harus memahami kode saya setelah penjelasan minimal, jika tidak maka tidak akan berhasil. Saya sampai pada kesimpulan bahwa kemampuan ini dapat dan harus diperluas tidak hanya pada kode pelatihan, tetapi juga pada seluruh kode kerja. Selain itu, kode pelatihan tidak boleh berbeda secara signifikan dari kode kerja, karena kami mengajarkan para insinyur masa depan bagaimana membuat sistem nyata, bukan yang melatih. Dan setelah banyak permintaan, saya memutuskan untuk merekam semua kuliah dalam bentuk screencast, yang segera setelah kuliah dikirim ke YouTube. Untuk tahun akademik ini saya berencana untuk mencatat 100 kuliah, yang 23 telah diterbitkan , materi untuk 67 kuliah lainnya dan 10 kuliah baru masih dalam persiapan.
Konsep kursus
Anda semua tahu bahwa di industri kami ada masalah signifikan dengan pendidikan teknik dasar:
- program universitas sering ketinggalan zaman dan meninggalkan banyak yang diinginkan,
- istilah yang diterima secara umum tidak terbentuk (dalam perselisihan kita sering menyebut hal yang sama dengan kata yang berbeda dan hal yang berbeda dengan kata yang sama), kita menjadi bingung dengan hal ini,
- artikel dan video di Internet dapat dengan mudah dirilis oleh siapa saja yang memiliki gagasan bahwa kualifikasinya cukup untuk ini,
- Dalam pemrograman, akumulasi pengalaman terhambat oleh keluarnya cepat orang-orang dari bidang khusus, dan bahkan ide-ide mendasar diulang secara berulang, tetapi mereka yang telah memperoleh pengalaman di babak sebelumnya kemungkinan besar tidak lagi berlatih dan tidak dapat memberi tahu kolega yang lebih muda di mana garu dan kemacetan berada.
Membangun kursus berdasarkan JavaScript tentu saja merupakan upaya percobaan, tetapi bahasa ini tentu tidak akan berlebihan bagi siapa pun di TI modern. Pengembang JavaScript sendiri seringkali memiliki pelatihan teknik dasar yang buruk dan kurangnya pengetahuan mendasar dalam struktur data, algoritma, abstraksi dasar, pola, arsitektur, paradigma dan teknik pemrograman. Sebagian besar kode yang ditulis sekarang di industri hanya dibuang tak lama setelah penciptaan, lalu ditulis ulang dan dibuang lagi. Secara umum, kualitas dan pengetahuan jarang diperlukan, kecuali dalam wawancara. Yang terbaik adalah membuat kode berkualitas rendah dan memeliharanya, atau membuang kode dan menjual lebih banyak waktu untuk menulis ulang. Selain itu, industri kami benar-benar terpisah dari sains, ada kelebihan signifikan dari pemasar, karena kami sudah memprogram bukan dalam bahasa pemrograman dan bukan dalam abstraksi, tetapi kami memprogram dalam kerangka kerja dan perpustakaan, yang kami βdapatkanβ dalam bungkus yang indah. Kami mengumpulkan semuanya dari kubus, seringkali tanpa pemahaman ilmiah, dan jarang bisa menjawab pertanyaan mengapa kami melakukan ini dan bukan sebaliknya. Segala sesuatu di bagian telah ditulis sejak lama, semuanya dapat ditemukan di Internet, tetapi ternyata yang satu tidak tercetak dengan yang lain, yaitu, di beberapa bagian, tetapi bersama-sama tidak berfungsi. Menghubungkan potongan-potongan kode yang terpisah jauh lebih sulit daripada melakukannya secara individual. Ini terjadi justru karena kurangnya pendekatan sistematis, pemisahan terminologis dan desinkronisasi konseptual dari spesialis. Hanya yang kompatibel secara ideologis yang akan bekerja bersama, yang didasarkan pada teori umum dan standar umum yang diturunkan dari teori ini. Saya berharap bahwa dengan kursus ini saya akan mengambil setidaknya satu langkah kecil untuk mencapai konsensus yang begitu penting bagi industri.
Semua materi kursus tersedia secara gratis di github , dan kuliahnya terbuka, dapat dihadiri secara gratis. Setiap minggu saya merekam 4 kuliah. Kami mengadakan lebih banyak seminar dan lokakarya, tetapi tidak dicatat.
Struktur perkuliahan
- Konsep dasar : abstraksi perangkat lunak, variabel, operator, tipe data, array, struktur, tipe skalar dan referensi, pemetaan;
- Konsep kunci : fungsi, konteks dan ruang lingkup, kelas dan objek, prototipe, metode, lambda, fungsi murni, efek samping, penutupan, penggunaan parsial, kari, komposisi, fungsi tingkat tinggi, callback, pembungkus, dekorator, pengotor, peristiwa, antarmuka , singleton, iterator, objek fungsional, functor, monad, penanganan file, utas, soket, memoisasi, pewarisan, generator, pemrograman asinkron, pengilangan, modul dan dependensi, penanganan kesalahan, pabrik dan kumpulan, timer, ekspresi reguler;
- Bahan pendukung : git, sistem kontrol versi, dan manajer paket, bekerja dengan konsol, pengujian, integrasi berkelanjutan, pencatatan, linter, optimalisasi dan kinerja, memerangi kebocoran memori, kelas tersembunyi, fungsi monomorfik, generik, pengumpulan sampah, manajemen memori;
- Struktur data : koleksi, array dan array yang diketik, buffer, daftar, tumpukan, antrian, dec, pohon biner dan hierarkis, pohon multidimensi, rotasi dan penyeimbangan cabang, set, hashmaps, grafik, daftar diperluas, antrian sinkron, automata, struktur data yang berulang dan pencarian;
- Konsep yang diperluas : simbol, proksi, berbeda, masa depan dan janji, lensa, transduser, async / tunggu, pengumpul data, komposisi asinkron, adaptor asinkron, itronator asinkron, introspeksi, refleksi, perancah, inversi kontrol dan injeksi ketergantungan, kotak pasir, arsitektur berlapis pendekatan komponen, lapisan akses data, proyeksi data, pemantauan sistem file, klien-server dan arsitektur tiga-tautan, pengelompokan dan penyeimbangan, desain protokol, kelebihan modul dinamis, metadata, din ikatan mical, interaksi antar proses;
- Contoh kode dan penggunaan teknologi yang terintegrasi: spreadsheet langsung, obrolan di soket web, implementasi bahasa permintaan grafik, pustaka alternatif dari metasync abstraksi asinkron, perbandingan pelaksanaan tugas yang sama pada paradigma yang berbeda, perbandingan gaya pemrograman fungsional, contoh struktur aplikasi, perutean penangan di node.js aplikasi, isolasi kode dalam kotak pasir, objek transaksional;
- Pemrograman paradigma : imperatif, struktural dan non-struktural, prosedural, berorientasi objek, prototipe, fungsional, logis, deklaratif, asinkron, reaktif, peristiwa, otomatis, umum, pemrograman berbasis data, multi-paradigma, metaprogramming.
Referensi
Kalender kuliah tersedia dalam dua kelompok mitap: HowProgrammingWorks (ini adalah kuliah tentang pemrograman menggunakan contoh JavaScript) dan NodeUA (ini adalah kuliah di Node.js) dan saya mendesak semua orang yang ingin menghadiri kuliah untuk mendaftar secara langsung. Penerimaan gratis untuk semua orang, tetapi secara organisasi lebih mudah untuk memperkirakan jumlah siswa. Sepanjang sejarah, saya memiliki kasus dan 600 orang dan 2 orang, dan jumlah pemilih tidak dapat diprediksi.
Semua video yang direkam muncul pada hari yang sama (10-20 menit setelah ceramah) di saluran youtube .
Kuliah dikelompokkan menjadi dua daftar putar: pemrograman dan JavaScript dan Node.js.
Saya menempatkan tautan ke ceramah dan materi dalam dua saluran telegram: pemrograman dan JavaScript, dan Node.js dan topik lain yang lebih kompleks .
Ada dua grup telegram untuk diskusi dan pertanyaan: pemrograman dan JavaScript, dan Node.js.
Akun github saya, repositori pelatihan di HowProgrammingWorks, dan perpustakaan komunitas kami.
Kesimpulan
Saya menunggu saran untuk melengkapi kursus dengan topik-topik baru, saya berharap contoh pengenalan kode contoh, termasuk terjemahan contoh ke dalam bahasa lain. Umpan balik Anda akan membantu meningkatkan kursus.