Visual J# มาทำไม?

    มีคนขอให้ผมวิจารณ์ Visual J# ซึ่งตอนนั้นผมยังไม่รู้เลยว่ามันออกมาแล้ว ผมเลยไป Download มาลองใช้ดู สิ่งแรกที่เห็นก็คือ มันสามารถเข้ากันได้กับ Visual Studio.NET ได้อย่างสนิท ซึ่งก็ไม่น่าแปลกใจแต่อย่างใด เพราะเรารู้กันมาก่อนหน้านี้แล้วว่า Visual Studio.NET เป็นระบบเปิดที่สามารถรองรับการ plug-in ของภาษาต่างๆ ได้

    ตามธรรมเนียม อย่างแรกคือผมต้องลองโปรแกรม Hello, World ดูก่อน ปรากฏว่า IntelliSense ทำงานได้ดีครับ ที่ดูดีไปกว่านั้นคือ เรามี IntelliSense ของทั้งแบบ .NET และ ของทั้ง Java คือ Console.WriteLine() และ System.out.println() ซึ่งตอนแรกผมคิดว่า พวก Library แบบของ Java จะถูกตัดออกหมด เหลือความเป็น Java แค่โครงครับ

    การทำแบบนี้มองได้หลายมุมครับ ถ้ามองมุม Microsoft นี่คือ Java ฉบับ Microsoft ซึ่งมาทางสายของ Visual J++ ใครก็ตามที่เขียน Visual J++ มา สำหรับ Console Program ก็แทบไม่ต้องเปลี่ยนอะไร แต่เท่าที่ผมดู ถ้าเป็น Windows Form แล้ว ยังเข้ากันไม่ได้ครับ ต้องรอดูรุ่นต่อไป ส่วนถ้ามองอีกมุมในมุมของ Sun แล้ว คงแน่นอนครับ Sun คงไม่ชอบแน่ เพราะ Java แบบ Microsoft ใช้งานร่วมกับ Java ของ Sun ไม่ได้ เพราะยังคง Console.WriteLine() อยู่

คุยกันให้ชัด คำว่า Java

    เรื่องนี้เราคงต้องแยกคำว่า Java ออกเป็น 2 ส่วนครับ ถ้าเราแยกไม่ออก เราจะสับสน ที่เราพูดคำว่า Java กันทุกวันนี้ มันเป็นเรื่อง 2 เรื่อง Java คำแรกคือภาษาคอมพิวเตอร์ครับ ภาษาที่มีกลิ่นอายของภาษา C และมีความเป็น OO สูง ส่วนอีกความหมายหนึ่งคือ Java Platform ซึ่งมันก็คือสิ่งแวดล้อมที่ใช้ในการรันโปรแกรม ซึ่งมีจุดเด่นอย่างมากก็คือ สามารถ Implement ได้บนระบบเกือบทุกระบบ เรื่องนี้คนสับสนกันเยอะครับ เพราะ Sun มักจะกล่าวว่า Java Platform เป็นระบบมาตรฐานที่ทำงานบนเครื่องทุกเครื่อง แต่ที่จริงแล้ว Java Platform นั้นเป็นระบบเฉพาะครับ ที่อิงกับระบบปฏิบัติการ UNIX เป็นหลัก พอเอามาใช้กับ Windows เลยดูเหมือนโปรแกรมต่างด้าวไป

    ถ้าเปรียบเทียบกันแล้ว Java Platform กับ .NET Framework มันก็คือเรื่องเดียวกัน เราสามารถเขียนภาษาอื่นบน Java Platform ได้ แต่ไม่ค่อยมีคนทำ เพราะอะไรๆ ก็ต้อง Java อยู่แล้ว ผิดกับ .NET Framework นั้นไม่เน้นภาษา ภาษาโบราณอย่าง COBOL ยังมีบน .NET Framework เลยครับ

    เมื่อเข้าใจตรงกันแล้ว Visual J# ก็คือส่วนของภาษานั่นเอง ซึ่งไม่ได้มีส่วนเกี่ยวข้องกับ Java Platform เลยครับ ผมไปอ่านการวิจารณ์ของฝรั่ง กล่าวหาว่า Microsoft นอกคอกไม่ยอมเรียนรู้ซักทีว่า คน Java ไม่ต้องการ Visual J# อันนั้นก็แล้วแต่มุมมองครับ แต่ผมว่าเขาสับสน ระหว่างส่วนของภาษากับ Platform   Microsoft เน้น Windows มาตั้งแต่แรกแล้ว ใครๆ ก็รู้ .NET Framework จึงเป็น Platform ที่เอื้อกับ Windows อย่างเต็มที่ แบบเดียวกันกับที่ Java Platform เอื้อกับ UNIX ดังนั้น เป้าหมายของ Microsoft จึงทำ J# มาเพื่อส่วนของภาษาเท่านั้นครับ Java Platform ไม่เกี่ยว

  

