การเขียนโค้ดสำหรับคอมพิวเตอร์นั้นยาก แต่การเขียนโค้ดสำหรับมนุษย์ยิ่งยากกว่า
- การเขียนโค้ดสำหรับคอมพิวเตอร์นั้นยากอยู่แล้ว เพราะต้องแยกเป้าหมายทางธุรกิจขนาดใหญ่ออกเป็นคำสั่งเชิงตรรกะเล็ก ๆ
- แต่การเขียนโค้ดสำหรับมนุษย์นั้นยากกว่า เพราะเป็นงานที่ผสานทั้งวิทยาการคอมพิวเตอร์และจิตวิทยาเข้าด้วยกัน
- ดังที่ Richard Feynman เคยกล่าวไว้ ลองนึกดูว่าฟิสิกส์จะยากเพียงใดหากอิเล็กตรอนมีความรู้สึก นี่เป็นคำอธิบายที่เหมาะสมกับการเขียนโปรแกรมสำหรับมนุษย์
การเริ่มต้นใช้งานก็คือตัวผลิตภัณฑ์
- การรับฟังความคิดเห็นของผู้ใช้เป็นเรื่องสำคัญ แต่ความคิดเห็นส่วนใหญ่มักมาจาก power user ที่ใช้ผลิตภัณฑ์อยู่บ่อยครั้ง
- มี survivorship bias อยู่เสมอ แทบไม่ได้ยินความคิดเห็นจากผู้ใช้ที่ยังเริ่มต้นใช้งานไม่ได้เลย
- ผลิตภัณฑ์สำหรับผู้บริโภคปรับปรุงกระบวนการ onboarding มานานแล้ว เครื่องมือสำหรับนักพัฒนาก็ควรทำเช่นเดียวกัน
- ควรมองกระบวนการ onboarding ว่าเป็นส่วนหนึ่งของผลิตภัณฑ์ และลดการตั้งค่าให้น้อยที่สุด เพื่อให้ผู้ใช้เริ่มใช้งานได้ภายในไม่กี่นาที
มนุษย์เรียนรู้จากตัวอย่าง ไม่ใช่จาก 'แนวคิดหลัก'
- มนุษย์เก่งเรื่องการจับคู่รูปแบบ ขณะที่คอมพิวเตอร์ทำงานตามตรรกะที่เคร่งครัด
- เอกสารของเครื่องมือสำหรับนักพัฒนาจำนวนมากถูกเขียนราวกับเป็นโปรแกรมคอมพิวเตอร์ ซึ่งไม่เหมาะกับมนุษย์
- การเรียนรู้ผ่านตัวอย่างมีประสิทธิภาพมากกว่า ตัวอย่างช่วยให้ผู้ใช้เข้าใจเครื่องมือได้ดีขึ้น
ตกหลุมพรางของความสำเร็จ
- โหมดพื้นฐานของการเขียนโปรแกรมคือการแก้ข้อผิดพลาด ผู้ใช้ใช้เวลาส่วนใหญ่ไปกับการแก้ข้อผิดพลาด
- การพาผู้ใช้จากข้อผิดพลาดไปสู่ความสำเร็จเป็นเรื่องสำคัญ
- ควรใช้ข้อผิดพลาดเป็นโอกาสในการนำผู้ใช้ไปยังเส้นทางที่ถูกต้อง ใส่โค้ดสไนเป็ตใน exception handling และให้ความช่วยเหลือผ่านข้อความเตือน
หลีกเลี่ยงภาวะโอเวอร์โหลดทางแนวคิด
- การต้องทำความเข้าใจแนวคิดใหม่ก่อให้เกิดแรงเสียดทาน
- แนวคิดใหม่ 2-3 อย่างยังพอรับได้ แต่การต้องเรียนรู้แนวคิดใหม่ 8 อย่างนั้นหนักเกินไป
- เฟรมเวิร์กที่ดีควรมอบความสามารถทรงพลังด้วยแนวคิดจำนวนน้อย ตัวอย่างเช่น React มอบความสามารถสูงด้วยแนวคิดง่าย ๆ ไม่กี่อย่าง
หลักการเป็ดเชิงแนวคิด
- เมื่อต้องแนะนำแนวคิดใหม่ การใช้คำที่ผู้ใช้คุ้นเคยเป็นเรื่องสำคัญ
- ตัวอย่างเช่น การเรียกสิ่งที่ประเมินค่าใหม่ว่า 'ฟังก์ชัน' จะดีกว่า เพราะช่วยให้ผู้ใช้ใช้ mental model เดิมที่มีอยู่แล้วได้
Programmability
- ผู้ใช้จะทำงานอย่างสร้างสรรค์กับ codebase
- เกือบทุกอย่างในเฟรมเวิร์กควรเป็นสิ่งที่ 'เขียนโปรแกรมได้'
- ควรเปิดให้เรียกใช้งานได้โดยตรงจากโค้ดแทน CLI และเปลี่ยนการตั้งค่าให้เป็น SDK หรือ API
ควรระวังเวทมนตร์ ค่าเริ่มต้น และไวยากรณ์น้ำตาล
- ค่าเริ่มต้นและความสามารถแบบเวทมนตร์ควรถูกนำมาใช้อย่างระมัดระวัง
- หากค่าเริ่มต้นใช้ได้ไม่เกิน 97% หรือความสามารถแบบเวทมนตร์ใช้ได้ไม่ถึง 99% ก็ควรหลีกเลี่ยงการนำมาใช้
- การเขียนโค้ดไม่ใช่กอล์ฟ เป้าหมายไม่ควรเป็นการเขียนโค้ดให้น้อยที่สุด แต่ควรให้ความสำคัญกับความอ่านง่าย
การเขียนโค้ดสำหรับมนุษย์นั้นยาก
- สิ่งต่าง ๆ ส่วนใหญ่ควรเป็น immutable
- ควรหลีกเลี่ยง 'scaffolding' (การสร้างโค้ดอัตโนมัติ)
- ต้องทำให้ feedback loop เร็วมาก
- ควรมีขั้นตอนการเลิกใช้หรือทิ้งสิ่งเดิมเพื่อให้ผู้ใช้รับมือได้ง่าย
- ควรใช้การทดสอบอัตโนมัติกับโค้ดสไนเป็ตในเอกสารและตัวอย่าง
สรุปโดย GN⁺
- บทความนี้พูดถึงความยากของการเขียนโค้ดสำหรับมนุษย์และแนวทางแก้ไข
- การสร้างเครื่องมือสำหรับนักพัฒนาที่เป็นมิตรต่อผู้ใช้เป็นเรื่องสำคัญ และเริ่มต้นตั้งแต่กระบวนการ onboarding
- การเรียนรู้ผ่านตัวอย่างมีประสิทธิภาพ และหัวใจสำคัญคือการพาผู้ใช้จากข้อผิดพลาดไปสู่ความสำเร็จ
- เมื่อต้องแนะนำแนวคิดใหม่ ควรใช้คำที่ผู้ใช้คุ้นเคยและคำนึงถึง programmability
- คุณสมบัติอย่างค่าเริ่มต้นและความสามารถแบบเวทมนตร์ควรถูกใช้ด้วยความระมัดระวัง และควรให้ความสำคัญกับความอ่านง่าย
1 ความคิดเห็น
ความเห็นจาก Hacker News
ผู้คนเรียนรู้กันคนละแบบ
การเขียนและความสามารถในการเอาใจเขามาใส่ใจเรามีความสำคัญ
ไม่ใช่ทุกคนที่เรียนรู้จากตัวอย่าง
โค้ดถูกเขียนขึ้นเพื่อมนุษย์
อ้างอิงจาก Code Complete
การเขียนโค้ดมีไว้เพื่อมนุษย์
ความเห็นเกี่ยวกับพัฒนาการของ IDE
โปรโมตบล็อกโพสต์
ความเห็นเกี่ยวกับวิธีเรียนรู้การเขียนโปรแกรม
ความสำคัญของตัวอย่างและแนวคิดหลัก