โพสต์คำถามในกลุ่มสมาคมโปรแกรมเมอร์ไทย(opens new window):

มีมาตรวัดอะไรที่บอกว่าโปรแกรมเมอร์คนไหน “โค้ดได้” หรือ “โค้ดเป็น”

คอมเม้นต์:(opens new window) มองว่าสายโปรแกรมเมอร์ เป็นสายงานที่ถ้าไม่เข้าใจจริงๆ จะโม้ได้ยากมากๆ เพราะ Abstraction level มันเยอะมาก ทุกครั้งที่เราคุยเราจะค่อยๆ ใช้ศัพท์ที่ลึกลงเรื่อยๆ มันเป็นตัวบอกได้ระดับนึงเลยว่าคนที่เราคุยด้วยรู้เกี่ยวกับเรื่องที่กำลังคุยลึกขนาดไหน

เช่น สมมติคุยเรื่อง OOP นะครับ

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

จะเห็นว่าความลึกของ OOP มันลึกมากๆ คุยแปปเดียวก็จะรู้เลยว่าคนที่คุยด้วยมีความรู้ด้านนี้ขนาดไหน