แล้วทำ J# มาทำไม ทั้งๆ ที่มี C# อยู่แล้ว

    ก่อนที่จะคุยกันถึงเรื่องนี้ ผมขอคุยกันเรื่องการสร้างคอมไพเลอร์กันก่อนดีกว่า เรื่องมันเกี่ยวกันครับ เมื่อเราคุยกันเรื่องคอมไพเลอร์ เรามักจะนึกถึงการแปลภาษาจากภาษาระดับสูง ไปเป็นภาษาระดับต่ำ เช่น Native Code หรือ MSIL แต่การแปลภาษาไม่ได้จำกัดอยู่แค่นั้นครับ เราสามารถแปลภาษาระดับสูงไปเป็นภาษาระดับสูงได้ เช่นภาษา C++ ก่อนหน้าที่ Borland หรือ Microsoft จะสร้าง คอมไพเลอร์ ภาษา C++ ขึ้นมานั้น ภาษา C++ รุ่นแรกไม่ได้เป็นเหมือนที่เราเห็นทุกวันนี้นะครับ คอมไพเลอร์ภาษา C++ ตัวแรก มีชื่อว่า Cfront ครับ มันจะแปล source code ภาษา C++ ให้กลายเป็นภาษา C จากนั้นคุณก็เอาผลลัพธ์ที่ได้เป็นภาษา C นั้นไปคอมไพล์ด้วยคอมไพเลอร์ปกติ

    แต่คุณอย่าไปอ่าน Source code ภาษา C ที่ Cfront สร้างนะครับ อ่านไม่รู้เรื่องหรอกครับ มันมี Array of Pointer เต็มไปหมด มันต้องทำ vtable เพื่อให้ได้คุณสมบัติของ Object Oriented นั่นเอง แนวคิดการแปลภาษาระดับสูงให้เป็นภาษาระดับสูงนั้น นอกจาก C++ แล้ว ยังมี Fortran to C หรือ Pascal to C และอื่นๆ อีกมากครับ

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

    ดังนั้นผมว่า Microsoft จึงทำ Visual J# ขึ้น เพื่อให้เราไม่ต้องเสี่ยงกับการแปลง เราสามารถเอา Code นั้น ทำงานร่วมกับ ภาษาอื่นบน .NET ได้ แนวคิดของ Microsoft นั้นขัดกันเองเล็กน้อยครับ คือ Microsoft ต้องการ .NET Framework มีความเป็นกลางเรื่องภาษา ภาษาอะไรก็ได้ มีบน .NET Framework หมด ยกเว้นภาษาเดียวคือ Java ครับ เรื่องนี้อาจจะเกลียดกันเป็นการส่วนตัว Microsoft จึงออก JScript เพื่อให้รองรับ Web ได้เท่านั้น แต่ Microsoft เริ่มรู้ตัวเองแล้วว่าคิดผิดครับ ถ้าทำอย่างนั้น คงมีคน Java ไม่มากนักที่เข้ามาหา .NET Framework แต่คิดผิดคิดใหม่ได้ครับ การออก J# มาก็เหมือนกับการทอดสะพาน ให้คน Java ข้ามมาง่ายขึ้นครับ

    ผมคิดว่า แนวคิดของ Microsoft เปลี่ยนไปแล้ว ปัจจุบัน Microsoft ต้องการให้ Code Java ยังคงเป็น Java แต่มาอยู่บน .NET Framework ได้ แต่ด้วยความคล้ายกันของ Java และ C# จะทำให้คน Java ที่อยู่บน .NET Framework ในอนาคต เลือก C# เพราะ C# มีลูกเล่นมากกว่า ซึ่ง Java จะเสื่อมความนิยมในที่สุด

    อีกเหตุผลหนึ่งก็คือ ถ้า Microsoft ไม่ทำ Java บน .NET บริษัทอื่นก็จะทำ เช่น Rational ของ Three Amigos ก็เห็นว่าซุ่มทำ Java บน .NET อยู่ และผมว่านะ การออก J# มันทำให้ความรู้สึกของคนที่ใช้ J++ อยู่ รู้สึกดีขึ้น ไม่โดนทอดทิ้ง ผมว่ามีแต่ได้นะสำหรับหมากเกมส์นี้ของ Microsoft

    อย่างที่รู้กันว่า Microsoft เป็นบริษัทยอดนักลอก แต่ก็เป็นนักลอกที่เก่งใครๆ ก็ยอมรับ ดูอย่าง Java Virtual Machine ของ  J++ สิครับ ประสิทธิภาพสูงกว่าของ Sun มาก คว้ารางวัลไปหลายรางวัล มันเป็นการดีครับ ที่เราสามารถใช้งาน Java ได้เร็วกว่า Virtual Machine ของ Sun ด้วย .NET Framework

  

ก่อนจบ

    ผมไปอ่านนักวิจารณ์ฝรั่ง กล่าวว่า Visual J# จะไม่มีใครใช้ ทำมาจะเสียเวลาเปล่า ผมเห็นด้วยในบางมุมครับ ผมมองว่า J# คือหนึ่งในกลยุทธ์การ JUMP ของ Microsoft ผมเห็นด้วยครับว่า ในที่สุดจะไม่มีคนเขียนโปรแกรมโดยใช้ J# เพราะเขาจะไปสู่ C# ในที่สุด แต่สำหรับ Code ที่ไม่ได้เขียนเอง เราได้มาจากภายนอกเป็นภาษา Java เราสามารถนำมาใช้ร่วมกับโปรแกรมของเราได้เลย รวมทั้งเราจะสามารถ Modify ได้อีกต่างหาก นั่นคือข้อดีครับ ผมชอบนะ ปัจจุบันผมสามารถเอา Library ที่ได้จาก Internet มาใช้ร่วมกับโปรแกรมของผมได้

    ที่กล่าวมาทั้งหมด คุณคงเห็นภาพแล้วว่า Microsoft สร้างหลุมดำ ดูดคน Java คุณสามารถเอา Java มาใช้บน .NET ได้ แต่เมื่อใช้แล้ว คุณสามารถเพิ่มเติมด้วยความสามารถของ .NET เมื่อนั้น Code ของคุณก็จะไม่สามารถย้อนกลับไปใช้กับ Java Platform ของ Sun ได้ Microsoft ตั้งใจให้ตีตั๋วขาเดียวครับ