โปรแกรมเมอร์ส่วนใหญ่คัดลอกและวางรหัสหรือไม่ [ปิด]


48

ฉันเรียนรู้ตั้งแต่เนิ่นๆว่าการตัดและวางโค้ดของคนอื่นใช้เวลานานกว่านั้นในระยะยาวที่เขียนด้วยตัวคุณเอง ในความคิดของฉันถ้าคุณไม่เข้าใจจริงๆรหัส cut & paste อาจมีปัญหาซึ่งจะเป็นฝันร้ายที่จะแก้ไข

อย่าเข้าใจฉันผิดฉันหมายถึงการค้นหารหัสประชาชนอื่น ๆ และการเรียนรู้จากมันเป็นสิ่งจำเป็น แต่เราไม่เพียงแค่วางลงในแอปของเรา เราเขียนแนวคิดใน app ของเรา

แต่ฉันได้ยินเกี่ยวกับคนที่ถูกตัดและวางอย่างต่อเนื่องและพวกเขาพูดถึงมันเหมือนเป็นเรื่องธรรมดา ฉันเห็นความคิดเห็นของผู้อื่นซึ่งแสดงว่าเป็นเรื่องธรรมดา

ดังนั้นโปรแกรมเมอร์ส่วนใหญ่จะตัดและวางรหัสหรือไม่


10
แม้ว่าฉันจะรู้วิธีการทำบางสิ่งบางอย่างฉันก็มักจะค้นหาตัวอย่างโค้ดสำหรับแนวทางปฏิบัติที่ดีที่สุด เมื่อคุณสามารถอ่านรหัสคุณสามารถบอกได้อย่างรวดเร็วว่าสิ่งที่คุณค้นหาดีกว่าแผนของคุณหรือไม่
Nicole

มีคำถามเกี่ยวกับการตัด & วางค่อนข้างเร็ว ๆ นี้ ทำไมคุณไม่ตรวจสอบออก ?
Naurgul

ถ้าฉันเข้าใจมัน
johnny

คำตอบ:


46

สองกรณีทั่วไป:

จากโครงการหนึ่งไปอีกโครงการหนึ่ง:

โปรแกรมเมอร์ส่วนใหญ่ตัดและวางรหัสในความสามารถนี้ พวกเขาอาจพบโครงการก่อนหน้าหรือบางสิ่งบางอย่างออนไลน์และคัดลอก / วางอย่างแน่นอนหรือคัดลอก / วางและทำการเปลี่ยนแปลง ฉันคิดว่าการฝึกนี้ปกติแล้วจะดี นี่เป็นสิ่งที่ดีโดยเฉพาะอย่างยิ่งเมื่อมีการพิสูจน์โค้ด (ตัวอย่าง: วัตถุยูทิลิตี้บางอย่างจากโครงการที่ผ่านมาซึ่งทำงานได้ดีหรืออาจมาจากบล็อกที่มีการเปลี่ยนแปลงเล็กน้อยที่จำเป็น) สิ่งนี้อาจไม่ดีคือเมื่อคุณคัดลอกรหัสที่คุณไม่เข้าใจหรือที่รหัสไม่ดีหรือที่มีทางเลือกอื่นที่ดีกว่ารหัสที่คุณวาง

ภายในโครงการเดียวกัน: โดยทั่วไปการ คัดลอกและวางในโครงการเดียวกันนั้นไม่ใช่ความคิดที่ดี นี่เป็นกลิ่นเหม็นที่โค้ดที่กำลังคัดลอกควรอยู่ในวิธี / คลาสและเรียกซ้ำหลายครั้ง มีข้อยกเว้นบางประการ แต่โดยทั่วไปโปรแกรมเมอร์ควรคิดว่า: " มีวิธีที่ฉันสามารถทำให้พารามิเตอร์นี้เป็นรหัสที่ฉันกำลังคัดลอก? "


5
โดยทั่วไปนี่เป็นความจริงเว้นแต่ว่าคุณจะเขียนโค้ดที่ต้องมีรูปแบบการต่อต้านเช่นในกรณีที่มีรหัสต่อต้านการรบกวนเช่นการให้สิทธิ์ใช้งานซอฟต์แวร์
Rob Perkins

+1 ใช่ฉันทำทั้งสองอย่างแล้ว ฉันยังไม่ได้ทำการตัดและวางโค้ดจากภายในโครงการเดียวกันเป็นเวลานาน (แม้ว่าฉันจะยอมรับว่าไม่ค่อยทำภายใต้แรงกดดันอย่างมากกับข้อผิดพลาดที่บันทึกไว้เพื่อกลับมาใช้ใหม่) สำหรับคลาสยูทิลิตี้ตอนนี้โปรเจ็กต์ของฉันไปยังการคัดลอกโปรเจ็กต์ได้ถูกแยกออกเป็นการคัดลอกไฟล์ทั้งหมด
John MacIntyre

2
เมื่อเขียนรหัสฐานข้อมูลฉันมักจะตัดและวางบางส่วนลงในฟังก์ชั่นใหม่และแก้ไข sql เองเพื่อให้ได้ผลลัพธ์ตามที่ต้องการและไม่ต้องกังวลกับตัวเองด้วยการพิมพ์ข้อกำหนดเบื้องต้นบางอย่างเพื่อทำการเรียกฐานข้อมูลดังกล่าว แม้ว่าโดยทั่วไปแล้วฉันเห็นด้วยกับคำพูดทั้งสอง
Chris

