Review Course: Humanistic Software Architecture

Icegotcha's avatar
Review Course: Humanistic Software Architecture

ปีใหม่นี้ ไอซ์มีความต้องการที่จะเรียนรู้เรื่องใหม่ ๆ เรื่อง Software Architecture ก็เป็นเรื่องหนึ่งที่ไอซ์อยากเรียนมาก เพราะอยากรู้ว่า หากเราต้องมาวางระบบการทำงานในซอฟต์แวร์ตัวหนึ่ง เราจะต้องเริ่มอย่างไร และนี่คือเหตุผลหลักที่เรียนคอร์ส Humanistic Software Architecture ของคุณคริส Chakrit Likitkhajorn 🔗 เมื่อวันที่ 4-5 เดือนกุมภาพันธ์ที่ผ่านมา

โดยปกติการออกแบบ Software การเลือกสิ่งต่าง ๆ ไม่ว่าจะเป็นการเลือกภาษา เฟิร์มเวิร์ค หรือเครื่องมือต่าง ๆ ที่ใช้พัฒนา Software เราจะต้องใช้ความรู้ทางเทคนิคต่าง ๆ แต่ในคอร์สนี้ ทำให้เข้าใจว่า การใช้ความรู้ทางเทคนิคอย่างเดียวมันไม่พอ มันต้องใช้สิ่งที่เรียกว่า “ความเป็นมนุษย์” ด้วย ฟังดูแล้วอาจเป็นนามธรรม แต่สิ่งนี้กลับทำให้เราเข้าใจปัญหาต่าง ๆ ที่เกิดขึ้นได้ดีมากขึ้น โดยในคอร์สนี้ คุณคริสได้ช่วยให้ “ความเป็นมนุษย์” เป็นสิ่งที่เข้าใจง่าย สามารถใช้งานได้จริง และประยุกต์ใช้ในการออกแบบ Software ได้ด้วย

สองวันนี้เรียนอะไรบ้าง ไอซ์จะบันทึกเรื่องที่เรียนและสิ่งที่ได้มาให้อ่านกัน

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

First Day

วันแรก จะเรียนเรื่องโครงสร้างของสิ่งที่เรียกว่า “ปัญหา” เราจะได้รู้ว่า “ปัญหา” นั้นไม่ใช่แค่ “ฉันหิว” “ฉันจน” แต่เป็นคำถามที่ว่า “ทำอย่างไรฉันจะอิ่ม?” “ทำอย่างไรฉันจะรวย?” และเราจะหาคำตอบของคำถามแบบนี้ได้โดยใช้ “Satir” ซึ่งเป็นวิธีบำบัดทางจิตวิทยาที่นำไปสู่ความเข้าใจความปรารถนาที่แท้จริง (Yearning) ของตัวเองและคนอื่น เมื่อมีความเข้าใจ ก็จะทำให้เกิดความพึงพอใจ และเมื่อมีความพึงพอใจ ปัญหาต่าง ๆ ก็จะจบลงได้ไม่ยาก

Point ของเรื่องนี้ก็คือ

  1. มนุษย์ทุกคนมีความสามารถในการอยู่กับอุปสรรคในชีวิตเสมอ ไม่ว่าจะอยู่ได้ด้วยมุมมองการคิดอย่างไร
  2. เราทุกคนมีศักยภาพในการเข้าใจความปรารถนาเบื้องลึกของกันและกันได้ เหมือนที่เราเข้าใจความต้องการของเด็กทารกที่ยังพูดไม่ได้

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

