ผมเรียนรู้อะไรจากการเขียนโปรแกรมใช้เอง (9) - พลังของการโฟกัส


งานอดิเรกของผมจะอยู่ในหมวดการทำนายเป็นหลัก

อย่างเช่น mapping techniques ทางคณิตศาสตร์ ไว้ทำนายความสัมพันธ์เชิงตัวเลข

...หรืออ่านประวัติศาสตร์ ไว้ทำนายอนาคต

...หรืออ่านไพ่ทาโรต์ ไว้ทำนายดวง (...บอกไว้ก่อนว่าไม่แม่น !) 

และการเขียนโปรแกรม ก็เน้นมาช่วยแก้ปัญหาของตัวเองเป็นหลัก

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

แต่เรื่องไม่ได้เลวร้่ายปานนั้นเสมอไป

ถึงที่สุด โปรแกรมต้องดำรงอยู่ในบริบทที่แยกไม่ออกจากการจัดการ และแยกไม่ออกจาก algorithm ถ้าองค์ประกอบลงตัว บางครั้ง โปรแกรมร้าย ๆ ก็อาจทำในสิ่งที่น่าทึ่งได้

เช่น มีครั้งหนึ่ง ผมได้รับโจทย์วิจัยจากนักวิจัยท่านอื่นว่า มีข้อมูลของการที่ยาผ่านผิวหนัง จะวิเคราะห์ข้อมูลโดย nonlinear regression

ปรากฎว่าสมการที่ต้องใช้ดันอยู่ในรูปแบบของอนุกรมอนันต์ โดยตัว regression parameter มี 2 ตัว แล้วปรากฎว่า ซอฟท์แวร์สำเร็จรูปที่มีอยู่ ไม่ยืดหยุ่นพอที่จะรับอนุกรมอนันต์ได้ ต้องใช้วิธีตัดทอนให้เหลือไม่กี่เทอม แล้วเกิดปัญหาว่า converge ช้า ผลคือ regression line ไม่ซ้อนทับกับข้อมูล ปรับ initialize แล้วก็แก้ไม่หาย  

ผมดู ๆ แล้วมองว่าโจทย์นี้แก้ไม่ยาก เพราะมีตัวต้องจูนไม่กี่ตัว และประเมินฟังก์ชันตรงไปตรงมา  ผมก็เขียนโปรแกรมขึ้นมารองรับกรณีนี้โดยเฉพาะ เขียนอยู่คืนนึง ให้ใส่อนุกรมอนันต์ที่ converge เข้าไปได้ แล้วจูนหาค่าพารามิเตอร์แบบสบาย ๆ (ไม่มีประสิทธิภาพ)

ปรากฏว่าพอทำ regression แล้ว ข้อมูลกับ regression line ซ้อนกันได้สนิท

อ้าว...กลายเป็นว่า โปรแกรมเขียนเอง กลับทำได้ดีกว่าโปรแกรมสำเร็จรูป !

นี่ไม่ใช่เพราะผมเก่งกว่า

แต่เพราะผมสามารถ focus แก้ปัญหาที่มีลักษณะ-ขอบเขตปัญหาเฉพาะตัวมาก ๆ และสเกลปัญหาไม่ใหญ่

โปรแกรมที่เขาทำขาย converge ในไม่กี่วินาที

่โปรแกรมผมทำใช้เอง รันทีนึง รอกันหลายนาที

โปรแกรมสำเร็จรูป เขามีไว้แก้ปัญหาพันเรื่องหมื่นเรื่อง ต้องแก้ได้อย่างน้อยคร่าว ๆ

โปรแกรมเฉพาะกิจ แก้ปัญหาเดียว ตรงไปตรงมา ง่ายกว่าเยอะ ต่อให้ algorithm ไม่ได้เป็นเลิศ ก็ยังให้ผลที่น่าพอใจ

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

 

คำสำคัญ (Tags): #programming
หมายเลขบันทึก: 95017เขียนเมื่อ 8 พฤษภาคม 2007 15:46 น. ()แก้ไขเมื่อ 15 เมษายน 2012 01:43 น. ()สัญญาอนุญาต: จำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (0)

ไม่มีความเห็น

พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท