I'm thinking what am I THINK?
Group Blog
 
All Blogs
 
เทคนิคการเขียนโปรแกรม

1.พัฒนาทักษะโดยการพิมพ์

จำเป็นอย่างมากที่ผู้เขียนโปรแกรมควรจะพัฒนาทักษะการเขียนโปรแกรมโดยการฝึกพิมพ์คำสั่งต่าง ๆ ของภาษานั้น ๆ ให้ชินเข้าไว้ การ Copy จากโค้ดต้นแบบมาแก้ไข และ Paste ลงในโปรแกรมของเรา อาจจะทำให้เราเข้าใจได้ในระดับหนึ่ง แต่เมื่อใดที่เราไม่มี source code ให้ Copy มันเป็นการยากที่จะรื้อฟื้นความรู้ขึ้นมา เพราะเราไม่ได้ฝึกฝนทักษะในการพิมพ์เอาไว้ เราใช้แต่การ Copy และ Paste ผู้เขียนขอแนะนำให้ศึกษาไปพร้อมกับปฏิบัติด้วยตนเอง ถ้าไม่จำเป็นจริง ๆ ไม่ควรเปิด source code ขึ้นมาคอมไพล์ และแก้ไขจากตรงนั้น เพราะถ้าโปรแกรมทำงานได้ไม่ตรงกับที่เราต้องการแล้วล่ะก็ ผู้เขียนโปรแกรมอาจจะแก้ไขกลับไปอย่างเดิมไม่ได้ ถ้ามองโปรแกรมไม่ออก
ผู้ที่ฝึกฝนการเขียนโปรแกรมโดยส่วนมากแล้ว อาจจะต้องการ Source code จากซีดีรอมประกอบเพื่อใช้ในการฝึกฝน และเพื่อช่วยให้แน่ใจว่าโค้ดโปรแกรมที่เราเขียนสามารถคอมไพล์ได้แน่นอน วิธีการดีที่สุดที่แนะนำก็คือ ทดลองด้วยตัวเอง ถ้าไม่แน่ใจ ให้เปรียบเทียบกับโค้ดโปรแกรมที่มีมาให้จากซีดีรอม ถ้า code จากซีดีรอมสามารถคอมไพล์ได้ แต่ที่เราเขียนคอมไพล์ไม่ผ่าน แน่นอน จะต้องมีจุดใดผิดพลาด ให้ค่อย ๆ ไล่ลำดับโปรแกรมไปเรื่อย ๆ เพื่อหาจุดที่แตกต่าง แล้วก็จะพบจุดนั้นเอง
เปรียบเทียบแล้วก็เหมือนกับการทำรายงาน ถ้าเราทำรายงานโดยการ Copy และ Paste เวลาที่เราจะออกไปนำเสนอให้ใครฟัง ถ้าเราไม่รู้ในเนื้อหาอย่างถ่องแท้ ย่อมนำเสนอได้ไม่ดี แต่ถ้าเราเขียนและฝึกฝนโดยการดัดแปลง แก้ไข สรุปความด้วยตัวเอง มันจะเป็นอุบายที่ช่วยในการจดจำได้

2.วิจัยไปทีละส่วน ๆ

หลาย ๆ ครั้งที่การเขียนโปรแกรม มักจะเขียนจนครบทุกส่วนแล้วทดลองทีเดียว ผลก็คือ ถ้าเกิดข้อผิดพลาดในส่วนที่ 1 อาจจะกระทบส่วนที่ 2 โดยอัตโนมัติ ทำให้เวลาเราแก้ไข อาจจะพลาดจากส่วนที่ 1 ไป การใช้ Comment เพื่อปิดบังบางส่วนเอาไว้ก่อน และทดสอบเฉพาะส่วน ๆ ก่อน จากนั้นค่อยนำไปรวมในส่วนใหญ่ ๆ ก็จะช่วยให้การเขียนโปรแกรมทำได้ง่ายขึ้น และมั่นใจได้มากขึ้น
การหยิบเอาปัญหาบางอย่างในการเขียนโปรแกรม ขึ้นมาเป็นหัวข้องานวิจัยเล็ก ๆ ก็เป็นทางออกที่ดี เช่น ถ้าเราต้องเขียนโปรแกรมเกี่ยวกับการนำเอาค่าทางสถิติมาใช้แล้วล่ะก็ เราก็แบ่งออกเป็นส่วน ๆ โดยหยิบเอาส่วนของสถิติมาวิจัยก่อนก็ได้ โดยทดลองเขียนโค้ดโปรแกรมหาค่า median (ค่ากลาง) , averate (ค่าเฉลี่ย) และค่า standard deviation (การกระจาย) เมื่อเสร็จแล้ว เราก็ได้วิธีการออกมา ให้เก็บวิธีการนี้เอาไว้ เมื่อเราเขียนโปรแกรมใหญ่จนครบทุกขั้นตอนแล้ว พอถึงขั้นตอนที่จะต้องหาค่าสถิติ เราก็เพียงนำโค้ดโปรแกรมที่เราได้วิจัยแล้วมาใช้นั่นเอง

