วันเสาร์ที่ ๒๓ มิถุนายน พ.ศ. ๒๕๕๐

ประวัติภาษา BASIC (BASIC Programming Language History)

มีคนถามผมบ่อยๆ ว่า VB6 กับ VB.NET มันต่างกันยังไง? ผมคิดว่ามันจำเป็นจะต้องรู้ประวัติศาสตร์ก่อน เพราะมันจะทำให้เรารู้ว่า ภาษามีพัฒนาการมาอย่างไร เริ่มต้นอย่างไร ปัจจุบันเป็นอย่างไร แล้วจะทำให้เราลุ่มลึกกับภาษาที่เราชอบมากขึ้น เริ่มกันที่จุดกำเนิดครับ

(ภาพ John George Kemeny ด้านขวา และ Thomas Eugene Kurtz ด้านซ้าย ผู้คิดค้นภาษา BASIC)

คำว่า BASIC ย่อมาจากคำว่า Beginner's All-purpose Symbolic Instruction Code ซึ่งถูกคิดค้นโดย John George Kemeny และ Thomas Eugene Kurtz ตอนนั้นทั้งคู่ทำงานที่ Dartmouth College ในอเมริกา เมื่อปี ค.ศ. 1963 (พ.ศ. 2506) โดยมีวัตถุประสงค์เพื่อให้นักศึกษาที่ไม่มีพื้นฐานคอมฯ หรือคณิตศาสตร์ ได้ใช้เพื่อสั่งงานคอมพิวเตอร์เมนเฟรม
(G.E.225) ได้ง่ายขึ้น โดยพัฒนามาจากภาษา FORTRAN II และภาษา ALGOL 60 รุ่นแรกของภาษาถูกเรียกว่า Dartmouth BASIC

กฎ 8 ข้อ ในการออกแบบตัวแปลภาษา BASIC ในยุคเริ่มต้น
1. ง่ายสำหรับผู้เริ่มต้นเขียนโปรแกรม
2. มีลักษณะภาษาแบบ general-purpose programming language หรือ domain-specific language ( DSL) เหมือนภาษา C
3. สามารถเพิ่มความสามารถขั้นสูง สำหรับผู้เชี่ยวชาญได้
4. ทำงานร่วมกันได้ (interactive)
5. มี error messages ที่เข้าใจง่าย ไม่เชิงเทคนิค
6. ต้องทำงานอย่างรวดเร็วกับโปรแกรมขนาดเล็ก
7. ผู้ใช้ไม่ต้องเข้าใจเรื่องอุปกรณ์คอมพิวเตอร์ (computer hardware)
8. ไม่ให้ผู้ใช้ติดต่อโดยตรงกับระบบปฏิบัติการ (operating system)

ในช่วงแรกตัวแปลภาษา BASIC ออกแบบเป็น Compiler ซึ่งเป็นที่นิยมอย่างแพร่หลาย ตั้งแต่ในโรงเรียนมัธยม ไปจนถึงโรงงานอุตสาหกรรม แต่ในปี 1968 Edsger W. Dijkstra ก็เผยแพร่วิธีการเขียนโปรแกรมอย่างเป็นระเบียบ ที่ถูกเรียกว่าการเขียนโปรแกรมแบบมีโครงสร้าง (Structured Programming) และพูดถึงการใช้คำสั่ง GOTO ในภาษา BASIC ว่าทำให้โครงสร้างโปรแกรมซับซ้อน ทำให้เกิดการปรับปรุงภาษาในช่วงหลังๆ

(ภาพ Bill Gates ในยุค 80 ที่บริษัท Micro-soft)

ในปี ค.ศ. 1975 หลังจากที่กำเนิด M.I.T.S.'s Altair personal computer เครื่องแรกได้ไม่นาน Bill Gates และ Paul Allen ก็ได้สร้างตัวแปลภาษา BASIC บน microcomputer สำเร็จและเจรจาร่วมค้ากับ MITS เป็นครั้งแรก ขณะนั้น Bill Gates ยังเรียนนิติศาสตร์อยู่ที่มหาวิทยาลัย Harvard และ Paul Allen ก็เป็นพนักงานอยู่ที่บริษัท Honeywell ที่จริงในปีเดียวกันนั้น Dennis Allison ได้สร้างตัวแปลภาษา BASIC ที่ชื่อ Tiny BASIC ที่คิดค้นโดย Dr. Li-Chen Wang บนเครื่องที่ใช้ CPU 8080 สำเร็จ โดยมี Bob Albrecht เป็นผู้กระตุ้นและสนับสนุนรวมทั้งช่วยเหลือ ซึ่งได้เผยแพร่วิธีการสร้างและให้ source code ในนิตยสารที่ต่อมาเปลี่ยนชื่อเป็น Dr. Dobb's Journal ซึ่งเป็นนิตยสารด้านการพัฒนาซอฟต์ที่โด่งดังทั่วโลก (และคนในวงการ com-sci ควรต้องรู้จักและเคยอ่าน - ผมไม่แน่ใจว่า คำาว่า Dobb จะเกิดจากชื่อของทั้งสองมารวมกันรึเปล่า Dennis + Bob) ณ เหตุการณ์นี้ สังเกตว่าความพยายามในการสร้างตัวแปลภาษา BASIC บน microcomputer ทำให้เกิดบุคคลสำคัญในวงการไอทีที่โด่งดังมากถึง 2 คนด้วยกัน คือ Bill Gates แห่ง Microsoft และ Bob Albrecht แห่ง Dr. Dobb's Journal และนี่อาจเป็นเหตุผลที่ microsoft จะยังคงผลิตตัวแปลภาษา BASIC อยู่ตราบใดที่ยังมี Bill Gates เพราะ Bill Gates สร้างเนื้อสร้างตัวมาจากภาษานี้นั้นเอง

