[แปล] Dieter Rams' principles of good design applied to software engineering

[แปล] Dieter Rams' principles of good design applied to software engineering

ไปเจอ Repository นี้มาใน GitHub ครับ เป็นการตีความ Principles of Good Design ในตำนานของ Dieter Rams ในมุมของ Software Engineering ซึ่งมีอยู่ 10 ข้อด้วยกัน ผมเห็นว่าน่าสนใจดี เลยแปลมาฝากกัน


1.ซอฟท์แวร์ที่ดีต้องเป็นนวัตกรรม (Good software is innovative)

ปรับปรุงซอฟท์แวร์เก่าด้วยเทคโนโลยีใหม่ๆ หรือสร้างซอฟท์แวร์ใหม่ด้วยเทคโนโลยีที่มีอยู่แล้ว

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

2.ซอฟท์แวร์ที่ดีต้องมีประโยชน์ (Good software is useful)

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

3.ซอฟท์แวร์ที่ดีต้องมีศิลปะ (Good software is aesthetic)

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

4.ซอฟท์แวร์ที่ดีต้องเข้าใจได้ (Good software is understandable)

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

5.ซอฟท์แวร์ที่ดีต้องตรงไปตรงมา (Good software is honest)

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

6.ซอฟท์แวร์ที่ดีต้องไม่น่ารำคาญ (Good software is unobtrusive)

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

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

7.ซอฟท์แวร์ที่ดีต้องยั่งยืน (Good software is long-lasting)

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

8.ซอฟท์แวร์ที่ดีต้องถูกคิดมาอย่างถี่ถ้วน (Good software is thorough down to the last detail)

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

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

9.ซอฟท์แวร์ที่ดีต้องเป็นมิตรกับสิ่งแวดล้อม (Good software is environmentally friendly)

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

10.ซอฟท์แวร์ที่ดีต้องมีขนาดเล็กเท่าที่จะทำได้ (Good software is as little software as possible)

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

พยายามต่อต้านการทำอะไรที่ใหญ่เกินความจำเป็น เมื่อถึงจุดที่ซอฟท์แวร์เรา "เกือบที่จะดีพอ" เมื่อนั้นแหละคือเสร็จ ความหมายของคำว่าเสร็จมาจาก 1) ปราศจากข้อบกพร่อง 2) ทำงานสอดคล้องกับความต้องการ 3) มีสมรรถนะตามที่ต้องการ ซึ่งเราต้องการทั้งสามข้อนี้เลย และถึงแม้ว่ามันจะตามมาด้วยสิ่งที่ต้องทำเยอะมาก แต่ก็ไม่มากเกินกว่านี้อีกแล้ว