Skip to content
This page is a draft. It may be incomplete or contain inaccuracies. If you have any comment, please feel free to leave some feedback!

การเรียนรู้การเขียนโปรแกรม ​

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

การเขียนโปรแกรมต้องอาศัยการฝึกฝนอย่างมาก ​

  • การเขียนโปรแกรมจนเชี่ยวชาญ ต้องอาศัยการฝึกฝนเยอะมาก ไม่ต่างจากการหัดเล่นดนตรีหรือวาดรูปครับ

  • หากคุณมีความขยันหมั่นเพียรในการศึกษาและฝึกฝน ก็จะช่วยให้คุณเขียนโปรแกรมชำนาญขึ้นได้อย่างรวดเร็วครับ

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

หาเรื่องที่หลงไหล เพื่อให้ฝึกฝนได้โดยไม่เบื่อ ​

  • ผมขอยกตัวอย่างสมัยที่ผมเรียนเปียโนครับ

  • สมัยที่ผมเด็กๆ ทุกสัปดาห์หลังเลิกเรียน ผมจะไปเรียนเปียโนครับ

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

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

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

  • ผมก็ทำแบบนี้มาเรื่อยๆ จนปัจจุบันผมสามารถเล่นคีย์บอร์ดได้ โดยการฟังเพลงแล้วเล่นตามครับ (หรือที่เรียกว่า “play by ear”) เวลาใครอยากให้ผมเล่นเพลงไหนที่ผมรู้จักอยู่แล้ว ถ้าไม่ใช่เพลงที่ซับซ้อนหรือเล่นยาก ผมก็สามารถเล่นแบบเบสิคๆ ได้ครับ โดยไม่ต้องใช้โน้ตเพลงหรือคอร์ดครับ และบางเพลงก็ไม่ต้องซ้อมมาก่อนด้วย

  • แต่เอาเข้าจริงๆ สกิลการเล่นเปียโนของผม ยังถือว่าห่วยกว่านักดนตรีมืออาชีพหลายอยู่ขั้นเลยครับ ผมเคยคุยกับมืออาชีพ หลายๆ คน แล้วก็พบความจริงว่า ความชอบอย่างเดียวมันไม่พอ ทุกคนต่างก็ต้องทุ่มเท หาเวลามาซ้อมไล่สเกลแต่ละคีย์ ศึกษาทฤษฎีดนตรี รวมถึงซ้อมเทคนิคต่างๆ ซ้ำแล้วซ้ำอีกจนชำนาญ[1] ผมก็ยังไม่ได้อินพอที่จะไปฝึกขนาดนั้น

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

แรงบันดาลใจสำหรับการเขียนโค้ด ​

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

  • สำหรับบางคน จุดเริ่มต้นของการเขียนโปรแกรมมาจากการเล่นเกมครับ บางคนก็เล่นเกมแบบ Minecraft พอเล่นมาถึงจุดนึงก็เริ่มอยาก Mod เกมครับ แรกๆ ก็อาจจะเอา Mod ที่คนอื่นทำไว้มาติดตั้ง แล้วจนถึงจุดนึงก็อยากทำ Mod เอง แล้วก็เริ่มศึกษา หรือบางคนก็ถึงขั้นอยากสร้างเกมเป็นของตัวเอง แล้วก็เริ่มศึกษาจากตรงนั้นครับ

    • สำหรับใครที่อยากสร้างเกม มีคอร์สฟรีชื่อ Code Your First Game ของ Chris DeLeon ก็ไปลองศึกษากันได้ครับ

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

    • ซึ่งถ้าคุณชอบเรื่อง Creative Coding แล้วล่ะก็ คอร์ส Computer Programming ของ Khan Academy เริ่มจากการสอนภาษา JavaScript เหมือนกัน แต่ในคอร์สนั้น ใช้วิธี สอนให้วาดรูป และสร้างภาพเคลื่อนไหวด้วยโค้ดครับ

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

    • โปรแกรมที่มีประโยชน์ ไม่จำเป็นต้องเป็นโปรแกรมที่เขียนยากหรือซับซ้อนเสมอไปครับ อย่างอันนี้เป็นโปรแกรมนาฬิกานับถอยหลังที่ผมเคยทำไว้ใช้เอง เน้นตัวอักษรใหญ่ๆ ใช้งานง่ายๆ โปรแกรมนี้เขียนโค้ด JavaScript แค่ประมาณ 40 บรรทัดเองครับ

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

  • หรือแม้แต่เรื่องที่ไม่เกี่ยวกับโปรแกรมมิ่งหรือเทคโนโลยีเลยก็ตาม บางทีก็สามารถเอามาใช้เป็นโจทย์สำหรับเขียนโปรแกรมได้ครับ สมัยก่อนผมเคยเรียนภาษาญี่ปุ่น ต้องจำตัวอักษร Hiragana และ Katakana จำนวน 92 ตัว แรกๆ ผมฝึกโดยการคัดตัวอักษร แต่มันน่าเบื่อมากๆ ผมเลยลองเขียนโปรแกรมมาช่วยติวตัวเอง ซึ่งก็ช่วยได้เยอะครับ