หลังจากที่ทำสัญญาขาย BASIC ไปกับเครื่อง Altair แล้ว Bill Gates ก็ได้ เลิกเรียน แล้วมาตั้งบริษัท Micro-Soft และทำตัวแปลภาษา BASIC ขายในชื่อ Microsoft BASIC ไปยัง microcomputer แบบอื่นๆ และกลายเป็นภาษามาตรฐานบนเครื่อง Apple II จนปี 1979 บริษัท Microsoft ก็ได้งานจาก IBM ในการทำตัวแปลภาษา BASIC บน PC ในแบบ Interpreter (สมัยนั้นเริ่มนิยม Interpreter มากกว่า Compiler) ทำให้ในที่สุดภาษา BASIC ก็เป็นภาษามาตรฐานบน microcomputer ที่ทุกเครื่องต้องมี

ในปี 1981 BBC สถานีข่าวของอังกฤษได้ว่าจ้างให้บริษัท Acorn Computers ทำตัวแปลภาษา BASIC ในชื่อว่า BBC BASIC ซึ่งพัฒนามาจาก Atom BASIC ของบริษัท Acorn Computers เอง โดยเพิ่มความสามารถมากมาย เช่น การเข้าถึง OS และการนำตัวแปลภาษา Assembly มาทำร่วมด้วย เป็นต้น นอกจากนั้นนิตยสาร Creative Computing Magazine ก็ยังเผยแพร่ source code ที่เกี่ยวกับเกมส์และ utilities มากมาย

หลังจากที่ IBM-DOS/PC-DOS/MS-DOS ได้แพร่หลาย จากการเข้าทำตลาดของ IBM ทำให้มีการพัฒนาตัวแปลภาษา BASIC เพิ่มขึ้น เช่น Microsoft ผลิต BASICA, GW-BASIC, QuickBASIC ส่วน Borland ก็ผลิต Turbo BASIC ซึ่งพัฒนาเป็น PowerBASIC ทำให้ภาษา BASIC แข่งขันพัฒนากันไปอย่างมาก มีการเพิ่มความสามารถทางด้านการจัดการ string, ด้าน graphic, ด้านการจัดการ file และเพิ่ม data type ขึ้นอีก และที่สำคัญคือ การพัฒนาให้เป็น Structured Programming ซึ่งเป็นจุดที่โดนโจมตีมากที่สุด โดยการเพิ่มคำสั่งด้าน control structure, subroutine และตัวแปรแบบ local แต่ความนิยมในภาษา BASIC ก็ลดลงพร้อมกับความสำคัญของการเขียนโปรแกรม เพราะเครื่องสมัยใหม่มักจะมาพร้อมกับโปรแกรมสำเร็จรูป ที่ผู้ใช้ไม่จำเป็นต้องเขียนโปรแกรมอีกต่อไป

จนกระทั้งไมโครซอฟต์ได้ผลิตตัวแปลภาษาที่ชื่อว่า Visual Basic ในปี 1991 (พ.ศ.2534) ซึ่งทำให้ภาษา BASIC ได้รับความนิยมอีกครั้ง แต่รูปแบบภาษาก็เปลี่ยนไปอย่างมาก เช่น ไม่มี line number หรือคำสั่ง INPUT อีกเลย เพราะมีพื้นฐานบนแนวคิดแบบ object-based และ event-driven programming ซึ่งสมัยนั้นการใช้ระบบปฏิบัติการแบบมี GUI เช่น Windows กำลังได้รับความนิยมแพร่หลาย ในปีเดียวกันนั้นภาษา BASIC ก็ได้รับการบรรจุในมาตรฐาน ISO 10279-1991

บริษัทไมโครซอฟต์ได้ปรับปรุงตัวแปลภาษา Visual Basic เรื่อยมา พร้อมๆ กับระบบปฏิบัติการ Windows ที่เปลี่ยนไป จนปี 1997 Visual Basic 5.0 ก็เปิดตัวพร้อมทำงานกับ Windows 32bits เท่านั้น เช่น Windows95/98 ก็ได้รับความนิยมไปพร้อมๆ กับการขยายตัวของ Windows ระบบ GUI พัฒนาก้าวไกลอย่างมาก ด้วยความสามารถ ActiveX

ปี ค.ศ. 1998 Visual Basic 6 ก็ถูกพัฒนาให้มีความสามารถหลากหลายทั้งด้าน Graphic, Internet, Data Access(ODBC, OLE DB) และแนวทางการพัฒนาซอฟต์แวร์แบบ Component-based Programming รุ่นนี้ได้รับความนิยมมากที่สุด และกว่าจะปรับปรุงเป็นรุ่นถัดไปได้ก็ใช้เวลานานมาก ขณะที่ต้องขับเคี่ยวแข่งขันกับตัวแปลภาษา JAVA

ปี 2002 Visual Basic 7 หรือชื่อทางการตลาดคือ Visual Basic.NET หรือเรียกย่อๆ ว่า VB.NET ก็วางจำหน่าย แต่กลับประสบปัญหาในการจูงใจให้ผู้ใช้ VB6 หันมา upgrade เพราะโครงสร้าง .NET ตัวใหม่นั้น แตกต่างจากเดิมอย่างมาก เช่น Library, ลักษณะภาษาที่เป็น Hybrid Object-Oriented (เรียกได้ว่าลอก JAVA มาเลย) ซึ่งเป็นปัญหาต่อผู้ใช้ที่ไม่มีพื้นฐาน OO มาก่อน เวลาในการเรียนรู้นาน แต่ก็เป็นแนวทางที่จะต้องปรับปรุง เพราะโดนเปรียบเทียบกับภาษา JAVA เสมอว่า โครงสร้างไม่ดี และไม่เป็น OO ในปี ค.ศ.2003 ก็ออก VB.NET 2003 หรือ VB7.1 เพื่อปรับปรุงข้อบกพร่องบางส่วน

ในปี 2005 ทางไมโครซอฟต์ประกาศ .NET Framework 2.0 ซึ่งพัฒนา Visual Basic.NET 2005 หรือ VB8 มาด้วย ซึ่ง Visual Basic.net 2005 พัฒนาอะไรไปบ้าง จะขอกล่าวในอีกบทความนึงต่างหาก

ปัจจุบันตัวแปลภาษา BASIC ของบริษัทอื่นก็ยังมีให้เห็นบ้าง เช่น Bywater BASIC และ True BASIC ที่เป็นของบริษัทที่ John G. Kemeny และ Thomas E. Kurtz ผู้คิดค้น ได้ก่อตั้งมา (True BASIC มีเวอร์ชั่น ที่ทำงานได้หลายแพลตฟอร์ม เช่น DOS, Windows, Mac OS) หรือแม้กระทั่งในวงการ open-source ก็ยังมีการพัฒนาตัวแปลภาษานี้ เช่น MiniBASIC (interpreter) ซึ่งเขียนด้วยภาษา C

ดัชนีชื่อตัวแปลภาษา BASIC
Dartmouth BASIC - BASIC ตัวแรกของโลก

ฟรี
Bas BASIC Interpreter - Unix-based BASIC interpreter
Basic4GL - free BASIC compiler บน Windows พร้อม built-in OpenGL 1.1 มาด้วย สำหรับทำเกมส์ 3D หรือ 2D โดยเฉพาะ
Blassic -GNU GPL Basic interpreter รองรับ Windows และ Linux
Bywater BASIC Interpreter - GPL BASIC รองรับ DOS และ POSIX (Unix, Linux)
BCX BASIC Compiler - Open Source BASIC to C Converter รองรับ Windows
Chipmunk BASIC Interpreter - free BASIC interpreter บน Mac OS X หรือ PowerMac (รองรับทั้งบน Windows, Linux, Sun Sparc, HPUX/HPPA/IA64, PlamOS)
Envelop Basic Compiler - free BASIC ซึ่งเป็น
cloning ของ Visual Basic 3 มีความสามารถเรื่อง OO, ODBC, OLE2, MAPI เป็น RAD Tool รับรองเฉพาะ Windows
FreeBASIC - open source 32-bits BASIC compiler (LGPL) compatible กับ MS-QuickBASIC ซึ่ง support Windows, Dos, Linux
GNU/LibertyBasic - open source กำเนิดจาก LibertyBasic รองรับบน Windows และ Linux
GW-BASIC - ฟรี เล็ก, เหมาะสำหรับใช้ตามบ้าน
Just BASIC - ฟรี, support Windows
Microsoft Visual Basic 2005 Express Edition - Visual Baisc.NET รุ่นฟรี มี Tool พร้อม จาก Microsoft
MiniBASIC - open source เขียนด้วยภาษา C
Mole Basic - มาจาก Merty's Own Language Extension Basic รองรับ Linux, AIX, Sun และ BSD
Mono Visual Basic compiler - open source cross-platform (.NET) รองรับ Windows, Linux, Sun Sparc, S390, Strong/ARM
MoonRock compiler - ฟรี compiler คล้าย BASIC
ScriptBasic - Open Source GPL BASIC interpreter รันได้ทั้ง Windows, Unix มากมาย ใช้ภาษา C เขียน
SmallBASIC - Free BASIC for Unix, PalmOS. Runs on PalmOS, Linux, Win32 and DOS.
Win32 PS2 YaBasic Port - open source project ให้เกมส์บน PlayStation2 รันบน Windows ได้
wxBasic - open source BASIC interpreter มี library GUI ที่รันได้ทั้ง Windows และ Linux
XBASIC BASIC Compiler - free BASIC compiler เป็น IDE Tool รองรับ Windows และ Linux
XBLite - xbasic BASIC lite compiler - เป็น open source รองรับ Windows
Yabasic - free BASIC interpreter รองรับ Windows

ขาย
Atom BASIC - ของบริษัท Acorn Computers
BBC BASIC - ของสำนักข่าว BBC
BlitzBasic
Business BASIC
DarkBasic - ถูกสร้างใน ปี ค.ศ.1999 มีวัตถุประสงค์ในงานด้าน 3D
Liberty BASIC - commercial BASIC รองรับเฉพาะ Windows แต่ไม่รับรอง Windows Programming
MediaBASIC
Pick BASIC
PowerBASIC
QBasic and QuickBasic
Rapid-Q
REALBasic - commercial cross-platform BASIC, ทั้ง Windows, Unix และ Mac
Serial Basic - ลักษณะคล้าย BASIC ออกแบบมาสำหรับควบคุม RS232 (Serial Port) (Shareware)
True BASIC - ของบริษัทที่มีบิดาของ BASIC เป็นผู้ก่อตั้ง รองรับทั้ง MacOS, DOS, Windows
UniVerse BASIC
Visual Basic - ของบริษัท Microsoft ทำให้ BASIC ฟื้นมาอีกครั้ง ในยุค Windows ปัจจุบันเป็นเวอร์ชั่น .NET

แหล่งข้อมูล :
Wikipedia
Wikipedia Thai
DMOZ
The Encyclopedia of Computer Languages, Murdoch University.
thefreecountry
Chipmunk Basic for Mac OS

วันศุกร์ที่ ๒๒ มิถุนายน พ.ศ. ๒๕๕๐

เนื้อหาของรหัสวิชา 70-536

ก่อนจะเข้าสู่รายละเอียดก็ต้อง พูดให้ฟังก่อนว่า เนื้อหาคร่าวๆ มีอะไรบ้าง จะได้เตรียมตัวเตรียมใจ รวมทั้งเตรียมแผนที่ได้ถูก ซึ่งเท่าที่ผมได้อ่านมาระยะนึงแล้วพบว่า เนื้อหาค่อนข้างกว้างมากๆ ผิดจาก cert รุ่นก่อนๆ ที่จะแยกลงลึกในแต่ละส่วนเลย ทำให้ผู้ศึกษาต้องเหนื่อยกว่าปกติ (อารมณ์คล้ายการสอบ Ent เพราะเนื้อหากว้าง แต่ถามอย่างล่ะนิด) ไม่เหมาะกับผู้เริ่มต้นหรือไม่มีประสบการณ์จริงๆ เนื้อหาที่ว่าจะครอบคลุมตั้งแต่ Type, Collection, Interface, Thread, Cryptography, I/O, Confuguration, Security, Interoperation, Reflection ฯลฯ ซึ่งจะต้องได้รู้จัก Library ต่างๆ มากมาย รายละเอียดดังนี้

