เริ่มต้นเขียนโปรแกรม

เริ่มต้นเขียนโปรแกรม … ยังไง ?

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

บทความนี้มีมูลค่า 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 หรือติดต่อในเพจได้เลยนะครับ ผมรออ่านอยู่

Loading

เป็นโปรแกรมเมอร์ที่ตามหาคุณค่าของชีวิตและความฝันในวัยเด็ก ชอบเล่นเกม เรียนรู้ทุกอย่าง ชอบเจอคนใหม่ๆ งานสังคมทุกชนิด ออกกำลังกายในวันว่าง อ่านหนังสือ มีเว็บรีวิวหนังสือด้วย www.readraide.in.th