3. การดีบักจะช่วยให้เรามองโปรแกรมได้ทะลุ

ดีบัก หรือดีบุก (debug) มีประโยชน์อยู่อย่างมากไม่ว่าท่านจะศึกษาภาษาใดก็ตาม การดีบักก็คือ การตรวจสอบกระบวนการทำงานของโปรแกรม การตามดู (Monitor) ว่าตัวแปรในขณะที่โปรแกรมทำงานั้นเป็นอย่างไรกันบ้าง อยู่ในอาการใดกันบ้าง เพื่อที่จะได้นำไปวิเคราห์ว่าวิธีการที่เราทำนั้น ให้ผลเป็นดังที่เราต้องการหรือไม่ ถ้าตัวแปรที่ตรวจสอบนี้ถูกต้อง แต่ผลลัพธ์กลับผิดพลาด เราก็จะรู้และมั่นใจได้ว่าเราเขียนมาถูกแล้ว แต่วิธีการอาจจะผิดพลาดไปอีกนิดหนึ่ง และจะรู้ได้ว่าผิดตรงส่วนไหน
การดีบักในการเขียนโปรแกรมบน Windows เราสามารถใช้คำสั่ง TRACE( ) กับ Visual C++ (MFC) ได้

TRACE(“Value of x=%d , y=%d\n”,man.x,man.y);

คำสั่ง TRACE( ) จะใช้ในการแสดงค่าออกมาในช่อง Debug เมื่อเรากดปุ่ม F5 เพื่อทำการ Debug หรือถ้าจะ Debug ง่าย ๆ ก็ใช้ AfxMessageBox , MessageBox ช่วยก็ได้ หรือใช้ MsgBox ใน VB แต่ถ้าเป็นภาษาอื่น ๆ ก็ให้ใช้วิธีการของภาษา ๆ นั้น ในการดีบัก เช่น ภาษา ASP, PHP, PERL ที่ไม่มีโหมดดีบัก ให้ใช้คำสั่ง print ช่วยในการแสดงข้อความออกทางหน้า Browser เพื่อดูว่าค่าที่ส่งมานั้นถูกต้องหรือไม่ เป็นต้น


4.ไม่มี Error ไหนเกิดขึ้นอย่างไร้เหตุผล

เมื่อมีปัญหาในการ Compile หรือ Linker การแก้ไขปัญหาก็คือ จะต้องดู Error เหล่านี้ว่ากำลังบอกถึงจุดผิดพลาดอะไร มีไม่น้อยที่เมินเฉยต่อข้อความ Error ที่เป็นภาษาอังกฤษ ซึ่งถ้าเราแปลออกมาแล้ว ข้อความ Error เหล่านี้จะบอกเองว่า เราจะไปแก้ไขต่อที่ไหน บางครั้งเป็นเพียงแค่ Error จุดเดียว แต่กระทบไปหลายบรรทัด ข้อความ Error จึงปรากฏออกมาเยอะ แต่นั่นก็ไม่ใช่ปัญหา
เช่น

error C2065: 'MAdXUNIT' : undeclared identifier
error C2664: 'SetPos' : cannot convert parameter 1 from 'char [3]' to 'int'

จากตัวอย่าง Error อย่างแรกก็คือ undeclared identifier คำว่า undeclared แปลว่า ไม่ได้ประกาศ มาจากคำว่า un + declare และเติม –ed การ declare ก็คือ การประกาศตัวแปรนั่นเอง เช่น เราพูดว่า
“ให้ดีแคลร์ (Declare) ตัวแปร time เอาไว้ด้วย”
คำว่าดีแคลร์ (declare) ก็คือความหมายเดียวกันนี้นี่เอง เมื่อบวกกับ un ก็คือ “ไม่” คำว่า undeclared จึงหมายความไม่ได้ประกาศเอาไว้ คำว่า identifier ก็หมายถึงตัวแปรนั่นเอง เพราะฉะนั้น Error ที่บอกว่า MAdXUNIT : undeclared identifier ก็หมายถึง คำว่า “MAdXUNIT” ไม่ได้ประกาศเอาไว้นั่นเอง
อีก Error หนึ่ง ผิดตรง SetPos เพราะ Error บอกว่า
“ไม่สามารถ (cannot) แปลง (convert) พารามิเตอร์ (parameter) 1 จาก (from) ตัวแปรแบบ char [3] ไปเป็น int ได้”
เราใช้ความเข้าใจในภาษาที่เรามี บวกกับเรื่องของศัพท์ทางการเขียนโปรแกรมอีกนิด ก็จะเข้าใจได้ว่า Error นี้เกิดจากการที่เราใส่ค่าพารามเตอร์ให้กับฟังก์ชั่น SetPos( ) ผิด คือ พารามิเตอร์ตัวแปร จะต้องใส่เป็น int แต่เราคงไปใส่เป็นอย่างอื่น จึงทำให้มันฟ้อง Error แบบนี้ออกมา
เมื่อเราไล่จาก Error ไปเรื่อย ๆ เราก็จะพบเองว่า ข้อผิดพลาดอยู่ที่บรรทัดใด และควรจะแก้ไขอย่างไร ขอให้เข้าใจว่า ทุก ๆ Error ที่เกิดขึ้น ย่อมเกิดมาจากสาเหตุ ไม่เหตุใดก็เหตุหนึ่ง ถ้าเราเขียนไม่ตรง เขียนผิด ย่อมเกิด Error ได้อยู่แล้ว เพียงแต่ว่า เราสนใจการแก้ไข Error หรือจะแก้ไขแบบเดาสุ่มเอาซึ่งอาจจะใช้เวลามากกว่าการแปลข้อความ Error และแก้ไขไปตามเหตุนั้น
ไม่มี Error ไหนเกิดขึ้นอย่างไรเหตุผล ถ้าเกิดโปรแกรมเราเขียนผิด เช่น จะพิมพ์ printf แต่กลับไปพิมพ์เป็น ptintf และมันยังคอมไพล์ผ่านอีกก็ผีหลอกแล้วล่ะครับ เพราะฉะนั้น ทำความเข้าใจกับจุดนี้ให้ดี ๆ


