Hal-hal yang tidak saya ketahui pada tahun 2018

Halo, Habr! Saya mempersembahkan untuk Anda terjemahan dari artikel "Things I Don't Know on 2018" oleh Dan Abramov .


Orang-orang biasanya berpikir bahwa saya tahu banyak, tetapi kenyataannya tidak demikian. Itu tidak terlalu buruk dan saya tidak mengeluh sama sekali. (Sebagian kecil orang sering menderita kepercayaan yang terbentuk sebelumnya, meskipun fakta bahwa mereka layak mendapatkan lebih, yang mengerikan).


Dalam posting ini saya akan menunjukkan daftar topik pemrograman yang tidak lengkap yang oleh orang salah mengira bahwa saya tahu. Saya tidak mengatakan bahwa Anda tidak perlu mempelajarinya atau saya tidak tahu hal-hal berguna lainnya. Tetapi karena saya belum menempatkan diri saya pada posisi yang rentan, saya bisa jujur โ€‹โ€‹tentang hal ini.


Mengapa saya pikir ini penting


Pertama, sering kali ada harapan yang tidak realistis bahwa seorang insinyur yang berpengalaman tahu setiap teknologi di bidangnya. Pernahkah Anda melihat "peta pembelajaran", yang terdiri dari ratusan perpustakaan dan alat? Ini berguna, tapi menakutkan.


Selain itu, tidak peduli seberapa berpengalaman Anda, Anda masih dapat menemukan diri Anda beralih di antara rasa kemampuan, ketidakmampuan ("Sindrom Penipu") dan kepercayaan diri ("Efek Dunning - Krueger"). Itu tergantung pada lingkungan Anda, pekerjaan, kepribadian, kolega, kondisi mental, waktu, dan sebagainya.


Pengembang berpengalaman terkadang berbicara tentang rasa tidak aman mereka untuk menghibur pemula. Tetapi ada perbedaan besar antara ahli bedah berpengalaman yang masih gugup dan seorang siswa yang memegang pisau bedah untuk pertama kalinya!


Mendengar bahwa "kita semua adalah pengembang pemula" dapat mengecewakan dan terdengar seperti percakapan kosong dengan siswa yang dihadapkan dengan kesenjangan pengetahuan yang sebenarnya. Pengakuan dari praktisi yang baik hati seperti saya yang tidak bisa mengatasi ini.


Namun, bahkan insinyur yang berpengalaman pun memiliki banyak kesenjangan pengetahuan. Posting ini tentang saya, dan saya mendesak mereka yang mampu membayar kelemahan itu untuk membagikan milik mereka. Tapi jangan sampai mengabaikan pengalaman kami saat ini.


Kami dapat mengenali kesenjangan pengetahuan kami, kami mungkin atau mungkin tidak merasa seperti penipu, namun kami memiliki pengalaman yang sangat berharga untuk mengatakan bahwa bertahun-tahun kerja keras membutuhkan pengembangan.


