ทำไม !! คอมไพล์เลอ ต้องมังกร และ โอเอส ต้องไดโนเสาร์
เป็นคำถามที่ผมว่ามันก็หาคำตอบลำบาก แต่วันนี้ผมจะมาแนะนำหนังสือ คงไม่บอกว่ามันดียังไง เพราะว่าหนังสือมันก็ดีทุกเล่มนั้นแหละ เพียงแต่ว่าเล่มนั้นจะให้แนวคิดและทำความเข้าใจได้ง่ายกว่ากันเท่านั้นเอง (หนังสือบางเล่มจำเป็นต้องมีพื้นความรู้หลายๆ อย่างก่อนไม่งั้นอ่านแล้ว งง โคตรๆ)
Operating System Concepts
by Abraham Silberschatz, Peter Baer Galvin, and Greg Gagne
ถือเป็นหนังสือที่เอาไว้ศึกษาหลักการ Operating System ได้ดีมาก ๆ เลยทีเดียว ที่ผมเรียนตอนปี 3 ก็ใช้เล่มนี้สอนเป็นหลัก แต่เนื้อหามันเยอะมาก เลยเรียนไม่หมดเล่ม ด้วยความอยากรู้เลยไปซื้อที่ CU Book ที่ม. ตอนนั้นมี Wiley Asia Sutdent Edition ขายพอดีราคาเลยถูกกว่าเล่มที่วางขายทั่วไปพอสมควร (เล่มในรูปซื้อมาประมาณ 600 - 700 ไม่เกินนี้ จำราคาไม่ได้นานแล้วอ่ะ -_-’) เอาไว้ศึกษาพวก thead, memory management แล้วก็พวก deadlock ต่าง ๆ จริง ๆ อ่านเล่มนี้ทำให้เราเขียนโปรแกรมให้มีประสิทธิภาพสูงได้เลยหล่ะ ได้แนวคิดเยอะมาก ๆ จริง ๆ คนที่เขียนพวกซอฟต์แวร์ที่ใช้ thead หรือพวก control session ต่าง ๆ สมควรอ่านอย่างยิ่งเลย เล่มที่ได้มานี่ 7th Edition ถือน่าจะใหม่เกือบที่สุดแล้วในตอนนี้ (เห็นใน amazon มี with Java ด้วย อันนี้น่าจะใหม่กว่านิดหน่อย) แต่เนื้อหาหลัก ๆ ถือว่าควบถ้วนครับ ซึ่งเล่มถ้าจะอ่านต้องมีพื้นในด้าน Hardware พอสมควร แนะนำให้เปิดหนังสือเล่มนี้อ่านพร้อม ๆ กับพวกวิชา Introductrory to Computer หรือ Computer Organization and Architecture ไปด้วยจะดีมาก ๆ
Compilers: Principles, Techniques, and Tools
by Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman
เล่มนี้ถือว่าหายากมากในไทย แถมเป็นเล่มที่ Classic ของคนเรียน Computer Science (ออกตั้งแต่ปี ค.ศ. 1985-1986) เห็นว่าเดือนนี้ (สิงหาคม 2006) จะออก Edtion ที่สองแล้ว แต่ว่าเล่มนี้นี่ ผมก็ไม่รู้ทำไม ที่มหาวิทยาลัยก็ไม่มี ในหอสมุดก็เพิ่งจะเอามาลงเมื่อปลายปี 2548 นี้เอง จริง ๆ ดูราคาแล้วก็แพงมหาโหดมาก ราคาจาก US -> Thai นี่เกือบ ๆ 4,000 บาทได้ เลยต้องยืมของหอสมุดมาถ่ายเอกสารเอา เพราะว่าหาซื้อไม่ได้ แถมแพงอีก ยิ่งแล้วใหญ่เลย (ถ่ายยังราคาเกือบ ๆ 500 บาทได้) โดยภายในหนังสือสอนแนวคิดก่อน และก่อนจะอ่านเล่มนี้จริง ๆ ต้องมีพื้นหลายอย่างมาก่อนแล้วทั้ง Computationnal Thoery หรือพวก Regular Expression wi POSIX/Perl ไม่งั้น อ่านลำบากมาก เพราะด้านในนี้แทบจะหา code โปรแกรมน้อยมาก ส่วนใหญ่จะออกแนวสัญลักษณ์ Computationnal Thoery เยอะ แถมต้องแม่น Data Structure และ Programming Language พอสมควรอีก ถ้าใครคิดจะอ่านเล่มนี้ต้องหาหนังสือเล่มอื่น ๆ อ่านประกอบไปด้วยไม่งั้นนึกภาพตามไม่ออกจริง ๆ ขนาดเราว่าเราแม่น ๆ หลายวิชาแล้วนะ ยังอ่านแล้วอ่านอีก เพราะว่าอ่านยากจริง ๆ แต่ถ้าอ่านแรกเข้าใจนะ โห … สุด ๆ อ่านแล้วนี่ Optimize Code ที่เราเขียนห่วย ๆ ตอนปี 2-3 ได้สบาย ๆ เลย เหมาสำหรับคนที่ออกแนวชอบ Optimize Code หรือพวกชอบงานแนว ๆ Code Quality
เล่มต่อมาเป็น
Languages and Machines
An Introduction to the Theory of Computer Science (3rd Edition)

