Haruskah Anda menggunakan perpustakaan ketika Anda bisa melakukan tugas tanpa itu? [Tutup]

33

Saya berada dalam situasi di mana saya dapat menggunakan plugin JavaScript open source untuk memenuhi tugas. Tetapi ketika saya mencoba menggunakannya, saya mendapati diri saya harus mendesain ulang banyak hal dari apa yang telah saya lakukan, dan itu menambah kompleksitas tertentu, menurut pendapat saya, pada proyek tersebut. Sedangkan saya dapat mencapai tugas yang sama dengan kode bersih saya dapat membuat sendiri, dan tanpa perlu mengubah apa yang telah saya lakukan sejauh ini.

Haruskah Anda tetap memilih perpustakaan dalam situasi ini (seperti demi kode kualitas yang lebih baik?)

Billal Begueradj
sumber
3
Bagaimana Anda mengukur "kualitas". Dengan jumlah baris kode? Kelas? Kompleksitas? Kemampuan perawatan? Ketangguhan?
Laiv
3
Jawabannya adalah TIDAK, apa pun yang Anda anggap berkualitas atau tidak. Tetapi jika Anda memberi kami ide Anda tentang kualitas, jawaban akan membahas alasan mereka untuk menjelaskan mengapa jumlah perpustakaan tidak meningkatkan kualitas yang Anda anggap berkualitas. Ini hanya masalah presesi. Seperti sekarang, TIDAK sederhana akan menjawab pertanyaan tanpa perlu penjelasan.
Laiv
4
Bukan jawaban langsung untuk pertanyaan Anda, tetapi gagasan bahwa "angka ini" pasti menjamin "kualitas yang lebih baik" terbang dalam menghadapi mengakui kesulitan meningkatkan kualitas kode. Tidak ada perbaikan cepat untuk memastikan kualitas. Jika ada, masalahnya tidak akan ada. Siapa pun yang mengklaim bahwa pendekatan sederhana tertentu adalah solusi serba bisa semua (baik terbaik) generalisasi yang berlebihan (atau paling buruk) mendorong gagasan cacat mereka sebagai kebenaran.
Flater
3
Apa yang membuat Anda berpikir menggunakan perpustakaan akan meningkatkan kualitas kode?
Berhentilah melukai Monica
1
Dipilih untuk ditutup karena pertanyaannya tampaknya telah dirumuskan ulang secara signifikan, dan jawaban atas menjawab versi lama ... lebih baik memposting ulang pertanyaan seperti yang ada sekarang (ditambah tambahkan detail untuk menghindari papan "juga "pilihan) ...
AnoE

Jawaban:

54

Sebagai seorang insinyur, mungkin cocok untuk menganggap ini sebagai masalah optimisasi. Secara alami kita harus memiliki tujuan pengoptimalan . Yang umum dalam situasi semacam ini adalah meminimalkan Total Biaya Kepemilikan .

Jika Anda yakin menambahkan komponen pihak ketiga akan menghemat biaya dalam jangka panjang, Anda harus menggunakannya. Jika tidak, Anda seharusnya tidak melakukannya. Pastikan Anda mempertimbangkan biaya pemeliharaan yang berkelanjutan (misalnya, ketika versi O / S baru dirilis, atau cacat keamanan ditemukan, atau beberapa spesifikasi W3C baru dilepaskan).

Untuk banyak masalah sepele, biayanya lebih rendah untuk menumbuhkan masalah Anda sendiri, tetapi untuk masalah yang agak rumit di luar kompetensi inti organisasi Anda, sering kali masuk akal untuk pergi ke pihak ketiga.

Ada tujuan lain yang perlu dipertimbangkan (misalnya risiko) tetapi TCO adalah yang besar.

