เริ่มต้นเขียนโปรแกรม เริ่มยังไงดี ? (2019–20 ยุคที่ AI มาแรง)

Mr.P L
mmp-li
Published in
4 min readSep 19, 2018

ปี 2018–19 ปีที่การเขียนโปรแกรมกำลังบูม ปี 2019–20 ปีที่ AI กำลังมาแรง …แล้วคุณเริ่มเขียนโปรแกรมหรือยัง ?

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

เขาจ่ายค่าไม่ได้สปอนเซอร์….

โปรแกรมมิ่งสำคัญอย่างไร ? สำคัญกับใคร ?

สำคัญอย่างไร ? โปรแกรมมิ่งไม่ได้สำคัญแค่กับสายคอมฯเท่านั้น แต่มันยังสามารถเพิ่มทักษะด้านการคิด อัลกอริทึม ให้แก่ผู้ที่เรียนได้อีกด้วย สามารถฝึกทักษะการคิดแบบขั้นตอน/กระบวนการได้ ทำให้เวลาเราจะทำอะไรต้องมีการคิด วางแผน และแก้ไขปัญหาเฉพาะได้

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

ก็อย่างที่น้ำหนึ่งว่าเหละครับ …..

สกิลที่จำเป็นสำหรับโปรแกรมเมอร์

สกิลที่จำเป็นในที่นี้ไม่ได้หมายถึงภาษาคอมที่ใช้ เฟรมเวิร์คที่ใช้ แต่เป็นสกิลพื้นฐานที่ควรจะมี หากต้องการจะอยู่ในสายโปรแกรมเมอร์ โดยประกอบไปด้วย

  • ภาษาอังกฤษ การอ่าน/การเขียน

เพราะภาษาคอมที่เราเขียนมันคือภาษาอังกฤษไงละ ถ้าเราไม่สามารถเข้าใจ Error ที่เกิดขึ้นได้ คำสั่งที่ใช้ หรืออ่าน Document ของภาษานั้นๆ (เพราะเป็นภาษาอังกฤษ) แน่นอนว่าลำบากแน่นอน หรือแม้แต่การเขียนโปรแกรม เราก็ต้องตั้งชื่อตัวแปรให้เหมาะสมกับสิ่งที่จะใช้ด้วย การตั้งชื่อตัวแปร i , j , k ในการทำงานจริงๆ บางทีคนที่มาอ่านโค้ดต่อจากเราก็จะงงๆหน่อยนะ ว่ามันจะสื่อว่าใช้งานอะไร (คอมเม้นก็ช่วยได้ในเรื่องนี้) เพราะฉนั้นถ้าเรามีทักษะภาษาอังกฤษก็สามารถตั้งชื่อตัวแปรได้ถูกต้องมากขึ้นอีกด้วย

  • อัลกอริทึม

สุดยอดสกิลที่จำเป็นต้องมี เคยมีอาจารย์ท่านหนึ่งได้บอกกับผมว่า

“syntax การเขียนโค้ดเนี่ยเรียนในห้องได้ แต่อัลกอริทึมเนี่ย คุณต้องฝึกมันบ่อยๆใช้มันประจำถึงจะเก่งได้”

มันคือคีย์เวิร์ดสำคัญที่ทำให้คุณสามารถแก้ไขปัญหาในงานต่างๆได้ เพราะเมื่อเกิดปัญหาขึ้น คุณจะค่อยๆคิดหาทางแก้ปัญหาที่เกิดขึ้นทีละขั้นตอน จนงานนั้นแก้ไขสำเร็จ โดยทางแก้ปัญหาอาจจะมีได้หลายๆทางแล้วแต่ “อัลกอริทึม” ของแต่ละคน ยิ่งอัลกอริทึมของคุณยิ่งดี คุณก็จะแก้ไขปัญหาที่ซับซ้อนหรือยุ่งยากได้ง่ายขึ้น

  • สกิลการเรียนรู้นอกห้องเรียน

อันนี้มาจากบทความอีกอันที่ผมเคยเขียน บทความอันนี้