💬 ตัวอย่าง: ลูกค้าขอให้เราทำ Feature หนึ่งในโปรเจคหนึ่ง
ลูกค้า: ผมให้คุณทำ Feature AAA มันมีหน้าตาแบบนี้ ๆๆๆๆ ทำงานตามนั้น ๆๆๆๆ นะ
Dev ก: โอ้ว โอเค ได้เลย เดี๋ยวจัดให้ภายในหนึ่งอาทิตย์
Dev ก ก็ทำ Feature AAA ตรงตามที่ลูกค้าพูดเป๊ะๆ
…หนึ่งอาทิตย์ต่อมา…
Dev ก: อ่า ทำให้ละ Feature AAA ตามที่คุณขอ
ลูกค้า: มันไม่ใช่นะคุณ มันต้องแบบนี้ ๆๆๆๆ ต่างหาก
Dev ก:  อ้าว คุณเคยบอกว่ามันเป็นแบบนี้ ๆๆๆ ไม่ใช่เหรอ
ลูกค้า: เราต้องการแบบนี้ ๆๆๆๆ ต่างหาก
Dev ก: โอเค… (ในใจเต็มไปด้วยความงงปนหงุดหงิด อะไรกันเนี่ยยยย!!!??)
สุดท้าย Dev ก ก็ต้องเสียเวลาแก้ Feature AAA ตามที่ลูกค้าต้องการจริง ๆ

เพราะฉะนั้น การที่จะแก้ปัญหาได้ดีมากขึ้น อย่างแรก เราต้องให้เวลาในการฟังเสียงตัวเอง เพื่อที่จะเข้าใจตัวตนและความปรารถนาที่แท้จริงของตัวเราก่อน

ในคอร์สนี้ ก็ได้มี Workshop ให้เรายกตัวอย่างปัญหาที่เราเจอ เช่น เมื่อเราต้องไปเปลี่ยน Logic ในโค้ดที่ยุ่งเหยิง จากนั้นให้เราลองสำรวจตัวตนที่แท้จริงของตัวเรา จากปัญหาที่เราตั้งผ่าน Satir Iceberg model หลังจากนั้น เราก็จะได้รู้ว่า จากปัญหาที่เราตั้ง เรามีพฤติกรรมต่อเรื่องนี้อย่างไร และภายใต้การกระทำนั้น เราได้มีความรู้สึก แนวคิด ความคาดหวัง ความต้องการในเบื้องลึกของจิตใจอะไรเป็นแรงผลักดัน สิ่งเหล่านี้บ่งบอกถึงตัวตนของตัวเรา

เมื่อเราเข้าใจตัวเองแล้ว ต่อไป เราจะต้องทำใจเปิดรับเข้าไว้ เพื่อที่จะทำความเข้าใจและสัมผัสได้ถึงความคาดหวังและความปรารถนาของคนที่เกี่ยวข้องกับปัญหา สุดท้าย เมื่อเข้าใจความปรารถนาลึก ๆ ในตัวเราและคนอื่น เราก็จะสามารถหาจุดตรงกลางระหว่างความต้องการของเราและคนนั้น ในที่สุดแล้วจะได้ Solution ที่ทำให้ทุกคนพึงพอใจได้

ถ้าเราทำได้ ก็ถือว่าเราได้ใช้ศักยภาพที่ว่าไปแล้ว

ต่อจากนั้น ก็มีเรียนรู้เรื่อง “3 Centre of Intelligence” เป็นวิธีหนึ่งที่อธิบายพฤติกรรมของคนเราและสามารถนำไปใช้แก้ปัญหาต่าง ๆ ได้ โดยการแบ่งเป็น 3 ส่วนเปรียบเทียบกับภาพร่างกายมนุษย์คือ Head (หัว แทนความคิด เหตุผล), Heart (หัวใจ แทนความรู้สึกจิตใจ), Body (ร่างกาย แทนการกระทำ สัญชาติญาณ) วิธีนี้จะบอกได้ว่าเวลาเกิดเหตุการณ์หนึ่งหรือมีปัญหาที่ต้องแก้ คนหนึ่งจะใช้ส่วนไหนเป็นหลัก และในสถานการณ์ต่าง ๆ เราควรใช้ส่วนไหนบ้าง

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

Second Day