John Wu
sumber
1
Saya pikir jawaban ini perlu lebih banyak upvotes. - Keandalan jangka panjang dengan perpustakaan bisa menjadi masalah besar. Dan bahkan jika perpustakaan ada, siapa yang tahu apakah API akan berubah? Perpustakaan mudah dalam jangka pendek, tetapi dapat menyebabkan masalah dalam jangka panjang. (Catatan: perpustakaan sebagai kode sumber mengurangi beberapa masalah.)
DetlevCM
6
@DetlevCM Jawabannya juga mengatakan itu bisa dengan mudah pergi sebaliknya. Perpustakaan nontrivial akan memiliki biaya pemeliharaan yang melekat pada mereka yang Anda sebagai pengguna perpustakaan tidak harus membayar, dan mungkin tidak akan dapat membayar jika Anda harus (yaitu jika Anda adalah pemilik perpustakaan).
Cubic
Saya setuju tetapi jangan lupa untuk mempertimbangkan biaya perpustakaan juga - bug, perubahan desain di luar kendali Anda, dan banyak kode yang tidak Anda gunakan hanya untuk memasukkan satu fungsi. Juga perpustakaan sering tidak se ekspresif solusi Anda mungkin untuk masalah Anda. JUGA Anda tidak dapat men-debug perpustakaan eksternal dengan mudah dan jika Anda melakukannya, Anda harus berurusan dengan lebih banyak masalah penggabungan nanti. Jangan hanya berasumsi bahwa solusi perpustakaan lebih ringan, pertimbangkan semua faktor dan jangan takut untuk membuat kode solusi Anda sendiri jika perpustakaan tidak cukup cocok!
Bill K
36

Bill Gates pernah berkata:

"Mengukur kemajuan pemrograman berdasarkan baris kode seperti mengukur kemajuan pembangunan pesawat terbang berdasarkan berat."

Kutipan ini muncul di benak saya karena hal yang sama pada akhirnya dapat dikatakan untuk jumlah perpustakaan. Sebagai aturan, saya tidak menggunakan perpustakaan kecuali:

  1. Tidak ada cara lain untuk menyelesaikannya. Melakukan tanpanya tidak lagi ekonomis untuk menghasilkan produk tepat waktu dan sesuai anggaran.
  2. Ini akan menghemat banyak waktu karena saya akan memerlukan banyak fitur dari perpustakaan tersebut
  3. Perpustakaan digunakan dengan baik dan potensi masalah yang mungkin saya miliki akan didokumentasikan dengan baik.

Idealnya ketiga persyaratan terpenuhi, tetapi saya akan menerima dua syarat. Intinya adalah Anda tidak harus menambahkan perpustakaan ke program Anda kecuali jika ada gunanya. Jika Anda harus bertanya apa tujuan itu, Anda mungkin tidak boleh menambahkannya ke program Anda. Karenanya, kualitas kode program Anda menguntungkan karena ia memanggil setiap perpustakaan tanpa terbebani oleh kebutuhan untuk menulis ulang perpustakaan di dalam program Anda.

Semoga berhasil!

Neil
sumber
4
@BillalBegueradj Kutipan yang berarti, ya. Cukup, tidak. Kami tidak berbicara tentang kemajuan, kami berbicara tentang kualitas perangkat lunak, dan garis kode memiliki korelasi yang sangat kuat terhadap jumlah cacat yang ditemukan. Lihat makalah Pengaruh Pembaur Ukuran Kelas terhadap Validitas Metrik Berorientasi Objek yang menunjukkan semua metrik lainnya tidak memiliki daya prediksi pada cacat yang ditemukan setelah disesuaikan oleh LOC, yang berarti bahwa LOC adalah prediktor terbaik untuk cacat (atau pada saat itu: 2001). Dan, omong-omong, makalah ilmiah mengalahkan kutipan terkenal.
Theraot
5
@Theraot Anda menyarankan bahwa karena jumlah baris menentukan jumlah cacat bahwa program yang lebih besar memiliki kualitas kode yang lebih buruk daripada program yang lebih kecil? Saya tidak setuju dengan metrik Anda, maaf. Juga, jika kutipan itu benar-benar mengganggu Anda, silakan abaikan.
Neil
3
@Neil menjadi jelas, jumlah garis tidak menentukan jumlah cacat, ia memiliki korelasi kuat dengan jumlah cacat yang ditemukan. Ini mudah dimengerti: semakin besar kode, semakin banyak peluang untuk cacat yang akan diperkenalkan. Tentu saja, jumlah cacat akan turun setelah mereka ditemukan dan diperbaiki. Bagaimanapun, ini hanya korelasi. Tambahan: LOC mengalahkan banyak metrik umum, lihat kertas untuk detailnya.
Theraot
5
@Theraot Argumen saya bukan tentang korelasi cacat dengan jumlah baris. Argumen saya adalah dengan banyaknya cacat menyamakan kualitas kode yang buruk. Chrome memiliki bagian cacat selama bertahun-tahun, tapi saya berpendapat legitimasi klaim apa pun yang menunjukkan itu ditulis lebih buruk daripada plugin jQuery 10-baris yang ditulis dengan buruk di github.
Neil
3
@Theraot "makalah ilmiah mengalahkan kutipan terkenal." - Kedengarannya kertas Anda sebenarnya mendukung kutipan daripada mengalahkannya ...
npostavs
14

