Apakah ada alasan konkret untuk tidak menggunakan perpustakaan dan snipet kode dengan berat? [Tutup]


42

Secara keseluruhan saya dalam pemrograman selama sekitar 8 tahun sekarang dan bagi saya tampaknya saya semakin mengandalkan perpustakaan open source dan cuplikan (sialan Anda GitHub!) Untuk "menyelesaikan pekerjaan". Saya tahu bahwa pada waktunya saya bisa menulis implementasi sendiri tetapi saya suka fokus pada desain keseluruhan.

Apakah ini normal (lingkungan non perusahaan)? Apa yang bisa salah jika "pemrograman" saya tidak lebih dari menempelkan pustaka yang berbeda secara bersamaan?

Saya tahu tentang "jangan menemukan kembali roda" tetapi apa yang terjadi ketika Anda tidak menemukan satu roda lagi?


3
Apakah maksud Anda " lingkungan non perusahaan ", atau lingkungan di mana orang tidak mau bekerja sama ?
Bryan Oakley

Saya pikir alasan kami menulis di antarmuka dan kelas abstrak adalah agar perpustakaan kami lebih universal, kurang tergantung, lebih fleksibel ...
IAbstract

1
Seburuk-buruknya sabuk ayah itu lepas.
Thomas Eding

Hanya ingat untuk memberi penghormatan dan memberikan kredit di mana kredit jatuh tempo. Jika Anda pernah mengklaim kode itu sebagai milik Anda, maka The Belt pasti
hanzolo

3
Tidak, itu tidak membuat Anda programmer yang buruk, tetapi itu tidak membuat Anda menjadi programmer yang lebih baik.

Jawaban:


85

Menggunakan perpustakaan alih-alih menciptakan kembali roda: Hebat! Begitulah seharusnya semua orang melakukannya. Anda tidak dibayar untuk melakukan apa yang sudah dilakukan.

Menggunakan cuplikan: Selama Anda memahami apa yang Anda salin-tempel, dan selama Anda menginvestasikan waktu untuk membuat semuanya konsisten (alih-alih tambalan gaya dan pendekatan yang berbeda), tidak ada yang salah dengan itu.


Itulah yang saya pikir. Mungkin saya harus memulai proyek open source untuk menghilangkan perasaan ini :)
Henrik P. Hessel

25
+1 dari saya. Orang tidak boleh menggunakan kode yang tidak mereka mengerti. Itu berlaku untuk cuplikan dan perpustakaan.
Tim Post

5
Sejauh cuplikan, saya selalu menulis ulang kode sendiri sehingga saya yakin bahwa saya tahu cara kerjanya. Perpustakaan, saya tidak pernah menulis ulang kecuali itu tidak bekerja untuk saya karena alasan apa pun.
Rei Miyasaka

12
Tim: Mengenai perpustakaan, saya tidak harus mengerti bagaimana melakukan sesuatu, asalkan saya tahu apa itu. Sebagai contoh, banyak dari kita menggunakan lib crypto; Saya tidak tahu cara kerja AES, tapi saya tahu apa fungsinya dan kapan menggunakannya.
user281377

@Rei Miyasaka Tampaknya cuplikan sering kurang berkualitas daripada perpustakaan mandiri. Saya sendiri, harus memperbaiki beberapa bagian cuplikan yang saya gunakan.
Henrik P. Hessel

24

pemrogram yang baik menulis kode yang baik; pemrogram hebat mencuri kode hebat.


+1 untuk garis. Apakah ini asli?
apoorv020

Saya berharap, tidak, itu pepatah yang aneh.
dan_waterworth

Saya menggunakan iPhone saya, tetapi saya pikir itu adalah kutipan dari Pablo Picasso (ganti programmer dengan artis)
Henrik P. Hessel

21
Picasso berkata Good artists copy, Great artists steal.
dan_waterworth

3
Kutipan yang bagus. Pikir saya akan mencuri ^ H ^ H ^ H ^ H ^ H menggunakannya kembali.
Wonko the Sane

24

