April 24, 2024
|
10 mins read

วิธีการแก้ปัญหาหรือ Solution ที่ดีเกิดขึ้นมาได้อย่างไร?

วิธีการแก้ปัญหาหรือ ‘Solution’ เกิดมาจากอะไร? Pattern นำไปสู่วิธีแก้ปัญหาที่ดีขึ้นได้อย่างไร? และเราสามารถ maximize pattern อย่างไรได้บ้าง?

วิธีการแก้ปัญหาหรือ Solution ที่ดีเกิดขึ้นมาได้อย่างไร?

Introduction

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

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

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

“วิธีการแก้ปัญหาหรือ Solution ที่ดีเกิดขึ้นมาได้อย่างไร? อะไรคือสิ่งที่นำพาเราไปสู่วิธีแก้ปัญหาใหม่ ๆ ?”

ถึงตรงนี้หลายคนอาจจะลองตอบในแบบของตัวเอง หรือลองนั่งคิดกันเล่น ๆ ดูก่อนก็ได้นะครับ (แล้วก็อย่าลืมเอามาแชร์กันใน FB Page ด้วย)

ส่วนถ้าใครพอมีคำตอบของตัวเองแล้ว เรามาเริ่ม explore ไปด้วยกันเลยดีกว่า~

ณ ห้องสมุดแห่งหนึ่ง

“ณ ห้องสมุดแห่งหนึ่งมีชั้นวางหนังสือชั้นหนึ่งตั้งอยู่ หากคุณต้องการหาหนังสือเล่มหนึ่งบนชั้นนี้ (สมมุติชื่อ ‘Sapiens’) คุณจะหาหนังสือเล่มนี้ด้วยวิธีไหน?”

แน่นอนว่าวิธีการที่ obvious ที่สุดเลยก็คือการ “ไล่เช็คไปทีละเล่ม” คุณเริ่มจากเล่มแรก จากนั้นเล่มสอง ไปเรื่อย ๆ จนกระทั้งเจอเล่มที่คุณต้องการหาอยู่

พอคุณหาไปได้สักพักประมาณ 10 เล่ม คุณก็เริ่มที่จะสังเกตถึงอะไรบางอย่าง อะไรที่มันเกิดขึ้นซ้ำ ๆ คุณพบว่า “หนังสือที่เรียงอยู่มันสลับเล่มไทยกับอังกฤษ!!” เล่มแรกเป็นอังกฤษ เล่มสองเป็นไทย เล่มสามเป็นอังกฤษ และสลับแบบนี้กันไปเรื่อย ๆ

คำถามคือคุณยังจะไล่หาแบบเดิมไหม? แน่นอนว่าไม่ เพราะแทนที่เราจะหาไปทีละเล่ม ทำไมเราไม่เริ่มจากเล่มแรกจากนั้นข้ามไปเล่ม 3, 5, 7, … แทนหละ ก็ในเมื่อเล่มที่เราหาอยู่เป็นเล่มภาษาอังกฤษ แบบนี้เร็วกว่าตั้งสองเท่าหนะ

คราวนี้คุณก็เริ่มหาด้วยวิธีใหม่ 1, 3, 5, … พอไล่เช็คไปได้ประมาณ 10 เล่ม คุณก็เริ่มที่จะสังเกตถึงอะไรบางอย่าง อะไรที่มันเกิดขึ้นซ้ำ ๆ คุณพบว่า “ชื่อหนังสือภาษาอังกฤษมันเรียงตามตัวอักษรภาษาอังกฤษ!!”

คำถามคือคุณยังจะไล่หาแบบเดิมไหม? แน่นอนว่าไม่ แทนที่เราจะไล่หาไปเรื่อย ๆ ทำไมเราไม่เริ่มสุ่มจากตรงกลาง จากนั้นก็เช็คว่าหนังสือที่สุ่มหยิบมาขึ้นต้นด้วยอักษรอะไร สมมุติว่าเป็นตัว E เราก็จะรู้แล้วว่าหนังสือ Sapiens ของเราจะต้องอยู่ครึ่งหลังแน่นอน

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

วิธีการข้างต้นนี้เรียกว่า ‘Binary Search’ ส่วนวิธีการแรกนั้นเรียกว่า ‘Linear Search’ สามารถอ่านต่อเรื่องนี้แบบลงรายละเอียดได้ที่คอร์ส Data Structures and Algorithms บทที่ 3, Binary Search เข้าสู่เนื้อหา

Leveraging The Pattern

จากเรื่องราวข้างต้นจะเห็นว่าเมื่อเราเริ่มมองไปที่ข้อมูลของปัญหาเยอะมากขึ้นไปเรื่อย ๆ เราจะเริ่มเห็นข้อสังเกตบางอย่างที่มันเกิดขึ้นซ้ำ ๆ หรือที่เราเรียกสิ่งนี้ว่า ‘Pattern’

