Microsoft .Net Framework คืออะไร?

Microsoft .Net Framework มันเป็นคนละเรื่องกับ Microsoft .Net Servers ที่ Microsoft พยายามจะ Promote ครับ .Net Servers นั้นมันคือชื่อใหม่ของ Microsoft Back Office เท่านั้น แต่ .Net Framework นั้นใม่ใกล้เคียงนั้นเลย

เวลาที่เราเริ่มศึกษาเรื่องอะไรใหม่ๆ เรามักจะเริ่มต้นที่คำถามว่ามันคืออะไรอยู่เสมอ แต่บ่อยครั้งยิ่งฟังก็ยิ่งงง ไม่เห็นมันจะดีตรงไหนเลยแถมยังดูยุ่งยากกว่าเดิมอีก แทนที่ได้คำตอบกลับเป็นการเพิ่มคำถามที่ว่า “แล้วมันช่วยทำอะไรให้ดีขึ้นหรือง่ายขึ้น?” เชื่อไหมครับหลายครั้งเราก็ตอบปัญหานี้ไม่ได้ ดังนั้น ในเรื่องนี้ผมว่ามันน่าจะดีกว่าถ้าผมเริ่มจากว่า .Net Framework มันให้ประโยชน์อะไรกับเราบ้างเป็นข้อๆ และในแต่ละข้อผมจะอธิบายให้ฟังว่ามันทำได้อย่างไร และผมจะสรุปให้ฟังอีกทีว่า Microsoft .Net Framework คืออะไร จะได้ไม่มางงกันทีหลัง

ผลดีที่เราจะได้จาก Microsoft .Net Framework  

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

เรามาดูกันในแต่ละข้อดีกว่าว่ามันเป็นไปได้อย่างไร

Executable code สามารถเรียกใช้เกือบทุก OS และเป็นอิสระต่อ Hardware 

Microsoft Windows NT เป็น OS ที่ดีมาก ใช้ง่ายที่สุด แต่คุณเคยแปลกใจหรือไม่ว่า ทำไม Web Server ทั่วโลกถึงใช้ Windows NT ค่อนข้างน้อย ไม่ใช่ว่าประสิทธิภาพด้อยกว่าหรอกครับ แต่เป็นเพราะว่า Hardware ที่ใช้ Run Windows NT มันไม่ค่อยเสถียร ไม่สามารถรองรับงานที่ต้องเครื่องเปิดคอมพิวเตอร์ทั้งเดือนโดยไม่ต้องปิดได้

Microsoft เคยพยายามอย่างหนัก ที่จะทำลายกำแพงนี้ โดยออก Windows NT รุ่น ที่ใช้ Chip Alpha แต่ความพยายามก็ไม่เป็นผลครับ เพราะ Hardware มันต่างกับพวก PC มาก โปรแกรมที่ Run บนเครื่องที่ใช้ Chip Alpha ได้นั้น ต้องผ่านการ Modify และ Compile ใหม่ ซึ่งยุ่งยากมาก ทำให้โปรแกรมที่สนับสนุน Windows NT บน Chip Alpha มีน้อย จนกระทั่งโครงการนี้ล้มพับไปในที่สุด

มาวันนี้ Microsoft พยายามใหม่ครับ และครั้งนี้น่ากลัว คุณจะเจอ Microsoft Office.Net ในอีกไม่กี่เดือนข้างหน้า ซึ่ง Office ตัวนี้จะใช้บน OS อะไรก็ได้ รวมทั้ง Linux และ Solaris ไม่ใช่ว่า Microsoft แปลงโปรแกรม Office ให้เป็น version ที่เป็น Linux หรือ Solaris นะครับ ก็ version มาตรฐานนั่นแหละจะทำงานได้บนทุก OS โดยไม่ต้องแก้ไขอะไรเลย

Microsoft ทำได้อย่างไร เป็นเรื่องที่น่าสนใจครับ เรื่องนี้ Microsoft ต้อง Install Program ลงไปชุดหนึ่งครับ ที่เรียกว่า Microsoft .Net Framework โปรแกรมตัวนี้จะจำลองตัวเองเป็น OS เล็กๆ ที่หน้าตาเหมือนกับ DOS, และเราสามารถ Run โปรแกรมอะไรก็ได้ที่เขียนขึ้นมาสำหรับ .Net Framework ที่ผมพูดว่า Linux และ Solaris สามารถใช้ Microsoft Office.Net ได้นั้น มันยังไม่จริงนะครับ เพราะวันนี้ทาง Microsoft ยังไม่มีแผนการที่จะ Implement .Net Platform บน Linux หรือ Solaris แต่ก็มีบางบริษัทครับประกาศอาสาจะ Implement ส่วนนี้ให้ ขอเพียงแค่ Microsoft ว่าจ้างเท่านั้น

