Komuniti Pengaturcaraan Berdebat Sama Ada Pengurus Pakej Mencipta Lebih Banyak Masalah Daripada Menyelesaikannya

Pasukan Komuniti BigGo
Komuniti Pengaturcaraan Berdebat Sama Ada Pengurus Pakej Mencipta Lebih Banyak Masalah Daripada Menyelesaikannya

Dunia pengaturcaraan sedang bergolak dengan perdebatan sengit selepas pencipta bahasa Odin , Bill Hall menerbitkan artikel provokatif bertajuk Package Managers are Evil. Kritikannya telah mencetuskan perbincangan hangat tentang sama ada alat pengurusan kebergantungan automatik membantu atau merosakkan pembangunan perisian.

Hujah utama Hall mencabar andaian asas dalam pengaturcaraan moden. Beliau mendakwa bahawa pengurus pakej mengautomasikan perkara yang salah - neraka kebergantungan - menjadikannya lebih mudah bagi pembangun untuk mengumpul beribu-ribu kebergantungan tanpa memahami implikasinya. Perbincangan ini telah mendedahkan perpecahan mendalam dalam cara pembangun mendekati penggunaan semula kod dan pengurusan projek.

Hujah Utama Menentang Pengurus Pakej:

  • Mengautomasikan neraka kebergantungan dan bukannya mencegahnya
  • Menyembunyikan kerumitan dan kos sebenar kebergantungan
  • Membolehkan pengumpulan beribu-ribu kebergantungan yang tidak disahkan
  • Mewujudkan kelemahan keselamatan melalui kepercayaan buta
  • Membawa kepada beban penyelenggaraan dan liabiliti pepijat

Kontroversi Automasi

Inti perdebatan tertumpu pada sama ada pengurusan kebergantungan perlu diautomasikan atau manual. Hall berhujah bahawa pengurus pakej menyembunyikan kerumitan dan menjadikannya terlalu mudah untuk menambah kebergantungan tanpa pertimbangan yang sewajarnya. Beliau mencadangkan bahawa pengurusan kebergantungan manual memaksa pembangun untuk berfikir dengan teliti tentang setiap penambahan, berpotensi menghalang pokok kebergantungan yang kembung.

Respons komuniti mendedahkan pengalaman bercampur-campur. Sesetengah pembangun berkongsi cerita projek Rust yang menarik masuk berpuluh-puluh kebergantungan yang tidak dijangka daripada hanya satu atau dua import langsung. Yang lain menunjukkan bahawa pengurusan manual tidak berskala untuk persekitaran perusahaan besar di mana produk menggabungkan beratus-ratus komponen daripada pelbagai pasukan di seluruh dunia.

Perbincangan ini menyerlahkan ketegangan utama antara kemudahan pembangun dan kebolehselenggaraan projek. Walaupun automasi menjimatkan masa, pengkritik berhujah ia boleh membawa kepada situasi di mana projek menjadi bergantung pada kod yang tidak pernah diperiksa atau difahami oleh pembangun.

Cerita Impak Dunia Sebenar

Beberapa ahli komuniti berkongsi contoh konkrit masalah berkaitan kebergantungan. Seorang pembangun menerangkan penemuan banyak pepijat dalam SDL2 , perpustakaan yang digunakan secara meluas, menyebabkan pasukan mereka mempertimbangkan untuk menulis sistem tingkap mereka sendiri dari awal. Yang lain menceritakan kesukaran untuk menghasilkan semula binaan model neural yang telah dicipta tanpa pengurusan kebergantungan yang betul.

Pengalaman berbeza secara dramatik mengikut ekosistem pengaturcaraan. Pembangun Go melaporkan memerlukan lebih sedikit pakej pihak ketiga kerana perpustakaan standard bahasa yang komprehensif, manakala pembangun JavaScript menerangkan cabaran menguruskan pokok kebergantungan yang kompleks dalam aplikasi satu halaman.

Menyingkirkan npm dan melakukan perkara secara manual tidak akan menjadikan pembinaan SPA mempunyai lebih sedikit kebergantungan, pembinaan akan menjadi sangat perlahan dan menyakitkan.

Komen ini menangkap kebimbangan umum - bahawa sesetengah persekitaran pembangunan telah berkembang untuk bergantung sangat kepada ekosistem pakej sehingga pengurusan manual menjadi tidak praktikal.

