เริ่มต้นเขียนโปรแกรม เริ่มยังไงดี ? (2019–20 ยุคที่ AI มาแรง)
ปี 2018–19 ปีที่การเขียนโปรแกรมกำลังบูม ปี 2019–20 ปีที่ AI กำลังมาแรง …แล้วคุณเริ่มเขียนโปรแกรมหรือยัง ?
วันนี้จะมาพูดถึงเรื่องการเริ่มต้นเขียนโปรแกรมในปี 2019–20 เหมาะสำหรับผู้เริ่มต้นสนใจการเขียนโค้ด ในบล็อกนี้จะพูดถึงสกิลที่จำเป็นจริงๆและทักษะการเรียนเขียนโปรแกรม โดยหลายๆคนอาจจะมองข้ามมันไป โดยผมเชื่อว่าพื้นฐานพวกนี้จะทำให้คุณสามารถเรียนรู้/เพิ่มสกิลการโค้ดได้รวดเร็วแน่นอน
โปรแกรมมิ่งสำคัญอย่างไร ? สำคัญกับใคร ?
สำคัญอย่างไร ? โปรแกรมมิ่งไม่ได้สำคัญแค่กับสายคอมฯเท่านั้น แต่มันยังสามารถเพิ่มทักษะด้านการคิด อัลกอริทึม ให้แก่ผู้ที่เรียนได้อีกด้วย สามารถฝึกทักษะการคิดแบบขั้นตอน/กระบวนการได้ ทำให้เวลาเราจะทำอะไรต้องมีการคิด วางแผน และแก้ไขปัญหาเฉพาะได้
สำคัญกับใคร ? คนที่ต้องการพัฒนาตนเอง หรือ ไม่อยากให้ตัวเองตกยุค เพราะในยุคปัจจุบันการเขียนโค้ดก็เริ่มเข้ามามีบทบาทในชีวิตประจำวันมากขึ้นเรื่อยๆ AI ก็กำลังมา ไม่ว่าจะคนอายุเท่าไรก็สามารถเขียนโปรแกรมได้ แม้ว่าคุณจะไม่ได้เอาการเขียนโค้ดไปใช้ในสายอาชีพคุณ แต่มันก็จะฝึกทักษะกระบวนการคิดอย่างเป็นขั้นตอนให้คุณอย่างแน่นอน
สกิลที่จำเป็นสำหรับโปรแกรมเมอร์
สกิลที่จำเป็นในที่นี้ไม่ได้หมายถึงภาษาคอมที่ใช้ เฟรมเวิร์คที่ใช้ แต่เป็นสกิลพื้นฐานที่ควรจะมี หากต้องการจะอยู่ในสายโปรแกรมเมอร์ โดยประกอบไปด้วย
- ภาษาอังกฤษ การอ่าน/การเขียน
เพราะภาษาคอมที่เราเขียนมันคือภาษาอังกฤษไงละ ถ้าเราไม่สามารถเข้าใจ Error ที่เกิดขึ้นได้ คำสั่งที่ใช้ หรืออ่าน Document ของภาษานั้นๆ (เพราะเป็นภาษาอังกฤษ) แน่นอนว่าลำบากแน่นอน หรือแม้แต่การเขียนโปรแกรม เราก็ต้องตั้งชื่อตัวแปรให้เหมาะสมกับสิ่งที่จะใช้ด้วย การตั้งชื่อตัวแปร i , j , k ในการทำงานจริงๆ บางทีคนที่มาอ่านโค้ดต่อจากเราก็จะงงๆหน่อยนะ ว่ามันจะสื่อว่าใช้งานอะไร (คอมเม้นก็ช่วยได้ในเรื่องนี้) เพราะฉนั้นถ้าเรามีทักษะภาษาอังกฤษก็สามารถตั้งชื่อตัวแปรได้ถูกต้องมากขึ้นอีกด้วย
- อัลกอริทึม
สุดยอดสกิลที่จำเป็นต้องมี เคยมีอาจารย์ท่านหนึ่งได้บอกกับผมว่า
“syntax การเขียนโค้ดเนี่ยเรียนในห้องได้ แต่อัลกอริทึมเนี่ย คุณต้องฝึกมันบ่อยๆใช้มันประจำถึงจะเก่งได้”
มันคือคีย์เวิร์ดสำคัญที่ทำให้คุณสามารถแก้ไขปัญหาในงานต่างๆได้ เพราะเมื่อเกิดปัญหาขึ้น คุณจะค่อยๆคิดหาทางแก้ปัญหาที่เกิดขึ้นทีละขั้นตอน จนงานนั้นแก้ไขสำเร็จ โดยทางแก้ปัญหาอาจจะมีได้หลายๆทางแล้วแต่ “อัลกอริทึม” ของแต่ละคน ยิ่งอัลกอริทึมของคุณยิ่งดี คุณก็จะแก้ไขปัญหาที่ซับซ้อนหรือยุ่งยากได้ง่ายขึ้น
- สกิลการเรียนรู้นอกห้องเรียน
อันนี้มาจากบทความอีกอันที่ผมเคยเขียน บทความอันนี้
ถ้าเกิดคิดว่าสายโปรแกรมเหมือนสายอื่นๆ ที่อาศัยเรียนในห้องเรียนอย่างเดียว วันๆอ่านแต่หนังสือ นั่งดูคนอื่นอธิบายทั้งวันโดยไม่ลงมือทำ คุณคิดผิด! เพราะสายนี้จำเป็นจะต้องเรียนรู้นอกห้องเป็นจำนวนมาก ไม่ว่าจะลงคอร์สเสริม เรียนใน youtube หาโปรเจ็คทำเล่นๆ เพื่อพัฒนาทักษะอย่างไม่มีสิ้นสุด
- ประสบการณ์
ประสบการณ์ก็เป็นอีกสิ่งที่จำเป็นสำหรับสายเขียนโปรแกรม ยกตัวอย่างเช่นเขียนโปรแกรมจนเทพมีประสบการณ์เยอะ พอเห็นโจทย์ข้อนี้ แก้ไขได้แบบสบายๆ หรือเข้าใจการทำงานทุกๆอย่างของภาษา Python หรือจะเป็นเวลาเจอปัญหาในงานก็สามารถแก้ได้แบบง่ายๆ เพราะมีประสบการณ์มาก่อน
- พูดรู้เรื่องและเข้าสังคม
ที่จริงข้อนี้เป็นข้อที่ตลกร้ายของโปรแกรมเมอร์มากคือเรามักจะคุยกับคนอื่นไม่รู้เรื่อง แม้แต่โปรแกรมเมอร์ด้วยกันเอง ลองฝึกพูดฝึกอธิบายให้มันเข้าใจได้ง่ายๆบ้าง เขาจะได้ไม่หาว่าเราบ้า (เรื่องจริงที่แสนเจ็บปวด)และที่สำคัญเข้าสังคมบ้าง มีงาน meeting ที่เกี่ยวกับสายงานเราก็ไปงานบ้างเพื่อรู้จักคนอื่นในสายงานเราบ้าง สายงานเราโลกมันกลม
ช่วงธันวาปี 61 ผมเจอรถชน คนที่ชนผมก็คือโปรแกรมเมอร์จ้า….โลกกลมไหมละ….
เริ่มต้นเขียนโปรแกรม เริ่มจากภาษาไหนดี ?
เว็บที่ผมใช้อ้างอิงคือ IEEE โดยที่คุณสามารถคลิกที่ภาษาคอมพิวเตอร์เพื่อดูว่าภาษาไหนเป็นที่นิยม แต่ว่ามันจะอ้างอิงจากต่างประเทศเป็นหลักนะครับ
ที่จริงแล้วหลายๆคนจะบอกว่าภาษาไหนไม่สำคัญ ขอแค่ฝึกอัลกอหรือภาษาอังกฤษแล้วเริ่มเขียนภาษาอะไรเลยก็ได้ ซึ่งมันก็จริงแต่ถ้าใครยังไม่รู้จะเริ่มยังไงจริงๆอยากจะ Follow ตามประสบการณ์คนอื่นก็ตามนี้เลย !
สำหรับผม
ผมเริ่มจาก vb ช่วง ม.3 จากนั้นไป c++ ยาวๆเลยจนมหาลัยช่วงปี 2 ก็ทำงานเขียนเว็บด้วย C# แล้วก็มาทำด้าน Machine Learning ใช้ python โดยแต่ละครั้งที่ผมเปลี่ยนภาษาคอมฯ ผมไม่ต้องไปเรียนพื้นฐานอะไรมาก เพราะเรียนพื้นฐานจาก C++ มาแน่นดีแล้ว จากนั้นก็ไปเรียน syntax ของภาษาอื่นได้เลย ทำให้ต่อยอดภาษาอื่นได้เร็วมาก
โดยจากความรู้สึกผม
ถ้าเริ่มฝึกเขียนโปรแกรมมือใหม่ภาษา python จะง่ายสุด แต่คนที่เขียน python เป็นภาษาแรก อาจจะงงถ้าไปจับพวกภาษา C (ประกาศ Type ฟังก์ชั่น, Type ของตัวแปร) เลยจะแนะนำให้เป็น C,C++ เป็นภาษาแรกเพราะได้ฝึกอัลกอริทึมเยอะสุด (เล่นท่ายากไม่ได้) แถมพวก C,C++ มันเป็นระเบียบกว่าเพราะแยก main , function ประกาศประเภทตัวแปรไว้ชัดเจนกว่าและมี pointer นรกด้วย
ซึ่งภาษาที่เราเลือกตอนแรก ควรจะเป็นภาษาที่ฝึกอัลกอริทึม แก้ปัญหา (แต่ไม่ควรมีปัญหามากไป) เพราะเมื่อเราได้ภาษาแรกแล้ว การจะต่อยอดเป็นภาษาต่อไปก็ไม่ใช่เรื่องยากเลย และเมื่อเรียนพื้นฐานเสร็จแล้ว ควรเรียนขั้นแอดว้านด้วยนะ เช่น พวก 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 กรณี
- คุณเก่งภาษาอังกฤษ
- คุณไม่เก่งภาษาอังกฤษ
ที่แยกเพราะว่าถ้าคุณไม่แม่นภาษาอังกฤษ การที่คุณฝืนไปเรียนคอร์สที่เป็นภาษาอังกฤษคุณก็จะไม่เข้าใจแบบ 100% อยู่ดี คุณก็จะมีแต่คำถามในหัว แต่เดียวนี้คอร์สภาษาไทยก็ไม่ได้แย่แล้ว ไม่ต้องกังวลไป
โดยจะขอเริ่มที่ภาษาอังกฤษก่อน
ชอบเล่นเกม และยังชอบเขียนโค้ด ขอเชิญที่
ชอบเรียนหนักๆและได้ใบ Certificate
ภาษาอังกฤษก็พอได้ ภาษาไทยก็ดี ได้ใบ Certificate อีกด้วย
และสำหรับภาษาไทย ขอแนะนำเลยครับ
หยอกกกกกกกกกกกกกกกกกกกกกกกกกกกกก
ผมจะชอบดูวิดีโอใน youtube เช่น BorntoDev
หรือจะเป็น kong ruksiam
และอาจารย์จากจุฬา (ซึ่งจุฬาเองก็ลงวิดีโอใน youtube เยอะมากลองไปดูได้มีตั้งแต่พื้นฐาน -> Machine Learning)
แล้วเด็กๆละ จะเขียนโปรแกรมไหวเหรอ ?
ในปัจจุบันมีสิ่งที่เรียกว่า Code-Block โดยใช้เจ้า micro:bit รายละเอียด คลิกที่นี้
เหมาะอย่างยิ่งสำหรับมือใหม่ที่อยากเริ่มเขียนโปรแกรม หรือว่าจะเป็นเด็กที่สนใจในการเขียนโปรแกรม การเขียนโค้ดแบบ code block แบบนี้เหละ จะช่วยฝึกด้านอัลกอริทึมของเราอย่างมาก และเหมาะอย่างยิ่งสำหรับคนที่อยากสร้างหุ่นยนต์ขนาดเล็ก เช่น หุ่นยนต์วิ่งตามเส้น หุ่นยนต์บังคับมือ รถบังคับ ฯลฯ
แล้วถ้าฉันเขียนโปรแกรมแล้วติดบัค(Bug) จะทำยังไงดี ?
หลายๆคนที่เริ่มเขียนก็จะมีสิ่งที่เรียกว่า “บัค(Bug)” เกิดขึ้นกับทุกคนที่เขียนโปรแกรมโดยบัคนั้นจะมาในหลายรูปแบบมากมาย ทั้ง Syntax error (ลืมปีกกา , ลืม ;) หรือแม้แต่ อัลกอริทึมผิดก็นับเป็นบัคอีกแบบหนึ่ง วิธีแก้ปัญหาที่ง่ายที่สุดคือ
- ลองอ่าน Error ที่เกิดขึ้นดูก่อน แล้วดูว่ามันบอกอะไรเรา ขาดปีกกา ขาด ; ขาดวงเล็บหรือเปล่าเอ๋ย
- เอาปัญหาหรือ Error ที่เกิดขึ้นไปเสิร์จใน google , stack overflow เลยครับ เพราะเชื่อว่าต้องมีคนเคยเกิดปัญหาแบบนี้แน่นอน
- แนะนำให้มาถามในกลุ่มโปรแกรมเมอร์ถ้าติดขัดจริงๆ เชื่อว่ามีหลายๆคนพร้อมจะช่วย ขอแค่อย่าเอาการบ้านมาขอเฉลยก็พอ
หรืออาจจะใช้สิ่งที่เรียกว่า stack overflow…..
stack overflow คือ ??
อีกหนึ่งสุดยอดเว็บไซต์ของโปรแกรมเมอร์ยุคนี้ ซึ่งเว็บนี้ใช้สำหรับถาม-ตอบปัญหาสำหรับโปรแกรมเมอร์ ไม่ว่าจะสายงานไหน จะ AI จะ Web App หรือปัญหาบ้านๆ
ซึ่งในปัจจุบันเราอยู่ในยุคที่ opensource มีเยอะแยะ library มีให้เลือกใช้มากมาย และ บัค ! อีกมหาศาล นั้นคือคุณต้องแก้บัคในงานที่คุณทำแน่นอนแต่ว่า…. คุณจะถามวิธีแก้ปัญหาจากไหนละ ? Stack overflow ยังไงละ คือคำตอบของคุณ (รองลงมาก็กลุ่ม สมาคมโปรแกรมเมอร์แห่งประเทศไทย แต่อย่าถามบ่อย ถ้าคุณไม่ใช่ ผญ … แซวนะครับ….) แต่เจ้า Stack overflow เนี่ยมันดันเป็นภาษาอังกฤษทั้งหมด แต่ถ้าใครอ่านอังกฤษไม่ออกก็ลำบากหน่อย แต่มันก็มีวิธีลัด คือเลื่อนไปดูที่เขาแก้บัคให้เลย (ก็อปโค้ดมาวางไม่ดีนะ อย่าทำบ่อยๆ ไม่เกิดการเรียนรู้อะไรเลย)
แต่ข้อเสียคือ เราอาจจะติดเป็นนิสัย นั้นคือเขียนไปสักแปป ติดบัค แล้วก็ไปหาคำตอบเลย บางทีเราอาจจะยังไม่ลองคิดดูก่อนว่าเกิดจากอะไร ก็ให้ระวังในจุดนี้ด้วย
และที่สำคัญ การบ้านคือสุดยอดการอัพเลเวล
สิ่งที่คนเริ่มเขียนใหม่ๆมองข้ามคือการบ้าน มันคือสิ่งที่จะประเมินตัวเอง ว่าตัวเองเข้าใจสิ่งที่เรียนแค่ไหน และมันยังบ่งบอกอีกว่า เรามีความตั้งใจมากแค่ไหนด้วย เพราะฉนั้นอย่าเอาแต่ลอกโค้ดคนอื่นละ ฝึกทำเองบ้างนะ ! (แต่บางทีการบ้านเยอะไปก็ไม่ดีนะ เดียวร่างกายจะพังก่อน)
ทริคเล็กๆน้อยๆในการอัพสกิลการเขียนโค้ดจากเลเวล 0–100 จากประสบการณ์ส่วนตัว
- อยู่ใกล้ๆกับคนที่เก่งๆ
เมื่อคุณอยู่ในสังคมที่มีแต่คนเขียนโปรแกรมเก่งๆ คุณจะได้เรียนรู้ทริคต่างๆจากคนเก่งๆ ลองพูดคุยเรื่องโปรแกรมกับคนเก่งๆ พยายามเข้าสังคม (งาน Hackathon,การแข่งเขียนโค้ดต่างๆ) แลกเปลี่ยนความคิดเห็นกับคนที่เก่งๆบ้าง คุณก็จะเก่งขึ้นเองแบบอัตโนมัติ แบบทันตาเห็นเลยเหละ
- อ่านงานวิจัย
ที่จริงข้อนี้อาจจะมองว่าเหมาะกับคนเรียนโทหรือเอกมากกว่า แต่ที่จริงแล้วมันเหมาะกับทุกวัย เพราะเทคโนโลยีใหม่ๆส่วนมากจะออกมาในรูปแบบ paper และที่สำคัญ งานวิจัยในยุคนี้ชอบเอาเทคโนโลยีที่มีในปัจจุบันเอามาใช้แบบเกิดประโยชน์สูงสุดลองทำตามคนอื่นบ้างก็ไม่เสียหาย
- เรียนรู้นอกห้องเรียน
เป็นอีกหนึ่งวิธีคือการศึกษาส่วนที่ตัวเองไม่เข้า หรือ สนใจ ก็จะทำให้คุณมีสกิลเพิ่มขึ้น โดยผมแนะนำให้ศึกษาจากหลายๆช่องทาง ทั้งการอ่าน ดู เขียนเอง มันจะทำให้คุณมีวิธีการเขียนโปรแกรมที่หลากหลาย และอัลกอริทึมมากขึ้น (บทความ : การเรียนนอกห้องvsการเรียนรู้ในห้อง)
- สอนคนอื่น
เมื่อคุณเริ่มคล่องจริงๆ แนะนำให้ลองสอนคนอื่นดูครับ มันจะเป็นการทบทวนตัวคุณและยังพิสูจน์อีกด้วย ว่าคุณเข้าใจจริงๆหรือไม่
- ทำงานจริงๆ / หาโปรเจ็คทำ
และเมื่อคุณมี 3 ข้อด้านบนแล้ว คุณคิดว่าพร้อมแล้ว ลองรับงานมาทำดูครับ มันคือเครื่องพิสูจน์ว่าคุณทำได้หรือไม่ หรือถ้ายังไม่แน่ใจในตัวเอง ผมแนะนำให้ทำโปรเจ็คเล่นๆ แต่ให้มันใช้งานได้จริง มันจะเป็น Portfolio ของคุณในการสมัครทำงาน (แนะนำให้ทำแบบจริงจังเลย ไม่ควรทำโปรเจ็คแบบเล่นๆขำๆ)
บทสรุปของบทความนี้
การเขียนโปรแกรมไม่ใช่เรื่องยาก เพียงแค่คุณให้ความสนใจกับมัน มันก็จะกลายเป็นเรื่องง่ายไปโดยทันที ทำไมผมถึงบอกแบบนี้ นั้นเพราะผมพึ่งไปเจอเด็ก ป.5 เขียน Arduino ใช้งาน protocol MQTT เชื่อมต่อกับ Node-RED API มันยิ่งทำให้มั่นใจ ว่าการเขียนโปรแกรมไม่ใช่เรื่องยากแน่นอน อย่าไปยึดติดกับภาษาที่ใช้ อย่าไปสนใจเทรนอะไรมาก หากคุณพึ่งเริ่มเขียนโปรแกรม อยากให้เริ่มที่อัลกอริทึมก่อน เพราะมันคือสิ่งที่สำคัญที่สุด