ถ้าเกิดคิดว่าสายโปรแกรมเหมือนสายอื่นๆ ที่อาศัยเรียนในห้องเรียนอย่างเดียว วันๆอ่านแต่หนังสือ นั่งดูคนอื่นอธิบายทั้งวันโดยไม่ลงมือทำ คุณคิดผิด! เพราะสายนี้จำเป็นจะต้องเรียนรู้นอกห้องเป็นจำนวนมาก ไม่ว่าจะลงคอร์สเสริม เรียนใน youtube หาโปรเจ็คทำเล่นๆ เพื่อพัฒนาทักษะอย่างไม่มีสิ้นสุด

edx ก็เป็นอีกเว็บที่ Certificate ได้รับการยอมรับ เหมาะสำหรับสายโปรแกรมเมอร์อย่างมาก
  • ประสบการณ์

ประสบการณ์ก็เป็นอีกสิ่งที่จำเป็นสำหรับสายเขียนโปรแกรม ยกตัวอย่างเช่นเขียนโปรแกรมจนเทพมีประสบการณ์เยอะ พอเห็นโจทย์ข้อนี้ แก้ไขได้แบบสบายๆ หรือเข้าใจการทำงานทุกๆอย่างของภาษา Python หรือจะเป็นเวลาเจอปัญหาในงานก็สามารถแก้ได้แบบง่ายๆ เพราะมีประสบการณ์มาก่อน

  • พูดรู้เรื่องและเข้าสังคม

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

ช่วงธันวาปี 61 ผมเจอรถชน คนที่ชนผมก็คือโปรแกรมเมอร์จ้า….โลกกลมไหมละ….

เริ่มต้นเขียนโปรแกรม เริ่มจากภาษาไหนดี ?

เว็บที่ผมใช้อ้างอิงคือ IEEE โดยที่คุณสามารถคลิกที่ภาษาคอมพิวเตอร์เพื่อดูว่าภาษาไหนเป็นที่นิยม แต่ว่ามันจะอ้างอิงจากต่างประเทศเป็นหลักนะครับ

ภาษางู (Python) มันมาแรงจริงๆ

ที่จริงแล้วหลายๆคนจะบอกว่าภาษาไหนไม่สำคัญ ขอแค่ฝึกอัลกอหรือภาษาอังกฤษแล้วเริ่มเขียนภาษาอะไรเลยก็ได้ ซึ่งมันก็จริงแต่ถ้าใครยังไม่รู้จะเริ่มยังไงจริงๆอยากจะ Follow ตามประสบการณ์คนอื่นก็ตามนี้เลย !

สำหรับผม

ผมเริ่มจาก vb ช่วง ม.3 จากนั้นไป c++ ยาวๆเลยจนมหาลัยช่วงปี 2 ก็ทำงานเขียนเว็บด้วย C# แล้วก็มาทำด้าน Machine Learning ใช้ python โดยแต่ละครั้งที่ผมเปลี่ยนภาษาคอมฯ ผมไม่ต้องไปเรียนพื้นฐานอะไรมาก เพราะเรียนพื้นฐานจาก C++ มาแน่นดีแล้ว จากนั้นก็ไปเรียน syntax ของภาษาอื่นได้เลย ทำให้ต่อยอดภาษาอื่นได้เร็วมาก

โดยจากความรู้สึกผม

ถ้าเริ่มฝึกเขียนโปรแกรมมือใหม่ภาษา python จะง่ายสุด แต่คนที่เขียน python เป็นภาษาแรก อาจจะงงถ้าไปจับพวกภาษา C (ประกาศ Type ฟังก์ชั่น, Type ของตัวแปร) เลยจะแนะนำให้เป็น C,C++ เป็นภาษาแรกเพราะได้ฝึกอัลกอริทึมเยอะสุด (เล่นท่ายากไม่ได้) แถมพวก C,C++ มันเป็นระเบียบกว่าเพราะแยก main , function ประกาศประเภทตัวแปรไว้ชัดเจนกว่าและมี pointer นรกด้วย

From BNK40EGG

