July 7, 2024
|
9 mins read

“Fundamental” หรือพื้นฐานคืออะไร? และทำไมถึงสำคัญ?

พื้นฐานหรือ “Fundamental” เป็นสิ่งที่สำคัญ แต่ว่าจริง ๆ แล้ว fundamentals คืออะไร? ทำไมคำถามนี้ถึงสำคัญ?

“Fundamental” หรือพื้นฐานคืออะไร? และทำไมถึงสำคัญ?

Introduction

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

แต่บทความนี้เราอยากจะมาชวนทุกคนตั้งคำถามลึกลงไปอีกขั้นนึงดูว่า

“พื้นฐาน” หรือ “Fundamental” คืออะไร?

“การเข้าใจว่า computer, javascript engine, หรือเครื่องมือที่เราใช้เบื้องหลังทำงานยังไง? การรู้ว่าภาษา ๆ หนึ่งหรือ framework ถูกออกแบบมาด้วยเหตุผลอะไร? การเข้าใจ algorithm & data structures, math, computer architecture และอื่น ๆ?”

สิ่งเหล่านี้คือ fundamentals ของการเขียนโปรแกรมหรือไม่? การที่เราไม่รู้ว่า computer ทำงานยังไงส่งผลอย่างไรกับการเขียนโปรแกรม?

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

แน่นอนว่าคำว่า “Fundamental” นั้นเป็นคำที่มีความหมายกว้างมาก ๆ เชื่อว่าถ้าถามแต่ละคนคงจะตอบออกมาไม่เหมือนกัน

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

แก่นคืออะไร?

ก่อนที่เราจะไปคุยกันว่า fundamentals ของสิ่ง ๆ หนึ่งคืออะไร เรามาเริ่มจากคำถามง่าย ๆ กันก่อนว่า “สิ่ง ๆ นั้นเกิดขึ้นมาได้อย่างไร?”

“Why does X exist? What problem does it solve?”

เราเชื่อว่าทุกสิ่งที่มนุษย์คิดขึ้นมาล้วนมีเหตุผลของการมีอยู่ของมัน; โต็ะ เก้าอี้ เครื่องคิดเลข คอมพิวเตอร์ การเขียนโปรแกรม ภาษาโปรแกรมมิ่งทุก ๆ ภาษา web framework ทุก ๆ ตัว ทุกอย่างมันมีเรื่องราวเสมอว่าทำไมคนสร้างถึงได้สร้างสิ่งนี้ขึ้นมา

  • Javascript ถูกเขียนขึ้นมาเพื่อใช้เป็นภาษาที่ไว้ทำให้เว็บมีความ interactive มากขึ้น
  • jQuery ถูกเขียนขึ้นมาแก้ปัญหา browser incompatibility และเป็น utility ที่ช่วยให้พัฒนาเว็บง่ายขึ้น (motto: “Writing Javascript code should be fun.”)
  • React ถูกเขียนขึ้นมาแก้ปัญหาที่ Facebook เจอในการทำ interactive IU ที่ซับซ้อน ที่ยิ่ง features เยอะมากขึ้นเรื่อย ๆ การ maintain ก็ยิ่งทำได้ยากขึ้นตามไปด้วย

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

(มี “หน้าตา” เป็นอย่างไรนะครับ ไม่ใช่แก้ปัญหาด้วยวิธีการไหน)

“What does the perfect experience look like for users who face this problem?

แน่นอนว่าคำตอบของแต่ละคนไม่มีทางเหมือนกันถึงแม้ว่าจะแก้ปัญหาเดียวกัน คนหนึ่งที่เชื่อแบบหนึ่งก็เขียนออกมาแบบหนึ่ง ส่วนตัวเราเรียกสิ่งนี้ว่า “แก่น” หรือ “Core”

มันเป็นเหมือนกับ “Design Principles” ที่เวลาเราจะออกแบบวิธีแก้ปัญหาหรือพัฒนาอะไรก็ตามขึ้นมาต่อจะนี้ ทุกอย่างจะต้อง align กับ principles ตรงนี้ทั้งหมด

Astro's Design Principles
Astro’s design principles, a web-framework for content-driven websites.

หรือตัวอย่าง product อย่าง Obsidian ก็มีการกำหนด manifesto เอาไว้เช่นกัน

Obsidian's Design Principles
Obsidian’s design principles, a private writing app.

ถ้าหากว่า core เปลี่ยน surface หรือสิ่งที่เราเห็นก็จะเปลี่ยนตามไปด้วย ไม่ต่างกับคนที่ถ้าเราลองแทนที่ set of core beliefs ของคน ๆ นั้นด้วย beliefs ใหม่ทั้งหมด ถึงแม้ว่าจะใช้ชื่อเดิมหรือมีหน้าตาแบบเดิม แต่ความคิดและการกระทำทุกอย่างก็คงจะเปลี่ยนไปแบบเป็นคนละคน

สำหรับเราแก่นหรือ core ของอะไรบางอย่างมันก็คือ set of core beliefs ตรงนี้นี่หละ

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

พื้นฐานคืออะไร?

“Fundamentals are what support the core.”

สำหรับเรา นิยามของคำว่า “Fundamental” ก็คือ “อะไรก็ตามที่ซับพอท core; อะไรก็ตามที่มัน align ไปกับ principles เหล่านั้น”

