Tutorial

Programming 101

By Arnon Puitrakul - 06 กรกฎาคม 2019

Programming 101

บทความนี้เราเขียนไว้นานแล้วละ ตั้งแต่ปี 2014 แล้ว วันนี้เราขอเอามาปัดฝุ่น เขียนใหม่เลยละกัน ประสบการณ์อีก 5 ปีที่เพิ่มขึ้นมา น่าจะทำให้ใครหลาย ๆ คนได้อะไรมากขึ้นนะ

จะเริ่มเขียนโปรแกรม ต้องหัดยังไง ?

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

Programmer ไม่ใช่แค่คนเขียนโปรแกรม แต่เป็นนักแก้ปัญหา

ตามชื่อหัวข้อนี้เลย เราอาจจะคิดว่า การเขียนโปรแกรมก็คือ การที่เรารู้ภาษาเอเลี่ยนอะไรก็ไม่รู้ในสายตาคนอื่น แล้วเขียนมันออกมาอะไรก็ไม่รู้มั่วซั่วไปหมด เราอยากจะบอกว่า การที่มานั่งเขียน Code จริง ๆ มันเป็นแค่เศษเสี้ยวเล็ก ๆ ของการทำงานเท่านั้น เพราะการทำงานพวกนี้มันมีอะไรอีกหลายอย่างมาก ๆ กว่าจะเอามาเขียนเป็น Code อย่างที่ทุกคนเห็นได้

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

ดังนั้น อย่าเข้าใจผิดไปว่าโปรแกรมเมอร์เกิดมาแค่เขียนโปรแกรมเท่านั้นแล้วก็จบ กว่าจะมาเป็นโปรแกรมที่เขามานั่งเขียนกันได้ มันต้องหลายขั้นตอนมาก ทำให้ขั้นตอนแรกของการหัดเขียนโปรแกรม ไม่ใช่ เขียนโปรแกรมเลย แต่เป็น การแก้ปัญหา ก่อน ลองเริ่มจากปัญหาง่าย ๆ ในชีวิตประจำวัน เช่น ถ้าเราจะเดินทางจาก A ไป B เราจะต้องเดินทางยังไง พวกนี้ก็จะช่วยได้ดีเลย

Basic Concept ใครว่าไม่สำคัญ

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

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

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

หรือถ้าเราอยากที่จะเรียน Network ง่าย ๆ เลยนะ อย่างถ้าเราจะส่งข้อมูลไปตามเครื่องคอมพิวเตอร์ใน Network ถามว่า เราจะจัดการมันได้ยังไง ก็คือพวก Routing Algorithm ใช่ม้าาา เห็นมะ มันอยู่ทุกที่ในคอมพิวเตอร์ ไม่เว้นแม้กระทั่งไฟฟ้าที่ไหลผ่านวงจรเพื่อคำนวณอะไรบางอย่างออกมา อยู่ทุกที่จริง ๆ

ภาษาโคตรสำคัญ

นอกจากเรื่องคอมพิวเตอร์แล้ว อีกสกิลที่ต้องมีคือ สกิลภาษาอังกฤษ ต้องยอมรับเลยนะว่า คนไทยเราไม่ได้เป็นเหมือนคนที่คิดค้นเทคโนโลยีใหญ่ ๆ ที่เราใช้กันอยู่ ทั้งหมดล้วนแล้วแต่ก็มาจากประเทศที่ใช้ภาษาอังกฤษซะมากกว่า

ดังนั้น ความรู้ที่มันมีอยู่ส่วนใหญ่ ไม่ได้เป็นภาษาไทยเลย แต่ก็นะ มันก็มีคนเอามาเล่า เอามาแปลกันอยู่เรื่อย ๆ แต่ ๆๆๆๆๆๆๆ ลองคิดกลับกัน ถ้าเราเป็นคนที่เอาเทคโนโลยี หรือของเล่นใหม่ ๆ มาเล่าได้ คน ๆ นั้น ก็ต้องไปเอาสิ่งที่เขียนเป็นภาษาอังกฤษมาแปลให้เราอ่านใช่ม่ะ

