ฉันจะหลีกเลี่ยง“ ปรีชาการเพิ่มประสิทธิภาพที่ไม่ดีของนักพัฒนา” ได้อย่างไร


22

ฉันเห็นบทความที่เขียนข้อความนี้:

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

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


1
สิ่งนี้เกิดขึ้นกับ "ฉันจะหลีกเลี่ยง [พึ่งพา] กับสัญชาติญาณ [เมื่อตัดสินใจ] ได้อย่างไร" ง่าย: คุณยืนยันด้วยข้อมูลและข้อมูลที่ยาก ดังนั้นในกรณีของการปรับให้เหมาะสมจากมุมมองของนักพัฒนา: คุณเป็นมาตรฐาน
haylem

คำตอบ:


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

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

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


51
หรือเพื่อให้ง่ายยิ่งขึ้น: "เพื่อหลีกเลี่ยงสัญชาตญาณการเพิ่มประสิทธิภาพที่ไม่เหมาะสมอย่าใช้สัญชาตญาณวัด"
Kyralessa

6
นั่นเป็นเหตุผลว่าทำไมคุณถึงได้รับคำตอบและฉันก็เป็นแค่ความคิดเห็น : P
Kyralessa

2
@ โทมัสหากคุณเล่นซอกับความสามารถในการอ่านและการบำรุงรักษาคุณไม่ได้มองปัญหาด้านประสิทธิภาพอย่างแน่นอนใช่ไหม?

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

2
@ Thorbjørnหลังจากปรับแต่งประสิทธิภาพแล้วคุณจะต้องทดสอบรหัสใหม่อีกครั้งโดยละเอียด ประหยัดเวลาหรือหน่วยความจำจะไม่มีความหมายถ้าคุณนำข้อบกพร่อง
Thomas Owens

10

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

Java ทำให้สิ่งนี้เป็นเรื่องง่ายด้วยเครื่องมือ VisualVMซึ่งได้รับการรวมเข้ากับ Java Development Kit (JDK) รุ่นล่าสุด แนวคิดคือการค้นหาว่าวิธีใดที่เรียกว่ามากที่สุดและวิธีใดที่คุณใช้เวลาส่วนใหญ่ทั้งในรหัสของคุณและในห้องสมุดภายนอก คุณยังสามารถรับข้อมูลประสิทธิภาพการทำงานในการเก็บขยะเพื่อให้คุณสามารถปรับแต่งตัวสะสมของคุณและปรับพื้นที่ฮีปต่ำสุด / สูงสุดตามที่แอปพลิเคชันของคุณต้องการ


VisualVM ไม่ได้อยู่ใน JRE เพียง JDK

1
@ Thorbjørn Ravn Andersen โทรดี ฉันควรชี้แจง อย่างไรก็ตามหากคุณทำการพัฒนา Java คุณจะต้องติดตั้ง JDK (แม้ว่าคุณจะใช้ OpenJDK หรือคล้ายกัน - ฉันไม่รู้ว่ามาจาก VisualVM) หรือไม่
Thomas Owens

1
ฉันมักจะสลับพื้นที่ทำงานใน Eclipse ซึ่งเป็นค่าเริ่มต้นเป็น JRE ซึ่งเปิดตัว Eclipse เนื่องจากง่ายต่อการติดตั้ง JRE มากกว่า JDK เราจึงย้ายไปยังกระบวนการสร้างอย่างช้าๆซึ่งรวมถึงคอมไพเลอร์ Eclipse และสามารถทำงานบน JRE ธรรมดาได้ ดังนั้นวันนี้คุณสามารถทำงานได้จริงโดยไม่ต้อง JDK สามารถดาวน์โหลด VisualVM แยกต่างหากทำให้ง่ายต่อการใช้งานกับ Java เวอร์ชันที่ได้รับเนื่องจากใน Windows 64- บิต JVM นั้นไม่สามารถเชื่อมต่อกับ JVM แบบ 32 บิตและในทางกลับกันได้

9

ในฐานะที่ทุกคนที่นี่กำลังพูดถึงprofilersฉันจะมุ่งเน้นไปที่ส่วนนี้ของคำถาม

นักพัฒนาจะหลีกเลี่ยงสัญชาตญาณที่ไม่ดีนี้ได้อย่างไร

คุณ. ทำ. ไม่. แต่คุณไม่เคยเพิ่มประสิทธิภาพในช่วงต้น
ทำซ้ำอีกครั้งและอีกครั้งและอีกครั้งเพราะมันเป็นมนต์ศาสนา

คุณจะพบว่าตัวเองทำเช่นนั้นและจะค้นพบว่าคุณไม่ควรมี
และจากนั้นอีกครั้ง
และอีกครั้ง.

