You Are What You Implement: เมื่อ Traits นิยามตัวตนของ Object ผ่านปรัชญา Existentialism

Share
You Are What You Implement: เมื่อ Traits นิยามตัวตนของ Object ผ่านปรัชญา Existentialism
Photo by Sonia Remizua on Unsplash

ในโลกของการเขียนซอฟต์แวร์ เรามักจะติดอยู่กับคำถามที่ว่า “วัตถุนี้คืออะไร?” และคำตอบส่วนใหญ่มักจะหนีไม่พ้นการมองหา “สายเลือด” หรือ Hierarchy ของมัน แต่ถ้าเราลองเปลี่ยนมุมมองจากการถามว่ามัน คือใคร มาเป็นการถามว่ามัน ทำอะไรได้ เราอาจจะพบทางออกของระบบที่ยืดหยุ่นและเป็นอิสระมากกว่าเดิม


บทความนี้ผมอยากชวนทุกคนมาสำรวจจุดบรรจบที่น่าทึ่งระหว่างแนวคิด Existentialism ของ Jean-Paul Sartre และการออกแบบระบบด้วย Traits ในภาษา Rust ครับ

Existence Precedes Essence: การดำรงอยู่มาก่อนสารัตถะ

Jean-Paul Sartre นักปรัชญาชาวฝรั่งเศสเคยกล่าวไว้ว่ามนุษย์เรานั้น “Existence precedes essence” เขาเปรียบเทียบว่ามนุษย์เราเกิดมาเป็นเพียง “กระดาษเปล่า” ที่ไม่มีนิยามล่วงหน้า เราแค่ปรากฏตัวขึ้นมาในโลก (Existence) แล้วหลังจากนั้น ทุกการกระทำและการเลือกของเราต่างหาก ที่จะเป็นตัววาดภาพนิยาม (Essence) ว่าเราเป็นใคร

หากคุณไม่เคยเขียนโค้ดเลย Sartre จะบอกว่าคุณไม่ใช่ “โปรแกรมเมอร์” แม้คุณจะเรียนจบด้านนี้มาก็ตาม คุณจะเป็นสิ่งนั้นก็ต่อเมื่อคุณ Implement การกระทำนั้นลงไปในชีวิตจริงๆ เท่านั้น

เมื่อ Rust ปฏิเสธ “สายเลือด” (Inheritance)

แนวคิดนี้ตรงกับปรัชญาของภาษา Rust อย่างประหลาด ในขณะที่ภาษา OOP แบบดั้งเดิมพยายามนิยามวัตถุผ่าน Inheritance (การสืบทอด) ซึ่งเปรียบเสมือนการถูกกำหนด “สารัตถะ” มาตั้งแต่บรรพบุรุษ เช่น ถ้าคุณเป็น Class Dog คุณต้องเป็น Animalมาก่อนโดยเลี่ยงไม่ได้

แต่ใน Rust เราทำงานกับ Composition over Inheritance:

  • Struct คือข้อมูลที่ว่างเปล่า (Data) มันไม่มีพฤติกรรมใดๆ ติดตัวมาแต่เกิด
  • Traits คือชุดของการกระทำ (Behavior)
  • เรานิยามตัวตนของวัตถุผ่านการ impl Trait for Struct

ใน Rust วัตถุหนึ่งชิ้นไม่จำเป็นต้องมี “พ่อแม่” แต่มันถูกนิยามว่า “มันคืออะไร” ผ่านสิ่งที่ “มันทำได้” เหมือนกับมนุษย์ที่ไม่ถูกกำหนดโดยชาติตระกูล แต่ถูกกำหนดโดยการกระทำในปัจจุบัน

Resilient Engineering: ความยืดหยุ่นจากความรับผิดชอบ

การเลือกใช้ Traits แทน Inheritance ไม่ใช่แค่เรื่องของความสวยงามในโค้ด แต่มันคือหัวใจของ Resilient Engineeringเพราะเมื่อเราไม่ผูกมัดวัตถุไว้กับโครงสร้างที่แข็งทื่อจากอดีต ระบบจะมีความยืดหยุ่น (Flexibility) ต่อการเปลี่ยนแปลงสูงมาก

อย่างไรก็ตาม Sartre เตือนเราว่า “Man is condemned to be free” (มนุษย์ถูกสาปให้มีเสรีภาพ) เมื่อไม่มี Class พ่อแม่มาคอยบอกว่าคุณต้องทำอะไร ความรับผิดชอบทั้งหมดจึงตกอยู่ที่การออกแบบของคุณ คุณต้องเป็นคนเลือกเองว่า Struct นี้ควรจะถือครองความสามารถ (Trait) ใด และนั่นคืออิสระที่มาพร้อมกับภาระอันหนักอึ้งของวิศวกร

