Humanistic Architecture

TLDR;

คอร์ส the art of humanistic architecture design ที่จะสอนเรื่อง “การดีไซน์” software architecture โดยใช้ศาสตร์ความเป็นมนุษย์เข้ามาเสริม จากประสบการณ์ผมเองที่ synthesize ศาสตร์จิตวิทยาความเป็นมนุษย์ (humanistic psychology) อย่าง Satir, enneagram งาน ux/ui ไปจนถึง math และ category theory เพื่อให้ออกแบบ เขียนโค้ด และสื่อสารกับเพื่อนร่วมทีมและเพื่อนร่วมงานทั้งหลายอย่างเข้าอกเข้าใจ ทำให้มีโอกาสสร้างระบบที่ตรงความต้องการเบื้องลึก (Requirement between the line) ของโจทย์ที่ได้รับมามากกว่าเดิม

Description

“In the software engineering world full of trade-offs and competing opinions on what is the best, how do you really decide?

ในโลก Software ที่ทุกอย่างเป็น Trade-offs ปัญหาแบบเดียวมี Solution มีคำตอบที่แก้ไขได้เป็นพันๆ แบบ แต่ละแบบมี Trade-offs ต่างกัน และก็มีคนมากมายเหลือเกินให้ความเห็นว่า trade-offs แบบของฉันดีที่สุด คุณตัดสินใจอย่างไร

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

ทีนี้ลองมาดูในงานใกล้ตัวกว่านั้นบ้างในฐานะโปรแกรมเมอร์ ถ้าลูกค้ามีปัญหา Scale เราจะให้เขาใช้ Monolith ต่อไปมั้ย หรือต้องรื้อทำ Microservice เท่านั้น หรือแค่ซื้อเซิฟแรงๆ ทั้งสามอย่างแก้ปัญหาได้หมด แต่เราเลือกแบบไหนให้ลูกค้าดีล่ะ

ในโลกของ Software Architecture เราพูดตลอดว่าทุกอย่างมี Trade-offs แต่กระบวนการตัดสินใจเลือก Trade-offs มันมายังไง

ถ้าเราจับด้วยตรรกะล้วนๆ โดยไม่ให้คุณค่าอะไรเลย ให้คุณค่าทุก trade-offs เท่ากันหมด มันไม่มีทางเลือกได้เลยว่าอะไรดีกว่าอะไร แต่ในความเป็นจริง มันก็มี Solution ที่ถูกใจและไม่ถูกใจ เวิร์คและไม่เวิร์คอยู่เสมอๆ ในแทบจะทุกๆ โปรเจ๊กต์

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

แล้วถ้าเราเข้าใจจุดนั้นแล้วเราจะนำเอาคุณค่าของมนุษย์มาเชื่อมต่อกับการออกแบบได้อย่างไรบ้าง หรือเราจะจัดการชุดคุณค่าของมนุษย์ระหว่างการออกแบบอย่างไรถ้าชุดคุณค่าของแต่ละคนที่มีส่วนร่วมมันไม่เหมือนกันและอาจจะขัดแย้งกันเอง

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

(สำหรับคนที่ติดตามผู้สอนมาซักพัก คอร์สนี้จะเปิดเผยว่าเนื้อหา Talk ต่างๆ ที่ผมเคยพูด งานสอนอื่นๆ ที่ผมทำมาจากพื้นฐานเบื้องลึกอย่างไร ทำไมหลายๆ อาจจะมองว่าผมพูดเข้าใจง่าย มาจากเลนส์มุมมองอย่างไรกันแน่ แล้วจะเข้าใจทั้งฐานคิดและวิธีสื่อสารเพื่อนำปรับไปใช้กับทีมของคุณได้)

เหมาะสำหรับใคร

คอร์สนี้เหมาะสำหรับคนที่มีประสบการณ์การทำงานมาระดับนึง และอยู่ในจุดที่รับโจทย์มาแล้วต้องเลือก Solution ที่ดีที่สุดจากความเป็นไปได้หลายรูปแบบ ไม่ว่าจะเป็นการเลือกภาษา เลือกเฟรมเวิร์ค เลือก Coding Standard หรือเลือก Collaboration Scheme ในระดับองค์กร และเราต้องการ “ออกแบบ” สิ่งที่เหมาะที่สุดสำหรับบริบทนั้น

คอร์สนี้เหมาะมากเป็นพิเศษกับคนที่ต้องตัดสินใจเรื่อง Architecture ให้คนอื่น ไม่ว่าชื่อตำแหน่งคุณจะเป็น Senior, Lead, Principal, Staff, Architect, VP, CTO ถ้างานของคุณประกอบไปด้วยการที่ต้องตัดสินใจออกแบบ Architecture ให้เพื่อนร่วมงานใช้ คอร์สนี้จะเหมาะกับคุณมาก เราจะเจาะปัญหาพวกนี้เป็นหลัก

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