และเราสามารถใช้ประโยชน์จาก pattern เหล่านี้เพื่อนำมาสู่วิธีการแก้ปัญหาที่ดีกว่า มีประสิทธิภาพมากกว่าวิธีแก้ปัญหาที่มัน general ได้; ถ้าชั้นหนังสือของเราเรียงตามตัวอักษร เราจะใช้ general solution อย่างการไล่หาไปทีละเล่มก็ได้ (linear search) แต่ในเมื่อหนังสือมันเรียงทำไมเราไม่ใช้วิธีการตัดช้อยไปทีละครึ่งแทน? (binary search)

“Effective solutions leverage patterns. Once you know how things work, you can hack.” — ผู้เขียนเอง :P

ถ้าเราลองถอยออกมาก้าวหนึ่งแล้วมองปัญหาใน field อื่น ๆ ให้กว้างขึ้น เราก็จะพบว่า solution เหล่านั้นล้วนเกิดมาจากการ ‘Leverage patterns’ ด้วยกันทั้งสิ้น

  • Algorithm คือการใช้ประโยชน์จากรูปแบบของข้อมูล หรือข้อสังเกตบางอย่างที่มันเกิดขึ้นซ้ำ ๆ เวลาเราศึกษา input, output
  • Invention หรือสิ่งประดิษฐ์ต่าง ๆ คือการใช้ประโยชน์จากความเข้าใจธรรมชาติหรือ ‘Physics theory’ ซึ่งเกิดจากการศึกษา physicals events เดิมซ้ำ ๆ จนเห็น pattern อะไรบางอย่าง
  • App Exploitation คือการใช้ประโยชน์จากความเข้าใจว่า app นั้นทำงานยังไง ซึ่งก็มาจากการที่เราไปลอง interact กับมันซ้ำ ๆ และคิดย้อนกลับว่ามันทำงานยังไง (Reverse Engineering)
  • Prediction คือการใช้ประโยชน์จาก model ซึ่ง model พวกนั้นก็เกิดจากการที่เราศึกษา historical data คล้าย ๆ กันแล้วดูว่าอะไรคือสิ่งที่เกิดขึ้นซ้ำ ๆ กัน
  • Business คือการใช้ประโยชน์จากความเข้าใจ customers’ behavior ซึ่งเกิดจากการที่เราศึกษาหรือเจอเหตุการณ์ที่มันทำให้เรา pain, upset, disappointment ซ้ำ ๆ กันหลายครั้ง

จะเห็นว่าวิธีแก้ปัญหาในทุก ๆ field มันล้วนเกิดจากการเห็น patterns อะไรบางอย่าง จากนั้นก็เขียน describe มันออกมาเป็นสิ่งที่เราเรียกมันว่า ‘Theory’ และพยายาม leverage theory จนเกิดเป็น solution หนึ่ง ๆ ขึ้นมา

PatternsTheorySolution\text{Patterns} \rightarrow \text{Theory} \rightarrow \text{Solution}

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

จริง ๆ คำตอบมันอยู่ในตัวอย่างด้านบนแล้วหละครับ; Pattern ที่นำมาสู่ algorithm มาจากการศึกษา input/output จำนวนมาก, Physics theory มาจากการศึกษา physics events เดิม ๆ ที่เกิดขึ้นซ้ำแล้วซ้ำเล่า, การเข้าใจว่า App ทำงานยังไง → การลอง interacts กับมันหลาย ๆ ครั้ง, Model → historical datas, และอื่น ๆ

สิ่งที่เราต้องการก็คือ ‘A ton of high-resolution data’

Reality has no resolution limit

“ความเป็นจริงมีความละเอียดไม่จำกัด” ถ้าหากว่าเราลองมองมือของตัวเองเราก็จะเห็นลายมือ ถ้าเรามองไกล้เข้าไปอีกเราก็จะเห็นลายนิ้วมือ มองลึกเข้าไปอีกเราอาจจะเห็นเซลผิวหนัง, DNA, Molecule, Atom หรืออะไรก็ว่าไป เราสามารถมองลึกลงไปได้เรื่อย ๆ

Low Resolution vs High Resolution
Low Resolution vs High Resolution Data

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

และเนี่ยหละที่เราต้องการ ถ้าหากว่าเราอยากจะ maximize pattern; เราต้องการรูปที่มีความละเอียดสูงหลาย ๆ รูป และหลาย ๆ มุม ยิ่งเรามีข้อมูลที่ ‘ชัด หลายมุม และมีจำนวนเยอะ’ มากเท่าไหร่มันยิ่งเพิ่มโอกาสที่จะทำให้เราเห็น pattern ที่ลึกและกว้างขึ้นไปได้มากเท่านั้น

ตัวอย่างเช่นในบทความ “Richard Feynman and The Connection Machine” ที่เล่าถึงตอนที่ Richard Feynman กำลังจะทำความเข้าใจ router circuit เพื่อแก้ปัญหาเกี่ยวกับการสื่อสาร

