คุณจะอธิบายการปรับโครงสร้างให้กับบุคคลที่ไม่ใช่ด้านเทคนิคได้อย่างไร


52

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

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


ฉันจำไม่ได้ว่าแอปเปิ้ลโน้มน้าวให้คนจำนวนมากเปลี่ยนจาก Leopard เป็น Snow Leopard อย่างไร อาจเป็นราคา: $ 100 น้อยกว่าปกติในเวลานั้น
mouviciel

คำถามนี้อาจให้คำตอบที่มีประโยชน์อย่างน่าประหลาดใจสำหรับผู้ที่ทำงานกับรหัสในอุตสาหกรรม เอาใจใส่ผู้คน
joshin4colours

ทำไมมันจะฉลาด?
Louis Rhys

คำตอบ:


53

เมื่อคุณมีโฮมเธียเตอร์ขนาดใหญ่และคุณเพิ่มสิ่งต่าง ๆ ช้า ๆ แต่แน่นอนว่าหนูตัวใหญ่จะรังอยู่ข้างหลัง

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

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

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


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

21
@Axidos: "rats nest" เป็นสำนวนภาษาอังกฤษที่แปลว่า "ดูเหมือนจะเป็นไปไม่ได้ที่จะเลิกยุ่งเหยิง" (ในกรณีนี้คือสายไฟและสายเคเบิลที่อยู่ด้านหลังศูนย์รวมความบันเทิง)
HedgeMage

8
โดยหลักการแล้วมันค่อนข้างดี - ต้องการ "สายเคเบิล" หลังจาก "rats nest"
Murph

2
@ ปีเตอร์: ฉันคิดว่าพวกเราทุกคนต้องหันหลังทีวีอย่างน้อยสักครั้ง เพียงแค่อธิบายว่ามันแย่ลงเป็นร้อยเท่าแล้วหมุนเส้นด้ายทุกเส้นแล้วดึงมันออกมาแล้วดึงสิ่งนั้นและค้นพบอารยธรรมที่ตายแล้วที่ไหนสักแห่งในความยุ่งเหยิง
doppelgreener

3
หากใครบางคนไม่สามารถเกี่ยวข้องได้ให้แสดงสิ่งนี้: google.com/images?q=do+not+touch+any+of+these+wires
Steve S

41

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


1
ฉันจะโพสต์การเปรียบเทียบบางอย่างกับโรงรถหรือโรงเก็บของ แต่สิ่งนี้ดีกว่า
Matt Ellen

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

+1 นี่มันเยี่ยมมาก เช่นเดียวกับการทำสิ่งต่าง ๆ ใช้พื้นที่น้อยมีสิ่งที่คุณรู้ว่าคุณไม่ต้องการแม้แต่น้อยและสามารถออกไป
Robbie Dee

21

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

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

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


การเคลื่อนย้ายชิ้นส่วนในรถเพื่อประสิทธิภาพที่ดีขึ้นหรือการบำรุงรักษาง่ายขึ้น - เหมาะสำหรับทุกคนที่ยกฝาบนรถของพวกเขา แต่มี PHB กี่ตัวที่ทำเช่นนั้น
Peter Boughton

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

ดังนั้นคำตอบสั้น ๆ กลายเป็น: อย่าบอกพวกเขา! เพียงคำนึงถึงเวลาในคุณสมบัติใหม่และปรับเปลี่ยนตามความเหมาะสม
Jonathan van de Veen

12

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

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

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

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

แก้ไข - นี่คือสิ่งที่จะทำในสิ่งนี้


1
+1 สำหรับคำตอบที่สมเหตุสมผลซึ่งแสดงให้เห็นถึงเศรษฐศาสตร์ที่สมจริง ตราสารหนี้มีเหตุผลในบางครั้งและคนพิถีพิถันพลาดโอกาสมากเกินไปหากพวกเขาไม่สามารถทนได้
Macneil

1
และผู้คนเข้าใจว่าการกู้เงินเพื่อชำระดอกเบี้ยเงินกู้เก่านั้นไม่ยั่งยืน
Christopher Mahan

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

4
นี่คือคำตอบที่น่ากลัว (1) สิ่งนี้ซับซ้อนกว่าคำอธิบายทางเทคนิคของการปรับโครงสร้างใหม่ (2) สิ่งนี้ไม่ได้อธิบายถึงสาเหตุของการปรับโครงสร้าง มันอธิบายถึง "เมื่อ" ของการปรับโครงสร้าง (เช่น: เมื่อมันคุ้มค่า) หรือบางทีฉันแค่ไม่เข้าใจโพสต์นี้และด้วยเหตุนี้จุด (1)
Thomas Eding

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