Build your own projects! ​

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

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

คอมมูนิตี้ ​

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

  • ในเฟสบุ๊ค มีกลุ่ม สมาคมโปรแกรมเมอร์ไทย ที่มีคนมาถาม-ตอบกันเป็นประจำ มีคำถามทุกรูปแบบ ตั้งแต่คำถามเชิงเทคนิค เรื่องการเรียน จนถึงเรื่องการทำงานและเส้นทางอาชีพครับ

  • และวงการเทคโนโลยีในไทย มีอีเวนต์แบ่งปันความรู้จัดอยู่เรื่อยๆ ครับ หลายๆ อีเวนต์สามารถมาร่วมงานได้ฟรี โดยเฉพาะงาน meetup ที่เป็นงานให้คนที่สนใจเรื่องเดียวกันได้มาเจอกันครับ สามารถลองเข้าไปดูอีเวนต์ต่างๆ ที่ Thai Tech Calendar ได้

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

การเรียนการเขียนโปรแกรมในระดับที่ง่ายขึ้น ​

  • เรื่องสุดท้ายที่อยากจะพูดถึงในบทนี้ คือ เราจะสามารถเรียนรู้ได้ดี ถ้าเกิดเนื้อหาในบทเรียน อยู่ใกล้ๆ กับระดับความเข้าใจของเราครับ

  • และการจะเขียนโปรแกรมเนี่ย ต้องใช้หลายทักษะพร้อมๆ กัน

    • อย่างแรกคือเราต้องคิดและออกแบบชุดคำสั่ง ที่จะทำให้คอมพิวเตอร์สามารถแก้ปัญหาได้อย่างถูกต้อง — ซึ่งก็ต้องใช้ทักษะในการคิดเป็นขั้นเป็นตอน หรือที่เขาเรียกกันว่า “การคิดเชิงคำนวณ” หรือภาษาอังกฤษคือ “Computational thinking” ครับ
    • แค่นั้นไม่พอ เราต้องเขียนโค้ดของเรา ให้ถูกต้องตามหลักของภาษา ต้องพิมพ์คำสั่งต่างๆ ให้ถูกต้องเป๊ะๆ — ซึ่งก็ต้องใช้ทักษะในทางภาษา ทั้งคำศัพท์ต่างๆ และหลักไวยากรณ์ครับ
  • สำหรับบางคนนี่ก็อาจจะไม่ใช่เรื่องยาก แต่ก็อาจจะมีบางคนที่รู้สึก overwhelmed หรือรู้สึกว่าสิ่งที่กำลังเรียนอยู่มันเกินระดับที่เราสามารถเข้าใจได้ ณ ตอนนี้

  • ซึ่งมันไม่ผิดอะไร ถ้าเกิดเราจะไปลองศึกษาวิชา ในเลเวลที่ง่ายกว่านี้ก่อน แล้วค่อยกลับมาศึกษาคอร์สนี้ทีหลังครับ

    • มีเว็บ code.org ที่สอนเรื่อง Computational thinking ผ่านภาษา Scratch ครับ

      ภาษา Scratch เป็นภาษาโปรแกรมมิ่ง ที่ใช้การลากบล็อกต่างๆ มาต่อกันเพื่อสร้างโปรแกรม แทนการพิมพ์โค้ดครับ

    • ในเว็บ CodingThailand.org ก็ได้มีการรวบรวมหลักสูตรภาษา Scratch ต่างๆ แบ่งเป็นชั้นปี ตั้งแต่ ป.1 ถึง ป.6 ครับ โดยในแต่ละปีก็มีหลายๆ คอร์ส และในแต่ละคอร์สก็มีกิจกรรมต่างๆ เยอะมาก

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

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

      ก็นับว่าเป็นเรื่องที่ดีมากๆ ที่เดี๋ยวนี้มีหลักสูตรที่ช่วยปูพื้นฐาน ให้เราสามารถเข้าไปเรียนกันได้ฟรีแล้วครับ

    • นอกจากนี้ ภาษา Scratch ยังสามารถเอามาใช้สร้างเกมและแอปได้ด้วย

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

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

  • โอเค ถ้าพร้อมแล้ว เรามาเริ่มเข้าสู่บทเรียนภาษา JavaScript กันเลยครับ


  1. อาจจะเรียกการฝึกฝนแบบนี้ว่า “Deliberate practice” ↩︎