Pengkodean sebenarnya adalah level pemrograman terendah. Semakin tinggi level abstraksi yang Anda dapat, semakin baik programmer Anda. Memilih perpustakaan yang tepat (tidak harus yang open-source), menghubungkannya dengan benar bersama dan memelihara konstruksinya jauh lebih sulit namun lebih efisien dan hemat waktu dan biaya, daripada menulis semuanya sendiri.


13

Saya suka menulis perpustakaan sendiri. Saya juga suka menyelesaikan proyek saya tepat waktu. Saya pikir seiring waktu, sebagian besar programmer yang baik membangun koleksi bit yang berguna dan dapat digunakan kembali. Saya tidak tahu tentang Anda, tetapi saya mendapat perasaan hebat setiap kali saya menggunakan perpustakaan yang saya tulis lima tahun lalu.

Sama sekali tidak ada yang salah dengan menggunakan kode perpustakaan yang telah diuji dan dicintai dari waktu ke waktu. Anda tahu cara kerjanya, Anda dapat mengandalkan kompleksitasnya dan Anda dapat menerapkannya dengan cepat.

Yang sedang berkata, saya berasumsi bahwa Anda memahami kode di perpustakaan. Saya berasumsi bahwa, jika diberi waktu yang cukup, Anda dapat mengimplementasikan sesuatu dengan kualitas yang sama.

Saya tahu beberapa programmer C benar-benar baik yang dapat mengimplementasikan perpustakaan C standar, beberapa dari mereka yang hanya sebagai latihan belajar / mengasah. Beberapa hal yang paling menyenangkan yang saya miliki selama hobi adalah bekerja di perpustakaan C di HelenOS.

Jadi, tidak ada yang salah dengan menggunakan kode perpustakaan, selama Anda terus penasaran dan belajar. Tak perlu dikatakan bahwa Anda tidak boleh menggunakan kode yang tidak Anda mengerti, kecuali jika Anda menggunakannya adalah upaya untuk memahami cara kerjanya.


Anda cukup menggambarkan keengganan saya terhadap jQuery, +1.
aaaaaaaaaaaa

5

Saya akan memberikan yang lebih baik daripada yang lain dalam pertanyaan ini: Saya bahkan tidak berpikir "klien" pengembang perpustakaan perlu "memahami" kode di perpustakaan itu.

Saya (dibandingkan dengan beberapa) pengembang iPhone yang relatif baru. Ada BANYAK perpustakaan yang saya gunakan setiap hari yang tidak pernah saya hasilkan sendiri, dan kodenya jauh di atas kepala saya. Tidak masalah sedikit pun DIBERIKAN:

1) Saya sepenuhnya memahami antarmuka untuk perpustakaan-perpustakaan itu (saya seorang ninja ASIHTTPRequest!)
2) Saya memilih perpustakaan yang secara umum, digunakan secara luas, jadi saya bisa memastikan mereka sudah berjalan dengan baik dan mencari masalah. (mis: ASIHTTP, perpustakaan JSON Stig Brautaset, perpustakaan obj-c Facebook, dll.)
3) Gagal # 2, cukup sederhana sehingga saya bisa memilih jalan melalui itu dan menemukan / memperbaiki / menyesuaikan segala sesuatu yang perlu menemukan / memperbaiki / menyesuaikan .

Itu # 2 akan menjadi bagian dari perdebatan ini, saya bertaruh. Faktanya adalah, saya mengandalkan komunitas open source, komunitas pengembang yang tentu saja lebih berpengalaman dan kemungkinan lebih pintar dari saya. Tapi itulah inti dari open source. Jadi, begitulah.


3

Saya ingin memberikan peringatan untuk menggunakan perpustakaan. Sebagai pengguna sering perpustakaan ilmiah di Perl an R (dan beberapa di Jawa), saya sering harus meretas ke perpustakaan untuk menghindari biaya overhead yang mengerikan. Menggunakan perpustakaan itu bagus, tetapi semakin banyak perpustakaan itu sendiri tergantung pada perpustakaan lain, yang memanggil perpustakaan ketiga yang menggunakan perpustakaan standar untuk melakukan tugas yang agak umum. Dan setiap langkah dalam proses membutuhkan beberapa pemeriksaan input dan output. Cukup banyak cek yang benar-benar berlebihan, tetapi mereka tetap membebani aplikasi. Dan ketika digunakan dalam satu lingkaran, maka beratnya bisa mulai cukup.

