วันนี้มี Post ที่น่าสนใจในกลุ่มสมาคมโปรแกรมเมอร์ไทย

สมมติถ้าออกโจทย์แบบนี้ให้นักเรียนทำ มันจะยากไปไหมครับ 🙂
หาว่าบั๊กอยู่ตรงไหน

ความน่าสนใจของ post นี้มันเกี่ยวกับ programming นี่แหละ
ทำให้นึกถึงสมัยเขียน code ใหม่ ๆ เลย
เลยสรุปความคิดเห็นกับสิ่งที่ผ่านมาไว้นิดหน่อย

ถ้าถามว่าโจทย์นี้ยากไหม ?

สิ่งที่ต้องรู้ก่อนคือ ต้องการวัดอะไรจากโจทย์นี้
เพราะว่าโจทย์ลักษณะนี้มีเป้าหมายเพื่อ
วัดความละเอียดในเรื่องของ syntax และ sematic ของ code
วัด logic ของผู้เรียน

จากตัวอย่างมัน compile ผ่านแต่ทำงานแล้วมี bug
อาจจะเกิด RuntimeException ได้มั้ง!!

จำได้ว่าสมัยทำงานแรก ๆ
บ้าไปสอบ certified ด้าน Java กับเขามา (ไม่เกี่ยวกับ post นะ)
ผ่านทั้ง SCJA, SCJP, SCJS, SCWCD, SCBCD, SCEA (สมัยยังเป็น SUN แบบว่าแก่มาก ๆ)
ในส่วนที่เกี่ยวกับ programming คือ SCJA, SCJP
จะเน้นในเรื่องของ syntax สุด ๆ สับขาหลอกกันจนหัวหมุน
คือ ให้ code ตัวอย่างมา แล้วถามว่าผลการทำงานเป็นอย่างไร
มีตัวเลือกให้ครบตามที่คิดเลย
ทั้งผิดและถูกมีครบหมด
ตั้งแต่ compile error, runtime error และ ผลการทำงานต่าง ๆ
ดังนั้นผู้สอบต้องเข้าใจในรูปแบบของภาษาพอสมควร แถมละเอียดด้วย
ยังมีเรื่อง inheritance และ polymorphism อีก หลอกมากมาย

ปล. คนไม่ได้เขียนภาษา Java ยังสอบผ่าน ถ้าเข้าใจ !!

สิ่งที่อธิบายมาก็เพื่อจะบอกว่า

พื้นฐานของภาษามันสำคัญมาก ๆ
อย่าพึ่งแต่ IDE ให้ตรวจสอบให้
พิมพ์จุดมันก็แนะนำให้ !!
Control + Space bar มันก็แนะนำให้ !!
บอกเลยว่ามันง่ายมาก ๆ
แต่จะดีกว่าไหม ถ้าคุณเข้าใจและใช้งานได้โดยใช้เครื่องมือเหล่านี้ช่วยให้เร็วขึ้น
ไม่ใช่มาพิมพ์จุดแล้วนั่งดูว่าจะทำอะไรต่อดี แบบนี้ไม่น่าใช่ !!

สำหรับผู้เริ่มต้น

ผมแนะนำให้ลองเริ่มจาก Editor ธรรมดาที่ไม่มีอะไรช่วยเลย
อดทนนิดหน่อย แต่สิ่งที่ได้กลับมามันคุ้มค่ามาก ๆ
เพราะว่า ผมก็ถูกฝึกถูกสอนมาแบบนี้เช่นกัน

ยกตัวอย่างเช่นภาษา Java
คุณเคย compile เองไหมผ่าน command line ?
คุณเคน run เองไหมผ่าน command line ?
ถ้าไม่ก็ลองซะนะ

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

ถามว่ามันน่าเบื่อไหมกับโจทย์แบบนี้ ?

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

เน้นย้ำว่าพื้นฐานมันสำคัญมาก ๆ

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

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

ยิ่งในทุกวันนี้ใคร ๆ ก็หาสิ่งที่ต้องการได้ง่ายขึ้น
อยากรู้อะไรก็ค้นหา (มีทั้งถูกและผิด เลือกกันด้วย)
แต่สิ่งที่หาไม่ได้คือ วิธีคิด
แน่นอนว่า วิธีคิดนั้นล้วนมาจากพื้นฐานที่ดี

สุดท้ายถ้าแนวคิดหรือ Logic ได้แล้ว

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

คิดแต่ไม่ลงมือทำ มีค่าเท่ากับไม่ได้คิด