ซึ่งภาษาที่เราเลือกตอนแรก ควรจะเป็นภาษาที่ฝึกอัลกอริทึม แก้ปัญหา (แต่ไม่ควรมีปัญหามากไป) เพราะเมื่อเราได้ภาษาแรกแล้ว การจะต่อยอดเป็นภาษาต่อไปก็ไม่ใช่เรื่องยากเลย และเมื่อเรียนพื้นฐานเสร็จแล้ว ควรเรียนขั้นแอดว้านด้วยนะ เช่น พวก Sort(การจัดเรียงข้อมูล) , Tree(การจัดเรียงแบบต้นไม้), Search(การค้นหาข้อมูล) ซึ่งตัวอย่างที่ยกมาก็จะอยู่ในวิชาเรียนที่ชื่อว่า “Data Structure” ซึ่งแม้ในปัจจุบันจะมีอะไรที่สำเร็จรูปแล้ว แต่ก็ควรมีพื้นฐานในเรื่องพวกนี้ด้วยเพราะบางครั้งเราสามารถนำความรู้พวกนี้มาประยุกต์ใช้ได้กับงานของเรา

แล้วคุณมีจุดหมายปลายทางแล้วหรือยัง ?

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

ถ้าเกิดคุณมีจุดมุ่งหมายแล้วว่าอยากจะทำอะไรก็จงทำตามความฝันไปเลย ให้เลือกภาษาที่จะก่อให้เกิดประโยชน์ที่สุด

ยกตัวอย่างเช่น

ฉันอยากเป็น web dev ขั้นเทพที่สามารถเขียนเว็บ facebook ได้ด้วยตัวเอง ! : ให้เขียนภาษาที่ใช้กับ web จริงๆจัง เช่น PHP , Ruby , C# , Java , JS

ฉันอยากจะเขียน AI ที่ฉลาดที่สุดในโลก ฉลาดยิ่งกว่า alpha go ที่มันอยู่ในปัจจุบัน ! : งั้นก็เขียนภาษาที่มี tool ด้าน AI รองรับเยอะๆ เช่น Python , R, C, matlab

ฉันอยากทำแอพมือถือ อยากทำแอพเหมือน Line, What app หรือสร้างเกมมือถือ : งั้นก็เขียนภาษาที่ใช้กับ mobile app ที่ได้รับความนิยมโล้ด เช่น Java, Kotlin ,swift , object-C

ฉันอยากเทพสุดๆ ทำได้ทุกอย่างบนโลกของโปรแกรมเมอร์ ! : งั้นก็ฝึก algorithm ให้เก่งๆก็พอแล้วละ ภาษาไม่เกี่ยงอยู่แล้วละ :)

ห้ามหยุดศึกษาหาความรู้ใหม่ๆ เพราะเทคโนโลยีมันออกมาใหม่ในทุกๆวัน

แล้วฉันจะเริ่มต้นเรียนจากที่ไหนดี ?

ตรงนี้ขอแยกเป็น 2 กรณี

  1. คุณเก่งภาษาอังกฤษ
  2. คุณไม่เก่งภาษาอังกฤษ

ที่แยกเพราะว่าถ้าคุณไม่แม่นภาษาอังกฤษ การที่คุณฝืนไปเรียนคอร์สที่เป็นภาษาอังกฤษคุณก็จะไม่เข้าใจแบบ 100% อยู่ดี คุณก็จะมีแต่คำถามในหัว แต่เดียวนี้คอร์สภาษาไทยก็ไม่ได้แย่แล้ว ไม่ต้องกังวลไป

โดยจะขอเริ่มที่ภาษาอังกฤษก่อน

ชอบเล่นเกม และยังชอบเขียนโค้ด ขอเชิญที่

ชอบเรียนหนักๆและได้ใบ Certificate

ภาษาอังกฤษก็พอได้ ภาษาไทยก็ดี ได้ใบ Certificate อีกด้วย

และสำหรับภาษาไทย ขอแนะนำเลยครับ

แฮ่

หยอกกกกกกกกกกกกกกกกกกกกกกกกกกกกก

ผมจะชอบดูวิดีโอใน youtube เช่น BorntoDev

หรือจะเป็น kong ruksiam