1
@Chris: คัดลอกและปรับเปลี่ยนหัวใจของมันแตกต่างกันมากเพียงวางมันตามที่เป็นอยู่
Loren Pechtel

1
@ Loren Pechtel: ยังคงเกี่ยวข้องกับการคัดลอกและวางรหัส
Chris

37

โปรแกรมเมอร์ส่วนใหญ่ทำ แต่ไม่ได้หมายความว่าคุณควรทำ

หนึ่งในมนต์การเขียนโปรแกรมของฉันคือ: "ถ้าฉันกำลังคัดลอกและวางโค้ด, ฉันกำลังทำอะไรผิดพลาด" หลักแห้ง

ฉันคิดว่ามันควรจะชัดเจนว่าการใช้รหัสซ้ำหมายถึงการใช้รหัสเป็นทรัพยากรไม่ใช่การทำซ้ำรหัส บางครั้งฉันได้คัดลอกและวางรหัสของฉันเองโดยส่วนใหญ่แล้วฉันจะลงท้ายด้วยรหัสรหัสหรือสิ่งที่มีลักษณะคล้ายกันมาก

หลังจากลงทุนไปกับรหัสนั้นหลังจากนั้นฉันก็ลงท้ายด้วยสิ่งต่อไปนี้:

  • ส่วนประกอบ (ดูเพิ่มเติมที่: แยกของความกังวล )
  • ฉันสามารถใช้การไตร่ตรองเพื่อทำให้สิ่งต่าง ๆ เรียบง่ายสะอาดและง่ายขึ้นในอนาคต
  • การออกแบบที่ดีขึ้นเพราะแม้ว่ามันจะได้ผลทำไมไม่ทำมันซ้ำอีกหลังจากเรียนบทเรียนแล้ว?
  • รูปแบบที่ฉันสามารถทำให้เป็นนามธรรมเปลี่ยนเป็นองค์ประกอบของไลบรารีและลบรหัสที่ซ้ำกันได้

อาจเป็นที่ถกเถียงกันว่าเราควรหรือไม่ควรคัดลอกและวางรหัสเนื่องจากลูกค้า / เจ้านายไม่สนใจ (อย่างน้อยโดยตรงและในระยะสั้น) และคุณอาจจบด้วยผลลัพธ์เดียวกัน แต่ปัญหาเกิดขึ้นจริงเมื่อมัน นำไปสู่ข้อบกพร่องการสูญเสียของต้นแบบและในที่สุดนรกบำรุงรักษา

สิ่งที่คุณควรทำ: refactor โดยเร็ว

ไม่มีใครเขียนรหัสที่สมบูรณ์แบบแม้ว่ามันจะใช้งานได้แม้ว่าคุณจะไม่ได้คัดลอกและวางและมันเป็นรหัสของคุณเองถ้าคุณไม่พอใจกับมันเพียงแค่ใส่บันทึกในความคิดเห็น (เช่น docblock "@todo") เพื่อเตือน ตัวคุณเองจะต้องทำอะไรและทำไม ... แม้ว่าคุณจะไม่ได้ปรับโครงสร้างด้วยตัวคุณเองมันอาจกลายเป็นความแตกต่างระหว่างความสุขและความหงุดหงิดทั้งหมดสำหรับผู้ดูแล

ในที่สุดคุณจะจบด้วยรหัสที่ดีในที่สุดแม้ว่าคุณจะคัดลอกและวาง

รหัสที่ดี

ผ่านXKCD


15
ฉันมักจะเห็น "refactor ในภายหลัง" เปลี่ยนเป็น "refactor ไม่เคย" หรือแย่ลงกว่าเดิม "ฉันเป็นคนที่ร้อนแรงมาก ๆ SUCKER คนอื่น ๆ สามารถ refactor และแก้ไขรหัสที่เกือบจะ แต่ไม่ค่อนข้างใช้ได้" ฉันเป็นผู้เชื่อในการทำสิ่งนั้นให้ถูกต้องไม่อย่างนั้นมันก็เป็นอย่างวันพรุ่งนี้ - ไม่เคยมา
quick_now

1
@quickly_now - อีกครั้ง: "ฉันเป็นคนที่น่าประทับใจ SUCKER คนอื่น ๆ สามารถ refactor และแก้ไขรหัสที่เกือบจะ แต่ไม่ค่อนข้างใช้ได้" ... ฉันไม่สามารถแสดงให้คุณเห็นว่าฉันเกลียดคนกระตุกมากแค่ไหน
John MacIntyre

เฮ้จอห์น ฉันได้ยินคุณ. ฉันใช้เวลาหลายปีในชีวิตของฉันในการเป็นคนดูด ... จ่ายเงินครึ่งหนึ่งและเหนื่อยจนเที่ยงคืนได้รับความเข้าใจที่ดีจริง ๆ ว่าเกิดอะไรขึ้น (และเขียนแผ่นรหัส crap ขนาดใหญ่อีกครั้ง) - ในขณะที่กระสุนร้อนพุ่งขึ้น อื่น ๆ อีก. ถอนหายใจ
quick_now