(Catatan: Pertanyaan aslinya adalah: Apakah jumlah perpustakaan meningkatkan kualitas kode?)

Anda mungkin dapat menjawabnya sendiri: Tidak, tentu saja fakta menggunakan perpustakaan tidak meningkatkan kode Anda. Jika ya, akan mudah untuk menulis kode yang bagus untuk semuanya tanpa usaha.

Apa yang orang-orang maksud ketika mereka merekomendasikan penggunaan ulang atas roll-milik Anda sendiri adalah bahwa kode di perpustakaan terkenal mungkin lebih benar, efisien dan / atau dapat digunakan daripada apa yang akan Anda buat sendiri, hanya karena penulis telah menghabiskan lebih banyak waktu pada satu area fungsi tertentu daripada Anda (dengan tenggat waktu Anda untuk seluruh proyek) mampu.

Tapi itu hanya tren, bukan hukum. Tentu saja ada perpustakaan yang tidak begitu berguna untuk digunakan seperti roll-milik Anda sendiri. Seringkali ini terjadi ketika perpustakaan benar-benar melakukan lebih dari apa yang Anda butuhkan, dan melakukannya dengan cara yang akan memaksa Anda untuk mengadaptasi basis kode Anda sendiri ke konvensi mereka lebih dari yang wajar. Sepertinya ini persis seperti yang Anda temukan dalam contoh ini.

Kilian Foth
sumber
4

Meskipun menggunakan perpustakaan yang tepat dapat menghemat banyak pekerjaan, ada juga banyak biaya tersembunyi:

  • Perpustakaan harus selalu diperbarui. Anda secara teratur perlu memeriksa apakah mereka mendapat pembaruan (yang mungkin relevan dengan keamanan!) Dan menerapkannya. Setiap pembaruan pustaka berpotensi merusak sesuatu di aplikasi Anda. Itu berarti Anda perlu melakukan tes integrasi lengkap sesudahnya. Jadi setiap perpustakaan proyek Anda tergantung pada peningkatan overhead pemeliharaan jangka panjang.
  • Beberapa perpustakaan Javascript sangat kuat dan menggunakan pola unik sedemikian rupa sehingga orang mulai menganggapnya sebagai bidang keahlian teknis yang terpisah. Jadi setiap pustaka tambahan yang Anda tambahkan mungkin membuat takut pengembang yang tidak merasa percaya diri mengedit kode yang bergantung pada kerangka kerja yang tidak mereka kenal. Menyewa pemrogram pemeliharaan baru yang terbiasa dengan semua perpustakaan yang Anda gunakan mungkin menjadi tantangan.
  • Menambahkan perpustakaan ke situs web Anda meningkatkan waktu pemuatan, karena pengguna perlu memuat seluruh perpustakaan, bahkan jika Anda hanya menggunakan sebagian kecil saja. Beberapa perpustakaan populer memungkinkan Anda untuk men-download kustom membangun dengan hanya fungsi yang Anda butuhkan, tetapi bahkan kemudian Anda akan biasanya masih termasuk banyak kode yang tidak akan pernah habis (atau bahkan lebih buruk: kode yang tidak berjalan, tetapi tidak melakukan sesuatu yang berguna, karena hanya menyiapkan struktur data untuk fungsi yang tidak Anda gunakan).

Jadi sebelum Anda menambahkan ketergantungan lain pada proyek Anda untuk memasukkan sesuatu yang bisa Anda tulis sendiri, lakukan analisis biaya / manfaat.

