การเขียนโปรแกรมในปัจจุบันเรียกได้ว่ากำลังจะเป็นสกิลพื้นฐานของเกือบทุกอาชีพบนโลกนี้ และค่าตอบแทนของสายงานนี้เป็นที่ดึงดูดหลายคนให้ทำการเปลี่ยนสายงาน แต่ปัญหาเริ่มแรกของหลายๆคนคือ จะเริ่มเขียนโปรแกรมยังไง ? บทความนี้มีคำตอบครับ
บทความนี้มีมูลค่า 99 บาทแต่ผมให้คุณอ่านฟรี คุณสามารถช่วยเหลือโดยไม่ต้องจ่ายเงินผมได้ด้วยการสมัครรับข่าวสารที่ด้านล่างของบทความ นั่นจะช่วยเหลือผมได้มาก ผมสัญญาว่าจะส่งบทความที่เป็นประโยชน์แก่คุณทุกครั้งที่ส่งไปให้ครับ
ภาษาอังกฤษ … โครตสำคัญ !!!!
สิ่งสำคัญที่สุดไม่ใช่ว่าคุณเขียนโปรแกรมเก่ง แต่สำคัญที่สุดคือ คุณสามารถหาคำตอบเองได้ โดยพึ่งพาคนอื่นให้น้อยที่สุดถ้าเป็นไปได้ เนื่องจากเกือบทุกภาษานั้นความรู้จะเป็นภาษาอังกฤษอย่างน้อยๆ คุณต้องแก้ไขเรื่องผิดพลาดเล็กๆน้อยๆเป็นบ้าง พวก Error ก็ดี หรือ การหาคำตอบที่ดีกว่า การทำความเข้าใจ code ที่สำคัญคือ ความรู้พื้นฐานของการเขียนโปรแกรมเป็นภาษาอังกฤษหมด ถ้าคุณยังไม่ได้ภาษาไม่เป็นไร ค่อยๆฝึกเอา ซื้อหนังสือ หรือ เปิดดิชั่นนารีบ่อยๆ จะทำให้เราจำได้ ครับ อันนี้จากประสบการณ์ส่วนตัว
หลายครั้งที่ผมเห็นน้องๆ มือใหม่ถามในกลุ่มแบบ Error มันบอกอยู่ตรงหน้าแล้วแค่แปลออกนิดหน่อยก็สามารถแก้ไขได้เอง หรือ copy ใส่ google translate ผมคิดว่าคำแปลมันไม่แย่ขนาดนั้นหรอก มันพอจะเข้าใจได้บ้าง ความรู้ใหม่ๆ นั้นเรียกว่าแทบไม่มีทางที่จะเป็นภาษาไทย เพราะฉะนั้นอยู่ที่คุณแล้วจะปรับตัวหรือรอให้ทุกคนปรับตัวไปก่อนแล้วคุณค่อยปรับก็ได้ครับ เลือกทางไหนก็ได้ ไม่มีผิดหรือถูกเอาตามที่คุณสบายใจครับ
ส่วนตัวผมตอนเรียนจบก็ไม่ได้ภาษาอังกฤษเหมือนกันแต่โชคดีเคยได้ทำงานกับเจ้านายฝรั่ง บอกเลยว่าตอนนั้นเขารับผมทำงานทั้งๆที่ผมพูดได้แค่ good morning teacher, how are you today ?, I’m fine thank you and you ? แต่เนื่องจากผมรู้แล้วว่าต้องใช้ทำงานและพูดคุยเรื่องทั่วๆไปด้วยก็ซื้อหนังสือเริ่มต้นตั้งแต่ ABC มาเลยแล้วก็ไล่อ่าน ปัจจุบันเอาจริงๆผมก็ยังไม่คล่องหรอกแต่พอฟังและแปลได้ ค้นหาคำตอบใน internet เป็นผมว่าเท่านี้ก็เพียงพอสำหรับมือใหม่แล้ว
เลือกว่าจะเขียนโปรแกรมที่ “ระบบ” ไหน
อย่างแรกเลยก่อนจะถามว่าจะเขียนโปรแกรมภาษาอะไร ? ให้เลือกว่าจะเขียนโปรแกรมระบบอะไร เพราะภาษาจะไปผูกกับระบบที่เราจะเขียนโปรแกรมยกตัวอย่างเช่น ถ้าคุณต้องการเขียนโปรแกรม ที่ทำงานในระบบ window คุณอาจจะต้องเขียน C# VB หรือคุณต้องการเขียน website ก็จะมีภาษาที่ทำงานในระบบนั้นเช่น nodejs, php, react ถ้าคุณต้องทำงานสาย Data Science คุณก็ต้องเรียนรู้เกี่ยวกับ SQL ถ้าจะเขียนเกมก็ต้องไปเรียนพวก C#, Javascript และใช้ Unity
จะเห็นจากตัวอย่างที่ผมยกมา ภาษาจะผูกกับระบบที่คุณอยากจะเขียนครับ เพราะฉะนั้นถ้าคุณจะเริ่มเขียนโปรแกรมอย่าลืม เลือกระบบที่คุณต้องการจะเขียนครับ
เริ่มต้นค้นหา ภาษา ที่เหมาะกับระบบนั้น
หลังจากเราเลือกระบบที่เราต้องการแล้ว ถ้าหากว่าระบบนั้นไม่ได้ผูกติดกับภาษา เช่น ถ้าเราเขียน IOS เราอาจจะต้องเรียนได้แค่ swift อย่างเดียว หรือ android อาจจะเป็น kotlin ถ้าหากมีมากกว่า 1 ภาษาที่เหมาะกับระบบนั้นให้เราลองค้นหาคำตอบในเน็ตก่อนด้วย keyword ทำนองว่า “getting started [ตามด้วยระบบหรือภาษา] development” เท่าที่ผมลองๆก็ได้คำตอบที่ค่อนข้างดีเลย บางบทความนั้นบอกแม้กระทั่งว่า เส้นทาง การทำงานด้านภาษานั้นๆมีอะไรบ้าง
Fundamental หรือเรื่องพื้นฐาน
อยากแนะนำตรงจุดนี้ว่า เวลาที่คุณเริ่มเรียนภาษาอะไรแล้ว อยากให้อ่านเรื่องพื้นฐานของภาษานั้นๆให้เข้าใจจริงๆเพราะการต่อยอด หรือการประยุกต์ในอนาคตนั้นจะต่อยอดจากความรู้พื้นฐานของภาษานั้นๆครับ พูดไปอาจจะไม่เชื่อ ผมเห็นหลายคน เรียนรู้มาแบบครูพักลักจำ หรือ รู้แค่ครึ่งๆกลางๆ ทำให้การทำงานสุดท้ายก็ต้องจบลงที่มาอ่านพื้นฐานใหม่ ไม่ก็ต้องชนเพดานการพัฒนาตัวเอง ไม่สามารถพัฒนาต่ออะไรได้ เหตุผลเพราะว่า แก้โจทย์แบบไม่ได้เข้าใจพื้นฐานอย่างแน่จริง
บางภาษาอาจจะทำงานแบบบนลงล่าง จากซ้ายไปขวา บางภาษาทำงานพร้อมกันหมด แต่อยู่ที่ว่าใครทำงานเสร็จก่อนแล้วโยน event ต่อ เอาแค่นี้ก็แตกต่างกันคนละเรื่องเลยนะครับ ผมจะยกตัวอย่าง ซักหนึ่งเรื่องให้คุณฟังดู มีคนมาถามในกลุ่มว่า อยากแก้ไข ค่าบางอย่าง เช่น อยากแก้ไข ราคา ให้ไปอยู่ใน รายการ สินค้า
ถ้าคุณเข้าใจสิ่งที่ระบบนั้นๆทำคุณก็แค่ไปแก้ไขต้นทาง ซึ่งเป็นวิธีที่ถูกต้อง แต่คนถามนั้นไม่ได้มีความรู้ตรงจุดนี้ จึงพยายามไปแก้ไขด้วย ภาษาอื่นมาบิดการทำงาน ให้ราคาไปอยู่ตรงที่ต้องการ ถามว่าทำได้ไหม ? ทำได้ครับ แต่สมมติในอนาคตมีน้องในทีมต้องมาแก้ไข ซึ่งเขาอาจจะเข้าในเรื่องพื้นฐานของระบบมาแก้ต่อจากคนนั้น แล้วหาไม่เจอ สุดท้ายก็จะเสียเวลาทั้งคู่ ทั้งคนที่แก้ไขอย่างผิดวิธีต้องมาบอกว่าสิ่งที่ตัวเองทำ ทำยังไง อีก
หาวิธีเรียนที่เหมาะสมกับตัวเอง
ข้อนี้สำคัญเหมือนกัน หลายๆคนนั้นมีวิธีการเรียนรู้แตกต่างกันครับ บางคนชอบลงมือทำถึงจะเข้าใจและเชื่อมโยงหลายๆอย่างได้ บางคนแค่ฟังก็เข้าใจ บางคนต้องจด บางคนชอบดู VDO สิ่งที่ผมจะแนะนำให้ได้คือ ทุกอย่างที่คุณเรียนจากไม่ว่าแหล่งไหนก็ตามให้คุณ จด ใช่ครับ การจดคือการสั่งให้สมองทบทวนสิ่งที่เรียนรู้และพยายามทำความเข้าใจเก็บเข้าความทรงจำหลัก เวลาเรียนรู้สิ่งใหม่ๆครับ
อีกอย่างที่อยากแนะนำคือ อย่าเรียนรู้แค่คอร์สเดียวแล้วหยุด หลายคนเรียนแค่คอร์สเดียวแล้ว หยุดอยากให้พอเรียนเสร็จลองทำ project จริงๆดูซักอันแล้วคุณจะเข้าใจ flow การสร้าง การเขียนโปรแกรมว่าตั้งแต่เริ่มแรกที่ยังไม่ได้ลงมือมันต้องทำอะไร บ้างบางครั้งในบทเรียนเขา set up ทุกอย่างให้คุณพร้อมแล้ว แต่เวลาจริงคุณต้องเริ่มทำเองหมดมันจะไปช้ามาก ย้ำนะครับช้ามาก !!! แต่คุณจะทำได้เร็วขึ้นเรื่อยๆจากการ ทำซ้ำ ทำผิด ทำพลาด น่าเสียดายที่มนุษย์เราถูกออกแบบมาให้จดจำแต่สิ่งที่ผิดพลาด หรือ ประสบการณ์เลวร้าย เพราะฉะนั้นการทำลองทำด้วยตัวเองแล้วผิดพลาดนั้น เป็นสิ่งที่ดี และเป็นสิ่งที่ต้องเรียนรู้อยู่แล้ว ถ้าหากมีการแนะนำจากคนในสายงานนั้นๆคุณก็รับฟังแล้วลองทำดูครับ
โชคดีของคุณผู้อ่านที่ในปัจจุบันนั้นมีการเรียนรู้ที่ ฟรี ค่อนข้างเยอะ ทั้งใน youtube เองหรือเว็บต่างๆ แต่ผมจะจำแนกสองแบบแล้วกันว่า ฟรี กับ เสียเงินมันมีข้อดี – ข้อเสียอย่างไรครับ
เรียนแบบฟรี
ของฟรีใครก็ชอบผมขอพูดถึงก่อนแบบเสียเงินแล้วกันครับ ข้อดีอย่างแรกคือ ฟรี แน่นอนล่ะ แต่คอร์สฟรีใน internet จะมีข้อเสียประมาณนี้เท่าที่ผมนึกออกนะครับ
- ไม่มีการเรียงลำดับการเรียนรู้ที่ดี
- เนื้อหาเก่าหรือบางครั้งไม่ได้รับการ update
- ไม่มีคนให้ถามเวลาติดปัญหา ( แก้ไขด้วยการหากลุ่มใน Facebook หรือ Community อื่นๆแล้วถามได้ )
- เสียเวลาในการหาคำตอบเองในบางครั้ง ซึ่งบางทีอาจจะนานเป็นวันเลย
- ไม่มี Certification หรือการรับรอง ( แต่อันนี้แล้วแต่ที่เรียนกับความดัง แต่ส่วนใหญ่คอร์สฟรีจะไม่มีให้ครับ )
- ส่วนใหญ่จะไม่มีแบบ interaction กับผู้เรียน มักจะเป็นการอ่าน หรือ ฟังอย่างเดียว
แนะนำที่เรียนฟรีได้ไหม ? ได้ครับเอาเท่าที่ผมพอรู้นะครับ แต่ส่วนใหญ่จะเป็นสายด้าน Web Development นะครับเพราะว่าผมเป็น Full Stack Web Developer ส่วนใหญ่ผมเลยจะดูงานด้านนี้ครับถ้าคุณอยากเขียนด้านอื่น หรือ คนที่เข้ามาอ่านแล้วมีแนะนำสามารถ comment ไว้ได้ในท้ายบทความนะครับ หรือ ติดต่อมาทางเพจก็ได้ครับว่าอยากให้เพิ่มเติมตรงไหนนะครับ
- Borntodev มีทั้งแบบฟรีและเสียเงิน มีสอนหลายภาษาครับ
- PatiphanPhengpao คนนี้จะสอนด้านเว็บเยอะนะครับ ผมดูเป็นบางครั้งจะเป็นพวกเทคนิคต่างๆ ไม่แน่ใจว่าสอนภาษาอื่นไหม ส่วนใหญ่ผมเห็นเป็นด้านทำเว็บครับ
- Daydev สอนหลายภาษาแต่เป็นบทความไม่ได้สอนตั้งแต่เริ่มต้นนะครับจะเป็นแนวๆรวมเทคนิคมาเล่าจากประสบการณ์จริง
- W3shools ฟรีและมีลำดับสอนที่ดี เรียกได้ว่าเป็นครูของหลายๆคน มีสอนหลายภาษาด้วยครับ
เรียนแบบเสียเงิน
มาลองดูการเรียนแบบเสียเงินบ้างครับ ว่ามีข้อดี – ข้อเสีย อย่างไร
ข้อดี
- มีการเรียงลำดับว่าผู้เรียนต้องรู้อะไรก่อนหรือหลัง
- สามารถถามตอบกับผู้สอนได้
- เนื้อหาจะ update ค่อนข้างบ่อย และใช้ได้จริง
- มีการใช้สื่อการสอนที่ทำให้เห็นภาพง่าย บางครั้งมีให้ผู้เรียนสามารถ interactive กับบทเรียนนั้นได้ ไม่ใช่นั่งฟังอย่างเดียว
ข้อเสีย
- บางครั้งเสียเงินแพงแต่สอนไม่ดีก็มี
- ไม่ครอบคลุมเนื้อหาที่อยากเรียน หรือ บางครั้งมีการแบ่ง คอร์สแยก ไปอีก
- บางครั้งไม่มีการอธิบายในบางจุดและเข้าใจว่าผู้เรียนรู้อยู่แล้ว
- Certification แบบไร้ประโยชน์ ต่อให้มีก็ไม่ได้มีความน่าเชื่อถือแต่อย่างใด
ส่วนใหญ่เดี๋ยวนี้คอร์ส online จะถูกมากๆนะครับ ผมมักจะเรียนที่ udemy แต่เอาจริงคือมีเยอะมากๆ ของไทยก็เยอะเช่นกันแต่ราคาจะแตกต่างกันประมาณ 5 เท่าครับ เช่น คอร์สภาษาอังกฤษ 300 แต่ของไทยจะอยู่ 1,500 – 2,000 แต่ก็ดีตรงที่ว่าคุณไม่ต้องแปล และได้เนื้อหาไม่ผิดเพี้ยนแน่ๆ เรามาดูแบบที่เสียเงินกันหน่อยครับ
- udemy เว็บนี้ถูกและดีแต่ก่อนเรียนแนะนำให้ดูคลิป introduction เพื่อให้รู้ว่าสำเนียงเขาเราฟังออกหรือไม่ ขัดใจหรือเปล่า ฟังดูอาจจะเป็นเรื่องตลกแต่ถ้าสำเนียงไม่น่าฟังมันขัดใจจริงๆนะ ต่อให้มีซับให้อ่านก็เถอะ และอีกอย่างดูรีวิว กับ comment ที่ให้ดาวน้อยๆดูว่ามี จำนวนเยอะไหมครับ ดูปีด้วยว่าเนื้อหาครอบคลุมเยอะน้อยแค่ไหนครับ
- skooldio ภาษาไทยของคนไทย มีส่วนลดเยอะ แต่คอร์สจะแยกย่อยเยอะเช่นกัน เลือกเรียนดีๆ ผมก็มีเรียนในเว็บนี้เยอะเหมือนกันครับ
- futureskill ภาษาไทยเช่นกันมีคอร์สให้เลือกเรียนเยอะมากมาย ไม่ใช่แค่สายเทคโนโลยีครับ
- Borntodev อันนี้ก็มีเรียนแบบเสียเงินนะครับ แต่ผมไม่เคยเรียน
การตั้งคำถาม
เรื่องนี้ก็เป็นเรื่องหนึ่งที่อยากจะบอกน้องๆ หรือคนรอบตัวเกี่ยวกับการตั้งคำถามในการถามชุมชน ( community ) ต่างๆ โดยเวลาที่เราไปถามสิ่งแรกที่ควรจะทำก่อนจะถามเลยคือ พยายามแก้ไขด้วยตัวเองก่อน ไม่ว่าจะเจอ error หรือเชื่อมต่ออะไร ไม่ได้ซักอย่าง ลองหาใน google ทั้งไทยและภาษาอังกฤษดูก่อนครับ ถ้าไม่เจอคำตอบผมแนะนำให้ลองอ่านบทความนี้ดูครับ
https://oxygenyoyo.com/2011/12/03/manners-answer-ask-weboard-or-person/
อีกบทความหนึ่งที่อยากให้ลองอ่านดูจาก Blog พี่เนย
คำตอบที่ใช่เกิดจากคำถามที่ถูกต้อง “ศาสตร์ของการถาม” ถามอย่างไรให้ได้คำตอบ?
คิดว่าถ้าอ่านทั้งสองบทความนี้น่าจะได้คำตอบที่ชัดขึ้นแล้วนะครับ
ทำ Project ส่วนตัว
หลังจากที่เรียนภาษาแล้วต่อมาคุณจะเริ่มเห็นภาพรวมแล้วว่ามันทำงานยังไง มันเชื่อมต่อกับฐานข้อมูลยังไง ต่อมาให้คุณลองทำซัก 1 project ดูครับ โปรแกรมอะไรก็ได้ ที่คุณจะได้ใช้สิ่งที่คุณเรียนมา ส่วนใหญ่แล้วมันจะได้ใช้เกือบทุกอย่างที่เรียนรู้มานั่นแหละครับ ลองทำเพื่อให้ ติดปัญหา และเรียนรู้วิธีการแก้มัน อย่างที่บอกหลายคนเรียนอย่างเดียวไม่ได้ลงมือทำจริงมันแตกต่างกันมากนะครับ ถ้าคิดว่าพอจะทำได้แล้ว ลองรับงานแก้ไขเล็กๆน้อยๆดูครับ หรือ รับทำโปรแกรมเล็กๆ ที่ขอบเขตงานมันไม่ใหญ่มากดูครับ หากนึกไม่ออกว่าจะทำยังไง ถ้าเป็นน้องๆ ที่กำลังเรียนหรือกำลังจะฝึกงานอยู่ผมแนะนำบทความนี้ครับ
https://oxygenyoyo.com/2019/10/06/prepare-get-programmer-job/
หรือถ้าหากคิดว่าอยากลองรับงานเอง แนะนำบทความนี้ครับ
https://oxygenyoyo.com/2021/09/03/when-you-ready-get-job/
หลังจากนี้ทำอะไรต่อ ?
ถ้าลองทำทั้งหมดนี้แล้ว คุณน่าจะเข้าใจภาพรวมของการเขียนโปรแกรมด้วยภาษานั้นๆแล้ว ต่อไปก็คือ พัฒนาสกิลต่อครับ โดยคุณอาจจะค้นหาคำว่า “career path [ระบบหรือภาษาที่คุณถนัด]” ก็น่าจะได้เส้นทางแล้วว่าคุณควรจะพัฒนาอะไรต่อ หรือสามารถต่อยอดทางไหนได้ ไม่ก็ดูจากแหล่งหางานก็ได้ครับ ว่าเวลาเขาต้องการภาษาที่คุณเขียนเขาต้องการสกิลอะไรอีกบ้าง ผมยกตัวอย่างด้านเว็บให้คุณดูนะครับว่าผมค้นหาแล้วเจออะไร
https://www.thinkful.com/blog/web-development-career-path/
เวลาคุณลองค้นหาเกี่ยวกับงานคุณจะเจอคำใหม่ๆ ถ้าคุณไม่รู้จักจะได้พัฒนาตัวเองให้เหมาะกับตำแหน่งนั้นๆ อีกด้วยครับผมขอตัดตัวอย่างมาให้อ่านกันนะครับ ไม่อยากตัดรูปมาจะอ่านลำบาก
Highlights:
- 3+ years of experience in web development.
- Experience with MVC Design Pattern
- Great understanding and passion for modern website development. In touch and experienced with responsive site development.
- Excellent skills in HTML5, CSS3, JS (jQuery, ES5), Bootstrap
- Backend development skills in PHP and JSON. Direct experience or ability to work with our existing website framework (PHP Codeigniter).
- Good written and spoken English (team communication via email, Slack, Trello, team meetings)
- Ability to work on Linux and Windows servers, basic maintenance skills
Skills and Responsibilities:
- Implement website designs into our PHP website
- Working knowledge of graphics software such as Figma, Adobe Suite, etc.
- Understanding of browser compatibility; mobile and web standards
- Experience with Git Version Control software
- Understanding and experience of working with REST APIs
- A good understanding of web development techniques for SEO
- Work independently and with other developers & design team members to manage a high quality website. Participate at all stages of the website development lifecycle, bringing ideas to improve quality and design.
- Typical day-to-day responsibilities include new website feature development, publishing content to the site, testing, and fixing bugs.
สังเกตุว่ามีคำว่า “MVC Design pattern” , “Experience with Git Version Control software” สมมติว่าคุณไม่รู้สิ่งเหล่านี้ คุณก็สามารถต่อยอดได้แล้วว่าเรื่องที่ต้องเรียนรู้เพิ่มเติมคืออะไรบ้าง คุณพอจะมองเห็นภาพมากขึ้นใช่ไหมครับ ? ผมคิดว่าเท่านี้น่าจะเพียงพอให้คุณสามารถก้าวเดินในการเริ่มต้น เขียนโปรแกรม ได้แล้วถ้ามีอะไรเพิ่มเติมแนะนำ สามารถบอกผมได้ผ่าน comment หรือติดต่อในเพจได้เลยนะครับ ผมรออ่านอยู่