1
ผู้คนในทีมมากขึ้นยิ่ง "refactor ในภายหลัง" มากขึ้นก็จะกลายเป็น "refactor ไม่เคย" เท่าที่ฉันเห็น: /
wildpeaks

8

เมื่อฉันติดขัดและค้นหาสิ่งต่าง ๆ เพื่อแก้ไขปัญหาของฉันและเกิดขึ้นกับข้อมูลโค้ดที่เป็นประโยชน์ซึ่งทำในสิ่งที่ฉันต้องการ บางครั้งมันเป็นเพียงส่วนสำคัญของมัน จากนั้นฉันเปลี่ยนเป็นชุดที่ตรงกับความต้องการของฉัน สิ่งนี้เกิดขึ้นบ่อยขึ้นเมื่อฉันขุดคุ้ยสิ่งที่ฉันไม่ชำนาญใน (ปัจจุบันคือ Objective-C)

ฉันมักจะใช้เวลาในการเรียนรู้อะไรบางอย่างจากรหัสดังนั้นสำหรับฉันมันเป็นวิธีที่ดีในการเรียนรู้และเพื่อหลีกเลี่ยงการหมุนวนของล้อ


4
ฉันเคยพูดเสมอว่า 'นักพัฒนาที่ดีคือนักพัฒนาที่ขี้เกียจ' ฉันไม่ได้คิดค้นล้อใหม่ถ้าคนอื่นทำไปแล้ว แต่ฉันทำให้มันเล็ก ... ฉันไม่เคยคัดลอกโค้ดมากกว่าสองสามบรรทัดและไม่เคยเข้าใจอะไรเลย
morganpdx

ฉันทั้งหมดเพื่อการเรียนรู้จากผู้อื่น แต่คุณไม่พบว่าถ้าคุณกำลังมองหาปัญหาเฉพาะเพียงห่อหุ้มหัวของคุณในสิ่งที่คนอื่นทำคือใช้เวลามากขึ้นที่เพิ่งทำตั้งแต่เริ่มต้น? (แจ้งให้ทราบฉันกำลังพูดถึง 'รหัส' หน่วยการทำงานที่ไม่สมบูรณ์เช่นคลาส ฯลฯ ... )
John MacIntyre

@John MacIntyre อาจเป็นได้ แต่โดยปกติแล้วเมื่อฉันแสดงตัวอย่างข้อมูลโค้ดขนาดเล็กฉันจะสร้างมันจนกว่าฉันจะพอใจ บ่อยครั้งที่จะต้องมีการปรับ (เป็นฟังก์ชั่น, ทั่วไป, ปรับปรุง, เพิ่มประสิทธิภาพ ฯลฯ ) ต่อไป
Martin Wickman

@John: ตัวอย่างรหัสระบุชิ้นส่วนเหล่านั้นที่แสดงวิธีการทำสิ่งต่าง ๆ แน่นอนตัดและวาง แต่อย่างที่มาร์ตินชี้ให้เห็น - เรียนรู้ว่าโค้ดนั้นทำอะไร คุณจะใช้เวลามากขึ้นในการค้นหาวิธีการเฉพาะที่คุณไม่รู้จักชื่อ เมื่อคุณไม่รู้ความหมายของคำ; คุณค้นหาในพจนานุกรม คำจำกัดความชัดเจน 100%; แต่คุณดูตัวอย่างการใช้งานบ่อยแค่ไหน? ตัวอย่างรหัสเป็นเหมือนตัวอย่างการใช้พจนานุกรม MSDN ไม่ได้รวมตัวอย่างการใช้งานเสมอไปหรือมักจะไม่สมบูรณ์
IAbstract

6

ฉันจะพูดเกี่ยวกับการคัดลอก / วางรหัสของคนอื่นที่นี่ การหยิบจับชิ้นงานจากห้องสมุดส่วนตัวของฉันเป็นเกมที่ยุติธรรม ฉันรู้จักพวกเขาและเข้าใจพวกเขาตามคำจำกัดความ

ฉันพบว่าสถานการณ์ที่พบบ่อยที่สุดที่ฉัน "ตัดและวาง" รหัสคือเมื่อฉันมีปัญหาเฉพาะและฉันพบในโพสต์บล็อกที่แก้มัน เวลาส่วนใหญ่ฉันพิมพ์โซลูชันลงในโครงการของฉันอีกครั้ง (อาจเป็นเพราะเขียนในสไตล์ของผู้เขียนบล็อกหากไม่มีสิ่งอื่น) มันไม่ใช่รหัสของฉันแต่ฉันก็ไม่รู้สึกแย่กับการใช้มันในสถานการณ์นั้น

การออกไปและคว้าวิธีหรือระบบทั้งหมดเพื่อวางลงในโครงการของฉันตามที่เป็นอยู่และเรียกมันว่าเสร็จแล้วเป็นสิ่งที่ฉันไม่เข้าใจ มีคำถามหนึ่งเกี่ยวกับ StackOverflowเมื่อวันก่อนที่แสดงให้เห็นถึงปัญหาที่สมบูรณ์แบบด้วยการทำบางสิ่งเช่นนั้น

การประกอบกันเป็นสัตว์ประหลาดของแฟรงเกนสไตน์ด้วยส่วนต่าง ๆ ของรหัสนั้นไม่สามารถมีประสิทธิภาพทั้งหมดได้ ฉันหมายความว่าถ้าคุณทำได้ดีนั่นหมายความว่าคุณทำซ้ำโซลูชันเดียวกันซ้ำแล้วซ้ำอีกหรือคุณได้รับความเข้าใจอย่างเพียงพอเกี่ยวกับรหัสของคนอื่นว่าการคัดลอก / วางในระดับเดียวกันนั้นไม่จำเป็นอีกต่อไปแล้ว ผลผลิตจะดีขึ้นโดยไม่ต้องแก้ไขปัญหาระหว่างตัวอย่างรหัสที่เข้ากันไม่ได้

โดยส่วนตัวฉันยังไม่ได้พบโปรแกรมเมอร์หลายคนที่คัดลอก / วางในขนาดใหญ่ ฉันเห็นคนมากมายที่เขียนรหัสตัวเองในมุมที่ลึกที่สุดและมืดที่สุด แต่นั่นเป็นเรื่องที่แตกต่าง จากข้อมูลส่วนบุคคลของฉันฉันจะบอกว่าโปรแกรมเมอร์ส่วนใหญ่ไม่ได้คัดลอก / วางแอปพลิเคชันทั้งหมดเข้าด้วยกัน แต่ก็ยากที่จะบอกได้อย่างแน่นอน


1
บางทีโปรแกรมเมอร์จำนวนมากไม่ได้คัดลอก / วางรหัสที่เกิดขึ้นจริงในขนาดใหญ่ แต่พวกเขามีความสุขที่จะใช้ประโยชน์จากห้องสมุดสำเร็จรูป (ฟรีหรืออื่น ๆ ) โดยไม่ต้องมองหาที่บรรทัดเดียวของรหัส ...
hplbsh

1
@ Stuart จริง แต่ฉันคิดว่าความแตกต่างนั่นคือห้องสมุดนั้นจะไม่ถูกอ้างสิทธิ์เป็นผลงานของโปรแกรมเมอร์เอง และตรงไปตรงมาตราบใดที่ห้องสมุดทำงานและทำในสิ่งที่ฉันต้องการจะทำ (สมมติว่าขยันเนื่องจากทำอย่างอื่นในวิธีการที่มีชื่อเสียง / ความน่าเชื่อถือห้องสมุดเป็นครั้งแรก)
Adam Lear

ในทางที่มันเป็นเรื่องของความตั้งใจทั้งในส่วนของผู้จัดพิมพ์และผู้บริโภค :)
hplbsh

@ Stuart - ฉันจะไม่รวมห้องสมุดในการสนทนานี้เพราะมันเป็นหน่วยที่ติดต่อกัน ... ไม่ได้รหัส 'แพ้' ถ้าคุณรู้ว่าฉันหมายถึงอะไร
John MacIntyre

จริง ๆ แล้วคิดเกี่ยวกับความคิดเห็นของคุณฉันจริง ๆ ต้องสงสัยว่าเป็นไปได้สำหรับโปรแกรมเมอร์เพื่อตัด & วางระบบที่สมบูรณ์เข้าด้วยกัน ฉันคิดว่าน้ำหนักของความโอหังของพวกเขาจะถล่มอย่างรวดเร็วทำให้ความก้าวหน้าของพวกเขาหยุดนิ่ง
John MacIntyre

4

ไม่ดี: การคัดลอกและวางบล็อคโค้ดเดียวกันซ้ำแล้วซ้ำอีก

หากคุณพบว่าคุณกำลังทำสิ่งนี้อยู่คุณอาจต้องใช้เวลาคิดสักครู่ในการคัดลอกโค้ดที่ถูกคัดลอกและสร้างฟังก์ชัน / วิธีการเพื่อจัดการมัน นี่คือที่หลักการ DRY (อย่าทำซ้ำตัวเอง) นับ

ดี: การคัดลอกบล็อกของรหัสที่ใช้งานได้

DRY (อย่าทำซ้ำตัวเอง) ก็ใช้ที่นี่เช่นกันในแง่ที่ต่างออกไป IE, อย่าทำงานซ้ำที่คุณทำไปแล้วในอดีต หากคุณใช้เวลาในการเขียนส่วนของรหัสตรวจแก้จุดบกพร่องทดสอบและพิสูจน์แล้วว่าทำงานในฐานรหัสการผลิต คุณจะโง่ไม่ได้ใช้ซ้ำ

คนส่วนใหญ่ให้การคัดลอก - วางแร็พที่ไม่ดีเพราะโปรแกรมเมอร์มือใหม่หลายคนใช้เวลาของพวกเขากำจัดสิ่งสกปรกบนเน็ตและคัดลอก / วางรหัสผิดของคนอื่นโดยไม่เข้าใจว่ามันทำอะไร

