notes.dt.in.th

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

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

คอมเม้นต์: มองว่าสายโปรแกรมเมอร์ เป็นสายงานที่ถ้าไม่เข้าใจจริงๆ จะโม้ได้ยากมากๆ เพราะ 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 มันลึกมากๆ คุยแปปเดียวก็จะรู้เลยว่าคนที่คุยด้วยมีความรู้ด้านนี้ขนาดไหน