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” ↩︎