Haruskah pengembang web memahami TCP / IP dan bagaimana router mengelola permintaan? [Tutup]


15

Saya melakukan wawancara kerja hari ini untuk posisi Pekerjaan sebagai pengembang di situs penting. Mereka mengajukan berton-ton pertanyaan terkait bahasa pemrograman, yang berhasil saya jawab tanpa masalah, tetapi kemudian mereka mulai mengajukan pertanyaan tentang bagaimana permintaan TCP / IP dibuat begitu saya mengajukan permintaan pada PC saya ke server web. Saya memang menerima konten itu sebagai siswa, tetapi saya tidak mengingatnya dengan baik, karena saya bekerja sebagian besar dalam pengembangan web, pertanyaan saya adalah:

Sebagai pengembang perangkat lunak, terutama bekerja pada aplikasi web, apakah saya perlu memiliki pengetahuan luas tentang TCP / IP dan bagaimana router mengelola permintaan atau itu hanya pengetahuan kotak hitam bagi saya?


Apakah mereka ingin tahu lebih banyak tentang bagaimana permintaan TCP / IP dibuat pada tingkat konseptual, atau apakah mereka ingin mengetahui secara spesifik? TCP / IP digunakan di bawah tenda setiap kali kita berkomunikasi di jaringan. Saya pribadi percaya bahwa sangat penting untuk memahami bagaimana berbagai hal bekerja di bawah tenda setidaknya pada tingkat konseptual. Ini akan membantu Anda menemukan masalah, dan seringkali bahkan merancang solusi yang lebih baik.
Parag

Jawaban:


25

Jenis pengetahuan ini sangat berguna sangat jarang.

Misalnya, ketika tim ops Anda mengatur situs produksi Anda di belakang router / firewall / load balancer yang diatur sedikit berbeda dari yang ada di lingkungan pengujian Anda dan Anda mendapatkan masalah yang berkaitan dengan itu, itu akan membantu Anda untuk mengetahui bahwa cepat dan berbicara dengan ops, daripada menggali beberapa keanehan dalam kode. Ini akan membantu Anda lebih baik lagi untuk dapat memahami bahasa mereka ketika Anda memiliki percakapan itu.

Tapi saya benar-benar tidak mengerti mengapa orang menaruh begitu banyak hal dalam wawancara, terutama ketika itu untuk seorang programmer junior. Ini tentu saja bukan pengetahuan yang penting bagi semua orang di tim dan Anda dapat diajar.


2
Good point re junior programmer, tapi saya tidak yakin apa posisi level @forgotmynick melamar :-)
Dean Harding

@Dean - Poin wajar. Saya cenderung berasumsi bahwa orang-orang yang merujuk ketika mereka masih mahasiswa belum berusia 5 tahun ke atas. Tapi Anda benar, itu tidak selalu terjadi.
pdr

1
Setidaknya mengetahui apa yang terjadi ketika router secara diam-diam menjatuhkan koneksi, sangat bagus dalam pengaturan produksi. Digigit oleh itu lebih dari sekali.

@ pdr - Saya tidak setuju. Jenis pengetahuan ini berguna ketika Anda ingin tahu mengapa hal-hal begitu lama atau mengapa pembaruan yang Anda buat ke situs Anda tidak muncul di browser pengguna Anda. Siapa pun dengan sedikit pengetahuan jaringan akan tahu jawabannya: caching. Secara pribadi, sebagai konsultan, saya telah membuat perbaikan beban bodoh * sederhana (dan sangat mahal untuk perusahaan) hal-hal yang orang akan hindari jika mereka tahu hal-hal ini. Ini tidak seperti ilmu roket atau mekanika kuantum. Maksudku ayolah, tidak ada alasan untuk dev jr tidak tahu tentang ini (khususnya jika latar belakang CS).
luis.espinal

@ luis.espinal - Sejujurnya, saya tidak berpikir saya akan menyamakan caching dalam kategori yang sama sama sekali. Ini bukan masalah jaringan, itu masalah browser. Saya setuju dengan Anda bahwa caching (browser atau server) adalah sesuatu yang semua orang perlu mengerti karena itu sederhana tetapi memiliki banyak gotcha. Tapi TCP / IP?
pdr

16