ส่วนตัว program ที่ทำงานบน .Net Framework นั้น เป็น .exe ที่สามารถ run ได้โดยตรงจาก OS แต่ code นั้นไม่ใช่เป็น code ของ Intel Pentium หรือ CPU ใดๆ แต่หากเป็น Machine code ที่เป็นภาษาที่ Microsoft คิดค้นขึ้นครับ เมื่อเวลา Run Code นี้จะถูก Compile ให้เป็น Machine Code แท้ๆ ของเครื่องที่ใช้งานอยู่ ด้วยวิธีนี้แหละครับ เราสามารถ run .exe เดียวกันในบนทุกเครื่อง

ถ้าเราไม่มองว่า program จะไป run บนต่าง OS ถึงแม้จะเป็น OS เดียวกัน สมมุติว่าคุณเขียน code ทำเป็น .exe บน Pentium III เมื่อเวลาผ่านไป ไปถึง Pentium X (10) code .exe ของคุณยังทันสมัย ดึงความสามารถของ Pentium X มาใช้ได้เต็มที่ นั่นก็เนื่องจากว่า ก่อน run โปรแกรมทุกครั้ง มันต้อง compile ใหม่ทุกครั้งไป เพราะฉะนั้น Native code ที่ generate ขึ้นมาจะทันสมัยอยู่เสมอ

 Code ที่เขียนขึ้นจากภาษาคอมพิวเตอร์ใดๆ ก็ตาม สามารถนำไปใช้ได้กับภาษาอื่นทุกภาษา

อันนี้เป็นความฝันของผมตอนเด็กเลยครับ ผมเคยคิดว่าถ้าผมเขียนโปรแกรมหมากรุก ในส่วนของ AI ผมจะใช้ภาษา Prolog ในส่วน Graphic ผมจะใช้ C และในส่วนทำ User Interface ผมจะใช้ VB มันเป็นไปไม่ได้ครับที่ผมจะรวมเอาสามภาษามาอยู่โปรแกรมเดียวกัน แต่ด้วย .NET FrameWork มันเป็นไปได้ครับ โดยที่เราสามารถ เขียนโปรแกรมด้วยภาษาอะไรก็ได้บน .NET Platform แล้ว compile เป็น .DLL และถ้า routine เหล่านั้นเขียนตามมาตรฐานของ CLS โค๊ด DLL นั้นจะสามารถถูกเรียกใช้จากภาษาอื่นได้ทันที Technology นี้อาจดูไม่ใช่ของใหม่นักสำหรับผู้ที่คุ้นเคยกับ COM ของ Microsoft ก็จริงครับแต่ COM ยังไม่สมบูรณ์มีข้อจำกัดมาก .NET Platform นำมาทำให้สมบูรณ์นั่นเอง

Library เป็นชุดเดียวกัน ไม่ว่าจะเป็นภาษาคอมพิวเตอร์ภาษาใดก็ตาม และมีความสมบูรณ์มาก

อันนี้มีข้อดีข้อเสียครับ ผมกำลังจะบอกคุณว่า Library ที่คุณเคยใช้ได้ในภาษาอื่นที่คุณคุ้นเคยนั้น อาจจะใช้ไม่ได้บน .Net PlatForm เช่น คุณอาจไม่สามารถใช้ msgbox “hello” หรือ System.out.println() บน Java อีกแล้ว ทาง Microsoft ยกเลิก Library ของแต่ละภาษาให้หมด และสร้าง Library ตัวใหม่ ชื่อว่า .Net Library

ที่มาเป็นอย่างนี้ครับ ภาษาต่างๆ มี Library ไม่เหมือนกับ ทำให้การเรียนรู้แต่ละภาษานั้นกินเวลามาก และถ้าคุณเขียน module ที่ใช้ภาษาที่มีความสามารถสูง เช่นภาษา C ที่สามารถรองรับ จำนวน parameters ที่ผ่านเข้าหา function ไม่อั้นเช่น printf(“%d%d%d”, 1, 2, 3); พอคุณใช้ภาษา Pascal ไปอ่าน library ตัวนี้จะไม่รองรับครับ ทำให้การเชื่อมระหว่างภาษาเป็นไปได้โดยยาก Microsoft เลยตัดสินใจที่ยกเลิก Library ของทุกภาษา และออกแบบ Library ตัวใหม่ให้ทุกภาษาใช้ร่วมกัน Microsoft เหนื่อยครั้งเดียวครับ ต่อไปทุกภาษาจะมี Library ชุดที่สมบูรณ์ที่สุดใช้ ใน Library ชุดนี้มีเกือบทุกสิ่งที่ Programmer อยากจะมี ADO, Threading เป็นต้น

ทำงานเร็ว

