My Books

หนังสือ : 1

หนังสือ : 2

หนังสือ : 3

หนังสือ : 4

หนังสือ : 5

หนังสืออยู่ที่บ้านอีกเยอะ อันนี้ส่วนที่อยู่ที่มหาวิทยาลัยนะ

จากกระทู้ยอดนิยม “Com Sci & Com Eng แตกต่างกันอย่างไร”

สาขาวิทยาการคอมพิวเตอร์
—>เน้นการศึกษาวิชาการที่เป็นแก่นแท้ของวิทยาการคอมพิวเตอร์ ที่จะนำไปใช้ทางใดก็ได้ เช่น สถาปัตยกรรมด้านฮาร์ดแวร์และซอฟต์แวร์ algorithm (กรรมวิธีในการแก้ปัญหา) ภาษาคอมพิวเตอร์ (คิดค้นภาษาใหม่ หรือปรับปรุงภาษาเก่าให้ดีขึ้น) การสร้างตัวแปลภาษาคอมพิวเตอร์ (Compiler, Interpreter) เทคนิคในการเชื่อมต่อระหว่างฮาร์ดแวร์ และซอฟต์แวร์ เทคนิคในการติดต่อกับมนุษย์หรือผู้ใช้ทั่วไป เทคนิคในการเขียนโปรแกรม เทคนิคในการสร้างระบบปฏิบัติการ (Operating system) เป็นต้น สิ่งเหล่านี้เป็นเครื่องมือที่สำคัญที่สุดที่จะทำให้สาขาอื่นสามารถนำไปใช้พัฒนางานต่างๆ ได้ตามวิธีการหรือศาสตร์และศิลป์ที่เป็นของตนเอง

สิ่งที่คุณเห็นและใช้อยู่ในคอมพิวเตอร์ทุกวันนี้ เช่น ระบบปฏิบัติการ Windows, ภาษา C++, ภาษา Java, Visual BASIC, Pentium 4 CPU, การใช้เมาส์ชี้วัตถุบนจอเพื่อสั่งคอมพิวเตอร์ เทคนิคในการเขียนและพัฒนาโปรแกรมเชิงวัตถุ หรือ Object Oriented (OO) เหล่านี้เป็นผลพวงของการพัฒนาวิชาการทางด้านวิทยาการคอมพิวเตอร์ทั้งสิ้น

วิศวกรรมคอมพิวเตอร์
—>เป็นสาขา ที่แตกตัวมาจาก วิศวกรรมไฟฟ้า วิชาสาขานี้จะใช้หลักการทาง Logic เป็น หลักในการปูพื้นฐานการสร้าง Logic ที่ได้มา นอกจากการเรียนรู้เรื่องกฏทาง ไฟฟ้า คณิตศาสตร์ และ Logic พื้นฐานเริ่มตั้งแต่ AND NAND OR XOR เป็น หลัก เพื่อ สร้างกฏแบบแผนใหม่ที่จะนำไปสู่ ผลทาง Logic อีกเช่นกันในการสร้าง ถามว่า เรียนแล้วเป็นไง พื้นก็ จะ เสริมเรื่องวิฃาพื้นฐานคณิตศาสตร์ ฟิสิกส์เป็นหลัก แต่ไม่เน้นมากนัก เพราะว่า จะเอาเฉพาะส่วนที่สำคัญ ในการจุดเกิด ประกายการเหนี่ยวนำให้ เกิดการ เรียนรู้ศึกษาแผนใหม่ของระบบคอมพิวเตอร์ ส่วนนี้จะเรียนรู้เกี่ยว Hardware เป็นหลัก มีการเขียนโปรแกรมมั้ย มี แต่ จะเน้นแนวคิดที่ใช้งานได้จริงเป็นหลัก ส่วน Human Interface ไม่ลงลึกเน้นเหมือน Computer Science ที่จะเน้นภาษาที่ใช้ในการสร้างการสื่อสารกะมนุษย์ซึ่งเป็นผู้ใช้

