Megapixel vs. Sensor Size vs. Lens

February 14th, 2010

Number marketing เป็นเรื่องที่ “สร้างง่าย หายยาก” และจากประสบการณ์ คงไม่หายไปไหนง่ายๆ ตัวอย่างที่เห็นง่ายๆ พบได้บ่อยๆ ก็ตั้งแต่สมัย Megahertz Myth และอีกเรื่องที่ยังคงพบอยู่ในปัจจุบัน คือ “กี่ Megapixels” และ “ซูมกี่เท่า” ซึ่ง “ความเชื่อสาธารณะ” มักจะถูกสร้างว่า เมื่อตัวเลขเหล่านี้สูงกว่า นั่นหมายถึงดีกว่า

จริงๆ ก็ไม่ถึงกับผิดซะทีเดียวนัก เพราะว่าหากปัจจัยทั้งหมดเหมือนกัน ในบางบริบท มันก็ดีกว่าจริงๆ … แต่ว่าหากปัจจัยที่มีผลต่อคุณภาพ ประสิทธิภาพ ฯลฯ อื่นๆ มันต่างกันล่ะก็ มันก็บอกไม่ได้ซะทีเดียว เช่น จริงหรือ ที่ CPU ความเร็ว 2 GHz เร็วกว่า 1.6 GHz คำตอบคือ ถ้าปัจจัยอื่นๆ เช่น สถาปัตยกรรมพื้นฐาน โครงสร้างอื่นๆ ที่มีผลต่อความเร็ว ทุกอย่างมันเท่ากัน แล้วล่ะก็ “จริง” ครับ แต่ว่าถ้าไม่เช่นนั้นแล้ว “สรุปไม่ได้” ครับ

สรุปไม่ได้ ยังดี แต่ว่าในบางกรณีมัน “ตรงข้าม” ครับ โดยปริยาย และนั่นก็เป็นเรื่องที่จะคุยกันวันนี้ครับ คือ เรื่อง Megapixel ซึ่งเรื่องนี้เคยเขียนอย่างละเอียดไปครั้งหนึ่งแล้ว ในบทความ “กี่ล้านดีคะ” ที่ Blog นี้ … และวันนี้อยากจะเขียน “ภาคต่อ” สักหน่อย

ถึงสัญญาณเรื่องนี้ในตลาดจะดีขึ้นมาบ้าง เพราะว่าค่ายกล้องหลายค่าย เริ่มหันไปผลิตกล้องที่ “MP ต่ำลง แต่ขนาดตัวรับภาพ (Image sensor) ใหญ่ขึ้น” ในระดับ High-end compact กันมากขึ้น เริ่มตั้งแต่ Panasonic LX3 ซึ่งจะว่าไป 10MP, และเซนเซอร์ขนาด 1/1.63″ นิ้ว เป็นสาเหตุที่ทำให้ผมเลือกตัวนี้ แทนที่จะเลือก Canon G10 (14.7MP) Nikon P6000 (13.5MP) และหลังจากนั้นในระดับ High-end compact ก็มีกล้องทำนองนี้ออกมาเรีื่อยๆ เช่น Canon G11, Canon S90 ซึ่งลด MP ลงไปเกือบ 1/3 ของ G10 และเพิ่มขนาดเซนเซอร์อีกด้วย และ Ricoh อีกหลายรุ่น โดยเฉพาะ GR-Digital 3, GXR และรวมถึง Micro 4/3 อย่าง E-P1, 2, GF1

แต่ว่าสัญญาณดังกล่าว ยังคงส่งไปไม่ถึงในระดับตลาดกลางและตลาดล่าง สังเกตได้จาก Nikon ที่เพิ่งจะออก Coolpix รุ่นใหม่ออกมาอีกหลายตัว ซึ่งมี MP ที่สูงขึ้น แต่ว่าในทางตรงข้าม มีขนาดเซนเซอร์ที่ลดลง! ผมจำได้ว่า เคยบ่น Coolpix S710 ว่ามี 14.5MP และ 1/1.72″ ซึ่งรุ่นใหม่ที่ออกมา S8000 นั้น ก็มี MP เกือบจะเท่าเดิมน่ะแหละ แต่ว่ามีเซนเซอร์ขนาด 1/2.33″!

และเมื่อมองกว้างๆ ไปอีกหน่อย ก็ยังคงพบว่า Megapixel War ยังคงไม่จบง่ายๆ แน่นอน