1. Developing application that use system types and collections (ออกสอบ 15%)
รู้จัก Value types, Reference types, Generic types, Attribute, Exception Classes, Boxing, Unboxing, TypeForwardTo Attribute Class, Events, Delegates และสามารถประยุกต์ใช้ Collection และ Generic collections ได้ เช่น อาเรย์, คิว, แฮช, สแตก ฯลฯ ในวัตถุประสงค์ที่ 1 นี้ ค่อนข้างจะต้องใช้ความรู้เรื่อง data structures และองค์ประกอบของ framework พอสมควร

class ที่เกี่ยวข้อง เช่น ArrayList, Hashtable, Dictionary, Queue, SortedList, Stack เป็นต้น
Interface เช่น IComparable, IConvertable, IFormattable, IDisposable เป็นต้น

2. Implement services processes, threading, and application domains in a .NET Framework application (ออกสอบ 11%)
สามารถพัฒนา ติดตั้ง และควบคุม application แบบ service ได้, สามารถสร้าง application แบบ MultiThread ได้, สามารถสร้าง ปิด ปรับแต่ง Application Domain ได้ วัตถุประสงค์ที่ 2 นี้ ในสมัยเรียน OS ถ้าใครจำเรื่อง multiprogramming พวก Semaphore, Dining Philosopher problem ก็คงจะเข้าใจเรื่อง Thread ได้ดี ส่วนเรื่อง service application กับ application domain นั้น ถ้าได้ลองทำแล้ว น่าจะเข้าใจได้ดีกว่าอ่านหนังสืออย่างเดียว เพราะไม่เห็นภาพ

class ที่เกี่ยวข้อง เช่น ServiceBase , ServiceController, ServiceInstaller, Thread, ThreadPool, ThreadExceptionEventArgs, ReaderWriterLock, EventWaitHandle, Interlocked, ExecutionContext, Monitor, Mutex และ Semaphore เป็นต้น

3. Embedding configuration, diagnostic, management, and installation features into a .NET Framework application (ออกสอบ 14%)
มีความรู้เกี่ยวกับการทำ Configuration management, .NET framework installer ได้ สามารถใช้เครื่องมือและจัดการ Event log, System processes, Performance monitoring, Debugging and tracing ได้

class ที่เกี่ยวข้อง เช่น Configuration, ConfigurationManagement, Installer, AssemblyInstaller, ComponentInstaller, ManageInstallerClass, InstallContext, PerformanceCounter, StackTrace, Debug, Debugger, Trace, CorrelationManager, TraceListener, TraceSource, EventLogTraceListener เป็นต้น

4. Implementing serialization and input/output functionality in a .NET Framework application (ออกสอบ 18%)
สามารถทำการแปลง (serialize) object ให้เป็น steam ในรูปแบบ xml หรือ binary และแปลงกลับได้ สามารถเข้าถึงและจัดการ file และ directory รวมทั้งการบีบอัด (compress) หรือคลาย (decompress) และภายใต้ระบบ Isolated Storage ได้ วัตถุประสงค์ที่ 4 นี้ ควรเรียนรู้ไว้มากๆ เพราะได้มีโอกาสใช้ในหลายสถานการณ์ โดยเฉพาะเรื่องไฟล์ ส่วนการทำ serailyze นั้น อาจจะได้ใช้ในกรณีที่มีการรับส่ง object ทั้งตัวข้ามเครือข่าย โดยมากในการใช้งาน web services

class ที่เกี่ยวข้อง เช่น SerializationInfo, ObjectManager, Formatter, XmlSerializer, SoapFormatter, BinaryFormatter, File, Directory, Drive, FileSystemInfo, Path, ErrorEventArgs, ErrorEventHandler, FileStream, Stream, MemoryStream, BufferedStream, StringReader, StringWriter, TextReader, TextWriter, StreamReader, StreamWriter , BinaryReader , BinaryWriter, IsolatedStorageFile, IsolatedStorageFileStream, DeflateStream, GZipStream เป็นต้น

5. Improving the security of the .NET Framework applications by using the .NET Framework 2.0 security features (ออกสอบ 20%)
รู้จัก Code Access Security ที่ใช้ในการควบคุมสิทธิ์ในการจัดการแอพพลิเคชั่น สามารถใช้เครื่องมือ Code Access Security Policy (Caspol.exe) ได้ สามารถเ้ข้ารหัส ถอดรหัส ด้วย cryptography algorithms แบบต่างๆ ได้ วัตถุประสงค์ที่ 5 เกี่ยวกับเรื่อง secuirity ล้วนๆ และต้องยอมรับว่าบทนี้ คงจะเข้าใจลึกซึ่งลำบาก เพราะอย่างเรื่อง encrypt/decrypt นั้น ตอนเรียนวิชา computer security เรียนแค่ไม่กี่ algorithm ยังรู้สึกว่าเยอะแล้ว แต่นี่บางตัวไม่เคยได้ยินเลยด้วยซ้ำ (ฮ่วย!) ส่วนเรื่องเกี่ยวกับสิทธินั้น ก็จำเป็นต้องรู้เรื่องด้าน network management มาหน่อย เช่น directory, zone, Access Control List (ACL) เป็นต้น

class ที่เกี่ยวข้อง เช่น SecurityManager, CodeAccessPermission, PermissionSet, DirectorySecurity, FileSecurity, FileSystemSecurity, RegistrySecurity, AccessRule, AuthorizationRule, CommonAce, CommonAcl, AuditRule, MutexSecurity, ObjectSecurity, SemaphoreSecurity, DES, HashAlgorithm, DSA, SHA1, MD5, RSA, RandomNumberGenerator, CryptoStream , RC2, RijndaelManaged, HMACMD5, SecurityPermission, PrincipalPermission, FileIOPermission, RegistryPermission, ApplicationSecurityInfo, ApplicationTrust, Evidence, AllMembershipCondition, ApplicationDirectory, Url, Zone, GenericIdentity, WindowsIdentity เป็นต้น

6. Implementing interoperability, reflection, and mailing functionality in a .NET Framework application (ออกสอบ 11%)
สามารถสร้าง COM Component และ compile, deploy interop บน applicationได้ สามารถเรียกใช้ DLL แบบ unmanaged (คือ DLL ที่ไม่ได้สร้างบน .NET Framework) ได้ สามารถใช้ความสามารถ Reflection สร้าง metadata กับไฟล์ Portable Executable (PE) ได้ สามรถส่ง e-mail ผ่าน SMTP ได้

class ที่เกี่ยวข้อง เช่น DllImportAttribute, Assembly, ConstructorInfo, MethodInfo MemberInfo class, LocalVariableInfo, AssemblyBuilder, EnumBuilder, EventBuilder, ParameterBuilder, MailMessage, MailAddress, SmtpClient, SmtpPermission, Attachment, SmtpException, LinkedResource, AlternateView เป็นต้น

7. Implementing globalization, drawing, and text manipulation functionality in a .NET Framework application (ออกสอบ 11%)
สามารถสร้างภาพ 2 มิติ ตัวอักษร จัดการชนิดรูปภาพได้ สามารถสร้าง ควบคุม แปลงและค้นหาข้อความ รวมทั้ง encode และ decode ข้อความในรหัสภาษาต่างๆ ได้

class ที่เกี่ยวข้อง เช่น CultureInfo, RegionInfo, DateTimeFormatInfo, NumberFormatInfo, CompareInfo, CultureAndRegionInfoBuilder, Brush, Pen , Color structure, ColorConverter, StringFormat, Font, Graphics, Image, Bitmap, Icon, Point Structure, Rectangle Structure, Size Structure, StringBuilder, Encoding, ASCIIEncoding, UnicodeEncoding, UTF8Encoding, Decoder เป็นต้น

สรุป
เป็นไงบ้างครับ รู้สึกไหมครับว่าเนื้อหากว้างจริงๆ ส่วนใหญ่ก็เน้นที่ใช้ class ต่างๆ เป็น ซึ่งเท่าที่ศึกษาพบว่า ถ้าเคยใช้มาก่อนจะทำให้เข้าใจเนื้อหาได้ดีและเร็วกว่า แบบอ่านสอบอย่างเดียว เพราะจำยากครับ ถ้าเป็น Cert รุ่นก่อนหน้านี้ก็ยังไม่พอจำไหว แต่นี้เยอะไปครับ อ๋อ ลืมแนะนำหนังสือเตรียมสอบด้วยตัวเองไปครับ ปกหนังสือก็คือรูปข้างบนที่ผมเอามาให้ดูครับเล่มละ 2,xxx บาท ผมซื้อที่ร้าน IT Book House ครับ (่ร้านนี้มีตามห้าง IT ครับ เช่น ฟอร์จูน, เซียร์, ไอทีสแควร์, ฟิวเจอร์ ฯลฯ) ถ้ามีบัตรสมาชิก MSDN ก็ลดราคาได้อีกนะครับ หนังสือหนาและหนักดีครับ มีประมาณ 1,000 หน้า ขนาดว่าพันหน้า ผมยังว่าไม่ละเอียดเท่าไหร่ครับ ต้องค้นคว้าเพิ่มเติมอีกจึงจะเข้าใจดี (ไม่อยากให้คนอื่นมาว่า อ่านข้อสอบไปสอบอย่างเดียว หรือประมาณว่าได้ cert มาเก่งไม่สมใบรับรอง) เอาเป็นว่ามันก็ไม่ยากไป และไม่ง่ายไปครับ อาศัยความขยันครับ (คนส่วนใหญ่บอกว่าที่ไม่ได้สอบ cert เพราะไม่มีเวลา - ก็ดีครับ มีเวลาให้บริษัท ไม่มีเวลาพัฒนาตัวเอง - (ประชดซะงั้น)) เอาเป็นว่ามาร่วมเดินทางไปพร้อมกับผมดีกว่านะครับ เป็นกำลังใจให้กันและกันเองครับ

แหล่งข้อมูล :
Preparation Guide for Exam 70-536

วันอาทิตย์ที่ ๑๗ มิถุนายน พ.ศ. ๒๕๕๐

ข้อมูลใบรับรองวิชาชีพของไมโครซอฟต์รุ่นใหม่ (The New Generation of Microsoft Certifications)

ใบรับรองรุ่นล่าสุดของไมโครซอฟต์ แบ่งออกเป็น 3 ระดับ คือ
ระดับแรก Technology
ระดับกลาง Professional
แบ่งเป็น 2 สายคือสาย software development และสาย IT management
ระดับสูง Architec

MCTS - Microsoft Certified Technology Specialist

สำหรับนักพัฒนาซอฟต์แวร์
ใบรับรองสำหรับผู้ที่ต้องการเป็นมืออาชีพและมีทักษะด้านการพัฒนาซอฟต์แวร์ โดยใช้เทคโนโลยี .NET 2.0 หลักสูตรนี้ไม่เหมาะกับนักศึกษาจบใหม่ หรือผู้เริ่มต้นเป็นโปรแกรมเมอร์ เพราะหลักสูตรออกแบบมา สำหรับผู้ที่เคยพัฒนาซอฟต์แวร์ ด้วยเทคโนโลยี .NET มาอย่างน้อย 2 ปี ซึ่งหลักสูตรนี้จะทำให้นักพัฒนาซอฟต์แวร์ได้รับทักษะที่จำเป็น ในการพัฒนาซอฟต์แวร์ขนาดกลางและขนาดใหญ่ได้
ต้องสอบวิชา 70-536 : .NET Framework 2.0 Application Development Foundation
และเลือกอีก 1 วิชา ดังนี้
70-528 : .NET Framework 2.0 Web-based Client Development
ถ้าต้องการมีทักษะด้านการพัฒนาเว็บ
หรือ 70-526 : .NET Framework 2.0 Windows-based Client Development
ถ้าต้องการมีทักษะด้านการพัฒนาแบบ Win-Form
หรือ 70-529 : .NET Framework 2.0 Distributed Application Development
ถ้าต้องการมีทักษะด้าน Web Services และ Remoting

สำหรับผู้ทำงานเกี่ยวกับฐานข้อมูล
มีให้เลือกสอบ 2 ด้าน คือ
ด้านบริหารและพัฒนาฐานข้อมูลทั่วไป
รหัสวิชา 70–431: Microsoft SQL Server 2005 - Implementation and Maintenance
หรือด้าน BI
รหัสวิชา 70-445: Microsoft SQL Server 2005 Business Intelligence - Implementation and Maintenance