8

การทำความสะอาดสปริง

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


1
+1: นี่คือคำตอบที่ดีที่สุด imo: และทุกคนสามารถเกี่ยวข้องได้ "คุณอาศัยอยู่ในบ้านของคุณสิ่งสกปรก / ฝุ่น / เล็กน้อย - เป็นระยะ ๆ คุณต้องทำความสะอาดให้ลึก"
Steven Evers

7

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

คุณอาจสงสัยว่าทำไมเราปล่อยให้มันดูเหมือนกับดักหนูในตอนแรก:

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

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


6

ข้อความแสดงแทน

นี่เป็นเวอร์ชันเปรียบเทียบของโฮมเธียเตอร์ที่มีกราฟิกเล็กน้อย

หากคุณต้องการเพิ่มอุปกรณ์ใหม่อีกหนึ่งอย่าง (หรือฟังก์ชันใหม่) ที่คุณสามารถใส่ลงไปได้

หากคุณต้องการที่จะเพิ่มเครื่องใช้อื่นคุณสามารถซื้อสายต่อซึ่งจะซื้อเวลา

แต่ในแต่ละครั้งมันก็ยากที่จะหาทางแก้ไข และคุณเปิดเผยตัวเองกับความเสี่ยง1จากไฟไหม้ [aka โรคจิต] และคุณจะต้องดึงออก bucks ใหญ่จ่ายให้คนที่จะนำซ็อกเก็ตใหม่เข้าสู่ผนังซึ่งค่อนข้างอาจจะบานปลายทั้งหมดทางขึ้นไปยังหลัก แผงวงจรหรือแม้กระทั่งต่อไป

1สิ่งหนึ่ง PHBs ไม่ grok ได้เป็นอย่างดี "ดีถ้ามันอาจจะเกิดขึ้นสิ่งที่คุณกังวลเกี่ยวกับอะไร?"


5

การเปลี่ยนโครงสร้าง - เหมือนกับการจัดระเบียบตู้เสื้อผ้า / ลิ้นชักเครื่องมือของคุณ

  • คุณไม่ทิ้งเสื้อผ้า / เครื่องมือเพียงเพราะพวกเขาอยู่ทุกที่

  • คุณสามารถยืนยันว่าพวกเขาไม่ควรสับสน แต่พวกเขาทำ

เช่นเดียวกับรหัสไม่ โดยเฉพาะเมื่อมันโตขึ้นตามกาลเวลา

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


4

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


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

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

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

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

ฉันจะให้คุณตัวอย่างในการบำรุงรักษา: ปัญหาด้านประสิทธิภาพ คอมโพเนนต์ระบบหรือแอปพลิเคชันทั้งหมดของคุณเขียนด้วย VB และ Microsoft หยุดสนับสนุน ระบบปฏิบัติการไม่รองรับเทคโนโลยีที่ใช้รหัสของคุณ ปัญหาด้านความปลอดภัย. การบำรุงรักษาในปัญหาเหล่านี้ไม่ได้เพิ่มฟังก์ชั่นใหม่ใด ๆ ที่ผู้ใช้อาจสังเกตเห็นได้
Amir Rezaei

4

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

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

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

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

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

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

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

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

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

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

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

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

นี่คือซอฟต์แวร์ของคุณเสร็จสิ้นแล้วหวังว่าคุณจะชอบมัน .... โฮโดยวิธีการที่ฉันฉัน maxed ออกบัตรเครดิตของคุณทำมันหวังว่าคุณจะไม่รังเกียจ ... cya


3

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

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

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


แต่clever == 0เพื่อ2 * clever == 0...
โทมัส Eding

3

ซอฟต์แวร์การเขียนเป็นเหมือนการเขียนหนังสือสารคดีเล่มใหญ่หรือสารานุกรม

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

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


3

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

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

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

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

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


2

มันเหมือนทำความสะอาดบ้านหลังจากปาร์ตี้ที่บ้าคลั่งเมื่อคืนก่อน

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

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

พี่สาวของคุณเดินเข้ามาและบอกว่าห้องดูเหมือนขยะคุณควรซ่อมชั้นวางหนังสือและฉีดพรม เธอพูดถูก ห้องพักดูดีจริงๆ

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