และอาจารย์จากจุฬา (ซึ่งจุฬาเองก็ลงวิดีโอใน youtube เยอะมากลองไปดูได้มีตั้งแต่พื้นฐาน -> Machine Learning)

แล้วเด็กๆละ จะเขียนโปรแกรมไหวเหรอ ?

ในปัจจุบันมีสิ่งที่เรียกว่า Code-Block โดยใช้เจ้า micro:bit รายละเอียด คลิกที่นี้

เหมาะอย่างยิ่งสำหรับมือใหม่ที่อยากเริ่มเขียนโปรแกรม หรือว่าจะเป็นเด็กที่สนใจในการเขียนโปรแกรม การเขียนโค้ดแบบ code block แบบนี้เหละ จะช่วยฝึกด้านอัลกอริทึมของเราอย่างมาก และเหมาะอย่างยิ่งสำหรับคนที่อยากสร้างหุ่นยนต์ขนาดเล็ก เช่น หุ่นยนต์วิ่งตามเส้น หุ่นยนต์บังคับมือ รถบังคับ ฯลฯ

แล้วถ้าฉันเขียนโปรแกรมแล้วติดบัค(Bug) จะทำยังไงดี ?

หลายๆคนที่เริ่มเขียนก็จะมีสิ่งที่เรียกว่า “บัค(Bug)” เกิดขึ้นกับทุกคนที่เขียนโปรแกรมโดยบัคนั้นจะมาในหลายรูปแบบมากมาย ทั้ง Syntax error (ลืมปีกกา , ลืม ;) หรือแม้แต่ อัลกอริทึมผิดก็นับเป็นบัคอีกแบบหนึ่ง วิธีแก้ปัญหาที่ง่ายที่สุดคือ

  1. ลองอ่าน Error ที่เกิดขึ้นดูก่อน แล้วดูว่ามันบอกอะไรเรา ขาดปีกกา ขาด ; ขาดวงเล็บหรือเปล่าเอ๋ย
  2. เอาปัญหาหรือ Error ที่เกิดขึ้นไปเสิร์จใน google , stack overflow เลยครับ เพราะเชื่อว่าต้องมีคนเคยเกิดปัญหาแบบนี้แน่นอน
  3. แนะนำให้มาถามในกลุ่มโปรแกรมเมอร์ถ้าติดขัดจริงๆ เชื่อว่ามีหลายๆคนพร้อมจะช่วย ขอแค่อย่าเอาการบ้านมาขอเฉลยก็พอ

หรืออาจจะใช้สิ่งที่เรียกว่า stack overflow…..

stack overflow คือ ??

อีกหนึ่งสุดยอดเว็บไซต์ของโปรแกรมเมอร์ยุคนี้ ซึ่งเว็บนี้ใช้สำหรับถาม-ตอบปัญหาสำหรับโปรแกรมเมอร์ ไม่ว่าจะสายงานไหน จะ AI จะ Web App หรือปัญหาบ้านๆ

ซึ่งในปัจจุบันเราอยู่ในยุคที่ opensource มีเยอะแยะ library มีให้เลือกใช้มากมาย และ บัค ! อีกมหาศาล นั้นคือคุณต้องแก้บัคในงานที่คุณทำแน่นอนแต่ว่า…. คุณจะถามวิธีแก้ปัญหาจากไหนละ ? Stack overflow ยังไงละ คือคำตอบของคุณ (รองลงมาก็กลุ่ม สมาคมโปรแกรมเมอร์แห่งประเทศไทย แต่อย่าถามบ่อย ถ้าคุณไม่ใช่ ผญ … แซวนะครับ….) แต่เจ้า Stack overflow เนี่ยมันดันเป็นภาษาอังกฤษทั้งหมด แต่ถ้าใครอ่านอังกฤษไม่ออกก็ลำบากหน่อย แต่มันก็มีวิธีลัด คือเลื่อนไปดูที่เขาแก้บัคให้เลย (ก็อปโค้ดมาวางไม่ดีนะ อย่าทำบ่อยๆ ไม่เกิดการเรียนรู้อะไรเลย)

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

From BNK40EGG

และที่สำคัญ การบ้านคือสุดยอดการอัพเลเวล

