Tour de France #2: Platform

   

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

Windows Platform

    GUI OS มีมานานแล้ว ตั้งแต่ยุคปี 80 ซึ่งผู้ที่ทำให้ GUI OS โด่งดังก็คือ Xerox เขาสร้าง SmallTalk ขึ้นมา จากนั้นค่ายของ Apple และ Unix ต่างก็เอามาเลียนแบบ ซึ่งผู้ที่เป็นผู้นำเรื่อง GUI OS ในระดับ Hi-end ในยุคก่อน นั่นก็คือ Solaris ของ Sun นั่นเอง แต่ปัจจุบัน ถูกล้มแชมป์ไปแล้วครับ

    เป็นที่ยอมรับกันว่า GUI OS แบบของ Microsoft นั้น ประสบผลสำเร็จมากที่สุด โปรแกรมในยุคปัจจุบัน ก็อยู่บน Platform นี้กันมาก มีภาษาต่างๆ ที่นิยมใช้สำหรับสร้าง Application บน Windows Platform ซึ่งเรื่องนี้แน่นอนครับว่า Microsoft เป็นผู้นำ มี Visual Basic สำหรับงาน Application ทั่วไป และมี Visual C++ สำหรับงานเฉพาะที่ต้องการความเร็วหรือที่ต้องยุ่งเกี่ยวกับเรื่องลึกๆ ซึ่งที่สองตามมาคงจะเป็น Borland ซึ่งออก Delphi และ C++ Builder ออกมาแข่งกับ Microsoft แต่ที่หนึ่งกับที่สองนั้นทิ้งห่างกันมากครับ

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

    คำว่า Windows Platform ในที่นี้ ผมหมายความถึงการสร้าง Application แบบ Form/Frame เราอาจจะเรียกว่า GUI Application ซึ่งไม่เกี่ยวกับ Web แต่อย่างใด งานที่โปรแกรมเมอร์ส่วนมากยังต้องเจอ ก็คือการเขียนโปรแกรมทางธุรกิจบน Windows Platform ซึ่งงานที่ซับซ้อนนั้นยังคงต้องใช้งาน Windows Platform อยู่                                                                                                                                                                                                                                                             

