Tutorial

Programming 101 - How to learn new technology lightning fast

By Arnon Puitrakul - 09 ตุลาคม 2017

Programming 101 - How to learn new technology lightning fast

เรื่องของเทคโนโลยีจัดว่าเป็นเรื่องที่มาไวและไปไวกว่า มาเร็วเคลมเร็วของประกันซะอีก ดูอย่างเรื่องของ Framework ที่ปัจจุบันผุดขึ้นยังกะดอกเห็ด

ทำให้ผมนึกถึงประโยคหนึ่งจากหนังเรื่องเก่ามากเรื่องหนึ่งนั่นคือ The Matrix กับประโยคที่ผมก็จำไม่ค่อยได้แล้ว ที่ The Oracle พูดว่า โปรแกรมมันจะถูกลบเมื่อมีโปรแกรมที่ดีกว่ามาแทนที่มัน จากที่เราเห็นในปัจจุบัน ที่เทคโนโลยีเดินหน้าไปเร็วมาก ก็มีเทคโนโลยีถูกเปลี่ยนผ่านไปมาเช่นกัน ดังนั้นการเรียนรู้อยู่ตลอดเวลาถือเป็นเรื่องที่ทุกคนควรกระทำ และ Skill การเรียนรู้ด้วยตัวเองก็เป็นหนึ่งใน Skill Set ที่ผมมองว่าคนสมัยนี้ควรจะมี วันนี้ผมจะพาไปดูว่า เวลาผมจะเรียนรู้เทคโนโลยีใหม่ ๆ ผมคิดอะไรบ้าง (เอาไปปรับใช้กับอย่างอื่นก็ได้นะ นอกจากเทคโนโลยี)

Start with WHY

เวลาผมจะคิดอะไร ผมจะเริ่มจากคำว่า **"ทำไม"** ก่อน เพราะผมเชื่อว่าทุกอย่างที่เกิดขึ้นมา มันล้วนมีเหตุผลของมัน เทคโนโลยีก็เช่นกัน การที่มันจะถูกสร้างขึ้นมา โอเคแหละมี Programmer เขียนมันขึ้นมา แต่คำถามที่พวกเราไม่ค่อยจะถามกันคือ

ทำไมเขาถึงเขียนขึ้นมา ?

ผมมองว่านี่น่าจะเป็นจุดบอดจุดหนึ่งของคนไทยเลยก็ว่าได้ ที่จะแค่เรียนว่ามันทำงานยังไงแล้วจบ แต่ไม่เคยสนใจว่า ทำไมมันถึงเกิดขึ้นมา ? อ่านมาถึงจุดนี้ อาจจะเริ่ม งง แล้วใช่มั้ยว่า ทำไมเราต้องรู้ด้วยว่าของพวกนั้นมัน ทำไมมันถึงเกิดขึ้นมา ที่ผมคิดแบบนี้มันเป็นเรื่องว่า ของทุกอย่างนอกจากมันจะมีเหตุผลในการถูกสร้างแล้ว มันยังถูกสร้างให้เหมาะสมกับการตอบโจทย์ หรือเหตุผลของมันนั่นเอง นั่นทำให้เรารู้ต่อไปว่า เจ้าสิ่ง ๆ นั้นมันเหมาะกับงานแบบไหน ผมขอยกตัวอย่างใกล้ ๆ ตัวผมละกัน เป็นเรื่องของ Laravel กับ Laravel Lumen ที่จริง ๆ แล้วมันก็เป็น Framework เหมือนกัน แต่มันก็มีส่วนที่ต่างกันอยู่ ถ้าเราเรียนแค่ว่า มันทำอะไรได้ เราก็จะจบแค่ว่ามันเป็น Framework เหมือนกัน แต่ถ้าเราเริ่มที่จะเข้าใจว่าทำไมมันถูกสร้างมา เราก็จะเข้าใจว่า อ๋อ Laravel มันใหญ่เกินไปสำหรับการสร้าง API Server นะ เลยเอา Laravel มาย่อส่วนกลายเป็น Lumen นะอะไรทำนองนั้น

การลงมือทำคือวิธีที่ดีที่สุด

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

