Jitrak Blog

Again with Math for Programmers

อีกครั้งกับ Math for Working Programmer

12 Dec 2020 01:00

Written by: Yosapol Jitrak

Tags:

Math

เมื่อสัปดาห์ที่ผ่านมา (5 - 6 ธันวาคม 2563)
ได้มีโอกาสลงเรียน Math for Working Programmer ซ้ำอีกครั้ง
รอบนี้เนื้อหายังคงเข้มข้นเช่นเดิม แต่รู้สึกว่าอาจารย์เดฟ Dave Rawitat Pulam ปรับแนวทางการสอนจากเดิมไปเล็กน้อย ซึ่งเป็นเรื่องปกติของการสอนของอาจารย์ ทุกครั้งที่สอน จะเหมือนภาพยนตร์ที่ถูกนำมาทำใหม่ (จากปากอาจารย์แกเอง) ซึ่งแก่นของเนื้อหายังคงเดิม แต่มีรายละเอียดบางอย่างที่ถูกปรับเปลี่ยนไปบ้าง โดยรอบนี้เมื่อเทียบกับครั้งที่แล้วที่ผมเรียน คือ Math for Programmers - Public 3 (2 - 3 พฤศจิกายน 2562) มีการลดเนื้อหา Historical บางส่วนไป แต่แลกมาด้วยเวลาที่ให้คนเรียนได้มีโอกาสในการย่อยเนื้อหาเข้าสู่สมองที่มากขึ้น รวมถึงมีเวลาให้ได้ทดลอง Coding จริงจังมากกว่าครั้งก่อน

Functional Programming

เปิด Class มาไม่นาน ผมก็เจอประโยคที่ทำให้ผมเจ็บไปทีนึง คือ “อย่านำ Functional Programming ไปเทียบกับ OOP” ซึ่งผมเคยเป็นอย่างนั้นจริง ๆ หลังจากเรียนจบคราวที่แล้ว ผมได้มีโอกาสเป็น Speaker ในงาน 4th functional programming monthly meet up in BKK ในหัวข้อ Characteristics of Functional Programming ผมยังนำ FP และ OOP ไปเทียบกันในงาน ซึ่งก็มีหลายคนบอกว่าอย่าเอาไปเทียบกัน โดยเนื้อหาตรงนั้นผมไปอ้างอิงมาจากเว็บไซต์ Tutorials Point Functional Programming - Introduction กว่าผมจะตกตะกอนว่าทำไมอย่านำทั้ง 2 อย่างมาเทียบกันก็ใช้เวลาอยู่เป็นเดือน

ในวันแรกก็จะมีพวก Definition ของ Problem, Computation เป็นต้น, การกล่าวถึง Million-Dollar Question ในยุคที่ก่อนจะมี Computer แบบทุกวันนี้, อะไรคือ Turing machine, การอธิบายสิ่งต่าง ๆ ด้วย Math ผสานกับ Programming อย่างลงตัว ซึ่งไม่มีความรู้สึกว่าเข้าถึงยาก และเข้าใจยากเหมือนกับตอนสมัยเรียนมัธยม โดยวันนี้ส่วนใหญ่จะเป็นทฤษฎี และเล่าประวัติของสิ่งต่าง ๆ มากกว่า ยังไม่ค่อยได้ Coding กันเท่าไหร่

วันที่สองจะค่อนข้างเน้นไปทาง Coding เป็นหลัก และทำให้เราค่อย ๆ เห็น Power of Declarative style ด้วยตัวอย่างจากภาษา Haskell โดยตัวอย่างโจทย์ที่ผมว้าวมาตั้งแต่ครั้งที่แล้วคือ Tower of Hanoi คำศัพท์พวก Monoid, Monad, Functors ก็อธิบายให้ Programmer ทั่วไป ที่ไม่ใช่ Mathematician พอเข้าใจได้ รวมถึงกล่าวถึง และปูทางถึง Category Theory ที่เป็น Class ต่อจาก Math for Programmers ของอาจารย์ (ที่อาจารย์เขาต้องแยก Class เพราะ Category Theory ของอาจารย์ เนื้อหาอัดแน่นมาก 2 วันยังรู้สึกว่าเอาไม่อยู่ สมองคนเรียนจะระเบิด ล่าสุดได้ข่าวมาว่า Slide ที่สอน 2 วัน ปาไป 2000 กว่าหน้าแล้ว)

ประโยคที่ผมชอบที่สุดใน 2 วันนี้คือ “ทำไมเราต้อง Refactor ถ้าเราทำ Prefactor ได้”

เหมือนได้เรียน Historical, Math, Programming และ Problem solving ใน Class เดียว จากคนที่มีประสบการณ์ และความสามารถอันดับต้น ๆ ของประเทศ เรื่องพวกนี้สามารถศึกษาจาก Internet เองได้ แต่คนที่จะพูดเรื่องเล่านี้ ให้รู้เรื่อง ย่อยง่าย เป็นภาษาไทย สำหรับให้ Programmer ทั่วไป ถ้าไม่ใช่อาจารย์เดฟคนนี้ ผมก็ไม่รู้แล้วเหมือนกัน สิ่งที่ได้จากอาจารย์ไม่ใช่เทคนิคในการเขียนโปรแกรม แต่เป็นมุมมอง และแนวคิดในการแก้ไขปัญหา โดยที่มีคณิตศาสตร์อยู่เบื้องหลัง สำหรับผมมองว่าเป็น Class Math for Programmers เป็น Class ที่ดีที่สุดในชีวิตที่ผมเคยเข้าเรียนมา และอยากให้คนอื่น ๆ ได้ลองมาเรียนเองสักครั้งในชีวิต (ถ้าแย่งที่นั่งทันนะ)

สำหรับคนที่อยากจะลงเรียน ผมขอแนะนำการเตรียมตัวว่าให้นอนไปให้เพียงพอ เคลียร์ตารางช่วงหัวค่ำเอาไว้ เพราะมันลากยาวแน่นอน ถ้าเป็นไปได้ศึกษาพวกเรื่อง Concept Functional Programming มาก่อนเรียน เพราะเรื่องพวกนี้ศึกษา และหาอ่านเองได้ไม่ยาก จะได้ไม่ต้องเปลืองสมองมาทำความเข้าใจ และเรียนเรื่องพวกนี้ใหม่ใน Class เอาสมองไปเรียนสิ่งอื่นที่อาจารย์จะสอนดีกว่า