โดยคุณ ดักแด้ 18/9/47 กระทู้@pantip นะคะ เราลงไว้เผื่อกระทู้ลบ
Credit Link : กระทู้
ความแตกต่างระหว่าง c c++ c# ใครช่วยผมได้บอกด้วยนะคับ
1) ภาษา C
จุดกำเนิดของภาษา C นั้น เกิดมาจาก UNIX ผู้ออกแบบภาษา UNIX ต้องการให้ OS ของตัวเอง สามารถใช้งานได้บนเครื่องต่างๆ กัน แต่การที่จะต้อง Implement UNIX โดยใช้ภาษา Assembly ของแต่ละเครื่อง เป็นสิ่งที่ยุ่งยากเกินไป ผู้ออกแบบ UNIX จึงสร้างภาษากลางภาษาหนึ่ง ซึ่ง UNIX ทั้งตัวเขียนจากภาษาดังกล่าว ดังนั้นเมื่อต้องการ ให้ UNIX ใช้งานได้บนเครื่องใด ก็ให้สร้างคอมไพเลอร์ของภาษากลางบนเครื่องนั้นก่อน คอมไพเลอร์จะแปล โปรแกรมให้เป็นภาษาเครื่อง ทำให้ลดความซับซ้อนลงมาก ภาษากลางดังกล่าวก็คือ ภาษา C นั่นเองครับ
การออกแบบภาษา C เข้าลักษณะภาษาเฉพาะกิจ ผู้ออกแบบ คงไม่ได้คาดว่า มันจะเป็นที่นิยมมากในเวลาต่อมา ดังนั้นเป้าหมายตอนออกแบบคือเน้น Productivity มากกว่าเน้นความสวยงาม ดังนั้นภาษา C จึงดูค่อนข้างยากเมื่อเทียบกับภาษาอื่นๆ ภาษา C มีจุดเด่นอยู่หลายข้อ แต่ที่กล่าวว่าเป็นจุดเด่น แต่ละข้อนั้น บางคนก็ว่า มันคือจุดด้อยต่างหาก ผมว่ามันขึ้นอยู่กับรสนิยมของผู้ใช้งานเหมือนกัน
ภาษา C มีจุดเด่น คือ สั้น กะทัดรัด ภาษา C มีรูปแบบย่อทำให้เขียนสั้นลงอยู่มาก ซึ่งข้อดีก็คือ สั้นดีครับ แต่ข้อเสีย ก็คือ ซับซ้อน อ่านยาก เวลาอ่านก็เหมือนกับการแก้สมการ คุณอาจจะบอกว่า คุณเลือกที่จะเขียนแบบไม่ซับซ้อนก็ได้ แต่พูดยากครับ คุณไม่เขียน แต่คนอื่นเขาเขียนครับ ถ้าคุณไม่เรียนรู้เสียเลย คุณก็อ่าน Code คนอื่นไม่รู้เรื่อง และการใช้ วงเล็บปีกกา ซึ่งดูคล้ายกับวงเล็บธรรมดา เวลาเขียนโปรแกรมก็สับสนพอสมควร จุดอ่อนอีกจุดหนึ่งที่สำคัญของภาษา C ก็คือ ภาษา C มองทุกอย่างเป็น Case Sensitive ทำให้เขียนโปรแกรมแล้วหลงเรื่อง Case เป็นประจำ
จุดเด่นที่สุดของภาษา C คือการรองรับ pointer นั้นอาจจะมองได้ว่าคือจุดอ่อนที่สุดของภาษา C ทำไมถึงเป็นเช่นนั้น
pointer คือความสามารถที่ภาษา อนุญาตให้เราสามารถอ่านเขียนหน่วยความจำได้โดยตรง ซึ่งประสิทธิภาพสูงมาก (สูสีกับภาษา Assembly) เปรียบได้กับเราเปิดร้านขายของชำ แล้วบอกลูกค้าว่า เพื่อความรวดเร็ว ไปหยิบของเองเลย แล้วมาจ่ายเงินก็แล้วกัน ซึ่งวิธีนี้เร็วมากครับ ลูกค้าไม่ต้องรอเราเป็นผู้หยิบให้เลย เขาหยิบได้เอง แต่ความสะดวกนี้ ก็ต้องแลกครับ ถ้าลูกค้าคนนั้นเมา เดินเตะของพังหมด หรืออาจจะขโมยด้วยซ้ำ ยุ่งมากครับ โดยความเห็นส่วนตัวแล้ว ผมว่าจุดนี้มีผลเสียร้ายแรง โปรแกรมที่เขียนด้วยภาษา C ส่วนมากแล้ว ถึงแม้จะคอมไพล์ผ่านแล้ว น้อยโปรแกรมครับ ที่จะทำงานได้โดยไม่รวนระบบ เวลาเขียนโปรแกรมภาษา C ต้องเผื่อว่าการ debug โปรแกรมไว้ให้มาก
อีกปัญหาหนึ่ง ก็คือตัวของภาษา C ไม่มีตัวจัดการจองหน่วยความจำในตัวเอง เมื่อเวลาเราต้องการจองหน่วยความจำแบบ Dynamic ภาษา C ทำ wrapper เพื่อติดต่อกับ OS เพื่อขอจองหน่วยความจำโดยตรง ปัญหาก็คือ การติดต่อกันระหว่างโปรแกรมของเรากับ OS เป็นไปอย่างหลวมๆ ถ้าโปรแกรมลืมบอก OS ว่าเลิกจองหน่วยความจำดังกล่าว หน่วยความจำนั้นก็จะถูกจองไปเรื่อยๆ เราจะเห็นเครื่องคอมพิวเตอร์ทำงานได้เร็วในตอนเช้า แต่พอตกบ่ายก็ช้าลงจนทำงานไม่ไหว จนสุดท้ายต้อง boot ใหม่ สาเหตุหลักของปัญหานี้คือ สิ่งที่เรียกว่าหน่วยความจำรั่ว หรือ Memory Leak ก็เรื่องจองแล้วลืมเอาคืนนั่นแหละครับ
ภาษาเคย C ถูกใช้เป็นบทพิสูจน์ว่าคุณเป็นโปรแกรมเมอร์ระดับดีหรือไม่ ถ้าโปรแกรมเมอร์คนไหน เขียนภาษา C ไม่ได้ เขาจะดูถูกเอา ภาษา C จึงดูเป็นของโก้เก๋ เอาไปคุยข่มกันได้ ในยุคหนึ่งมีการกล่าวกันว่า ถ้าคุณเขียนภาษา C ไม่เป็น คุณไม่ใช่โปรแกรมเมอร์ที่แท้จริง แต่ผมว่า โปรแกรมเมอร์ที่แท้จริงตายไปเยอะแล้วครับ
เห็นผมบ่นภาษา C แต่คงต้องบอกก่อนว่า ผมรักภาษา C มากที่สุด ก็ผมโตมากับมันนี่ครับ วันนี้ภาษา C ก็เสื่อมความนิยมไปมากแล้ว ตั้งแต่ GUI OS อย่าง Windows เข้ามามีบทบาท ภาษา C ปรับตัวเองเข้ากับการเขียนโปรแกรมแบบ GUI ไม่ค่อยได้ จึงเสื่อมความนิยมไปเกือบหมด คงเหลือแต่การใช้งานบน UNIX เท่านั้นครับ ที่ยังคงพอใช้ภาษา C กันอยู่
จุดเด่นของภาษา C อีกข้อก็คือ เรามีหนังสือ Algorithms ดีๆ ที่ใช้ภาษา C อ้างอิงอยู่มากครับ ถ้าคุณต้องการศึกษา Algorithm คุณจะไม่ผิดหวังครับจากหนังสือภาษา C
-----------------------------------------------------
2) ภาษา C++
ภาษา C++ เป็นลูกผสมระหว่างภาษา Simula และ ภาษา C นั่นเอง ภาษา C++ รับเอาแนวคิดของภาษา C มากว่า 95% ประยุกต์เข้ากับแนวคิดเชิงวัตถุของ Simula ทำให้ภาษา C++ เป็นลูกผสมระหว่าง Procedural Language และ Object Oriented Language เราไม่สามารถบอกได้ว่า C++ เป็น OOP 100% มันไม่ใช่ครับ คุณเลือกแบบภาษา C ก็ยังได้
ในยุคหนึ่งภาษา C++ เป็นภาษาที่ถูกพิจารณาว่าทำงานช้า ก็เล่นไปเปรียบเทียบกับภาษา C หรือ Assembly นี่ครับ ภาษา C++ อิงกับการใช้งาน Indirect pointer อยู่มาก แต่ยุคนี้ภาษา C++ ถูกพิจารณาว่าเป็นภาษาที่ทำงานบน GUI OS ได้เร็วที่สุด (2 ภาษาข้างต้นยุ่งยากเกินไป) ดังนั้น โปรแกรมเมอร์ที่แท้กลับมาอีกแล้วครับ โปรแกรมเมอร์ที่แท้ต้องเขียน C++ ได้ ผมว่ามันไปกันใหญ่แล้วครับ
ภาษา C++ เป็นภาษาที่ละโมบพอสมควรครับ การออกแบบเน้นให้เป็นภาษา Superman มีโครงสร้างครบถ้วนที่สุด ปรับแต่งได้แทบทุกจุด ทำให้ Syntax ของภาษา C++ มีความซับซ้อนมาก โดยเฉพาะอย่างยิ่ง ความต้องการที่รองรับ Generic Programming และ Multiple Inheritance ทำให้ภาษา C++ ตั้งปรับโครงสร้างของภาษา เพื่อให้รองรับได้ แต่มีโปรแกรมน้อยกว่า 1% ครับที่ดึงเอาความสามารถเหล่านั้นมาใช้งานจริงๆ แต่โปรแกรมอีก 99% ต้องรองรับความยุ่งยากของ Syntax มีหลายคนว่าไม่คุ้มครับ
ถ้าจะกล่าวไปแล้ว ภาษา C++ รองรับ OOP ค่อนข้างเต็มรูป แต่นั่นแหละครับ มันเหมือนกับการตายน้ำตื้น ที่ภาษา C++ ยังยอมรับ pointer และการจอง Memory จาก OS ทำให้เกิดปัญหาเดียวกับภาษา C ซึ่งยังแก้ไม่ตกในยุคปัจจุบัน ทุกวันนี้ เรายังเห็นโปรแกรมจากบริษัทใหญ่ๆ เขียนจากโปรแกรมเมอร์ระดับโลก มีปัญหาเรื่อง Memory Leak อยู่ และ Pointer ชี้ออกนอกลู่นอกทางก็ยังเห็นอยู่ทั่วไปครับ
ถ้าใครคิดจะศึกษา OOP ให้ลึก แต่ไม่สามารถอ่านภาษา C++ รู้เรื่อง ผมว่ายากครับ หนังสือเกี่ยวกับ OOP ดีๆ ส่วนมาก จะอิงกับภาษา C++ ครับ
-----------------------------------------------------
3) ภาษา C#
คงไม่ต้องกล่าวอะไรมากนักสำหรับภาษา C# เราศึกษากันมาพอสมควรแล้ว ผมแค่อยากกล่าวว่า C# นั้นลอก Java มาครับ Microsoft มีจุดไม่ดีมากๆ ก็เรื่องชอบลอกนี่แหละครับ Windows ก็ลอก Apple LISA และ Macintosh มา IDE ของการเขียนโปรแกรมก็ลอก Borland มา และอื่นๆ อีกมาก รวมทั้ง .NET Framework ก็ลอก JAVA Platform มาไม่น้อยกว่า 80% แต่ก็นั่นแหละครับ Microsoft เป็นจอมลอกที่มีพรสวรรค์ครับ ลอกแล้ว ถ้าใครไม่ใช่แฟนพันธุ์แท้ จะดูไม่รู้เลยครับ
อีกอย่างคือ Microsoft เป็นจอมกลืนน้ำลาย ถ้า Microsoft สัญญาว่าอะไร อย่าได้เชื่อว่าเป็นจริงนะครับ พลิกลิ้นได้ตลอด Microsoft เป็นบริษัทที่เน้นการค้ามากกว่า Technology นะครับ ถ้าคุณคิดจะคบกับ Microsoft คุณต้องรู้จุดนี้เอาไว้ Microsoft จะทำทุกวิถีทางที่จะล้มคู่ต่อสู้ให้ได้ ตั้งแต่ทำของเลียนแบบ เปลี่ยน platform หนี ไปจนกระทั่งสู้ไม่ได้ก็ซื้อบริษัทมาดองเอาไว้เลย
แล้วทำไมผมถึงให้ความสนใจ C# ที่ผมสนใจนั้น ไม่ใช่เป็นเพราะคำว่า Microsoft หรอกครับ แต่หากเป็นเพราะชื่อ Anders Heijsberg ต่างหาก ผมโตมาผลงานของเขาครับ ผมชื่นชมตั้งแต่ เมื่อตอนหัดใช้งาน Turbo Pascal 2.0 บน CP/M มาถึง J++ และ .NET ในปัจจุบัน ผมมีความรู้สึกเองว่าครั้งนี้ Microsoft เอาจริง สร้าง .NET Framework ให้คนที่เป็นนักวิทยาศาสตร์คอมพิวเตอร์ มือเซียนๆ ร่วมกันออกแบบ ผมเลยชอบครับ
ยิ่งรู้ว่า สิ่งที่ Sun ตัดออกจาก JAVA หลายอย่างที่ดีๆ เช่น enum, pass by reference และกลิ่นอายของภาษา C ที่ผมรัก จะได้คืนมา ผมก็สนใจเต็มที่ครับ
ถ้าจะพูดถึงข้อดีแต่ของ C# โดยไม่พูดถึง .NET Framework ก็คงไม่ได้ ถ้าพิจารณาถึง .NET Framework ผมพูดได้คำเดียวว่า ใช่เลย!
แต่สิ่งหนึ่งที่คนทั่วไป ไม่ค่อยเข้าใจว่าทำไม C# จึงเอา Pointer กลับมาอีก ผมเองก็พูดยากครับ ว่าเห็นด้วยหรือไม่เห็นด้วย ถ้า pointer กลับมาแบบภาษา C หรือ C++ ผมคงรับไม่ได้ แต่ pointer แบบ C# นั้นต้องตั้งใจจริงๆ ถึงจะใช้งานได้ ต้องเพิ่ม Syntax และ เวลา คอมไพล์ต้องระบุให้ชัดเจนว่ายอมรับ pointer จึงจะใช้ได้ Microsoft ให้เหตุผลหลักในการคงไว้ซึ่ง pointer ก็คือ การเชื่อมต่อกับ ภายนอก .NET เช่น COM Component เป็นต้น ผมว่า มันก็ฟังขึ้นเหมือนกัน
ตอนนี้ก็วัดใจ Microsoft ครับ ว่าจะแจก .NET Framework ฟรีหรือไม่ ถ้าฟรี Java ก็คงต้องเหนื่อยอีกเยอะครับ และระยะหลังมานี้ Microsoft ตัด Java ออกจาก Windows XP แล้ว Microsoft เวลานี้ มี C# ที่เหนือกว่า JAVA Script หลายขุม และ .dll ที่สามารถใช้งานได้เหมือนกับ Applet ครั้งนี้ ผมว่า Microsoft ชักธงรบแล้วครับ
ใครบอกว่า JAVA หยั่งรากลึก ยากที่จะถูกล้ม ผมอยู่วงการนี้มาเกือบยี่สิบปีแล้ว ผมว่าผมไม่เห็นด้วยนะ คำแบบนี้ผมได้ยินมาเยอะครับ ตั้งแต่ Apple ][ มีโปรแกรมกว่า 40,000 โปรแกรม IBM PC จะมาล้มได้อย่างไร หรือ Windows จะมาแทน DOS ได้อย่างไร ในเมื่อโปรแกรมที่เราใช้ทุกวันนี้ เป็น DOS ทั้งหมด จะเลิกใช้ได้อย่างไร ผมว่าไม่มีใครสนหรอกครับ ถ้าดีกว่า คนก็พร้อมที่จะเปลี่ยนครับ
No comments:
Post a Comment