อะไรสําคัญที่สุดในการพัฒนาโปรแกรม


อะไรสําคัญที่สุดในการพัฒนาโปรแกรม
โอ... ได้ดู project เกมของ นศ. มา ต้องบอกว่า เกมเนี่ยเป็นตัวอย่างของการประยุกต์ได้ดี เพราะอะไรน่ะหรือครับ ก็เพราะว่ามันเป็นด่านที่เราจะต้องใช้เงื่อนไข if..else, ใช้อาเรย์ ใช้ pointer เข้ามามีส่วนร่วม ประยุกต์ออกมาให้เป็นเกมเดินไปเดินมาได้...โอ... ได้ดู project เกมของ นศ. มา ต้องบอกว่า เกมเนี่ยเป็นตัวอย่างของการประยุกต์ได้ดี เพราะอะไรน่ะหรือครับ ก็เพราะว่ามันเป็นด่านที่เราจะต้องใช้เงื่อนไข if..else, ใช้อาเรย์ ใช้ pointer เข้ามามีส่วนร่วม ประยุกต์ออกมาให้เป็นเกมเดินไปเดินมาได้...

มี นศ. ท่านหนึ่งเคยถามผู้เขียนว่า ถ้าเขียนเกมเป็นแล้ว หรือแบบว่าเขียนเกมเป็น Project จบ เวลาทํางาน จบออกไปแล้ว จะไปทํางานเกี่ยวกับเกมอย่างเดียวอย่างนั้นหรือ.... ไม่ใช่นะครับ

.... ลองเปรียบเทียบดูสิครับ ถ้าหากท่านเขียนภาษา C/C++ หรือ Java หรือไม่ว่าจะเขียนภาษาอะไรได้ ถ้าท่านเป็นภาษานั้นในระดับ pointer, struct หรือในระดับสร้างตัวแปรแบบ dynamic ได้ โดยใช้พวก pointer ช่วย ท่านจะ present ออกมาด้วยวิธีใดว่าท่านทําได้ถึงขนาดนั้น แน่นอนครับ ท่านจะต้องสร้าง program สักตัวหนึ่งออกมา show หรือทําเป็น project สัก project หนึ่ง ใน project นั้น อาจจะเป็นโปรแกรมอะไรสักอย่างที่เราจะหยิบเอาความสามารถในภาษานั้นมาโชว์ เช่น.........

โปรแกรม Dictionary : ท่านอาจจะสร้างโปรแกรมนี้โดยใช้ Linked List หรือ Tree เข้ามาช่วยในการจัดโครงสร้างของคําต่างๆ โดยที่ใช้ memory น้อยที่สุดเวลาโปรแกรมทํางาน เพราะรายละเอียดคําศํพท์ทั้งหมดนั้นอยู่ใน disk เวลาค้นหา ก็จะต้องค้นหาให้เร็ว เทคนิคต่างๆ เหล่านี้ล่ะ ท่านจะต้องเอามันมาประชุมพร้อมกันเวลาเขียนโปรแกรม

หรือ

โปรแกรมเกม : การเขียนเกมที่เป็นแบบเกมกระดาน 2D ก็ดี.......... ท่านจะใช้อาเรย์แบบ 1 มิติ หรือ 2 มิติดี และท่านจะเลือกวิธีการใช้ while หรือ for แบบไหน ที่จะทําให้โปรแกรมของท่านวนได้เร็วที่สุด และท่านจะเขียนดักอย่างไรให้ใช้ memory น้อยที่สุดด้วย ยกตัวอย่างเช่น ในเกมมีตัวละครทั้งหมด 500 ตัว ตัวละ 105 bytes ถ้าโหลดตัวละครมาทั้งหมด 500 ตัว ก็กินเนื้อที่ในหน่วยความจําไปเยอะแล้ว ดังนั้น เราอาจจะต้องปรับให้เป็นการโหลดข้อมูลแบบ Dynamic นั่นเอง เห็นมั้ยครับ... นี่ไง คําตอบของการใช้ pointer และ struct/class มันจะโผล่ออกมาในตอนอย่างนี้

