ฉันจะจัดการกับการวิเคราะห์อัมพาตได้อย่างไร


60

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

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

ฉันควรทำอย่างไรเพื่อต่อสู้กับปัญหานี้


4
xkcd ปกคลุมวันนี้
zzzzBov

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

คำตอบ:


34

กฎง่ายๆสองข้อ:

  1. ทำสิ่งที่ง่ายที่สุดที่อาจเป็นไปได้
  2. Refactor อย่างต่อเนื่อง

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

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


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

เห็นด้วยอย่างแน่นอน "สีแดงเขียว refactor" เป็นวิธีที่จะไป
Rein Henrichs

5
ชิ้นอาหารอันโอชะเล็ก ๆ น้อย ๆ ที่น่ารักจากคู่มือ XP แต่ไม่ได้คำแนะนำที่ดีเยี่ยมจริงๆ
Aaronaught

2
นอกบริบทมันเทียบเท่ากับการเขียนโคบาลคาวบอยอย่างแท้จริง ดูที่ Fowler's Is Dead Dead? ข้อควรระวังที่ต่อต้านหลักการหยิบเชอร์รี่จาก XP และวิธีการที่คล้ายกัน บางทีคุณอาจเป็นนักออกแบบและ coder ที่ยอดเยี่ยมและมีความสามารถและแรงบันดาลใจในการรักษาความสมบูรณ์ของแนวคิดในขณะที่ refactoring แต่โปรแกรมเมอร์ส่วนใหญ่ไม่ได้และให้คำแนะนำเหล่านี้กับบริบทนั้นไม่รับผิดชอบ (แม้ว่าพวกเขาทุกคนชอบที่จะได้ยิน มันหมายถึงการทำงานที่น้อยลงสำหรับพวกเขา)
Aaronaught

1
"ทำสิ่งที่ง่ายที่สุดที่อาจเป็นไปได้" ไม่ต้องการบริบทเพิ่มเติมใด ๆ การปรับโครงสร้างจะทำอย่างไร แต่คนที่ไม่รู้จักบริบทจะเรียนรู้วิธีการปรับโครงสร้างได้อย่างไร แต่โดยการเรียนรู้บริบท
Rein Henrichs

9

โดยปกติเมื่อฉันรู้สึกอย่างนั้นฉันต้องพยายาม:

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

หากปัญหาเกี่ยวข้องกับไวยากรณ์และชิ้นส่วนเล็กแล้ว:

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

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

5

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

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


ฉันตระหนักถึงสิ่งนี้ แต่ฉันก็ยังมีเวลายากในการเลือกตัวเลือกใด ๆ
Anne Nonimus

@ แอนน์: มันจะดีกว่าที่จะทำสิ่งที่สร้างสรรค์ได้ทันทีกว่าสิ่งที่ถูกสายเกินไป สิ่งเดียวที่แน่ใจว่าเป็นสิ่งที่ผิดคือไม่ทำอะไรเลย
Satanicpuppy

4

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


2

วิธีการเกี่ยวกับการให้ความรู้สึกลำไส้ของคุณตัดสินใจเลือกหนึ่งในตัวเลือก? ว่าควรจะไปอย่างรวดเร็วและรวมกันได้ดีกับtimeboxingซึ่ง ammoQ ยังเสนอ คุณสามารถลองได้ไม่เกิน 1 นาทีหากมีการกำหนดตัวเลือกไว้แล้วหรือ 2 นาทีหากคุณต้องกำหนดก่อน หรือสิ่งที่ดูเหมือนว่าเหมาะสม (กำหนดไว้ล่วงหน้า) เมื่อเรียนรู้ที่จะฟังสัญชาตญาณของคุณเลือกใช้งานง่ายของคุณจะกลายเป็นเร็วขึ้นและดีกับการปฏิบัติ

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

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

โชคดี! :)


2

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


1

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


3
จากนั้นเขาสามารถใช้เวลาหลายชั่วโมงทรมานกับตัวเองว่าจะต้องตั้งค่านาฬิกาปลุกนานแค่ไหน! :)
Jordan

1
จอร์แดน: มีวิธีแก้ไขที่เป็นไปได้หลายอย่างสำหรับปัญหานั้นด้วย น่าเสียดายที่ฉันไม่สามารถตัดสินใจได้ว่าจะเสนออะไร
281377

0

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

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


