Mengapakah ia berguna untuk mencipta semula roda?

Mengapakah ia berguna untuk mencipta semula roda?

Pada hari lain saya menemu bual pembangun JavaScript yang memohon jawatan kanan. Rakan sekerja, yang turut hadir pada temu duga, meminta calon menulis fungsi yang akan membuat permintaan HTTP dan, jika tidak berjaya, cuba semula beberapa kali.

Dia menulis kod itu terus pada papan, jadi cukup untuk melukis sesuatu yang lebih kurang. Jika dia hanya menunjukkan bahawa dia memahami dengan baik apa yang berlaku, kami akan cukup berpuas hati. Tetapi, malangnya, dia tidak dapat mencari penyelesaian yang berjaya. Kemudian kami, memikirkannya dengan penuh keterujaan, memutuskan untuk memudahkan tugasan itu sedikit dan memintanya menukar fungsi dengan panggilan balik kepada fungsi yang dibina berdasarkan janji.

Tapi sayangnya. Ya, jelas sekali dia pernah menemui kod sedemikian sebelum ini. Dia tahu secara umum bagaimana semuanya berfungsi di sana. Apa yang kita perlukan ialah lakaran penyelesaian yang menunjukkan pemahaman konsep. Namun, kod yang calon tulis di papan tulis adalah karut. Dia mempunyai idea yang sangat kabur tentang janji-janji yang ada dalam JavaScript dan tidak dapat menjelaskan mengapa ia diperlukan. Bagi seorang junior ini boleh dimaafkan, tetapi dia tidak lagi sesuai dengan jawatan senior. Bagaimanakah pembangun ini boleh membetulkan pepijat dalam rangkaian janji yang kompleks dan menerangkan kepada orang lain apa sebenarnya yang dia lakukan?

Pembangun menganggap kod siap sedia terbukti dengan sendirinya

Semasa proses pembangunan, kami sentiasa menghadapi bahan yang boleh dihasilkan semula. Kami memindahkan serpihan kod supaya kami tidak perlu menulis semula setiap kali. Oleh itu, dengan menumpukan semua perhatian kami pada bahagian utama, kami melihat kod siap yang kami gunakan sebagai sesuatu yang jelas - kami hanya menganggap bahawa semuanya akan berfungsi sebagaimana mestinya.

Dan biasanya ia berfungsi, tetapi apabila keadaan menjadi rumit, memahami mekanik lebih daripada membuahkan hasil.

Oleh itu, calon kami untuk jawatan pemaju kanan menganggap objek janji adalah jelas. Dia mungkin mempunyai idea tentang cara menangani mereka apabila ia berlaku di suatu tempat dalam kod orang lain, tetapi dia tidak memahami prinsip umum dan tidak dapat mengulanginya sendiri semasa temu duga. Mungkin dia mengingati serpihan itu dengan hati - ia tidak begitu sukar:

return new Promise((resolve, reject) => {
  functionWithCallback((err, result) => {
   return err ? reject(err) : resolve(result);
  });
});

Saya juga melakukannya - dan kita mungkin semua pernah melakukannya pada satu ketika. Mereka hanya menghafal sekeping kod supaya mereka kemudian boleh menggunakannya dalam kerja mereka, sementara hanya mempunyai idea umum tentang bagaimana semuanya berfungsi di sana. Tetapi jika pembangun benar-benar memahami konsep itu, dia tidak perlu mengingati apa-apa - dia hanya akan tahu cara melakukannya, dan dengan mudah akan mengeluarkan semula semua yang dia perlukan dalam kod.

Kembali ke akar umbi

Pada tahun 2012, apabila penguasaan rangka kerja bahagian hadapan belum ditubuhkan, jQuery menguasai dunia, dan saya membaca buku itu Rahsia Ninja JavaScript, dikarang oleh John Resig, pencipta jQuery.

