แนวคิด

ผม​อ่าน​รายงาน 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 ของ​ภาษา​กัน​เลย​ที​เดียว

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

 

lewcpe

CTO at MFEC PLC. Chief Editor at Blognone.com

 

2 thoughts on “แนวคิด

  1. อ่านบลอกนี้ของคุณ lew แล้วถูกใจมากครับ เมื่อกี้ก็อ่าน Java Still Slowwwww… ของคุณ mk มา อ่านแล้วก็โยง ๆ กันอยู่ และอดไม่ได้ที่จะเขียนตอบครับ

    ผมเห็นด้วยกับ คุณ lew เกือบทุกประเด็นที่เขียนในบลอกนี้เลยครับ ประเด็นที่ผมถูกใจเป็นพิเศษคือ แนวคิดการเขียนโปรแกรมของ Java

    ผมไม่ได้เรียนด้านนี้โดยตรง ความรู้ที่มีก็ได้มาจากการศึกษานอกโรงเรียน ผมจึงไม่รับรองครับว่าความคิดของผมจะถูกต้อง

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

    Java มันคิดเป็น interfaces หมดเลย คือ วางแผนอย่างเดียว แล้วค่อยมา implement กันทีหลัง เพื่อ … อะไรก็ว่าไป ฟังแล้วอ่านแล้วดูดีมากเลยครับ แต่ทำจริงยากไม่ใช่เล่น ยากกว่าเขียนเอาสั่ว ๆ ด้วยภาษา C อีก เพราะปัญหาบางปัญหามันโผล่ขึ้นมาตอน implement นี่แหละ แก้กันทีก็ปวดหัว เพราะต้องวางแผนใหม่ เปลี่ยนกระบวนทัพใหม่ และด้วยสามเหตุนี้ด้วยมั้งครับ ที่ทำให้โปรแกรมที่เขียนด้วย Java ส่วนใหญ่ช้า

    บางทีคนที่เขาเก่ง มองภาพออก วิธีการนี้อาทำให้การทำงานง่ายขึ้นก็เป็นได้ แต่คำถามคือ ผมต้องลองผิดลองถูกไปอีกนานแค่ไหน ถึงจะสามารถมองทุกอย่างทะลุปรุโปร่ง วางแผนเผื่อไว้สำหรับทุกปัญหา แล้วผมต้องนั่งวางแผนนานแค่ไหน แล้วผมจะรู้ได้อย่างไรว่าแผนที่ผมวางไว้ดีหรือไม่ แล้วกว่าผมจะวางแผนเสร็จ พวกที่เขียนโปรแกรมด้วย Python, Ruby , PHP ไม่เขียนโปรแกรมเสร็จไปแล้วหรือ ไหนจะเรื่อง UML อีก ที่มี Syntax ตั้งหลายอย่าง implement ไม่ได้ ไม่รู้จะเพิ่มเข้ามาทำไมให้ปวดหัว

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

Comments are closed.