by Thomas A. Sudkamp
อันนี้ไม่พูดอะไรมาก ราคาไม่แพงพอ ๆ กับ Operating System (เพราะว่ามันเป็น International Edition มันเลยถูก
) เอาไว้อ่านประกอบ Compilers ด้านบนนั้นแหละ แต่บางอย่างอาจขัดแย้งกันในบางเรื่องกับ Compilers คงต้องเลือก ๆ อ่านสักหน่อย แต่ถือว่าช่วยให้อ่านเจ้า Compilers ได้เยอะ
ปิดท้ายด้วย หนังสือสำหรับคนที่ชอบการออกแบบ Database
Database Management Systems

by Raghu Ramakrishnan and Johannes Gehrke
เล่มนี้เอาไว้เรียนวิชา Database และมันเป็นแหล่งอ้างอิงที่ดีในการทำ Database Tuning ด้วย คงไม่บรรยายอะไรมาก หาอ่านเอาแล้วกัน เล่มนี้ Concept แน่นดีมาก ๆ
ว่าง ๆ จะหาหนังสือดีมาแนะนำอีกนะ ไปก่อนหล่ะ แว็บบบบบบบ
Thai Share This
จาก Knowledge Base Article : KB918005 : Battery power may drain more quickly than you expect on a Windows XP SP2-based portable computer
Download the Update for Windows XP (KB918005) package now.
เป็นปัญหาที่ Windows XP SP2 ควบคุมการใช้พลังงานจาก Battery ผิดพลาดนั้นเอง
- The portable computer cannot enter the deeper Advanced Configuration and Power Interface (ACPI) processor idle sleep states.
This occurs when the USB 2.0 driver leaves the asynchronous scheduler component running continuously. This prevents the processor from entering the deeper ACPI processor idle sleep states, or C-states. C-states save power when the processor is not busy. These states range from C0 to C3 or C4. Typically, an idle portable computer uses the C3 and C4 states to preserve battery power. If an idle portable computer cannot enter or maintain the C3 or C4 states, the battery power drains more quickly. This problem is fixed by installing the download that is available in this article.
- The USB host controller is unable to turn off.
This typically occurs when devices are removed from a nested USB hub that is attached to the host controller. The host controller does not recognize the device removal. Therefore, the controller is never turned off. This prevents the processor from entering the ACPI processor idle sleep states. This problem is not fixed by installing the download that is available in this article.
- The USB host controller uses the periodic scheduler for USB 2.0 devices.
This typically occurs when devices that rely on the periodic scheduler are attached to the host controller. These may be isochronous (Isoch) devices such as audio devices. Alternatively, they may be interrupt devices such as mouse or keyboard. This problem is not fixed by installing the download that is available in this article.
Thai Share This
จริง ๆ ผมก็คิดจะเขียนมาตั้งนานแล้วหล่ะ แต่ติดที่เวลาในการรวบรวมความคิดมันสั้นเกินกว่าที่ผมจะเอามาเขียนได้อย่างมีเนื้อหาที่ไม่ซับซ้อน เพราะเขียนมาแล้วเต็มไปด้วยคำพูดที่ยากแก่การเข้าใจ แต่จนแล้วจนรอดก็ไม่อาจหลีกหนีมันได้ อีกอย่างคือเนื้อหาส่วนนี้มากจากประสบการณ์ตรง และสรุปออกมาเองให้เข้าใจง่าย มันเลยไม่ตรงตามหลักวิชาการ เลยเอาไปอ้างอิงไม่ได้ แต่ก็เอาหล่ะเขียนไปทั้ง ๆ แบบนี้ดีกว่า
การ update patch หรือ upgrade ซอฟต์แวร์ (ต่อไปผมจะขอพูดสั้น ๆ ว่า update นะครับ) ให้มีความสามารถสูงขึ้น หรือลบข้อผิดพลาดต่าง ๆ ที่เกิดจากกระบวนการผลิต และจัดทำซอฟต์แวร์ขึ้นมา โดยหลุดรอดจากขั้นตอนการทดสอบของฝ่าย Tester (ฝ่ายทดสอบ หรือตรวจสอบซอฟต์แวร์) ของบริษัทจัดจำหน่าย นั้น ๆ จริงอยู่หลายคนคงไม่ชอบที่จะมานั่ง update ตัวซอฟต์แวร์ บ่อย ๆ แต่เราต้องเข้าใจความเป็นจริงที่ว่า "ไม่มีใดที่สมบูรณ์แบบในการผลิต" โดยเฉพาะอย่างยิ่งสิ่งที่มีความละเอียดอ่อนอย่างซอฟต์แวร์ ที่ทุก ๆ การจัดทำนั้น ต้องมีการวางแผนและจัดโครงสร้างของซอฟต์แวร์ ตามระบบให้ดีที่สุด และการที่มีการ update ซอฟต์แวร์โดยตัว update/patch ที่ถูกส่งมาเพื่อ update ซอฟต์แวร์นั้นถือเป็นความรับผิดชอบต่อความผิดพลาด (ในความเป็นจริงเราจะเรียกมันว่า ‘bug’) ของตนเองในการผลิตซอฟต์แวร์ออกมาแล้วมีข้อผิดพลาด ต่าง ๆ จริงอยู่ผู้ใช้ก็ไม่ชอบ และบางครั้งยุ่งยากและกินเวลานานในการทำตามขั้นตอน update แต่นั้นหมายความถึงซอฟต์แวร์ ที่เราใช้มีความผิดพลาดน้อยลงในการใช้งานด้วย และเป็นความจริงอีกเช่นกันที่เราใช้ซอฟต์แวร์ แล้วมักจะมองว่าซอฟต์แวร์ที่จัดจำหน่ายนั้นต้องไร้ที่ติ และไม่มีข้อผิดพลาด ซึ่งความผิดพลาดนี้อาจจะมีทั้งการใช้งานตามปกติแล้วเกิดปัญหา และความปลอดภัยในการใช้งานต่อซอฟต์แวร์ระบบปฏิบัติการเอง ซึ่งในที่นี้ผมขอแบ่งออกเป็น 2 ส่วนคือ
1. ปัญหาจากความผิดพลาดของซอฟต์แวร์ จากการใช้งานปกติ
2. ปัญหาจากความปลอดถัยของระบบซอฟต์แวร์ทั้งหมด (รวมถึง "ซอฟต์แวร์ระบบปฏิบัติการ" )
ปัญหาจากความผิดพลาดของซอฟต์แวร์ จากการใช้งานปกติ นั้นถือเป็นความรับผิดชอบในส่วนของข้อผิดพลาดจากความไม่สมบูรณ์ต่าง ๆ เช่น ใช้งานในบางฟังค์ชันแล้วค้าง, ใช้งานแล้วตัวซอฟต์แวร์ให้ผลออกมาไม่ตรงถามผู้ใช้ต้องการรวมถึงบางส่วนทำงานผิดพลาดจากที่ควรจะเป็น, ใช้งานไปสักพักแล้วแคช หรือเปิดตัวซอฟต์แวร์ไม่ได้หลังจากการติดตั้งซอฟต์แวรตามแบบแผนของ Requestment ของคู่มือที่ให้มา เป็นต้น ซึ่งด้วยเหตุผลปัจจัยต่าง ๆ เหล่านี้ถือเป็นสิ่งที่ต้องแก้ไข ซึ่งมักจะได้รับการ update ของตัวซอฟต์แวร์ได้ภายหลักจากการผลิตหรือออกสู่ตลาดไปสัก 2 - 3 เดือนขึ้นอยู่กับข้อผิดพลาดนั้น ๆ ว่ามีปัญหาต่อการใช้งานโดยรวมมากน้อยเพียงใดด้วย ซึ่งในส่วนนี้ถ้าท่านไม่ได้ใช้ฟังค์ชัน หรือไม่มีเหตุการณ์ที่เกิดอาการแคชใด ๆ เลย ก็แทบจะไม่รู้สึกว่าท่านจะต้องไปทำอะไรกับมัน เพราะในเมื่อท่านสามารถใช้งานได้ดี ก็แทบจะสบายใจว่าได้ มันตอบสนองต่อการใช้งานได้ดี ซึ่งส่วนใหญ่ก็เป็นไปตามนี้อยู่แล้วด้วย ซึ่งในส่วนนี้แนะนำว่าถ้าไม่มีเหตุการณ์ที่ทำให้งานของผู้ใช้งานต้องชะงัก ก็ไม่มีเหตุจำเป็นต้องไป update แต่ประการใดเลย
ปัญหาจากความผิดพลาดด้านความปลอดถัยของระบบซอฟต์แวร์ (รวมถึง "ซอฟต์แวร์ระบบปฏิบัติการ" ) ทั้งหมด ในส่วนนี้ถือเป็นสิ่งที่จำเป็นอย่างมากในการ update ซึ่งในปัจจุบันความปลอดภัยถือเป็นความรับผิดชอบสูงสุดของผู้ผลิตซอฟต์แวร์เลยทีเดียว ดังจะเห็นได้จากการ update นั้นทำด้วยความรวดเร็วมากทีเดียว เพราะไม่ว่าซอฟต์แวร์จะทำงานได้ดีเพียงใด และไม่มีข้อผิดพลาดใด ๆ เลย ในการทำงาน และไม่ก่อให้เกิดการชะงักต่อการทำงาน แต่ความปลอดภัยของการใช้งานหมายถึงข้อมูลของผู้ใช้ที่ได้นำมาใช้งานต่าง ๆ อยู่ในความเสี่ยงที่จะถูกโจรกรรม ,ดัดแปลง ,แก้ไข และเสียหาย จากการที่ถูกเจาะระบบผ่านทางข้อผิดพลาดต่าง ๆ เหล่านี้ไม่ว่าจะด้วยกลยุทธในการเจาะ และโจรกรรมแบบใดก็ตาม ย่อมก่อให้เกิดความสูญเสียในการทำงาน ไม่ว่าจะเป็นความลับทางการค้า หรือข้อมูลอันมีค่าต่าง ๆ ที่เก็บไว้ด้วย ซึ่งไม่ว่าจะด้วยเหตุผลกลใดก็ตามที ปัญหานี้ถ้าผู้ใช้ไม่แก้ไข ก็ทำให้การทำงานต่าง ๆ ชะงัก หรือต้องแก้ไขกับอย่างขนานใหญ่เลยทีเดียว และมักจะรุนแรงกว่าความผิดพลาดของการใช้งานปกติหลายเท่าตัวทีเดียว ดังจะเห็นได้จากการถูกโจมตีจากความผิดพลาดของโปรแกรมอย่าง Worm ที่ชื่อว่า Blaster และ Sasser ที่ใช้ช่องโหวด้านความปลอดภัยของ Service ในตัวระบบปฎิบัติการ Windows เอง ซึ่งสร้างความเสียหายอย่างมากต่อผู้ใช้ทั้ง ผู้ใช้ตามบ้าน และบริษัทต่าง ๆ มากมาย
ซึ่งส่วนมากแล้วคนส่วนใหญ่จะไม่ใส่ใจต่อการ update ซอฟต์แวร์ ไม่ว่าความผิดพลาดต่าง ๆ จะอยู่ในตัวปัญหาในข้อใดข้อหนึ่งหรือไม่ก็ตาม เพราะผู้ใช้จะให้เหตุผลว่า "มันใช้งานได้ดีอยู่" ซึ่งคำกล่าวนี้จะออกจากปากผู้ใช้ซอฟต์แวร์ที่มีปัญหาจากความผิดพลาดด้านความปลอดภัยในการใช้งานมากกว่า เพราะว่าไม่เห็นผลกระทบต่อสิ่งเหล่านี้ได้ชัดเจนเท่ากับซอฟต์แวร์ทำงานผิดพลาดปกติ
บิลเกต ได้เคยกล่าวไว้ว่า "การเปิดตัวสินค้าออกสู่ตลาดก่อนผู้อื่นด้วยสินค้าที่ดี และใช้งานได้ มักจะดีกว่าการเปิดตัวทีหลัง ด้วยสินค้าที่สมบูรณ์" ถ้ามองในเชิงธุรกิจถือว่าเป็นการกล่าวที่ปัดความรับผิดชอบลงไปยังผู้ใช้ แต่ในอีกนัยสำคัญคือ สินค้าที่ดี และใช้งานได้ นั้นหมายถึงการเปิดตัวสินค้าที่ตรงความต้องการและสนองงานที่ผู้ใช้ต้องการก่อน ความสมบูรณ์ของตัวซอฟต์แวร์เอง ดังจะเห็นได้จากเมื่อสินค้าของไมโครซอฟต์ออกมามักจะมีตัว update/patch ออกตามมาในเวลาไม่นานนักอย่างช่วย Windows XP ออกมาใหม่ ๆ นั้นยังไม่พร้อมต่อการเชื่อมต่อกับอุปกรณ์ชนิด USB 2.0 เพราะยังไม่ลงตัวเรื่องมาตรฐานต่างๆ ทางไมโครซอฟต์เลยตัดสินใจเปิดตัว Windows XP ก่อนความพร้อมของ USB 2.0 แต่ต่อมาก็ได้รับการ update ในการใช้งานใน Service Pack 1 นั้นเอง นั้นคงจะบอกได้ถึงความกล่าวข้างต้นของบิลเกตได้เป็นอย่างดี
อยากจะทิ้งท้ายไว้นิดว่า "ไม่มีซอฟต์แวรไหนในโลกนี้จะสมบูรณ์แบบ ไม่ว่าจะมาจากฝั่ง OpenSource หรือ CloseSource ก็ตามที ถ้าสิ่งไหนจำเป็นต้อง update เพื่อให้งานที่เราทำ และระบบซอฟต์แวร์ทั้งหมดทำงานได้อย่างไม่มีความผิดพลาด และปลอดภัย เราก็ควรจะ update มันซะ ….."
Thai Share This