เราควรหยุดทำงานและทำเครื่องมือเมื่อใด


25

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

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



1
อาจ refactor ต่อเครื่องมือและทำงานต่อไป
Ray Tayek


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

คำตอบ:


27

ฉัน "สร้างเครื่องมือ" เมื่อสิ่งเหล่านี้เป็นจริง:

  1. งานเป็นสิ่งที่สร้างความรำคาญให้ฉัน
  2. ความเสี่ยงของข้อผิดพลาดของมนุษย์ในงานมีขนาดใหญ่เกินไป

"ความเสี่ยง" สำหรับตัวเลือกที่ 2 ไม่จำเป็นต้องมีขนาดใหญ่ - ค่าใช้จ่ายในการสร้างเครื่องมือขนาดเล็กหนึ่งมักจะมีขนาดเล็กดังนั้นหากคุณประหยัดคือความเสี่ยงในการใช้งาน 10 นาทีอีกครั้งสัปดาห์ละครั้ง ตอบแทนตัวเองอย่างรวดเร็ว

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

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


2
+1 สำหรับการหลีกเลี่ยงข้อผิดพลาดเนื่องจากเป็นมากกว่าเวลาปกติกับเวลาที่บันทึกเมื่อดำเนินการ
k3b

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

9

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

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

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

5

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

ฉันไม่ได้สร้าง "เครื่องมือ" แบบเต็มรูปแบบในตอนนี้มีเพียงสคริปต์เล็ก ๆ (โดยปกติแล้วคือทุบตีหรืองูหลาม Perl จะทำงานได้เช่นกันหรือแม้กระทั่ง PHP) ที่ทำสิ่งที่ฉันทำด้วยตนเองมาก่อนโดยอัตโนมัติ โดยพื้นฐานแล้วมันเป็นการประยุกต์ใช้หลักการ DRY (หรือหลักการ Single Source Of Truth ซึ่งเป็นสาระสำคัญในสิ่งเดียวกัน) - หากคุณต้องเปลี่ยนไฟล์ต้นฉบับสองไฟล์ควบคู่กันจะต้องมีความจริงร่วมกันที่พวกเขาแบ่งปันและ ความจริงจะต้องมีการแยกตัวออกและเก็บไว้ในที่เดียว เป็นเรื่องที่ดีถ้าคุณสามารถแก้ไขปัญหานี้ได้ด้วยการปรับโครงสร้างภายใน แต่บางครั้งสิ่งนี้ไม่เป็นไปได้และนั่นคือที่สคริปต์ที่กำหนดเองเข้ามา

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

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

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

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


4

ฉันเพิ่งจำสิ่งนี้:

xkcd - มันคุ้มค่ากับเวลาหรือไม่

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

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


1
ทำได้ดีนี่! :-) แต่เวลาที่บันทึกไว้อาจอยู่ในภารกิจอื่นด้วยเช่นกันเนื่องจากเครื่องมือสามารถใช้งานได้มากกว่าหนึ่งจุดประสงค์หรือเพราะความรู้ที่คุณได้รับเมื่อเขียนเครื่องมือ
Hans-Peter Störr

3

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

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

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


2

คำตอบอื่น ๆ ทั้งหมดเป็นสิ่งที่ดี แต่ฉันต้องการเพิ่มเหตุผลอีกข้อหนึ่งว่าทำไมการใช้เวลาสร้างเครื่องมือขนาดเล็ก (และปรับแต่ง. vimrc, .emacs ฯลฯ ):

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

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

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


1

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

ฉันใช้เหตุผล 2 ประการเพื่อสนับสนุนสิ่งนั้น

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

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

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