Saya belajar sejak awal bahwa memotong & menempel kode orang lain membutuhkan waktu lebih lama daripada menulisnya sendiri. Menurut pendapat saya kecuali Anda benar-benar memahaminya, cut & paste kode mungkin akan memiliki masalah yang akan menjadi mimpi buruk untuk diselesaikan.
Jangan salah paham, maksud saya menemukan kode orang lain dan belajar darinya sangat penting, tetapi kami tidak hanya menempelkannya ke dalam aplikasi kami. Kami menulis ulang yang konsep-konsep dalam aplikasi kita.
Tapi saya terus-menerus mendengar tentang orang-orang yang memotong & menempel, dan mereka membicarakannya seperti itu adalah praktik umum. Saya juga melihat komentar oleh orang lain yang menunjukkan itu adalah praktik umum.
Jadi, apakah sebagian besar programmer memotong & menempel kode?
sumber
Jawaban:
Dua kasus umum:
Dari satu proyek ke proyek lain:
Sebagian besar programmer memotong dan menempelkan kode dalam kapasitas ini. Mereka mungkin menemukan proyek sebelumnya atau sesuatu yang daring dan menyalin / menempelkannya dengan tepat atau menyalin / menempel dan mengubahnya. Saya pikir praktik ini biasanya baik-baik saja. Ini sangat baik ketika kode terbukti. (Contoh: Beberapa jenis objek utilitas dari proyek sebelumnya yang bekerja dengan baik, atau mungkin dari blog dengan beberapa perubahan yang diperlukan). Di mana ini bisa menjadi buruk, adalah ketika Anda menyalin kode yang tidak Anda mengerti, atau di mana kode itu buruk, atau di mana ada solusi alternatif yang jauh lebih baik daripada kode yang Anda tempel.
Di dalam proyek yang sama: Menyalin dan menempel di proyek yang sama biasanya bukan ide yang baik. Ini adalah bau yang buruk bahwa kode yang sedang disalin seharusnya hanya dalam metode / kelas di suatu tempat dan dipanggil berulang kali. Ada beberapa pengecualian untuk ini, tetapi umumnya programmer harus berpikir: " Apakah ada cara saya bisa parameterisasi kode ini yang saya salin? ".
sumber
Sebagian besar programmer melakukannya, tetapi itu tidak berarti Anda harus melakukannya
Salah satu mantra pemrograman saya adalah: "Jika saya menyalin dan menempelkan kode, saya melakukan sesuatu yang salah" . Intinya, KERING .
Saya pikir itu harus jelas bahwa penggunaan kembali kode berarti menggunakan kode sebagai sumber daya, bukan kode berulang. Terkadang saya menyalin dan menempelkan kode kode saya sendiri, pada kebanyakan kasus saya diakhiri dengan kode pelat boiler atau hal-hal yang terlihat sangat mirip.
Setelah menginvestasikan lebih banyak waktu dengan kode itu kemudian saya berakhir dengan yang berikut:
Dapat diperdebatkan apakah kita harus menyalin atau menempelkan kode karena klien / bos tidak peduli (setidaknya secara langsung dan dalam jangka pendek) dan Anda mungkin berakhir dengan hasil yang sama, tetapi masalahnya benar-benar muncul ketika itu menyebabkan bug, kehilangan modularitas, dan akhirnya, pemeliharaan neraka.
Apa yang harus Anda lakukan: refactor ASAP
Tidak ada yang menulis kode yang sempurna, bahkan jika itu berfungsi, bahkan ketika Anda tidak menyalin & menempel dan itu adalah kode Anda sendiri, jika Anda tidak cukup puas dengan itu hanya menulis catatan di komentar (mis. Blokir "@todo") untuk mengingatkan diri Anda sendiri apa yang harus refactor dan mengapa ... bahkan jika Anda tidak refactor sendiri, itu mungkin menjadi perbedaan antara kebahagiaan dan frustrasi total untuk pengelola.
Akhirnya, Anda akan berakhir dengan kode yang bagus pada akhirnya, bahkan jika Anda menyalin dan menempel.
melalui XKCD
sumber
Ketika saya terjebak dan mencari hal-hal untuk menyelesaikan masalah saya dan terjadi pada beberapa potongan kode yang membantu yang saya inginkan, saya menyalinnya secara alami. Terkadang itu adalah intinya. Saya kemudian mengubahnya sesuai kebutuhan saya. Ini lebih sering terjadi ketika saya mempelajari hal-hal yang saya tidak ahli dalam (saat ini, Objective-C).
Saya selalu meluangkan waktu untuk belajar sesuatu dari kode, jadi bagi saya itu adalah cara yang bagus untuk belajar dan menghindari menciptakan kembali roda.
sumber
Saya akan berbicara tentang menyalin / menempelkan kode orang lain di sini. Meraih bagian dari karya saya sendiri dari perpustakaan pribadi saya adalah permainan yang adil. Saya mengenal mereka dan memahaminya menurut definisi.
Saya menemukan bahwa situasi paling sering di mana saya "cut & paste" kode adalah ketika saya memiliki masalah tertentu dan saya mengalami posting blog yang menyelesaikannya. Seringkali saya mengetik ulang solusi ke proyek saya (setelah semua, itu mungkin ditulis dalam gaya penulis blog, jika tidak ada yang lain). Ini bukan kode saya yang sebenarnya , tetapi saya tidak merasa sedih untuk menggunakannya dalam skenario itu.
Keluar dan mengambil seluruh metode atau sistem untuk menempelkannya ke dalam proyek saya apa adanya dan menyebutnya selesai adalah sesuatu yang saya tidak mengerti. Ada pertanyaan tentang StackOverflow tempo hari yang dengan sempurna menggambarkan masalah dengan melakukan sesuatu seperti itu.
Berbaur bersama monster Frankenstein dari bagian kode yang berbeda tidak bisa semudah itu. Maksud saya, jika Anda ahli dalam hal itu, itu berarti Anda mereplikasi solusi yang sama berulang-ulang atau Anda telah memperoleh pemahaman yang cukup tentang kode orang lain sehingga tingkat copy / paste yang sama tidak lagi diperlukan dan Anda produktivitas akan meningkat karena tidak harus menyelesaikan masalah antara contoh kode yang tidak kompatibel.
Saya pribadi belum bertemu banyak programmer yang menyalin / menempel dalam skala besar. Saya telah melihat banyak orang yang mengkodekan diri mereka sendiri ke sudut terdalam dan paling gelap, tapi itu cerita yang berbeda. Berdasarkan anekdata pribadi saya, saya akan mengatakan bahwa sebagian besar programmer tidak menyalin / menempelkan seluruh aplikasi secara bersamaan, tetapi sangat sulit untuk mengatakannya dengan pasti.
sumber
Buruk: Menyalin dan menempel blok kode yang sama berulang kali
Jika Anda menemukan diri Anda melakukan ini, Anda mungkin harus berpikir sejenak tentang apa yang dapat diabstraksi dari kode yang sedang disalin dan membuat fungsi / metode untuk menanganinya. Di sinilah prinsip KERING (Jangan Ulangi Diri Sendiri) penting.
Bagus: Menyalin satu blok kode yang diketahui berfungsi
KERING (Jangan Ulangi Diri Sendiri) juga berlaku di sini, hanya dalam arti yang berbeda. Yaitu, jangan ulangi pekerjaan yang sudah Anda lakukan di masa lalu. Jika Anda telah meluangkan waktu untuk menulis bagian kode, men-debug, mengujinya, dan terbukti bekerja dalam basis kode produksi; Anda akan bodoh untuk tidak menggunakannya kembali.
Kebanyakan orang memberikan copy-paste paste buruk karena banyak programmer pemula menghabiskan waktu mereka menjelajahi internet dan menyalin / menempelkan kesalahan kode orang lain tanpa memahami apa yang sebenarnya dilakukannya.
Menulis semuanya dari awal setiap kali tidak lebih baik. Saya tahu ada banyak programmer purist sekolah tua yang semuanya harus ditulis dari awal dan saya harap saya tidak terjebak bekerja dengan mereka. Jika Anda memiliki pengalaman pemrograman 5 tahun, Anda harus memiliki pustaka kode yang cukup substansial yang utama untuk digunakan kembali. Ini adalah salah satu aset terbaik yang dapat dibawa oleh programmer berpengalaman ke meja karena berpotensi menghemat banyak waktu pengembangan.
Jika Anda tidak mengerti dengan kode lama Anda pada mulanya, luangkan waktu sejenak untuk membaca komentar dan membiasakan diri Anda kembali. Jika komentar Anda payah ... baik, itu masalah lain sama sekali.
sumber
Setelah 25 tahun menulis kode, ada saatnya (tanpa akses ke kode yang saya tulis untuk majikan sebelumnya) saya berharap bisa memotong dan menempel. NAMUN ini sangat jarang (dan terus membaca).
Mungkin contoh terbaik adalah parser baris perintah yang sangat sederhana yang saya temui bertahun-tahun yang lalu untuk sistem operasi unix. Loop sederhana yang membuka argumen dan memproses opsi. Itu sangat sederhana dan elegan, dan saya telah menggunakan itu (lebih sebagai pola daripada memotong dan menempel secara harfiah) berkali-kali sejak itu. Ini adalah pengecualian daripada aturannya.
Biasanya cut and paste ole benar-benar tidak pantas - ini lebih memotong dan menyisipkan konsep, atau algoritma, yang telah penting.
Saya tidak terlalu bangga - Saya akan dengan senang hati mencari-cari untuk menemukan algoritma paritas yang sangat cepat atau kode verifikasi hamming atau sesuatu yang eksotis seperti itu. Kemudian habiskan beberapa jam untuk memahaminya untuk melihat apakah itu benar-benar hal super cepat yang saya kejar, atau tumpukan sampah yang naif.
Saya khawatir setiap kali ada orang yang hanya menyalin kode tanpa berhenti untuk memahaminya. Mereka bisa saja jenius (mengerti dan seluk beluknya dalam sekejap), atau bodoh. Tidak ada banyak ruang untuk apa pun di antaranya. Oh, dan juga tidak ada banyak genius sejati.
Tanpa pemahaman, Anda benar-benar tidak tahu apa yang baru saja Anda lemparkan di BENAR-BENAR tidak, di bawah tidak hanya bahagia tetapi juga keadaan yang tidak bahagia atau kondisi input. Terkadang ini tidak masalah karena Anda beruntung. Dan kadang-kadang ini membuat rasa sakit jangka panjang.
sumber
Ada situasi umum di mana Anda pada dasarnya PERLU untuk melakukannya agar menjadi produktif.
Teknologi apa pun yang asing bagi Anda sulit dipelajari kecuali Anda memiliki contoh yang bagus untuk memulai. Karenanya, Anda menyalin dan menempelnya agar memiliki sesuatu yang benar-benar berjalan , dan kemudian mulai bermain-main dengannya.
sumber
Sebagai programmer baru (4 bulan ke pekerjaan pertama saya), saya mengandalkan bantuan cukup banyak (baik dari SO atau tempat lain). Saya menekankan TIDAK menyalin dan menempelkan kode orang lain secara membuta. Bahkan jika kode yang disediakan adalah apa yang akan saya gunakan, saya akan mengetiknya ke dalam program saya dan kemudian menghabiskan sedikit waktu memastikan saya benar-benar mengerti apa yang dilakukannya dan alasannya.
Saya ingin memastikan bahwa saya terus-menerus belajar dan bukan hanya ahli memotong dan menempel
sumber
Saya memiliki banyak perasaan tentang topik ini, dan saya tidak dapat dengan jujur mengatakan salah satu dari mereka sepenuhnya objektif.
Ada banyak argumen untuk memotong dan menempelkan kode orang lain ke dalam aplikasi Anda. Beberapa dari mereka mungkin masuk akal, beberapa mungkin tidak. Misalnya, jika Anda memiliki metode dari blog seseorang yang mengambil input dan menjalankan beberapa algoritma matematika rumit yang jauh di luar kemampuan matematika Anda dan mengeluarkan hasilnya - itu argumen untuk memotong dan menempel - dapatkan izin penulis untuk menggunakan mereka kode dan kredit mereka di mana karena - itu hal yang terhormat untuk dilakukan.
Ada argumen untuk tidak menciptakan kembali roda - lagi, ini masuk akal, secara teori. Tetapi jika Anda tidak meluangkan waktu untuk menjadi akrab dengan kode yang Anda potong dan tempelkan, Anda tidak tahu apakah ada cara yang lebih baik untuk menyelesaikan masalah ini, Anda tidak tahu apakah ada bug dalam kode tersebut . Bagaimana jika roda yang Anda tempel rusak?
Ada argumen untuk kecepatan dan efisiensi - Anda membangun perpustakaan kode orang lain yang telah Anda rampas, curi, jiplakan atau sebaliknya, kalau dipikir-pikir, Anda mungkin tidak perlu tahu cara memprogram di luar Frankensteining beberapa aplikasi bersama-sama dari bagian reklamasi.
Ada waktu dan tempat di mana saya menganggap perilaku ini sepenuhnya dapat diterima. Untuk meretas bersama alat membuang cepat yang tidak dirancang untuk umur panjang tetapi untuk menyelesaikan tugas, saat ini dengan cara apa pun. Untuk tujuan membuat prototipe dan mempelajari persetujuan, untuk belajar dan maju dalam konteks teoretis, saya pikir ini adalah permainan yang sepenuhnya adil.
Memotong dan menempelkan kode orang lain adalah plagiarisme - jika Anda memiliki berkah dan Anda memahami kode yang Anda tempelkan dan itu sesuai dengan konstruksi standar pengkodean untuk aplikasi Anda, maka baiklah, saya akan mengakui itu adalah permainan yang adil.
Sebagai seorang insinyur perangkat lunak profesional, saya dibayar untuk mempertahankan standar dan kode etik. Saya tidak dibayar untuk mencuri, menjiplak, atau melanggar hak cipta orang lain sehingga membahayakan klien saya. Selain itu, ada risiko yang sangat nyata bahwa ketika Anda menjalankan kode cut / paste kata itu memiliki efek samping bencana.
Tidak menargetkan jawaban ini pada Anda John, saya tahu Anda cenderung secara etis ketika datang ke topik seperti ini, jadi ini benar-benar hanya kata-kata kasar umum ke arah pertanyaan itu sendiri.
Tambahan : Yang mengatakan, saya merasa bahwa memotong dan menempelkan kode Anda sendiri antara proyek cukup dapat diterima - kecuali itu ditulis sebagai pekerjaan-untuk-menyewa untuk orang lain, dalam hal ini Anda tidak memiliki hak cipta dan Anda harus mendapatkan izin dari orang yang Anda kodekan. Saya telah menemukan bahwa kecuali jika kode tersebut berkaitan dengan konsep fungsional hak milik, sebagian besar pengusaha tidak keberatan Anda menggunakan kembali ide-ide Anda sendiri untuk klien lain.
sumber
Mengingat bahwa, dalam satu repositori open source, 15% dari semua metode disalin dari satu proyek ke proyek lain (pdf), jawabannya tampaknya jelas ya.
sumber
Jika kodenya bagus maka alih-alih salin dan tempel itu harus dibuat menjadi perpustakaan umum. Tetapi orang-orang tidak dapat diganggu dengan refactoring dan mereka lebih memilih untuk memiliki fungsionalitas yang sama disebarkan oleh copy dan metode.
Alih-alih memiliki hukum absolut universal tentang salin dan rekat baik atau buruk, orang harus melihat kapan menggunakannya.
Pro untuk salin dan tempel adalah: Membuat Anda berjalan cepat Kontra adalah: Kode yang sama tersebar di beberapa tempat dan setiap masalah yang ditemukan / dipecahkan perlu dipecahkan di mana-mana, jika alih-alih menyalin dan menempelkan yang digunakan sebagai perpustakaan umum maka pembaruan akan merambat ke mana-mana. Untuk investasi awal kecil menggunakan perpustakaan alih-alih menyebarkan kode yang sama di mana-mana berjenis.
Pilihannya adalah apakah menghemat sedikit waktu awalnya dibandingkan dengan banyak kemudian, kemudian salin dan tempel adalah cara untuk pergi, jika tidak refactore dan letakkan di perpustakaan umum.
sumber
Dalam kebanyakan kasus, kode yang Anda temukan di internet tidak sesuai dengan tujuan Anda.
Apa yang saya lihat banyak dilakukan adalah menyalin kode dari seseorang, menelanjanginya sampai ke esensi dan kemudian menambahkan kode sampai memenuhi persyaratan saya. Saya akan selalu memperbaikinya agar sesuai dengan konvensi penamaan dan gaya penulisan saya.
Saya pribadi benci ketika saya membaca tutorial dan mereka mulai dengan menunjukkan kode untuk kasus yang rumit. Mulai dengan esensi dan tunjukkan blok bangunan untuk memperpanjang kode. Jika saya pernah memulai blog sendiri, saya akan memberikan orang dengan contoh kode komentar yang menunjukkan inti dari apa yang ingin saya lakukan, bagaimana Anda dapat menambahkan fungsionalitas / kasus khusus dan contoh fitur dasar yang berfungsi penuh.
sumber
Mengapa menemukan kembali roda jika Anda mengerti apa yang dilakukan kode, memiliki izin untuk menggunakan kembali kode (atau terbuka), dan Anda tidak perlu semua kode yang ditulis orang lain. Saya sering menyalin implementasi algoritma dan memodifikasinya untuk kebutuhan saya sendiri. Biasanya meskipun ketika saya hanya memotong dan menempelkannya karena saya tidak memerlukan semua yang ada dalam contoh sehingga menambahkan file lain hanya akan menjadi sia-sia (atau itu adalah sesuatu di dalam suatu fungsi). Saya setuju dengan jzd jika Anda memotong dan menempelkan kode Anda sendiri dalam proyek yang sama maka ada beberapa kesalahan dan Anda mungkin harus mencari cara ekonomis baik untuk Lib atau berbagi fungsi.
sumber
Saya menemukan bahwa anggota tim " integrasi " atau mereka yang tidak memiliki banyak pengalaman dengan kode atau dalam pemrograman cenderung lebih sering menyalin & menempel dan tidak memahami apa yang mereka lakukan (masuk ke masalah yang disebutkan dalam pertanyaan Anda).
Saya juga menemukan bahwa programmer sering menjauh dari cut & paste ke chagrin mereka sendiri karena mereka suka kode dan sering menemukan kembali roda, hanya karena mereka ingin melakukannya lebih baik atau belajar lebih banyak.
sumber