บทสรุป: เขียนโค้ดเพื่อนิยามตนเอง

ในฐานะ Software Architect ผมเชื่อว่าหลักการนี้ใช้ได้ทั้งกับงานและชีวิต

  • ในทางเทคนิค: จงสร้างระบบที่เน้น “สิ่งที่ทำได้” มากกว่า “สิ่งที่มันเคยเป็น” เพื่อความยืดหยุ่นสูงสุด
  • ในทางชีวิต: ตัวตนของคุณไม่ได้ถูกนิยามด้วยปริญญาหรือตำแหน่งงานในอดีต

สุดท้ายแล้ว “You Are What You Implement” ทุกบรรทัดของโค้ดที่คุณเขียน และทุกความสามารถที่คุณเลือกฝึกฝน คือการสร้างนิยามใหม่ให้กับตัวคุณเองในทุกวันครับ

เกี่ยวกับผู้เขียน: Uncle Quin — Software Engineer ผู้หลงใหลในการเชื่อมโยงวิศวกรรมซอฟต์แวร์เข้ากับปรัชญา

หากบทความนี้มีประโยชน์

คุณสามารถติดตาม Late Night with Uncle Quin ได้ทาง

ที่ที่เราคุยกันเรื่อง software, engineering mindset และอนาคตของ developer

แบบไม่ต้องใส่สูท

แต่ใส่ความจริงของวงการเข้าไปเต็ม ๆ

Read more

เร็วแค่ไหนก็ไร้ค่า ถ้าไปผิดทาง

เร็วแค่ไหนก็ไร้ค่า ถ้าไปผิดทาง

อีกบทเรียนที่ผมได้จากหนังสือ Slack: Getting Past Burnout, Busywork, and the Myth of Total Efficiency ของ Tom DeMarco คือ ทำไมองค์กรใหญ่ ๆ ถึงยึดมั่นกับ Efficiency กันนัก Efficiency คืออะไร? Efficiency แปลว่า "ประสิทธิภาพ" ยกตัวอย่างเช่น

By Chokchai Phatharamalai
กฎของจั๊วะ

กฎของจั๊วะ

ปีนี้ที่อายุ 44 ผม Reflect ตัวเอง และพบว่าหลักการใช้ชีวิตของผมได้มาจากหนังสือ The Seven Habits of Highly Effective People เยอะมาก ใน Habit ทั้ง 7 นี้จะมีเกร็ดเล็กเกร็ดน้อยที่ผมไปศึกษามา แล้วค่อย ๆ เติมเข้าไปเพื่อทำให้ Habit นั

By Chokchai Phatharamalai
วงจรชีวิตในมุมมอง Existentialism และศิลปะแห่งการล้มเหลวในราคาถูก

วงจรชีวิตในมุมมอง Existentialism และศิลปะแห่งการล้มเหลวในราคาถูก

บ่อยครั้งที่เราใช้ชีวิตราวกับกำลังรอคอยที่จะคอมไพล์ (Compile) โปรเจกต์ยักษ์ใหญ่ที่ซับซ้อนและรวมศูนย์เพียงชิ้นเดียว เราวางแผนสำหรับทศวรรษหน้าอย่างพิถีพิถัน เรายึดโยงความสุขไว้กับจุดหมายปลายทางอันไกลโพ้นและเลือนลางของความสำเร็จสูงสุด เราเขียนโค้ดทางความคิดไว้หลายพันบรรทั

By Santi
วนเวียนแต่ไม่วนลูป: เมื่อชีวิตคือฟังก์ชัน Recursion และการเดินทางสู่พื้นที่ปลอดภัย

วนเวียนแต่ไม่วนลูป: เมื่อชีวิตคือฟังก์ชัน Recursion และการเดินทางสู่พื้นที่ปลอดภัย

ในโลกที่หมุนไปด้วยอัตราเร่งอย่างทุกวันนี้ หลายครั้งเรามักพบว่าตัวเองติดอยู่ท่ามกลางความสับสนยุ่งเหยิง ปัญหาบางอย่างในชีวิตไม่ได้มาในรูปแบบที่เรียบง่าย แต่กลับซ้อนทับกันเป็นชั้น ๆ เหมือนกล่องของขวัญใบยักษ์ที่พอเปิดเข้าไป ก็

By Santi