Posted by: siamnobita | 05/03/2009

Why don’t read error message

ห่างหายไปนาน ไม่ได้มาเขียนอะไรเพิ่มเติม แถมยังมีการลบหัวข้อที่เคย public ไปแล้วอีกต่างหาก สาเหตุที่เอาหัวข้อนั้นออกไป เนื่องจากผมได้ไปอ่านข้อเขียนของคุณ Richard Foote ว่าแม้แต่กรณีที่ตารางมีขนาดเล็กมาก ๆ (ข้อมูลแค่ 1 data block) การใช้ index ก็ยังอาจจะได้เปรียบการ full scan table อยู่ดี แถมแสดงตัวอย่างให้ดูเสร็จสรรพ ทำลายความเชื่อมั่นของผมลงในทันที แต่ก็เพิ่มความมั่นใจในคำกล่าวของThomas Kyte ที่ว่า “คุณสามารถเรียนรู้เรื่องใหม่ ๆ จาก oracle ได้ทุกวัน” ผมจึงขอดึงหัวข้อนั้นกลับมาทบทวนแก้ไขก่อน public ใหม่ เพื่อไม่ให้ผู้อ่านรับรู้ข้อมูลผิด ๆ ตามผม ใครที่อ่านไปแล้วก็ขออภัยไว้ ณ ที่นี้ครับ

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

พฤติกรรมดังกล่าวคือ การไม่อ่าน error message หรืออ่าน error message ไม่เป็น นอกจากนักเรียนบางคนในวันนั้น ผมยังพบบ่อย ๆ ว่าน้องที่เข้ามาตั้งกระทู้ถามปัญหาตามเว็บบอร์ดมักละเลยที่จะให้รายละเอียดเกี่ยวกับ error message ที่เขาพบ ต้องให้พวกเราย้อนถามกลับไปเสมอ

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

การอ่าน error message เปรียบเสมือนการรู้จักเรียนรู้จากข้อผิดพลาด มีคำกล่าวว่า คนที่ไม่รู้จักเรียนรู้จากข้อผิดพลาดนั้น ไม่ว่าทำงานมาแล้วกี่สิบปี ประสบการณ์ก็มีค่าเท่ากับศูนย์

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

เรื่องนี้ทำให้ผมย้อนนึกไปถึงครั้งหนึ่งที่เคยช่วยรุ่นน้อง debug โปรแกรม เขาติดอยู่นานกับ error ง่าย ๆ ORA-06502 numeric or value error เนื่องจาก error นี้เกิดได้หลายสาเหตุ และเขาอ่านคู่มือมาไม่ดี เลยมองหาแต่เรื่องการ conversion จาก string ไปเป็น number ทั้ง ๆ ที่จริง แล้วจุดที่ผิดนั้นเกิดจากการประกาศขนาดตัวแปรไว้ไม่เพียงพอ หาแทบตายก็เลยไม่เจอซักที แบบนี้ถือว่าพอใช้ได้ เพราะพยายามอ่านแล้ว แต่ message อาจไม่ชัดเจน เข้าใจผิดเลยแก้ปัญหาไม่ได้ คาดว่าตอนนี้คงจำ error รหัสนี้ได้ขึ้นใจเลย   :P

ส่วนอีกเคสหนึ่ง เป็น error message ที่จัดว่ามีชื่อเสียงหรือชื่อเสียมากพอดู 

ORA-01555 snapshot too old: rollback segment number … too small

error นี้พา DBA เก่ง ๆ หลงทางกันมาแล้วหลายคน เพราะไม่ได้บอกสาเหตุที่แท้จริงของปัญหา ก็เลยพากันขยาย rollback segment แต่ขยายเท่าไหร่ปัญหาก็ไม่จบ บางคนยิ่งแก้ยิ่งยุ่ง เพราะไม่เหลือพื้นที่แล้ว เลยพยายาม commit ถี่ ๆ จะได้ใช้ rollback segment น้อยลง ปัญหาคือความจริงแล้ว rollback segment ที่ว่า too small นั้นเกิดจากการพยายามอ่านข้อมูลจาก segment นั้นแต่ไม่พบข้อมูลที่ต้องการ เนื่องจากถูกคนอื่นเขียนทับไปแล้ว oracle ก็เลยสรุปเอาเองว่ามันเล็กเกินไป เลยต้องมาเขียนทับกัน ซึ่งไม่ถูกต้องซะทีเดียว เนื่องจากการที่คนอื่นมาเขียนทับได้นั้น เกิดจากเราอนุญาตให้เขามาเขียนทับเองต่างหาก ซึ่งก็คือการ commit นั่นเอง พอยิ่ง commit ถี่ปัญหาก็เลยไม่จบ

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

ด้วยจิตคารวะ

About these ads

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

หมวดหมู่

ติดตาม

Get every new post delivered to your Inbox.

%d bloggers like this: