As “Developers” indeed we are the student of the world
ในฐานะนักพัฒนาซอฟต์แวร์ แท้ที่จริงแล้วเราก็คือนักเรียนของโลกใบนี้เสมอ
Table of content
📚 About learning
ย้อนกลับดูพื้นฐาน ของการเรียนรู้ รู้จักกับวิธีการทำงานของสมองเราเพิ่มหน่อย
🧩 Solving impossible puzzle
เวลาเราเจอสิ่งที่เรียกว่าเป็น ปริศนาที่ไม่มีทางแก้ เราทำอย่างไรได้บ้างนะ?
💻 Reading code better
ความสับสนและความไม่เข้าใจ เป็นส่วนหนึ่งของการพัฒนาซอฟต์แวร์ และมันก็โอเคในช่วงขณะหนึ่ง
😎 How to look (be) cool!
เคล็ดลับของ Genius? (อ่ะ ใช่หรือเปล่า)
How to be “great” at something
เคยได้ยินเรื่องกฎ 10,000 ชั่วโมงกันไหมคะ
ว่ากันว่า key สำคัญที่จะทำให้เรา บรรลุความเชี่ยวชาญที่แท้จริงใน เรื่องใด จริงๆแล้วเป็นเรื่องของการฝึกฝน แต่ต้องใช้เวลากับมันอย่างน้อย 10,000 ชั่วโมงเลยทีเดียว ซึ่งจุดเริ่มต้น ของ กฏ 10,000 ชั่วโมงนี้มาจาก Professor คนนึง ที่ Florida State University คุณ K. Anders Ericsson
เขาทำการศึกษา นักกีฬามืออาชีพ นักดนตรีระดับโลก เพื่อที่จะดูว่าใช้เวลาเท่าไหร่กันนะ เพื่อที่จะไปถึงจุดสูงสุด ใน area นั้นๆ ที่พวกเข้าอยู่
สิ่งที่เขาค้นพบก็คือการฝึกฝนแบบจริงจัง เวลาโดยประมาณที่ พาพวกเขาไปถึง Top tier คือ 10,000 ชั่วโมง
10,000 ชั่วโมงมันนานไปนะ = 5 ปีของ Full time job เลย
ของ่ายและไวกว่านี้หน่อยได้ไหม? 🧐
Learning Effectively
เอาใหม่ดีกว่า กลับมาที่รากฐานของการเรียนรู้
เริ่มจาก รู้จัก Learning Mode ของเราก่อน
“คุณจะเก่งเรื่องไหนก็ได้ ถ้าคุณรู้วิธีการเรียนรู้ เพราะสมองของคุณทรงพลัง
มากกว่าที่คุณคิด คุณแค่ต้องรู้วิธีใช้พลังนั้น”
— Dr. Barbara Oakley
และนี่ก็คือทักษะสำคัญแห่งศตวรรษ ที่ 21 ที่ทำให้เราได้ผจญภัย ทั้งยังเพิ่มโอกาสพิเศษอีกมากเลย
Learning Mode.
ถ้าพูดถึง การเรียน ภาพจำในหัวเราส่วนใหญ่จะเป็น เวลาที่ เราตั้งใจทำอะไรสักอย่างใช่ไหม นักประสาทวิทยาพบว่า สมองคนเรามีการทำงาน 2 วิธี
💻 Focus mode
หรือโหมดจดจ่อ คือการที่เราเพ่งความสนใจไปที่อะไรบางอย่าง ไม่ว่าจะเป็นการจ้องมองอาจารย์เพื่อเค้นความรู้ออกมา หรือ เวลาที่พยายามทำ Tasks บางอย่างให้ลุล่วงไป หรือแม้กระทั่งตอนที่เราจดจ่อกับเกมมากด้วยเช่นกัน
ซึ่ง โหมดจดจ่อ หรือ focus นั้นกินพลังสมองของเราไปเยอะมากๆเลย นั่นคือสาเหตุว่าทำไมเราถึงรู้สึกหมดพลัง หลังจากเรียน ประชุม หรือ ทำงานไปแล้ว เพียงไม่กี่ชั่วโมง
☕️ Diffuse mode
แต่นอกจากนั้นยังมีอีก Mode นึงของการเรียนรู้ด้วยนั่นคือ Diffuse Mode หรือโหมดผ่อนคลายนั่นเอง โหมดนี้คือตอนที่จิตใจของเรา ผ่อนคลาย จังหวะนี้เราจะใช้สมองส่วนอื่นๆ ของสมองที่ต่างจากส่วนที่ใช้ใน Focus mode เวลาเราผ่อนคลาย สมองเรามักจะเชื่อมโยงความคิดต่างๆ เข้าด้วยกัน และกระตุ้นให้เกิดความคิดสร้างสรรค์
∞ Back and forth
สมองของเราต้องทำงานสลับไปมาระหว่างการจดจ่อและผ่อนคลาย เพื่อให้เราเรียนรู้อย่างมีประสิทธิภาพ
You went to bed with One Brain, and woke up with an Upgrade
ตรงนี้ Dr. Barbara Oakley บอกเราว่า
เราเข้านอนไปกับ สมองนึง แต่เราตื่นมากับสมองที่ Upgrade
นั่นหมายความว่า การนอนที่ดี มีส่วนสำคัญอย่างมากในการในการเรียนรู้
Building strong neural structure
โครงสร้างของการเรียนรู้ที่ดีเป็นเหมือนการก่อผนังอิฐที่ค่อยๆ ก่อร่างสร้างขึ้น
ทีละเล็กละน้อย และแข็งแกร่งขึ้นตลอดเวลา ฉะนั้นการนอน ก็เหมือนการรอให้ปูนแห้งก่อน แต่ถ้าเรา ยัดเยียดมันเข้าไปภายใน คราวเดียว เราไม่มีเวลานอนเพื่อ สร้างการเชื่อมต่อในสมอง เราจึงไม่สามารถจำรายละเอียดบางอย่างได้
เป็นเหมือนกำแพงความรู้ที่พร้อมจะถล่มลงมาตลอดเวลา
สิ่งสำคัญก็คือ ค่อยเติมวันละนิดทุกๆ วัน
ให้เวลานอน เพื่อสร้างการเชื่อมต่อบางอย่างในสมองของเรา
จังหวะป้ายยา 1: สามารถตามไปศึกษาเรื่อง Learning how to learn ได้ต่อบน coursera เลย
Learning Curve:
ทุกคนรู้จัก Learning curve ใช่ไหมคะ นั่นคือ ช่วงเวลาหนึ่งที่เราฝึกฝนไต่เต้าจากความไม่รู้ไปจนถึงมีความรู้ความเชี่ยวชาญบางอย่าง
แต่ก็ราวกับเป็นคำสาปมนุษย์ มี Learning curve ให้ไต่ขึ้นไปอย่างยากลำบาก แต่มี Forgetting curve ให้กลิ้งลงมาอย่างรวดเร็วเลยค่ะ
Forgetting curve:
นักจิตวิทยาชาวเยอรมัน แฮร์มันน์ เอบบิงเฮาส์ ได้เรียบเรียงผลการทดลอง ไว้ในหนังสือเรื่อง Memory
ว่า เพียงแค่ 19 นาทีหลัง Consume ข้อมูลบางอย่างเข้าไป มันก็เลือนหายไปกว่าครึ่งนึงแล้ว และหลังจากผ่านไป 2 วัน สิ่งที่ยังคงเหลืออยู่ ก็อยู่ที่ประมาณ 27% เท่านั้นเอง
คุณ เอบบิงเฮาส์ ได้เสนอวิธีการเพื่อต่อสู้กับ Forgetting curve นั่นก็คือ Review Information ในช่วงเวลาหนึ่งๆ เราสามารถออกแบบระยะของเราได้เอง
Spaced Repetition.
ยิ่งเราดึงข้อมูลบางส่วนขึ้นมาใช้บ่อยๆ เราก็ใช้เวลาเรียกคืนข้อมูลเหล่านั้นน้อยลงเท่านั้น และไอเดียสำคัญก็คือ หยิบ Information สำคัญมาเป็นส่วนๆและเพิ่มขึ้นเรื่อยๆ เป็นช่วงๆ
จังหวะป้ายยา 2: เรื่อง Forgetting curve มีในหนังสือ Memory นะอ่านแล้วมา discuss กัน
Solving Impossible Puzzles?
บ่อยครั้งเราจะพบว่า เรามักจะเข้าไปพัวพันกับ Project ซึ่งบางครั้ง ก็มีปริศนาที่แก้ไขได้ยากเกิดขึ้นมา
อาจจะเป็นงาน Engineer บางอย่างอย่างที่รับมือแทบไม่ไหว หรือ แม้กระทั่ง Code บางจุดที่มันแก้ยากมากๆ เลย มากกว่าที่เราคิดไว้ตอนแรก ซึ่งบางครั้งมันก็ดูเป็น Mission Impossible ไปเลยก็มี
Many software problem can be just as sneaky.
แต่จริงหรือเปล่าที่ว่ามันยากกว่าที่เราคิดไว้ แน่นอนว่าจริงๆ แล้ว บางที solutions ก็อยู่ไม่ไกลจากเราไปเท่าไหร่เลย เพียงแต่ต้องระบุให้ได้ชัดๆ ว่า ข้อจำกัด ของเราอยู่ตรงไหน และเราก็เริ่มหา solutions จากตรงนั้นเลย
บางข้อจำกัดก็อาจจะเป็นเรื่องที่ เลี่ยงไม่ได้จริงๆ ต้องปฏิบัติ เช่นพวก กฎเกณฑ์บางอย่างหรือบางทีก็อาจจะเป็นเรื่องที่เราอุปทานไปเองก็ได้
ในทางกลับกันการมีอยู่ของข้อจำกัดที่ชัดเจนเหล่านั้น จริงๆแล้ว ไม่ใช่ปัญหาที่แท้จริงประโยคติดหูอย่าง “Think outside the box” บอกให้คิดนอกกรอบไป คิดอย่างสร้างสรรค์สิ
เหมือนกับว่าให้มองข้ามข้อจำกัดเหล่านั้นไปสิ! จริงๆ ประโยคนี้อาจจะไม่ถูกต้องทั้งหมด ถ้าเรามองว่า Box หรือ กรอบ ของเรา คือขอบเขต หรือ ข้อจำกัด หรือ เงื่อนไข
Trick: Find the box
หา กรอบ นั้น ระบุมันให้ชัดเจน ซึ่งบางครั้งกรอบนั้นอาจจะมีขนาดใหญ่กว่าที่คุณคิดไว้แต่แรกซะอีก
Keys: Solving Impossible Puzzles
key สำคัญในการแก้ไข ปริศนาของเราคือ
1. ตระหนักถึงข้อจำกัดที่มีอยู่ในมือคุณ
2. ตระหนักถึงอิสระภาพในการแก้ไขปัญหาของเรา
จากการคะนึงถึงสิ่งเหล่านี้ เราจะพบวิธีการแก้ปัญหาอยู่ และบางทีนี่ก็เป็นเหตุผลว่าทำไม บางปริศนานี่มันชั่ง effective เหลือเกิน เพราะว่า เราอาจจะ dismiss วิธีการแก้ไขปัญหาที่เป็นไปได้เร็วเกินไป
Keys: When it’s harder than you think
แล้วถ้ามันยากกว่าที่เราคิดไว้ตั้งแต่ตอนแรกหละ
- ลอง List ทางแก้ที่เป็นไปได้ทั้งหมดออกมา
- Don’t dismiss anything อย่าละเลยแม้กระทั่งบางวิธีอาจจะดูงี่เง่าแค่ไหนก็ตาม
- หลังจากนั้นเราก็ค่อยๆ ลงลึกเข้าไปหารายละเอียดว่า ทำไมวิธี ถึงไม่ควรถูกเลือก และเราแน่ใจแค่ไหน ลองพิสูจน์ดู
- Categorized และ Prioritized ข้อจำกัดทั้งหมดออกมา โดยหยิบสิ่งที่มัน Restrict มากๆ ออกมาก่อนเลย
There Must Be an Easier Way!
บางทีเราก็พบว่า ไม่ทันละ ปัญหามันชั่งเยอะแยะเหลือไม่ทันแน่เลย เวลาที่เราเจอ blocker หรือ mission impossible แบบนั้น เป็นโอกาสที่ดีมากๆ ที่เราจะก้าวถอยหลังออกมาสักนิด แล้วถามตัวเองด้วยคำถามเหล่านี้
- มีวิธีที่แก้ที่ง่ายกว่านี้ไหมนะ ?
- เรากำลังแก้ถูกปัญหาใช่ไหมนะ ?
- ทำไมสิ่งนี้ถึงเป็นปัญหากันนะ ?
- อะไรกันที่ทำให้มันแก้ยากขนาดนี้ ?
- มันต้องทำเบอร์นี้เลยใช่ไหม ?
- หรือมันจำเป็นต้องถูกแก้ไขแต่แรกเลยจริงๆ หรอ ?
จังหวะป้ายยา 3: สามารถตามไปอ่านต่อกันที่ได้ที่ The Pragmatic Programmer
Reading code better ?
ความสับสนเป็นส่วนหนึ่งของ Programming ไม่ว่าเราจะ
- อ่าน code ที่เราไม่คุ้นเคย
- หรือเรียน Programming language ใหม่ๆ
- หรือ Code ที่ถูกเขียนมานานแสนนาน ที่เราอาจจะลืมไปแล้วด้วยซ้ำว่า ทำไมถึงเขียนออกมาแบบนั้น
- แม้กระทั่ง เริ่ม ทำงาน ใน business domain ใหม่ๆ ที่คำและศัพท์แสงต่างๆ ตีกันในหัวอย่างมากมาย
มันโอเคมากเลยที่บางครั้งเราจะ งง บ้าง แต่เราก็ไม่อยากงงกับมันนานกว่าที่ควรจะเป็น เราลองมาถอดรหัสความไม่รู้ทั้ง 3 ของเรากัน โดยในแต่ละ ความไม่รู้ มันจะมี Cognitive process ที่เกี่ยวพันกันอย่างลึกซึ้งอยู่
♠️ Lack of knowledge
คือเมื่อเรา ไม่มีความรู้เรื่อง Programming language, Algorithm หรือ domain
ซึ่งเกี่ยวโยงกับ Long term memory เราไม่สามารถเรียกข้อมูลบางอย่างจาก Long term memory ของเราได้ หรือมันอาจจะไม่เคยมีอยู่ในนั้นมาตั้งแต่แรกเลย
♣️ Lack of Information
เราอาจไม่สามารถเข้าถึง ข้อมูลที่จำเป็น เพื่อการทำความเข้าใจบางอย่าง
นี่คือสิ่งที่ท้าทาย Short term memory ของเราหมายความว่าบางข้อมูล ที่เราแอบเก็บไว้ชั่วคราว มันไม่พอ หรือเราพยายามหามันมาจากหลายที่ หลาย file หลาย function ระหว่างทางนั้นเราอาจจะลืมบางอย่างไปแล้วก็ได้
🖤 Lack of processing power
บางที code ของเราก็ complicated มากกว่าที่เราจะ process ได้เองไหว
เกี่ยวโยงมากๆ กับ Working memory ของเราและนี่ก็คือ ที่ที่การตีความและกระบวนการคิดของเราเกิดขึ้น
ทั้ง 3 cognitive process ไม่ว่าจะเป็น (LTM, STM, หรือ Working memory) มันไม่ได้เกิดขึ้นเพียงแค่ตอนที่เรา อ่าน code เท่านั้น แต่มันยังเกิด ในตอนที่เรา เขียน code Design architecture บางอย่าง หรือ เขียน Document เอาไว้ด้วยเช่นกัน
ถ้าเราเปรียบเทียบ Long term memory ของเราจะเหมือนกับ Hard drive
Short term memory เหมือนกับ Ram และ Working memory ก็เปรียบเหมือน processor ของ สมอง
เวลาเราเขียนโปรแกรม Cognitive process แรกที่เกี่ยวข้องจะเป็น Long term memory คนส่วนใหญ่จะสามารถ recall เหตุการณ์ต่างๆ ที่เกิดขึ้นได้ แม้จะผ่านมาเป็นปีๆ และเป็นจุดที่กล้ามเนื้อของเราจดจำสิ่งที่ต้องทำ แทบจะอัตโนมัติเลย
เช่น abstract algorithm, syntax ของ programming language, วิธีพิมพ์ keyboard
🙋🏻 ถ้าเราบอกว่าเรา Lack of knowledge สิ่งที่เราต้องทำคืออะไรคะ เติมของเข้าไปและฝึก recall มันกลับมาบ่อย
🙋🏻 ถ้าเราบอกว่าเรา Lack of information เราก็ดึงสิ่งเหล่านั้นออกมา เพราะ
Ram ของคนเรามี size ที่จำกัดมากเลย ถ้า เราได้ information บางอย่างที่ไม่สำคัญกับเรา เราจะลืมมันไปอย่างรวดเร็วหมายความว่าเราสามารถ ดึงสิ่งเหล่านั้นออกมา จดมันลงไปเพื่อลดภาระของสมองเรา ให้ไปทำเรื่องที่สำคัญกว่าเช่น creative, self care, networking, relaxation
🙋🏻 ถ้าเราบอกว่าเรา Lack of processing power เราก็ฝึกคิด วิเคราะห์, Critical thinking, ฝึกแก้โจทย์ปัญหา ดูเองบ้างจะทำให้ตรงนี้เราคมเยอะเลย แต่จริงๆ บางครั้ง เวลาเขียนโปรแกรม เรื่องของการ process บางจุดเราก็ปล่อยให้เป็นภาระของ computer ก็ได้เหมือนกัน
จังหวะป้ายยา 4: สามารถตามไปอ่านต่อกันที่ได้ที่ The Programmer’s brain
How to feel Cool!
- Feed back เป็นเหมือนกระจก ใช้เป็นพื้นฐานในปรับปรุงสิ่งนั้นให้ดี
- Embrace failure เวลาเราผิดพลาด เราอาจจะเศร้ากับมันได้ โอบรับมันไว้แล้วไปต่อให้เร็ว
- Iterate Quickly ความสามารถในการกลับคืนประกอบร่างมา
- Practice ก็คือการฝึกฝนและลับขวานไว้เสมอ เพื่อที่เมื่อถึงเวลาใช้งานจริงเราจะสามารถหยิบมันมาใช้ได้เลย
- Be a small fish ลองทำตัวเป็นปลาตัวเล็กดูบ้าง ห้อยแขวนการตัดสิน หรือ สมมุติฐานที่หนักแน่นไว้ เราจะขยับตัวได้ไวขึ้น
- Be influenced, Be vulnerability ลองได้รับอิทธิพลดูบ้าง ไม่ต้องแข็งแกร่งตลอดเวลา เราอาจจะได้รับข้อมูลหรือ ไอเดียใหม่ๆ มาไม่รู้ตัวเลย
- The sweet spot จังหวะที่ดีในการ ทำอะไรสักอย่าง ไม่ช้าไป หรือเร็วไป
The 20 Hours rule
เราแขวนเรื่อง 10,000 ชั่วโมงเอาไว้ใช่ไหมคะ 10,000 Hours และเราก็บอกว่า ไม่มีเวลาขนาดนั้นหรอก แล้วจะทำยังไงดีให้เรียนรู้ หรือได้สกิลใหม่ให้เร็วขึ้น
คุณ Josh Kaufman ได้นำเหนอ สิ่งที่เรียกว่า กฎ 20 ชั่วโมงเอาไว้
- Deconstruct the skill แยกย่อยทักษะออกมาเป็นส่วน ๆ
- Learn enough to self correct เรียนรู้ให้มากพอที่จะแก้ไขตัวเองได้
- Remove practice barriers ขจัดอุปสรรคในการเรียนรู้
- Practice at least 20 hours ฝึกฝนอย่างน้อย 20 ชั่วโมง
You owe it to yourself to find the real you
ไม่มีวิธีไหนที่ดีที่สุด เราต้องหาวิธีที่เหมาะกับเรา วิธีการเรียนรู้เราก็ต่างเหมือนลายนิ้วมือนี้แหละลอง ครุ่นคิด ถามตัวเองทุกครั้งที่มีโอกาส และเราจะไม่สามารถเป็น live long learner ได้ถ้าไม่หาของใหม่ๆ เข้าไปตลอดเวลา
จังหวะป้ายยา 5: มีใน Talk เรื่อง The Myth of the Genius Programmer เมื่อปี 2009 เป็น Talk ที่ฟังเพลินมาก
References
- 📚 The Pragmatic Programmer
- 📚A Mind For Numbers
- 📚 The Programmer’s brain
- 📚 The First 20 Hours: How to learn anything Fast
- 📚 Memory; A Contribution to Experimental Psychology
- 📹 Learning how to learn
- 📹 Google I/O 2009 — The Myth of the Genius Programmer
จากคนนึงที่หลงไหลในการขั้นตอนการประกอบร่างซอฟต์แวร์ขึ้นมา
ที่บางครั้งก็เป็น Problem solver และบางทีก็เป็น Trouble maker เหมือนกัน.
ขอบคุณทุกท่านที่อ่านมาถึงตรงนี้
จนกว่าจะพบกันอีกครั้งเมื่อเวลาและโอกาสเป็นใจ