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

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

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

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

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

เพราะชีวิตจริงทำงานบน REPL

สำหรับวิศวกรระบบ นักพัฒนาแบ็กเอนด์ และโปรแกรมเมอร์ ตัวย่อนี้คือธรรมชาติที่คุ้นเคย: Read-Eval-Print Loop มันคือสภาพแวดล้อมโต้ตอบที่ดิบและเรียบง่าย ที่ซึ่งโค้ดจะถูกประเมินผลในเสี้ยววินาทีที่มันถูกป้อนเข้ามา แต่ถ้าคุณก้าวถอยออกมาจากหน้าจอเทอร์มินอล แล้วมองกลไกนี้ผ่านเลนส์ของปรัชญา คุณจะตระหนักได้ว่ามันคือภาพสะท้อนอันเที่ยงตรงและซื่อตรงของจิตสำนึกมนุษย์

วงจร 4 ขั้นตอนแห่งการดำเนินชีวิต

REPL ทำงานเป็นลูปที่ไม่มีวันขาดตอนผ่าน 4 ระยะที่ชัดเจน เมื่อนำมาปรับใช้กับโครงสร้างชีวิตของมนุษย์ มันจะสอดรับกับวิธีที่เรานำพาตัวเองผ่านโลกความจริงได้อย่างสมบูรณ์แบบ:

  1. Read: นี่คือการเผชิญหน้ากับข้อมูลดิบของเรา สัมผัสที่รับรู้ การเปลี่ยนแปลงที่ไม่คาดคิดของตลาด เซิร์ฟเวอร์ที่ล่ม หรือสายฝนที่ตกพรำอยู่นอกหน้าต่าง จักรวาลโยนข้อมูลใส่เราโดยไม่ขออนุญาต มันคือความจริงที่กำลังวิ่งเข้าสู่ Buffer ของข้อมูลขาเข้า
  2. Eval: ในทางซอฟต์แวร์ นี่คือจุดที่ตัวแปรถูกผูกเข้าด้วยกันและนิพจน์ถูกคำนวณ ในทางชีวิต นี่คือการตื่นรู้ของจิตสำนึกมนุษย์ จิตใจของเรานำข้อมูลดิบนั้นมา ประมวลผลมัน และตีความมันผ่านกรอบของตัวตน (Identity) และระบบความเชื่อที่เรามี
  3. Print: การประเมินผลต้องการเอาต์พุต สิ่งนี้คือแอ็กชันที่เราเลือกทำ โค้ดที่เราส่งมอบ คำพูดที่เราเอ่ย และการตัดสินใจที่เราทำให้ปรากฏขึ้นในโลกทางกายภาพ มันคือผลลัพธ์ในทันทีของการประมวลผลภายในใจเรา
  4. Loop: เทอร์มินอลจะพิมพ์เอาต์พุตนั้นออกมา ล้างบรรทัดเก่า แล้วคืนค่ากลับสู่หน้าจอว่างๆ มันกลับคืนสู่ความเงียบงันเพื่อรอคอยคำสั่งถัดไป เราตื่นขึ้นมาในเช้าวันรุ่งขึ้นเพื่อเผชิญหน้ากับตัวแปรชุดใหม่ และเริ่มต้นวงจรนี้ซ้ำอีกครั้ง

จังหวะนี้เองคือแก่นแท้ของ Existentialism ลองนึกถึงคำกล่าวของ Jean-Paul Sartre ที่ว่า “การดำรงอยู่มาก่อนสารัตถะ” (Existence precedes essence) หรือการสำรวจความย้อนแย้งอันไร้สาระของโลก (The Absurd) โดย Albert Camus หน้าจอ REPL ไม่เคยสนใจประวัติการทำงานใน Session ก่อนๆ ของคุณ มันไม่สนว่าคุณจะพิมพ์คำสั่งผิดพลาดมาแล้วสี่สิบครั้งก่อนหน้านี้ สิ่งเดียวที่มีอยู่จริง และเป็นความจริงเดียวที่ระบบยอมรับ คือคำสั่งที่อยู่ตรงตำแหน่งเคอร์เซอร์ในเวลานี้