ปฏิบัติต่อรหัสของคุณในลักษณะเดียวกัน


1
ฉันชอบมัน แต่ฉันจะเปลี่ยนเป็นทำความสะอาดห้องครัว ไม่มีการปรุงอาหารสักพัก แต่ทุกอย่างจะดีขึ้น ธุรกิจต่างๆอาจมีปัญหาเกี่ยวกับการมีงานเลี้ยงในเวลาที่ บริษัท :)
Jaap

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

1

ง่าย!

ยกตัวอย่าง ... ทุกคนมีในชีวิตของพวกเขาเขียนจดหมายถึงที่รัก มันจะต้องมีใครบางคนที่รักเพราะในตัวอักษรเหล่านั้นเรามักจะให้ความสนใจกับองค์ประกอบเช่นกัน

ดังนั้นคุณมีข้อความของคุณ ... ความหมายจะผ่านไปในทางใดทางหนึ่ง แต่คุณต้องการให้ทุกอย่างดูดี! ขวา?

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

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

คุณจะจำบทความของใคร


1

การเปรียบเทียบทั้งหมดกับสิ่งต่าง ๆ ในโลกทางกายภาพ - เช่นการสร้างโรงละครคือ IMO แย่มาก

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

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

สิ่งที่น่าสนใจมากเกี่ยวกับการเปลี่ยนโครงสร้างคือเราทำซ้ำ codebase แต่อย่างน้อยตอนเริ่มต้นฟังก์ชั่นยังคงเหมือนเดิม


/ การเปรียบเทียบทั้งหมด /? ฉันไม่เห็นด้วยอย่างยิ่ง คุณเพียงแค่ต้องมีความคิดสร้างสรรค์มากขึ้น ยังไม่ตอบคำถามของ OP
Thomas Eding

@ThomasEding ขอบคุณสำหรับความคิดเห็นของคุณ ฉันไม่เห็นด้วยกับประเด็นที่สอง: จริง ๆ แล้วฉันตอบคำถาม อย่างไรก็ตามฉันจะแก้ไขทันทีสำหรับคุณ
Dan Rosenstark

0

การกู้แฟคตอริ่งเหมือนการล้างบางสิ่งบางอย่างและให้สถานที่ใหม่เพื่อ 'พัก'

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


0

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

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


1
ดังนั้นถ้าฉันเป็น PHB หรือลูกค้า (ผู้ที่จะจ่ายสำหรับการปรับโครงสร้างนี้) ทำไมฉันถึงต้องสนใจ รหัสใช้งานได้ (จากมุมมองของฉัน)
Dan Pichelman

0

ให้สมการคณิตศาสตร์อย่างง่ายแก่พวกเขา ตัวอย่างเช่น:

ไหนง่ายกว่ากัน

y = x + x

หรือ

y = 2x

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

การเปลี่ยนโครงสร้างที่ง่ายที่สุดที่สามารถทำได้คือการเปลี่ยนชื่อ

doX() { ... }
{
   doX()
}

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

doBusinessTransaction() { ... }
{
   doBusinessTransaction()
}

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


1
ฉันชอบการเปรียบเทียบนี้เพราะทุกคนเข้าใจและคล้ายกับโค้ดจริงๆ
Venkat D.

ขอบคุณฉันยังโพสต์ไว้ในบล็อกของฉันด้วยเช่นกันtrajano.net/2013/05/refactoring-explained
Archimedes Trajano

0

รูปภาพบอกหนึ่งพันคำ ตัวอย่างเช่นการเปลี่ยนโครงสร้างมีสองกรณีการใช้งาน:

  • เมื่อสิ่งต่าง ๆ ไม่ถูกต้องในครั้งแรก:

refactoring เมื่อสิ่งต่าง ๆ ไม่ถูกต้องในครั้งแรก

  • เมื่อสิ่งที่น่าเบื่อ:

refactoring เมื่อสิ่งที่น่าเบื่อ

อ้างอิง


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

@bdsl ถูกปกคลุมในที่ทำงาน.
พอล Sweatte

0

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

แน่นอนว่าหลายคนบอกว่าพวกเขาถูกขับเคลื่อนด้วยคุณภาพ แต่มีแรงผลักดันจากกำหนดการ ในกรณีเหล่านี้ฉันให้คำแนะนำที่ถกเถียงกันมากขึ้น: อย่าบอก!

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

(Refactoring, Martin Fowler, 2000, หน้า 61)

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

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