Software architecture without human consideration make no sense

Chris
Chris’ Dialogue
Published in
1 min readJul 1, 2017

ทำไมเราถึงต้องการ Software architecture นะ?

เมื่อเริ่มแรกสุดในประวัติศาสตร์การก่อตั้ง Programming แล้วเนี่ย คือ ทุกคนก็เขียนโค้ดแบบ Inline ลงไปยาวๆ ทั้งนั้นแหละ สมัยนั้นยังไม่มี Object-oriented ไม่มี Design pattern ไม่มีอะไรเลย

ทีนี้ปัญหาก็ตามมาคือว่า เมื่อทุกคนเขียนโค้ดลงไปยาวขนาดนั้น โค้ดก็อ่านยาก แก้ไขยาก

แล้วทำให้โค้ดที่ดีต้องการ Expert ที่มีสมองขั้นสูงสามารถ Deal กับความยุ่งยากปวดหัวอันมากมายมหาศาลได้ ต้องการโปรแกรมเมอร์ชั้นระดับพระกาฬเท่านั้นที่จะสามารถทำงานได้

ทีนี้แน่นอนว่าถ้าเราทำยังงั้นกันต่อไป ทรัพยากรโปรแกรมเมอร์ชั้นดีเหล่านั้นไม่ใช่ทรัพยากรที่หาได้ง่ายนัก

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

ในทางทฤษฎี มันเป็นไปได้ที่คนๆ นึงจะไม่ต้องการ Software architect ใดๆ เลย เขียนตั้งแต่ขั้นสูงไปยัน Bare metal level แต่คนที่ทำได้ขนาดนั้นมันมีไม่เยอะ

ดังนั้น เราก็เริ่มคิดเรื่อง Software architecture กัน เพราะเราอยากให้การเขียน Program มันเป็นอะไรที่สามารถ Accessible หรือ เข้าถึงได้ง่ายขึ้น เราอยากให้ทุกอย่างพัฒนาได้ไวขึ้น

Software architecture เกิดขึ้นมา พูดบ้านๆ ก็คือว่าคุณยังไม่ต้องเก่งขนาดรู้ทุกอย่างในโลกคอมพิวเตอร์ ก็เป็น Productive developer ได้

และมันก็ทำในสิ่งนั้นมาตลอด

โลกปัจจุบัน ถ้าทุกคนต้องเขียน TCP/IP Stack ใหม่หมด หรือทุกคนต้องเขียน OS ของตัวเองเพื่อให้เกิดซอฟต์แวร์ตัวนึง โลกเราคงไม่ Innovate ได้เร็วขนาดนี้

แต่ทีนี้หลายๆ ครั้งในยุคปัจจุบัน ผมพบว่า บางทีเราไปกันผิดทาง

หลายๆ ครั้งผมจะได้ยิน Feedback จากหลายๆ คนว่า ผมวาง Architecture มาดีมาก เลยต้องการ Developer ที่เก่งถึงจะทำงานร่วมกับผมได้

ผมรู้สึกว่า มันแปลก มันเหมือนกับว่ามันขัดกับจุดประสงค์แรกของ Software architecture เลยด้วยซ้ำ

ผมคิดว่า Software architecture ที่ดีมันควรมีคุณสมบัติข้อใดข้อนึง

  1. เพิ่ม Accessibility คือ ทำให้คนไม่ต้องเก่งมากก็ร่วมงานกับเราได้ รู้ว่าเห้ยตรงนี้แตะได้นะ ไม่ทำอย่างอื่นพัง ตรงไหนที่มัน Sensitive มากๆ ก็ไปซ่อนความซับซ้อนไว้ทำให้คนที่ไม่รู้จริงก็จะไม่ยุ่งกับมัน แล้วก็ Contribute ได้ในส่วนปกติ โดยมั่นใจได้ว่า ฉันจะไม่ทำให้คนอื่นเดือดร้อน ไม่ทำให้ซอฟต์แวร์พัง (Testing, Modularity, Dependency management จะอยู่ในหวดนี้)
  2. เพิ่ม Productivity คือ บาง Architecture อาจจะไม่มี Accessibility มากนัก แต่เมื่อคุณเข้าถึงมันแล้ว Productivity เพิ่มขึ้นกระจุยกระจาย พอเข้าใจแล้วบรรลุแล้วเมื่อไหร่ละก็ งานทุกอย่างที่เคยยากและลำบาก มันแลดูง่ายดายเหลือเกิน (Advance type system, Automated Scaling, Continuos integration, Deployment system หรือถ้าส่วนตัวคิดว่า Lisp อยู่ในหวดนี้)
  3. เพิ่ม Security

ถ้าคุณวาง Architect ในลักษณะที่ว่ายากแล้วคนที่เข้ามาก็รู้สึกว่ามันยากเข้าถึงไม่ง่าย แล้วคนที่เข้าถึงมันแล้วก็ไม่ได้เห็นว่าเขาเขียนโปรแกรมเร็วขึ้นง่ายขึ้นกว่า Hack ล้วนๆ จากศูนย์เท่าไหร่นัก

นั่นแหละที่เป็นเวลาที่เราควรจะตั้งคำถามกับ Architecture แล้ว

ว่าเราทำแบบนั้นกันไปทำไมนะ?

“Developer should be humble”

ผมคิดว่าสิ่งที่อันตรายที่สุดในการพัฒนาซอฟต์แวร์คือ บางครั้งเราทำบางอย่าง For the sake of being professional ทำเพื่อ Sake of ego ของตัวเอง

เราเลือกใช้เทคโนโลยีที่ซับซ้อนเพื่อพิสูจน์ว่าฉันเก่ง

เราเลือกใช้ Architecture ตามคนอื่นที่เขาบอกว่าดี เพื่อให้ไม่ตกเทรนด์

Software architecture ที่ไม่ได้เกิดผลดีกับคนตัวเป็นๆ เลย ไม่ว่าในทางที่ว่าถ้าคุณชำนาญคุณทำงานได้เร็ว หรือไม่ว่าในทางที่ว่าคุณไม่ต้องชำนาญมากก็ Contribute ได้โดยไม่ทำให้อะไรพัง แถมยังไม่ได้เกี่ยวกับ Security อะไรเลยด้วยแล้วเนี่ย

ผมไม่เห็นประโยชน์ของมันนะ

ก็เลยเป็นที่มาที่ผมบอกว่า

“Software architecture without human consideration make no sense”

เวลาที่คนออกแบบ Architecture เราก็ควรจะพิจารณาเรื่องพวกนี้ด้วยนะ ทีมเป็นไง ความรู้ระดับไหน แล้ว Characteristic เป็นยังไงบ้าง แต่ละคนบุคลิกยังไง เขาทำงานพร้อมกันหรือทำงาน Remote และอื่นๆ

ผมคิดว่าปัจจัยพวกนี้มีผลมากในการเลือกออกแบบโค้ดเบส

เพราะโค้ดเบสก็เหมือนบ้านของโปรแกรมเมอร์

และบ้านที่ออกแบบตาม Best practice โดยไม่สนใจความเป็นไปของคนที่อยู่ในบ้านหลังนั้นเลย

ผมว่าบ้านแบบนั้นไม่ค่อยน่าอยู่อ่ะครับ

--

--

Chris
Chris’ Dialogue

I am a product builder who specializes in programming. Strongly believe in humanist.