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 ใหม่ ๆ เกิดขึ้นทุกวัน ขอให้สนุกกับการเขียนโปรแกรมนะครับ