โพสต์คำถามในกลุ่มสมาคมโปรแกรมเมอร์ไทย:
มีมาตรวัดอะไรที่บอกว่าโปรแกรมเมอร์คนไหน “โค้ดได้” หรือ “โค้ดเป็น”
คอมเม้นต์: มองว่าสายโปรแกรมเมอร์ เป็นสายงานที่ถ้าไม่เข้าใจจริงๆ จะโม้ได้ยากมากๆ เพราะ Abstraction level มันเยอะมาก ทุกครั้งที่เราคุยเราจะค่อยๆ ใช้ศัพท์ที่ลึกลงเรื่อยๆ มันเป็นตัวบอกได้ระดับนึงเลยว่าคนที่เราคุยด้วยรู้เกี่ยวกับเรื่องที่กำลังคุยลึกขนาดไหน
เช่น สมมติคุยเรื่อง OOP นะครับ
- บางคนอาจจะรู้แค่ สร้าง class สร้าง interface ถามลึกกว่านั้นก็จะเริ่มงงละ
- บางคนอาจจะรู้เป็นภาษาๆ ไป เช่น
public
/private
หรือabstract
/final
- บางคนอาจจะพูดถึง Design Pattern เช่น Singleton, Strategy
- บางคนอาจจะบอกได้แค่ว่า Design Pattern แต่ละตัวหน้าตามันเป็นยังไง หรือ Implement ยังไง
- บางคนอาจจะอธิบายได้ด้วยว่ากรณีไหนควรใช้หรือไม่ควรใช้
- บางคนอาจจะสามารถอธิบายข้อดีและข้อเสียของแต่ละ Pattern
- บางคนอาจจะสามารถยก SOLID Principle หรือ GRASP Principle หรือเปรียบเทียบระหว่าง inheritance กับ composition
- บางคนอาจจะพูดเรื่องเทคนิคการ Refactoring ต่างๆ การประเมินความซับซ้อนของโค้ด และ Technical debt
- บางคนอาจจะรู้เกี่ยวกับเรื่อง Software design and architecture ชนิดต่างๆ บางคนก็รู้จักแต่ MVC
- บางคนก็รู้จักพวก Hexagonal architecture, Ports and adaptor, Clean architecture
- บางคนอาจจะสามารถอธิบายพื้นฐานของ OOP เช่น Polymorphism, Inheritance
- บางคนอาจจะสามารถอธิบายแนวคิดเบื้องลึกกว่านั้นได้เช่น Late-binding, message passing และเทียบกับการเขียนโปรแกรมแบบอื่นๆ
- บางคนสามารถเทียบระหว่าง OOP กับ functional programming ให้ฟังได้
- บางคนก็บอกว่าชอบอย่างนึงมากกว่าอีกอย่างนึง
- บางคนก็บอกว่าทั้ง 2 คอนเซปต์สามารถใช้ร่วมกันได้
- บางคนอาจจะเข้าใจหลักการของ OOP พอที่จะสร้างระบบที่เป็น OOP ในภาษาที่ไม่มีฟีเจอร์ OOP ในตัวเอง (เช่นภาษา C)
- บางคนอาจจะพูดถึงไอเดียของเจ้าของ คือ Alan Kay ว่าตอนที่เขาออกแบบเขามีแนวคิดอย่างไร แล้วมันต่างจากที่ใช้ปัจจุบันอย่างไรบ้าง อาจจะมีการพูดถึงแนวคิดในภาษา Smalltalk
- บางคนสามารถเปรียบเทียบข้อดีข้อเสียต่างๆ ของ Architecture แต่ละชนิด และสามารถประเมินได้ว่ามีผลในระยะสั้นกับระยะยาวอย่างไรบ้าง
- บางคนสามารถตัดสินใจ เลือก Tradeoff สำหรับความต้องการที่ต่างกันในเวลาที่ต่างกัน แล้วหาวิธีปรับเปลี่ยน (Evolve architecture) ตามความต้องการที่เปลี่ยนไปได้
จะเห็นว่าความลึกของ OOP มันลึกมากๆ คุยแปปเดียวก็จะรู้เลยว่าคนที่คุยด้วยมีความรู้ด้านนี้ขนาดไหน