เช่นเดียวกัน ถ้าท่านพัฒนาโปรแกรมอื่นๆ ที่มีการจัดการข้อมูลที่ซับซ้อนขึ้น ท่านก็จะได้เจอการประยุกต์ใช้ data structure และได้เขียน algorithm ออกมาในรูปแบบต่างๆ นี่ล่ะ จะกลายเป็น idea ให้ท่านในการนําไปใช้พัฒนาโปรแกรมอื่นต่อไป

จากตรงนี้ เมื่อเข้าใจอย่างนี้ เรื่องของวิธีการก็ไม่สําคัญอีกต่อไปแล้วล่ะครับ.. ท่านจะใช้ชุดคําสั่งอะไรในการพัฒนา ใช้ภาษาอะไรมันไม่ใช่เรื่องสําคัญ แต่สิ่งสําคัญก็คือวิธีคิดนั่นเอง ท่านจะใช้ DirectX, DirectDraw หรือใช้ CDX , MDX , OpenGL หรือ Engine ตัวไหน ในการพัฒนาเกม มันก็เป็นแค่ tool หรือหนทางที่จะช่วยให้ท่านได้แสดงรูปได้ รับค่าได้ หมุนรูปได้ ฯลฯ และที่สําคัญ มันเป็นแค่ส่วนหนึ่งที่จะช่วยในการพิสูจน์ว่ากระบวนการที่ท่านคิดขึ้นมานั้น สามารถทําให้เป็นอย่างนั้นอย่างนี้ได้จริงๆ ดังนั้น ท่านจะหันไปใช้ภาษาใดก็ตาม เช่น C++, C# หรือ VB, Java, VC มันก็เป็นแค่ภาษาที่จะสร้างให้เป็นโปรแกรมออกมาได้สําเร็จโปรแกรมหนึ่งเท่านั้น แต่สิ่งสําคัญนั้น มันเกิดขึ้นและมันปรากฏขึ้นที่ใจของท่าน เป็นความรู้ไงครับ นี่ล่ะที่เรากําลังพูดถึงกันว่าเราจะได้อะไรหลังจากการที่เรานั่งหลังขดหลังแข็งเขียนโปรแกรมออกมาเป็น Project ๆ ใหญ่ๆ กันแล้ว

คราวนี้ มาเรื่องของการทํางาน..... ท่านผู้นี้ก็ถามว่า อย่างเราเขียนเกมได้ เวลาสมัครงานเนี่ย จะต้องไปทํางานเกี่ยวกับเกมอย่างเดียวหรือ... ต้องขอบอกว่า “มันเป็นคนละประเด็น” ............ งงมั้ยครับว่าคนละประเด็นยังไง?

คนละประเด็นก็คือ Project หรือการทําโครงงานในตอนที่เราจบ ปวส. หรือปริญญาตรี ไม่ใช่สิ่งที่บอกว่าเราจะต้องไปทํางานด้านนั้น ถ้าเป็นอย่างนั้นจริงล่ะก็ นศ. ที่จบปริญญาตรีวิศวะที่ทําหุ่นยนต์เป็น Project จบไม่ต้องไปทํางานด้านหุ่นยนต์ทั้งหมดหรือครับ.... แต่เขาจะใช้ความรู้จากการที่ได้ทําหุ่นยนต์ เป็นตัวการันตีว่าเขาสามารถเขียนโปรแกรมควบคุม hardware ได้ เข้าใจโครงสร้างการทํางานและการเชื่อมต่อของ bus ต่างๆ ฯลฯ หรือถ้ามันเป็นอย่างนั้นจริง... นศ. ป.ตรีที่ Project จบเป็น WBI หรือ CAI ไม่ต้องกลายไปเป็นผู้ทํา WBI หรือ CAI ขายกันหมดหรอกหรือ... เห็นมั้ยครับ มันมีอย่างอื่นแฝงอยู่ นั่นก็คือ สิ่งที่ได้จากการทําเรื่องๆ นั้นนั่นเอง