คุณไม่ควรทิ้งต้นแบบเพราะบางทีคุณสามารถขยายได้ในภายหลังเมื่อคุณเพิ่มคุณสมบัติ หรือบางทีคุณต้องทดสอบข้อบกพร่องด้วย SSCCE ฉันมักจะควบคุมต้นแบบทั้งหมดของฉันในที่แยกต่างหากเสมอ
maple_shaft

2
ฉันคิดว่าความคิดเบื้องหลัง "ทิ้ง" ไม่ใช่ว่าคุณสูญเสียข้อมูล แต่คุณไม่ควรใช้ต้นแบบเป็นพื้นฐานสำหรับโปรแกรมเนื่องจากจุดต้นแบบทั้งหมดคือการทดสอบด้วยอิสรภาพเพื่อทำผิดพลาด
Darien

ต้นแบบในสาขาทำการทดสอบที่จำเป็นและสร้างเวอร์ชันใหม่ทั้งหมดในคอร์
zzzzBov

0

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

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

คุณต้องแบ่งมันออกเป็นส่วนประกอบและให้รางวัลตัวเองสำหรับการทำมันให้เสร็จแม้ว่ามันจะเป็นเพียงคอนโซล i / o บางตัวที่แสดงว่ามันใช้งานได้


0

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

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

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

ดังนั้นฉันจึงคิดว่า - ทำไมฉันไม่มีปัญหาที่คล้ายกันกับการเข้ารหัสและฉันคิดว่ามันเป็นเพียงเพราะฉันมีชุดรูปแบบที่ฉันใช้เป็นประจำ ถ้าฉันต้องการนิยามฟังก์ชั่นมันง่าย .. มันจะอยู่ในหลอดเลือดดำเหมือนกับนิยามฟังก์ชันอื่น ๆ ที่ฉันเคยเขียน ถ้าฉันต้องการโฟลว์คอนโทรลก่อนอื่นให้ฉันตัดสินใจว่าฉันต้องการลูป for หรือ a while ลูปแล้วสร้างรหัสเดิมที่ฉันใช้ครั้งสุดท้ายที่ฉันต้องการสิ่งเหล่านี้ เช่นเดียวกันสำหรับทุกสิ่งฉันต้องการคิวหรือไม่ แน่นอน - ให้ไปตัดและวางรหัสคิว 'มาตรฐาน' ของฉัน (คัดมาจากโปรเจ็กต์ล่าสุดที่ฉันทำงานหรือคนที่ฉันจำได้โดยใช้หนึ่งในสิ่งเหล่านี้) ผลลัพธ์สุดท้าย ... ฉันหงุดหงิดกับสิ่งใหม่ ๆ เท่านั้นและบอกตามตรงว่ามันเป็นความสุข

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

แน่นอนว่าส่วนหลังของทั้งหมดก็สำคัญเช่นกันยิ่งคุณมีงานมากขึ้นเท่าไหร่คุณก็ยิ่งต้องใช้ความหรูหราน้อยลงเท่านั้น


การเขียนโปรแกรมตัวอย่างเป็นวิธีปฏิบัติที่เลวร้ายที่สุด
Neil Butterworth

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

@Neil วันนี้คุณอารมณ์ไม่ดีโดยเฉพาะ! นักเขียนโค้ดอาวุโสส่วนใหญ่มีห้องสมุดตัวอย่างขนาดใหญ่ในหัวของพวกเขาอย่างไรก็ตามคุณไม่สังเกตเห็นว่าตัวเองใช้มัน สำหรับเยาวชนการจดบันทึกไว้จะช่วยให้พวกเขาสร้างสิ่งนี้ขึ้นมา
gbjbaanb

0

นี่คือกลยุทธ์ที่รวมข้อเสนอแนะของ Rein Henrichs ( เริ่มง่ายเรียบเรียงใหม่) และ ammoQ ( timeboxing ):

  1. ให้เวลากับตัวเองอย่างเข้มงวดในการแก้ปัญหาแรกที่ใช้งานได้จริง เช่น 30 วินาทีสำหรับชื่อตัวแปร คุณสามารถหาสิ่งที่ชอบxก่อนแล้วค่อยปรับแก้ก่อนstringจากนั้นnameจนกว่าเวลาจะหมด
  2. จากนั้นดำเนินการงานอื่นตามเวลาที่กำหนดเช่น 10 นาที
  3. จากนั้นอนุญาตให้ตัวเองอีกกล่องเวลาสำหรับการปรับปรุงการตัดสินใจของคุณต่อไปเช่นuserHandle

ประโยชน์ที่เป็นไปได้ของวิธีนี้:

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

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

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

0

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


0

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

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

ในกรณี b) - คุณต้องการข้อมูลเพิ่มเติมและนั่งรอบ ๆ ไขมันใหญ่ของคุณ A .... ทั้งวันจะไม่ให้มัน ออกจากโหมดออกแบบและไปที่โหมดรวบรวมข้อมูล ต้นแบบถามคำถามอ่านนิตยสารเทคนิค ไม่ว่าคุณจะทำอะไรอย่านอนบนมันนานเกินไป


0

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

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

ระบุปัญหาจากนั้นระบุวิธีแก้ไขที่เป็นไปได้สิ่งที่ดีเกี่ยวกับแต่ละรายการ ฯลฯ

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


0

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

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

TLDR; เลือกโซลูชันที่เหมาะสมปรับปรุงเมื่อคุณไป

สิ่งนี้ยังเกี่ยวข้อง:

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

เวลาการให้คะแนนมาและความจริงที่อยากรู้อยากเห็นเกิดขึ้น: งานที่มีคุณภาพสูงสุดล้วนผลิตโดยกลุ่มที่ให้คะแนนตามปริมาณ ดูเหมือนว่าในขณะที่กลุ่ม "ปริมาณ" กำลังปั่นป่วนยุ่งเหยิงจากกองงาน - และเรียนรู้จากความผิดพลาดของพวกเขา - กลุ่ม "คุณภาพ" มี sat theorizing เกี่ยวกับความสมบูรณ์แบบและในที่สุดก็มีน้อยมากที่จะแสดงความพยายามของพวกเขากว่าทฤษฎียิ่งใหญ่และ กองดินที่ตายแล้ว

จากhttp://www.codinghorror.com/blog/2008/08/quantity-always-trumps-quality.html


-8

ฉันไม่เคยเข้าใจสิ่งนี้ เมื่อฉันเป็นผู้สอนฉันจะพูดบางอย่างเช่น:

"OK, create an integer variable and assign the return value of strlen() to it."

ไม่ซับซ้อนเกินไปคุณอาจคิดว่าและคน 95% เขียนสิ่งที่ชอบ:

int x;   // or y, or len, or whatever
x = strlen( s );

แต่บางครั้งจะมีคนที่นั่งเหมือนกระต่ายเป็นอัมพาตในไฟหน้า ฉันจะถามอย่างเห็นอกเห็นใจว่าปัญหาคืออะไรและพวกเขาจะพูดว่า "ฉันไม่รู้ว่าจะเรียกมันว่าอะไร!"

นี่คือคนที่ควรมองหาอาชีพใหม่ อย่างที่คุณควร


2
@ แอนน์ฉันไม่ได้ตั้งสมมติฐาน - คุณบอกว่าคุณคิดว่ามันยากที่จะคิดชื่อเรื่อง - "บ่อยครั้งฉันติดอยู่กับการตัดสินใจเลือกการออกแบบที่ดีที่สุดแม้แต่รายละเอียดเล็ก ๆ เช่น ... ชื่อตัวแปร"
Neil Butterworth

3
และทำไมฉันจึงควรมองหาอาชีพอื่นเพราะฉันมีปัญหาในการตั้งชื่อบางอย่าง ไม่ใช่ทุกแนวคิดที่มีการทำแผนที่สั้น ๆ ที่สะอาดกับภาษาธรรมชาติ
Anne Nonimus

2
@ แอนน์คำถามเดิมของคุณดูเหมือนจะเป็นเพราะคุณกำลังมีปัญหาในการทำสิ่งที่เกิดขึ้นตามธรรมชาติกับโปรแกรมเมอร์ที่ดี ไม่มีความละอายในเรื่องนี้ - คนส่วนใหญ่ (แม้แต่โปรแกรมเมอร์ส่วนใหญ่!) ทำสิ่งเหล่านี้ได้อย่างน่ากลัว อย่างไรก็ตามสมมติว่าเช่นฉันคุณสามารถมีความสุขในการทำสิ่งที่คุณทำได้ดีมากฉันแนะนำว่าการเขียนโปรแกรมอาจไม่ใช่สิ่งที่คุณถูกตัดออกไป ฉันใช้เวลา 10 ปีแรกของชีวิตผู้ใหญ่ในฐานะนักจุลชีววิทยา ฉันไม่ค่อยเก่งและมีความสุขมากขึ้นเมื่อฉันเปลี่ยนมาเป็นโปรแกรมเมอร์
Neil Butterworth

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

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