โดยส่วนตัวแล้ว ไม่เคยปฏิเสธเรื่อง MP ว่ามีมาก มันก็มีประโยชน์ เพราะว่ามันทำให้เรา crop ภาพเฉพาะบางส่วนได้มากขึ้น หรือว่าพิมพ์ภาพได้ใหญ่ขึ้น แต่ว่าจริงๆ แล้วมีกี่คนกัน ที่ต้องการพิมพ์ภาพเพื่อให้ได้ประโยชน์จาก 12MP เต็มที่? และมันก็มีคนที่ต้องการ MP มากๆ อยู่จริงๆ ไม่งั้นกล้องพวก Leica S2, Nikon D3X อะไรพวกนี้คงไม่ทำออกมา และคงขายไม่ออกกับคนที่รู้เรื่องพวกนี้แน่ๆ แต่ว่าถามว่า แล้วมันจำเป็นมั้ย กับพวกเราทั่วๆ ไป? เราคงอยากจะได้แค่ภาพดีๆ เยอะๆ ซึ่งหลายภาพอาจจะถ่ายในที่ๆ แสงไม่ค่อยจะอำนวย (มืด) ซึ่งจำเป็นต้องให้แสงเข้ามาเซนเซอร์เยอะๆ หน่อย หรือว่าถ่ายรูปลูกหลานที่กำลังซน กำลังเล่น ที่จะต้องไวหน่อย อัดรูปอย่างมากก็ 4×6 ก็แค่นั้น ซึ่งการมี MP สูง และเซนเซอร์เล็ก ไม่ช่วยอะไรเลยแม้แต่อย่างเดียว และเป็นโทษซะด้วยซ้ำ

กล้องดิจิทัล มันก็มีหลักการประมวลผลเหมือนกับการประมวลผลดิจิทัลธรรมดาน่ะแหละครับ ที่มีกระบวนการ Input-Process-Output ซึ่งกรณีนี้ “Input” มันแบ่งเป็น 2 ส่วนหลักๆ คือ

  1. เลนส์ ซึ่งใช้รับแสง (Analog data)
  2. ตัวรับภาพดิจิทัล (เซนเซอร์) ซึ่งเป็นส่วนที่ใช้ในการบันทึกแสง และแปลงข้อมูลเป็นดิจิทัล

ก่อนที่จะเข้าสู่กระบวนการ Digital Processing ที่ Image Processing Engine ที่ชื่อประหลาดๆ ทั้งหลายทั้งแหล่ เช่น Venus, Digic, Expeed ฯลฯ

เคยได้ยินไหมครับ “Garbage In, Garbage Out” ถ้าขยะเข้า ก็ขยะออก คือ ถ้าหากข้อมูลเข้ามามันไม่ดีแล้วล่ะก็ จะประมวลผลมันยังไง ผลลัพธ์ออกไป ก็ไม่ดีหรอกครับ สู้ข้อมูลเข้าที่ดีไม่มีทางได้เลย

ลองคิดดูง่ายๆ นะครับ กล้องค่ายเดียวกัน 2 ตัว ใช้เทคโนโลยีการประมวลผลภาพเหมือนกัน แต่ทำไมภาพที่ได้จาก D700+24-70/2.8 N มันช่างแตกต่างจาก Coolpix S710 มากมายขนาดไม่ต้องเอามาเทียบ ทั้งๆ ที่ทั้งสองตัวนี้ ก็มี Expeed processing engine เหมือนกัน คำตอบคือ เลนส์ และ เซนเซอร์ครับ

ก็เลยนำมาซึ่งเรื่องต่อมา ก็คือ แล้วคุณภาพของเลนส์ในบรรดากล้อง compact ทั้งหลายล่ะ ดีแค่ไหน? ผมไม่ได้ต้องการคุณภาพระดับที่บ้านเราชอบกัดกันว่า “เทพ” แต่อย่างใด เพราะว่าเข้าใจดีกว่า ซื้อกล้องตัวเล็กๆ กันไปทำไม แต่ว่าเห็นมากขึ้นเรื่อยๆ กับเลนส์ที่มีรูรับแสงที่แคบมาก คือ 6.6 หรือ 6.7 ที่ช่วงปลายของซูม! รูรับแสงที่เล็ก ก็ไวแสงน้อยเป็นธรรมดา ทำให้ต้องเปิดชัตเตอร์นานขึ้น หรือเร่งสัญญาณแสง (เร่ง ​ISO) ให้สูงขึ้น ซึ่งการเร่ง ISO จริงๆ แล้วก็คือการขยายสัญญาณเสียง เหมือนกับเร่งเสียงลำโพงน่ะแหละครับ ถ้าลำโพงไม่ดี หรือเพลงอัดมาไม่ดี มันก็จะแตกเป็นเสี่ยงๆ หากเปลี่ยนเป็นเลนส์ที่มีรูรับแสงกว้างกว่านั้น เช่น F4 จะใช้ ISO ได้ต่ำลงกว่าเท่าตัว

แล้วมันแลกมากับอะไร? แน่นอนครับ เซนเซอร์ที่ใหญ่ขึ้น เลนส์ที่ดี รูรับแสงกว้างๆ มันแลกมากับ “ขนาด” ที่ใหญ่ขึ้นตามไปด้วย แต่ว่าอย่างหนึ่งที่ช่วยได้ โดยไม่ต้องเพิ่มขนาดเซนเซอร์มากนัก หรือเปลี่ยนเลนส์ ก็คือ “การลด Megapixel” ครับ เพราะว่าจะทำให้มีข้อมูลต่อหนึ่ง Pixel เพิ่มขึ้นโดยปริยาย (ถ้างง รบกวนอ่านบทความที่แล้วของผมนะครับ)

บทความต่อไป ผมจะเขียนการเปรียบเทียบอะไรสนุก เกี่ยวกับเรื่องนี้ครับ


บทความที่เกี่ยวข้อง

ช่องกรอกรหัสผ่าน+วันที่

February 10th, 2010

ผมคิดว่ามันน่าจะเป็น standard practice หรือว่าธรรมเนียมปฏิบัติกันมานานแล้วนะ สำหรับไอ้ “ช่องกรอกรหัสผ่าน” ตามเว็บเนี่ย ว่ามันจะต้องเป็นจุดๆๆๆ หรือว่า ดาวๆๆๆ หรือว่าอะไรก็ได้ ที่ทำให้ไม่สามารถอ่านได้ว่า เรากำลังพิมพ์รหัสผ่านว่าอะไรอยู่

แต่ว่าดูนี่ซะก่อน

password_field.png

อ่านได้ชัดเจน สวยงามมาก … ตอนที่ผมพิมพ์ตอนแรก อึ้งไปสามสิบวินาที ก่อนจะร้อง “เฮ้ย จะบ้าเรอะ!” แบบไม่เกรงใจคนรอบข้าง .. ไม่ทราบว่าท่านไปจ้างโปรแกรมเมอร์ที่ไหน ทำในงบประมาณหลักกี่ล้านครับท่าน? ยังไม่พอนะครับ ข้างล่าง ผมยังพบสิ่งนี้

date.png

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

ออกแบบเว็บไซต์

January 26th, 2010

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

ผู้ถาม: อาจารย์เว็บแบบไหนที่แตกต่างๆ
ผู้ถาม: ขอคำแนะนำหน่อยนะคะ
ผู้ถาม: พอดีเพื่อนเขียนเว็บให้บริษัทน่ะ
ผม: แล้วทำไมต้องแตกต่าง?
ผู้ถาม: แต่ไม่อยากจำเจอยู่กับรูปแบบเดิมๆๆ
ผม: มาอีกล่ะ พวกทำงานเอารูปแบบเป็นหลัก จะรูปแบบเก่า รูปแบบใหม่ ถ้าไม่ได้วิเคราะห์เรื่อง function และ usage เป็นหลัก มันจะทำได้ไง
ผู้ถาม: แต่คือว่าเขาแค่ตอ้งการดีไซต์และส่วนเรือ่งนั้นเขาคงทำเองอ่ะ
ผู้ถาม: ก้อแค่ออกแบบอะ
ผม: เว็บไซต์ไม่สามารถ design หน้าตาได้ หากไม่ design function ครับ
ผม: มันเหมือนกับคุณอยากจะออกแบบ “หน้าตา” ของรถยนต์ โดยไม่กำหนดว่า รถคันนี้ จะต้องวิ่งในที่แบบไหน บรรทุกอะไร กลุ่มเป้าหมายคืออะไร
ผม: คุณอาจจะคิดว่า หน้าตารถสปอร์ตมันเท่ห์ดี
ผม: แต่รถตู้ที่ออกแบบโดยใช้ concept รถสปอร์ต มีแต่ห่วยกับห่วย
ผม: ว่างั้นเถอะ
ผม: ไม่ได้กวนตีนหรือหลบเลี่ยงในการตอบ แต่ด้วยจรรยาบรรณ ไม่สามารถออกแบบเฉพาะหน้าตาได้ครับ หากคุณเคารพวิชาชีพตัวเอง ในฐานะนักออกแบบเว็บไซต์
ผู้ถาม: แต่มานก้อเปงส่วนหนึ่งหนิ
ผม: ลำดับก่อนหลังมีผลครับ
ผม: เอางี้ ผมให้คุณเลือกชุด จะพาออกงาน คุณจะเลือกชุดอะไร? ยังไง?
ผู้ถาม: ก้อต้องดูงานก่อนค่ะ
ผม: ใช่มั้ย
ผม: คุณต้องทราบว่า “งานอะไร แขกที่จะต้องไปพบ เป็นคนระดับไหน ต้องดู look เป็นยังไง ฯลฯ” ใช่มั้ย
ผม: ก็แบบเดียวกับการออกแบบเว็บไซต์น่ะแหละครับ
ผู้ถาม: แต่งานนี้เปงวัตถุดิบทางอุตสาหกรรม
ผู้ถาม: แต่ลูกค้าบอกว่าไม่อยากให้ธุรกิจมากเกิน
ผม: ถามคนอื่นเถอะครับ
ผม: คนที่ไม่ได้มีมาตรฐานในการทำงาน และมีจรรยาบรรณในการักษามาตรฐาน มีเยอะครับ
ผู้ถาม: ค่ะ
ผม: เหมือนสร้างตึกครับ ถ้าผมเป็นนักออกแบบ สถาปนิก ผมคงไม่สามารถบอกได้ว่า “ตึกนี้สวย ตึกนี้สวย ตึกนี้แปลก เอาแบบนี้ ผสมกับแบบนี้ ผสมกับแบบนี้ ฯลฯ” โดยไม่ดูว่า “แล้วมันเป็นตึกอะไรวะ ใครจะอยู่วะ เอาไปทำอะไรวะ คนเดินเข้าออกเยอะมั้ยวะ ฯลฯ”
ผม: สุดท้าย คุณอาจจะได้ตึกที่สวย แปลก เฉี่ยว แต่ใช้งานไม่ได้จริง
ผม: ตัวอย่างนี้มีให้เห็นตามเว็บไซต์ทั่วไปครับ
ผม: สวย แปลก ดูครั้งแรกแล้ว “ว้าว!” แต่ขอโทษนะครับ ไม่สามารถใช้งานได้จริงตามที่มันควรจะใช้งานได้
ผู้ถาม: ช่ายค่ะ
ผู้ถาม: พอเข้าใจและ
ผม: ขออนุญาตเอาการสนทนานี้ ไปลง blog และสอนหนังสือนะครับ เป็นตัวอย่างแนวคิดและทัศนคติหนึ่ง ที่พบเห็นได้ตามสังคมทั่วไป
ผู้ถาม: ขอบคุงค่ะ
ผู้ถาม: แป่ว
ผู้ถาม: ตามบาายคะ
ผู้ถาม: ก้อคิดไม่ออก
ผู้ถาม: เพราะยึดติดแต่สิ่งที่แตกต่างอ่ะคะ