Buku ini mengajar pembaca cara mencipta jQuery mereka sendiri dari awal dan memberikan gambaran unik tentang proses pemikiran yang membawa kepada penciptaan perpustakaan. Dalam beberapa tahun kebelakangan ini, jQuery telah kehilangan popularitinya dahulu, tetapi saya masih mengesyorkan buku itu. Apa yang paling menarik perhatian saya tentang dia adalah perasaan berterusan bahawa saya boleh memikirkan semua ini sendiri. Langkah-langkah yang diterangkan oleh pengarang kelihatan begitu logik, begitu jelas sehingga saya mula berfikir bahawa saya boleh membuat jQuery dengan mudah jika saya melakukannya.

Sudah tentu, pada hakikatnya saya tidak akan dapat melakukan apa-apa seperti ini - saya akan memutuskan bahawa ia sangat sukar. Penyelesaian saya sendiri akan kelihatan terlalu mudah dan naif untuk berfungsi, dan saya akan berputus asa. Saya akan mengklasifikasikan jQuery sebagai perkara yang jelas, dalam operasi yang betul yang anda hanya perlu percaya secara membuta tuli. Selepas itu, saya tidak akan membuang masa untuk mendalami mekanik perpustakaan ini, tetapi hanya akan menggunakannya sebagai sejenis kotak hitam.

Tetapi membaca buku ini menjadikan saya orang yang berbeza. Saya mula membaca kod sumber dan mendapati bahawa pelaksanaan banyak penyelesaian sebenarnya sangat telus, malah jelas. Tidak, sudah tentu, memikirkan sesuatu seperti ini sendiri adalah cerita yang berbeza. Tetapi ia sedang mengkaji kod orang lain dan menghasilkan semula penyelesaian sedia ada yang membantu kami menghasilkan sesuatu yang tersendiri.

Inspirasi yang anda peroleh dan corak yang anda mula perasan akan mengubah anda sebagai pembangun. Anda akan mendapati bahawa perpustakaan indah yang anda sentiasa gunakan dan yang anda biasa anggap sebagai artifak ajaib tidak berfungsi pada sihir sama sekali, tetapi hanya menyelesaikan masalah secara singkat dan bijak.

Kadang-kadang anda perlu meneliti kod itu, menganalisisnya langkah demi langkah, tetapi ini adalah cara, bergerak dalam langkah-langkah kecil dan konsisten, anda boleh mengulangi laluan pengarang kepada penyelesaian. Ini akan membolehkan anda menyelam lebih mendalam ke dalam proses pengekodan dan memberi anda lebih keyakinan dalam menghasilkan penyelesaian anda sendiri.

Apabila saya mula bekerja dengan janji, ia kelihatan seperti sihir tulen. Kemudian saya mendapati bahawa ia adalah berdasarkan panggilan balik yang sama, dan dunia pengaturcaraan saya terbalik. Jadi corak, yang tujuannya adalah untuk menyelamatkan kita daripada panggilan balik, itu sendiri dilaksanakan menggunakan panggilan balik?!

Ini membantu saya melihat perkara itu dengan pandangan yang berbeza dan menyedari bahawa ini bukan sekeping kod yang tidak masuk akal di hadapan saya, kerumitan yang melarang yang tidak akan saya fahami dalam hidup saya. Ini hanyalah corak yang boleh difahami tanpa masalah dengan rasa ingin tahu yang sewajarnya dan rendaman yang mendalam. Beginilah cara orang belajar kod dan berkembang sebagai pembangun.

Cipta semula roda ini

Jadi teruskan dan cipta semula roda: tulis kod pengikat data anda sendiri, buat janji tempatan, atau buat penyelesaian pengurusan negeri anda sendiri.
Tidak kira tiada siapa yang akan menggunakan semua ini - tetapi kini anda tahu cara melakukannya. Dan jika anda mempunyai peluang untuk menggunakan perkembangan sedemikian dalam projek anda sendiri, maka itu secara amnya bagus. Anda akan dapat mengembangkannya dan mempelajari sesuatu yang lain.

Perkara di sini bukan untuk menghantar kod anda kepada pengeluaran, tetapi untuk mempelajari sesuatu yang baharu. Menulis pelaksanaan anda sendiri bagi penyelesaian sedia ada ialah cara terbaik untuk belajar daripada pengaturcara terbaik dan dengan itu mengasah kemahiran anda.

Sumber: www.habr.com

Tambah komen