พูดง่ายๆ อุปกรณ์ใหม่ๆ เทคโนโลยีใหม่เกิด จาก ฟิสิกส์ กลายมาเป็น ไฟฟ้า กลายต่อมาเป็น อิเส็กค์ทรอนิคส์ และ นำส่วนต่างๆมาประกอบกันตาม Logic พื้นฐานสร้าง Hardware หรือ เครื่องมือใหม่ที่จับต้องได้ เป็นส่วนใหญ่ แต่ Computer Science จะสร้าง ในส่วนของ Software / Data Structure / System Information เพื่อ กำหนด รูปแบบการรวมการประกอบการใช้เทคโนโลยีต่างๆ ทั้งที่จับต้องได้ และ จับต้องไม่ได้(Software) ที่นำมาสรุปให้เกิดงานที่ดีขึ้น

แต่อย่างไรก็ดี จบแล้ว ทำงานข้ามสาขากันได้ แต่สาขาที่เรียนตรงมาจะได้เปรียบกว่าตอนเริ่มต้น

พื้นฐานของ ComEN ที่ ComSci ก็มีเล็กน้อย
พื้ฯฐานของ ComSci ที่ ComEn ก็มีเล็กน้อย

คุณสามารถเอาพื้นฐานเหล่านั้นมาพัฒนาได้
ปล.ถ้าคุณมีการพัฒนาตัวเองอยู่เสมอ

ต่างประเทศ เห็นหลายๆที่ เขารวม ComSci กับ ComEN เป็นสาขาเดียวกันหลายที่แล้ว แต่มี แขนงที่ให้ศึกษาหลายแขนง

Computer Science and Engineering

ชื่อปริญญา ก็คือ

ป.ตรี : Bachelor of Technology ชื่อย่อ B.Tech
ป.โท : Master of Technology ชื่อย่อ M.Tech
ป.เอก : Ph.D

เช่น

Bachelor of Technology in Computer Science and Engineering
Bachelor of Technology in Computer Systems
Bachelor of Technology in Technology Management
Bachelor of Technology in Information Technology

แต่ถ้าในไทยจะเป็น Bachelor of Science หรือ Engineering ขึ้นอยู่กับแต่ละมามหาวิทยาลัย

เมืองไทยปัจจุบัน หลักสูตรของ com sci มัน เน้นไปด้าน com eng ครับ

สำหรับบทความข้างล่างจะพูดถึงด้านของ เป้าหมาย ของศาสตร์ com sci และ com eng มากกว่านะคับ

=================================================

Computer Science เป็น Science จริงหรือ ?

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

Computer Science ต่างกับ Computer Engineering อย่างไร ?

สิ่งที่แยกของ Computer Science ออกจาก Computer Engineering อย่างชัดเจนคือ Computer Science นั้น เป็นศาสตร์ที่เกี่ยวกับ การคิดค้น การก่อตั้ง ทฤษฏี ที่เกี่ยวกับ Computer ส่วน Computer Engineering นั้น เป็นศาสตร์ที่ศึกษา ทฤษฎีเหล่านั้น และนำไปประยุกต์ใช้กับโลกความเป็นจริง งานที่ Computer Science ทำนั้น จะเกี่ยวกับการวิจัยซะมากกว่า เช่น ศึกษาว่า โปรแกรมสามารถทำอะไรได้บ้าง หรือทำอะไรไม่ได้บ้าง, หาวิธีการแก้ไขปัญหาต่าง ๆ บนโลกนี้, โปรแกรมควรจะเก็บข้อมูลในรูปแบบใด เพื่อที่จะทำให้ค้นหาข้อมูลได้เร็วที่สุด และอื่น ๆ ซึ่ง Computer Science จะศึกษาเรื่องเหล่านี้ และพัฒนาทฤษฏีขึ้นมาเรื่อย ๆ เพื่อให้ Computer Engineering นำไปใช้

ทำไมคนที่เรียน Computer Science กับ Computer Engineering ถึงมักจะทำได้ทั้งสองอย่าง ?