เชื่อว่าใครที่เขียน React ทุกคนต้องรู้จักสิ่งที่เรียกว่า create-react-app แน่นอน สำหรับใครที่ไม่รู้จัก มันคือ Boilerplate สำหรับการสร้าง Web App ผ่าน React แรก ๆ ที่ผมหัดใช้ก็ใช้ผ่านเจ้า Boilerplate นี่แหละ แต่พอเขียน ๆ ไปกลับรู้สึกว่าตัวเองไม่เข้าใจเลยว่า ทำไมมันถึงต้องเขียนแบบนั้น ทำไมต้องทำแบบนี้ จนวันนึงก็ตัดสินใจลองเริ่มตั้งแต่ต้นเลย เริ่มตั้งแต่ Webpack ไปยัน React เองทั้งหมดเลย มันช่วยอยู่นะ จากที่เป็นนกแก้วนกขุนทองเขียนตาม Document ไป กลับเข้าใจเลยว่า แต่ละบรรทัดมันมายังไง และมันทำอะไร

พื้นฐานต้องมา !

แต่การที่จะเข้าใจเทคโนโลยีใหม่ ๆ หลาย ๆ อย่างมันมาจากรากฐานเดียวกัน เหมือนกับเวลาตอนแรก ๆ ที่เราชอบพูดกันว่า Java เนี่ยก็มี Data Structure หลาย ๆ อย่างมาให้เราพร้อมใช้แล้ว แล้วเราจะเรียนไปทำไม ? แต่พอเวลาเราเริ่มเรียนรูปเทคโนโลยีใหม่ ๆ มากขึ้นแล้ว เราจะเห็นเลยว่า ทั้งหมดมันก็มาจากรากฐานเดียวกัน ฉะนั้นการที่จะเข้าใจเทคโนโลยีใหม่ ๆ อย่างแจ่มแล้วละก็ เรื่องของพื้นฐานก็สำคัญ มีคนเคยบอกผมว่า ถ้ารากมันมั่นคง เราจะต่ออะไรลงไปรากมันก็ไม่ทำให้ล้มแน่นอน

คุณเข้าใจมันจริง ๆ รึเปล่า

เรื่องต่อไปนี้เกิดจากข้อสังเกตของผม และประสบการณ์ที่เจอนะ คือเวลาหลาย ๆ คนเรียนเทคโนโลยีใหม่ ๆ ยังไม่ทันคล่องเลย ก็หยิบมันมาใช้กับ Production แล้ว ทำให้เกิดปัญหานานับประการที่ทั้งแก้ได้และไม่ได้ ส่งผลให้ปัญหาที่แก้ไม่ได้สักทีมันเรื้อรังขึ้นไปเรื่อย ๆ ไม่รู้สิผมมักจะเรียกว่า "เห่อห_อย" อะ ฉะนั้นสิ่งที่สำคัญมาก ๆ คือ ใจเย็น ๆ ค่อย ๆ ศึกษาเรียนรู้ข้อดี ข้อเสียของมันไปเรื่อย ๆ เหมือนเวลาเราจะคบใครอะ ไม่ใช่ว่าเจอกันคืนนี้ __ กันคืนเดียวก็แต่งงานกันเลย เลือกพลาดคือพลาด เลือกดีก็ถือว่าโชคดี แต่อย่าให้ชีวิตเราขึ้นกับโชคเลย เราเลือกได้ ผมเคยได้ยินคำพูดนึงนานมาละเขาบอกว่า การเขียนโปรแกรมสักตัวขึ้นมา มันก็เหมือนกับการแต่งงาน เลือกพลาดก็ชิบหาย เลือกดีก็ดีไป จริง ๆ ตัวอย่างด้านบนก็เอามาจากคำพูดนี้แหละ ถ้าใครอ่านแล้วนึกออกไปใครเป็นคนพูดไว้ก็มา Comment หน่อยอยากรู้ ลืมไปแล้วเหมือนกัน

สรุป