Recommend profile:

  • เคยทำงานมาแล้ว 2 ปี
  • เคยจับ Framework, Architecture มากกว่า 1 แบบขึ้นไป
  • มีประสบการณ์ที่ต้องร่วมตัดสินใจเลือกรูปแบบการทำงานหรือ Architecture, Framework, Library ให้ทีม
  • คอร์สจะ Assume ความรู้พื้นฐานเหล่านี้ Dependency Injection, IoC container, Unit testing, Object oriented Programming, Functional programming, MVC Architecture, Event and Observer Pattern อย่างน้อยพอรู้ว่ามันคืออะไรนิดๆ หน่อยๆ ไม่ต้องสันทัดมากก็ได้

โจทย์ตัวอย่างที่จะคุยกันในคอร์ส

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

เราจะคุยกันผ่าน Event หรือ RPC ดี ทั้งคู่เป็น Communication Scheme ที่ใช้ได้ทั้งคู่ ไม่ว่า Service สองตัวที่ต้องการสื่อสารกันจะเป็นแบบไหน ทั้งคู่สามารถใช้แก้ปัญหาได้ถ้าเราพยายามมากพอกับมัน แต่แน่นอนมันมีบริบทที่ Event แก้ปัญหาได้เหมาะกว่าและ RPC แก้ปัญหาได้เหมาะกว่า คำถามที่เราจะมาเจาะกันคือ จุดไหน แล้วความเหมาะสมเกิดจากอะไร และที่สำคัญกว่านั้นคือเข้าใจคำถามในระดับ Meta ที่ว่า

เราจะใช้ Angular หรือ React ดีนะ หรือไม่ใช้อะไรเลยดี ในเมื่อทั้งคู่สามารถสร้าง Frontend แบบไหนตามใจลูกค้าได้ทั้งคู่ อะไรที่เหมาะสมในสถานการณ์ไหน

Framework อย่าง Rails กับสิ่งเล็กๆ อย่าง Express ทำได้ดีทั้งคู่มีคนชอบและก็มีคนด่าทั้งคู่ ทำไมผมถึงไม่เคยชอบ Rails แต่มองว่ามันเป็นของดี มันเหมาะสมกับสถานการณ์อย่างไร

ทำไม Golang ถึงได้เป็นภาษาที่ผมมองว่ามัน Well-designed ทั้งๆ ที่มันไม่มีฟีเจอร์หลายอย่างและกว่าจะมี Generic ก็นานมาก

ในหลายมุมมอง Functional programming กับ OOP มันเสริมกันได้ และในหลายมุมมองทำไมมีคนมากมายบอกว่ามันขัดกันเอง มันเกิดจากมุมมองต่างกันอย่างไรแล้วเราในฐานะนักออกแบบหรือนักดีไซน์ เราจะวางระบบไว้ใน Spectrum ประมาณไหนจากอะไร

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

เนื้อหา

Day 1

วันแรกจะเน้นเนื้อหาเรื่องแรงขับของมนุษย์ โดยทำความเข้าใจกับแรงขับด้วยการทำงานกับตัวเอง

  • Prelude: Problem & Disappointment Anatomy ของ “ปัญหา” และ “ความไม่พอใจ”
  • Episode 1: Satir การใช้ซาเทียร์ในการทำความเข้าใจเบื้องลึกที่อยู่ใต้ “ปัญหา”
  • Episode 2: Vision in humanistic lens การใช้หลักการปัญญา 3 ศูนย์ เพื่อสร้างและออกแบบโครงร่าง Architecture Vision ที่สอดคล้องกับแรงขับของมนุษย์ ทั้งของคนที่ตั้งโจทย์ให้เราและคนที่รับงานจากเราไปต่อ

Day 2

การประยุกต์ใช้แรงขับของมนุษย์ในการออกแบบ

  • Episode 3: Abstraction การออกแบบ Abstraction (หรือเลือก Abstraction ที่คนอื่นออกแบบใน Framework และ Design Pattern ต่างๆ มาใช้และปรับปรุง)
  • Episode 4: Developer Testing ประยุกต์ใช้ศาสตร์ User Testing ของ UX เพื่อเอามา Validate งานออกแบบ
  • Episode 5: Design Pattern & Case studies (in humanistic architecture lens) นำเอาสิ่งที่เรียนมาทั้งหมดมาวิเคราะห์ Case study ของการออกแบบต่างๆ ให้เราเลือกใช้และเลือกออกแบบอย่างเข้าใจ และผสมผสานประยุกต์ได้ตามความเหมาะสมของบริบท

    • Factory, IoC Container & Polymorphism
    • Object oriented programming vs Functional Programming Spectrum
    • RPC vs Event-driven Microservices Specturm

(และ Case study อื่นๆ หากมีเวลาเหลือ เช่น Log Formatting, GraphQL vs RESTFul design)

เวลาเรียน

คอร์ส 1 (Active): วันที่ 4-5 กุมภาพันธ์ 2023 เวลา 9.00-16.30

สถานที่: Geeky Base

รับผู้เรียนทั้งหมดจำนวน 20 คน

ราคา: 7,000 บาท

โอนเงินจองได้ที่ Promptpay 0879337879 นายชาคริต ลิขิตขจร

แจ้งโอนเงินได้ที่

(หากปิดคอร์สแล้วจะแจ้งให้ทราบทางเว็บเพจนี้)


Hi. I'm Chris.

A product builder, specialize in software engineering
I am currently working at ThoughtWorks