อยากเริ่มต้นพัฒนาโปรแกรม เริ่มอย่างไรดี?
สารบัญ
- ทุกสายอาชีพงานจะไปได้ดีมากยิ่งขึ้น หากเราชอบหรือเรารักที่จะทำมัน
- บุคลิกที่สำคัญในการเป็นนักพัฒนาโปรแกรม
- มั่นใจในตัวเองแล้วว่าเป็นโปรแกรมเมอร์ได้แน่ๆ แล้วจะเริ่มต้นอย่างไรต่อ?
- เลือกภาษาโปรแกรมที่เราอยากจะเรียน
- เส้นทางการเรียนที่แนะนำและแหล่งข้อมูลออนไลน์
- ไม่ค่อยเข้าใจบางคำ บาง Keywords ที่เป็นภาษาอังกฤษ ไม่รู้ความหมาย จะเรียนรู้อย่างไรดี
- ไม่ว่าจะเรียนภาษาโปรแกรมอะไรก็ตาม อย่าลืมเรียนรู้วิธีการใช้งาน Git ด้วย
- ทำไมต้องเรียนภาษาหรือเครื่องมือที่หลากหลายอย่างมาก?
สำหรับในบทความนี้ จะเป็นบทแนะนำเริ่มต้นสำหรับผู้ที่มสนใจ อยากเริ่มต้นเป็นโปรแกรมเมอร์ ที่สามารถสร้างโปรแกรมของตัวเองได้ จะต้องเริ่มต้นอย่างไร? ต้องเรียนเรื่องอะไรบ้าง? ต้องเตรียมตัวอย่างไร? และเป้าหมายปลายทางจะเป็นอย่างไร?
#ทุกสายอาชีพงานจะไปได้ดีมากยิ่งขึ้น หากเราชอบหรือเรารักที่จะทำมัน
เรื่องนี้นับว่าเป็นเรื่องแรกที่ขาดไม่ได้เลยทีเดียวสำหรับทุกสายงานอาชีพ ถ้าเราไม่ชอบมันมันก็จะไม่รู้สึกสนุก ไม่รู้สึกที่จะอยากทำ และเราก็จะเริ่มดิ่งเข้าสู่สภาวะที่ไม่ดีได้ในอนาคต ดังนั้นการที่เราจะเป็นโปรแกรมเมอร์ได้นั้น อาจจะลองประเมินตัวเองก่อนว่าเรานั้นชอบอะไรกันแน่? เอาจริงๆสิ่งที่หลายคนคงจะชอบในยุคนี้ก็คือ “เงิน” นั้นเอง
ถ้าถามว่าแปลกไหมที่เราอยากจะเป็นโปรแกรมเมอร์เพราะมันสร้างรายได้ได้ดีกว่าสายอาชีพอื่นๆ และดูสบายมากกว่าอาชีพอื่นๆอีกด้วย คำตอบคือไม่แปลกนะครับ เพราะว่าในยุคทุนนิยมแบบนี้ที่สู้รบกันด้วยอำนาจการเงิน ไม่เหมือนสมัยก่อนที่เขาสู้รบกันด้วยอาวุธต่างๆ ดังนั้นเราเองก็ต้องปรับให้เข้าตามยุคสมัยเพื่อเอาตัวรอดในการใช้ชีวิตทั่วไปด้วยนั้นเอง ถึงแม้เงินอาจจะซื้อไม่ได้ทุกอย่าง แต่มันก็ซื้อได้หลายอย่างมากๆอยู่ดี
ถึงอย่างไร ถ้าเราชอบแค่เรื่องเงินอย่างเดียว เราจะไปทำอาชีพอื่นๆได้ที่ไม่ใช่โปรแกรมเมอร์ เพราะว่างานไหนที่เงินดี ก็แสดงว่างานนั้นทำงานยากมากๆถึงได้ค่าตอบแทนสูงสมน้ำสมเนื้อ ดังนั้นงานโปรแกรมเมอร์ ที่พัฒนาโปรแกรมต่างๆขึ้นมา จัดว่าเป็นงานยาก และไม่ใช่งานที่ใครๆเขาก็ทำกันได้กันทุกคน
นี่ไม่ใช่คำขู่นะครับ เป็นเรื่องจริงที่ผมเองก็พบเจอ ทั้งนักศึกษาเพื่อนๆที่เรียนด้วยกัน และคนในโซเซียลมีบางส่วนที่ก็ไม่ประสบความสำเร็จในสายอาชีพนี้ ดังนั้นผมอาจจะบอกถึงบุคลิกคนดังต่อไปนี้ ที่อาจจะทำให้เราสามารถเป็นโปรแกรมเมอร์ได้จริง
#บุคลิกที่สำคัญในการเป็นนักพัฒนาโปรแกรม
-
ข้อที่สำคัญที่สุดเลยคือชอบความท้าทาย เหตุผลคืองานนี้เป็นงานที่ยากจริง ไม่ใช่ความรู้ทั่วไปที่มนุษย์หลายๆคนจะเข้าใจมันได้ด้วย ซึ่งคนที่ชื่นชอบความท้าทายอาจจะสังเกตจากที่ตัวเองชอบทำอะไรใหม่ๆที่ต้องเรียนรู้ ยกตัวอย่างไปทำกิจกรรมที่เราไม่คุ้นเคย อาจจะชอบลองเรียนรู้วิธีการทำอาหารใหม่ๆที่ไม่เคยทำมาก่อน ชอบที่จะลองเล่นดนตรีหรือกีฬาบางประเภทที่ไม่เคยเล่น ชอบเล่นเกมใหม่ๆอยู่ตลอดเวลาที่ต้องเรียนรู้ระบบเกมใหม่รวมถึงชอบเล่นเกมยากๆก็ด้วย ชอบลองทำอะไรแปลกๆที่ตัวเองไม่เคยทำมาในชีวิตอย่างลองนั่งเครื่องบินหรือรถไฟไปเที่ยวต่างจังหวัด เป็นต้น
-
มีกิจกรรมที่ใช้เทคโนโลยีใหม่ๆอย่างสม่ำเสมอ นี่ก็นับว่าเป็นเรื่องสำคัญอันดับสองในการเป็นนักพัฒนาโปรแกรม เพราะเป็นงานที่เกี่ยวกับเทคโนโลยีที่เปลี่ยนแปลงไปตลอด กล่าวคือคอมพิวเตอร์ในอดีตก่อนที่จะเริ่มเป็น Smartphone, Smartwatch ปัจจุบันก็เริ่มมีหลากหลายผลิตภัณฑ์มากขึ้นอย่าง IoT, VR, AR, Cryptocurrency หรือที่กำลังนิยมประจำปี 2022 อย่างหัวข้อการใช้ AI สร้างภาพวาดต่างๆเป็นต้น ดังนั้นถ้าเราชอบอัปเดตเรื่องราวเหล่านี้ มีความสนใจว่ามันทำงานได้อย่างไร เราจะเอามาใช้อะไรได้บ้าง ก็นับว่าเป็นคุณสมบัติที่สำคัญ เพราะในการพัฒนาโปรแกรมก็จะมี Framework หรือเครื่องมือช่วยเหลือต่างๆมาใหม่อย่างสม่ำเสมอในทุกๆปี ที่จะทำให้เราทำงานได้ง่ายยิ่งขึ้นและเหมาะกับยุคปัจจุบันอีกด้วย
-
ชื่นชอบการใช้งานอินเทอร์เน็ต จริงๆคิดว่าทุกคนก็น่าจะชอบอยู่แล้ว แต่บางคนอาจจะไม่ได้ใช้ให้เกิดประโยชน์ขนาดนั้น เช่น ใช้เพื่อติดตามเรื่องที่เราสนใจเป็นการส่วนตัวอย่างติดตามเกม ดารา กีฬา ซีรี่ย์ ของลดราคา ซึ่งอันนี้จริงก็นับว่าเป็นคุณสมบัติสำคัญได้เช่นกันถ้าเราติดตามของที่สนใจเป็น หรือแม้กระทั่งเข้าใจวิธีการ Shopping online ได้ด้วยตนเอง เนื่องจากการที่เรายิ่งใช้อินเทอร์เน็ตมีบทบาทกับชีวิตตัวเองมากขึ้นเท่าใด ก็หมายความว่าเรายิ่งเป็นส่วนหนึ่งในการเป็นโปรแกรมเมอร์ได้มากขึ้นเท่านั้นเช่นกัน เพราะงานพัฒนาโปรแกรมหลายๆครั้งก็ต้องค้นหาผ่านอินเทอร์เน็ตกันอยู่แล้ว
-
อาจจะชอบเล่นเกมหรืออยากสร้างเกม นี่ก็นับว่าเป็นคุณสมบัติที่ดีอีกส่วน เพราะบ่งบอกว่าเรานั้นชอบทำกิจกรรมหน้าคอมหรือหน้ามือถือ ก็ยิ่งทำให้ได้เปรียบมากกว่าเพราะเราคุ้นเคยกับเทคโนโลยีปัจจุบันมากขึ้น และข้อนี้ก็นับว่าเกี่ยวข้องกับข้อแรกเลยคือ ชอบความท้าทาย เพราะส่วนหนึ่งที่สำคัญคือนอกจากเราจะชอบเล่นเกม เราก็ควรได้เล่นเกมอย่างหลากหลายอีกด้วย เพราะจะยิ่งทำให้เราบ่งบอกว่าเราชอบสิ่งใหม่ๆที่มาตลอด ไม่ใช่ว่าเล่นแต่เกมเดิมๆตั้งแต่อดีตจนถึงปัจจุบัน เนื่องจากพฤติกรรมนี้อาจจะส่งผลต่อการใช้ภาษาโปรแกรมหรือ Framework เก่าๆจนติดและไม่คิดจะไปต่อยอดที่ตัวใหม่ได้ด้วย อย่างไรก็ดีบางภาษาโปรแกรมที่เคยมีมา 30-40 ปีเราก็อาจจะยังใช้งานได้ปกติก็ได้เช่นกัน เพียงแต่การใช้ของเก่าในวิธีเก่าๆก็อาจจะทำให้เราพัฒนาช้าหรือลำบากมากกว่าคนอื่นได้อีกด้วย
#มั่นใจในตัวเองแล้วว่าเป็นโปรแกรมเมอร์ได้แน่ๆ แล้วจะเริ่มต้นอย่างไรต่อ?
สิ่งที่สำคัญอย่างมากคือการเลือกภาษาโปรแกรมและเครื่องมือที่เราถนัด รวมทั้งอุปกรณ์ที่จะต้องมี กับทักษะบางส่วนที่สำคัญ ดังนั้นผมจะแบ่งเป็นข้อๆดังนี้ที่เราจะต้องเตรียมตัวไว้ได้เลย
-
ควรมีอุปกรณ์คอมพิวเตอร์ จริงๆคำว่าคอมพิวเตอร์นั้นรวมถึง Desktop (คอมพิวเตอร์ตั้งโต๊ะ) Notebook/Laptop (คอมพิวเตอร์พกพา) แต่รู้หรือไม่ว่ารวมถึง Smartphone ด้วย ดังนั้นเราก็เริ่มพัฒนาโปรแกรมผ่านมือถือ Android หรือ iOS ที่เรามีก็ได้เช่นกัน แต่ผมจะไม่แนะนำเพราะการพิมพ์ดีดนั้นก็สำคัญในการเขียนโค้ด รวมถึงขนาดจอที่ใหญ่หรือมีจอคอมพิวเตอร์สองจอด้วยกัน เนื่องจากเป็นงานที่ต้องใช้พื้นที่หน้าจอสูงโดยส่วนใหญ่และต้องพิมพ์ดีดเร็วๆได้จะยิ่งดี จึงทำให้ทางเลือก Desktop จะเหมาะสมที่สุด เพราะได้หน้าจอกว้างกว่า ราคาถูกกว่าต่อคุณภาพของคอมพิวเตอร์ รวมถึงไม่ทำให้เราปวดหลังหรือเจ็บป่วยจากอาการ Office syndrome ต่างๆได้อีกด้วย อย่างไรก็ดีบางคนต้องการพกพาไปที่ต่างๆบ่อยๆก็อาจจะต้องเลือก Notebook/Laptop ในการทำงานแทนก็ได้เช่นกัน
-
ควรใช้ภาษาอังกฤษได้ดี หลักๆจะเป็นเรื่องการอ่านและการเขียนเพราะมีผลต่อการค้นหาข้อมูลและการเขียนโค้ดเป็นภาษาอังกฤษ สำหรับทักษะการฟังจะเป็นทักษะเสริมไว้สำหรับการรับชมวิดีโอคอร์สเรียนจากต่างชาติ หรือทักษะการพูดสำหรับการสื่อสารเพื่อทำงานกับต่างชาติ ดังนั้นใครที่มีเป้าหมายเล็กๆ อาจจะเน้นอ่านและเขียนก็เพียงพอ หลายคนก็ควรจะรู้กันว่าข้อมูลในอินเทอร์เน็ตโดยส่วนใหญ่จะเป็นภาษาอังกฤษ ดังนั้นทักษะนี้กลายเป็นทักษะสำคัญอย่างมากในยุคนี้เลย เพราะเราสื่อสารได้ข้ามโลกในเสี้ยววินาที แต่คนทั่วโลกส่วนใหญ่ก็ใช้ภาษาอังกฤษซะด้วย ดังนั้นไม่ว่าจะสายงานโปรแกรมเมอร์ หรืออาชีพอื่นๆก็ตาม การเป็นภาษาอังกฤษไว้ก่อนอย่างน้อยๆก็จะช่วยให้เราเริ่มต้นการเรียนรู้ผ่าน Google ด้วยตนเองได้กว้างขวางมากกว่า ที่สำคัญคือภาษาโปรแกรมหรือ Framework ที่ช่วยให้เราสร้างโปรแกรมได้ง่ายต่างๆ ล้วนมีเอกสารเป็นภาษาอังกฤษทั้งนั้นด้วยนั้นเอง อย่างไรก็ดีบางคนที่ไม่ค่อยมั่นใจหรือมีโอกาสในเรียนภาษาอังกฤษ เราสามารถใช้ Google Translate ทดแทนได้เช่นกัน เพราะผมก็ทำเช่นนั้นตลอดทั้งชีวิตเลยทีเดียว ไม่ได้เคยเรียนกับครูสอนพิเศษหรือเรียนออนไลน์เพิ่มเติมแต่อย่างใด
-
หลายคนมักจะเข้าใจว่าก่อนจะเรียนเขียนโปรแกรมได้จะต้องเป็นคณิตศาสตร์ที่ดี ผมพอจะบอกได้ว่าตลอดชีวิตที่ผมเคยทำงานมาใช้แค่คณิตศาสตร์พื้นฐานระดับประถมเท่านั้น อย่างการบวกลบคูณหาร เศษส่วน ค่าเฉลี่ย ประมาณค่า แทบไม่เคยใช้ความรู้ระดับม.ปลายเท่าไหร่เลย เช่น ตรีโกณมิติ แคลคูลัส เหล่านี้ผมไม่เคยใช้มาก่อน อย่างไรก็ดีบางครั้งผมก็จะต้องใช้ทักษะทางม.ปลายบ้าง หรือโดยเฉพาะทางตรรกศาสตร์ที่มีการเทียบค่า T, F ต่างๆซึ่งเรียนรู้เองได้ไม่ยากเลย หรืออื่นๆทางสถิติเช่น ความน่าจะเป็นพื้นฐาน หลักการนับพื้นฐาน เซต ซึ่งที่ผมกล่าวมาทั้งหมดเราไม่ได้จำเป็นจะต้องเรียนรู้เรื่องสูตรวิธีคิดก็ได้ เราอาจจะเรียนรู้ว่าเขียนโค้ดแบบไหนเรียกฟังก์ชั่นแบบไหนถึงจะได้ผลลัพธ์ออกมาเพียงเท่านั้น และผมการันตีได้เลยว่าง่ายและสะดวกกว่าการเรียนที่จะต้องเขียนสูตรคณิตบนกระดาษอีกด้วย แต่ก็หากเราเป็นทางคณิตศาสตร์มากๆก็จะได้เปรียบบางสายงาน เพราะสายงานผมเป็น Web Developer ที่คอยพัฒนาเว็บจะได้ใช้คณิตศาสตร์เฉพาะส่วนที่เกี่ยวกับธุรกิจที่ทำเท่านั้น แต่ผมก็อาจจะไม่สามารถทำงานทางสาย Graphic, Simulator หรืออย่าง Data science ได้เลยนั้นเอง เพราะสายงานทางนี้จะต้องการทักษะทางคณิตศาสตร์พอสมควรในการสร้างผลงานออกมา
-
การเชื่อมต่ออินเทอร์เน็ต นี่นับว่าเป็นเรื่องที่ขาดไม่ได้เลย เพราะแหล่งการเรียนรู้ในปัจจุบันบนอินเทอร์เน็ตมีอย่างหลากหลายมากกว่าเปิดอ่านหนังสือแล้ว เพราะการอ่านหนังสือเราจะได้ความรู้เฉพาะทางเดียว แต่การอ่านบนออนไลน์เราจะได้เนื้อหาที่เราต้องการทุกส่วน อย่างไรก็ตามก็ไม่ได้แปลว่าเราจะไม่จำเป็นต้องอ่านหนังสืออีกแล้ว เรายังอ่านได้ เพียงแต่เราจะเริ่มมีทางเลือกอย่างการอ่านผ่าน E-book นั้นเองที่อาจจะซื้อหนังสือออนไลน์สำหรับการพัฒนาโปรแกรมมาอ่านผ่านแท็บเลตที่เรามีแทนได้ ข้อดีของการอ่านหนังสือทั่วไปคือเราไม่จำเป็นที่จะต้องมีอินเทอร์เน็ตเชื่อมต่อคุณภาพที่ดีหรือมีความเร็วสูงขนาดนั้น ส่วนหนึ่งอาจจะมีนานๆทีที่เราจะได้ดาวน์โหลดโปรแกรมเพื่อพัฒนาโปรแกรมบ้าง แต่โดยส่วนใหญ่แล้วขนาดไฟล์โปรแกรมไม่ได้ใหญ่ขนาดนั้นอีกด้วย ซึ่งก็แล้วแต่สายงานกันไป โดยสรุปแล้วในยุคนี้การมีอินเทอร์เน็ตความเร็วสูงยังไงก็ได้เปรียบมากกว่าอยู่ดี
#เลือกภาษาโปรแกรมที่เราอยากจะเรียน
หลังจากที่เราเตรียมตัวมาทั้งหมดแล้ว ก็จะเข้าสู่ช่วงการเรียนรู้ด้วยตนเองต่อ ซึ่งอันที่จริงถ้าเรามีเงินหน่อยเราอาจจะลองหา Bootcamp ในไทยซึ่งเป็นเรื่องที่ผมแนะนำ เพราะเราก็จะได้เข้าไปเรียนกับผู้สอนโดยตรง หรือเรียนผ่านออนไลน์อย่างเรียนกับทาง นครโค้ด ของผมก็ได้เช่นกัน
แต่สำหรับผู้ที่ไม่มีงบในการเรียนรู้ เพราะการเรียนพิเศษกับผู้สอนก็จะมีค่าใช้จ่ายสูงโดยส่วนใหญ่ ดังนั้นเราสามารถที่จะเริ่มต้นจากการค้นหาบน Google ก่อนได้เลย แต่แล้วก็อาจจะถึงปัญหาที่เราไม่แน่ใจว่า จะเลือกภาษาโปรแกรมอะไรดีล่ะ? ผมพอจะแนะนำไว้เรื่องนึงก่อนได้เลยว่าไม่จำเป็นต้องเป็นภาษา C กันแล้วในยุคนี้ หลายๆคนก็อาจจะได้ยินมาว่าเรียน Python ก่อนง่ายดีซึ่งก็เป็นเรื่องจริง แต่บางครั้งงานเราก็ไม่ได้ใช้เพื่อพัฒนาโปรแกรมทางนึงโดยเฉพาะ สุดท้ายอาจจะกลายเป็นว่าเราต้องเลือกเรียนหลายภาษามากเกินไปก็ได้ แล้วไม่ได้ใช้ประโยชน์ของบางภาษาเลยก็ดี ดังนั้นเลือกเรียนให้ตรงกับสายงานที่เราอยากจะทำไปเลย สำหรับผมจะมีตามนี้
- สายงานพัฒนาเว็บไซต์หรือสายงานสร้างโปรแกรมจิปาถะ แนะนำเรียน HTML, CSS, JavaScript, Node.js ตามลำดับ ซึ่งชุดเดียวกับที่ทาง นครโค้ด ได้สอนไว้ จะทำให้เราได้เปรียบที่สร้างแอปโดยทั่วไปได้ดีกว่า ไม่ว่าจะเป็นระบบจอง ระบบคลัง ระบบผู้คน โซเซียลมีเดีย เว็บบล็อก เกม โปรแกรมอำนวยความสะดวก หรือแม้กระทั่งบอทที่สั่งให้ทำงานอัตโนมัติก็ทำได้เช่นกัน โดยในสายงานนี้อาจจะต้องเรียนรู้ที่ใช้เครื่องมือกับภาษาอย่างหลากหลายมากที่สุด แต่ก็เกิดผลดีที่ทำให้เราประโยชน์ครอบคลุมสูงสุดเช่นกัน อย่างไรก็ตามสายงานนี้เราจะใช้ภาษาอื่นๆก็ได้เช่น php, Golang, Python, Java/Kotlin, C# (.NET) ก็สามารถสร้างเว็บอย่างง่ายได้เช่นกัน โดยแต่ละตัวก็จะมีเครื่องมือที่แตกต่างกัน ส่วนตัวผมจะยังแนะนำ Node.js เพราะทางนี้จะช่วยให้เราเรียนภาษาเดียวก็จบในภาษาเดียวได้ทั้ง Frontend และ Backend ลดจำนวนเครื่องมือกับโครงสร้างที่เราต้องเรียนรู้เยอะๆได้ดีกว่าทางภาษาอื่นๆ
- สายงานพัฒนาแอปบนคอมพิวเตอร์สำหรับ Windows โดยเฉพาะ จะต้องเรียน C# เป็นหลักในการสร้างโปรแกรมที่มี User interface รองรับกับ Windows โดยเฉพาะด้วย ในส่วนนี้โดยส่วนใหญ่จะต้องรู้จักกับการใช้ .NET หรือการใช้โปรแกรม Visual Studio IDE (ต่างกับ Visual Studio Code)
- สายงานพัฒนาแอปบนมือถือ จริงๆแล้ว Node.js ก็สามารถทำได้แต่อาจจะมีข้อจำกัดบางด้านโดยการใช้ Capacitor หากต้องการพัฒนาอย่างครอบคลุมมากขึ้นจะแนะนำให้เรียน Flutter ตัวเดียวจบ แต่ถ้าต้องการพัฒนาได้ทุกข้อจำกัดเฉพาะทาง เพื่อประสิทธิภาพที่สูงกว่าเดิม สำหรับ Android จะต้องเลือกเรียน Java/Kotlin ส่วน iOS เรียน Swift แทนเป็นต้น ดังนั้นเราจึงต้องตัดสินใจว่าจะเลือกเรียนตัวเดียวจบ หรือจะต้องเรียนหลายตัวเพื่อหลายๆระบบแต่จะได้ประสิทธิภาพดีกว่านั้นเอง
- สายงานพัฒนาเกม ตรงนี้ทางเลือกมีอย่างหลากหลายมากพอๆกับการพัฒนาเว็บ แต่ถ้าให้ผมเลือกที่ดีที่สุดคือการใช้ C# สำหรับการพัฒนาเกมผ่านทาง Unity แต่ถ้าเราถนัดทาง Node.js ก็จะมี Phaser หรืออื่นๆเป็น Framework ในการพัฒนาเกมมากมาย อย่างไรก็ดีสุดท้ายของสายงานนี้มักจะจบขั้นสูงที่การใช้ภาษา C++ ซึ่งเป็นภาษาที่มีประสิทธิภาพการทำงานสูงสำหรับการพัฒนา Graphic ขึ้นมาต่างๆ ดังนั้นอยู่ที่ทางเลือกว่าเราถ้าอยากจะสร้าง Engine เกมให้ผู้อื่นมาพัฒนาได้หรือปรับตกแต่งรายละเอียดเชิงลึกจะต้องเรียน C++ หากต้องการสร้างและใช้งานทั่วไปก็จะแนะนำเป็น C# แทน เป็นต้น อย่างไรก็ดีในสมัยใหม่ภาษา C++ กำลังจะถูกแทนที่จากการใช้ภาษา Rust แทนมากขึ้น และมีควมเป็นไปได้สูงที่ภาษา C++ กำลังจะเริ่มหมดบทบาทไปเรื่อยๆอย่างช้าๆ
- สายงาน Data Science เกี่ยวกับการพัฒนา Artificial Intelligence (AI) หรือที่เกี่ยวข้อง เพื่อสร้างปัญญาอะไรบางอย่างทำงานและคิดแทนเรา ไม่ว่าจะเป็นเรื่องวาดรูปผ่าน AI หรือประเมินความน่าจะเป็นในอนาคตกับเรื่องราวต่างๆ ทางนี้ส่วนใหญ่จะเป็นต้องภาษา Python อย่างแน่นอน เนื่องจากมีองค์ประกอบเสริม และชุมชนสำหรับทำงานสายทางนี้โดยเฉพาะ และมีการใช้คณิตศาสตร์ได้ดีกว่าอีกด้วย ส่วนหนึ่งในภาษานี้ได้รับความนิยมสูงอย่างมากขึ้นในปัจจุบัน
- สายงานพัฒนาโปรแกรมเพื่อฝังลงในอุปกรณ์ไฟฟ้าหรือสร้าง Operating System (OS) ของตัวเอง ก็รวมไปถึงอุปกรณ์ไฟฟ้าครัวเรือนทั่วไปหรือ IoT หุ่นยนต์ ต่างๆ และกลุ่มของโปรแกรมขั้นสูงที่ต้องการใช้ทรัพยากรอย่างคุ้มค่าและมีประสิทธิภาพก็เช่นกัน ทางนี้ส่วนใหญ่จะใช้ภาษา C++ แต่ในยุคใหม่จะเริ่มกลายเป็นภาษา Rust มากขึ้นและกำลังกลายเป็นมาตรฐานใหม่ ซึ่งส่วนตัวผมก็จะแนะนำให้เลือกภาษา Rust อีกด้วย และอันที่จริง Node.js, C#, Java หรือภาษาโปรแกรมต่างๆก็อาจจะเขียนลง IoT หรืออุปกรณ์ไฟฟ้าขนาดเล็กได้เช่นกัน แต่เหล่านี้มักจะต้องใช้ Runtime เพิ่มเติมที่ทำให้กินทรัพยากรเกินความจำเป็น จึงทำให้ภาษา C++, Rust อาจจะรวมทั้ง Golang อีกด้วย มักจะเป็นภาษาที่เบาและเร็ว จึงเหมาะกับอุปกรณ์ขนาดเล็กอย่างมากนั้นเองเพราะสามารถทำเป็นไฟล์ Binary ขนาดเล็กได้ดีอย่างมาก จึงเป็นภาษาโปรแกรมที่เป็นมาตรฐานการสร้างเกมอีกด้วย เพราะเกมส่วนใหญ่จะต้องเน้นลดการกินทรัพยากรเกินความจำเป็นไปอีกด้วยนั้นเอง
ดังนั้นสายอาชีพของโปรแกรมเมอร์นั้นก็อาจจะเหมือนหมอก็ได้ ที่มีความถนัดเฉพาะทางได้อีกและใช้เครื่องมือที่แตกต่างกันไป มีสิ่งที่เชี่ยวชาญไม่เหมือนกัน คงไม่มีหมอผ่าตัดสัตว์เลี้ยงคนไหนมาผ่าตัดกระดูกคน แต่อาชีพหมอที่คล้ายกับโปรแกรมเมอร์คือเราจะมี Skill Set ที่คล้ายกันในสายงานต่างๆ การเปลี่ยนสายงานจึงไม่ใช่เรื่องยากนัก ดังนั้นหมอคนไหนที่เคยผ่าตัดสัตว์เลี้ยงอยู่แล้ว ไปเรียนรู้อีกหน่อยก็คงผ่าตัดคนทั่วไปได้เหมือนกัน อย่างไรก็ดีผมแนะนำว่าเราควรจะเลือกความเชี่ยวชาญเพียงทางใดทางหนึ่งเท่านั้น อย่างผมเลือกที่จะใช้ Node.js เพื่อสร้างทั้งแอปทั่วไปและเกมไปพร้อมๆกันนั้นเอง เนื่องจากอยากได้ความคุ้มค่าในการเรียนครั้งเดียวแต่ต่อยอดได้มากที่สุด
เพิ่มเติมว่าเพราะภาษาโปรแกรมแต่ละตัว มีชุมชนคนใช้งานที่ถนัดและร่วมมือการพัฒนาที่แตกต่างกันออกไป จึงทำให้ภาพรวมอย่าง Python กลายเป็นภาษาที่ทำงานได้ดีกับทางคณิตศาสตร์มากที่สุด ทั้งๆที่อันที่จริงสมมุติว่าทางภาษา Golang ที่ประสิทธิภาพดีกว่า หากมีผู้คนร่วมกันพัฒนาทางคณิตศาสตร์มากๆก็จะกลายเป็นภาษาที่ใช้เพื่อทำงานทาง AI หรือประมวลผลบางด้านมากที่สุดแทนก็อาจจะมาแทน Python ได้เช่นกันอีกด้วย (ย้ำว่าเป็นเรื่องสมมุติ) ดังนั้นทุกภาษาโปรแกรมล้วนเกี่ยวข้องกับชุมชนผู้พัฒนาโปรแกรมด้วย ว่าภาษาอะไร เครื่องมืออะไร มีผู้คนไปรวมตัวกันอยู่ที่ใดมากกว่ากันนั้นเอง อย่างผมที่เลือกใช้ Node.js เพราะมันมีผู้คนรวมเรื่องการพัฒนาเว็บไปอยู่ด้วยกันมากที่สุด
ถ้าให้ผมเล่าที่ผมเคย (พลาด) เรียนมา ผมเคยเริ่มต้นที่ภาษา C ก่อนตั้งแต่เด็กๆซึ่งเรียนยากมาก จากนั้นไป C#, Java, php ตามลำดับก่อนจะจบที่ JavaScript (Node.js) ปัจจุบันเคยลองเรียนต่อยอดไปที่ Python, Kotlin, Golang มาแล้วแต่ก็ย้อนกลับไปที่หากินกับ Node.js เป็นหลัก ดังนั้นถ้าผมย้อนกลับไปได้ ผมจะศึกษาแค่ภาษา JavaScript ตัวเดียวเลยจะดีกว่านั้นเอง จะได้ไม่เสียเวลา ถ้าคุณเองก็ควรตรวจสอบตัวเองว่าอยากจะไปสายงานที่ท้าทายด้านไหนนั้นเอง
#เส้นทางการเรียนที่แนะนำและแหล่งข้อมูลออนไลน์
สำหรับเส้นทางการเรียนแต่ละอย่างที่แตกต่างกันออกไป จะมีเว็บไซต์ใจดีของ https://roadmap.sh/ ซึ่งเป็นเว็บที่รวบรวมแนวทางการศึกษาตั้งแต่ 0 ถึง 100 ได้ดีอย่างมาก
อย่างไรก็ดีเว็บข้างต้นจะมีการแนะนำเฉพาะทางที่เกี่ยวกับการพัฒนาเว็บซะส่วนใหญ่ หรือยังมีเนื้อหาไม่ครอบคลุมมากนัก ดังนั้นเราเองก็อาจจะต้องไปศึกษาด้วยคำค้นพิเศษ อย่างเช่น เราเริ่มสนใจภาษา C# เพราะอยากสร้างเกมแล้ว เราอาจจะค้นคำว่า “c# tutorial” ผ่านทาง Google นั้นเองเพื่อเริ่มศึกษาด้วยตนเอง หรือหาซื้อคอร์สเรียนออนไลน์อย่างเช่น https://www.udemy.com/ หรือเว็บเรียนออนไลน์ชื่อดังอื่นๆ เป็นต้น
นอกจากนี้แล้วผมยังมีเว็บไซต์และคำค้นหาแนะนำ ที่ผมจะพูดมาทุกๆคอร์สเรียนเลยคือ เราสนใจอะไร เช่น รอบนี้สนใจ Golang แนะนำลองค้นบน Google ด้วยคำว่า “golang awesome” หรือเราสนใจภาษา Rust ค้นด้วยคำว่า “rust awesome” เราจะค้นเจอผลลัพธ์ของ GitHub Repository ซึ่งเป็นที่ที่หลายคนรวบรวมลิงก์ที่น่าสนใจทุกๆหัวข้อของภาษาโปรแกรมนั้นๆเลย โดยจะมี Repository หลักอยู่ที่เว็บ https://github.com/sindresorhus/awesome โดยสามารถเปิดดูตามหัวข้อที่เราสนใจได้อย่างหลากหลายอย่างมาก
#ไม่ค่อยเข้าใจบางคำ บาง Keywords ที่เป็นภาษาอังกฤษ ไม่รู้ความหมาย จะเรียนรู้อย่างไรดี
อันทีจริงตรงนี้หากเราเจอคำที่ไม่คุ้นเคย อย่างเมื่อบรรทัดบนนี้เลยคำว่า Repository หลายๆคนคงไม่เข้าใจล่ะว่ามันคืออะไร ดังนั้นแล้วเราอาจจะศึกษาผ่านออนไลน์ตามปกติก็คือค้นบน Google อย่างคำว่า “what is repository” เป็นต้น ก็ปกติจะแนะนำให้ค้นหาเป็นภาษาอังกฤษแทนภาษาไทยอย่าง “repository คืออะไร” เพราะว่าภาษาไทยเราจะเจอข้อมูลที่น้อยกว่าได้ด้วยหรืออาจจะไม่เจอคำตอบเลยก็ได้นั้นเอง
แต่หากเราอยากอัปสกิลตัวเอง อยากรู้ศัพท์แปลกๆใหม่ๆที่เราอาจจะไม่เคยพบเจอมาก่อน ผมจะแนะนำที่เว็บไซต์ https://www.computerhope.com/jargon.htm ที่เว็บนี้จะรวมคำที่น่าสนใจตามหมวดหมู่หรือแยกตามตัวอักษรได้อย่างละเอียดเลยทีเดียว
#ไม่ว่าจะเรียนภาษาโปรแกรมอะไรก็ตาม อย่าลืมเรียนรู้วิธีการใช้งาน Git ด้วย
จุดนี้เป็นจุดสำคัญอย่างมาก เป็นจุดแข็งที่โปรแกรมเมอร์ต้องมีกันคือใช้งาน Git เป็น เล่าสั้นๆว่า Git นั้นจะเป็นเครื่องมือที่ช่วยให้เราบันทึกและติดตามการเปลี่ยนแปลงของโค้ดแต่ละบรรทัดได้ ทำให้เราสามารถทำงานร่วมกับผู้อื่นได้อีกด้วย เพราะโปรแกรมเมอร์ในหลายๆงานก็ต้องทำงานกันเป็นทีม ต่างคนถ้าพลาดแก้ไขอะไรในบรรทัดเดียวกันก็จะมีเครื่องมือช่วยตรวจสอบได้ว่าอยากเลือกโค้ดของใครกันแน่ แยกสถานะการทำงานของชุดโค้ดต่างๆ รวมทั้งช่วยให้เรารีวิวโค้ดที่จะมาใหม่ได้ดีมากขึ้นก่อนที่จะนำไปใช้งานจริง
นอกจากนี้แล้วเรายังสามารถเชื่อมต่อ Git บนโลกออนไลน์ได้อย่างเช่น เชื่อมต่อผ่าน https://github.com/ เว็บชื่อดังนั้นเอง ที่จะทำให้นอกจากติดตามงานของเราเองได้แล้ว ยังสามารถนำขึ้นบนอินเทอร์เน็ตเก็บไว้ป้องกันโค้ดหาย หรือแชร์ให้ผู้อื่นร่วมโค้ดไปกับเราได้อีกด้วย จึงนับว่าเป็นเครื่องมือนึงที่เราควรใช้งานให้เป็นอย่างมากนั้นเอง
#ทำไมต้องเรียนภาษาหรือเครื่องมือที่หลากหลายอย่างมาก?
น่าจะเป็นคำถามหนึ่งที่เกิดขึ้นได้บ่อย สำหรับคนที่เพิ่งรู้จักการพัฒนาโปรแกรม จริงๆแล้วการพัฒนาโปรแกรมทำค่อนข้างยากกว่าจะสำเร็จได้ โดยคิดซะว่าเป็นรถยนต์หนึ่งคันก็ได้ ที่มีส่วนประกอบต่างๆมากมายจากหลายๆโรงงาน หลายๆผู้ผลิต หลายๆแบบพิมพ์เขียว ทดลองผิดลองถูกมามากมาย ก่อนจะมารวมกันเป็นรถยนต์ที่พร้อมจำหน่ายได้คันนึง การเขียนโปรแกรมก็เลยอาจจะเช่นกัน จึงต้องมีเครื่องมือจำนวนมากๆเพื่อให้รวบรวมเป็นหนึ่งเดียว หรือก็คือรวมให้กลายเป็นโปรแกรมที่เราต้องการจะใช้นั้นเอง
ดังนั้นแล้วเราอยู่ดีๆจะสร้างรถยนต์ทั้งคันด้วยคนเดียว กับการสร้างโปรแกรมทั้งระบบ ก็คงเปรียบเทียบไม่ถูกเสมอไป เพราะการพัฒนาโปรแกรมนั้นเน้นไปที่ใช้เครื่องมือของคนอื่นที่สร้างมาแล้ว และพัฒนาโปรแกรมเราจะใช้อุปกรณ์เพียงแค่คอมพิวเตอร์เครื่องเดียวเท่านั้น ดังนั้นการสร้างโปรแกรมทั้งระบบด้วยคนเดียวจึงเป็นไปได้ ต่างกับสร้างรถยนต์ด้วยเพียงตัวคนเดียวอาจจะลำบากมากกว่านั้นเอง
โดยสรุปแล้ว เราก็ไม่ได้แปลว่าจะต้องรู้จักกับทุกภาษาโปรแกรมเลย เราควรตัดสินใจตามคำแนะนำที่ผมได้บอกไว้ เพื่อเลือกเรียนตามที่เราต้องการจริงๆและเชี่ยวชาญเฉพาะภาษา และเฉพาะเครื่องมือ ที่จำเป็นต้องใช้ก็เพียงพอแล้ว
AI กำลังจะทำให้โปรแกรมเมอร์อย่างพวกเราตกงานหรือไม่? บทความถัดไป ➡️
ความแตกต่างระหว่าง Software Engineer, Programmer, Developer และ Coder คืออะไร?
เกี่ยวกับผู้เขียน
นคร สินผดุง (Nakorn Sinpadung)
โปรแกรมเมอร์มืออาชีพ
- ปัจจุบันเป็นติวเตอร์ออนไลน์ สอนพัฒนาโปรแกรม
- ปัจจุบันเป็นพนักงานประจำระดับ Senior Programmer ที่ CareerVisa Digital
- มีประสบการณ์ทำงานจริงในบริษัทต่างๆมากกว่า 4 ปี
- มีประสบการณ์สอนผ่านออนไลน์นานกว่า 6 ปี