
“โค้ดของเราอาจจะรันได้เร็วมีประสิทธิภาพ แต่ก็คงจะไม่ดีถ้าพัฒนาต่อยาก หรือต้องเสียเวลาแก้บัคเป็นวัน ๆ เพราะโค้ดมีความซับซ้อนสูง”
เราพบว่าการทำหลาย ๆ อย่างไม่ว่าจะเป็นการเขียนโค้ด เขียนบทความ รวมไปถึงการวางแผนทำอะไรต่าง ๆ นา ๆ “simplicity” เป็นหนึ่งใน trade-off ที่เราต้องคำนึงถึงเสมอ
“บทความที่เขียนอาจจะครบคลุมเนื้อหาทุกรายละเอียด แต่ก็คงจะไม่ดีถ้าคนอ่านไม่จบ หรืออ่านแล้วจับใจความไม่ได้เพราะรายละเอียดเยอะเกินไป”
“เราอาจจะเขียน strategy ของธุรกิจออกมา genius สุด ๆ แต่ก็คงจะไม่ดีถ้าเราไม่สรุปให้ simple พอที่จะจำได้แบบง่าย ๆ เพื่อนำไปใช้ตอน execute”
“เราอาจจะ setup productivity system ออกมาให้ทำงานได้เร็วสุด ๆ แต่คงจะไม่ดีถ้าเราต้องคอยเสียเวลา maintain เรื่อย ๆ หรือต้องเสียเวลาหาทางแก้เวลา tool ใดสักตัวเกิดใช้งานไม่ได้”
เมื่อวันก่อนเราอ่าน The Dream Machine เรื่องของ “stored-program architecture” ของ John von Neumann ที่มีการแยกส่วนของ CPU และ memory อย่างชัดเจน โดย CPU จะไปอ่าน program ที่เก็บไว้ใน memory ดึงค่ามาคำนวน จากนั้นก็เก็บค่ากลับไปใน memory วนไปเรื่อย ๆ (Fetch, Execute, Return)
เขาเปรียบเทียบว่ามันเหมือนกับ “ถ้าเราจะทำ salad เราจะเดินออกไปซื้อ carrot กลับบ้านมาหั่น จากนั้นเดินไปซื้อผักกาด กลับบ้านมาหั่น จากนั้นก็เดินไปซื้อซอส …” ซึ่งมันฟังดูไม่มีประสิทธิภาพมาก ๆ แบบจะเดินไปซื้อทำไมรัว ๆ ก็ซื้อมาทีเดียวสิ
แต่ถ้าเราพยายามจะเดินไปซื้อหลาย ๆ อย่างในทีเดียว จะส่งผลให้วงจร CPU มีความซับซ้อนขึ้นมาก ๆ และเพิ่ม chances of failure ได้
“serial operation was the price to be paid for reliability.”
“optimized for simplicity” ความเรียบง่ายนั้นเป็นอะไรที่สำคัญมาก และเป็นอะไรที่ควรคำนวนเสมอถ้าจะออกแบบอะไรก็ตาม