คุณคือผู้รับผิดชอบอย่างสมบูรณ์ต่อข้อมูลที่ป้อนลงไปในบรรทัดปัจจุบัน

ความงามแบบสโตอิกของการล้มเหลวในราคาถูก

ข้อดีที่ยิ่งใหญ่ที่สุดประการหนึ่งของ REPL คือแนวคิดที่พยายามจะลอกเลียนแบบในระบบการทำงานสมัยใหม่ แต่อดไม่ได้ที่จะทำให้มันซับซ้อนเกินไป นั่นคือ Fail Fast, Fail Cheap (ล้มเหลวให้เร็ว ล้มเหลวในราคาถูก)

หากคุณพิมพ์คำสั่งลงใน REPL แล้วตรรกะของคุณผิดพลาด คุณไม่ได้ทำระบบปฏิบัติการทั้งหมดพัง คุณแค่กด Enter หน้าจอจะแสดงข้อความ Error สั้นๆ ที่แม่นยำออกมาในทันที แล้ว Prompt ก็จะรีเซ็ตกลับมาที่เดิม ระบบไม่ได้ระเบิด ฮาร์ดแวร์ยังปลอดภัยดี คุณเพียงแค่มองดูข้อผิดพลาดนั้น กดปุ่มลูกศรขึ้นเพื่อเรียกคำสั่งเดิมกลับมา แก้ไขตัวอักษรสองสามตัว แล้วลองใหม่อีกครั้ง

มันคือความล้มเหลวที่ถูกปอกเปลือกความดราม่าออกไปจนหมดสิ้น

แต่ในชีวิตจริงภายนอกเทอร์มินอล เรากลับปฏิบัติกับทางเลือกของเราเหมือนว่าทุกๆ การตัดสินใจจำเป็นต้องผ่านการปรับโครงสร้างองค์กรครั้งใหญ่ หรือต้องรื้อเขียนโค้ดใหม่ทั้งหมด เราเป็นอัมพาตด้วยความกลัวที่จะทำผิดพลาด เราจึงปล่อยให้โค้ดนั้นนิ่งค้างอยู่ในหัว เราปฏิเสธที่จะลงมือทำเพราะเรามองว่า Run-time Error ชั่วคราวคือการพังทลายของระบบที่กู้คืนไม่ได้

นี่คือจุดที่วิธีคิดแบบวิศวกรรมมาบรรจบกับ Stoicism (ปรัชญาสโตอิก) Epictetus และ Marcus Aurelius คอยย้ำเตือนเราเสมอให้แยกแยะระหว่างสิ่งที่เราควบคุมได้กับสิ่งที่เราควบคุมไม่ได้ โค้ดที่คุณพิมพ์ลงไป — เจตนา การโฟกัส และการประมวลผลภายในของคุณ (Eval) — คือสิ่งที่คุณควบคุมได้ ส่วนเอาต์พุตที่โลกพิมพ์ตอบกลับมาหาคุณ (Print) — ไม่ว่าจะเป็นความสำเร็จหรือการปฏิเสธที่รุนแรง — คือสิ่งที่คุณควบคุมไม่ได้

แนวทางแบบสโตอิกที่มีต่อชีวิตคือการยอมรับระยะ Print ในฐานะข้อมูลตามความเป็นจริง หากมันสะท้อน Error ออกมา คุณก็อย่าปล่อยให้มันมานิยามคุณค่าของคุณในฐานะโปรแกรมเมอร์ คุณแค่ดู Stack Trace ปรับปรุงกระบวนการคิดภายในใจ แล้วแก้ไขมันในลูปถัดไป

เสรีภาพของบรรทัดคำสั่ง