Web Platform

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

    Microsoft ถือว่าเป็นบริษัทที่เข้ามาสู่ Internet ค่อนข้างช้า Microsoft ในอดีตไม่เชื่อว่า Internet ต่อมาจะได้รับความนิยมอย่างปัจจุบัน ในยุคนั้น Microsoft สร้าง Microsoft Network เอาไว้แข่งขันกับ Internet แต่เมื่อเวลาผ่านไป เมื่อ Microsoft รู้ตัวเองว่าคิดผิด ก็กลับลำใหม่อย่างรวดเร็ว บุกตลาดด้านนี้อย่างเต็มที่ ปัจจุบันนี้ Microsoft สร้าง .NET Platform ขึ้นมาแข่งกับ Java อย่างสูสี

    Java สร้าง Java Platform โดยที่เน้น Portability เป็นหลักประสิทธิภาพไม่ค่อยได้สนใจนัก  และรุ่นแรกๆ ของ Java นั้นค่อนข้างแย่ ความ Stable ไม่ค่อยมี แต่ผ่านร้อนผ่านหนาวมาเยอะครับ จนวันนี้ มีความ Stable ค่อนข้างสูง ซึ่งนับได้ว่าเป็นจุดขายอีกจุดของ Java ดังนั้นเมื่อ Microsoft จะออก .NET Framework มาแข่ง จึงต้องหากลยุทธ์มาต่อสู้ เรื่อง Portability นั้น วันนี้คงยังห่างไกลกับ Java อยู่มาก เพราะทำงานได้บน Windows เท่านั้น อาจจะมี Linux, FreeBSD อยู่บ้าง แต่คงต้องดูที่ต่อไปอีกยาวครับ

    แล้ว .NET Framework จะแข่งตรงไหน จุดขายคงจะอยู่ที่ Multi-language ที่ไม่จำเป็นต้องผูกตัวเองกับภาษาใดภาษาหนึ่ง ประสิทธิภาพก็เป็นอาวุธสำคัญ ถ้าเลือกได้ ใครๆ ก็คงอยากได้งานที่มีประสิทธิภาพกว่า

    เท่านั้นยังไม่พอครับ ความง่ายยังเป็นจุดขายหลักของ .NET Framework อีก .NET Framework สร้าง ASP.NET  และ Web Service แบบ Microsoft ในความคิดของผม ผมว่ามันลงตัวที่สุด ง่ายมาก และ Productivity สูง

    ความ Stable ก็จะเป็นจุดขายต่อไป Microsoft ทุ่มเทเรื่องนี้ค่อนข้างมาก ตั้งแต่ .NET Framework Beta 1 มีความ Stable สูงมาก ซึ่งผมว่าน่าจะแข่งเรื่องนี้กับ Java ได้โดยไม่ยากนัก

    จุดหนึ่งที่บั่นทอนกำลัง ของ .NET Framework นั่นก็คือ Security ครับ OS แบบ Microsoft ที่ได้ชื่อว่าเป็น OS ที่หละหลวมเรื่องนี้มาก IIS เป็นเป้าโจมตีของ Hacker และ Virus ทั้งหลาย ซึ่งเราก็ได้ข่าวเรื่องนี้อยู่บ่อยๆ ถ้า Microsoft สามารถแก้ปัญหาเรื่องนี้ได้ ผมว่าอนาคตของ .NET Framework สำหรับ Web นั้นสดใสมากครับ

    ข้อดีของการพัฒนา Software บน Web ก็คือ ความสามารถที่เราจะ Access ได้ทุกที่ เขียน Copy เดียวใช้งานได้บน OS ใดก็ได้ โดย ผ่าน Web Browser ซึ่ง Web Browser เป็น Software ขนาดเล็ก ไม่กินกำลังเครื่องมาก ดังนั้น เราจึงสามารถประหยัดทรัพยากรทาง Hardware ได้มาก  เราเรียกว่า Client แบบนี้ว่า Thin Client ครับ แต่ความสะดวกในการใช้งานตลอดจนความสวยงามและความเร็วและการรองรับความซับซ้อน ก็ยังเป็นรอง GUI Application อยู่ครับ ถ้าใครๆ มาบอกคุณว่า โลกนี้ใช้ Web แทน GUI Application หมดแล้ว บอกได้เลยว่าโกหก Web ยังคงต้องพัฒนาอีกมาก ถึงจะสามารถได้ความสามารถที่ GUI Application มีครับ

Non PC Platform

    ทุกวันนี้การเขียนโปรแกรมของโปรแกรมเมอร์ต่างๆ ก็เลยเครื่องคอมพิวเตอร์ไปแล้ว อุปกรณ์ต่างๆ ก็สามารถโปรแกรมกันได้โดยใช้ภาษาระดับสูง แทนที่จะเป็นภาษาจำพวก Assembly หรือ C ในยุคอดีต วันนี้ถือได้ว่า Java เป็นพระเอกสำหรับเรื่องนี้ จุดที่ทำให้ Java เป็นพระเอกเรื่องนี้ก็คือ รถสำรวจ Mars Global Surveyor ที่ไปสำรวจดาวอังคาร ใช้ภาษา Java ในการเขียนควบคุม ทำให้ Java โด่งดังไปถึงดาวอังคารโน้นเลย เรื่องนี้ยิ่งเสริมภาพพจน์ของ Java ขึ้นไปอีก จากนั้นเราก็จะได้ยินข่าว ทำนองการเอาไปใช้ในอุปกรณ์ต่างๆ อีกมาก ตั้งแต่เครื่องคอมพิวเตอร์มือถือ โทรศัพท์มือถือ ไปจนกระทั่งเตาปิ้งขนมปัง ซึ่งนั่นก็เป็นจุดขายของ Java ครับ

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

    Web Page นี้ผมตั้งใจเขียนให้สำหรับโปรแกรมเมอร์มือใหม่ที่ยังจับแนวทางไม่ถูก ดังนั้นผมขอเน้นแนวโน้มที่กำลังแรง ถ้ามีโอกาสควรจะรีบศึกษานั่นก็คือ เครื่องคอมพิวเตอร์พวกมือถือจำพวก Palm และ Pocket PC ล่าสุด Java เริ่มเข้าโจมตี Pocket PC ชิงหัวหาดให้ได้ก่อน .NET Framework แต่คงต้องดูยาวๆ ครับ ศึกษาเอาไว้นะครับ อนาคตอันใกล้ มันจะเป็นตลาดที่ใหญ่มากสำหรับโปรแกรมเมอร์ครับ