MCITP - Microsoft Certified IT Professional
ใบรับรองนี้ ต้องได้ MCTS มาก่อน แบ่งออกเป็น 4 ด้าน คือ
1. Database Developer ต้องสอบ 2 วิชา
รหัสวิชา 70–441: PRO: Designing Database Solutions by Using Microsoft SQL Server 2005 Open License 6.0
รหัสวิชา 70–442: PRO: Designing and Optimizing Data Access by Using Microsoft SQL Server 2005
2. Database Administrator ต้องสอบ 2 วิชา
รหัสวิชา 70–443: PRO: Designing a Database Server Infrastructure by Using Microsoft SQL Server 2005
รหัสวิชา 70–444: PRO: Optimizing and Maintaining a Database Administration Solution by Using Microsoft SQL Server 2005
(สำหรับผู้ที่ได้ MCDBA รุ่นก่อนมา สอบเพียงวิชาเดียว คือ รหัสวิชา 70–447 : UPGRADE: MCDBA Skills to MCITP Database Administrator by Using Microsoft SQL Server 2005)
3. Business Intelligence Developer สอบวิชาเดียว
รหัสวิชา 70-446: PRO: Designing a Business Intelligence Solution by Using Microsoft SQL Server 2005
4. Enterprise Support Technician สอบวิชาเดียว
รหัสวิชา 70-622 : PRO: Supporting and Troubleshooting Applications on a Windows Vista Client for Enterprise Support Technicians

MCPD - Microsoft Certified Professional Developer
ใบรับรองสำหรับผู้ที่ต้องการเป็นผู้เชี่ยวชาญ ในการพัฒนาและออกแบบซอฟต์แวร์ขนาดใหญ่ โดยใช้เทคโนโลยี .NET 2.0 หลักสูตรนี้ผู้ศึกษาต้องได้ใบรับรอง MCTS มาก่อน
แบ่งออกเป็น 3 ด้าน คือ
1. Web Developer
รหัสวิชา 70-547: PRO: Designing and Developing Web Applications by Using the Microsoft .NET Framework และตอนสอบ MCTS ต้องเลือกสอบวิชา 70-528
(สำหรับผู้ที่ได้ MCAD แล้ว สอบวิชา 70-551: UPGRADE: MCAD skills to MCPD: Web Developer by Using the Microsoft .NET Framework)
2. Windows Developer
รหัสวิชา 70–548: PRO: Designing and Developing Windows Applications by Using the Microsoft .NET Framework และตอนสอบ MCTS ต้องเลือกสอบวิชา 70-526
(สำหรับผู้ที่ได้ MCAD แล้ว สอบวิชา 70–552: UPGRADE: MCAD Skills to MCPD: Windows Developer by Using the Microsoft .NET Framework)
3. Enterprise Applications Developer
รหัสวิชา 70–549: PRO: Designing and Developing Enterprise Applications by Using the Microsoft .NET Framework และพิเศษสำหรับผู้จะสอบ MAPD ด้านนี้ ต้องสอบผ่านทั้ง 4 วิชา ใน MCTS มาทั้งหมดเลย ได้แก่ 70-536, 70-528, 70-526, 70-529

MCA - Microsoft Certified Architect
ใบรับรองสำหรับผู้ที่ต้องการเป็นผู้เชี่ยวชาญในโครงสร้างระบบ IT ขององค์กร ซึ่งต้องรู้จักใช้เทคโนโลยีหลายๆอย่าง เพื่อแก้ปัญหาหรือสร้างตัววัดในการดำเนินงานในโครงการทางด้าน IT ได้ ซึ่งแบ่งเป็น 3 ประเภทย่อยๆ ได้แก่ ด้าน Infrastructure, ด้าน Solution และด้าน Messaging

สรุป
Cert ชุดใหม่นี้ มีการแบ่งออกเป็น 3 ระดับใหญ่ๆ ซึ่งมีการแบ่งออกเป็นด้านๆ ตามตำแหน่ง และแยกออกตามบทบาทอีกที ก็ถือว่าเป็นข้อดีครับ เพราะบางที DBA อาจจะไม่ได้ทำหน้าที่ดูแลฐานข้อมูล แต่อาจจะทำหน้าที่พัฒนา Strore Procedure ซึ่งหน้าที่แบบนี้ออกแนวเขียนโปรแกรมมากกว่า บางคนไม่ชอบ cert ชุดใหม่ที่ไมโครซอฟท์ เพราะยุ่งยาก ซึ่งผมคิดว่าแม้ยุ่งยากหลายด้าน แต่ผมว่าเฉพาะเจาะจงลงไปมากขึ้น และโดยเฉพาะด้าน Architecture ซึ่งถือว่าเป็นตำแหน่งที่สำคัญ และมีบทบาทสูงในการพัฒนาซอฟต์แวร์ เพราะต้องหาโซลูชั่น ออกแบบ ตัดสินใจเชิงเทคนิค ในเมืองไทยไม่ค่อยมี ใครสนใจก็ลองดูได้นะครับ

แหล่งข้อมูล :
Microsoft Certifications Overview
All Microsoft Certifications
The New Generation of Microsoft Certifications
Why New Gen?