ดังนั้น ถ้าท่านเขียนเกมเป็น project จบ ก็ไม่ใช่ว่าจะต้องไปทํางานด้านเกมเสมอไป สิ่งที่ท่านจะได้เมื่อท่านทํา project จบออกมาก็คือ idea, แนวคิดในการเขียน, การฝึกฝนความพยายาม, วิธีการในการแก้ไขปัญหาโดยใช้เทคนิคต่างๆ ในการเขียนโปรแกรม มันจะได้มาโดยไม่รู้ตัว มันเป็นการฝึกฝนเพื่อเปลี่ยนแปลงพฤติกรรม ทางอ้อมก็คือ ทําให้เราใจสู้มากขึ้น ค้นคว้าหาข้อมูลได้มากขึ้น รู้จักการทํางานร่วมกับคนอื่นๆ รู้จักอะไรๆ อีกหลายๆ อย่าง... และที่สําคัญ ท่านจะได้ความรู้ในเรื่องๆ นั้นมา เพราะท่านเป็นคนทํามันมากับมือ

................ ตรงนี้ไง มันก็คือ "ความสามารถ" ที่ท่านจะต้องเขียนบรรยายหรือ present ออกไปเวลาเข้าทํางาน อันนี้ยกตัวอย่างให้ฟัง... ท่านก็บอกได้ว่าความสามารถด้าน computer เป็นอย่างไรบ้าง... อาทิเช่น.. เขียน C/C++ ได้ ออกแบบชุดคําสั่งแบบ object ได้, เขียนโปรแกรมเพื่อจัดการฐานข้อมูล และโครงสร้างข้อมูลแบบ dynamic ได้... ฯลฯ อันนี้เราจะต้อง present ตัวเองออกไป... ถ้าอยากจะรู้ว่าทําได้จริงมั้ย เก่งจริงมั้ยล่ะก็ ยกตัวอย่าง project ให้เห็นว่า หรือว่าไปสมัครงานด้าน Java เขาอยากรู้ว่าเราเก่ง Java จริงมั้ย นี่... show ให้ดูเลย ตอนจบผมทํา Java บนมือถือ หรือทํา Java เป็น 2D แสดงแผนที่ ฯลฯ ก็บอกไป อธิบาย present ออกไปว่าทําได้ ตอบให้ฉะฉาน จะตอบฉะฉานได้ก็ไม่ยาก ถ้าเราทําเอง ทํามันกับมือ ทําด้วยความตั้งใจล่ะก็ เราก็ตอบได้อย่างแน่นอน... ดังนั้น โปรแกรมหรือ project จึงเหมือนกับเป็นแค่ตัวพิสูจน์ให้เห็นว่า เรามีความสามารถจริงดังที่ว่านั่นเอง.......

เพราะฉะนั้น ถ้าเราเขียนโปรแกรมได้ พัฒนาโปรแกรมให้เป็น object ได้ ไม่ว่าจะเป็นภาษาใดๆ เช่น C++ ถ้าท่านออกแบบคลาสด้วย C++ ได้.... ถ้าออกแบบโปรแกรมใหญ่ๆ หรือแม้แต่ออกแบบเกมใหญ่ๆ ท่านก็จะมองภาพออกว่า อะไรควรจะเอามาทําเป็นคลาส อะไรควรจะเอาไว้ในส่วนของ main นี่คือแนวคิดหนึ่งของ OOP ที่จะช่วยลดภาระให้กับท่านได้เยอะเวลาพัฒนาโปรแกรม

ลองคิดดูสิครับ ถ้าหากว่าโปรแกรมมีขนาดใหญ่มาก อัดๆๆๆๆๆ อยู่ใน main ตัวเดียว มันจะเทอะทะมาก แต่ถ้าเอามันออกมาแตกเป็น module คือ 1 class แยกจากนั้น ไม่ต้องทําให้มันสืบทอดต่อๆ กันเป็นคลาสแม่คลาสลูกก็ได้ อันนี้แล้วแต่จริตในการเขียนโปรแกรมของแต่ละท่าน จะทําคลาสแม่คลาสลูกสืบทอดกันมาก็ได้ เพื่อให้แจกจ่ายต่อไปได้ เพราะผู้เขียนเคยเห็นนักเขียนโปรแกรมหลายๆ ท่านสร้าง class แม่ สืบทอดมาเป็นคลาสลูก จากลูกสืบมาเป็นหลาย เหมือนกับชุดคําสั่งของ Java น่ะครับ สืบทอดกันมาเรื่อยๆ แต่ถ้าให้เราออกแบบเอง การสร้าง single class อาจจะคล่องตัวกว่า เราก็เอาความสะดวกความคล่องตัวตรงนี้ล่ะเข้ามาทดแทน โปรแกรมก็คล่องขึ้น เรียกใช้งานได้คล่องมากขึ้น