เหตุผลแรก คือ ทุกอย่างที่ Computer Science คิดขึ้นมา มีเป้าหมายเพราะต้องการประสิทธิภาพที่ดีที่สุด เช่น ถ้าเราใช้วิธีการตามทฤษฎีนี้แล้ว เราจะได้ประสิทธิภาพสูงสุด ไม่เหมือนกับ Physics ที่ทุกทฤษฏีที่ค้นพบคือความจริงทางธรรมชาติ เช่น บนโลกของทุกอย่างต้องตกลงสู่พื้น เราจะเห็นว่า ทฤษฎีใน Computer Science นั้นเปลี่ยนแปลงไปเสมอ หากมีคนสามารถสร้างทฤษฏีใหม่ที่มีประสิทธิภาพมากกว่าของเก่าได้ และ เนื่องจาก Computer Engineering เป็นผู้ที่ใช้ทฤษฎีเหล่านี้ เป็นผู้ที่เข้าใจปัญหาในโลกจริงนั้นได้ดีกว่า คนที่เรียน Computer Engineering จึงมักจะคิดทฤษฎีของตนเองด้วย ส่วนคนที่เรียนด้าน Computer Science ก็จำเป็นที่จะต้องรู้ทั้งปัญหาในโลกจริง และทฤษฎีต่าง ๆ เกี่ยวกับ Computer Science ด้วย ดังนั้นคนจากทั้งสองศาสตร์จึงมักจะทำงานแทนกันได้ เพียงแต่มีความรู้หนักไปคนละทางเท่านั้นเอง ในอินเตอร์เน็ทมักจะมีคนกล่าวว่า “Computer Science ไม่ศึกษาเกี่ยวกับ Hardware” คำกล่าวนั้นไม่เป็นความจริงแต่อย่างใด Computer Science มีความเกี่ยวข้องกับทุกอย่างเกี่ยวกับ Computer เช่น com-sci นั้นศึกษาเกี่ยวกับโครงสร้างของวงจร Computer โครงสร้างของ CPU สร้าง โครงสร้าง CPU ใหม่ที่มีประสิทธิภาพ ซึ่งเรื่องเหล่านั้นก็เกี่ยวกับ Hardware ไม่ใช่เหรอ ? เหตุผลที่สอง คือ เนื่องจากประเทศไทยเป็นประเทศที่ด้อยพัฒนา เราจะเห็นได้ว่า คนที่จบมาเพื่อเป็นนักวิทยาศาสตร์ มักจะไม่มีงานทำ เพราะในประเทศไทย ไม่มีบริษัท หรือ องค์กรที่ทำวิจัยเกี่ยวกับ Computer ดังนั้น Computer Science ในประเทศไทย จึงมักจะสอนให้นักเรียนมีความรู้ด้าน Computer Engineering เป็นส่วนใหญ่ จึงทำให้กลุ่มคนที่เรียน Computer Science และ กลุ่มคนที่เรียน Computer Engineering ไม่แตกต่างกันมาก จริง ๆ แล้วเป้าหมายสูงสุดของ Computer Science ค่อนข้างชัดเจนนะครับ คือเราเรียน Computer Science เพื่อที่จะเป็น นักวิทยาศาสตร์คอมพิวเตอร์ หรือ Computer Scientist นะครับ ไม่ใช่ Programmer อย่างที่หลาย ๆ คนเข้าใจ

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

รวบรวม และเรียบเรียงจาก

http://www.pantip.com/tech/comsci/topic/CT1952225/CT1952225.html

Computer Science != Programming and Programmer

Found this on Lambda the Ultimate weblog entry, about what George E. Forsythe (founder of Stanford’s Computer Science Department) thought about Computer Science. This is originally written in Stanford technical report, number 26. Quote here:

