Ketika saya lulus dari universitas pada tahun 2004, hampir tidak ada tim pengembang di kota kami. Di mana bekerja, dari siapa mendapatkan pengalaman praktis?
Pilihannya sederhana: "admin" atau "ke Moskow". Atau tinggalkan profesinya.
Sekarang saya mengajar pengembangan web di universitas lokal, saya mengelola tim yang besar, dan penting bagi saya bahwa anak-anak muda yang cerdas ingin tinggal di kota saya agar kota kita tidak dianggap sebagai “tempat yang busuk”.
Inti dari artikel ini singkat
Rekan-rekan saya dan saya tahu bagaimana cara "menumbuhkan" pemrogram web dari "hampir nol" ke tingkat profesional yang percaya diri (Senior / Arsitek).
Kami ingin memberi tahu Anda bagaimana semuanya bekerja dan berbagi materi dan metode dengan komunitas.
Artikel ini ditulis untuk siswa, pemula, dan pengembang web yang sedang berkembang.
Yang berikut ini menjelaskan "jalur pengembangan pengembang web", tingkat kompetensi "Trainee", "Junior", "Tengah", "Senior" dan "Arsitek", seperti yang saya lihat, dan contoh tugas sertifikasi diberikan.
Piramida kemampuan pemrogram atau "apa yang harus diunduh di awal"
Bagaimana Menjadi Pemrogram Web yang Baik? Apakah saya perlu menyelesaikan "ilmu komputer" di universitas yang bagus? Atau kursus bulanan sudah cukup? Atau "dengan buku dan tikus" dapatkah Anda mempelajari semuanya?
Tiga "pilar" yang menjadi landasan profesi setiap pengembang pada tumpukan teknologi apa pun adalah algoritme, database, dan pemrograman itu sendiri (bahasa + pola OOP +).
Apa itu Algoritme?
Sebuah analogi "sehari-hari" dari keterampilan teknis "algoritme" adalah perbaikan kipas. Bagaimana jika tidak berputar? Periksa / ganti soket, lalu putar bilahnya dengan tangan, lalu "cincin" kabelnya.
Logikanya jelas: "Saya membagi menjadi beberapa bagian dan memeriksa masing-masing." Anehnya, banyak orang tidak tahu bagaimana cara berpikir seperti itu. Ini ada dalam darah seorang programmer sejati.
Database
Kursus DB adalah salah satu yang utama, seperti fisika untuk seorang insinyur. Kabar buruknya adalah bahwa mereka sering kali diajarkan dengan cara yang sama buruknya: mereka direduksi menjadi "menceritakan kembali paragraf".
Baik teori dan praktek penting dalam DB. Pemrogram harus mampu menulis pertanyaan, memahami logika ORM, dan mendesain struktur.
Teknologi apa yang perlu diketahui seorang programmer?
Terdiri dari apa profesionalisme pengembang? Perkiraan waktu pengembangan ditunjukkan untuk jalur perkembangan klasik (mulai dari universitas).
Algoritme diajarkan “menurut pikiran” di sekolah / universitas. Butuh 1-2 tahun untuk ini, dan periode ini menentukan ketinggian lepas landas profesional masa depan. Jika Anda tidak menguasai algoritme, Anda tidak akan pernah tumbuh dewasa.
Keunikan bahasa tertentu dapat dipelajari dengan cukup cepat. Jika Anda mempelajari bahasa kedua atau ketiga, Anda akan menyelesaikan masalah bermakna pertama Anda dalam seminggu. Tapi "Saya tahu dengan sempurna" akan membutuhkan setidaknya satu tahun latihan.
Kerangka kerja sering kali menyertakan ratusan modul / kelas / ekstensi dan terus berkembang. Menguasai kerangka kerja akan membutuhkan waktu setidaknya beberapa bulan.
Banyak orang otodidak mengikuti jalan yang "mudah", tetapi salah: alih-alih algoritmik, mereka mulai mempelajari kerangka kerjanya. Dan setelah beberapa bulan, praktisi menyatakan bahwa mereka dapat membuat program. Mereka gagal dalam wawancara serius dalam 10 menit setelah mulai.
Teknologi khusus (misalnya AJAX, rendering JS sisi server, push & pull, load balancing di seluruh geo-cluster, pembuatan profil kueri panjang di xhprof, antrean pesan, database NoSQL) tidak terbatas. Anda bisa mempelajarinya selamanya.
Piramida ini harus dilintasi “dari bawah ke atas”. Jika Anda memulai dengan kerangka kerja dan menulis resume yang bagus, tetapi tidak tahu bagaimana “JS kosong” atau “bagaimana get-request berbeda dari sebuah posting” bekerja, Anda tidak akan menjadi seorang profesional.
Tugas apa yang perlu diselesaikan?
Tahap pertama adalah "mulai". Pertama, Anda memerlukan keterampilan solusi yang percaya diri dan tepat untuk tugas yang relatif sederhana. Paling sering ini adalah masalah permainan, matematika atau logika.
Untuk keterampilan "Saya menulis kode sederhana dengan cepat", Anda perlu memecahkan koleksi klasik masalah pemrograman apa pun dalam bahasa pemrograman apa pun. Misalnya, Zlatopolsky .
Mungkin tampak aneh bagi Anda untuk memecahkan 1000 masalah yang membosankan, tetapi setiap programmer yang baik melakukannya di awal perjalanannya. Seseorang - di institut, seseorang di sekolah, anak-anak kita akan melakukannya di taman kanak-kanak.
Metode pengajaran oleh dokter ini disebut "metode lead w * py." Maafkan saya karena tidak sopan, tetapi Anda tidak bisa membuang kata-kata dari seni rakyat.
Tahap kedua adalah "latihan".Anda perlu menulis kode yang dapat Anda ketahui dalam setahun. Sehingga saat persyaratan baru muncul, Anda tidak perlu menulis ulang semuanya dari awal. Sehingga ketika proyek tumbuh 100 kali, tetap “didukung”. Sehingga ketika mereka menambahkan programmer ke dalam tim, mereka tidak menggigit Anda karena gaya yang aneh.
Ini adalah transisi yang sangat sulit. Banyak programmer tidak pernah melakukannya: mereka menjadi pengembang "satu program", atau mereka selalu menulis proyek tidak lebih dari 200 baris. Ini bukan level pro.
Untuk belajar, Anda perlu memecahkan masalah besar dalam tim dan membaca buku yang tepat secara paralel. Misalnya, "Kode Bersih" Robert Martin .
“Tugas besar” adalah layanan nyata yang digunakan oleh orang-orang, di mana tim terdiri dari minimal 2 orang dan terdiri dari ribuan baris kode. Proyek semacam itu membentuk spesialis yang percaya diri.
Tahap ketiga adalah "penguasaan". Ini melibatkan penguasaan kerangka kerja tertentu dalam tumpukan teknologi yang dipilih. Anda harus belajar memecahkan masalah modern nyata pada tingkat tinggi.
Sebuah buku yang lebih keras dan lebih berguna adalah Martin Fowler's Enterprise Application Patterns . Ini juga perlu dibaca, setelah sekitar satu setengah tahun menggeluti profesi tersebut.
Untuk apa? Bisakah saya menyelesaikan kursus 3 bulan "pengembang web"?
Anehnya, sering kali "semacam programmer" datang ke wawancara. Mereka memiliki kursus, banyak pekerjaan, portofolio dengan situs web yang indah di bawah ikat pinggang mereka (cara yang aneh, seolah-olah kami sedang mencari perancang web).
Pada saat yang sama, orang sering tidak mengetahui jawaban dari pertanyaan paling sederhana seperti "apa itu cookie" atau "bagaimana cara memuat pesan di feed VKontakte", mereka bahkan tidak memiliki versi.
Seorang programmer yang baik mengetahui teori tersebut dan menerapkannya dalam praktik, sepanjang waktu memikirkan "bagaimana melakukannya dengan benar". The "sumsum tulang belakang" dan "menyalin potongan kode dari Google" tidak akan membawa Anda jauh. Anda membutuhkan dasar dan latihan.
Bagaimana cara mendapatkan "basis" ini? Dimana tempat yang tepat untuk belajar? Ada dua cara. Yang pertama adalah 4-5 tahun di universitas yang bagus. Yang kedua adalah beberapa tahun belajar dan berlatih sendiri secara gigih. Anda bisa menjadi programmer yang kuat tanpa pendidikan khusus jika Anda memiliki kepala yang cerdas, hati yang terbuka, dan Anda sendiri siap untuk bekerja keras.
Kursus singkat berguna untuk mendapatkan pengetahuan dasar dan memahami “tempat untuk menggali diri sendiri”. Mereka tidak akan menjadi profesional.
Matriks kompetensi. Magang - Junior - Tengah - Senior - Arsitek
Kami percaya bahwa matriks kami adalah jawaban untuk pertanyaan "bagaimana beralih dari pemula menjadi guru pengembangan web".
Di dunia kita, pengembang berurusan terutama dengan tugas-tugas backend, tetapi dia tidak perlu takut dengan front-end dan administrasi (ada spesialis sempit untuk tugas-tugas jahat).
Matriks lengkap dengan contoh pertanyaan sertifikasi tersedia di sini.
Ini adalah tabel yang dibagi menjadi kelas (magang, junior, menengah, senior). Setiap kelas berisi seperangkat kompetensi unik. Pertanyaan dikelompokkan berdasarkan bidang keahlian (PHP, SQL, Frontend, teknologi web secara umum, dan manajemen server)
Trainee
Pada awalnya, peserta pelatihan harus mampu:
- dengan percaya diri membedakan cookie dari sesi;
- memahami operasi tertentu yang sedang berlangsung di server atau di browser;
- untuk menulis tugas manajemen data sederhana dalam PHP tanpa kerangka kerja server. Misalnya, "memelihara database grup dan siswa dengan mengedit, menghapus, membuat, dan menampilkan";
- dengan sopan mengatur hasil pekerjaan Anda.
Peserta pelatihan sedang belajar. Tugas utamanya adalah mendapatkan pengetahuan, memecahkan masalah di bawah pengawasan, dan mendapatkan hasil besar.
Hampir setiap peserta pelatihan menghapus pangkalan, melewatkan jendela, atau menyelesaikan kembali masalah yang sudah lama ditutup. Tentu saja, tidak ada salahnya proyek tempur.
Kesalahan adalah bagian normal dari pembelajaran.
Muda
Junior mampu menyelesaikan masalah sendiri. Dia sering berkonsultasi dengan orang yang lebih tua, tetapi dia sama sekali tidak menanyakan pertanyaan magang.
Apa yang secara praktis bisa dilakukan Junior pada awalnya:
- menulis ulang (dan itu berarti memahami sepenuhnya) otorisasi di situs;
- dengan percaya diri mengedit pengaturan dan kode kerangka kerja direktori, umpan berita, formulir;
- mengumpulkan antarmuka manajemen data sederhana dan seluruh situs pada kerangka kerja;
- tulis integrasi sederhana dengan API eksternal.
Tengah
Middle adalah seorang spesialis yang mampu memecahkan sendiri masalah khas industri apa pun.
Praktis apa yang harus bisa dilakukan Middle di awal:
- bekerja dengan otorisasi eksternal (masuk melalui penyedia eksternal atau jadikan kode Anda sebagai penyedia otorisasi);
- dengan percaya diri memprogram antarmuka toko online publik, marketplace atau portal intranet (tergantung pada spesifikasinya);
- mengumpulkan antarmuka dan bagian manajemen data yang kompleks pada kerangka kerja;
- tulis integrasi kompleks dengan API eksternal, terapkan layanan web.
Senior
Senior mengetahui "tumpukannya" secara menyeluruh, siap belajar dan menerapkan teknologi baru, dan bekerja sebagai mentor.
Misalnya, apa yang Senior sendiri harus tahu dan dapat lakukan di blok "Bekerja dengan server dan Linux".
- Bangun sistem peluncuran atipikal
- Bekerja dengan layanan mikro.
- Organisasi pengujian beban
- Mengonfigurasi integrasi berkelanjutan
- Sinkronisasi File dan Replikasi Data
- Bangun kluster toleran dan beban tinggi dengan dan tanpa Bitrix Framework.
- ELK / sistem logging dan analitik lainnya
- Server antrian Gearman / RabbitMQ dan membangun sistem terdistribusi
Biasanya, Senior berperan sebagai pemimpin teknis tim pengembangan.
Arsitek
Seorang arsitek adalah tingkat perkembangan berikutnya untuk seorang spesialis, ketika dia memikirkan arsitektur proyek besar dan memimpin implementasinya. Dia bukan hanya teknis, tetapi juga manajer proyek.
Spesialis semacam itu memainkan peran kunci dalam proyek-proyek yang kompleks secara teknis dan organisasi.
Kualitas seorang arsitek menentukan kemampuan suatu proyek untuk diselesaikan tepat waktu dan berkembang selama bertahun-tahun berturut-turut.
Manajemen pengembangan programer
Setiap bulan, dengan setiap programmer, kami secara individu melakukan "pertemuan perencanaan pengembangan" dan percakapan tentang topik lain tentang pekerjaan. Kepala departemen, pimpinan teknis dan / atau mentor dilibatkan.
Dalam pertemuan tersebut, kami bersama-sama menetapkan prioritas pengembangan - lulus ujian kompetensi laboratorium atau lisan.
Bagaimana pengaturan pemeriksaan level (sertifikasi)?
Apa itu pengesahan? Ini adalah prosedur untuk memastikan kualifikasi seorang programmer. Semua programmer melewatinya. Sertifikasi meliputi pekerjaan laboratorium dan ujian lisan.
Sebagai hasil dari sertifikasi, “Ya” muncul di matriks kompetensi berlawanan dengan kompetensi yang dikonfirmasi. Ini meningkatkan nilai, misalnya, "Trainee-54%" → "Junior-27%".
Bagaimana sertifikasi berjalan?
Sertifikasi tersebut meliputi teori (ujian lisan) dan praktek (kerja laboratorium). Tujuannya adalah untuk "menutup" beberapa kompetensi dalam matriks, mengonfirmasi level, mendapatkan tugas baru, dan meningkatkan gaji.
Latihan praktik hanya bisa dilakukan dengan benar jika Anda mempelajari dan memahami teori. Menyontek dan menipu tidak diterima, dan mentor tidak akan melewatkan hack tersebut.
Banyak blok matriks kompetensi ditutup dengan praktik dan tidak ada pertanyaan teoretis di dalamnya.
Teori. Ujian lisan
Kompetensi yang tidak tercakup dalam pekerjaan laboratorium harus dikonfirmasikan dalam ujian lisan.
Untuk setiap kompetensi, kami menanyakan sekitar 5 pertanyaan. Dengan cara yang bersahabat, Anda perlu menjawab semuanya atau hampir semuanya. Durasi ujian lisan tergantung pada levelnya, biasanya 1-2 jam.
Praktek. Pekerjaan laboratorium
Pekerjaan laboratorium mencakup beberapa kompetensi sekaligus. Setelah menyelesaikan pekerjaan laboratorium, kompetensi tersebut dihitung sebagai dikonfirmasi dan tidak termasuk dalam ujian lisan.
Pekerjaan laboratorium diakhiri dengan laporan. Laporan tersebut mungkin termasuk demo, review kode, pertanyaan lisan. Set pemeriksaan tergantung pada laboratorium itu sendiri.
Perkirakan kata-kata tugas
Kami telah mengembangkan sekitar 20 tugas (biasanya kami menyebutnya "pekerjaan laboratorium" untuk siswa). Beberapa - kami akan menerbitkan.
Berikut adalah contoh tugas sederhana.
Tugas 2a. "Web dasar". Mari terapkan CRUD dalam PHP murni.
Kompetensi:
- PHP: Otentikasi dan Otorisasi Situs
- PHP: Memproses Formulir Umpan Balik dengan Penyimpanan dan Validasi Data
- Ujung depan: Membuat formulir html
- Depan: Sintaks dan Selektor CSS, Memahami Bobot Selektor
- SQL: Dasar-dasar Mysql
- SQL: Tipe Data
- PHP: Sintaks Bahasa PHP
Intinya:
- buat repositori di bitbucket dan jalankan di dalamnya;
- segera buat permintaan cabang dan tarik;
- instal plugin Statistik di PhpStorm, jumlah baris maksimum untuk keseluruhan proyek adalah 1500:
- membuat tabel yang diperlukan melalui PhpStorm dan mengisinya dengan data;
- membuat halaman otentikasi;
- membuat halaman dengan formulir umpan balik, yang memiliki: bidang teks, bidang teks multi-baris, tombol radio, kotak centang, daftar drop-down, tombol reset formulir, tombol pengiriman formulir;
- formulir umpan balik hanya tersedia untuk pengguna yang berwenang, kriteria penerimaannya adalah Anda masuk ke sistem;
- semuanya ditata dengan indah, tunjukkan contoh penggunaan tipe dasar selektor: id, class, atribut, pseudo-class, pseudo-element;
- kedua formulir harus diproses tanpa JS;
- periksa melalui PhpStorm bahwa data sedang ditambahkan ke tabel.
Memeriksa:
- kualitas dekomposisi php, js, css diperiksa;
- kemampuan untuk mengalokasikan tanggung jawab dan menetapkan ketergantungan yang benar antara komponen MVC / ECB;
- keamanan (akses);
- keamanan (XSS, injeksi SQL);
- kebenaran pengalihan;
- keseragaman gaya pengkodean.
Pengembangan tugas
Tugas 2b. Pengembangan antarmuka CRUD di PHP.
Kompetensi:
- 3 cara untuk menghubungkan skrip
- Membuat formulir html
- Sintaks dan Selektor CSS, Memahami Bobot Selektor
- JS: operator, fungsi
- Debugging JS menggunakan konsol browser
- Dasar-dasar Mysql
- Tipe data
Intinya - kami terus mengerjakan situs dari tugas 2a:
- buat panel admin mini:
- daftar formulir umpan balik yang dikirimkan;
- daftar harus diurutkan berdasarkan tanggal penyerahan, yang baru - pertama;
- daftar dapat "diperbarui", ini dilakukan dengan menggunakan AJAX;
- tip: untuk pengujian interaktif query database, gunakan konsol database di PhpStorm;
- formulir yang dikirimkan dapat dihapus dari area admin, semua di AJAX;
- jadi peragakan semua cara untuk menghubungkan JS;
- data yang dikirimkan dapat diedit (menggunakan formulir yang sudah dikembangkan, tanpa AJAX);
- jQuery bisa digunakan.
- buka alat pengembang (sebaiknya Firefox):
- temukan sumber permintaan dari log permintaan;
- menetapkan breakpoint, memicu eksekusi kode, memeriksa eksekusi kode langkah demi langkah;
- selama eksekusi langkah demi langkah, lihat nilai variabel melalui inspektur yang sesuai;
- tambahkan jam tangan;
- gunakan konsol untuk mengakses variabel dalam cakupan saat ini.
Memeriksa:
- kualitas dekomposisi php, js, css diperiksa;
- kemampuan untuk menyoroti dan menetapkan ketergantungan yang benar antara komponen MVC / ECB;
- keamanan (akses);
- keamanan (XSS, injeksi SQL);
- keseragaman gaya pengkodean;
- untuk mendemonstrasikan semua poin tentang penggunaan alat pengembang.
Berikut adalah contoh dari "tingkat kesulitan sedang"
Tugas 10.
Kompetensi web scraping :
- Ekspresi reguler
- Permintaan HTTP dari server, cURL
- TODO: menulis utilitas konsol (dan skrip satu kali) berdasarkan basis kode Bitrix Framework
- TODO: tambahkan CRON
Intinya:
- Analisis situs, pikirkan struktur data yang sesuai untuk pemrosesan otomatis
- Parse situs menjadi struktur ini
- Desain sebagai skrip CLI
- Pengaturan untuk menerapkan kemampuan untuk mengurai tidak semuanya, tetapi hanya apa yang dibutuhkan pengguna
Memeriksa:
- kebenaran lingkungan CLI
- dekomposisi regex
- efektivitas biaya berdasarkan permintaan
- pemrosesan kesalahan
- kemungkinan penguraian paralel beberapa objek sekaligus
- Bekerja dalam mode konsol dan interaktif
- * bekerja dalam mode layanan eksternal yang dapat diakses melalui HTTP, dengan dukungan antrian
Melihat dan mengunduh matriks kompetensi - 2020
Saya yakin bahwa inilah cara, selangkah demi selangkah, dengan mentor dan tinjauan kode yang konstan, melalui rantai sertifikasi, pengembang yang tepat mengembangkan "dari peserta pelatihan hingga arsitek".
Berlian terbentuk di bawah tekanan.