เรื่องนี้น่าสนใจครับ เพราะสิ่งที่ผมกล่าวมาข้างต้น ไม่ใช่ของใหม่ทั้งหมด บางเรื่องยกตัวอย่างที่ โปรแกรมที่สามารถทำงานบนเครื่องใดก็ได้ อันนี้ก็ไม่ใช่ของใหม่ครับ ทาง Java เขามี Virtual Machine ที่ทำงานลักษณะนี้ได้เหมือนกัน โปรแกรมที่เขียนบน Java จะถูก compile เป็น .Class แล้วเราสามารถนำ .Class นั้นไป run ได้บนเครื่อง OS ใดก็ตามที่มี Java Virual Machine อยู่ ตัว JVM นี้เอง จะทำหน้าที่ Interpret คำสั่งต่อคำสั่ง ของ .class ไปทำงาน การทำลักษณะนี้ช้ามากครับ กล่าวกันว่า โปรแกรม Run ลักษณะนี้จะเหลือประสิทธิแค่ 10% เมื่อเทียบกับโปรแกรม ที่เขียนด้วย delphi หรือ Visual Basic

ส่วน Microsoft นั้น เมื่อนำ Source code มา compile จะ compile เป็น Machine Code กลางที่เรียกว่า Intermediate Language (IL) ซึ่งมีความ portable เทียบเท่า .class และผลลัพธ์เป็น .exe และเมื่อสั่ง Run Program ตัว .Net PlatForm จะทำการ compile เป็น Machine code แท้ๆ ของเครื่องนั้น (ไม่ใช่ Interpret นะครับ) แต่การ compile นั้นจะไม่ทำการ compile รวดเดียวจนจบ เพราะจะทำให้ต้องรอนานกว่าจะเริ่มทำงานได้ Microsoft ใช้ Technology Just In Time Compile (JIT) ที่จะดึงส่วนเฉพาะที่ใช้มา compile ก่อนแล้ว Run จากนั้นเมื่อมีการใช้ส่วนได้ก็ compile เพิ่ม แต่จะไม่ compile ในส่วนที่ compile ไปแล้ว ทำให้เร็วขึ้นมาก มีการประมาณว่า ประสิทธิภาพของ program ที่ ทำงานบน .Net FrameWork นั้น จะได้ประมาณ 80% ของ delphi หรือ Visual Basic

ทาง Microsoft เคยทดสอบ โดยการ Port โปรแกรม Flight Simulator ให้มาอยู่บน .Net ผลปรากฏว่าไม่รู้สึกว่าช้ากว่า version ปกติเลย ขณะนี้ Microsoft กำลัง port เกมส์ Age Of Empire ขึ้น .Net Framework อยู่ ผลลัพธ์เป็นอย่างไรคงรู้กันเร็วๆ นี้

มีการควบคุมสิ่งแวดล้อมในการ Run โปรแกรมเป็นอย่างดี

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

ใน Platform นี้ยังสามารถกำหนดสิทธิผู้ใช้ตาม OS ได้

มีการจัดการ Garbage Collection ได้ ทำให้ไม่เกิด Memory Leak อีก

ภาษาใหม่คือ C# ที่รวมเอาข้อดีของ C, C++, Java, VB, Perl, Delphi, Pascal เข้าด้วยกัน

Microsoft เคยเป็นผู้สนับสนุน Java แต่ Microsoft ก็ไม่สามารถยอมรับความช้าของ Java ได้ ดังนั้น ใน Visual J++ จึงทำการปรับปรุง Java โดยเพิ่ม keyword ที่ชื่อว่า Delegate ด้วย keyword ตัวนี้ทำให้ Java สามารถเข้าถึง Windows API และ COM components ได้โดยตรง ทำให้เร็วกว่า Java ของ Sun 5 เท่า  แต่เสียความ Compatible กับ Java เจ้าอื่น ทำให้ Sun ตัดสินใจฟ้อง Microsoft และ Microsoft ก็แพ้คดี หลังจากนั้น Microsoft ประกาศเลิก สนับสนุน Java Web ของ Microsoft ทั้งหมดตัดเอา Java ทิ้ง

เมื่อเวลาผ่านไป Microsoft Visual Basic ก็ได้รับความนิยมสูงขึ้น

แต่ก็ยังมีโปรแกรมเมอร์อยู่เป็นจำนวนมากที่ยอมรับความง่ายเกินไปของ Visual Basic ไม่ได้ เมื่อเรือแตกจากภาษา C และ C++ จึงหันไปหา Java ทำให้สังคม Java คึกคักมาก ทาง Microsoft ก็รู้ถึงปัญหานี้ จึงหาทางออกแบบภาษาใหม่ ให้ออกแนวภาษา C และ C++ ทำให้ programmer ต่างๆ ผู้ใช้ Java อยู่ สามารถเรียนรู้ภาษานี้ได้โดยไม่ยาก เพื่อการนี้ Microsoft ทำการซื้อตัว Anders Hejlsberg ผู้เป็นผู้ออกแบบ Turbo Pascal และ Delphi จาก Borland มาออกแบบภาษาใหม่โดยมีรหัสว่า Cool และในที่สุดได้ชื่อเป็นทางการว่า C#