Pendapat pribadi saya adalah bahwa pengembang web harus tahu cara kerja protokol tingkat rendah. Terutama HTTP, tetapi juga (setidaknya dasar-dasar) dari TCP / IP. Bergantung pada kerumitan situs Anda, Anda mungkin harus melihat jejak dump HTTP atau bahkan tcpdumplog dalam hal ini Anda membutuhkan setidaknya pengetahuan yang lewat tentang TCP / IP.

Sekarang, apakah Anda akan benar-benar harus melihat tcpdump sangat tergantung pada rincian situs Anda. Misalnya, jika Anda memiliki situs besar dengan banyak pengguna dan server yang tersebar di beberapa pusat data, membuat jumlah permintaan yang relatif besar (misalnya Ajax, terutama permintaan gaya Komet), maka tcpdumpitu mungkin sesuatu yang Anda Saya harus melihat.

Jika semua yang Anda kerjakan adalah situs intranet atau sesuatu yang cukup sederhana, maka pengetahuannya mungkin tidak begitu penting, tapi saya masih berpikir mengetahui hal-hal tingkat rendah akan selalu membantu.


3
lol ... saya tidak akan menyebut http protokol tingkat rendah
Pemdas

2
@Permdas: semuanya relatif. HTTP adalah level yang lebih tinggi dari TCP, tetapi level yang lebih rendah dari (katakanlah) SOAP.
Dean Harding

1
SOAP lebih spesifik untuk implementasi, daripada protokol. Sayangnya implementasinya begitu dekat satu sama lain, sehingga mereka menyebutnya "protokol"
kagali-san

HTTP: ya. TCP / IP: pemahaman yang belum sempurna tentang bagaimana & mengapa ia melakukan beberapa operasi tingkat yang lebih tinggi mungkin baik-baik saja. Saya ragu pengetahuan yang mendalam diperlukan (atau terlalu sering berguna) di lingkungan pengembangan web
Andy Hunt

7

Itu selalu berguna untuk memiliki pemahaman tentang bagaimana lapisan di bawah lapisan yang Anda coding berperilaku jika hanya karena itu sangat berguna ketika Anda mencoba men-debug masalah yang relatif kompleks dan Anda perlu memahami mengapa aplikasi Anda memiliki masalah kinerja yang tidak terduga pada WAN atau mengapa gagal bagi pengguna yang menggunakan NAT, dll. Ini juga bisa sangat berharga ketika Anda harus berada di ruangan yang membahas masalah dengan pengembang, admin server web, admin jaringan, dan admin database untuk dapat untuk berbicara dan memahami bahasa yang orang lain bicarakan dan untuk mengajukan pertanyaan yang cerdas. Dan semakin Anda memahami berbagai detail implementasi, semakin besar kemungkinan Anda dapat membangun situs yang dapat diukur dengan, misalnya,

Yang mengatakan, jelas ada titik pengembalian berkurang di mana belajar lebih banyak tentang beberapa abstraksi yang berjarak 6 lapis abstraksi dari kode yang Anda tulis tidak mungkin membuat Anda menjadi pengembang web yang lebih baik. Jadi itu akan tergantung sampai batas tertentu pada apa yang Anda maksud dengan "luas". Memahami dasar-dasar bagaimana router mengelola permintaan adalah sesuatu yang bisa sangat berguna tetapi memahami bagaimana router yang berbeda dapat dikonfigurasi untuk memprioritaskan berbagai jenis lalu lintas mungkin tidak terlalu berguna kecuali Anda kebetulan bekerja pada aplikasi yang mungkin diinginkan oleh admin jaringan untuk mencekik.

Tetapi bahkan jika itu tidak terlalu praktis, pengembang yang kuat cenderung ingin tahu tentang berbagai lapisan tumpukan dan cenderung belajar tentang mereka bahkan jika tidak ada manfaat yang jelas untuk melakukannya. Saya cenderung berharap bahwa seorang pengembang web yang memiliki pemahaman yang mendalam tentang bagaimana database relasional bekerja atau bagaimana jaringan bekerja akan lebih kuat daripada pengembang web yang dibatasi hanya untuk mengetahui tentang teknologi pengembangan web saja. Jelas, ini bukan korelasi yang sempurna, tetapi masuk akal untuk bertanya.


+1 untuk "Ini juga bisa sangat berharga ketika Anda harus berada di ruangan yang membahas masalah dengan pengembang, admin server web, admin jaringan, dan admin database untuk dapat berbicara dan memahami bahasa yang digunakan orang lain untuk berbicara dan untuk mengajukan pertanyaan cerdas "
Parag

