Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to learn almost anything #61

Draft
wants to merge 5 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .vitepress/authors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ export const authors: Record<string, Author> = {
phoneee: {
name: 'Dollapak Suwanpunya',
},
heypoom: {
name: 'Phoomparin Mano',
},
}

interface Author {
Expand Down
122 changes: 122 additions & 0 deletions how-to-learn-almost-anything/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
---
title: How to learn almost anything
head:
- - link
- rel: canonical
href: https://poom.dev/how-to-learn
- - meta
- name: description
content:
# - - meta
# - property: og:image
# content: /share-images/TODO.png
authors:
- heypoom
---

# How to learn almost anything

<author-list></author-list>

:::info Webmaster’s foreword
ผมรู้จักกับ [น้องภูมิ][poom] เมื่อปี 2017 ตอนที่เขาอายุ 15 ปี
น้องภูมิเป็นคนนึงที่เรียนรู้ทุกเรื่องได้เร็วที่สุดที่ผมเคยรู้จัก
[ตอนอายุ 16 น้องภูมิลาออกจากโรงเรียน หยุดการศึกษาในระบบที่ ม.4](https://mappalearning.co/mano-family-interview/)
พออายุ 17 ก็ได้ไปทำงานเป็น Software Engineer ที่บริษัทใน Sillicon Valley จนกระทั่งบริษัทนั้นถูก Meta (Facebook) ซื้อไป
จึงกลับมาทำงานที่บริษัทในไทยตอนอายุ 19 และขึ้นไปถึงตำแหน่ง VP of Engineering ด้วยอายุ 21
ตอนที่เขียนบทความนี้ น้องภูมิได้ออกจากงานเพื่อมาปั้นโปรเจคกับเพื่อนๆ ในกลุ่ม [Creatorsgarten][grtn]

น้องภูมิและกลุ่มเพื่อนๆ กำลังจะจัดอีเวนต์ [“How to learn almost anything”](https://eventpop.me/s/learn) และได้[โพสต์ในกลุ่มเฟสบุ๊ค โปรโมทงาน และแชร์ว่าทำยังไง เขาและเพื่อนๆ ถึงเรียนรู้สิ่งต่างๆ ได้ก้าวกระโดด](https://web.facebook.com/groups/homeschoolnetwork/posts/9846779728725945)
ผมคิดว่าโพสต์นั้นสรุปแนวคิดต่างๆ ไว้ได้ชัดเจนมาก ควรค่าแก่การบันทึกไว้เกินกว่าจะปล่อยให้จมไปในฟีดเฟสบุ๊ค
ผมเลยแนะนำให้[โพสต์ขึ้นเว็บไซต์ส่วนตัว](https://poom.dev/how-to-learn) พร้อมขอเอามาโพสต์บนเว็บนี้ด้วย
ต่อจากตรงนี้จะเป็นบทความที่น้องภูมิเขียนครับ

<cite>— [ไท][thai] (ผู้ดูแลเว็บ [wonderful.software](/))</cite>
:::

[grtn]: https://creatorsgarten.org/
[poom]: https://poom.dev/
[pub]: https://from.pub/
[thai]: https://dt.in.th/
[mod]: https://playpost.gg/mods-history-of-successful/
[lifelong]: https://m.se-ed.com/Detail/%E0%B8%AD%E0%B8%99%E0%B8%B8%E0%B8%9A%E0%B8%B2%E0%B8%A5%E0%B8%95%E0%B8%A5%E0%B8%AD%E0%B8%94%E0%B8%8A%E0%B8%B5%E0%B8%A7%E0%B8%B4%E0%B8%95-Lifelong-Kindergarten/9786168221181
[froebel]: https://en.wikipedia.org/wiki/Froebel_gifts
[logo]: https://karnlab.com/%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2%E0%B9%82%E0%B8%A5%E0%B9%82%E0%B8%81%E0%B9%89/
[no60]: https://themomentum.co/theframe-pichet-klunchun/
[messe]: https://spaceth.co/messe/
[antidisciplinary]: https://thepotential.org/voice-of-new-gen/generation-of-innovators-ep-1/#:~:text=%E0%B8%99%E0%B8%B4%E0%B8%A2%E0%B8%B2%E0%B8%A1%E0%B8%82%E0%B8%AD%E0%B8%87%E0%B8%84%E0%B8%B3%E0%B8%A7%E0%B9%88%E0%B8%B2%20Anti%20%E2%80%93%20Disciplinary
[scisart]: https://creatorsgarten.org/event/scisart
[stupid]: https://stupid.hackathon.in.th
[lip]: https://www.swyx.io/learn-in-public
[rtos]: https://th.wikipedia.org/wiki/%E0%B8%A3%E0%B8%B0%E0%B8%9A%E0%B8%9A%E0%B8%9B%E0%B8%8F%E0%B8%B4%E0%B8%9A%E0%B8%B1%E0%B8%95%E0%B8%B4%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%81%E0%B8%9A%E0%B8%9A%E0%B9%80%E0%B8%A7%E0%B8%A5%E0%B8%B2%E0%B8%88%E0%B8%A3%E0%B8%B4%E0%B8%87
[3b1b-quaternion]: https://www.youtube.com/watch?v=d4EgbgTm0Bg
[events]: https://creatorsgarten.org/events
[bio]: https://creatorsgarten.org/event/bio
[doom]: https://www.youtube.com/watch?v=87h6nM0LHRU
[doom-fridge]: https://www.instagram.com/p/CGQoq2HpHKS/
[doom-pregnancy-test]: https://twitter.com/Foone/status/1302820468819288066
[mit-hacks]: https://en.wikipedia.org/wiki/Hacks_at_the_Massachusetts_Institute_of_Technology
[howtogamit]: http://web.mit.edu/htgamit/www/index.html
[sideprojectshowdown]: https://creatorsgarten.org/event/sideproject
[le-penseur]: https://en.wikipedia.org/wiki/The_Thinker
[bkkoss]: https://creatorsgarten.org/event/bangkok

<!-- original post from https://poom.dev/how-to-learn -->

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

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

[[toc]]

## 1. Black Box Learning

**เราเชื่อว่าเราไม่ต้องแน่น fundamentals ตั้งแต่วันแรก**เพื่อที่จะสร้างอะไร แต่เราจะเก่งได้ถ้าเราตั้งเป้าหมายว่าเราอยากสร้างอะไร แล้วทำความเข้าใจมันไปทีละขึ้น

มี 2 โปรเจคตัวอย่างที่เราคงทำไม่ได้ ถ้าไม่ได้ใช้วิธี black-box คือ[โปรเจค number 60][no60] ของพี่พิเชษฐ ที่ถอดองค์ประกอบนาฎศิลป์ขึ้นมาสร้างท่ารำใหม่ๆ กับ[โปรเจค MESSE][messe] ที่สร้าง DNA storage payload ส่งขึ้นยาน Blue Origin

ในสองโปรเจคนี้ เราได้โจทย์ให้เขียน webapp ที่สร้างท่ารำใหม่ๆ บนโลกสามมิติ กับการเขียน microcontroller ที่ไว้ถ่ายภาพการทดลองบนอวกาศ

โปรเจคสนุกๆ ที่เราทำส่วนมาก มันจะมีส่วนที่เราไม่รู้ประมาณ 20% อยู่แล้ว เช่นโปรเจคนี้เราก็ไม่เคยเล่นกับ quaternion, differential calculus หรือไม่เคยเขียน RTOS ให้มัน fault-tolerant เพื่อทำงานบนอวกาศได้

วิธีของเราคือ เราตั้งเป้าหมายก่อนว่าเราจะสร้างอะไร ตอนนี้เราไม่รู้อะไร แล้วค่อยๆ แกะให้มันลึกขึ้นทีละขั้น เช่นเราก็เปิด [quaternions interactive guide ของ 3b1b][3b1b-quaternion] เพื่อให้ get intuition ก่อน เราจะพยายามเข้าใจก่อนว่ามันคืออะไร มันสำคัญยังไง และ interface ของมันคืออะไร

เราใช้สิ่งที่เรารู้อยู่แล้ว 80% ช่วยให้เราเข้าใจเรื่องนั้นได้ เราเขียนโค้ดได้อยู่แล้ว เราก็สร้าง prototype ลองเล่นกับข้อมูล quaternion หรือลองเขียน naive version ของโค้ด microcontroller มาก่อน

พอเราเรียนอะไรแบบ black-box เรารู้สึกว่าทุกอย่างมันน่าตื่นเต้น น่าสนุกสำหรับเราไปหมด พอเรา get intuition ทำให้เราอยากลงลึก ลงทฤษฎี ลง proof ความรู้สึกต่างกับการเรียนในโรงเรียน ที่เราไม่ได้สร้าง associations หรือ intuition ว่าสิ่งนี้สำคัญยังไง น่าสนใจยังไง ส่วนมากเรียนมาแล้วก็ลืม

## 2. Connecting the dots

**เราไม่มองความรู้ต่างๆ ว่ามันเป็น "วิชา" ที่แยกออกจากกันอย่างชัดเจน** วิชาเป็นแค่ "เลนส์" ที่เราศึกษาส่วนเล็กๆ ของธรรมชาติ ทำให้เราพยายามหาความเชื่อมโยงระหว่างศาสตร์ต่างๆ ว่ามันผสมผสานกันยังไง

ถ้ายกตัวอย่างสองโปรเจคข้างบน คำถามที่เราถามมักจะครอบคลุมหลายศาสตร์ ไม่ได้คิดแค่ element ของศาสตร์เดียว เช่นองค์ประกอบท่ารำเกิดขึ้นมาจากการผสมผสานกันของการเขียนโปรแกรม นาฎศิลป์ คณิตศาสตร์ และฟิสิกส์ หรือ payload ที่ส่งขึ้นเกิดจากศิลปศาสตร์ ชีววิทยา และวิศวะกรรมคอมพิวเตอร์

เวลาที่เราออกแบบอะไร เราไม่ได้คิดแค่ในมุม technology ว่าเราจะสร้างมันขึ้นมาได้ยังไง เชิงโค้ด เชิงโมเลกุล แต่มันมักจะมีมุม human และ aesthetic ว่าเราต้องการจะสื่อสารอะไรออกไป คนจะรับสารและเข้าใจสิ่งนี้ได้ยังไงบ้าง เวลาเราทำ product กับคนวงต่างๆ

ใน[งานของ Creatorsgarten ที่เราจัดในปีนี้][events] เราก็ชวนตั้งคำถามถึง intersection ของงานต่างๆ อย่าง [Sci-ย-ศาสตร์][scisart] ที่พูดถึงไสยศาสตร์ในสัปดาห์วิทยาศาสตร์ เช่น ตำแหน่งของประตูอุโบสถ มีความสอดคล้องกับดาราศาสตร์ยังไง ไปจนถึงการสร้างกุมารทองโดยใช้ brain stimulation และ generative AI

อีกงานที่น่าสนใจคือ [biological aesthetic of nature][bio] ที่เล่าถึงการสร้าง biological circuits ที่ผสมผสานชีววิทยาเข้ากับการพัฒนาซอฟต์แวร์ เป็นการสร้างโปรแกรมแบบใหม่ๆ ที่ใช้ DNA เป็นองค์ประกอบหลัก

## 3. Hacker Culture

**เจอปัญหาอะไร สร้างเลย** ไม่ต้องรอคนมาแก้ปัญหาให้ **สนุกกับการทำความเข้าใจว่าสิ่งหนึ่งสร้างขึ้นมาได้ยังไง** แล้วพยายามแกะ แงะ และ "hack" ให้มันทำอย่างอื่นที่เราต้องการได้

วัฒนธรรม hacker culture เป็นอะไรที่เราชอบมาก โดยเฉพาะวงการ dev ที่เราชอบเห็นคนเอาเกม [DOOM][doom] ไปรันบนที่แปลกๆ [พวกจอตู้เย็น][doom-fridge] เครื่องซักผ้า [เครื่องตรวจครรภ์][doom-pregnancy-test] มันเกิดจากการที่เราเข้าใจลึกพอว่าสิ่งนึงทำงานยังไง ไปจนถึง fundamentals ของมัน แล้วเราสามารถ exploit มันได้

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

วัฒนธรรมการ hack ของ MIT เริ่มจาก[คู่มือนักเรียน][howtogamit]ที่พูดถึง [MIT hacks][mit-hacks] ว่าการแฮคคือเรื่องที่สร้างสรรค์ และทำได้ ต้องทำอย่างปลอดภัย ทุกปีก็จะมีเด็ก MIT ขนรถตำรวจขึ้นไปบนดาดฟ้ามหาวิทยาลัยบ้างเอาโดรนมาส่งจดหมายยินดีต้อนรับรุ่นน้องมาก เราว่ามันได้ใช้ความรู้ในแบบที่ playful มากๆ

ตอนเราจัด [side projects showdown][sideprojectshowdown] ตอนนั้นเห็น hacker culture ในไทยได้ชัดมาก มีตั้งแต่คนสร้าง AI waifu เพราะเหงาไม่มีแฟน, คนสร้างเกม laser tag มาเล่นเองกับเพื่อน, สร้าง framework ที่เร็วเกือบเท่า Rust ขึ้นมา ทุกคนอยากได้อะไรก็สร้างเอง แล้วมันได้รู้อะไรเยอะมาก

อีกงานที่เห็นภาพนี้ได้ชัด ก็หนีไม่พ้น [stupid hackathon][stupid] ที่เพื่อนๆ เราจัดกันมา 7 ปีแล้ว ทุกปีก็จะมีอะไรเจ๋งๆ อย่างแอพเจิมโค้ดให้ศักดิ์สิทธิ์ ภาษาโปรแกรมอุ๋ง แอพวาดวงกลมบนโลโก้เหมือนคิดมาแล้ว ถึงไอเดียจะไร้สาระมาก แต่ในมุมโค้ดมันได้เล่นกับ tech ที่ทำให้เราได้รู้อะไรเยอะขึ้นมาก

## 4. Learning in Public

อย่าเรียนอะไรคนเดียว ออกมาสร้าง ออกมาแชร์เยอะๆ ให้คนอื่นเห็นด้วย

เวลาเรานึกถึงการใช้ความคิด เรามักจะนึกถึงรูปปั้น [The Thinker][le-penseur] ที่ใช้เวลาขบคิดอยู่คนเดียว แต่การทำงานในโลกจริงมันต้อง bounce ideas around มันต้อง remix ideas มากๆ เรามองว่าการ [learn in public][lip] มันทำให้คนอื่นได้รู้จักเรามากขึ้น ได้เรียนรู้จากสิ่งที่เราสร้างขึ้นมา

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

ใน [bangkok open source][bkkoss] ที่เราจัดตอนต้นเดือนมีนาคมไป เราชอบที่ทุกคนไม่ได้เก็บโปรเจคตัวเองไว้เป็นความลับ แต่มัน learn in public จริงๆ ทั้งใน Discord ใน GitHub รวมถึงมาแชร์กันเรื่อยๆ พอมันไม่ได้แข่งกัน มันเลยเกิด collaboration ที่คนกล้าเรียนรู้ไปด้วยกัน
4 changes: 4 additions & 0 deletions index.data.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import { createContentLoader } from 'vitepress'

const pages: IndexItem[] = [
{
file: 'how-to-learn-almost-anything/index.md',
date: '2023-09-12',
},
{
file: 'programming-and-motivation/index.md',
date: '2021-03-14',
Expand Down