มีความเสี่ยงที่เราจะมองลูปนี้แล้วเห็นเป็นกับดักในโลกยุคใหม่ — มองเห็นตัวเองเป็น Sisyphus เวอร์ชันดิจิทัลที่ต้องเข็นครกขึ้นภูเขาอย่างไม่มีวันสิ้นสุด แล้วทำได้เพียงเฝ้ามองมันกลิ้งตกลงมาซ้ำแล้วซ้ำเล่า หากเราเพียงแค่ตื่นขึ้นมารันลูปเดิมๆ ในทุกๆ วัน เราก็ไม่ต่างอะไรจากเครื่องจักรใช่ไหม?

ความแตกต่างนั้นขึ้นอยู่กับ “เสรีภาพ” ของเราโดยสิ้นเชิง เครื่องจักรทำงานตามสคริปต์ที่ถูกฮาร์ดโค้ด (Hardcoded) ไว้ แต่มนุษย์เรามีเสรีภาพอันสมบูรณ์ในการเลือกที่จะป้อนคำสั่งอะไรต่อไปใน REPL ของตัวเอง

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

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

เคอร์เซอร์กำลังกะพริบอยู่ ระบบกำลังรอฟัง

> คุณจะพิมพ์คำสั่งอะไรต่อไป?


หากคุณชอบบทความแนวการเชื่อมโยงปรัชญาเข้ากับการทำงานในโลกยุคใหม่ ฝากกดเลิฟ กดแชร์ และกดติดตามช่องของผมด้วยนะครับ!

Read more

The Five Ideals

The Five Ideals

จากหนังสือ The Unicorn Project ในนั้นจะมีที่ปรึกษาเก่ง ๆ คนหนึ่งชื่อ Erik เป็นเหมือนเซ็นเซหาตัวยาก เดี๋ยวก็มา เดี๋ยวก็ไป ถ้าโชคดีก็จะเจอเค้าว่าง แล้วเค้าก็จะสอนอะไรที่สำคัญ ๆ แต่ฟังดูล้ำ ๆ และลึกซึ้ง

By Chokchai Phatharamalai
Communication, Reliability and Modern concepts - System Design, Simply Explained

Communication, Reliability and Modern concepts - System Design, Simply Explained

บทความนี้จะอธิบายพื้นฐานของ System Design โดยต่อยอดจากตัวอย่าง Gym Application เพื่อให้เห็นภาพว่า เมื่อระบบเริ่มเติบโตและถูกแยกออกเป็นหลาย Service แต่ละ Service จะสื่อสารและทำงานร่วมกันอย่างไร งานแบบไหนควรสื่อสารแบบ Synchronous งานแบบไหนควรประมวลผลแบบ Asynchronous รวมถึงอธิบาย Concept พื้นฐานต่าง ๆ ที่ควรรู้ เช่น API

By Boonsong Srithong
Race condition

Race condition

ผมกำลังอ่านหนังสือ The Unicorn Project ซึ่งเป็นนิยายเกี่ยวกับ developer สาวคนหนึ่งที่ใช้ชีวิตในองค์กรท่ามกลางกระแส digital disruption อ่านแล้วสนุกมาก เป็นเรื่องที่ตื่นเต้น และหลาย ๆ dynamic ที่เกิดขึ้นก็คล้ายกับที่ผมพบเจอในบริษัทซอฟต์แวร์ เลยทำให้

By Chokchai Phatharamalai
Distributed Systems Concepts - System Design, Simply Explained

Distributed Systems Concepts - System Design, Simply Explained

ในช่วงแรก Product เราสามารถออกแบบระบบให้อยู่ใน Server และ Database เดียวกันได้ แต่เมื่อระบบโตขึ้น มีผู้ใช้งานเพิ่มขึ้น ข้อมูลเยอะขึ้น ระบบเริ่มทำงานช้าลดเรื่อยๆ สิ่งที่หนีไม่ได้คือการ Decomposition Service ไปเป็น Distributed System เช่น Member Service, Booking Service, Payment

By Boonsong Srithong