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...

การสร้าง SSD Storage Pool บน Synology DSM

การสร้าง SSD Storage Pool บน Synology DSM

สำหรับคนที่ใช้ Synology NAS บางรุ่นจะมีช่อง M.2 สำหรับเสียบ NVMe SSD โดยพื้นฐาน Synology บอกว่ามันสำหรับการทำ Cache แต่ถ้าเราต้องการเอามันมาทำเป็น Storage ละ มันจะทำได้มั้ย วันนี้เราจะมาเล่าวิธีการทำกัน...

Multiprogramming, Multiprocessing และ Multithreading

Multiprogramming, Multiprocessing และ Multithreading

หลังจากที่เรามาเล่าเรื่อง malloc() มีคนอยากให้มาเล่าเรื่อง pthread เพื่อให้สามารถยัด Content ที่ละเอียด และเข้าใจง่ายในเวลาที่ไม่นานเกินไป เลยจะมาเล่าพื้นฐานที่สำคัญของคำ 3 คำคือ Multiprogramming, Multitasking, Multiprocessing และ Multithreading...

Synology NAS และ SSD Cache จำเป็นจริง ๆ เหรอ เหมาะกับระบบแบบใด

Synology NAS และ SSD Cache จำเป็นจริง ๆ เหรอ เหมาะกับระบบแบบใด

ใน Synology NAS มีความสามารถนึงที่น่าสนใจคือ การใช้ SSD เป็น Cache สำหรับระบบ ที่ทำให้ Performance ในการอ่านเขียน เร็วขึ้นกว่าเดิมมาก ๆ แน่นอนว่า เราลองละ วันนี้เราจะมาเล่าให้อ่านกันว่า หากใครคิดที่จะทำ มันเหมาะ หรือ ไม่เหมาะกับการใช้งานของเรา...

ฮาวทูย้าย Synology Add-on Package ไปอีก Volume

ฮาวทูย้าย Synology Add-on Package ไปอีก Volume

เรื่องราวเกิดจากการที่เราต้องย้าย Add-on Package ใน DSM และคิดว่าหลาย ๆ คนน่าจะต้องประสบเรื่องราวคล้าย ๆ กัน วันนี้เราจะมาเล่าวิธีการว่า เราทำยังไง เจอปัญหาอะไร และ แก้ปัญหาอย่างไรให้ได้อ่านกัน...