ยกตัวอย่างเช่นในเคสของ Astro ที่ถ้าเราวาง design principles ไว้แบบนั้น fundamentals ก็คงจะเป็น features หลัก ๆ อย่าง islands architecture หรือ content collections ที่ไว้ใช้จัดการ content หลาย ๆ รูปแบบเอาไป render บนเว็บได้

หรือในกรณีของ programming ถ้าหากว่าเรามองว่า core ของมันคือ “computation problem-solving” เราก็อาจจะบอกว่า fundamentals คือ data structure, algorithms, debugging, math, observation หรือ logical reasoning

ถ้าเรามองว่า core ของ programming คือ “การสื่อสารกับ machine” เราก็อาจจะบอกว่า fundamentals คือ computer achitecture หรือการเข้าใจว่า computer ทำงานยังไง

ในขณะที่ถ้าเรามองว่า core ของ programming คือ “การสื่อสารกับ developer ด้วยกันเอง” เราก็อาจจะบอกว่า fundamentals คือ design pattern, refactoring, clean code เป็นต้น

โดยสรุปแล้ว การจะเข้าใจ fundamentals ของอะไรบางอย่างได้นั้นเราต้องเห็น core ของมันซะก่อน จากนั้นถามตัวเองว่า “what support the core?”

เพิ่มเติม: ในแต่ละ fundamentals ก็จะมี core ของมัน (why it exist?) และ fundamentals ของตัวเองอีกทีหนึ่งลึกลงไปเรื่อย ๆ เป็น recursive structure

บทสรุป

ในปัจจุบันที่เทคโนโลยีใหม่ ๆ เปลี่ยนไปเร็วมาก มีเครื่องมือใหม่ ๆ หรือ product ใหม่ ๆ ออกมาทุกวัน คำถามที่เราเห็นหลายคนถามก็คือ เราจะต้องปรับตัวยังไงให้ทันเทคโนโลยีที่เปลี่ยนไปเร็วมาก?

ส่วนตัวเราคิดว่า strategy ที่ดีที่สุดไม่ใช่การแบ่งเวลาไปศึกษาหรือตาม trend ใหม่ ๆ เพิ่ม แต่เป็นการ “Focus on things that never change”

“What’s not going to change over the next 10 years?”

แม้ว่าสิ่งที่เราเห็นหรืออะไรที่อยู่บน surface จะเปลี่ยนไปเรื่อย ๆ แต่ core และ fundamentals คือสิ่งที่จะไม่เปลี่ยน (หรือเปลี่ยนได้ยากมาก ๆ)

Jeff Bezos บอกว่า ทุกคนจะถามว่าอีก 10 ปีข้างหน้าจะมีอะไรเปลี่ยนแปลงไปบ้าง แต่น้อยคนที่จะถามว่า “อะไรคือสิ่งที่จะไม่เปลี่ยนไปเลยในอีก 10 ปี”

“Low prices, Fast delivery, Vast selection” สิ่งเหล่านี้คือสิ่งที่คนต้องการไม่ว่าจะผ่านไปอีกกี่สิบปี (เพราะเป็น fundamental needs ของคนทุกคน) ซึ่งนี่ก็เป็นหนึ่ง strategy ที่ Amazon ลงทุนกับมันมาตลอดตั้งแต่เริ่มทำบริษัทจนปัจจุบันกลายเป็นจุดแข็งที่ไม่มีใครสู้ได้

“So we know the energy we put into these things today will still be paying off dividends for our customers 10 years from now. When you have something that you know is true, even over the long term, you can afford to put a lot of energy into it.” — Jeff Bezos

ไม่ว่า programming อีก 10 ปีด้านหน้าจะเป็นยังไง; AI จะเข้ามามีบทบาทมากแค่ไหน แต่สุดท้าย core และ fundamentals ของมันก็จะยังคงเหมือนเดิมอยู่ดี

ใครสนใจเรื่องนี้แนะนำให้ลองไปฟัง talk “Software Engineering beyond the AI hype” มาก ๆ เป็น talk นึงที่ชวนทุกคนมาตั้งคำถามกันว่า software engineer หลังจากช่วง hype AI จะเป็นยังไง และเราควรจะต้อง focus อะไรบ้าง?

ส่วนตัวเรามองว่าเราไม่จำเป็นต้องเข้าใจ fundamental ของเครื่องมือทุกอย่างที่เราใช้ก็ได้ บางครั้งเราก็แค่อยากจะ get things done ให้ได้ผลลัพธ์ไว ๆ

แต่ถ้าหากว่าเรารู้ว่าจะต้องอยู่กับอะไรบางอย่างอีกไปอีกนาน อยากให้ทุกคนลองใช้เวลาลงทุนกับ fundamental ครับ สุดท้ายแล้วไม่ว่าจะผ่านไปอีกกี่ 10 ปีการลงทุนนี้ก็จะยังคุ้มค่าอยู่เสมอ

“Bet on things that never change.”

Chun Rapeepat

Rapeepat Kaewprasit (Chun)

คน ๆ หนึ่งที่ชื่นชอบในการสร้าง การทำธุรกิจ และการได้ลองทำอะไรใหม่ ๆ ไปเรื่อย ๆ