Database

    ตลาดงานคอมพิวเตอร์สำหรับโปรแกรมเมอร์นั้นกว่า 90% เป็นงานทางธุรกิจ ซึ่งงานด้านนี้มีความจำเป็นอย่างยิ่งที่ต้องใช้ฐานข้อมูล งานทางด้านฐานข้อมูลจะถูกแทรกไปในทุก Platform ที่ผมกล่าวข้างบน ผมว่าโปรแกรมเมอร์เมืองไทยทุกวันนี้ค่อนข้างจะอ่อนมากในด้านนี้ บางคนขอเพียงแค่ดึงข้อมูลออกมาได้ก็เพียงพอ ไม่สนใจเรื่องประสิทธิภาพ ซึ่ง ตำราการสอนเขียนโปรแกรมภาษาไทย ส่วนมากก็มีเรื่องการติดต่อกับฐานข้อมูล แต่มันน่าเศร้าตรงที่ว่า เนื้อหาตื้นเขินมาก แบบว่าไม่ต้องอ่าน ดูจากแฟ้มตัวอย่างที่ให้มากับ Software  ยังลึกกว่า ผมไม่อยากวิจารณ์อะไรมากเรื่องนี้ เพียงแค่อยากแนะนำว่า ใครที่อ่อนภาษาอังกฤษ หัดอ่านเยอะๆ ครับ

       งานทางด้านฐานข้อมูลยังเปิดกว้างอยู่มาก ถ้าไปทำงานทีไหนก็ตาม ความสามารถเรื่องฐานข้อมูล มักจะเป็นหัวข้อหลักในการพิจารณา ผมขอเล่าให้ฟังแบบกว้างๆ ก็แล้วกัน เรื่องเกี่ยวกับฐานข้อมูล

    อย่างแรกเรามาดูฐานข้อมูลโบราณกันก่อน พวก dBase Paradox พวกนี้เป็นสิ่งที่เราเรียกว่า Flat file พวกนี้เป็นฐานข้อมูลอย่างง่าย ซึ่งคงไม่ค่อยมีคนใช้งานกันแล้วทุกวันนี้

    จากนั้นมีการพัฒนา Database ตัวใหญ่ขึ้น ที่ยึดหลัก Relational Database ของ Dr. Codd จาก IBM ซึ่งในยุคนั้น ตัวใหญ่ๆ ที่เป็น Host-based คือมีเครื่อง Computer หลักและใช้ Dumb Terminal ก็คือ Oracle และ Informix จากนั้น น้องใหม่ คือ Sybase เริ่มคิดใหม่ทำใหม่ ปรับ Relational Database เสียใหม่ เป็นสิ่งที่เราเรียกกันว่า Client/Server ซึ่งลักษณะการเขียนแบบ Client/Server นั้นไม่เหมือนกับ Host-based แบบเก่า ถ้าคุณถามผมว่า Host-based หรือ Client/Server อันไหนดีกว่ากัน ผมคงตอบว่า Host-based แต่เนื่องจาก Host-based มีต้นทุนสูงมากต้องลงทุนกับ Server ราคาสูงมาก การใช้ Client/Server จึงเป็นการลดต้นทุน แต่คุณก็ต้องแลกมาด้วยประสิทธิภาพ ซึ่งถ้าคุณไม่เข้าใจธรรมชาติของมัน ประสิทธิภาพจะไม่เหลือเลย เรื่องนี้คุณต้องศึกษาเอาเองครับ มันเกินขอบเขตที่ผมจะเขียนหน้านี้

    ทุกวันนี้ Host-based Database ไม่เป็นที่นิยมแล้ว เพราะค่าใช้จ่ายต่างกับระบบ Client/Server ไม่น้อยกว่า 10 เท่า DBMS ค่ายต่างๆ จึงหันมาเป็น Client/Server กันหมด ทุกวันนี้เครื่อง PC ธรรมดาก็มีศักยภาพในการรองรับ DBMS เหล่านี้ ทุกวันนี้ DBMS ที่ดังๆ ก็มี Oracle, MSSQL, Sybase และ DB/2   (Informix ถูก DB/2 ซื้อไปเรียบร้อยแล้ว) พวกนี้ล้วนแล้วแต่เป็น Client/Server ทั้งหมดแล้วครับ

    ผมค่อนข้างเบื่อมากที่มีคนชอบเถียงกันวัน DBMS ตัวไหนเร็วกว่ากัน อย่าได้เอาเรื่องราคามาเปรียบเทียบนะครับ มันไม่ใช่ประเด็นเลย DBMS เหล่านี้ทุกตัวมันเร็วพอๆ กัน เพราะภายในมันใช้หลักการไม่ต่างกัน โปรแกรมเมอร์ของผมเคยออกรายงานตัวหนึ่ง ใช้เวลาคำนวณ 4 ชั่วโมง ใช้เครื่อง Server  คือ Sun Sparc 4000 ซึ่งถือว่าเป็นแนวหน้าในยุคนั้น ในสมัยนั้น Database เป็น Sybase ครับ มีคนแนะนำว่าเปลี่ยนเป็น Oracle สิ เร็วกว่าเยอะ (เปลี่ยนไม่ได้หรอกครับ ซื้อมาตั้ง 2 ล้าน) และมันไม่จริงเลย ผมเชื่อว่า ถ้าผมเปลี่ยนเป็น Oracle มันก็ 4 ชั่วโมงเหมือนกัน ผมจับมาวิเคราะห์ Source Code ดูก็เห็นว่า การเขียนนั้นไม่ได้สอดคล้องกับ Client/Server ผมเลยให้ปรับโปรแกรมใหม่ ผลลัพธ์ออกมา เหลือแค่ 10 วินาทีเท่านั้น นิทานเรื่องนี้สอนให้รู้ว่า Database ทำงานช้า มักไม่ใช่เกิดจาก Hardware ระดับไม่ถึง มันเกิดจากการเขียนโปรแกรมไม่ดีต่างหาก

    จริงอยู่ที่ MSSQL Server และ Oracle สูสีกัน แต่ผมไม่ได้บอกว่า Access กับ Fox Pro  จะสูสีด้วยนะครับ พวกนี้ห่างกันมาก คุณจะยังไม่รู้จนกว่าข้อมูลเริ่มเยอะครับ

    ภาษาที่เป็นมาตรฐานสำหรับ Relational Database นั่นก็คือ SQL ซึ่งจะว่าง่ายก็ง่ายนะครับ มีคำสั่งหลักๆ อยู่แค่ 4 คำสั่งคือ Select, Delete, Update, Insert คำสั่งที่ใช้บ่อยที่สุดคือ Select ถ้าคุณคิดว่า คำสั่งนี้ง่ายๆ แล้วละก็ คิดใหม่ครับ กุญแจของความเก่งกาจของ SQL ก็อยู่ที่คำสั่ง Select นั่นเอง มันเป็นหัวใจของประสิทธิภาพทั้งหมด คำสั่ง Select ซับซ้อนไม่ใช่เรื่องแปลก งานที่ผมทำอยู่นั้น SQL ซับซ้อน 3-4 หน้ากระดาษ ถือว่าเป็นเรื่องปกติ ดังนั้นถ้าใครมาถามผมว่า MySQL เป็นอย่างไร ผมว่ามันเพิ่งเริ่มต้นครับ มีดีที่ฟรีเท่านั้น ถ้าเอามาแข่งกับพวกระดับใหญ่ ยังห่างกันมากครับ คงต้องใช้เวลากันหลายปี (แต่ถ้า Web Server กับ MySQL เป็นตัวเดียวกัน ก็คงพอดูได้ครับ)

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

    มาพูดถึง Database Access Library บ้าง ดูเหมือนเรื่องเล็ก แต่ผมว่าไม่ใช่นะครับ ในอดีตนั้น ถ้าเราต้องการเขียนโปรแกรมติดต่อกับฐานข้อมูลใด เราก็ต้องไปซื้อ Library ที่ผู้ผลิต Software ตัวนั้นเตรียมมาให้เช่น ถ้าต้องการติดต่อกับ Paradox ก็ต้องใช้ Paradox Engine ถ้าต้องการติดต่อ Sybase ก็ต้อง db-lib/ct-lib เป็นต้น ซึ่งเรื่องนี้ก็ความยุ่งยากให้กับโปรแกรมเมอร์มาก ดังนั้น Microsoft จึงคิดค้น ODBC ขึ้นมา เพื่อให้การเขียนโปรแกรมเป็นแบบเดียวกัน แต่มี Plug-in เพื่อแปลงให้เป็นฐานข้อมูลต่างๆ ยอดนิยมมากครับ และ Microsoft ก็สร้าง Jet Engine ขึ้นมา เพื่อติดต่อกับ Database พวก Xbase และ Access จากนั้นก็สร้าง DAO ขึ้นมาครับ เพื่อให้ VB ใช้ง่ายๆ เมื่อ VB ถ้าผมจำไม่ผิด ก็ตั้งแต่รุ่น 3.0 ก็มี DAO ใช้ ทำให้สามารถเรียกใช้ ฐานข้อมูลได้สบายมาก ไม่ว่าติดต่อกับ Database ตัวใด ก็ไม่ต้องเรียนรู้ใหม่เลย ใช้ Syntax ชุดเดียวกัน โดยที่ DAO แปลงเป็น ODBC หรือ JET ตามความเหมาะสม เขียนโปรแกรมง่ายมากครับ เรื่องนี้เองทำให้ VB ได้รับความนิยมสูง เขียนง่าย และได้งาน

    จาก DAO มีการพัฒนามาเป็น RDO และสุดท้ายคือ ADO ซึ่งเป็นตัวที่ทำให้ตัวอื่นห่างชั้นไปเลย ทางด้าน Java ก็มีการพัฒนาทางด้าน Database เหมือนกัน แต่ความง่ายและประสิทธิภาพก็สู้ ทาง Microsoft ไม่ได้ ฝากบอกกันหน่อยว่า ถ้าสื่อไหนยังคงพูดถึง DAO ก็คงต้องบอกว่าล้าสมัยเต็มทน Microsoft ประกาศเลิก Support DAO มา 3 ปีแล้ว พิจารณาหน่อยครับ (ADO.NET ก็เป็นตัวใหม่ครับ แต่ถ้าจะให้ผมวิจารณ์ตรงๆ มันไม่ใช่คิดใหม่ทำใหม่ครับ มันเป็นทำนองคิดไปทำไปมากกว่า ADO.NET นั้น ยังไม่ได้แสดงให้เห็นว่าการดึงข้อมูลนั้น ดีขึ้นแต่อย่างใด ในทางตรงกันข้าม มันช้าลงอีกต่างหาก ทำไมผมถึงพูดเช่นนั้น การที่ ADO.NET แยกเอา Dataset อิสระกับ Connection ทำให้ Dataset ต้องทำงานเป็นแบบ Client Cursor เท่านั้น ไม่สามารถทำงานแบบ Server Cursor ได้ ในงานบางประเภท ประสิทธิภาพตกฮวบครับ ถึงผมจะเป็นคนที่ชอบของใหม่ แต่ผมไม่ขึ้เห่อนะครับ ไม่ใช่พอมีของใหม่ออกมา ก็เหยียบของเก่าเลย)

 

    แต่วันนี้กำลังจะเปลี่ยนไปครับ Sun กำลังจะแซง Microsoft แล้วครับ ADO.NET ท้ายสุดอาจจะแพ้อาวุธลับใหม่ของ Sun นั่นก็คือ JDO ตัวของ JDO ถ้ามองกันด้านการติดต่อ Database แบบ Relational ผมว่ามันยังสู้ DAO ไม่ได้เลยด้วยซ้ำไป แต่ผมกลัวตัวนี้ครับ ถ้าเปรียบเทียบระหว่าง .NET Framework กับ Java Platform แล้วถามผมว่ามีอะไรที่ .NET Framework สู้ไม่ได้ ก็คงต้องตอบว่า JDO นี่แหละครับ มันจะนักเชียวกับ Library ตัวเล็กๆ นี้ เรื่องนี้มีที่มาครับ

    ทุกวันนี้ คนเขียน Object Oriented เป็นจริงๆ มีน้อยมากครับ มีแต่ OO แต่ในนามซะเยอะ เอาไว้บทความหน้าครับ ผมจะมาคุยให้ฟังถึงเรื่องโลก OO กันแบบสนุกๆ ในบทความนี้ เอาเป็นว่า น้อยมากก็แล้วกัน วิธีวัดว่าคุณรู้จัก OO ดีแค่ไหน นั้นไม่ยากครับ ถ้าคุณคิดว่า OO ไปกันได้ด้วยดีกับ Relational Database แสดงว่าคุณยังรู้จัก OO ไม่พอครับ OO กับ Relational Database นั้นแทบจะเข้ากันไม่ได้เลย Model ในการเขียนโปรแกรมที่เข้ากับ Relational Database ได้ดี ก็คือ Data-Oriented Model เช่น OMT เป็นต้น แต่ทำยังไงได้ครับ Relational Database มันครองโลกอยู่

    Database ที่เข้ากันได้กับ OO นั้นก็ต้องเป็น ODBMS ซึ่ง ไม่ว่าตัวที่เรารู้จักทุกวันนี้เช่น Oracle เป็นต้น ก็ไม่ใช่ Model นี้ครับ Oracle เป็นเพียง Object Relational Dabase เท่านั้น ODBMS ในท้องตลาดก็มีหลายยี่ห้อครับ ที่ดังๆ ก็มี ObjectStore, Versant, Objectivity หรือ POET เป็นต้นครับ บางคน ที่พอรู้เรื่อง ก็บอกว่า ให้มอง 1 Table ใน Relational Database ให้เป็น 1 Class ใน ODBMS ผมว่าถ้าออกแบบกันอย่างนี้ คงไปไม่พ้นอ่าวครับ ล่มแบบยังเห็นฝั่ง ไปได้ไม่ไกลเลย

    ODBMS ที่แท้ก็คือ ฐานข้อมูลที่เก็บ Object นั่นเอง Object ที่เราสร้างในหน่วยความจำ เราสามารถนำขึ้นไปเก็บบน ODBMS ได้โดยความสามารถที่เรียกว่า Persistent อย่างที่ผมเคยพูดถึง ซึ่ง ODBMS จะสามารถทำงานทดแทน Relational Database ได้เลย บางยี่ห้อสามารถเรียกใช้ผ่านคำสั่ง SQL ได้อีกต่างหาก

     ODBMS มีมานานแล้วครับ แต่ไม่ดัง เพราะไม่มีมาตรฐาน ต่างกับ Relational Database ที่ Dr. Codd วางรากฐานเอาไว้ แถมยังสร้าง SQL ให้ใช้คู่กันอีกต่างหาก สำหรับ ODBMS นั้นอิสระครับ ต่างคนต่างทำ เลยไม่มีใครเด่น แต่ระยะหลังมา เริ่มมีการพยายามพัฒนามาตรฐานสำหรับ ODBMS โดยกลุ่มที่ชื่อว่า ODMG (Object Data Management Group) สร้างมาตรฐานเอาไว้ ซึ่ง 2 รุ่นแรกนั้นยังลูกผีลูกคน แต่พอมา Version 3 ผนวกเอา Spec ของ SQL3 ปี 99 ที่ออกมา ทำให้ มาตรฐาน ODBMS เริ่มแกร่งแล้วครับ อีกไม่นานโปรแกรมเมอร์จะรู้จักเป็นอย่างดีครับ แต่มันคงทดแทน Relational Database ไม่ได้หรอกครับ เพราะการเรียนแนวคิด OO นั้นยากมากครับ

    แต่ถ้าคุณไม่มี ODBMS มาช่วยงาน คุณก็สามารถสร้าง Wrapper Class เพื่อเชื่อมระหว่างโลกของ OO และ Relational เข้าด้วยกัน แต่มันไม่ใช่เรื่องง่ายครับ กินแรงมาก แถมยังมีข้อจำกัดสูงอีกด้วย

    แต่ถ้าคุณไม่มี ODBMS และ ไม่มี Wrapper Class ถ้าคุณเขียน OO เพื่อเรียก Relational Database โดยตรง คุณไม่ได้เขียนเป็น OO ครับ ดังนั้นโดยทั่วไปแล้ว งานที่ติดต่อกับ Database ส่วนมากก็ยังไม่ใช่ OO เต็มรูปครับ เพราะต้องทำให้เข้ากันได้กับ Relational Database อยู่

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

    ยิ่งไปกว่านั้นเจ้า JDO ที่กำลังจะออกมา กำลังพยายามสร้างมาตรฐานในการติดต่อกับ ODBMS ให้เป็นหนึ่งเดียว เหมือนกับ ที่ Microsoft เคยสร้าง ODBC และ OLEDB ถ้า Sun ทำสำเร็จ ผมว่า Microsoft เป็นรองมากเลยในด้านนี้

สรุป

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