ผมอ่านรายงาน 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 ของภาษากันเลยทีเดียว
หรือไม่จริง?
อ่านบลอกนี้ของคุณ lew แล้วถูกใจมากครับ เมื่อกี้ก็อ่าน Java Still Slowwwww… ของคุณ mk มา อ่านแล้วก็โยง ๆ กันอยู่ และอดไม่ได้ที่จะเขียนตอบครับ
ผมเห็นด้วยกับ คุณ lew เกือบทุกประเด็นที่เขียนในบลอกนี้เลยครับ ประเด็นที่ผมถูกใจเป็นพิเศษคือ แนวคิดการเขียนโปรแกรมของ Java
ผมไม่ได้เรียนด้านนี้โดยตรง ความรู้ที่มีก็ได้มาจากการศึกษานอกโรงเรียน ผมจึงไม่รับรองครับว่าความคิดของผมจะถูกต้อง
ผมพยายามศึกษาการเขียนโปรแกรมด้วย Java และ การออกแบบซอพท์แวร์แนว Java อยู่พักนึง เพราะคิดว่าสามารถนำสิ่งเหล่านั้นไปเขียนโปรแกรมที่มรขนาดใหญ่ได้ แต่ก็ทำใจให้ชอบไม่ได้เลยครับ
Java มันคิดเป็น interfaces หมดเลย คือ วางแผนอย่างเดียว แล้วค่อยมา implement กันทีหลัง เพื่อ … อะไรก็ว่าไป ฟังแล้วอ่านแล้วดูดีมากเลยครับ แต่ทำจริงยากไม่ใช่เล่น ยากกว่าเขียนเอาสั่ว ๆ ด้วยภาษา C อีก เพราะปัญหาบางปัญหามันโผล่ขึ้นมาตอน implement นี่แหละ แก้กันทีก็ปวดหัว เพราะต้องวางแผนใหม่ เปลี่ยนกระบวนทัพใหม่ และด้วยสามเหตุนี้ด้วยมั้งครับ ที่ทำให้โปรแกรมที่เขียนด้วย Java ส่วนใหญ่ช้า
บางทีคนที่เขาเก่ง มองภาพออก วิธีการนี้อาทำให้การทำงานง่ายขึ้นก็เป็นได้ แต่คำถามคือ ผมต้องลองผิดลองถูกไปอีกนานแค่ไหน ถึงจะสามารถมองทุกอย่างทะลุปรุโปร่ง วางแผนเผื่อไว้สำหรับทุกปัญหา แล้วผมต้องนั่งวางแผนนานแค่ไหน แล้วผมจะรู้ได้อย่างไรว่าแผนที่ผมวางไว้ดีหรือไม่ แล้วกว่าผมจะวางแผนเสร็จ พวกที่เขียนโปรแกรมด้วย Python, Ruby , PHP ไม่เขียนโปรแกรมเสร็จไปแล้วหรือ ไหนจะเรื่อง UML อีก ที่มี Syntax ตั้งหลายอย่าง implement ไม่ได้ ไม่รู้จะเพิ่มเข้ามาทำไมให้ปวดหัว
ที่จริงก็ไม่มีใครบังคับหรอกครับ ว่าหากเขียนโปรแกรมด้วย Java ต้องทำอย่างที่ว่า แต่มันเป็นเรื่องของ แนวคิด ที่มาพร้อมกับตัวภาษา หากเราคิดจะเขียนโปรแกรมด้วยภาษานั้น ๆ แล้ว คงเลี่ยงสิ่งเหล่านี้ยาก
http://pphetra.blogspot.com/2006/08/programming-by-coincidence.html