เห็นเพื่อน ๆ ทำการ share เรื่อง Data Oriented Programming (DO) ใน timeline
ก็เลยลองไปอ่านดู พบว่าน่าสนใจดี
จึงลองตั้งเป้าการอ่านขึ้นมาอีกเรื่องของเดือนนี้ (ช่วงวันหยุด)
โดยที่หนังสือ Data Oriented Programming (DO)
น่าจะถูกปล่อยออกมาในปีหน้า
มาดูเนื้อหาที่อ่านในครั้งแรกกันหน่อย

จากรายชื่อหัวข้อต่าง ๆ
ทำการอธิบายให้เห็นว่า Object-Oriented Programming เป็นอย่างไร
มีอะไรที่ก่อให้เกิดปัญหาบ้าง
แล้ว DO เข้ามาช่วยแก้ไขหรือลดปัญหาเหล่านั้นอย่างไร
แน่นอนว่า ก็ย่อมมีทั้งข้อดีและข้อเสียเช่นกัน

Data Oriented Programming (DO) คืออะไร ?

มันคือแนวทางที่เรียบง่ายและไม่ก่อให้เกิดความซับซ้อนจนเกินไป
แน่นอนว่า เป็นอีกแนวทางของการพัฒนาที่ไม่ค่อยมีการสอนหรือพูดถึงเท่าไร
โดยที่จะเรียนรู้ DO นั้นควรที่จะ unlearn
หรือลืมสิ่งที่เรียนและรู้มาไปก่อน

ในการออกแบบตามแนวทางของ DO นั้น

เน้นไปที่ data collections
ประกอบไปด้วย data ที่ไม่สามารถถูกแก้ไขหรือเปลี่ยนแปลงได้ (immutable data)
ส่วน data นั้นจะถูกจัดการผ่าน function หนึ่ง ๆ 
ซึ่งภายใน function นั้น ๆ สามารถใช้งาน data collection อื่น ๆ ได้
ไม่จำเป็นต้องทำงานกับ data หนึ่ง ๆ ไป
จะเรียก function เหล่านี้ว่า generic function

สิ่งที่ DO ให้ความสำคัญมาก ๆ คือ

  • Mutation of data คือ การแก้ไขหรือเปลี่ยนแปลง data
  • The coupling of code and data คือ การผูกมัดระหว่าง code ที่ทำงานกับ data

ถ้า data มีการเปลี่ยนแปลง และ code กับ data ผูกมัดกันอย่างมาก
ผลที่ตามมาคือ ความซับซ้อนของระบบนั่นเอง
ทั้งกระบวนการทำการแก้ไขข้อมูล  ว่าต้องเป็นอย่างไร
ใครบ้างที่ได้รับอนุญาต
ยิ่งการทำงานแบบ multi-thread แล้ว ยิ่งต้องสร้างตัวจัดการมาอีกมากมาย
จะดีกว่าไหม ถ้าไม่ให้เปลี่ยนแปลงไปเลย

ข้อมูลพื้นฐานของ DO คือ entity

ซึ่งมันคือ data collection ที่เป็น immutable
โดย collection มันก็คือ dictionary data structure
ที่ประกอบไปด้วย key กับ value
ยกตัวอย่างเช่น

ข้อมูลชุดนี้ จะถูกจัดการผ่าน generic function
แน่นอนว่า ข้อมูลชุดนี้ไม่ต้องมี blueprint ในการสร้าง

แนวทางของ DO นั้นบอกว่าให้คิดว่า data มันคือ value
ที่ value ไม่มีการเปลี่ยนแปลง
ส่วนการนำข้อมูลไปใช้งานหรือแสดงผล ก็ไม่ต้องมีกระบวนการใด ๆ มาจัดการ

หลาย ๆ คนที่ผ่าน DO อาจจะบอกว่ามันคือ Functional Programming(FP) ชัด ๆ
แน่นอนว่า มันใกล้เคียงกัน
เพราะว่าใช้แนวคิดเดียวกัน
แต่ใน DO ไม่จำเป็นต้องมี function
เนื่องจากเน้นไปที่ data เป็นหลัก
ที่สำคัญ DO สามารถนำไปใช้ได้กับภาษาต่าง ๆ ทั้ง OO และ FP ได้เลย

แนวคิดหรือ Principles ของ DO ประกอบไปด้วย

  • Separate code from data คือการแยก code ทำงานออกจาก data
  • Model entities with generic data structure
  • Data is immutable คือ data จะไม่มีการเปลี่ยนแปลงหรือถูกแก้ไขนั่นเอง
  • Data is comparable by value
  • Data has a literal representation

โดยจะสรุปแต่ละเรื่องในบทความต่อไป