เมื่อโค้ดโปรแกรมแตกออกมาเป็น module แล้ว นั่นล่ะ สภาพแวดล้อมของการพัฒนาของเราก็จะกลายเป็นแบบ object นึกถึงเกม The Sims สิครับ... ทุกอย่างในเกมเป็น object เพราะคลิกอันไหน มันก็มี property และ method ให้กระทํากับมันแบบสมบูรณ์เลย เช่นกัน การที่เราจะเข้าใจเรื่องของ object นี้ได้นั้น เราก็อาจจะต้องใช้เวลาสักนิดหนึ่งในการเก็บเล็กผสมน้อย คือ ค่อยๆ เริ่มจาก basic ไปเรื่อยๆ ยกตัวอย่างเช่น เริ่มจาก C ไปเข้าเรื่องของ struct แล้วเข้าภาษา C++ หรือไปเข้า Java ต่อไป เพื่อศึกษาว่าทําอย่างไรจึงจะเขียนเป็น object ได้อย่างไร.... Java อาจจะเป็นภาษาในระดับประยุกต์ที่มันมีความเป็น object ตั้งแต่เกิด แต่ถ้าท่านเริ่มศึกษาภาษาที่ไม่มีความเป็น object อย่าง C มันเป็นแค่ function based และใช้ struct แก้ไขโซ้ยโจทย์ดู.... พอคล่องพอสมควรแล้ว ก็ลองมาปรับเป็น C++ คําตอบของความเป็น object มันก็จะโผล่ออกมา เพราะ class จะตัดความยุ่งยากออกไป นั่นล่ะ คือ แนวคิดหรือ idea ที่จะได้ มันเป็นแนวคิดที่จะเอาไปตอบใครๆ เขาได้ว่าการเขียนโปรแกรมแบบ oop นั้นเป็นอย่างไร ท่านจะตอบมันได้แบบไม่ต้องอิงทฤษฎี เพราะอะไรน่ะหรือครับ ก็เพราะว่าท่านได้ทดลองปฏิบัติ ได้เขียนโปรแกรมข้ามความที่มันยังไม่เป็น object มาสู่ความเป็น object แล้วนั่นเอง

อย่าเพิ่งเชื่อครับ... ต้องลองพิสูจน์ดู สิบปากว่าไม่เท่าตาเห็น แต่ทั้งนี้ทั้งนั้น ต้องขอบอกนะครับ มันขึ้นอยู่กับตัวผู้ศึกษาด้วย ไม่ใช่ว่าขึ้นอยู่กับวิธีการเสมอไป บางท่านศึกษา Java เป็นภาษาแรก แต่ก็ได้ idea เลยก็มี เพราะว่ามีพื้นฐานจากอะไรบางอย่างมาแล้ว ตรงนี้ต้องบอกว่าระดับการเรียนรู้ของคนเรานั้นไม่เท่ากัน บางคนไปเร็ว บางคนไปช้า มันมีความแตกต่างกันตรงนี้ ดังนั้น วิธีการที่ได้นําเสนอไปในบทความนี้ จึงเป็นแค่แนวทางแบบกลางๆ เท่านั้น อย่าฟันธงว่าจะต้องใช้ได้กับการเรียนรู้ของทุกๆ คนเสมอไป....

โอ........................ พิมพ์มาได้อย่างไรเนี่ย หนาขนาดนี้ เอาล่ะ พักก่อน... แล้วเจอกันใหม่ครับ

ที่มา http://www.thaidev.com/index.php?cmd=showtitle&id=207

หมายเลขบันทึก: 138177เขียนเมื่อ 13 ตุลาคม 2007 16:25 น. ()แก้ไขเมื่อ 13 มิถุนายน 2012 11:01 น. ()สัญญาอนุญาต: จำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (1)

จบคอมมานานแล้ว แต่ไม่มีแรงจูงใจทำอะไรเกี่ยวกับคอมเลยละครับ

ตอนนี้ก็เริ่มจะมารื้อฟื้นการทำ CAI แล้ว กะจะทำผลงาน

พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท