ปรับปรุง
การตอบสนองของฉันในคำพูดสำหรับการเน้น:
มันเป็นความเชื่อของฉันคำตอบที่ระบุความคิดเห็นที่ไม่ควรกล่าวถึงในมาตรฐานการเข้ารหัสและจากนั้นแสดงรายการคำถามตั้งรับเพื่อต่อสู้มันเป็นคำตอบเดียวที่ถูกต้อง
ปัญหานี่คือมาตรฐานการเข้ารหัสเป็นเพียงที่เป็นมาตรฐาน มากความคิดอัตนัยควรไม่อยู่ในมาตรฐานการเข้ารหัส อาจเป็นแนวทางปฏิบัติที่ดีที่สุด แต่ไม่สามารถใช้คู่มือดังกล่าวกับนักพัฒนาซอฟต์แวร์ในระหว่างการตรวจสอบโค้ด ในความเห็นส่วนตัวของฉันมาตรฐานการเข้ารหัสควรใกล้เคียงกับอัตโนมัติมากที่สุด มีเวลามากเสียในการวิจารณ์รหัสการโต้เถียงเรื่องการตั้งชื่อระยะห่างแท็บวงเล็บความคิดเห็น ฯลฯ ฯลฯ เมื่อทุกอย่างสามารถเป็นไปโดยอัตโนมัติ แม้แต่คำตอบเกี่ยวกับtables
และchairs
สามารถเป็นไปโดยอัตโนมัติ LINT'ers อนุญาตให้ใช้พจนานุกรมการตรวจสอบตัวพิมพ์ใหญ่ต่อแนวคิด (ตัวแปร, ฟังก์ชั่น, วิธีการ, ชั้นเรียน ฯลฯ )
แม้แต่การตรวจสอบ JavaDoc ก็สามารถใช้งานได้โดย Robot LINT'er ก่อนที่จะยอมรับคำขอดึง โครงการโอเพนซอร์สจำนวนมากทำสิ่งที่แน่นอนนี้ คุณส่งคำขอดึงรหัสของคุณถูกสร้างขึ้นด้วยไฟล์ Travis-CI รวมถึงการวิเคราะห์แบบคงที่และต้องผ่านมาตรฐานการเข้ารหัสทั้งหมดซึ่งสามารถแสดงออกได้อย่างเป็นกลาง ไม่มีคนตีระฆังเกี่ยวกับการ 'ทำมันไม่ถูกต้อง' หรือไม่ 'ให้คุณค่า' กับความคิดเห็นหรือวิธีที่ผิดในการตั้งชื่อตัวแปรและอื่น ๆ การสนทนาเหล่านั้นไม่ได้ให้คุณค่าใด ๆ และเป็นสิ่งที่ดีที่สุดสำหรับหุ่นยนต์ของบุคคลที่สาม
ในการตอบคำถามจริงเราจะต้องกล่าวถึงวิธีการเขียนมาตรฐานซึ่งระบุวิธีตอบคำถามต่อไปนี้: ความคิดเห็นนี้มีคุณค่าหรือไม่? มาตรฐานการเข้ารหัสไม่สามารถกำหนด 'คุณค่า' ของความคิดเห็นได้ ดังนั้นมนุษย์จึงจำเป็นต้องผ่านรายการตรวจสอบนั้น เพียงการกล่าวถึงความคิดเห็นในมาตรฐานการเข้ารหัสจะสร้างรายการตรวจสอบที่ผู้โพสต์ดั้งเดิมต้องการหลีกเลี่ยง
นั่นเป็นเหตุผลที่คอมไพเลอร์มักไม่ประมวลผลความคิดเห็นและแยกออก ไม่สามารถระบุมูลค่าของพวกเขาได้ ความคิดเห็นในคำถามมีค่าหรือไม่ ใช่หรือไม่?. ตอบคำถามนี้คือ NP-hard มีเพียงมนุษย์เท่านั้นที่มีโอกาสตอบคำถามได้อย่างถูกต้องและถึงแม้จะสามารถตอบได้เมื่อผู้อ่านกำลังอ่าน ที่ค่าของความคิดเห็นนั้นได้รับผลกระทบจากสภาพอากาศชีวิตในบ้านของเขาหรือเธอการประชุมครั้งล่าสุดที่พวกเขาเพิ่งเข้าร่วมและไม่ได้จบลงอย่างดีเวลาของวันปริมาณกาแฟที่พวกเขามี ฉันเชื่อว่าภาพจะชัดเจนยิ่งขึ้น
เป็นไปได้อย่างไรที่จะแสดงอย่างถูกต้องในมาตรฐานใด ๆ มาตรฐานไม่มีประโยชน์เว้นแต่จะสามารถนำไปใช้อย่างต่อเนื่องและเป็นธรรมในกรณีที่ความยุติธรรมเป็นเรื่องเกี่ยวกับความเป็นกลางที่ไม่เกี่ยวกับอารมณ์
ฉันประกวดว่ามาตรฐานการเข้ารหัสควรยังคงเป็นวัตถุประสงค์เท่าที่จะทำได้ ตัวแปรตั้งชื่อวัตถุประสงค์ IS พวกเขาสามารถตรวจสอบได้อย่างง่ายดายกับพจนานุกรมสำหรับการสะกดที่เหมาะสมโครงสร้างไวยากรณ์และท่อ อะไรก็ตามที่นอกเหนือจากนั้นคือ "การแข่งขันแบบฉี่" ซึ่งชนะโดยบุคคลที่มีอำนาจมากที่สุดหรือโดย "การตีคิ้ว" บางสิ่งบางอย่างส่วนตัวต่อสู้กับไม่ทำ
เมื่อฉันแสดงความคิดเห็นฉันมักจะแสดงความคิดเห็นพูดคุยกับตัวเองในอนาคตของฉันในบุคคลที่สาม ถ้าฉันกลับมาที่รหัสนี้ภายใน 5 ปีฉันต้องรู้อะไรบ้าง สิ่งที่จะเป็นประโยชน์สิ่งที่จะสับสนและสิ่งที่จะล้าสมัยกับรหัส? มีความแตกต่างระหว่างรหัสการทำเอกสารเพื่อสร้าง API สาธารณะที่สามารถค้นหาได้และรหัสความคิดเห็นซึ่งให้คุณค่ากับบุคคลที่สามที่ไม่รู้จักแม้ว่าบุคคลที่สามนั้นจะเป็นตัวคุณเอง
นี่คือการทดสอบสารสีน้ำเงินที่ดี หากคุณเป็นคนเดียวในโครงการ คุณรู้ว่าคุณเป็นคนเดียวในโครงการ สิ่งที่จะอยู่ในมาตรฐานการเข้ารหัสของคุณ? คุณต้องการให้รหัสของคุณสะอาดอธิบายตนเองและเข้าใจตัวเองในอนาคต คุณจะตรวจสอบรหัสด้วยตัวเองเกี่ยวกับสาเหตุที่คุณไม่ได้ใส่ความคิดเห็นในทุกบรรทัดหรือไม่ คุณจะตรวจสอบทุกความคิดเห็นเดียวที่คุณสร้างขึ้นใน 100 ไฟล์ที่คุณตรวจสอบหรือไม่ ถ้าไม่เช่นนั้นทำไมต้องบังคับผู้อื่น?
สิ่งที่ฉันเชื่อว่าพลาดไปในการอภิปรายเหล่านี้ก็คืออนาคตคุณยังเป็นผู้พัฒนาโครงการนี้ด้วย เมื่อถามถึงคุณค่าในวันพรุ่งนี้คุณก็เป็นคนที่สามารถได้รับคุณค่าจากความคิดเห็น ขนาดของทีมดังนั้นในความคิดของฉันไม่สำคัญ ประสบการณ์ทีมไม่สำคัญมันเปลี่ยนแปลงบ่อยเกินไป
ไม่มีรหัสความคิดเห็นในการตรวจสอบสิ่งนี้หยุดผู้ทำจังหวะจากการหยุดและฆ่าผู้ป่วย เมื่อคุณพูดถึงความคิดเห็นที่มีผลต่อโค้ดตอนนี้คุณกำลังพูดถึงรหัสไม่ใช่ความคิดเห็น หากทุกอย่างเป็นความคิดเห็นที่ขาดหายไปเพื่อฆ่าใครบางคนมีสิ่งอื่นที่มีกลิ่นในกระบวนการ
วิธีการเขียนโค้ดแบบเข้มงวดนี้มีให้เป็นวิธีการเขียนซอฟต์แวร์เอง และไม่มีอะไรเกี่ยวข้องกับความคิดเห็น ปัญหาเกี่ยวกับความคิดเห็นคือพวกเขาไม่มีผลกระทบต่อวิธีการใช้งานผลิตภัณฑ์ในท้ายที่สุด ความคิดเห็นที่ดีที่สุดในโลกไม่สามารถป้องกันไม่ให้ซอฟต์แวร์หยุดทำงานเมื่อถูกฝังลงในเครื่องมือสร้างจังหวะ หรือเมื่อทำการวัดสัญญาณไฟฟ้าด้วย EKG แบบพกพา
เรามีความคิดเห็นสองประเภท:
ความเห็นที่เครื่องอ่านได้
สไตล์ความคิดเห็นเช่น Javadoc, JSDoc, Doxygen ฯลฯ เป็นวิธีการแสดงความคิดเห็นในส่วนต่อประสานสาธารณะที่มีชุดโค้ดให้ อินเทอร์เฟซนั้นสามารถใช้งานได้โดยผู้พัฒนารายอื่นเพียงคนเดียว (รหัสที่เป็นกรรมสิทธิ์สำหรับทีมสองคน) จำนวนนักพัฒนาที่ไม่รู้จัก (เช่น JMS) หรือสำหรับทั้งแผนก รหัสนี้สามารถอ่านได้โดยกระบวนการอัตโนมัติซึ่งจะสร้างวิธีการอ่านความคิดเห็นเหล่านั้น ala HTML, PDF และอื่น ๆ
ความคิดเห็นประเภทนี้ง่ายต่อการสร้างมาตรฐาน มันกลายเป็นกระบวนการที่มีวัตถุประสงค์เพื่อให้มั่นใจว่าทุกวิธีที่เรียกใช้, ฟังก์ชั่น, ชั้นเรียนได้รับการกล่าวถึง ส่วนหัวพารามิเตอร์คำอธิบายและ เอล นี่คือเพื่อให้แน่ใจว่าเป็นเรื่องง่ายสำหรับทีมอื่นในการค้นหาและใช้รหัส
ฉันกำลังทำสิ่งที่ดูบ้า แต่ก็ไม่จริง
ความคิดเห็นเหล่านี้อยู่ที่นี่เพื่อช่วยให้คนอื่นเห็นทำไมรหัสนี้ถูกเขียนขึ้นในลักษณะที่แน่นอน อาจมีข้อผิดพลาดเกี่ยวกับตัวเลขในตัวประมวลผลที่โค้ดทำงานอยู่และมักจะปัดเศษลง แต่นักพัฒนามักจะจัดการกับโค้ดที่ปัดเศษขึ้น ดังนั้นเราจึงแสดงความคิดเห็นเพื่อให้แน่ใจว่านักพัฒนาซอฟต์แวร์ที่เข้าใจรหัสว่าเหตุใดบริบทปัจจุบันจึงทำอะไรบางอย่างโดยปกติแล้วจะดูไม่สมเหตุสมผล
รหัสประเภทนี้เป็นสิ่งที่ทำให้เกิดปัญหามากมาย โดยทั่วไปจะไม่มีการใส่หมายเหตุและพบในภายหลังโดยผู้พัฒนาใหม่และ 'แก้ไข' ดังนั้นทำลายทุกอย่าง ถึงกระนั้นความเห็นก็มีไว้เพื่ออธิบายว่าทำไมไม่ป้องกันสิ่งใดจากการแตกหัก
ความคิดเห็นไม่สามารถเชื่อถือได้
ความคิดเห็นนั้นไร้ประโยชน์ในที่สุดและไม่สามารถเชื่อถือได้ ความคิดเห็นไม่ได้เปลี่ยนวิธีการทำงานของโปรแกรม และถ้าพวกเขาทำแล้วกระบวนการของคุณก่อให้เกิดปัญหามากขึ้นก็ควร ความคิดเห็นเป็นความคิดในภายหลังและไม่สามารถเป็นอะไรได้นอกจาก รหัสคือทุกสิ่งที่สำคัญตามที่ประมวลผลโดยคอมพิวเตอร์
นี่อาจฟังดูแปลก ๆ แต่ทนกับฉัน ข้อใดของสองบรรทัดนี้สำคัญ?
// We don't divide by 0 in order to stop crashes.
return 1 / n;
ในตัวอย่างนี้สิ่งที่สำคัญคือเราไม่มีความคิดว่า 'n' คืออะไรไม่มีการตรวจสอบสำหรับ n เป็น 0 และแม้ว่าจะมีไม่มีอะไรหยุดนักพัฒนาจากการวางn = 0
หลังจากการตรวจสอบสำหรับ 0 ดังนั้นความคิดเห็น ไม่มีประโยชน์และไม่มีอะไรอัตโนมัติสามารถจับสิ่งนี้ได้ ไม่มีมาตรฐานที่สามารถจับสิ่งนี้ได้ ความคิดเห็นในขณะที่สวย (บางคน) ไม่มีผลต่อผลลัพธ์ของผลิตภัณฑ์
ทดสอบการพัฒนาขับเคลื่อน
ผลิตภัณฑ์มีผลอะไรบ้าง? อุตสาหกรรมที่รหัสที่เขียนนั้นสามารถบันทึกหรือฆ่าใครบางคนได้อย่างจริงจัง สิ่งนี้ทำผ่านบทวิจารณ์โค้ด, บทวิจารณ์โค้ด, การทดสอบ, การทดสอบ, บทวิจารณ์โค้ด, การทดสอบหน่วย, การทดสอบแบบบูรณาการ, การทดสอบ, การทดสอบ, การทดสอบระยะเวลาหลายเดือน, บทวิจารณ์โค้ดและการทดลองเดี่ยว ๆ ไปสู่การผลิต ความคิดเห็นไม่มีส่วนเกี่ยวข้องกับสิ่งนี้
ฉันต้องการรหัสที่ไม่มีความคิดเห็นมีข้อกำหนดมีการทดสอบหน่วยที่ตรวจสอบข้อมูลจำเพาะการศึกษาผลลัพธ์ของการเรียกใช้รหัสบนอุปกรณ์การผลิตจากนั้นรหัสที่มีเอกสารดีที่ไม่เคยทดสอบและไม่มีอะไรที่จะเปรียบเทียบ รหัสต่อ
เอกสารเป็นสิ่งที่ดีเมื่อคุณพยายามคิดว่าทำไมบางคนทำอะไรบางอย่างในแบบที่ฉันเคยพบมาตลอดหลายปีที่ผ่านมาเอกสารมักจะถูกใช้เพื่ออธิบายว่าทำไม 'ฉลาด' ถึงทำอะไรเมื่อมันไม่จำเป็นจริงๆ ที่จะเขียนด้วยวิธีนั้น
ข้อสรุป
หากคุณทำงานใน บริษัท ที่ต้องการทุกความคิดเห็นฉันรับประกันว่าอย่างน้อยสองวิศวกรซอฟต์แวร์ในโครงการได้เขียนโปรแกรมเอกสารอัตโนมัติใน Perl, Lisp หรือ Python ซึ่งกำหนดความคิดทั่วไปของสิ่งที่สายทำ จากนั้นเพิ่มความคิดเห็นด้านบนบรรทัดนั้น เนื่องจากเป็นไปได้ที่จะทำมันหมายความว่าความคิดเห็นที่ไร้ประโยชน์ ค้นหาวิศวกรที่เขียนสคริปต์เหล่านี้เพื่อจัดทำรหัสโดยอัตโนมัติและใช้เป็นหลักฐานว่าทำไม 'ความคิดเห็นในทุกบรรทัด' จึงเสียเวลาไม่มีค่าและอาจเป็นอันตรายได้
นอกจากนี้ฉันยังช่วยเพื่อนสนิทด้วยการมอบหมายการเขียนโปรแกรม ครูของเขาได้กำหนดข้อกำหนดที่ทุกบรรทัดจะต้องมีการบันทึกไว้ ดังนั้นฉันสามารถดูว่ากระบวนการคิดนี้มาจากไหน แค่ถามตัวเองคุณพยายามทำอะไรและนี่คือสิ่งที่ถูกต้องหรือไม่ จากนั้นถามตัวเอง มีวิธีใดที่จะ 'เล่นเกม' ระบบด้วยกระบวนการนี้? หากมีอยู่จะมีการเพิ่มมูลค่าหรือไม่ หนึ่งไม่สามารถเขียนการทดสอบหน่วยโดยอัตโนมัติซึ่งทดสอบว่ารหัสนั้นตรงตามข้อกำหนดเฉพาะและถ้าเป็นไปได้ก็จะไม่เป็นสิ่งเลวร้าย
หากอุปกรณ์ต้องทำงานภายใต้เงื่อนไขบางประการเพราะมันจะอยู่ภายในมนุษย์วิธีเดียวที่จะทำให้มั่นใจได้ว่ามันจะไม่ฆ่าพวกเขาคือการทดสอบเป็นเวลาหลายปีการทดสอบแบบเพื่อนทบทวนการทดลองแล้วไม่เคยเปลี่ยนรหัสอีกเลย นี่คือเหตุผลที่นาซ่ายังคงใช้ฮาร์ดแวร์และซอฟต์แวร์เก่าอยู่ เมื่อพูดถึงชีวิตหรือความตายคุณไม่เพียง 'ทำการเปลี่ยนแปลงเล็กน้อยและตรวจสอบสิ่งต่อไปนี้'
ความคิดเห็นไม่มีส่วนเกี่ยวข้องกับการช่วยชีวิต ความคิดเห็นมีไว้สำหรับมนุษย์มนุษย์ทำผิดพลาดแม้เมื่อเขียนความคิดเห็น อย่าไว้ใจมนุษย์ เออไม่เชื่อความคิดเห็น ความเห็นไม่ใช่ทางออกของคุณ