“He (Richard Feynman) was willing to listen to explanations of how and why things worked, but fundamentally he preferred to figure out everything himself by simulating the action of each of the circuits with pencil and paper.”

(Explanation เป็น low-resolution data ในขณะที่การไปลงมือทำเองเป็น high-resolution data ซึ่งทำให้เข้าใจปัญหาที่แก้ได้มากกว่า)

สุดท้ายเราอยากจะสรุปคำว่า ‘ชัด หลายมุม และมีจำนวนมาก’ เอาไว้ประมาณนี้ครับ

  • ความชัด คือการตั้งคำถามขุดลึงลงไปใน detail ย่อยต่าง ๆ คือความสามารถในการขุด abstraction tree และความสามารถในการ jump between abstraction levels
  • ความหลายมุม คือการ ‘เปลี่ยนมุมมอง’ การโยน bias ของเราทิ้งไปและถอยออกมาก้าวหนึ่งเพื่อกลับมาทำความเข้าใจแก่นของสิ่ง ๆ นั้นอีกครั้งและตั้งคำถามกับปัญหาในมุมอื่น ๆ
  • จำนวนมาก (ค่อนข้างตรงตัว) คือการที่เรามีรูปที่ชัดในมุมมองที่แตกต่างกันจำนวนมาก ๆ นั่นเอง มันเพิ่มโอกาสที่จะทำให้เรา identify pattern ได้มากขึ้น

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

“การเปลี่ยนมุมมอง” กับอัลกอริทึม Sieve of Eratosthenes
ในหลายโอกาส การแก้ปัญหา require การเปลี่ยนมุมมอง แต่การเปลี่ยนมุมมองคืออะไร ? ทำความเข้าใจไปด้วยกันผ่านปัญหาการหาค่าจำนวณเฉพาะ (prime number)
ถ้าหากว่าใครสนใจเรื่องของการ ‘เปลี่ยนมุมมอง’ สามารถอ่านต่อได้ที่บทความข้างต้นเลยครับ

บทสรุป

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

PatternsTheorySolution\text{Patterns} \rightarrow \text{Theory} \rightarrow \text{Solution}

หนึ่งใน pitfall ที่เราสังเกตมา (จากตัวเองนี่หละ) คือหลายครั้งเราจะกระโดดรีบไป ideate solution เร็วเกินไปในขณะที่ theory ของเรายังไม่ชัดพอ แข็งแรงพอ หรือพูดง่าย ๆ ก็คือเราไม่ได้ใช้เวลากับการเข้าใจปัญหาให้เยอะเท่าที่ควร

“If I had an hour to solve a problem, I’d spend 55 minutes thinking about the problem and 5 minutes thinking about solutions.” — Albert Einstein

เราต้องมี theory ก่อนที่จะไป ideate solution และในขณะเดียวกันเมื่อเราเรียนรู้อะไรมากขึ้นจากการทดสอบ solution เราก็ต้องอัพเดต theory เราให้มีความ accurate มากขึ้นตามไปด้วย เราต้องมองหา ‘Clue’ ที่นำพาเราไปสู่ theory ที่ถูกต้องและ ‘Strong evidence’ ที่ทำให้ theory ของเรามีความน่าเชื่อถือ

ซึ่งเรามองว่ามันไม่ใช่ ‘Linear process’ แต่เป็น ‘Iterative process’

“A theory lacking empirical confirmation is a theory which has not yet passed its exams. Exams never end, and a theory is not completely confirmed by one, two or three experiments. But it progressively acquires credibility, stage by stage, as its predictions are revealed to be correct.” Reality is not what it seems

สุดท้ายนี้อยากจะบอกว่าสิ่งที่เล่าในบทความนี้มันเป็นแค่ส่วนหนึ่งของภาพทั้งหมด มันยังมีอีกหลายอย่างที่สามารถ explore in detail ได้อีกเยอะ ไม่ว่าจะเป็น

  • เราจะแยก pattern กับ randomness ออกจากกันได้ยังไง?
  • Clue รูปแบบไหนที่เราต้องมองหาที่จะพาเราไปสู่ theory ใหม่ ๆ?
  • อะไรคือทักษะ มุมมองและเครื่องมือที่สำคัญ ที่ทำให้เราสามารถ identify pattern ในข้อมูลที่มีจำนวนมาก ๆ ได้?
  • คำถามที่ดีที่ทำให้ภาพชัดขึ้น หรือกว้างขึ้นมีหน้าตาเป็นอย่างไร?
  • และเชื่อว่าคงมีอีกหลาย ๆ คำถามที่ยังไม่ถูกถาม

ถ้าหากว่ามีเวลา ไว้เรามานั่งพูดคุยและ explore ไปด้วยกันครับ

Chun Rapeepat

Rapeepat Kaewprasit (Chun)

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