5. Error มีสองลักษณะ

ปัญหาในการเขียนโปรแกรมมีมากมายหลังจากเราคอมไพล์ อาจจะมีถึง 100 กว่า ๆ บรรทัด ซึ่งแต่ละปัญหานั้น มักเกิดจากการที่เราเขียนโปรแกรมสองลักษณะ คือ
1. เขียนไม่ถูกต้องตามที่มันประกาศเอาไว้
2. เขียนแล้วไม่ได้ผลตามที่เราตั้งใจไว้
ข้อแรก เมื่อเราเขียนโปรแกรมแล้ว มัน Error จากการเขียนเอง เช่น ฟังก์ชั่นประกาศเอาไว้แบบนึง แต่กลับเรียบใช้อีกแบบหนึ่ง แน่นอน มันย่อมผิดอยู่แล้ว พิมพ์ตกหล่น หรือลืมทำการ include แน่นอน การแก้ไขก็คือ เพิ่มเติมเข้าไปซะ ก็จะช่วยแก้ไขได้
ข้อที่สอง เขียนแล้วไม่ได้ผล เช่น เราจะสร้างเกมเขาวงกต แต่เมื่อลองเล่นแล้ว มันติด ไม่ยอมเดินไปตามที่ต้องการ เราก็จะต้องมาแก้ไขกันใหม่ที่อัลกอริธึม ถ้าอัลกอริธึมดี มันก็ได้ผลตามที่ต้องการ แต่ถ้าไม่ดี ก็ต้องเปลี่ยนใหม่ แก้ไขใหม่
ปัญหาที่เกิดขึ้น 2 ลักษณะที่กล่าวมาในข้างต้น ล้วนแก้ไขได้ง่าย ๆ ถ้าเราใช้สติปัญญาในการแก้ไข และแก้ไขอย่างใจเย็น ๆ มีสติ ไล่ลำดับไปจากผล จากสาเหตุ ไล่ไปจนถึงตัวโปรแกรม เมื่อเราฝึกฝนทักษะเหล่านี้จนชำนาญดีแล้ว มันก็จะกลายเป็นนิสัยในการเขียนโปรแกรมที่ดีของเราต่อไป เมื่อเราไปเขียนโปรแกรมอะไร เราก็จะเข้าใจกับโครงสร้างของมันได้ง่าย และมองออกว่า เราควรจะแก้ไขตรงไหน


6. ฝืนตัวเอง

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


7. สติ+สมาธิ+ปัญญา+มัชฌิมา+พยายาม

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

สู้ๆ นะครับ น้องๆๆๆ




Create Date : 28 ธันวาคม 2549
Last Update : 28 ธันวาคม 2549 5:15:11 น. 1 comments
Counter : 737 Pageviews.

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


โดย: เจี๊ยบ (sexybodylove ) วันที่: 28 ธันวาคม 2549 เวลา:6:54:52 น.  

ชื่อ : * blog นี้ comment ได้เฉพาะสมาชิก
Comment :
  *ส่วน comment ไม่สามารถใช้ javascript และ style sheet
 

Friday_Evening
Location :


[Profile ทั้งหมด]

ฝากข้อความหลังไมค์
Rss Feed

ผู้ติดตามบล็อก : 1 คน [?]




ครับ ตอนนี้กำลังเรียน Computer science ปี 4 อีก 3 เดือน ผมก็จะเปลี่ยนจากนักศึกษา เป็น พนักงานโปรแกรมเมอร์ของบริษัทแล้วครับ
ใช้ๆ ไป ให้คุ้มค่านะ ชีวิต
Friends' blogs
[Add Friday_Evening's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.