“I consider computer science to be the art and science of exploiting automatic digital computers, and of creating the technology necessary to understand their use. It deals with such related problems as the design of better machines using known components, the design and implementation of adequate software systems for communication between man and machine, and the design and analysis of methods of representing information by abstract symbols and of processes for manipulating these symbols. Computer science must also concern itself with such theoretical subjects supporting this technology as information theory, the logic of the finitely constructable, numerical mathematical analysis, and the psychology of problem solving. Naturally, these theoretical subjects are shared by computer science with such disciplines as philosophy, mathematics, and psychology.”

พบข้อความนี้จาก Lambda the Ultimate weblog ซึ่ง George E. Forsythe คือผู้ก่อตั้ง ภาควิชา Computer Science ที่มหาวิทยาลัย Stanford ได้กล่าวเกี่ยวกับ Computer Science ไว้ได้อย่างน่าสนใจ ซึ่งนี่คือข้อความที่เขียนไว้ใน Stanford technical report หมายเบข 26 มีข้อความว่า

“ฉันคิดว่า Computer Science เป็น ศิลป์ และ ศาสตร์ ของการทำงานของเครื่องดิจิตัลคอมพิวเตอร์อัตโนมัติ และเป็นการสร้างสรรค์เทคโนโลยี เพื่อทำความเข้าใจในสิ่งที่เราจะใช้มัน มันเป็นการนำปัญหาต่างๆ มาออกแบบเพื่อให้เครื่องทำงานได้ดีกว่าเดิมเพื่อรู้จักส่วนประกอบต่างๆ การออกแบบผลของสำหรับระบบซอฟต์แวร์ที่เพียงพอต่อการสื่อสารระหว่างมนุษย์ กับเครื่องจักร และเป็นการออกแบบ และวิเคราะห์ขั้นตอนของข้อมูลที่เป็นตัวแทนของสิ่งที่อุปมาณขึ้นมา ด้วยสัญลักษณ์ที่ก่อกำหนดขึ้นจากผลของก ารประมวลผลของข้อมูลที่จับต้องได้ทางสัฐลักษณ์ Computer Science น่าจะเหมือนกับการนำหัวของทฤษฎีที่สนับสนุนเทคโนโลยีต่างๆ เหมือนกับทฤษฎีสารสนเทศ, ตรรกะของขอบเขตข้อมูล ,ระบบจำนวนตัวเลขในการวิเคาะห์ทางคณิตศาสตร์ และปรัญญาด้านการแก้ปัญหาต่างๆ โดยตัวของมันเองแล้ว Computer Science คือหัวข้อของทฤษฎีที่ว่าด้วยเรื่องของการเชื่อมโยงกันโดยหลักของปรัญญา, คณิตศาสตร์ และจิตศาสตร์”

จะเห็นได้ว่า concept ของ Computer Science มิได้สร้างมาเพื่อเป็น Programmer แต่ประการใด แต่เป็นการ “ศึกษาขั้นตอนการแก้ปัญหา วิเคราะห์ และออกแบบการแก้ปัญหาโดยใช้หลักของปรัญญา, คณิตศาสตร์ และจิตศาสตร์ ในการแก้ปัญหาต่างๆ”

ผู้แปลเป็นภาษาไทย Ford AntiTrust
ผู้นำเสนอถึงผู้แปล Rawitat Pulam @ Tsukuba University in Japan

REF :http://rawitatpulam.blogspot.com

ปล. ไม่รู้ว่าแปลตรงความหมายมากแค่ไหนนะครับ พอดีว่าฝึกแปล ……. :P

จบคณะวิทยาการคอมพิวเตอร์จะไปทำอะไร

คำถาม : อยากรู้ครับ ว่าจบคณะวิทยาศาสตร์ คอมพิวเตอร์ แล้วไปสมัครงานอะไรได้ครับ จะหาสมัครงานได้จากที่ไหน แล้วก็ ทำไมคนถึงไม่นิยมเรียนคณะวิทยาศาสตร์กันครับ

ถ้าจบไปจะไปต่อยอดหรือทำงานอะไร นั้น ในสาย Science นั้น มีทางเลือกได้มาก เพราะว่า Science คือศาสตร์ที่ว่าด้วยการทำงานที่เป็นระบบ ขั้นตอน ซึ่งคือการจัดการนั้นเอง หรือ Managment ครับ คุณต้องมีคุณลักษณะใน Sci’ method ที่มาก (ขั้นตอนทางวิทยาศาสตร์) จริงๆ คุณต้องได้รับมาก การทำงานเป็นขั้นเป็นตอน ทำงานด้านวิจัยจะไปได้ดีกว่าครับ คนจบวิทย์มา จะได้เปรียบมากๆ เพราะว่าเรียนมาขั้นตอนมันสอนครับ แล้วไปเรียนต่อยอดด้าน SA หรือ NS ก็ได้

ต่อมาครับ การทำงานในระดับ Com Sci นั้นเป็นการนำขั้นตอน ทั้งปรัญญาศาสตร์, จิตศาสตร์ และคณิตศาสตร์ มารวมกันให้เกิดการตอบโจทย์ของคำถามที่ส่งมา

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

ผม intro มานาน ต่อในเรื่องทำงานต่อนะครับ

นั้นหมายความว่าคนที่จบวิทย์มานั้นทำงานในสายจัดการระบบ หรือทำงานในสายคิดค้นก็ได้ เพราะได้พื้นฐานจากความรู้และขั้นตอนทางวิทยาศาสตร์ มาครับ ซึ่ง ส่วนมากที่ได้เรียนกันก็มีในส่วนของ Computation, Algorithm, Data Stucture, Software Engineering (อันนี้สาย CS เรียนนะครับ ชื่อบอกวิศวะ แต่จริงๆ คอร์สมันเป็นของ CS ครับ), Software Analye ฯลฯ จริงๆ มีอีกหลายตัวครับ

ผมมองว่าการทำอาชีพมันจะไล่อันดับไปเรื่อยๆ ครับ จากคน Coding -> Team Leader -> Team Director -> Brand Manament -> Software Leader -> Corp Mangament ครับ จริงๆ มีมากกว่านี้แต่ไล่คร่าวๆ ครับ

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

แล้วทำไมคนไม่ชอบเรียนผมบอกไว้เลยว่า เป็นเฉพาะที่ไทยมากกว่ามั้งครับ

ตอบตรงๆ นะ

“คณะนิยม”

ต่อการทำงานนิดนึงครับ จริงๆ แล้วทำงานได้เยอะนะครับสาบวิทย์

สายบริหาร, สายจัดการระบบ, สายค้นคว้าวิจัย, สาย Coding ครับ เอาแค่นี้ก่อนดีกว่าครับ

จริงๆ CS ไม่ได้จบออกมาแค่เขียนโปรแกรมนะครับ แต่ทำด้านอื่นได้อีก แต่ใช้สิ่งต่างๆ ที่เรียนมา นำมาประยุกต์ใช้ครับผม

ส่วนเรื่องการหางานนั้น แนะนำว่าให้ทำงานแนว Freelances ตอนเรียนไปก่อน (ถ้ายังเรียนอยู่นะครับ) แต่ถ้าจบมาแล้ว แนะนำให้ทำงานใน SWH ครับ ผมว่าได้ประสบการณ์ในการทำงานมากครับ ถึงจะโดนใช้เยี่ยงทาส เครียด แต่คุ้มในเรื่องประสบการณ์การทำงานครับ

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

ผมว่าสบายกว่ากันตั้งเยอะครับ แถมได้เจอปัญหาใหม่ๆ ทั้งคน ทั้งงานเยอะมากครับ มีประโยชน์ในอนาคตแน่นอนครับ

ลำบากตอนแรกครับ ได้อะไรเยอะครับ แล้วเจออะไรสบายๆ ผมว่ามองอะไรได้กว้างขึ้นเยอะครับ เพราะเราลำบากมาแล้ว จะเข้าใจคนทำงานด้านล่าง ถ้าเรามาทำงานบริหารครับ …..