ในช่วงต้นของการเพิ่มประสิทธิภาพเป็นหนึ่งของโปรแกรมเมอร์บาปทุน

เครื่องมือและสิ่งที่เป็นส่วนหนึ่งของการเพิ่มประสิทธิภาพในภายหลังซึ่งเป็นงานฝีมือที่จัดตั้งขึ้น


การเพิ่มประสิทธิภาพ "รหัสที่ซับซ้อน" ก่อนหน้านี้แน่นอน อัลกอริทึม Chjoosing และ / หรือโครงสร้างข้อมูลที่เหมาะสมกับปัญหาของคุณและ (ด้วยการประมวลผลที่คาดหวังของคุณ) มีลักษณะการทำงานที่ดีเป็นสิ่งที่ควรทำก่อนที่คุณจะเริ่มเขียนโค้ด
Vatine

@Vatine ใช่เคยไปแล้ว ไม่ทำไม่ได้ ทำสิ่งที่เหมาะกับแผนที่ความคิดของคุณ มันอาจจะเป็นอัลกอริทึม performant มากที่สุดและผมหวังว่าคุณจะเห็นว่ามันไม่ได้มีการ
ZJR

มันฟังดูเป็นหลักการของ YAGNI - คุณไม่ต้องการมัน!
EL Yusubov

7

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

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


5

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

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

ฉันเคยเห็น Java เว็บแอปพลิเคชั่นที่รั่วมากจนพวกเขาเรียกใช้เซิร์ฟเวอร์จากพื้นที่สว็อป!

หากคุณใช้ทั้ง runtime profiler และลักษณะของ memory profiler คุณจะได้เรียนรู้การเขียนโค้ดที่เร็วขึ้นและผอมลงได้อย่างสะดวก นี่มีผลกระทบที่รหัสของคุณมีแนวโน้มที่จะทำงานได้อย่างรวดเร็วในการลองครั้งแรก


1

การแก้ไขของฉันคือการเริ่มต้นด้วยคำตอบที่ชัดเจนสำหรับคำถามสองข้อ:

  1. วิธีการวัดประสิทธิภาพ (เช่นการวัดความเร็วในการโหลดข้อมูล )
  2. ค่าเป้าหมายคืออะไร (เช่นโหลดข้อมูลใน 3 วินาทีหรือน้อยกว่าด้วยความมั่นใจ 95% )

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


1

สิ่งที่ฉันได้พบคือยาแก้พิษที่ดีที่สุดในการเพิ่มประสิทธิภาพก่อนวัยอันควรคือวิธีนี้

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

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


1
และน่าเสียดายที่คุณสามารถพาครอบครัวกลับไปได้เพียง 200 ปอนด์ดังนั้นอย่ายิงกระรอกทั้งวัน
จอร์แดน

1

คำถามเก่า แต่ฉันจะเสนอคำตอบนี้ซึ่งแตกต่างจากคนอื่นอย่างมาก

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

สิ่งอื่นใดคือการปรับให้เหมาะสมก่อนกำหนดและต้องใช้สัญชาตญาณของคุณซึ่งมักผิด


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

0

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

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

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

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

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

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


0

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

จากประสบการณ์ส่วนตัวของฉันผู้พัฒนาที่ยอดเยี่ยมโดยเฉพาะ (แต่มีจุดบอดเกี่ยวกับวิธีที่ผู้ใช้ใช้งานซอฟต์แวร์จริง ๆ ) การปรับอัลกอริทึมการแบ่งย่อยด้วย profiler ในมือ (ดีมากและมีราคาแพงและครบวงจร: Intel VTune พร้อมกราฟโทร การสุ่มตัวอย่างด้านบนของตัวกรองโปรไฟล์ GPU) สำหรับการทำ mesh ให้ได้ผลลัพธ์ที่น่าอัศจรรย์ด้วยการพันล้าน facets บน GPU เมื่อแบ่งย่อยแบบดั้งเดิมอย่างง่ายเช่นคิวบ์ที่มี 6 กรง / รูปหลายเหลี่ยมอินพุต ยกเว้นเขาปรับและปรับเทียบกับกรณีทดสอบซึ่งไม่เหมือนกับกรณีการใช้งานจริงใด ๆ (ผู้ใช้ไม่ต้องการให้ facets พันล้านก้อนในคิวบ์ย่อยเริ่มคล้ายกับทรงกลมที่สมบูรณ์แบบอินพุตย่อยของพวกเขามีแนวโน้มที่จะเป็นตัวละครและยานพาหนะ และอินพุตที่ซับซ้อนอื่น ๆ )

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

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

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

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