การเขียนทุกอย่างตั้งแต่เริ่มต้นทุกครั้งไม่ได้ดีไปกว่านี้แล้ว ฉันรู้ว่ามีนักเขียนโปรแกรมเก่าแก่โรงเรียนจำนวนมากที่ทุกอย่างควรเขียนตั้งแต่เริ่มต้นและฉันหวังว่าฉันจะไม่ทำงานกับพวกเขา หากคุณมีประสบการณ์การเขียนโปรแกรม 5 ปีคุณควรมีไลบรารี่ของโค้ดที่สำคัญซึ่งเหมาะสำหรับการนำกลับมาใช้ใหม่ มันเป็นหนึ่งในสินทรัพย์ที่ดีที่สุดที่โปรแกรมเมอร์ผู้มีประสบการณ์สามารถนำมาให้ตารางเพราะมันจะช่วยประหยัดเวลาในการพัฒนาได้มาก

หากคุณไม่เข้าใจว่ารหัสเก่าของคุณทำอะไรในตอนแรกใช้เวลาสักครู่เพื่ออ่านความคิดเห็นและทำความคุ้นเคยกับตัวคุณเองใหม่ หากความคิดเห็นของคุณดูด ... เอาละนั่นเป็นอีกประเด็นหนึ่งโดยสิ้นเชิง


แทนที่จะเป็นการคัดลอกและวางรหัสเป็นไปได้ทั้งหมดที่จะเขียนด้วยวิธีที่สามารถใช้ซ้ำได้ จากนั้นใช้สิ่งนั้นแทนการคัดลอกและวาง
Bjorn

1
@BjornTipling ใช่แล้วมันมักจะดีกว่าที่จะทำลายรหัสลงในฟังก์ชั่นที่นำกลับมาใช้ใหม่เว้นแต่ว่ากระบวนการนั้นจะเพิ่มความซับซ้อนและรหัสจะไม่ถูกนำมาใช้ซ้ำ
Evan Plaice

หากคุณกำลังคัดลอกและวางคุณจะใช้ซ้ำ ฉันเห็นด้วยคนควรใช้หัวของพวกเขาและเงื่อนไขที่อาจรับประกันได้ ฉันพบว่าตัวเองกำลังคัดลอกและวางเมื่อเขียนแบบทดสอบ แต่ถึงแม้ว่าฉันพยายามสร้างฟังก์ชั่นที่ใช้ซ้ำได้ แต่มีสองหรือสามบรรทัดที่เกือบจะเหมือนกัน แต่ฉันไม่สามารถพูดคุยได้พอที่จะกลายเป็น ฟังก์ชั่นนำมาใช้ใหม่
Bjorn

3

หลังจากเขียนรหัสมา 25 ปีมีหลายครั้งที่ (ที่ฉันไม่สามารถเข้าถึงรหัสที่ฉันเขียนให้กับนายจ้างคนก่อน ๆ ได้) ฉันหวังว่าฉันจะสามารถตัดและวางได้ อย่างไรก็ตามสิ่งนี้หาได้ยากมาก (และอ่านต่อไป)

บางทีตัวอย่างที่ดีที่สุดคือตัวแยกวิเคราะห์บรรทัดคำสั่งที่เรียบง่ายจริงๆที่ฉันเจอเมื่อหลายปีก่อนสำหรับระบบปฏิบัติการยูนิกซ์ การวนซ้ำแบบง่าย ๆ ผ่าน args และประมวลผลตัวเลือก มันเรียบง่ายและสง่างามและฉันใช้มัน (มากกว่าเป็นลวดลายมากกว่าการตัดและวางตามตัวอักษร) หลายต่อหลายครั้งตั้งแต่นั้นมา นี่คือข้อยกเว้นมากกว่ากฎ

โดยทั่วไปแล้วการตัดและวางแบบธรรมดาจะไม่เหมาะสมอย่างสมบูรณ์ - การตัดและวางแนวคิดหรืออัลกอริทึมที่มีความสำคัญมากขึ้น

ฉันไม่ภูมิใจเกินไป - ฉันจะค้นหารอบ ๆ เพื่อหาพาริตี้ที่เร็วมากหรือการแฮ็กรหัสยืนยันอัลกอริทึมหรือสิ่งแปลกใหม่เช่นนั้น จากนั้นใช้เวลาสองสามชั่วโมงเพื่อทำความเข้าใจเพื่อดูว่ามันเป็นสิ่งที่เร็วมากอย่างรวดเร็วหรือเป็นกองขยะที่ไร้เดียงสา

ฉันกังวลทุกครั้งที่ทุกคนเพียงแค่คัดลอกรหัสโดยไม่หยุดเพื่อทำความเข้าใจ พวกเขาเป็นอัจฉริยะ (เข้าใจและรายละเอียดปลีกย่อยทั้งหมด) หรือคนโง่ ไม่มีที่ว่างมากสำหรับสิ่งใดในระหว่าง โอ้และไม่มีอัจฉริยะที่แท้จริงมากมายเช่นกัน

หากไม่มีความเข้าใจคุณจะไม่รู้เลยว่าสิ่งที่คุณเพิ่งถูกโยนลงไปทำจริงๆไม่เพียงแค่มีความสุข แต่ยังรวมถึงสถานการณ์ที่ไม่มีความสุขหรือเงื่อนไขการป้อนข้อมูลด้วย บางครั้งสิ่งนี้ไม่สำคัญว่าคุณจะโชคดี และบางครั้งสิ่งนี้ทำให้เกิดความเจ็บปวดในระยะยาว


4
บนมืออื่น ๆ ที่มีโปรแกรมเมอร์ที่เขียนโค้ดเองและยังไม่เข้าใจมัน ...
hplbsh

3

มีสถานการณ์ทั่วไปที่คุณจำเป็นต้องทำเพื่อให้เกิดผล

เทคโนโลยีใด ๆ ที่คุณไม่คุ้นเคยนั้นยากที่จะเรียนรู้เว้นเสียแต่ว่าคุณจะมีตัวอย่างการทำงานที่เริ่มต้นด้วย ดังนั้นคุณจึงคัดลอกและวางเพื่อให้มีบางสิ่งที่ทำงานได้จริงจากนั้นเริ่มแก้ไขมัน


การแก้ไข: มีbeleifจริงที่คุณคิดว่าคุณจำเป็นต้องทำเพื่อให้เกิดผลจริง ดังนั้นคุณจึงคัดลอกและวางวิธีที่จะปล่อยบางสิ่งบางอย่างที่ทำงานและใช้ enternity ทุกข์ทรมานวิธีของคุณเพื่อซ่อมแซมความเสียหาย
Newtopian

3

ในฐานะโปรแกรมเมอร์คนใหม่ (4 เดือนในงานแรกของฉัน) ฉันพึ่งพาความช่วยเหลือค่อนข้างมาก (ไม่ว่าจาก SO หรือที่อื่น ๆ ) ฉันทำสิ่งที่ไม่คัดลอกและวางรหัสอื่นโดยไม่สุ่มสี่สุ่มห้า แม้ว่ารหัสที่ให้ไว้คือสิ่งที่ฉันจะใช้ฉันจะพิมพ์ลงในโปรแกรมของฉันและจากนั้นใช้เวลาเล็กน้อยเพื่อให้แน่ใจว่าฉันเข้าใจสิ่งที่มันทำและสาเหตุของมันอย่างสมบูรณ์

ฉันต้องการให้แน่ใจว่าฉันเรียนรู้อย่างต่อเนื่องและไม่ใช่ผู้เชี่ยวชาญในการตัดและวาง


1

ฉันมีความรู้สึกมากมายเกี่ยวกับหัวข้อนี้และฉันไม่สามารถพูดได้อย่างตรงไปตรงมาว่ามีวัตถุประสงค์ทั้งหมด

มีข้อโต้แย้งมากมายสำหรับการตัดและวางรหัสของผู้อื่นลงในใบสมัครของคุณ บางคนอาจมีเหตุผลบางคนอาจไม่เข้าใจ ตัวอย่างเช่นหากคุณมีวิธีการจากบล็อกของใครบางคนที่รับอินพุตและเรียกใช้อัลกอริทึมทางคณิตศาสตร์ที่ซับซ้อนซึ่งเป็นวิธีที่อยู่นอกเหนือความสามารถทางคณิตศาสตร์ของคุณและแยกผลลัพธ์ออกมา - นั่นคืออาร์กิวเมนต์สำหรับการตัดและวาง รหัสและเครดิตพวกเขาเมื่อถึงกำหนด - เป็นสิ่งที่น่าทำ

มีการถกเถียงกันว่าจะไม่บูรณาการล้อ - อีกครั้งนี้ทำให้รู้สึกในทางทฤษฎี แต่ถ้าคุณไม่ใช้เวลาทำความคุ้นเคยกับโค้ดที่คุณกำลังตัดและวางคุณไม่รู้ว่ามีวิธีที่ดีกว่าในการแก้ปัญหานี้หรือไม่คุณไม่รู้ว่ามีข้อบกพร่องในรหัสหรือไม่ . เกิดอะไรขึ้นถ้าล้อที่คุณวางเสีย?

มีข้อโต้แย้งเกี่ยวกับความเร็วและประสิทธิภาพ - คุณสร้างคลังของรหัสของคนอื่นที่คุณลอกขโมยขโมยลอกเลียนแบบหรืออื่น ๆ มาคิดคุณอาจไม่จำเป็นต้องรู้วิธีการโปรแกรมเกินกว่า Frankensteining บางแอปพลิเคชัน รวมกันจากชิ้นส่วนที่เรียกคืน

มีเวลาและสถานที่ที่ฉันเห็นว่าพฤติกรรมนี้เป็นที่ยอมรับได้อย่างสมบูรณ์ สำหรับการแฮ็คเครื่องมือที่ใช้งานร่วมกันได้อย่างรวดเร็วซึ่งไม่ได้ออกแบบมาสำหรับอายุการใช้งานที่ยืนยาว แต่เพื่อให้งานสำเร็จลุล่วงไปได้ด้วยเบ็ดหรือข้อพับ สำหรับวัตถุประสงค์ของการสร้างต้นแบบและการศึกษาเรื่องการเรียนรู้และความก้าวหน้าในบริบททางทฤษฎีฉันคิดว่านี่เป็นเกมที่ยุติธรรมอย่างสมบูรณ์

การตัดและวางรหัสของคนอื่นคือการลอกเลียนแบบ - ถ้าคุณมีพรของพวกเขาและคุณเข้าใจรหัสที่คุณกำลังวางและมันเหมาะกับการสร้างมาตรฐานการเข้ารหัสสำหรับแอปพลิเคชันของคุณจากนั้นฉันจะยอมรับมันเป็นเกมที่ยุติธรรม

ในฐานะวิศวกรซอฟต์แวร์มืออาชีพฉันถูกจ่ายให้รักษามาตรฐานและจรรยาบรรณ ฉันไม่ได้รับค่าตอบแทนในการขโมยลอกเลียนหรือละเมิดลิขสิทธิ์ของผู้อื่นทำให้ลูกค้าของฉันเสี่ยงต่อการถูกดำเนินคดี นอกจากนี้ยังมีความเสี่ยงที่แท้จริงที่เมื่อคุณเรียกใช้โค้ดตัด / วางมันมีผลข้างเคียงที่ร้ายแรง

ไม่ใช่การกำหนดเป้าหมายคำตอบนี้ให้คุณจอห์นฉันรู้ว่าคุณมีความโน้มเอียงทางจริยธรรมมากเมื่อพูดถึงหัวข้อเช่นนี้ดังนั้นนี่เป็นเพียงคำโหยหวนทั่วไปในทิศทางของคำถาม

ภาคผนวก : ที่กล่าวว่าฉันรู้สึกว่าการตัดและวางรหัสของคุณเองระหว่างโครงการค่อนข้างเป็นที่ยอมรับ - ยกเว้นว่ามันถูกเขียนเป็นงานให้เช่าสำหรับคนอื่นซึ่งในกรณีนี้คุณไม่ได้เป็นเจ้าของลิขสิทธิ์และคุณควรได้รับอนุญาต จากบุคคลที่คุณเข้ารหัสให้ ฉันพบว่าหากรหัสนั้นเกี่ยวข้องกับแนวคิดการทำงานของกรรมสิทธิ์เจ้าของกิจการส่วนใหญ่ก็ไม่เป็นไรกับคุณที่จะใช้ความคิดของคุณเองกับลูกค้ารายอื่น


คุณใช้อะไรในการใช้รหัสจากการโพสต์บล็อกที่แก้ปัญหาเฉพาะที่คุณมี การคัดลอกหรือการวางรหัสในทางกายภาพคือสิ่งที่คุณคิดว่าเป็นการฝ่าฝืนจรรยาบรรณหรือจะพิมพ์โซลูชั่นในโครงการของคุณให้อยู่ในหมวดหมู่เดียวกันหรือไม่? ขนาดของรหัส "ยืม" (เช่นโปรแกรม / ฟังก์ชั่นที่สมบูรณ์เทียบกับตัวอย่างเล็ก ๆ ) มีผลต่อความคิดเห็นของคุณหรือไม่?
อดัมเลียร์

2
ฉันรู้สึกว่าถ้ามันอยู่ในบล็อกโพสต์จากนั้นผู้เขียนตั้งใจให้มันเป็นแบบสาธารณะดังนั้นหากมันมีประโยชน์กับคุณมันเป็นเกมที่ยุติธรรม อย่างไรก็ตามฉันแทบจะไม่เคยเจอตัวอย่างโค้ดที่สามารถคัดลอกคำต่อคำ พวกเขามักจะต้องการ finagling เล็กน้อย
Pemdas

ฉันไม่ได้มีปัญหากับรหัสจากบทช่วยสอนหรือโพสต์บล็อกที่ใช้งาน - เพียงแค่เข้าใจว่ามันทำอะไร สันนิษฐานว่าถ้ามันโพสต์มันใช้ได้
quick_now

"ไม่ได้กำหนดเป้าหมายคำตอบนี้ให้คุณจอห์น" ... จริง ๆ แล้วฉันไม่คิดว่าคุณจะ ... อย่างน้อยก็จนกว่าฉันจะอ่านมันต่อไป LOL
John MacIntyre

ฉันชอบความคิดเห็นของคุณเกี่ยวกับการคัดลอกผลงาน & ทำความเข้าใจโค้ดอย่างสมบูรณ์ แต่คุณคิดว่าการคัดลอก / วางรหัสของบุคคลอื่นนั้นมีประสิทธิภาพมากกว่าการเขียนเองหรือไม่ ฉันพบว่าคุณจะไม่เข้าใจและมีปัญหาในภายหลังหรือความพยายามที่จะเข้าใจอย่างเต็มที่จะใช้เวลานานกว่าการเขียนด้วยตนเอง KWIM?
John MacIntyre


0

หากรหัสนั้นดีแทนที่จะคัดลอกและวางควรทำในไลบรารีทั่วไป แต่ผู้คนไม่สามารถใส่ใจกับการปรับโครงสร้างใหม่และพวกเขาต้องการที่จะมีฟังก์ชั่นการทำงานที่เหมือนกันโดยการคัดลอกและวิธีการ

แทนที่จะมีกฎการคัดลอกและวางแบบสัมบูรณ์สากลดีหรือไม่ดีเราควรเห็นเมื่อใช้

