เป็นเรื่องปกติ / ยอมรับได้ที่จะจดบันทึกความคิดอัลกอริธึมการตัดสินใจระหว่างการเข้ารหัสและการบำรุงรักษาหรือไม่? [ปิด]


22

บางคนมีปัญหานี้ที่พวกเขาไม่สามารถคิดได้หากไม่มีคำพูด และการจดบันทึกความคิดและการตัดสินใจเป็นวิธีที่มีประสิทธิภาพที่สุดในการดำเนินการ

ดังนั้น - เป็นเรื่องปกติและเป็นที่ยอมรับหรือไม่ที่ฉันจะเขียนความคิดและการตัดสินใจลงในไฟล์ Notepad ++ บางไฟล์ระหว่างการเข้ารหัส?

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

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


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

21
ฉันรู้สึกว่าเราขาดส่วนหนึ่งของบริบทหรือไม่ การสังเกตนี้ทำให้เกิดการร้องเรียนเกี่ยวกับประสิทธิภาพหรือไม่? บ่อยครั้งที่การวิพากษ์วิจารณ์มาพร้อมกับข้อเสนอแนะสำหรับสาเหตุที่อาจเกี่ยวข้องหรือไม่เกี่ยวข้อง
Jim Rush

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

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

7
ทำไมถึงไม่เป็นที่ยอมรับ ยอมรับกับใคร
Paul D. Waite

คำตอบ:


62

ไม่เพียงเป็นเรื่องปกติ แต่เป็นความคิดที่ดี

มีคำพูดที่มีชื่อเสียง

"ให้เวลาฉันหกชั่วโมงเพื่อตัดต้นไม้และฉันจะใช้ขวานสี่คมแรก"

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


8
มันเป็นคำพูดที่ดีแม้ว่าฉันจะลบการระบุแหล่งที่มาผิดพลาด quoteinvestigator.com/tag/abraham-lincoln
Paul Draper

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

2
การคำนวณความคมชัดหนึ่งชั่วโมงนั้นมากเกินพอ งานนี้ควรได้รับการประเมินที่สูงสุด 3 ชั่วโมง แต่การหย่อนใช้เวลากับการเตรียมที่ไม่มีจุดหมาย อะไรคือคุณธรรมอีกครั้ง ;-)
Steve Jessop

26

ใช่มันเป็นที่ยอมรับอย่างสมบูรณ์และเป็นเรื่องปกติ

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

หมายเหตุเหล่านี้สามารถรวมโดยตรงในรหัสเป็นความคิดเห็นหากสั้นพอ คำอธิบายเพิ่มเติมมักถูกเก็บไว้เป็นส่วนหนึ่งของเอกสารการออกแบบทางเทคนิคภายนอก


4
ฉันขอแนะนำอย่างยิ่งให้ไม่รวมหมายเหตุเกี่ยวกับการพิจารณาตัวเลือกการออกแบบและพยายามตัดสินว่าเป็นความคิดเห็นในซอร์สโค้ดสิ่งเหล่านี้ไม่เคย "สั้นพอ" เฉพาะผลลัพธ์ขั้นสุดท้ายของกระบวนการคิดนั้น แต่ค่อนข้างแตกต่างจากสิ่งที่ OP ขอ
Doc Brown

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

8
@DocBrown - บางครั้งเป็นความคิดที่ดีที่จะรวมถึงเหตุผลที่คุณไม่ได้ใช้วิธีการ / อัลกอริธึมอื่น ๆ ที่เป็นไปได้ดังนั้นนักพัฒนาในอนาคตจะไม่พยายามแทนที่สิ่งที่คุณทำ
HorusKol

1
@HorusKol: แน่นอนในบางกรณีที่หายากนั่นคือสามัญสำนึกเล็กน้อย แต่ที่ค่อนข้างแตกต่างจาก"การจัดเก็บเอกสารขั้นตอนการตัดสินใจ"
Doc Brown

1
@DocBrown ถูกต้องฉันไม่คิดว่าทุกคนต้องการหน้าโน้ตในซอร์สโค้ดของพวกเขา :)
mcknz

