Native is Sucks! But you can’t live without it.

หลัง​จาก​ทำ​งาน​ด้าน​ซอฟต์แวร์​มา​ปีก​ว่าๆ สิ่ง​ที่​พบ​อย่าง​หนึ่ง​คือ​โลก​ธุรกิจ​ซอฟต์แวร์​บ้าน​เรา​ถูก​แบ่ง​ออก​เป็น​สอง​ขั้ว​โดย​ไม่​มอง​หน้า​กัน คือ โลก​ของ Managed Software อย่าง .NET และ Java กับ​โลก​ของ Native ที่​มี​สารพัด​จะัใช้​กัน​อยู่ ทั้ง​เครื่อง​ยูนิกซ์​รุ่น​เก่าๆ มา​จน​ถึง​ลิ​นุกซ์

ที่​น่า​รำคาญ​ใจ​ที่​สุด​คง​เป็น​เรื่อง​ของ​เมื่อ​เทคโนโลยี​ส่วน​หนึ่ง​ไม่​สามารถ​ตอบ​สนอง​ได้​ดี​พอ ธุรกิจ​ซอฟต์แวร์​บ้าน​เรา​กลับ​กลัว​ที่​จะ​ขอ​ความ​ช่วย​เหลือ​จาก​เทคโนโลยี​อื่นๆ เพื่อ​ลด​อุปสรรค แต่​กลับ​พยายาม​ใช้​เทคโนโลยี​ที่​ไม่​เหมาะ​สม​เพื่อ​ให้​ได้​ชื่อ​ว่า​ซอฟต์แวร์ X ทำ​งาน​อยู่​บน​เทคโนโลยี Y ให้​ได้

พอ​ดี​ว่า​อยู่​ฝั่ง Native หลาย​ครั้ง​ที่​อยาก​ร้อง​ขอ​เทคโนโลยี​ระดับ​สูง​กว่า เพื่อ​มา​ลด​งาน​ที่​น่า​เบื่อ (แต่​ต้อง​มา​ทำ​ใน C/C++) โดย​ได้​ประโยชน์​ด้าน​ประสิทธิภาพ​น้อย​กว่า​ร้อย​ละ 1 แต่​ก็​ไม่​ได้​เพราะ​เหตุผล​ที่​ว่า​เรา​ต้อง​การ​ให้​ซอฟต์แวร์​เป็น Native

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

ความ​กลัว​ที่​ไม่​เข้า​ท่า​เหล่า​นี้​สร้าง​ความ​น่า​เบื่อ​ให้​กับ​งาน​ใน​โลก​ซอฟต์แวร์​ไม่​ใช่​น้อย แทน​ที่​เรา​จะ​ใช้​สิ่ง​ที่​สร้าง​ขึ้น​มา​เพื่อ​แก้​ปัญหา​อย่าง​ตรง​ตัว เรา​กลับ​อ้อม​ไป​มา​ด้วย​ความ​กลัว​เกิน​เหตุ

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

 

แนวคิด

ผม​อ่าน​รายงาน benchmark มา​สอง​สาม​ที่ เรื่อง​หนึ่ง​ที่​แปลก​ใจ​คือ​ภาษา​จาวา​นั้น​ทำ​ผล​การ​ทด​สอบ​ได้​ใน​ระดับ​ดี​เยี่ยม​เสมอๆ เรียก​ว่า​ขี่ๆ กับ C/C++ กัน​เลย​ที​เดียว

เรื่อง​น่า​แปลก​ใจ​คือ ใน​โลก​ความ​เป็น​จริง ผม​ไม่​ค่อย​เจอ​โปรแกรม​จาวา​ความ​เร็ว​เป็น​ที่​น่า​พอ​ใจ​เท่า​ใหร่เลย แม้​จะ​ทำ​งาน​ใน​เครื่อง​ที่​มี​แรม​ให้​สูบ​อย่าง​เหลือ​เฟือ​แล้ว​ก็​ตาม

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

โปรแกรมเมอร์​จาวา​จำนวน​มาก​ใน​โลก จึง​ถูก​สอน​การ​เขียน​โปรแกรม​มา​ด้วย​ความ​คิด​พื้น​ฐาน​ที่​ว่า​คอมพิวเตอร์​นั้น​เร็ว​เหลือ​เฟือ และ​สามารถ​หา​เครื่อง​ที่​เร็ว​กว่า หาก​เรา​ต้อง​การ​ได้​ไม่​ยาก​นัก นี่​อาจ​จะ​เป็น​เหตุผล​ที่​ว่า​ทำไม​เรา​จึง​ไม่​ค่อย​เห็น​โปรแกรม​ที่​ทำ​ความ​เร็ว​ได้​ดี​ใน​ภาษา​จาวา​กัน​เท่าใหร่

ปัญหา​ประมาณ​นี้​ไม่​ได้​มี​ใน​จาวา​อย่าง​เดียว​เท่า​นั้น ก่อน​หน้า​นี้​ปรัชญา​ที่​สร้าง​ความ​ปวด​เศียร​เวียน​กล้า​ให้​กับ​การ​ทำ​งาน​ก่อน​หน้า​นี้​คง​เป็น​ภาษา Perl ที่​สนับสนุน​การ​ใช้ Regular Expression อย่าง​สุด​โต่ง แถม​ยัง​มี​ปรัชญา​แนบ​ท้าย​ว่า “There’s more than one way to do it.”

ผล​ที่​ได้​คือ​โค้ด Perl ที่​ไม่​ค่อย​มี​ใคร​อ่าน​ออก​จำนวน​มาก​ใน​โลก​ทุก​วัน​นี้

ผม​เคย​ถก​กับ​พี่​คน​หนึ่ง​ที่​เข้า​ใจ​ว่า​ชอบ Perl พอ​ควร ส่วน​ผม​น่ะเกลียด​มาก พี่​คน​นั้น​ยก​ประเด็น​ว่า​เรา​สามารถ​เขียน Perl ให้​อ่าน​ง่ายๆ ได้​ถ้า​เรา​ต้อง​การ แต่​การ​สอน Regular Expression และ​การ​ใช้​ตัว​แปร Global ตั้งแต่​บท​แรกๆ ก็​ดู​เหมือน​จะ​ไม่​สนับสนุน​ให้ Perl มี​โปรแกรมเมอร์​ที่​เน้น​ความ​อ่าน​ง่าย​ของ​โปรแกรม​กัน​เท่าใหร่ แต่​เน้น​ว่า​โปรแกรม​สั้น ยิ่ง​สั้น​จะ​ดู​ยิ่ง​เจ๋งไป​ซะอย่าง​นั้น

Python สอน​ผม​สอง​เรื่อง คือ​การ Refactoring ที่​ให้​ทำ​เสมอๆ เมื่อ​มัน​ควร​ทำ ข้อ​นี้​อาจ​จะ​เป็น​หนังสือ​ที่​ผม​อ่าน​เอง แต่​โดย​ส่วน​ตัว​แล้ว​ผม​ก็​ยัง​เชื่อ​ว่า​ตัว​ภาษา​มี​ส่วน​ค่อน​ข้าง​มาก ไม่​ว่า​จะ​เป็น​การ​บังคับ​ใช้ self เมื่อ​ต้อง​การ​ใช้​ตัว​แปร​ใน​ออปเจกต์ ไป​จน​ถึงฟังก์ชั่น property ที่​ทำ​ให้​เรา​สามารถ​ประกาศ​ตัว​แปร​ใน​ออปเจกต์​ไป​ก่อน แล้ว​ไป​ใส่ฟังก์ชั่น get/set เอา​ที​หลัง โดย​ไม่​ต้อง​ไป​แก้​จาก​ภาย​นอก เรื่อง​ที่​สอง​คือ​แนว​คิด battery included ของ Python ทำ​ให้​ผม​เลิก reinvent the wheel ไป​ได้​มาก ด้วย​ความ​ที่​เคย​ชิน​ที่​จะ​หา​โมดูล​ที่​ทำ​งาน​ตาม​ที่​เรา​ต้อง​การ​ก่อน เมื่อ​ไม่​มี​ค่อย​เขียน​ใหม่ แทน​ที่​จะ​เป็น​การ​เขียน​เอง​เรื่อยๆ เหมือน​เมื่อ​ตอน​เขียน C/C++ นิสัย​พวก​นี้​อาจ​จะ​บอก​ได้​ว่า​เกิด​ขึ้น​มา by design ของ​ภาษา​กัน​เลย​ที​เดียว

หรือ​ไม่​จริง?

 

QOTD (Question Of The Day)

ถ – นึก​ยัง​ไง​มา​ดู​หนัง​คน​เดียว​เหรอ​ครับ

ต – นึก​ขึ้น​ได้​ว่า​ไม่​มี​แฟน​ครับ

ปล. “ถ” น่ะ ใคร​ไม่​รู้ ส่วน “ต” น่ะ คุณ​คง​รู้​ว่า​ใคร