ปล. คิดในทางที่ดีไว้ครับ ชีวิตจะได้ไม่ทุกข์มากครับ

เรียนโปรแกรมมิ่ง หรือ Computer Science จงเป็นเจ้านายภาษา …

ขอท้าวความนิดนึง ว่าทำไมผมถึงเขียนแบบนี้

คืออันนี้ผมไป ได้มาจากพี่เดฟ (ithilien_rp) post ตอบไว้ใน pantip.com โดยที่เจ้าของกระทู้เขียนว่า ในlonghorn นั้น microsoft จะใช้ภาษาใหม่ ซึ่งก็คือ mc++ ดังนั้นขอให้พวกโปรแกรมเมอร์ทั้งหลายระงับการเรียนโปรแกรมกันไว้ก่อนเพราะว่าอีกไม่นานต้องเปลี่ยนอีก

อะไรทำนองนี้แหละครับ เนื้อหาบทความีดังนี้ครับ


         การเรียนรู้ platform/library/language ใหม่ๆ เป็นเรื่องปกติของ programmer อยู่แล้ว ดังนั้นผมว่ามีของใหม่มา ก็ไม่ใช่เรื่องแปลกอะไร

         การเรียนรู้อะไรผมไม่อยากให้ดูที่เปลือกนอกมากไปนักน่ะครับ อย่าไปดูที่ syntax, libraryอะไรให้มากนัก ดูที่แนวความคิด หรือว่าปรัชญาของการเขียนโปรแกรมจะดีกว่ารวมไปถึง algorithm flow หรือว่า program design ด้วย เพราะว่า ถึงแม้ภาษาต่างๆ มันจะเปลี่ยนไป หรือว่า library/framework ต่างๆ มันเปลี่ยนไปตามกาลเวลาของมัน ไอ้พวก algorithm หรือว่า design philosophyพวกนี้ไม่ค่อยเปลี่ยนตามหรอกครับ หรือว่าเปลี่ยนตามก็ช้ากว่าไม่รู้กี่เท่า

         เรียนprogramming language ใหม่ๆ ภาษานึงนี่ ผมว่ามันไม่ใช่เรื่อง big dealอะไรเลย ตอนที่ผมเปลี่ยนมาใช้ mac os x ใหม่ๆ แล้วอยากจะเขียนโปรแกรมบน osx ผมก็ต้องเรียน objective-c ซึ่งผมไม่เคยเห็นมาก่อนในชีวิตก็ไม่มีอะไรมาก ใช้เวลาครึ่งวันอ่าน syntax, keyword ใหม่ๆ ว่ามีอะไรบ้างอีกครึ่งวันหาพวก FAQ ว่ามันมีอะไรต่างจาก c/c++/java มั่งวันที่สองวันที่สาม ก็เขียนอะไรใน objective-c ได้แล้วส่วนเรื่องการเขียนโปรแกรมใน os x นี่ แน่นอนว่า architecture มันต่างจากwindows โดยสิ้นเชิง ดังนั้นความรู้อะไรก็ตามที่ผมรู้มาจาก win32, mfc,.net ใช้ไม่ได้เลย (ของตาย ยกเว้น M$ จะ port ไปลง แต่ว่า .net ก็มีdotGNU ก็พอจะใช้กันได้บ้าง) แต่ว่าก็เรียนรู้ Cocoa framework (ที่เป็นnative framework ของ mac os x) ก็ใช้เวลาไม่นานเท่าไหร่ ก็เขียน GUIapplication ได้แล้ว ใช้ system service ได้พอสมควร (ก็อ่านๆ พวก basicแล้วที่เหลือก็เปิด reference เอา)

         ขอสรุปความคิดคร่าวๆละกันนะครับ ก่อนจะนอกเรื่องไปมากกว่านี้ผมอยากจะเสนอความคิดแบบนี้ดีกว่าครับ สำหรับคนที่จะหัดเขียนโปรแกรม

1. แยกการเรียน “ภาษา” กับการเรียน “library/framework” ออกจากกัน
         เดี๋ยวนี้library/framework ใหม่ๆ ส่วนมากจะ support หลายภาษา และ codeที่เขียนเรียกใช้ library เหล่านั้นในแต่ละภาษาจะไม่ต่างกันมากเท่าไหร่(ลองดู code ที่ใช้ .NET framework ที่เขียนใน VB.NET, C#.NET หรือว่าManaged C++.NET สิครับ ออกมาแทบจะเหมือนกันเลย ผมอ่านหนังสือ VB.NET นี่แปลง code เป็น C# ได้แบบแทบไม่ต้องคิดเลย เกือบจะบรรทัดต่อบรรทัด แปลงแค่syntax กับ keyword แล้วก็ structure นิดหน่อย)
         ดังนั้นการแยกการเรียนรู้ library/framework ออกจากการเรียนภาษาเป็นเรื่องที่สำคัญครับ ตามความคิดของผม

2. อย่าไป focus กับภาษามากเกินไป ดูที่ algorithm + program design มากๆ
         ภาษาก็เป็นแค่เครื่องมือแม้ว่าภาษาแต่ละภาษาจะมีข้อดีข้อเสียไม่เหมือนกัน แต่ว่าอย่างไรก็ดี การdesign program นั้น design framework, design patternsส่วนมากจะไม่ขึ้นกับภาษา คือ จะใช้ในภาษาไหนก็ได้ เช่นเดียวกับ algorithm
         ดังนั้นเมื่อต้องถึงเวลาที่จะเปลี่ยน platform ไม่ว่าจะเป็นการไปใช้ platformตระกูลใหม่ (เช่น windows->linux, windows->macหรือว่ากลับกันก็ตาม) หรือว่าตระกูลเดิม แต่ update architectureใหม่จนจำไม่ได้ (เช่น windows 3.11->windows 95, win32->.net หรือmac os 9->mac os x) ก็ตาม สิ่งที่ต้องทำก็คือ
         – เรียนรู้ syntax และลักษณะเฉพาะของภาษาใหม่ (ถ้าจำเป็น)
         – เรียนรู้ basic ของ framework ของ platform นั้นๆ (เช่น การเรียกใช้component, การใช้ memory, ฯลฯ)
         จากนั้นในการเขียนโปรแกรมหรือว่าสร้าง application อะไร ในภาพรวม ก็คิดตามหลักprogram design เดิม และใช้ algorithm ตัวเดิม แต่ว่าเรียกใช้ componentจาก framework ตัวใหม่ (ซึ่งตรงนี้ ถ้า basic แน่นดี ก็เปิดดูจากreference ได้เลย) และอาจจะปัญหาเรื่องรายละเอียดปลีกย่อยนิดหน่อยในส่วนที่เป็นลักษณะเฉพาะของภาษาใหม่ ที่ต่างไปจากภาษาที่เคยชินเท่านั้นเอง เช่นตอนที่เขียน objective-c ใหม่ๆ งงกับมันอยู่พักนึง กับsemi-automatic memory management ของมัน เพราะว่าเคยแต่ใช้ manual แบบc/c++ หรือว่า fully automatic แบบ java
         ส่วนถ้าใครอยากจะลองเล่นกับmanaged c++ ก็หาตัวอย่างได้ทั่วไปครับ ส่วนหนังสือเล่มที่อยากจะแนะนำนอกจากหนังสือของสำนักพิมพ์ microsoft ที่น่าจะเป็นมาตรฐานที่ต้องอ่านแล้วก็มี Developing Applications with Visual Studio.NET โดย RicardGrimes เล่มนี้จะเน้นการใช้ Managed C++และจากพูดถึงส่วนของรายละเอียดต่างๆ ข้อเหมือนและข้อแตกต่างระหว่างmanaged c++ กับ c++และ c# ไว้ดีพอสมควรทีเดียว แต่ว่าอาจจะไม่มี codeตัวอย่างมากนัก เหมาะกับคนที่เขียนโปรแกรมเป็นอยู่แล้ว