สิ่งที่คนเริ่มเขียนใหม่ๆมองข้ามคือการบ้าน มันคือสิ่งที่จะประเมินตัวเอง ว่าตัวเองเข้าใจสิ่งที่เรียนแค่ไหน และมันยังบ่งบอกอีกว่า เรามีความตั้งใจมากแค่ไหนด้วย เพราะฉนั้นอย่าเอาแต่ลอกโค้ดคนอื่นละ ฝึกทำเองบ้างนะ ! (แต่บางทีการบ้านเยอะไปก็ไม่ดีนะ เดียวร่างกายจะพังก่อน)

ทริคเล็กๆน้อยๆในการอัพสกิลการเขียนโค้ดจากเลเวล 0–100 จากประสบการณ์ส่วนตัว

  • อยู่ใกล้ๆกับคนที่เก่งๆ

เมื่อคุณอยู่ในสังคมที่มีแต่คนเขียนโปรแกรมเก่งๆ คุณจะได้เรียนรู้ทริคต่างๆจากคนเก่งๆ ลองพูดคุยเรื่องโปรแกรมกับคนเก่งๆ พยายามเข้าสังคม (งาน Hackathon,การแข่งเขียนโค้ดต่างๆ) แลกเปลี่ยนความคิดเห็นกับคนที่เก่งๆบ้าง คุณก็จะเก่งขึ้นเองแบบอัตโนมัติ แบบทันตาเห็นเลยเหละ

  • อ่านงานวิจัย

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

  • เรียนรู้นอกห้องเรียน

เป็นอีกหนึ่งวิธีคือการศึกษาส่วนที่ตัวเองไม่เข้า หรือ สนใจ ก็จะทำให้คุณมีสกิลเพิ่มขึ้น โดยผมแนะนำให้ศึกษาจากหลายๆช่องทาง ทั้งการอ่าน ดู เขียนเอง มันจะทำให้คุณมีวิธีการเขียนโปรแกรมที่หลากหลาย และอัลกอริทึมมากขึ้น (บทความ : การเรียนนอกห้องvsการเรียนรู้ในห้อง)

  • สอนคนอื่น

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

คืนกำไรสู่สังคมบ้างนะครับ แหะๆ
  • ทำงานจริงๆ / หาโปรเจ็คทำ

และเมื่อคุณมี 3 ข้อด้านบนแล้ว คุณคิดว่าพร้อมแล้ว ลองรับงานมาทำดูครับ มันคือเครื่องพิสูจน์ว่าคุณทำได้หรือไม่ หรือถ้ายังไม่แน่ใจในตัวเอง ผมแนะนำให้ทำโปรเจ็คเล่นๆ แต่ให้มันใช้งานได้จริง มันจะเป็น Portfolio ของคุณในการสมัครทำงาน (แนะนำให้ทำแบบจริงจังเลย ไม่ควรทำโปรเจ็คแบบเล่นๆขำๆ)

บทสรุปของบทความนี้

การเขียนโปรแกรมไม่ใช่เรื่องยาก เพียงแค่คุณให้ความสนใจกับมัน มันก็จะกลายเป็นเรื่องง่ายไปโดยทันที ทำไมผมถึงบอกแบบนี้ นั้นเพราะผมพึ่งไปเจอเด็ก ป.5 เขียน Arduino ใช้งาน protocol MQTT เชื่อมต่อกับ Node-RED API มันยิ่งทำให้มั่นใจ ว่าการเขียนโปรแกรมไม่ใช่เรื่องยากแน่นอน อย่าไปยึดติดกับภาษาที่ใช้ อย่าไปสนใจเทรนอะไรมาก หากคุณพึ่งเริ่มเขียนโปรแกรม อยากให้เริ่มที่อัลกอริทึมก่อน เพราะมันคือสิ่งที่สำคัญที่สุด

What the bug(WTB) !!!!

--

--

Mr.P L
mmp-li
Editor for

Lifestyle of Programmer & IoT (Node-RED|Blynk) & Data Science (ML,DL,NLP) and Whatever I want to do | cat can coding too | Ph.D. -> VISTEC -> IST