Dengan ini saya tidak bertanggung jawab, berikut beberapa hal yang tidak saya ketahui:


  • Perintah Unix dan Bash Saya bisa melakukan ls dan cd , tetapi juga memata-matai yang lain. Saya mengerti konsep perpipaan, tetapi hanya menggunakannya dalam kasus-kasus sederhana. Saya tidak tahu bagaimana cara menggunakan xargs untuk membuat rantai kompleks atau bagaimana menyusun dan mengarahkan berbagai aliran keluaran. Saya tidak pernah mempelajari Bash dengan benar, jadi saya hanya bisa menulis skrip shell yang sangat sederhana (dan sering bermasalah).
  • Bahasa tingkat rendah. Saya mengerti bahwa Assembly memungkinkan Anda untuk menyimpan sesuatu dalam memori dan menavigasi kode, tetapi hanya itu saja. Saya menulis beberapa baris dalam C dan saya mengerti apa itu pointer, tetapi saya tidak tahu cara menggunakan malloc atau metode lain dalam manajemen memori manual. Tidak pernah macam-macam dengan Rust.
  • Tumpukan jaringan. Saya tahu bahwa komputer memiliki alamat IP, dan DNS adalah cara kami bekerja dengan nama host. Saya tahu bahwa ada protokol tingkat rendah seperti TCP / IP untuk pertukaran paket yang (mungkin?) Menjamin integritas. Itu saja - saya tidak mengerti detailnya.
  • Wadah Saya tidak tahu cara menggunakan Docker atau Kubernetes. (Apakah mereka terkait?) Saya punya ide yang tidak jelas bahwa mereka mengizinkan saya untuk menggunakan mesin virtual yang terpisah. Kedengarannya keren, tapi saya belum mencobanya.
  • Tanpa server. Juga terdengar keren. Belum pernah mencobanya. Saya tidak punya ide yang jelas tentang bagaimana model ini mengubah pemrograman backend (jika tidak sama sekali).
  • Layanan microser Jika saya mengerti dengan benar, ini berarti bahwa "banyak titik akhir API berkomunikasi satu sama lain." Saya tidak tahu apa manfaat atau kerugian praktis dari pendekatan ini, karena saya tidak bekerja dengannya.
  • Python Selalu buruk bagi saya untuk mengingat ini - saya telah bekerja dengan Python selama beberapa tahun, dan saya tidak pernah repot-repot mempelajarinya. Ada banyak hal, seperti perilaku impor, yang bagi saya adalah hutan gelap.
  • Node JS. Saya mengerti cara memulai Node, menggunakan beberapa API, misalnya fs, untuk membangun alat, dan saya bisa mengonfigurasi Express. Tetapi saya tidak pernah berkomunikasi melalui Node dengan database dan saya tidak tahu bagaimana menulis backend di dalamnya. Saya juga tidak terbiasa dengan kerangka kerja Bereaksi seperti Berikutnya, selanjutnya "halo dunia".
  • Platform asli. Saya mencoba belajar Objective-C di beberapa titik, tetapi itu tidak membantu saya. Saya juga tidak mengajar bahasa Swift. Hal yang sama dengan Java. (Saya mungkin bisa menguasainya sejak saya bekerja dengan C #.)
  • Algoritma Maksimum yang akan Anda dapatkan dari saya adalah bubble sort dan mungkin quicksort at best. Saya mungkin dapat melakukan tugas grafik traversal sederhana jika mereka terkait dengan masalah praktis tertentu. Saya memahami notasi O (n), tetapi pemahaman saya tidak jauh lebih dalam dari โ€œjangan lompati loopโ€.
  • Bahasa fungsional. Jika Anda tidak menghitung JavaScript, maka saya tidak dapat berbicara bahasa apa pun yang secara tradisional berfungsi. (Saya hanya bebas dalam C # dan JavaScript - dan sudah lupa C #.) Saya hampir tidak bisa membaca Lisp-terinspirasi (seperti Clojure), Haskell-terinspirasi (seperti Elm), atau kode yang terinspirasi-ML (seperti OCaml).
  • Terminologi fungsional. Memetakan dan mengurangi Saya tahu berapa banyak yang dibutuhkan. Saya tidak tahu monoids, functors, dll ... Saya tahu apa itu monad, tapi mungkin ini hanya ilusi.
  • CSS modern. Saya tidak tahu Flexbox atau Grid. Mengapung adalah segalanya bagiku.
  • Metodologi CSS. Saya menggunakan BEM (artinya sebagai bagian dari CSS, bukan BEM asli), tapi hanya itu yang saya tahu. Saya belum mencoba OOCSS atau metodologi lainnya.
  • SCSS / Sass. Saya tidak pernah mulai mempelajarinya.
  • CORS. Saya takut akan kesalahan ini! Saya tahu bahwa saya perlu menyesuaikan header untuk memperbaikinya, tetapi di masa lalu saya menghabiskan banyak waktu untuk ini.
  • HTTPS / SSL. Jangan pernah mengaturnya. Saya tidak tahu bagaimana ini bekerja, kecuali untuk gagasan kunci pribadi dan publik.
  • GraphQL. Saya dapat membaca kueri, tetapi saya benar-benar tidak tahu bagaimana mengekspresikan sesuatu dengan node dan edge, kapan harus menggunakan fragmen dan bagaimana pagination bekerja di sana.
  • Soket Dalam pemahaman saya, mereka memungkinkan komputer untuk berkomunikasi satu sama lain di luar model permintaan / respons, tetapi hanya itu yang saya tahu.
  • Streaming. Selain Rx Observables, saya belum bekerja dengan thread yang sangat dekat. Saya menggunakan thread Node lama sekali atau dua kali, tetapi selalu mendapat kesalahan pemrosesan.
  • Elektron Belum pernah mencobanya.
  • TypeScript Saya mengerti konsep tipe dan bisa membaca anotasi, tetapi saya tidak pernah menulisnya. Saya mencoba beberapa kali, tetapi mengalami kesulitan.
  • Penempatan dan devops. Saya dapat mengirim beberapa file melalui FTP atau membunuh beberapa proses, tetapi ini adalah batas keahlian saya di devops.
  • Grafik Baik itu kanvas, SVG, WebGL atau grafik level rendah, saya tidak pandai saat itu. Saya mengerti ide umum, tetapi saya tidak perlu belajar hal-hal sederhana.

Tentu saja, ini bukan daftar lengkap. Ada banyak hal yang tidak saya ketahui


Ini mungkin aneh untuk dibahas. Ini bahkan tidak layak ditulis. Apakah saya menunjukkan ketidaktahuan saya? Kesimpulan saya untuk posting ini adalah sebagai berikut:


  • Bahkan pengembang favorit Anda mungkin tidak tahu banyak hal yang Anda ketahui.
  • Terlepas dari tingkat pengetahuan Anda, kepercayaan diri Anda bisa sangat berbeda.
  • Pengembang berpengalaman sangat kompeten, meskipun ada kesenjangan pengetahuan.

Saya tahu tentang kesenjangan pengetahuan saya (setidaknya beberapa dari mereka). Saya dapat mengisinya nanti jika saya tertarik atau membutuhkannya untuk proyek tersebut.


Ini tidak meremehkan pengetahuan dan pengalaman saya. Ada banyak hal yang bisa saya lakukan dengan baik. Misalnya, mempelajari teknologi saat saya membutuhkannya.

Source: https://habr.com/ru/post/id446088/


All Articles