ก่อนจะไปไกลกว่านี้ผมขอสรุปก่อนเลยละกัน ในการที่เราจะเรียนรู้อะไรสักอย่างให้เร็ว ไม่ใช่แค่เทคโนโลยีนะอะไรก็ได้เลยแหละ มันเริ่มจากเราตั้งคำถามกับมันก่อนว่า ทำไม? แล้วอย่าแค่อ่านกับดู ให้เราลงมือทำมันด้วย และอย่าลืมพื้นฐาน เพราะมันจะเป็นรากฐานที่สำคัญที่ทำให้เราเข้าใจอะไรใหม่ ๆ ใน Field นั้นได้ง่ายขึ้น และที่สำคัญ ขอให้มั่นใจว่า เราเข้าใจมันจริง ๆ ค่อย ๆ เรียนรู้ไป แล้วค่อยเอามาใช้จริง ๆ จัง ๆ กับงานของเรา และนี่ก็คือทั้งหมดที่ผมใช้ในการเรียนรู้อะไรใหม่ ๆ เพราะทุกอย่างเดี๋ยวนี้มันมาเร็วไปเร็ว เราก็ต้องปรับตัวตามให้ทัน เพราะมีคนเคยบอกผมไว้ว่า การเรียนรู้มีไม่สิ้นสุด ตอนนี้ผมเชื่อแล้ว มันมีอะไรออกมาให้เราติดตามและค้นหาทุกวัน แต่สิ่งหนึ่งที่ผมอยากให้ทุกคนเป็นกันคือ คนที่สร้างสรรค์อะไรใหม่ ๆ อย่ามัวที่เสพสิ่งที่คนอื่นสร้างให้มาก แล้วหันมาสร้างสิ่งใหม่ ๆ ตอบแทนกลับไปด้วย โดยใช้สิ่งที่คนอื่นสร้างมาให้นี่แหละ มันก็เหมือนกับการส่งต่อ การพัฒนาองค์ความรู้ของพวกเราให้ก้าวไกลขึ้นไปอีก นี่แหละหมดละ บรัยเจอกันในบทความหน้าเน้อ PS. ถ้ามีเรื่องอะไรอยากรู้เกี่ยวกับ Tip ของการเขียนโปรแกรมถามมาได้นะ จะได้เอามาเขียนเป็นตอนต่อไป

Read Next...

จัดการเรื่องแต่ละมื้อ แต่ละเดย์ด้วย Obsidian

จัดการเรื่องแต่ละมื้อ แต่ละเดย์ด้วย Obsidian

Obsidian เป็นโปรแกรมสำหรับการจด Note ที่เรียกว่า สารพัดประโยชน์มาก ๆ เราสามารถเอามาทำอะไรได้เยอะมาก ๆ หนึ่งในสิ่งที่เราเอามาทำคือ นำมาใช้เป็นระบบสำหรับการจัดการ Todo List ในแต่ละวันของเรา ทำอะไรบ้าง วันนี้เราจะมาเล่าให้อ่านกันว่า เราจัดการะบบอย่างไร...

Loop แท้ไม่มีอยู่จริง มีแต่ความจริงซึ่งคนโง่ยอมรับไม่ได้

Loop แท้ไม่มีอยู่จริง มีแต่ความจริงซึ่งคนโง่ยอมรับไม่ได้

อะ อะจ๊ะเอ๋ตัวเอง เป็นยังไงบ้างละ เมื่อหลายเดือนก่อน เราไปเล่าเรื่องกันขำ ๆ ว่า ๆ จริง ๆ แล้วพวก Loop ที่เราใช้เขียนโปรแกรมกันอยู่ มันไม่มีอยู่จริง สิ่งที่เราใช้งานกันมันพยายาม Abstract บางอย่างออกไป วันนี้เราจะมาถอดการทำงานของ Loop จริง ๆ กันว่า มันทำงานอย่างไรกันแน่ ผ่านภาษา Assembly...

Monitor การทำงาน MySQL ด้วย Prometheus และ Grafana

Monitor การทำงาน MySQL ด้วย Prometheus และ Grafana

นอกจากการทำให้ Application รันได้แล้ว อีกเรื่องที่สำคัญไม่แพ้กันคือการวางระบบ Monitoring ที่ดี วันนี้เราจะมาแนะนำวิธีการ Monitor การทำงานของ MySQL ผ่านการสร้าง Dashboard บน Grafana กัน...

เสริมความ"แข็งแกร่ง" ให้ SSH ด้วย fail2ban

เสริมความ"แข็งแกร่ง" ให้ SSH ด้วย fail2ban

จากตอนที่แล้ว เราเล่าในเรื่องของการ Harden Security ของ SSH Service ของเราด้วยการปรับการตั้งค่าบางอย่างเพื่อลด Attack Surface ที่อาจจะเกิดขึ้นได้ หากใครยังไม่ได้อ่านก็ย้อนกลับไปอ่านกันก่อนเด้อ วันนี้เรามาเล่าวิธีการที่มัน Advance มากขึ้น อย่างการใช้ fail2ban...