Selain itu, Anda tidak dapat memastikan bahwa perpustakaan selalu menjaga kompatibilitas kembali, atau tidak mengandung bug. Bahkan, semua pustaka berisi beberapa bug, itulah sifat kode. Oleh karena itu, semakin Anda bergantung pada perpustakaan, semakin banyak bug potensial yang Anda masukkan dalam kode Anda. Dan bug-bug yang tidak bisa Anda selesaikan dengan mudah tanpa meretas perpustakaan lagi.

Menggunakan perpustakaan adalah keputusan yang sangat cerdas, tetapi jika dan hanya jika Anda tahu perpustakaan dan perilakunya dengan cukup baik.

Saya tahu, berpikir sakit dan komputer itu murah, tapi tetap saja. Tidak berpikir bisa lebih menyakitkan.


3

Biasanya, menyalin sejumlah besar kode sumber adalah praktik yang buruk. Jika kode tersebut dikembangkan untuk aplikasi lain di perusahaan Anda, maka Anda harus menggunakan kembali kode tersebut dengan mengekstraksinya ke perpustakaan untuk digunakan oleh kedua aplikasi. Anda tidak boleh menyalin kode. Menyalin kode akan memaksa Anda untuk mempertahankan dua salinan daripada satu salinan umum.


3

Penggunaan kembali kode adalah ide yang sangat bagus. Ini mengurangi redundansi dan meningkatkan perawatan.

Judul menyarankan Anda menggunakan kode sebagai pustaka, tetapi teks pertanyaan Anda menyiratkan bahwa Anda mungkin menyalin kode sumber ke proyek baru. Saya akan tetap menggunakan kode pengembang lain sebagai perpustakaan sebanyak mungkin.

Ada masalah jika kodenya rusak atau rusak atau berdasarkan pada model yang tidak cocok dengan aplikasi Anda. Dalam hal ini mungkin lebih mudah untuk menghapus beberapa atau semua kode dan mulai dari awal daripada mencoba memahami mengapa itu ditulis dengan cara tertentu. Tetap pertahankan kode lain untuk referensi; Anda mungkin menemukan masalah yang Anda tidak yakin bagaimana menyelesaikannya. Kemungkinan pengembang lain mungkin menemukan masalah yang sama, dan ada baiknya untuk melihat bagaimana mereka menyelesaikannya.


Anda membuat saya di sana. Saya juga merujuk pada menyalin banyak baris kode karya orang lain (bukan perpustakaan), karena itu legal dalam kasus saya. Apa yang kamu pikirkan?
Arman

1
@Arman Itu masih ide yang bagus. Dari sudut pandang pemeliharaan, itu tidak sebaik karena ketika pengembang asli memperbaiki bug dalam kodenya, itu masih ada di Anda. Ini masih lebih baik daripada tidak sama sekali karena setidaknya kode ini cukup mirip di kedua proyek dan Anda dapat menerapkan perbaikan bug secara terpisah tanpa harus melakukan sebanyak mungkin.
pswg

: Satu pertanyaan terakhir: Jadi seperti yang dikatakan Mason, jika misalnya saya menemukan bahwa 2500 baris kode (sekali lagi saya tekankan bukan perpustakaan) milik Anda agak berguna dalam memulai pekerjaan saya, dan Anda membiarkan saya menyalinnya, lakukan Anda pikir itu baik untuk saya? Apakah etika?
Arman

@Arman Jika legal, mungkin etis juga. Jika ditulis oleh pengembang di bawah organisasi yang sama, maka umumnya organisasi memiliki kode dan Anda memiliki hak untuk menggunakannya (sesuai dengan kebijakan organisasi). Jika ditulis di bawah organisasi yang berbeda, Anda perlu izin dari organisasi itu. Umumnya jika kode tidak dicakup oleh lisensi apa pun, pengembang asli tidak terlalu peduli bagaimana Anda menggunakannya, tetapi saya akan selalu mengaitkan pengembang asli dalam komentar kode yang menonjol (dengan tautan jika memungkinkan).
pswg