ข้อดีของการคัดลอกและวางคือ: ทำให้คุณก้าวไปอย่างรวดเร็วข้อเสียคือ: รหัสเดียวกันถูกกระจายในหลาย ๆ ที่และปัญหาใด ๆ ที่พบ / แก้ไขจำเป็นต้องแก้ไขทุกที่หากแทนที่จะคัดลอกและวางหนึ่งที่ใช้เป็นห้องสมุดทั่วไปการปรับปรุงจะ เผยแพร่ทุกที่ สำหรับการลงทุนเริ่มต้นเพียงเล็กน้อยในการใช้ห้องสมุดแทนที่จะแพร่กระจายรหัสเดียวกันทุกที่

ทางเลือกคือการประหยัดเวลาเล็กน้อยในตอนแรกเมื่อเทียบกับมากในภายหลังจากนั้นคัดลอกและวางเป็นวิธีที่จะไปมิฉะนั้น refactore และวางไว้ในห้องสมุดทั่วไป


ฉันเห็นด้วยอย่างแน่นอนเกี่ยวกับห้องสมุดทั่วไป แต่คุณควรตัดและวางรหัสนั้นหรือสร้างมันขึ้นมาใหม่?
John MacIntyre

วิธีที่เร็วที่สุดในการนำเข้ารหัสคือการคัดลอกและวาง แต่ควรตรวจสอบและหากจำเป็นต้องแก้ไขรหัสก่อนที่จะทำการลงรหัสในโครงการและลืมมันไป
Arjang

0

ในกรณีส่วนใหญ่รหัสที่คุณจะพบในเน็ตจะไม่ตรงกับจุดประสงค์ที่แน่นอนของคุณ

สิ่งที่เห็นว่าตัวเองกำลังทำอะไรมากมายคือการคัดลอกรหัสจากบางคนลอกมันออกมาเป็นสาระสำคัญแล้วเพิ่มรหัสจนกว่ามันจะเป็นไปตามข้อกำหนดของฉัน ฉันจะปรับโครงสร้างให้ตรงกับแบบแผนการตั้งชื่อและสไตล์การเข้ารหัสเสมอ

ฉันเกลียดเมื่อฉันอ่านบทช่วยสอนและพวกเขาเริ่มต้นด้วยการแสดงรหัสสำหรับกรณีที่ซับซ้อน เริ่มต้นด้วยแก่นแท้และแสดงแบบเอกสารสำเร็จรูปเพื่อขยายรหัส ถ้าฉันเริ่มบล็อกของตัวเองฉันจะให้ตัวอย่างโค้ดที่แสดงความคิดเห็นซึ่งแสดงสาระสำคัญของสิ่งที่ฉันต้องการจะทำอย่างไรคุณสามารถเพิ่มฟังก์ชันการทำงาน / กรณีพิเศษและตัวอย่างการทำงานอย่างสมบูรณ์ของคุณสมบัติพื้นฐาน


-1

ทำไมต้องบูรณาการวงล้อใหม่หากคุณเข้าใจว่ารหัสกำลังทำอะไรอยู่มีสิทธิ์ใช้รหัสซ้ำ (หรือเปิดอยู่) และคุณไม่จำเป็นต้องใช้รหัสทั้งหมดที่บุคคลอื่นเขียน ฉันมักจะคัดลอกการใช้อัลกอริทึมและปรับเปลี่ยนตามความต้องการของฉันเอง แม้ว่าโดยปกติเมื่อฉันเพิ่งตัดและวางก็เป็นเพราะฉันไม่ต้องการทุกอย่างที่อยู่ในตัวอย่างดังนั้นการเพิ่มไฟล์อื่นจะเป็นการสิ้นเปลือง (หรือเป็นสิ่งที่อยู่ภายในฟังก์ชั่น) ฉันเห็นด้วยกับ jzd หากคุณกำลังตัดและวางรหัสของคุณเองในโครงการเดียวกันจากนั้นก็มีบางอย่างผิดปกติและคุณควรคิดวิธีที่ประหยัดเพื่อ lib หรือแบ่งปันฟังก์ชั่น


-1

ฉันพบว่าสมาชิกในทีม " บูรณาการ " หรือผู้ที่ไม่มีประสบการณ์มากเกี่ยวกับรหัสหรือในการเขียนโปรแกรมมักจะคัดลอกและวางบ่อยขึ้นและไม่เข้าใจสิ่งที่พวกเขาทำ (ปัญหาที่กล่าวถึงในคำถามของคุณ)

ฉันยังพบว่าโปรแกรมเมอร์มักจะอยู่ห่างจากการตัด & วางเพื่อความผิดหวังของตัวเองเพราะพวกเขารักรหัสและมักจะคิดค้นใหม่ล้อเพียงเพราะพวกเขาต้องการที่จะทำมันได้ดีขึ้นหรือเรียนรู้เพิ่มเติม


+1 สำหรับการสร้างใหม่ ฉันพบว่าตัวเองเขียนโค้ดเวลาอีกครั้งจากอินเทอร์เน็ตแทนที่จะคัดลอกการวาง ฉันเดาว่าฉันทำอย่างนั้นเพราะฉันไม่ได้ จำกัด อยู่ที่กำหนดเวลา ฉันสามารถเรียนรู้ด้วยตนเองได้อย่างอิสระและฉันสามารถเรียนรู้สิ่งที่ en เมื่อฉันต้องการ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.