Teacher

Books
Books - ~redbanana

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

วันนี้เลยอยากเขียนเก็บไว้หน่อยครับ ว่าถ้าผมได้เป็นอาจารย์แล้วละก็ นี่คือสิ่งที่ผมจะสอนครับ เอาเป็นวิชาและรายละเอียดแล้วกันนะครับ

  1. Debugging Techniques
  2. Practical Coding Practices
  3. Modern Software Process

Debugging Techniques

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

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

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

ในวิชานี้ ผมจะสอนเทคนิคทั้งหมดที่ผมพอจะรู้จัก จะได้หัดใช้ IDE ให้มันเป็นประโยชน์

Practical Coding Practices

Practice อย่างเช่น Naming Convention หรือว่า Don’t-Repeat-Yourself หรือว่า Separation of Concerns ผมว่าพวกนี้มันสำคัญมากเลยนะครับ แต่มันแทบไม่มีสอนเลย มีอย่างมากก็เป็น Slide ไม่กี่หน้าในวิชา Object Oriented Programming แต่ถึงจะเรียนไป ผมก็ไม่เชื่อหรอกว่าคนที่เรียนจาก Slide พวกนั้นจะเข้าใจมันจริงๆ ว่าทำไมต้องทำตาม

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

Modern Software Process

ต่างกับ Software Engineering ตรงคำว่า Modern ครับ และวิชานี้จะลงลึกเรื่องของเทคนิคของ “กระบวนการ” ล้วนๆ โดยไม่ไปยุ่งเรื่องของการจัดการอย่างเช่น CMMI หรืออะไรพวกนั้นจะไม่ยุ่ง วิชานี้จะไม่มายุ่งอะไรมากมายว่า Waterfall หรือ Iterative Development ทำยังไง มันตกยุคไปนานแล้วครับ ไม่มีใครเขาใช้กันแล้ว เดี๋ยวนี้มันต้อง Agile Development ครับ แต่ที่สำคัญกว่านั้นคือคำว่า “ทำไม” ครับ

วิชา Software Engineering ให้ไปค้นคว้าเกี่ยวกับสิ่งพวกนี้บ้างก็จริง แต่หลักการและเหตุผลที่ทำไมถึงต้องใช้ ทำไมถึงต้องมีสิ่งพวกนี้ ผมว่ามันสำคัญกว่านะครับ เพราะถ้าเรียนไปแต่ไม่เคยปฎิบัติใช้จริง มันก็ไม่เห็นไม่เข้าใจหรอกครับ

สิ่งที่ผมจะสอน ก็คงจะเกี่ยวกับ Software Code/Configuration Management, Continuous Integration อะไรเทือกนี้ล่ะครับ แล้วก็คงออกข้อสอบสไตล์อาจารย์ภัทร (แต่ไม่โหดขนาดนั้น ผมใจดี อิอิ)

Let’s Teach!

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

อันที่จริง มีคนโทรมาถามผมเรื่อง Visual Studio หลายรอบแล้วครับ ถามเรื่องโน้นบ้างนี้บ้าง ประมาณ 4-5 คนได้แล้ว ก็อยากจะสอนวิธีใช้และเทคนิคต่างๆ ใน Visual Studio และสภาพแวดล้อมของ .NET Framework ให้เหมือนกันครับ ให้หนึ่งวันเต็มเลย ถ้าสนใจก็นัดเวลามา :-D

ป.ล. อย่ามาถามเรื่อง Java เพราะไม่รู้เรื่องและไม่สนใจ

4 Comments

  1. >>อย่ามาถามเรื่อง Java เพราะไม่รู้เรื่องและไม่สนใจ

    เท่มาก

    วิชา-โ-ค-ร-ต-น่าเรียน เดี๋ยวนัดกันเลยดีมั้ย รับรองว่าคนเข้าจนอาจารย์อาจจะอาย

  2. น่าเรียนมากกกกกกก โดยเฉพาะ Debugging Technique เปิดบาร์แคมป์เล็กๆมานั่งสอนกันเองไหม ธีรภาพก็เคยคิดจะทำไอเดียนี้

    เรื่องเนื้อหาของ SE ผมค่อนข้างดีใจมาก ที่มีคนคิดเหมือนผม

    SE ที่เราเรียนกันอยุ่ปัจจุบันเป็นเนื้อหาสมัยการเริ่มต้นมีศาสตร์ Software Engineering

    ตัว Agile เอง มีประมาณกว่า 20 ปีแล้ว (ตั้งแต่ก่อนจะชื่อ Agile) โดยหลักการถือว่าเก่า แต่พึ่งจะถูก Adopt ใช้แค่ในช่วงไม่ถึงสิบปีที่ผ่านมา

    ผมรู้สึกว่าศาสตร์ทางด้าน SE ในแนวปฏิบัติมีการเติบโตช้ามาก เมื่อเทียบกับกับศาสตร์อื่นๆ แม้เราจะมีรีเซิร์ชทางด้านนี้เยอะ แต่ Impact ของรีเซิร์ชแต่ละอันต่อวิธีการปฏิบัติจริงค่อนข้างต่ำมาก และการนำไปประยุกต์ใช้ไม่ค่อยมี

    ปล. Modern Software Process อยากให้ใส่ Testing เข้าไปด้วย ผมคิดว่าควรจะมีนะ

  3. สนใจมาก

    จริงๆก็อยากเห็นวิธี debug ของคนอื่นเหมือนกันอะ กับเรื่อง visual studio ด้วย มีอะไรให้ใช้อีก

    ขอสารภาพว่า จริงๆแล้ว ผมก็ลูกทุ่งพอสมควร IDE ก็ไม่ได้ใช้ debugger เต็มที่เท่าไหร่ ปกติใช้ประสบการณ์เหมือนกัน กับ writeline :P ก็พอจะเดา คลำๆบั๊กได้

    เห็นด้วยอีกอย่างว่า เรื่อง Software Code/Configuration Management, Continuous Integration เป็นอะไรที่สำคัญ ควรสอนกันอยา่งยิ่ง

  4. เอาจริงใช่ป่ะ

    ….มา

    เปิดห้องประชุมที่บริษัทให้ยืมสอนเลยเอาป่ะ

    ว่าแต่… Senier Project น่ะ เสร็จแล้วรึ

    Reismea

Leave a Reply