Philipp
sumber
Dan ulangi analisis itu ketika Anda benar-benar memiliki data nyata. Anda mungkin telah meremehkan biaya / terlalu tinggi manfaatnya, atau situasinya mungkin telah berubah.
Deduplicator
1

Ini tidak perlu menjadi keputusan biner: Hanya menggunakan pustaka OSS, atau memprogram solusi baru dari awal. Pilihan lain mungkin menggunakan kembali bagian perpustakaan, jika lisensi mengizinkannya.

Sebagai contoh, di bidang saya (perangkat lunak numerik) perpustakaan dapat memiliki modul inti halus, dan beberapa modul khusus yang hanya 80% saya sukai. Jadi saya akan menggunakan modul inti dan menulis pembungkus untuk modul khusus. Atau saya dapat mengembangkan modul khusus saya sendiri dengan menggunakan desain dan kode modul OSS. Bit tersulit, algoritmik biasanya dapat digunakan kembali dari itu, dengan hanya kode perancah yang dimodifikasi. Saya juga dapat membersihkan beberapa kode asli. Ini telah membuktikan pengalaman belajar yang baik dan hemat waktu, dibandingkan dengan pengembangan dari awal.

Tupolev._
sumber
0

Jika seseorang telah melakukan pekerjaan untuk Anda, tentu saja Anda harus menggunakannya.

Pengecualian untuk aturan ini adalah javascript. Di mana mereka akan mengimpor selusin perpustakaan lain (tentu saja versi usang) untuk menambahkan fitur bahasa yang ingin mereka gunakan dan kemudian melakukan pekerjaan untuk Anda.

Pilih kerangka kerja Anda dan tetap di dalamnya. Jika perpustakaan berfungsi dengan framework atau plain js Anda, oke. Tetapi jika itu membutuhkan kerangka kerja yang berbeda, cari opsi lain.

Ewan
sumber
4
Banyak penggemar javascript di sini
FCin
0

Perpustakaan dan kapan menggunakannya adalah keputusan yang rumit.

Di satu sisi Anda telah diuji dengan baik, hampir hal-hal standar (Di bidang saya, FFTW misalnya termasuk dalam kategori ini, atau sesuatu seperti libsndfile), yang umumnya diakui hanya berfungsi, dan telah menjadi barang standar selama 20 tahun terakhir yang semua orang gunakan.

Di sisi lain, Anda memiliki barang acak dari github, tanpa test suite dan hanya sekitar 1 pengelola, umumnya mengapa repot?

Tes asam untuk saya adalah pertama apakah perpustakaan cocok dengan arsitektur saya (Kadang-kadang, jika Anda tahu Anda ingin menggunakan perpustakaan yang diberikan Anda akhirnya merancang sekitar itu), dan apakah saya pikir saya akan berakhir debugging seseorang elses kode perpustakaan ? Proxy yang baik untuk pertanyaan kedua adalah "Apakah ada test suite otomatis dan seperti apa dokumentasinya?".

Sedikit debug bukan masalah besar, tetapi pada saat itu kode perpustakaan mulai menghitung terhadap ukuran kode saya sendiri dari perspektif pemeliharaan (Terlebih lagi jika perbaikan saya tidak dapat didorong ke hulu karena alasan tertentu).

Saya juga akan membedakan antara perpustakaan dan kerangka kerja, untuk semua perbedaan itu kadang-kadang tidak jelas, kerangka kerja di dunia (inti kecil, berat DSP) saya cenderung menyebalkan, terutama jika Anda mencoba untuk menggabungkan lebih dari itu satu atau melakukan sesuatu yang sedikit di luar garis, perpustakaan terkadang berguna. Saya sadar bahwa ini terlihat sangat berbeda di dunia web dev.

Akhir hari itu adalah keputusan yang turun ke rasa dan pengalaman, dan bahkan yang berpengalaman kadang-kadang memilih dengan buruk, masih setidaknya dengan perpustakaan, Anda selalu dapat merobeknya dan menulis implementasi Anda sendiri jika terlalu mengganggu.

Keputusan, Keputusan ....

Dan Mills
sumber