5

Tergantung pada situs web yang Anda bangun. Untuk situs web kecil / menengah, pengetahuan dasar tentang TCP / IP mungkin baik-baik saja.

Jika Anda bekerja di situs web teratas (dalam hal lalu lintas), pengetahuan terperinci tentang protokol dan infrastruktur jaringan yang mendasarinya sangat penting. Ini akan memandu Anda sering dalam membuat keputusan desain yang bagus.


3

Menurut pendapat saya, Anda perlu tahu secara umum bagaimana bit-bit itu masuk dari aplikasi Anda ke server dan kembali, terutama untuk posisi pengembangan web. Tidak ada kotak hitam dalam pemrograman; semua abstraksi bocor .


2

Sebagai pengembang perangkat lunak, terutama bekerja pada aplikasi web, apakah saya perlu memiliki pengetahuan luas tentang TCP / IP dan bagaimana router mengelola permintaan atau itu hanya pengetahuan kotak hitam bagi saya?

IMO, fakta bahwa Anda adalah seorang pengembang perangkat lunak (saya berasumsi dengan latar belakang CS) harus tahu tentang hal-hal ini. Khususnya jika Anda melakukan pengembangan web. Seperti yang saya sebutkan di salah satu komentar saya, saya telah melakukan sh * load dalam biaya konsultasi hanya memperbaiki kesalahan sangat bodoh yang dilakukan oleh orang-orang yang tidak tahu tentang dasar-dasar arsitektur jaringan / Internet.

ZOMG, perubahan yang saya buat pada situs web saya tidak muncul, tlg bantuan! * ZOMG, profil orang-orang semakin banyak karena sesi sedang di-cache di suatu tempat, tlg bantuan! * ZOMG, kami memiliki konten aman untuk pengguna yang diautentikasi, tetapi orang-orang dapat mengaksesnya dengan bookmark dan layar otentikasi berdarah nevers muncul, plz teh Tolong! "

... dan seterusnya dan seterusnya ... dengan sedih ...

Ada banyak hal antara aplikasi web Anda dan browser pengguna: aplikasi Anda, NIC aplikasi Anda, router dan mungkin firewall, lalu server http Anda internal NIC, lalu server http Anda, lalu server http Anda keluar dari NIC, lalu yang lain router dan tentunya firewall. Kemudian perangkat caching, dan mungkin perangkat SSL. Kemudian keluar ke internet dengan lebih banyak router dan server caching, lalu akhirnya ke browser pengguna Anda (dan cache internal.)

Jutaan hal bisa salah, dan jika Anda tidak memiliki sedikit pengetahuan tentang jaringan, protokol jaringan, sistem operasi / sysadmin, dan arsitektur internet, Anda akan bingung dan pada belas kasihan departemen OP TI Anda (karena sebagian besar pengembang tidak memiliki akses ke infrastruktur atau tahu ke mana harus mencari ketika memecahkan masalah). Paling buruk, itu akan membuat Anda pengembang web yang benar-benar jelek.

Aspek pemrograman pengembangan web hanya itu, satu aspek. Eksekusi yang sukses terletak tepat di atas keterampilan lain (khususnya jaringan dan administrasi sistem) yang tidak dapat diterima begitu saja atau didelegasikan secara membabi buta untuk operasi TI. Itu tidak berarti bahwa Anda harus bertanggung jawab atas pemecahan masalah jaringan / OS, tetapi

Sebuah. Anda harus tahu apa yang salah di tingkat jaringan / OS sehingga Anda dapat bekerja sama dan membimbing OPS TI yang tidak pernah memiliki pengetahuan intim tentang aplikasi Anda. b. Pengetahuan tersebut memungkinkan Anda untuk merekayasa sistem Anda sehingga terhindar dari, atau setidaknya memperbaiki dan dengan anggun polisi dengan kesalahan tersebut.

Pemrograman hanyalah salah satu aspek dari rekayasa dan pengembangan. Ini tidak bisa menjadi keterampilan utama Anda, dan benar-benar berhasil dalam jangka panjang dalam pengembangan perusahaan pada umumnya, dan dalam pengembangan web pada khususnya, ini adalah hal-hal yang perlu Anda ketahui. Dan jujur, ini adalah hal-hal yang seharusnya dipelajari (sangat tegas) baik di sekolah atau melalui belajar mandiri sebelum lulus (atau segera setelah memasuki pasar kerja.)