Dimensi Kepercayaan dan Keselamatan

Sebahagian besar perbincangan memberi tumpuan kepada implikasi keselamatan pengurusan kebergantungan automatik. Ahli komuniti berdebat sama ada pembangun meletakkan terlalu banyak kepercayaan pada kod rawak dari internet, dengan sesetengahnya berhujah bahawa pengaturcara dari masyarakat berkepercayaan tinggi menggunakan tahap kepercayaan yang tidak sesuai kepada repositori kod dalam talian.

Perbualan ini mendedahkan apa yang dipanggil oleh sesetengahnya sebagai kesan amnesia Gell-Mann dalam pengaturcaraan - pembangun yang tidak mempercayai kod rakan sekerja mereka sendiri sambil secara membuta tuli mempercayai pakej sumber terbuka daripada pengarang yang tidak dikenali. Paradoks ini menyerlahkan persoalan yang lebih luas tentang penilaian kualiti kod dan pengurusan risiko dalam pembangunan perisian.

Beberapa peserta menyatakan bahawa isu keselamatan, walaupun penting, bukan satu-satunya kebimbangan. Liabiliti pepijat, beban penyelenggaraan, dan kerumitan integrasi boleh menjadi sama bermasalah untuk banyak projek.

Pendekatan Alternatif dan Penyelesaian

Perdebatan ini telah menghasilkan pelbagai cadangan untuk penyelesaian jalan tengah. Sesetengahnya mencadangkan alat yang lebih baik untuk audit kebergantungan, termasuk perkhidmatan pengimbasan pihak ketiga yang diintegrasikan ke dalam pengurus pakej. Yang lain menyokong pengurusan kebergantungan yang lebih selektif, menggunakan pengurus pakej hanya untuk perpustakaan yang besar dan telah disahkan dengan baik dan bukannya pakej mikro.

Pembangun perusahaan menerangkan penggunaan alat seperti Nix untuk pengurusan kebergantungan yang lebih boleh dipercayai, manakala yang lain menunjukkan pendekatan seperti vendoring kebergantungan dengan versi terkunci. Perbincangan mendedahkan bahawa konteks pembangunan yang berbeza - dari pembangunan permainan hingga sistem kritikal keselamatan - mempunyai keperluan dan kekangan yang sangat berbeza.

Perbualan ini juga menyentuh peranan perpustakaan standard. Bahasa dengan fungsi terbina dalam yang komprehensif, seperti Go , nampaknya menghasilkan penyebaran kebergantungan yang kurang berbanding dengan bahasa yang mempunyai perpustakaan standard minimum yang mendorong fungsi biasa kepada pakej luaran.

Pendekatan Alternatif yang Dibincangkan:

  • Pengurusan kebergantungan manual dengan vendoring
  • Menggunakan bahasa pengaturcaraan dengan perpustakaan standard yang komprehensif (contoh Go )
  • Pengurusan kebergantungan terpilih untuk pakej besar sahaja
  • Perkhidmatan audit pihak ketiga yang disepadukan ke dalam pengurus pakej
  • Alat seperti Nix untuk penyelesaian kebergantungan yang lebih dipercayai
  • Git subtrees sebagai ganti submodules untuk pengurusan kebergantungan

Kesimpulan

Perdebatan ini mencerminkan ketegangan yang lebih luas dalam pembangunan perisian antara pembangunan pesat dan kebolehselenggaraan jangka panjang. Walaupun pengurus pakej tidak dinafikan telah mempercepatkan pembangunan perisian dengan menjadikan penggunaan semula kod lebih mudah, mereka juga telah memperkenalkan kategori masalah baharu yang industri masih belajar untuk menguruskan.

Perbincangan mencadangkan bahawa daripada melihat pengurus pakej sebagai universally baik atau jahat, pembangun mungkin mendapat manfaat daripada pendekatan yang lebih bernuansa yang mempertimbangkan konteks projek, keupayaan pasukan, dan keperluan penyelenggaraan jangka panjang. Ketika industri pengaturcaraan terus matang, mencari keseimbangan yang tepat antara automasi dan kawalan manual kekal sebagai cabaran berterusan.

Rujukan: Package Managers are Evil