4
Idealnya, Anda juga harus memahami cara kerja kode yang disalin.
Mike Partridge

1

Itu ide yang bagus, jadi tidak ada masalah hukum.

Namun, pastikan Anda meluangkan waktu untuk memahami apa yang dilakukan perpustakaan dan bagaimana perpustakaan melakukannya. Menggunakan perpustakaan "ajaib" untuk mengurus hal-hal yang tidak Anda pahami adalah cara yang baik untuk membuat beberapa bagiannya meledak pada Anda karena Anda salah menggunakannya, dan kemudian Anda tidak tahu cara memperbaikinya.


1
Saya bertanya-tanya apakah "menyalin dan menempel" seratus baris kode yang dibuat oleh sesama programmer saya yang murah hati masih etis.
Arman

2
@Arman: Coba tanyakan padanya.
Mason Wheeler

1
Jika lisensi memperbolehkannya, mengapa itu tidak etis? Jika Anda mencoba menyelesaikan suatu pekerjaan, dan satu roda telah ditemukan dan tersedia untuk Anda secara gratis, itu akan salah (yaitu tidak etis) bagi Anda untuk membuang-buang waktu Anda untuk menciptakannya kembali. Jika Anda perlu belajar cara menemukan kembali roda, itu sangat berbeda.
Darius X.

1

Kode yang digunakan kembali secara legal hampir tidak memiliki kerugian dan dua keuntungan besar:

  1. Itu menyelesaikan pekerjaan. Ini yang lebih penting untuk pengembangan profesional. Pada akhirnya, Anda memiliki pekerjaan bergaji tinggi karena Anda tahu bagaimana membuat sesuatu terjadi yang akan membuat sebagian besar non-programmer bingung; penggunaan kembali memungkinkan Anda mencapai tujuan itu lebih cepat, sehingga Anda menjadi lebih berharga dalam pekerjaan Anda.
  2. Anda belajar banyak hal. Inilah alasan yang lebih penting untuk perbaikan diri. Tidak ada cara yang lebih baik untuk meningkatkan pengkodean selain membaca kode yang baik yang ditulis oleh orang lain. Bahkan kode buruk yang ditulis oleh orang lain biasanya mengajarkan Anda sesuatu! Dan tidak ada cara yang lebih baik untuk memahami cara kerja perpustakaan, API, bahasa, atau domain selain membaca dan meningkatkan solusi yang sudah ditulis oleh orang lain. Kedua hal ini biasanya terjadi ketika Anda menggunakan kembali kode yang sudah ada, karena tidak ada solusi yang sudah ada sebelumnya akan cukup melakukan apa yang Anda butuhkan - dan bermain-main berikutnya dengan sumbernya adalah dari mana peningkatan pengetahuan berasal.

Itu benar-benar tujuan saya, untuk belajar. Untuk saat ini, lebih berharga daripada menyelesaikan proyek saya. Itu sebabnya saya merasa tidak enak ketika mencoba memiliki pekerjaan seseorang hanya dengan sedikit usaha (tidak hanya merujuk ke perpustakaan).
Arman

1

Apakah penggunaan pustaka dan cuplikan kode yang berat menjadikan Anda seorang programmer yang buruk?

Jika Anda menggunakan pustaka dan cuplikan kode di tempat yang sesuai, maka 'Tidak' , itu tidak berarti Anda seorang programmer yang buruk. Ini berarti bahwa Anda seorang programmer yang cerdas yang dapat menerapkan kebijaksanaan orang lain di tempat yang tepat.

Namun...

Dibutuhkan waktu untuk menemukan perpustakaan dan cuplikan kode, jadi jika Anda tidak dapat menulis kode sendiri, dan Anda perlu menghabiskan waktu berjam-jam untuk menemukan perpustakaan dan cuplikan kode untuk mengimplementasikan tugas-tugas sepele, maka 'Ya' , Anda adalah programmer yang buruk.


0