ตามนั้นเลยครับ อีกอย่างนะครับ ช่วยๆ กันใช้ภาษาไทยให้มันถูกๆ หน่อยดีกว่านะครับ คือ บางครั้งเราพิมพ์ผิดโดยไม่ตั้งใจนี่คงไม่เป็นไร แต่ถ้าใช้แบบ “ก้อ (ก็)” หรือ “เปง (เป็น)” หรือ “มาน (มัน)” จนกลายเป็นเรื่องปกติ ผมว่ามันก็เกินไปครับ

Camera Usability Factor

January 17th, 2010

อ่านจาก Steve Huff Photos (http://www.stevehuffphotos.com/) ซึ่งเป็นเว็ยไซต์ที่เขียนรีวิวอุปกรณ์ถ่ายรูป จากมุมมองตากล้อง และการใช้งานจริง มากกว่าจากมุมแบบเชิงเทคนิค ที่พวกเรามักคุ้นเคยกัน (test chart, color plates, MTF chart, โหมดต่างๆ, 100% pixel peep ที่ทุก ISO, ฯลฯ) ซึ่งเป็นแนวรีวิวที่คิดว่าน่าจะมีประโยชน์มากๆ สำหรับคนถ่ายรูป และอยากหัดถ่ายรูป ถึงเจ้าของเว็บไซต์จะบ้าจุดแดง (Leica) ไปนิดหน่อยก็เถอะ

สิ่งที่ผมอยากจะเขียนถึง คือ Camera Usability Factor ที่เจ้าของเว็บได้เขียนไว้อย่างน่าสนใจ

“USABILITY FACTOR: A camera that you can not put down. One that you want to take with you wherever you go. A camera that will not weigh you down and break your back. A camera that will sleep next to you on your nightstand. A camera that produces exquisite image quality while making YOU look good as well as it hangs from your neck! A camera that will improve your skills and one that you just love shooting day in and day out!”

แปลเป็นไทย (แบบมีดัดๆ แปลงๆ นิดหน่อย) คือ

“USABILITY FACTOR: กล้องตัวที่คุณวางมันไม่ลง กล้องตัวที่คุณอยากจะหยิบมันติดไปด้วยไม่ว่าจะไปไหนก็ตาม กล้องตัวที่จะไม่ทำให้รู้สึกหนักหรือทำให้คอหัก กล้องตัวที่จะอยู่ที่หัวเตียง (หรือโต๊ะ หรืออะไรก็ตามที่มือคว้าได้ทันทีเมื่อตื่น) กล้องที่ให้ผลลัพธ์ที่เยี่ยมในขณะที่ทำให้คุณดูดี (หล่อ/สวย) ขึ้นที่ถือมัน ห้อยมัน หรือใช้งานมัน และที่สำคัญ เป็นกล้องที่จะทำให้คุณถ่ายรูปเก่งขึ้น และเป็นตัวที่คุณรักที่จะใช้งานมันทั้งวันทั้งคืน!”

เป็นนิยามที่ผมชอบมาก จะเห็นว่าไม่มีเรื่องเกี่ยวกับเชิงเทคนิคเลยสักกะนิด ไม่ได้มีว่า กล้องที่ดีจะต้องมี ฯลฯ (ล้าน scene mode, autofocus ร้อยแปดแบบ, ฯลฯ) ก็เลยอยากจะแชร์กันไว้ครับ

สำหรับตัวผมเอง กล้องตัวนี้เป็นตัวไหน? เมื่อก่อนผมมีกล้องอยู่สอง 2 ตัวหลักๆ นะ คือ Nikon D3 และ Leica M8 ตัวนึงเป็นกล้องที่ผมรักที่จะทำงานด้วย หวังผลได้ คุมได้ดังใจ เชื่อใจได้ที่สุด ไม่ต้องดู LCD เพื่อดูผลลัพธ์หลังจากกดชัตเตอร์เลยก็ได้ … อีกตัวหนึ่งเป็นกล้องตัวที่รักที่จะอยู่ด้วย อยากจะพาไปไหนมาไหนด้วย แต่คุณเธอพยศซะเหลือเกิน

ตอนนี้ผมคิดว่าผมเจอกล้องตัวที่ลงตัวพอดีแล้วล่ะ คือ Panasonic GF1 กับ 20mm/f1.7 (แต่นะ มันยังไม่หล่อเท่า Olympus E-P1 ฮ่าๆ)

Setup Aquamacs for Erlang

December 16th, 2009

A quick note about how to setup Aquamacs (Cocoa Emacs distribution) for coding Erlang (the next kid in town).

I assume you install Erlang via Macports so if you install it via any other mean, something will vary (I used to install it, along with everything else, from source; but currently the Macports is just easier).

The setup is simply adding the following lines into your ~/.emacs file

(setq load-path (cons "/opt/local/lib/erlang/lib/tools-2.6.4/emacs" load-path))
(setq erlang-root-dir "/opt/local/lib/erlang")
(setq exec-path (cons "/opt/local/lib/erlang/bin" exec-path))
(require 'erlang-start)

Please note that the actual path may vary from installation to installation (version numbers, most probably). So check yours.

My Dad’s further comment:

December 16th, 2009

Same as previous post, here’s my dad’s further comment on education, via e-mail. Note: Highlights are my own, on what I think are important messages.

Dear Son,
I saw my comments in your bloc.
I would like to add that our education system or our culture lead to surface knowledge. We do not go down deep to learn the basic behind.
I will give you an example.
If you read the research on life science these days you will see so many cluster analysis of similarity. This could be similarity among several varieties in any species. It is so easy to make these dendrograms using so many statistical packages available free on the web.
But, do we know the basic behind those calculations?.
It is fine for the users or technician. But, how about those with prestigious doctorate degree.
So, where are we going in education?
Love,
Dad

My Dad’s comment on “Generation Click”

December 15th, 2009

ส่ง e-mail link บทความ “Generation Click” ให้พ่ออ่าน พ่อ e-mail กลับมาว่า

I just returned from KKU few minutes ago. Tomorrow, I will go to Chiang Mai and will return on Saturday. How about that?

The ‘Generation Click’ is good.

May be the academia has to work harder to bring the thinking process back to life. Or, the young generation will have to depend on some tools all the time. They cannot thinking about making the tools themselves.

Love,
Dad

Thank you Dad! Your comment really worths its own entry. It’s really that good! Let me repeat what I think is very important:

May be the academia has to work harder to bring the thinking process back to life. Or, the young generation will have to depend on some tools all the time. They cannot thinking about making the tools themselves

“Generation Click”

December 15th, 2009

กลับบ้านคราวที่แล้ว นั่งคุยกับพ่อเรื่องน่าสนใจหลายเรื่อง เรื่องหนึ่งก็คือ เรื่องผู้ใช้คอมพิวเตอร์ ทั้งเป็นผู้ใช้แบบ user จริงๆ และนักคอมพิวเตอร์ นักเทคโนโลยีสารสนเทศและการสื่อสาร และโปรแกรมเมอร์ generation ใหม่ ที่พ่อผมเรียกว่า Generation Click

คุณพ่อบอกว่า “พวก Generation Click เนี่ย ไม่เจอ icon ไม่เจอเมนู ให้ click ได้ แล้วทำอะไรไม่เป็นเลย” แล้วอีกไม่นาน ก็ต่อด้วย “แบบนี้เขียนโปรแกรมใช้งานเองลำบากแย่เลย เพราะเขียนโปรแกรมจริงๆ ก็แค่เอาคำสั่งพวกนั้นมาต่อๆ กัน ไม่ใช่เหรอ?”

อืมมมมมม เห็นด้วยแฮะ

ก่อนจะพูดต่อไป ขอพูดถึงตัวเองหน่อย ….. ผมอาจจะโชคดีพอ ที่เกิดมาทันสมัย DOS (เครื่องแรกในชีวิต ที่ตั้งที่บ้าน ใช้งาน DOS 5.0 — ไม่มีเมาส์ด้วยซ้ำไป) ทำให้การทำงานกับ command line เป็นอะไรที่เป็นเรื่องปกติ รู้สึก at home กับมันมาก อยากจะให้มันทำอะไร ก็สั่งมันตรงๆ เป็นคำสั่งๆ ไป และแต่ละคำสั่งก็จะมี option อะไรก็ว่าไป ไม่พอ กว่าจะเล่นเกมได้แต่ละเกมๆ ก็ต้องแก้ config.sys, autoexec.bat กันวุ่นวาย ถึงขนาดต้องเขียน batch file เอาไว้เปลี่ยนสองไฟล์นี้เอง ด้วยความรำคาญ

พอชีวิตเริ่มเจอ GUI มากขึ้น ไม่ว่าจะเป็น Windows 3.x, Windows 95 ก็ได้ทุนไปเรียนญี่ปุ่น ก็พอเดินเข้าห้องคอมพิวเตอร์วันแรก ก็เจอ SGI IRIX เจอ GUI แบบไม่เคยเจอมาก่อน และต้องทำงานกับ Shell บน terminal emulator (ถ้าจำไม่ผิด รู้สึกว่าจะเป็น tcsh) ทำทุกอย่างบนนั้นหมด เหมือนกับเปลี่ยนโลกไปเยอะ จากนั้นเพื่อนๆ สนิทๆ กัน (Peter Suranyi, Janos Gyerik) ก็ยุให้เล่น Linux ก็เลยหามาลง ซึ่งก็กว่าจะหาทางทำให้ X-Windows มันทำงานได้ กว่าจะฯลฯ ได้ ก็แทบแย่

ประเด็นคือ การอยู่กับ terminal หรือ command prompt ทุกชนิดของผม ทำให้ผมมองการใช้งานคอมพิวเตอร์ เป็น “บทสนทนา” ระหว่างผมเอง กับคอมพิวเตอร์ ไม่ว่าผมจะใช้โปรแกรมอะไรก็ตามที่สามารถใช้งานในลักษณะ terminal ได้ จะเป็น MySQL, Octave, R หรือว่าโปรแกรมที่เป็น command line-based เช่น imagemagick ที่เอามาประกอบกับ shell scripting ได้ หรือว่า interactive programming environment ต่างๆ เช่น IRB, Python, Scheme, Haskell

กลับมาถึงบทสนทนาระหว่างผมกับคุณพ่อ

คุณพ่อผม เป็นนักปรับปรุงพันธ์พืช ที่ใช้ dBase 3 Plus ในการเก็บข้อมูล มานานมาก และเขียนโปรแกรมใช้งานเอง เริ่มจากใช้งานฐานข้อมูลนั้นๆ ทีละคำสั่งๆ แล้วก็เอาคำสั่งพวกนั้นมาต่อๆ กันเป็น routine/sub-routine และก็เริ่มซับซ้อนขึ้นเรื่อยๆ จนปัจจุบัน เป็นโปรแกรมที่มีความซับซ้อนมาก และทำงานได้ดี ช่วยงานได้เยอะมาก

สิ่งที่ท่านพบก็คือ นักปรับปรุงพันธ์รุ่นใหม่ ซึ่งใช้คอมพิวเตอร์ในการทำงานมากขึ้น ไม่ว่าจะในการวิเคราะห์ทางสถิติ หรือว่าการวิเคราะห์อื่นๆ กลับไม่ค่อยจะสามารถพัฒนากระบวนการคิดนั้นๆ ได้ และไม่สามารถที่จะมองความเชื่อมโยงระหว่าง process ระหว่างโปรแกรมได้เท่าไหร่ ไม่ต้องพูดถึงเรื่องเขียนโปรแกรมเลย ยิ่งกว่านั้น ในการทำงานทุกอย่าง จะมองหาแต่ icon ของคำสั่ง กระบวนการทำงานโดยทั่วไปคือ select & click และมองไม่ออกว่า จริงๆ สิ่งที่ทำๆ อยู่เนี่ยแหละ คือ “การสนทนา” ที่หากว่าบันทึกไว้ มันก็คือการเขียนโปรแกรมน่ะแหละ แต่พวกนี้กลับรักที่จะทำทุกอย่างแบบ manual แทน (เพราะว่าตัวเองได้เป็นคน click icon คำสั่งกระมัง)

มันเลยกลับมาถึงเรื่องที่ผมบ่นๆ ไว้บ่อยๆ เรื่องนักศึกษาในสาขาวิชาที่ต้องเรียนเขียนโปรแกรม ซึ่งพบว่า มีปัญหากับกระบวนการคิดค่อนข้างเยอะ และไม่สามารถคิดอะไรในลักษณะ “เอาคำสั่ง มาต่อกัน” หรือ chain ของ Input-Process-Output ได้เลย

ผมลองตั้งโจทย์คร่าวๆ ว่า “มีไฟล์อยู่หนึี่งไฟล์ ข้างในไฟล์มีคำอยู่เยอะ ซ้ำๆ กัน ผมอยากรู้ว่ามีคำไม่ซ้ำกันทั้งหมดกี่คำ?” (ทั้งนี้ คำทุกคำ เป็นตัวเล็กหมด และไม่มีอักขระแปลกๆ ตัวอย่างเนื้อความในไฟล์คือ this is a cat this is a bat this is a map this is a phone)

เชื่อหรือไม่ว่า ไม่มีนักศึกษาสามารถคิด logic ของโจทย์นี้ได้แบบเป็นขั้นเป็นตอน ชัดเจน ได้แม้แต่คนเดียว ใน class ที่ผมสอน! ทั้งๆ ที่ logic มันง่ายแสนจะง่าย ก็แค่

  • เปิดไฟล์ เอาเนื้อความ
  • เอาเนื้อความในไฟล์มา แยกเป็นคำๆ
  • เอาคำที่ได้ มากรองเอาคำซ้ำออก
  • นับคำที่เหลือ

จะเห็นว่า มันก็เป็น chain ของ I-P-O อยู่ชัดเจนนะ คือ สมมติว่ามันเป็นฟังคชัน f, g, h, i ตามลำดับ ก็จะได้ว่าคำตอบของมันก็คือ i(h(g(f(x)))) … เขียนให้มันง่ายๆ กว่านี้หน่อย สมมติว่าเป็นฟังคชันชื่อ readfile, splitwords, unique_element, count ตามลำดับ ก็เป็น count(unique_element(splitwords(readfile(”filename”)))) ใช่มั้่ย จากนั้นก็แค่เอาไปดูว่า แต่ละภาษาหรือ environment เนี่ย เอามาทำแบบนี้ยังไงดี มีฟังค์ชันมั้ย ต้องเขียนเองมั้ย ถ้าจะเขียนเองจะต้องเขียนยังไง ก็แค่คิด I-P-O แบบเดิม ลงไปให้ลึกขึ้น เท่านั้น

ถ้าเขียนใน bash shell ก็คงเป็น

cat filename.txt | tr " " "\n" | sort -u | wc -w

ถ้าเป็น ruby ก็เป็น

File.read("filename.txt").split(" ").uniq.count

ถ้าเป็น haskell ก็เป็น

content <- readFile "filename.txt"
length (List.nub (words content))

ซึ่งจะซับซ้อนกว่าตัวอื่นๆ นิดหน่อย เพราะว่ามีเรื่อง IO String กับ String มาเกี่ยวข้อง (purely functional ก็แบบนี้แหละ)

แถม … เป็น C++ ก็ยาวหน่อย (ไม่รวมพวกการ include library มาใช้นะ)

int main()
{
  ifstream fin("filename.txt");
  set<string> words;
  copy(istream_iterator<string>(fin), istream_iterator<string>(),
       inserter(words, words.begin()));
  cout << words.size() << endl;
  return 0;
}

จะเห็นว่า logic มันไม่ได้เปลี่ยนเลยสักกะนิด เพียงแต่ว่าอาจจะ verbose บ้าง รูปแบบต่างกันบ้าง คำสั่งต่างกันบ้าง

วันนั้นข้อสรุปของบทสนทนาระหว่างผมกับพ่อก็คือ Generation Click พบความลำบากมากกว่า ในการคิดสื่อสารกับคอมพิวเตอร์เป็นขั้นตอน ด้วย text ด้วยคำสั่งต่างๆ ดังนั้นอาจจะช่วยได้ หากทุกคำสั่งมันมี icon หมด และลากมาวางต่อๆ กันได้ เหมือนกับ automator.app ใน Mac OS X หรือบรรดา visual programming ทั้งหลาย

สมัยผมสอน OOP ผมเคยให้ นักศึกษาเล่นกับ Alice ซึ่งก็เป็น visual programming พอสมควร ก็พบว่าได้ผลในระดับหนึ่ง แต่ว่าพอถึงเวลาต้องไปเขียน code ซึ่งเป็น text ก็ยังพบปัญหาเดิมๆ อยู่ เทอมนี้ก็เลยขอหักดิบ ให้ใช้งาน shell มันซะเลย เผื่ออะไรๆ จะดีขึ้นมาบ้าง

ลงท้ายด้วยการเผา advisee หน่อยละกัน … เจอพวกที่แทนที่จะคิด logic ของระบบงาน กลับคิดแต่ว่าจะต้องใช้โปรแกรมอะไร ต้องเริ่ม click ที่ปุ่มไหน แล้วจะ click ปุ่มไหนต่อ งานถึงจะเสร็จ ….​ ฮา (ไม่ออก)

rawitat.com: 2009 และทิศทางใน 2010

December 15th, 2009

ปี 2009 เป็นปีที่ผมอัพเดท weblog ส่วนตัวน้อยที่สุด ตั้งแต่เริ่มเขียน blog มาที่ blogspot, exteen, เว็บไซต์ที่ภาควิชา ก่อนจะย้ายมาที่นี่ .. นั่นคือ แทบไม่ได้อัพเดทเลย และหายไปทีละหลายๆ เดือน ซึ่งส่วนหนึ่งมาจากการเริ่มเล่น social network ต่างๆ มากขึ้น อะไรหลายๆ อย่าง แทนที่มาเขียนในนี้ ก็ไปเขียนใน twitter (@rawitat) ซะเป็นส่วนมาก

แต่ด้วยเหตุผลส่วนตัวหลายๆ อย่าง ทำให้ผมเลิกเล่น twitter พร้อมกับ instant messaging ทุกอย่าง ซึ่งนั่นแปลว่า ต่อจากนี้ผมอาจจะกลับมาเขียน blog มากขึ้นมั้ง

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

ซึ่งเรื่องอื่นๆ ไม่ว่าจะเป็นเรื่องหนังสือ โปรแกรม ภาษาโปรแกรม ไลบรารี่ ของเล่นต่างๆ ก็เข้าประเด็นเดียวกันทั้งนั้นเลย … อ่อ รวมถึงเรื่องกล้องเรื่องเลนส์ด้วย

ผมเคยคิดจะทำ blog เฉพาะทางมากขึ้น นอกจากที่ Thai Mac Geeks ซึ่งตัวหนึ่งก็ทำเกือบเสร็จแล้ว ทดสอบแล้ว เหลือแต่ปรับนิดปรับหน่อยเท่านั้น แต่ว่าจนแล้วจนรอดก็ไม่ได้ทำ และจากประสบการณ์ที่ทำ Thai Mac Geeks ก็พบว่า การผลักดัน community เฉพาะทางนั้น ไม่ง่าย โดยเฉพาะเมื่อไม่มีกิจกรรมอะไรอย่างต่อเนื่อง

ผมก็ยังคิดว่าจะทำ blog เฉพาะทาง แต่ยังไม่ใช่เร็วๆ นี้

ดังนั้นก็เลยมาถึงทิศทางของ blog นี้ในปี 2010

  • จะกลับมาเขียนให้บ่อยขึ้น จริงๆ ก็สัญญาแบบนี้ทุกปีน่ะแหละ แต่ปีนี้คงจะทำได้น่ะแหละ เพราะว่าเลิกเล่น social network (อาจจะนอกจาก multiply ทั้ง แต่อาจขยับไปเล่น flickr แทน) แต่หลายอย่างอาจจะไม่ละเอียดเท่าเดิม เพราะว่าติดนิสัยเขียนทวิตเตอร์พอสมควร
  • เนื้อหาคงแบ่งเป็นไม่กี่ประเภท เรื่องถ่ายรูป อุปกรณ์ถ่ายรูป คงเป็นหลัก จนกระทั่งตัดสินใจกลับมาทำวันละรูป และคนเล่นกล้อง ต่ออีกครั้ง ส่วนเรื่อง Mac คงเขียนลง Thai Mac Geeks เรื่องการพัฒนาโปรแกรมคงไม่ค่อยมี เพราะไม่ค่อยได้เขียนเอง เรื่องอื่นๆ คงมีบ้าง
  • อยากจะทำ Photo Blog มากมาย ดังนั้น blog นี้จะกลายเป็น Photo Blog ส่วนตัวของผมครับ ซึ่งจะพยายามโพสท์ให้ได้สัปดาห์ละรูป

ลอกกุญแจ ได้คะแนนเต็ม

December 13th, 2009

จำได้ว่าตัวเองพูดประโยคนี้ครั้งแล้วครั้งเล่า ไม่ว่าจะเป็นการพูดกับเพื่อน พูดกับลูกศิษย์ พูดกับพ่อแม่ พูดกับตัวเอง ทั้งพูดในที่สาธารณะ ทั้งพูดในที่ส่วนตัว ฯลฯ ซ้ำแล้วซ้ำเล่า ซ้ำแล้วซ้ำเล่า ตั้งแต่ยังเป็นนักเรียน จนถึงวันนี้

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

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

ไม่ขอพูดอะไรมากกว่านี้หรอกครับ ว่าเจออะไรมาบ้างเร็วๆ นี้ แต่มันมีหลายเรื่องมากกว่าเรื่องการส่งการบ้าน หรือว่าวิธีการทำการบ้านของนักศึกษา

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