ดังนั้น ถ้าเราอยากจะเป็นคน ๆ นั้น สิ่งอีกสิ่งที่ต้องมีคือ ภาษา นั่นเอง มันก็จะช่วยปลดล๊อคโลกของเราให้กว้างอีกเยอะ มันทำให้เราสามารถรับความรู้ หรือของเล่นใหม่ ๆ ได้เร็วขึ้นโดยที่ไม่ต้องรอใครเลย เราเองนี่แหละ ที่จะเป็นคนแชร์ ความรู้ใหม่ ๆ กลับไปใน Community

อย่าไปยึดติดภาษาโปรแกรมมิ่ง

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

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

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

แชร์สิ่งที่รู้กลับไปให้ Community

สุดท้าย ท้ายสุด ณ ตอนที่เราเรียนรู้ใหม่ ๆ เราก็เป็นเหมือนผู้รับ รับความรู้ใหม่ ๆ จาก Community ดังนั้น เมื่อวันนึง เราพัฒนาตัวเอง เก่งขึ้นไปในทุก ๆ วันแล้ว อีกฝั่งนึง ก็จะมีคนที่พึ่งเริ่ม เหมือนที่เราพึ่งเริ่มเมื่อก่อน ฉะนั้นเมื่อเราเป็นผู้รับแล้ว เราก็ลองก้าวที่จะมาเป็นผู้ให้บ้าง

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

บทส่งท้าย

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

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

Read Next...

จัดการข้อมูลบน Pandas ยังไงให้เร็ว 1000x ด้วย Vectorisation

จัดการข้อมูลบน Pandas ยังไงให้เร็ว 1000x ด้วย Vectorisation

เวลาเราทำงานกับข้อมูลอย่าง Pandas DataFrame หนึ่งในงานที่เราเขียนลงไปให้มันทำคือ การ Apply Function เข้าไป ถ้าข้อมูลมีขนาดเล็ก มันไม่มีปัญหาเท่าไหร่ แต่ถ้าข้อมูลของเราใหญ่ มันอีกเรื่องเลย ถ้าเราจะเขียนให้เร็วที่สุด เราจะทำได้โดยวิธีใดบ้าง วันนี้เรามาดูกัน...

ปั่นความเร็ว Python Script เกือบ 700 เท่าด้วย JIT บน Numba

ปั่นความเร็ว Python Script เกือบ 700 เท่าด้วย JIT บน Numba

Python เป็นภาษาที่เราใช้งานกันเยอะมาก ๆ เพราะความยืดหยุ่นของมัน แต่ปัญหาของมันก็เกิดจากข้อดีของมันนี่แหละ ทำให้เมื่อเราต้องการ Performance แต่ถ้าเราจะบอกว่า เราสามารถทำได้ดีทั้งคู่เลยละ จะเป็นยังไง เราขอแนะนำ Numba ที่ใช้งาน JIT บอกเลยว่า เร็วขึ้นแบบ 700 เท่าตอนที่ทดลองกันเลย...

Humanise the Number in Python with "Humanize"

Humanise the Number in Python with "Humanize"

หลายวันก่อน เราทำงานแล้วเราต้องการทำงานกับตัวเลขเพื่อให้มันอ่านได้ง่ายขึ้น จะมานั่งเขียนเองก็เสียเวลา เลยไปนั่งหา Library มาใช้ จนไปเจอ Humanize วันนี้เลยจะเอามาเล่าให้อ่านกันว่า มันทำอะไรได้ แล้วมันล่นเวลาการทำงานของเราได้ยังไง...

ทำไม 0.3 + 0.6 ถึงได้ 0.8999999 กับปัญหา Floating Point Approximation

ทำไม 0.3 + 0.6 ถึงได้ 0.8999999 กับปัญหา Floating Point Approximation

การทำงานกับตัวเลขทศนิยมบนคอมพิวเตอร์มันมีความลับซ่อนอยู่ เราอาจจะเคยเจอเคสที่ เอา 0.3 + 0.6 แล้วมันได้ 0.899 ซ้ำไปเรื่อย ๆ ไม่ได้ 0.9 เพราะคอมพิวเตอร์ไม่ได้มองระบบทศนิยมเหมือนกับคนนั่นเอง บางตัวมันไม่สามารถเก็บได้ เลยจำเป็นจะต้องประมาณเอา เราเลยเรียกว่า Floating Point Approximation...