Tidak. Pemrogram harus menggunakan perpustakaan yang sudah ada di luar sana. Tidak menemukan kembali roda. Jika Anda memiliki metode yang lebih baik, Anda dapat melakukannya, jika tidak, apa yang sebenarnya dilakukan dengan menulis kode yang sama. Satu-satunya hal yang harus Anda ketahui adalah kode itu (dan hanya jika itu penting).


0

Selain alasan dalam jawaban lain, tidak menggunakan kode (asalkan cocok untuk masalah Anda) dapat dianggap tidak etis karena:

  1. Anda mungkin dengan sengaja menyia-nyiakan waktu atasan Anda ATAU
  2. Anda mungkin secara sengaja memberikan produk yang lebih rendah

Perlu diingat, keduanya sulit ditentukan sebelumnya.

Juga, lihat Not Invented Here , yang biasa disebut sebagai pola-anit.


0

Untuk tujuan penyelesaian, izinkan argumen balasan: http://web.archive.org/web/20150326134617/https://michaelochurch.wordpress.com/2015/03/25/never-invent-here-the-even-worse -sibling-of-not-invented-di sini /

mentalitas yang saya sebut "Never Invent Here" (NeIH). Dengan mentalitas itu, aset eksternal dinilai terlalu tinggi dan sering kali dipercaya secara implisit, membuat para insinyur menghabiskan lebih banyak waktu untuk beradaptasi dengan keanehan aset yang tidak tersedia, dan lebih sedikit waktu untuk membangun aset mereka sendiri.

Selalu ada keseimbangan.


-2

Saya tidak menggunakan perpustakaan kecuali benar-benar diperlukan. Ketergantungan membatasi portabilitas dan umur. Saya memiliki 34 tahun dalam pengembangan perangkat lunak dan ingin memiliki setidaknya 1 dari program saya bertahan lebih dari 3 tahun tanpa dihancurkan oleh erosi (perubahan).

COM (Component Object Model), jawabannya 17 tahun yang lalu, secara teori hebat, dalam praktiknya dipertanyakan, komponen yang tidak dapat digunakan kembali tidak benar-benar, saya hanya akan menggunakan komponen yang sangat mendasar dan hanya jika saya harus.

API dan SDK tidak banyak digunakan. Jika saya memecah jumlah baris kode yang sebenarnya saya gunakan dari perpustakaan, waktu yang saya habiskan untuk membuatnya dan menulisnya, saya pikir itu adalah cuci tangan. Saya berhenti menggunakan SDK sepenuhnya overhead adalah ekstrim.

Kerangka kerja: Zend, Silverlight, WCF, .NET, sistem berlapis, ya mereka dapat mempercepat pengembangan awal, tetapi ketika saya mencapai batas mereka, waktu saya habiskan memperbaiki celah, hanya saja tidak sepadan dengan usaha. Berapa umur mereka dan apakah mereka tahan terhadap erosi?

Saya telah pergi ke JavaScript dan HTML hanya dengan perpustakaan saya. Saya telah menghapus JavaScript dengan hanya menggunakan jenis pernyataan yang paling umum. Saya harap dalam 10 tahun saya bisa menulis sesuatu yang akan bertahan lama.


bagian dari masalah ini tidak begitu banyak perpustakaan, tetapi churn teknologi terus-menerus dari bahasa dan alat pemrograman yang berarti Anda harus pergi dan menemukan perpustakaan baru di teknologi baru untuk melakukan hal yang sama.
gbjbaanb

-2

Semuanya tergantung. Jika Anda membuat kode permainan maka itu membuat sejak menggunakan perpustakaan (mis. Allegro) tetapi Anda tidak dapat benar-benar dianggap sebagai programmer jika Anda menyalin / mencuri / meminjam (apa pun) kode orang lain. Saya mengatakan tidak menciptakan kembali roda tetapi sampai pada titik yang masuk akal. Jangan membuat seluruh program cuplikan yang ditulis orang lain. Duduklah di depan komputer Anda dan lakukan sendiri ... berhenti mencuri kode. Orang-orang menjadi terlalu malas akhir-akhir ini dan hanya menyalin dan menempel.

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.