วันนี้มีเรียนเรื่องของการ Apply ความรู้ต่าง ๆ ที่เรียนในวันแรกเข้ากับ “Abstraction” ซี่งหมายถึง การทำให้สิ่งหนึ่งที่มีรายละเอียดมากมายให้ดูง่ายขึ้น โดยตัดสิ่งที่ไม่จำเป็นออกให้กลายเป็นก้อนกลม ๆ ที่ดูแวบเดียวก็รู้ว่ามันคืออะไร ส่วนมากในวงการ Software จะใช้คำนี้กันมาก มีใช้คำนี้กับเรื่องของการ Design เป็นภาพต่าง ๆ เช่น แผนภาพที่แสดงโครงสร้าง การเชื่อมต่อ Flow การทำงาน UX/UI เป็นต้น การ Clean Data รวมถึงการ Refactor โค้ดโปรแกรม

จากเรื่องนี้เราก็ได้เรียนรู้ว่า การที่จะทำ Abstraction ได้อย่างถูกต้อง เราจะต้องยึดจากภาพสำเร็จที่เราตั้งไว้ ซึ่งภาพสำเร็จสามารถทำขึ้นมาได้โดยสร้างภาพ “ปัญหา” และใช้ความรู้ที่เรียนรู้ในวันที่ 1 เพื่อแตกปัญหาจนหา Solution สุดท้ายได้นี่เอง ในคลาส คุณคริสก็ได้ยกตัวอย่างจากประสบการณ์ เกี่ยวกับผลที่ได้ถ้าเวลาเรา Abstract ไม่ได้ยึดติดกับภาพสำเร็จ แต่ไปยึดติดกับอย่างอื่น เช่น Discomfort, Fear, Happiness มันจะเกิดผลอย่างไร พร้อมทั้งแนะนำการ Abstract ที่ถูกต้องและคุ้มกับเวลาที่เสียไป

จะเห็นว่า วันที่สอง จะเน้นเรียนการประยุกต์ใช้ในเรื่องของการออกแบบโครงสร้างและแก้ปัญหาต่าง ๆ ที่เกี่ยวกับ Software

หลังจากผ่านไป 1 เดือน

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

  1. ใจเย็น มีสติในการคิด ตัดสินใจเรื่องต่าง ๆ มากขึ้น
  2. รู้จักตัวเอง และความต้องการของตัวเองมากขึ้น
  3. วางแผนตีโจทย์ปัญหาหาวิธีแก้ได้ดีขึ้น มองเห็นเป้าหมายของมันชัดเจน
  4. เข้าใจความต้องการของคนที่เกี่ยวข้องกับปัญหา ทำให้ให้คำปรึกษา และแก้ปัญหาให้พวกเขาได้ดีขึ้น และพวกเขาก็พอใจ
  5. สุขภาพจิตดีขึ้น ความเครียดน้อยลง เพราะเกิดความพึงพอใจที่ปัญหาได้รับการแก้ไข

สรุปทิ้งท้าย

คอร์สนี้ไม่ได้สอนแค่ว่าทำอย่างไรถึงจะออกแบบ Architecture ของ Software ที่ดีที่สุดออกมา ยังมีสอนการแก้ปัญหาต่าง ๆ ที่เกิดขึ้นอย่างมีประสิทธิภาพ หลังจากเรียนคอร์สนี้ เราก็ได้รู้ว่า ปัญหาส่วนใหญ่เกิดจากความต้องการของมนุษย์ที่แตกต่างกัน เราสามารถใช้หลักการทางจิตวิทยามาช่วย เพื่อที่ทำให้เราสามารถเข้าใจความต้องการที่แท้จริง นำมาสู่ความพึงพอใจและปัญหาก็ได้รับการแก้ไข หลักการเหล่านี้สามารถใช้ในชีวิตประจำวัน และการทำงานทั่วไปได้

ตุณคริส เจ้าของคอร์สมี Plan ที่จะเปิดรอบสอนคอร์สนี้ได้เพิ่มเติม ใครที่สนใจอยากเรียนรู้เพิ่มเติม สามารถติดตามได้ที่เฟซบุ๊คของคุณคริส Chakrit Likitkhajorn 🔗

Review เพิ่มเติมจากบล็อกอื่น