ภาษานี้เป็นภาษาที่รวบเอาความสามารถดีๆ จาก C, C++, Java, VB, Perl , Dephi และ Pascal เข้าด้วยกัน มีความคล้าย Java อยู่ถึง 80% มันเป็นภาษาที่ใช้แนวคิดของ OOP อย่างเต็มตัว และใช้ความสามารถของ .Net ได้ถึง 100%

แต่ใช่ว่า Microsoft จะยกเลิกสนับสนุน VB ในความเป็นจริงแล้ว C# เกิดขึ้นมาเพื่อดึงคน Java เท่านั้น C# แทบจะไม่ได้เหนือ VB อะไรเลย ความเร็วในการ Compile และ Run อยู่ในระดับเดียวกัน C# เสียเปรียบ VB ตรงความง่ายในการใช้ แต่ ได้เปรียบตรงที่ยืดหยุ่นและรองรับการทำงานของแบบ OOP ได้มากกว่า สรุปคือสองภาษานี้ สูสีครับ ถ้าคุณเป็น VB programmer อยู่แล้ว ก็ไม่จำเป็นต้องศึกษา C# แต่ถ้าคุณมาจาก Java ตัว C# จะให้ความคุ้นเคยกับคุณ

สิ่งแวดล้อมในการเขียนโปรแกรมที่ดี โดยใช้ Visual Studio.Net

.DLL ของ .Net Framework นั้น Microsoft ตั้งชื่อใหม่ว่า Assembly ใน Assembly นอกจากมี Code และ Data แล้ว ยังเก็บข้อมูล เกี่ยวกับ Assembly นั้น ข้อมูลก็เป็นพวกเกี่ยวกับ Interface ต่างๆ เราเรียกข้อมูลเหล่านี้ว่า Meta Data ถ้าเทียบไปแล้ว ก็คล้าย .h header files ใน C/C++ นั่นเอง แต่ใน Assembly นั้นทุกอย่างอยู่ใน File เดียวกัน

ข้อดีของการทำอย่างนี้คือ เมื่อเราใช้ชุด Visual Studio.Net ในการทำงาน Visual Studio.Net จะทำการดึง Meta Data ออกมา ทำเป็นสิ่งที่เรียกว่า Intellisense คือเมื่อคุณพิมพ์คำสั่ง มันสามารถแสดง parameters ทั้งหมดหรือมี combo box เลือกค่าที่เป็นไปได้ ถ้าคุณใช้  Visual Studio อยู่แล้วคุณคงคุ้นเคยกับมัน

ใน Visual Studio.Net นี้ ถูกออกแบบใหม่เป็นเครื่องมือในการพัฒนาระบบแบบเบ็ดเสร็จ เมื่อคุณจำเป็นต้องใช้ ภาษาจาก Third Party เช่น Cobol คุณก็สามารถใช้ Visual Studio.Net เพื่อรองรับภาษา Cobol ได้ และ Cobol นั้นจะมีเครื่องมือเหมือนที่ใน Visual Studio.Net ตัวอื่นมี เช่น Intellisense , debugger เป็นต้น ทำให้นักพัฒนาโปรแกรมทำงานได้ง่ายขึ้นมาก

 

สรุป

    Microsoft .Net Framework คือ การเลียนแบบ Java ของ Sun ครับ แต่ถ้ากล่าวว่า Java ของ Sun โตขึ้นมาเป็นคนมีแขนมีขาครับถ้าเทียบกับตัวอื่น แต่ก็เป็นคนที่หน้าตาไม่สวย ผิวพรรณยังไม่ค่อยดี ทาง Microsoft.Net Framework คือการเอา Java Environment ไปอาบน้ำแร่แช่น้ำนม ขัดผิวด้วนมะขาม แล้วยังศัลยกรรมตกแต่งอีก มาเลยดูสวยกว่ามากครับ ผมไม่ชอบสงครามทะเลาะกันเรื่องตัวไหนดีกว่ากัน ใครเป็นทาสเป็นลิ่วล้อใคร ผมทิ้งให้คุณไปเปรียบเทียบเอง ส่วนผมเองพยายามที่จะเลี่ยงการเปรียบเทียบครับ


Introduction to .Net Framework |.Net Framework Based Class Library | C# Tutorial | Windows Apps with C# |Why We Are Here | Who We Are | Download  | Playground's Main Page