วันนี้มี 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 วิธีเสมอคิดแต่ไม่ลงมือทำ มีค่าเท่ากับไม่ได้คิด