Semoga berhasil.


1

Penting untuk memahami TCP / IP dan bagaimana router mengelola permintaan. Tetapi Anda tidak tahu perlu pengetahuan yang luas tentang hal itu di sebuah wawancara. Sedikit yang sebelumnya diungkapkan. Kalau tidak, kalian berdua membuang-buang waktu. Kedengarannya seperti jebakan.

Tetapi untuk peran Arsitek, saya sangat percaya bahwa pengetahuan ini penting dalam hal apa pun. Lelaki itu akan memberikan solusi yang dapat memanfaatkannya dengan menggunakan atau bahkan mereplikasi arsitektur dalam solusi kustom. Selamat berakhir pekan bersama Tanenbaum Networks dan santai saja !!


1

Ini pertanyaan yang sulit. Ya, saya pikir setiap pengembang harus memiliki pengetahuan dasar TCP / IP dan bagaimana jaringan berdasarkan protokol itu diorganisir. Namun itu mengarah pada pertanyaan tentang seberapa luas pengetahuan dasar dianggap.

Saya berpikir bahwa tanpa menghadapi masalah khusus (dan karena itu perlu mengetahui bagaimana hal-hal yang benar-benar diatur "di sana") pengembang harus tahu apa paket itu dan bagaimana paket didistribusikan melalui jaringan (itu termasuk mengetahui jenis mesin apa yang paket bersentuhan dengan). Namun saya pikir itu cukup untuk mengetahui bahwa router mendistribusikan paket ke semua penerima dan bahwa switch memberikan paket ke penerima tertentu . Saya juga tidak akan memerlukan devloper semua hal-hal subnet - Saya yakin tidak tahu semua detail sendiri ;-) Saya harus tahu bahwa subnet mungkin terisolasi dan paket harus dialihkan dari net A ke net B tetapi semua detail adalah cara banyak bagi pengembang biasa.

Saya pikir ini seperti mengendarai mobil: Anda harus tahu mengapa Anda membutuhkan mesin dan mengapa Anda membutuhkan bahan bakar, tetapi sebagai pengemudi biasa Anda tidak perlu tahu cara menghitung campuran bahan bakar dan udara yang sempurna untuk proses pembakaran.


0

Beberapa hal lebih membuat frustrasi daripada orang-orang yang tidak memahami dasar-dasar apa yang terjadi di sekitar mereka. Ini mengarah pada menanyakan pertanyaan yang sama berulang-ulang (dalam bentuk yang sedikit berbeda, tentu saja.)

Ketika Anda mendapati diri Anda mengajukan pertanyaan berulang, saatnya untuk membaca buku. Contoh pertanyaan terbaru yang saya terima:

  • "Bagaimana cara mengkonfigurasi jaringan jika xyz?" ...
  • "Bagaimana cara mengkonfigurasi jaringan jika abc?" ...
  • Ulang...

Bahkan, saya mendapat begitu banyak pertanyaan berulang dari orang-orang yang merasa lebih mudah untuk bertanya lagi daripada belajar, saya mulai melacak mereka dan membuat slide Powerpoint. Sekarang, setiap enam bulan atau lebih, saya menjalankan kelas praktik. Orang-orang kemudian dapat referensi slide yang saya buat. Kemudian, ketika mereka menanyakan sesuatu yang kami bahas di kelas, saya dengan lembut merujuknya, dan mereka biasanya ingat bahwa kami menutupinya dan membaca kembali slide untuk diri mereka sendiri. Mereka yang melakukannya sebenarnya mempelajari subjek lebih baik dan merasa berharga. Itu telah membuat perbedaan yang luar biasa dalam bentuk interupsi yang lebih sedikit pada hari kerja saya.

Satu pemikiran lain: Di dunia nyata, sistem nyata memiliki begitu banyak keanehan dan masalah, sangat terbatas untuk tidak tahu lebih dari sekedar pengetahuan khusus domain Anda. Setiap gagasan bagaimana dasar-dasar yang mendasarinya bekerja hanya dapat membantu Anda.

Sekarang, jika itu benar-benar di luar jangkauan untuk apa yang harus Anda ketahui, maka baiklah, jangan khawatir tentang hal itu. Tetapi jika Anda mendapati diri Anda mengajukan pertanyaan lebih dari satu kali, pelajarilah. Anda tidak akan menyesalinya.

Bravo karena mengajukan pertanyaan. Jangan berhenti belajar.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.