ภาษาอะไรที่บ่งบอกความเป็นตัวคุณมากที่สุด? (What 's your P/L ?)



มีการ forward กันมาเรื่อยๆ ทำแล้วก็สนุกดีครับ ใครยังไม่ลองก็ลองดูครับ ส่วนใครที่ทำแล้วได้อะไรก็มาบอกกันบ้าง

แม่นมากๆ ได้ Python มันให้เห็นเหตุผลว่า ผมเป็นคนเขียนช้า แต่โค้ดอ่านเข้าใจง่าย เป็นคนที่ชอบเขียนโค้ดสั้นๆ และชอบโค้ดที่เป็นระเบียบ (เป็นคนแบบนี้จริงรึเปล่าไม่รู้นะ แต่ชอบภาษานี้มานานแล้ว)

ซึ่งจริงๆ แล้ว ผมศึกษาภาษานี้มาระยะนึง มันก็เป็นแบบนั้นจริงๆ เพราะภาษามันออกแบบมาสำหรับ
หลักการ software enginering จริงๆ ภาษาจะมีระเบียบสูง เพราะโครงสร้างจะบังคับการเยื้องด้วย เป็นภาษาที่นำหลักการของหลายๆ ภาษามารวมกัน ลักษณะภาษาที่รู้สึกคล้าย Tcl/Tk ผสมกับ Perl
เขียนแบบ OO หรือ Module ก็ได้ เป็นภาษาที่มีตัวแปลภาษาเป็น Interpreter
ก็เลยทำให้เป็นภาษาแบบ Script พบเห็นใน Unix/Linux ส่วนใหญ่ (Windows ก็ต้องโหลดมาติดตั้งเอง) บริษัทใหญ่หลายแห่งก็นำภาษานี้ ้มาใช้เป็นส่วนขยายโปรแกรม เช่น Google, Yahoo และ OpenOffice

(สำหรับผม ถ้า Hybrid OO ผมเทใจให้ Python ถ้า Pure OO ผมเทใจให้ Ruby แต่ถ้าต้องทำมาหากิน ผมเลือก Basic + .net เพราะชอบการขึ้นบรรทัดเป็นการจบ statement)

วันศุกร์ที่ ๑๕ มิถุนายน พ.ศ. ๒๕๕๐

ฐานข้อมูล ฟรี! คุณภาพสูง! (Free qualified database)

อยากแนะนำฐานข้อมูลฟรีๆ ที่ถูกกฎหมาย แถมยังเป็นซอฟต์แวร์ที่คุณภาพเชื่อถือได้อีกด้วย ที่จริงผมอยากให้ทางภาคการศึกษานำฐานข้อมูลเหล่านี้ไปใช้สอนนักศึกษา หรือลงในห้อง lab เพื่อเป็นการส่งเสริมการใช้ซอฟต์แวร์ถูกกฎหมาย แต่บางท่านอาจจะค้าน โดยให้เหตุผลว่าควรให้ใช้ของที่บริษัทเค้าใช้งานจริง นักศึกษาที่จบไปจะได้ใช้ tool ต่างๆ อย่างคุ้นเคย ครับ แต่นั้นก็เป็นข้อดีเพียงอันเดียว ที่จะให้ นศ. ได้ใช้ tool แบบ commercial แต่ผลเสียที่ตามมาในอนาคต คือ เราสร้างเยาวชรรุ่นใหม่ ที่ไม่เคยตระหนักในเรื่องกฎหมาย โดยเฉพาะเรื่องลิขสิทธิ์ และด้วยความละเลยในเรื่องลิขสิทธิ์นี่เอง ที่มันจะเป็นผลย้อนกลับมาทำร้าย เยาวชนของชาติเราเอง ที่อนาคตของเค้าจะต้องมาเป็นผู้ประกอบการซอฟต์แวร์เฮ้าส์ของไทย ถ้าวันนี้พวกเราทุกคนคุ้นเคยกับการจ่ายค่าซอฟต์แวร์แค่ 150 บาท ทั้งที่ต้นทุนจ้างโปรแกรมเมอร์รวมแล้วเป็นแสน ไหนเลยที่คนเราอยากจะซื้อหรือจ้างผลิตซอฟต์แวร์ ราคาเป็นหมื่น ในวันข้างหน้าการผลิตซอฟต์แวร์ที่กลายเป็นเรื่องที่คนไม่อยากทำ เพราะขายไม่ได้หรือขาดทุน เอาเป็นว่าผมค่อยพูดเรื่องนี้วันหลังนะครับ และวันนี้นำเสนอฐานข้อมูลเหล่านี้ เดี๋ยววันต่อๆ ไป จะนำเสนอการเขียน VB.NET ติดต่อฐานข้อมูลเหล่านี้อีกที

1. Oracle Database 10g Express Edition
ผมลองใช้ตัวนี้แล้ว ค่อนข้างประทับใจ ก่อนลงทำใจอยู่นานว่า มันจะทำให้เครื่องอืดเหมือน รุ่น Enterprise ที่เคยใช้รึเปล่า แต่พอได้ลงจริงๆ แล้วก็พบว่า ไม่อืด อย่างที่คิด และแถมเครื่องไม้เครื่องมือ (Tools) มาอย่างครบครัน โดยเฉพาะ iSQL * Plus ที่เป็นเว็บ interface ที่สวยงามน่าใช้มาก ซึ่งใช้ port 8080 เป็น default สามารถเปลี่ยน port ได้ กรณีที่ใครใช้ 8080 สำหรับ proxy ซอฟต์แวร์ตัวนี้มีชื่อเล่นว่า OracleXE และรองรับ OS แบบ 32 bits ทั้ง Windows และ Linux แต่ก่อน download ต้อง register ก่อนนะครับ (แนะนำให้ Download Tutorial ขนาด 82 MB มาศึกษาด้วยครับ) ข้อจำกัดของซอฟต์แวร์ คือ เครื่องที่ลง ต้องมีได้แค่ 1 CPU, RAM ไม่เกิน 1 GB และเก็บข้อมูลได้ไม่เกิน 4 GB

ข้อมูลทั่วไป
ขนาด 210 MB
เว็บไซต์หลัก

2. MS SQL Server 2005 Express Edition

สำหรับตัวนี้ ถ้าใครลง Visual Studio.NET 2005 ก็จะติดซอฟต์แวร์ตัวนี้มาด้วย (ถ้าไม่ปรับแต่งอะไร) ผมค่อนข้างประทับใจ SQL Express มากกว่า OracleXE แต่ข้อเสียคือ SQL Express ไม่มี Tools อะไรมาให้เลย อย่างมากก็ Configuration Management ที่ไม่มีประโยชน์เท่าไหร่มาให้ ซึ่งถ้าต้องใช้ Tools สำหรับจัดการฐานข้อมูลก็สามารถ download SQL Server Management Studio Express ขนาด 43 MB มาติดตั้งเพิ่มได้ ข้อดีของ SQL Express คือ ตัวติดตั้งเล็กและแยกเครื่องมือตามการใช้งาน, สามารถใช้งานด้าน Reporting Services และ Business Intelligence ได้ (ดูข้อมูลประกอบ), ข้อจำกัดก็เหมือนกันกับ OracleXE คือใช้ได้กับเครื่องที่มี 1 CPU, RAM ไม่เกิน 1 GB และเก็บข้อมูลได้ไม่เกิน 4 GB แต่ที่พิเศษคือมีเวอร์ชั่นสำหรับ Windows 64 bits ด้วย สำหรับความสามารถทั่วไปของ SQL Express ก็เหมือนกับรุ่นอื่นๆ เช่น รันบนสภาพแวกล้อมของ .NET Framework, ใช้ภาษา T-SQL, VB.NET, C# หรือ C++ สร้าง store procedure เป็นต้น

ข้อมูลทั่วไป
ขนาด 36.5 MB
เว็บไซต์หลัก
SQL Server Management Studio Express (43 MB) Download
ถ้าต้องการใช้ Reporting Services ให้โหลดตัวนี้ตัวเดียว SQL Server 2005 Express Edition with Advanced Services (234 MB) Download
ถ้าต้องการใช้ Business Intelligence ให้โหลด Microsoft SQL Server 2005 Express Edition Toolkit (224 MB) Download

3. MySQL

ตัวนี้ฟรีมาตั้งแต่ถูกเขียนมา เพราะเป็นซอฟต์แวร์ประเภท Open Source

วันพฤหัสบดีที่ ๑๔ มิถุนายน พ.ศ. ๒๕๕๐

กำแพงระหว่าง Project Managers กับ Developers

ผมได้เห็นการ์ตูนนี้จากข่าวที่โฟสโดยคุณดาวแดงใน Thaisharp.net แล้วเห็นว่ามีประโยชน์มากจึงแปลเป็นภาษาไทย ให้คนไทยที่ไม่อยากอ่านภาษาอังกฤษได้อ่านกัน ผิดบ้างถูกบ้างนะครับ เพราะแปลแบบความเข้าใจส่วนตัวและใช้สำนวนตัวเอง หากผิดพลาดขออภัยไว้ ณ ที่นี้

ผู้จัดการ(หัวหน้าโครงการ) กับโปรแกรมเมอร์(นักพัฒนาซอฟต์แวร์) แน่ใจหรือว่าอยู่ทีมเดียวกัน ???

สภาพโดยทั่วไปของหน่วยงาน IT ขององค์กร มักจะเจอสภาพแบบนี้อย่างคุ้นเคย ซึ่งหลายๆ คนก็คงจะเคยเจอด้วยตัวเองมา... ในโครงการหนึ่งๆ (ทั้งโลกเลยก็ว่าได้) จะเป็นที่รู้กันว่าระหว่างที่โครงการกำลังดำเนินไปนั้น มีเพียง user และ เหล่าผู้จัดการ ที่ไม่ได้ข้อมูลจริงเกี่ยวกับสถานะปัจจุบันของโครงการ (ทั้งที่ควรจะรู้ความจริง)

ทำไมจึงเป็นเช่นนั้น?

ปัญหาระหว่าง ผู้จัดการกับโปรแกรมเมอร์ คือ "ความไว้วางใจ" เพราะผู้จัดการโดยทั่วไปจะไม่ไว้ใจโปรแกรมเมอร์ ว่าจะทำงานเสร็จตามเป้าหมาย เนื่องจากผู้จัดการเชื่อว่าโปรแกรมเมอร์ควรมีความกดดันในการทำงาน ไม่เช่นนั้นโครงการจะไม่เสร็จตามเป้าหมาย ส่วนโปรแกรมเมอร์เองก็ไม่ไว้ใจกับการบริหารโครงการ เนื่องจากโปรแกรมเมอร์ทั้งหลาย เชื่อว่าผู้จัดการจะเข้มงวดกับเค้า ถ้ารู้ว่ามีสิ่งผิดปกติเกิดขึ้น ผลลัพธ์คือ แทนที่ทั้งสองจะทำงานเป็นทีมเดียวกัน แต่กลับเหมือนทั้งสอง อยู่คนละทีม ด้วยต่างคนต่างปกป้องไม่ให้อีกฝ่ายมามีผลกระทบต่องานตัวเอง

เหตุการณ์ดังกล่าวจะทำให้โครงการทำท่าจะล้มเหลว การสื่อสารที่เหมือนมีกำแพงจะต้องหยุดลง

ดูจากรูปการ์ตูนในภาพแรกและภาพที่สองจะเห็นว่า การที่โปรแกรมเมอร์จะบอกความจริงของสถานะโครงการนั้น เพราะเค้าเชื่อว่าคนที่เล่าให้ฟังจะช่วยเหลือเค้าได้ แต่ในภาพที่สาม โปรแกรมเมอร์กลับพูดง่ายๆ ว่า 'Fine' (จะใช้คำว่า "ก็เรียบร้อยดี")

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

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

นี่เป็นเหตุผลที่ทำให้ผู้เขียนชอบกระบวนการพัฒนาแบบไม่เป็นทางการ (Agile Software Development) และชอบบทบาทของตำแหน่ง ScrumMaster (ScrumMaster คือ ผู้ที่แก้ไขหรือปกป้องปัญหาจากสิ่งภายนอก ไม่ให้เกิดขึ้นกับทีมของตน คล้าย Project Manager แต่แตกต่างที่ ScrumMaster จะคอยเป็นผู้สนับสนุนให้คนในทีมบริหารกันเองได้ราบลื่น บางเหตุการณ์ บางเวลาอาจจะคอยเป็นผู้นำหรือโค้ชบ้าง) แนวคิดกระบวนการการพัฒนาแบบ Scrum (Scrum คือ Software Methodology แบบ Agile ชนิดหนึ่ง ) จะพยายามอย่างมากที่จะให้ ScrumMaster เป็นส่วนหนึ่งของทีม เพื่อสนับสนุนสิ่งต่างๆให้ทีม ในทางกลับกัน เมื่อมีสิ่งผิดปกติเกิดขึ้น คนในทีมก็จะพูดถึงปัญหามากขึ้น เพราะคนในทีมคิดว่า ScrumMaster จะช่วยแก้ปัญหาให้เค้า มากกว่าจะมาตำหนิว่ากัน

แหล่งข้อมูล :
siddhi, Managers and developers: Are you two teams or one?
Thaisharp.net