20

มันเป็นความคิดที่ดี จนกระทั่งมันกลายเป็นหนทางในการผัดวันประกันพรุ่ง

กุญแจสำคัญคือความสมดุล ฉันพบว่าฉันทำงานได้ดีที่สุดถ้าฉันไม่ทำกล่องของตัวเอง แต่เก็บความคิดเมื่อพวกเขามา

ถ้าฉันบดในระดับต่ำและความคิดระดับสูงมาฉันแค่จดไว้แล้วกลับมาในภายหลัง

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


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

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

9

ในสถานการณ์ระดับมืออาชีพไม่เพียง "ปกติและยอมรับได้" เท่านั้น วงจรการพัฒนาทั่วไปประกอบด้วยสองขั้นตอนเอกสารก่อนที่จะเริ่มการเข้ารหัสใด ๆ :

  1. เอกสารข้อกำหนดด้านการใช้งาน:เขียนโดยนักวิเคราะห์ธุรกิจระบุหน้าที่การใช้งาน

  2. รายละเอียดการออกแบบเอกสาร:ซึ่งเป็นสวยมากสิ่งที่คุณกำลังพูดถึงเพียงแค่เป็นทางการมากขึ้นระบุสลายการทำงาน (แฟ) ของระบบอัลกอริทึม ฯลฯ บาง (มาก) คนเก่าของฉันออนไลน์อยู่เช่นนี้

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


4

สถานที่ที่ยอดเยี่ยมในการใส่ข้อมูลประเภทนี้อยู่ในข้อความยืนยันของระบบควบคุมเวอร์ชันของคุณโดยตรง (SVN, git, ฯลฯ ) วิธีนี้คุณสามารถเห็นการเปลี่ยนแปลงและเหตุผลสำหรับพวกเขาในสถานที่เดียวกัน


1
นอกจากนี้ยังทำให้สามารถค้นหาได้ คุณสามารถค้นหาคอมมิทข้อความใน commandline git และ sourcetree เช่น .. หากคุณใช้ notepad ส่วนใหญ่ไฟล์จะไม่ถูกเปิดอีกครั้งและเป็นการยากที่จะค้นหาโดยไม่ทราบว่ามี bash มากมายและเขียนสคริปต์ที่ค้นหาสถานที่ที่เกี่ยวข้องทั้งหมด
หวังว่าจะช่วยได้

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

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

มันยอดเยี่ยมมากที่จะใส่ไว้ในระบบควบคุมเวอร์ชัน ที่ที่ดีกว่าคือไฟล์ข้อความธรรมดาที่อยู่ด้านใน สิ่งเหล่านี้ใช้งานง่ายกว่าการส่งข้อความ
Thorbjørn Ravn Andersen

2

นอกเหนือจากคำตอบที่ดีอื่น ๆ ฉันจะเสริมว่าฉันมักจะเขียนความคิดของฉันเกี่ยวกับสิ่งที่ฉันพยายามทำ

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

จากนั้นบอกทางเลือกซึ่งฉันสามารถครุ่นคิดดีกว่ากันในทางกลับกัน; การเขียนนั้นช่วยประหยัดสถานที่ของฉันถ้าฉันคิดอย่างอื่น

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


1

การจดบันทึกทุกสิ่งที่สามารถช่วยคุณ / (ใหม่) เวลาที่สมาชิกในทีมใช้เวลาอย่างคุ้มค่า ตรวจสอบให้แน่ใจว่าเป็นสิ่งที่บางคนอาจต้องการในภายหลังและไม่ต้องคิดนอกเสียจากว่าจะเป็นโครงการระยะยาวที่แท้จริง

นอกจากนี้ยังไม่ควรใช้เวลาใด ๆ หากคุณใช้เวลาคิดว่าคุณสามารถเขียนความคิดของคุณลง 1 ถึง 1 (ตราบเท่าที่พวกเขาจะ / มีประโยชน์กับใครบางคน)

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

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


1

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

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


1

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

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

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

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


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