มากกว่าครึ่งของนักเรียนคณะที่มีวิชา "โปรแกรมมิ่ง" มักจะเขียนโปรแกรมไม่เก่งหรือถึงขั้นเขียนไม่ได้เลย แล้วเคยสงสัยมั้ยว่าทำไมเพื่อนบางคนที่มันก็เข้าคณะมาพร้อมๆ เรา เริ่มเรียนโปรแกรมมิ่งก็พร้อมๆ กันเราทำไมเขาถึงเก่งจัง
นี่เป็นเหตุผลหนึ่งในหลายๆ ข้อที่ผู้เขียนลิสต์มาให้ว่าทำไมพวกโปรแกรมเมอร์มือใหม่ถึงเขียนโปรแกรมไม่ได้ยังไงก็ยังเขียนไม่ได้อยู่ยังงั้น
หมายเหตุ* วันนี้จะเน้นในมุมมองของนักเรียนภาคคอมละกัน
1. เขียนโปรแกรมให้ได้ดีต้องมี "หัว" และ "จินตนาการ"
โปรแกรมมิ่งไม่ได้เหมาะกับคนทุกคนหรอกนะ!
แต่ละคนมีรูปแบบการคิดที่ต่างกัน บางคนคิดแบบเป็นระเบียบจัดอะไรๆ วางแผน เป๊ะๆ แต่บางคนมักใช้อารมณ์เป็นตัวตัดสินใจ โทรนัดเพื่อนไว้แต่ฉันอยากไปที่โน่น โทรยกเลิกละกัน ไปล่ะ
คนที่จะเขียนโปรแกรมให้ดี (ไม่ได้พูดว่าเก่งนะ พูดว่าเขียนให้"ดี") ได้นั้นจะต้องมีลำดับการคิดที่ค่อนข้างเป๊ะ! เขาต้องรู้ขั้นตอนการทำงานของโปรแกรมทุกอย่าง อย่างละเอียด เจาะลึก หลังจากนั้นถึงค่อยมาสั่งงานให้โปรแกรมทำงาน
ก่อนที่โปรแกรมจะฉลาดได้ โปรแกรมเมอร์ต้องฉลาดก่อน
คำว่าฉลาดในที่นี้หมายถึงรู้ว่าโปรเซสของเราเนี่ยมันทำงานยังไงแค่นั้นนะ
ผู้เขียนมักจะสอนน้องๆ เขียนโปรแกรมแล้วพบว่าปัญหาหลักอย่างหนึ่งที่ทำให้เขียนโปรแกรมไม่ได้คือยังไม่รู้เลยว่าโจทย์ที่จะทำเนี่ยเขาจะเอาอะไร ในเมื่อตัวเองยังไม่รู้วิธีคิด จะไปสอนให้โปรแกรมคิดได้ยังไงล่ะ จริงมั้ย?
> พยายามจัดความคิดตัวเองให้เป็นขั้นตอน และเป็นระเบียบ ลดความคิดแนวคิดแบบตามใจฉันลงหน่อย
2. ไม่ได้อยากเขียนโปรแกรมได้จริงๆ
พูดง่ายๆ คือยังทุ่มเทไม่พอ ฉันไม่ได้อยากเขียนโปรแกรมเป็นขนาดนั้น แค่เข้าคณะที่มันต้องเรียนเขียนโปรแกรมเท่านั้น
ลองสำรวจตัวเองดูว่าคุณอยากเขียนโปรแกรมเป็นขนาดนั้นหรือไม่ ถ้าปากบอกว่าอยากเขียนแต่มือไม่ขยับพิมพ์คีย์บอร์ด (ไม่นับพิมพ์เพื่อโซเชียลฯ หรือเล่นเกม ทำรายงาน ฯลฯ นะ)
อาทิตย์นึงคุณอาจจะมีคาบเรียนโปรแกรมมิ่งแค่ไม่กี่ชั่วโมง คุณคิดว่ามันพอรึเปล่าล่ะทำหรับทำให้เขียนโปรแกรมเก่ง?
> ถ้าไม่อยากเขียนโปรแกรมจริงๆ แล้วยังอยู่แค่ปี1-2แนะนำว่าให้ย้ายคณะ อย่าทนเสียเวลาต่อเลย แต่ถ้าอยู่ปี3-4แล้วแนะนำให้ทนเรียนไป แล้วจบแล้วไปทำงานสายอื่น เราไม่จำเป็นต้องทำงานสายเดียวกับที่เรียนมา
3.ไม่เข้าใจเลย อาจารย์สอนไม่รู้เรื่อง
คุณอย่าคาดหวังกับการสอนในมหาวิทยาลัยมากนัก ไม่ใช่ว่าอาจารย์ทุกคนจะสอนรู้เรื่อง ถ้าคุณเจออาจารย์ที่"สอนเก่ง"ก็ถือว่าโชคดีไป แต่ถ้าคุณไปเจออาจารย์ที่เก่งแต่สอนไม่เก่ง (โอกาสเยอะนะในข้อนี้) ก็เป็นหน้าที่ของคุณนะ ในการปรับตัวและพยายามฟังมันให้รู้เรื่อง หรือไม่งั้นก็ทำแบบผู้เขียน นั่นคือ
> "อ่านเองมันซะเลย ไม่ง้ออาจารย์ (ในวิชาที่ฟังอาจารย์ไม่เข้าใจเลย) "
4. คิดว่าตัวเองทำไม่ได้
อคติเป็นสิ่งที่ขั้นกลางระหว่าง "noop-มือใหม่" และ "pro-ระดับยอดฝีมือ" ลองดูดีๆ ว่าเพื่อนในคณะที่ทุกคนคิดว่าเจ้านี่มันเขียนโปรแกรมได้ในระดับเทพเลย ครั้งหนึ่งก็เคยnoopมาก่อน แต่เพราะความคิดว่า "เราจะต้องทำให้ได้" แล้วพยายามถืบตัวเองให้เลื่อนระดับสูงขึ้นไปเรื่อยๆ
ถ้าคุณแย้งว่า "ฉันก็คิดว่าตัวเองต้องทำให้ได้แล้วนะ แต่ไม่เป็นจะได้เลย" ผู้เขียนก็ให้คอมเม้นท์ว่าถ้าคุณมีความมุ่งมั่นว่าตัวเองทำได้จริงแล้วนั้น
> คุณจะหาวิธีทำให้ตัวเองทำได้เองโดยไม่ต้องให้ใครมาบอกว่าคุณจะต้องทำอย่างไร
5. ใจร้อน อยากเขียนเป็นเร็วๆ .. โปรแกรมมิ่งคือการสะสมไปเรื่อยๆ นะ
แค่ขยันหรือตั้งใจเรื่อนไม่กี่คาบ หรือแนวคิดที่ว่าฉันอยากสร้างโปรแกรมออกมาเป็นผลงานตั้งแต่คาบแรกเลยน่ะ มันไม่(ค่อย)มีหรอกนะ
ทฤษฎี อัลกอริทึม โครงสร้างข้อมูล เทคนิคยิบย่อยทางการเขียนโปรแกมมีเยอะแยะไป เรียนยังไงก็ไม่จบ เทคโนโลยีใหม่ๆ ออกมาเร็วมาก ขนาดว่าหยุดตามข่าวก็ไม่ทันชาวบ้านแล้ว (ทำงานสายนี้ต้องทำใจว่าต้องเรียนรู้ไปตลอดชีวิต)
แล้วในเมื่อมันเยอะขนาดนี้คิดว่าในเวลาไม่กี่วันคุณจะเข้าใจมันได้หมดเหรอ คุณอาจจะใช้เวลาหลายเดือนในการทำความเข้าใจเรื่องพวกนั้น และใช้เวลาอีกหลายปีกว่าคุณจะเข้าใจว่าความรู้ที่มีนั่นน่ะเอาไปเขียนโค้ดโปรแกรมให้ออกมาเป็นงานได้อย่างไร
ผู้เขียนคงไม่มีอะไรจะบอกนอกจาก
> "สู้ๆ นะ น้องๆ ที่กำลังเดินตามมา (รวมถึงตัวเองที่กำลังเดินตามรุ่นพี่ไปอีกที)"
6. เขียนโค้ดก่อนโดยที่เรายังไม่รู้เลยว่าโปรแกรมต้องทำงานยังไง
เกือบจะทั้งหมด .. ใช่เลย ต้องเรียกว่าอย่างนั้น เพราะคนที่เขียนโปรแกรมไม่เก่งเกือบจะทุกคนจะเริ่มโปรเจคด้วยการ "เขียนโค้ด"
เอ๊ะ .. โปรเจคเขียนโปรแกรม ไม่ให้เริ่มด้วยการเขียนโค้ดแล้วจะให้ทำไงล่ะ?
บอกให้เลยว่าคนที่เขาเก่งๆ เขาไม่เริ่มด้วยการเขียนโค้ดหรอกนะ แต่เริ่มด้วยสิ่งที่อาจารย์มักจะสอนเป็นอย่างแรกในคาบการเขียนโปรแกรม นั่นคือ วางแผนเขียน Algorithm หรือวาด Flowchart (เริ่มคุ้นๆ แล้วใช่มั้ย ฮา)
คนที่เก่งเขาไม่เริ่มเขียนหรอกนะ ถ้าเขายังไม่มั่นใจว่าเขาต้องเขียนอะไรกันแน่ ไม่งั้นก็จะเป็นเหมือนคุณๆ ที่หลังจาก new Project มาแล้วก็นั่งงงมองเคอเซอร์กระพริบว่าฉันควรจะเขียนอะไรลงไปกันแน่เนี่ย แต่ส่วนใหญ่แล้วคุณจะไม่เห็นพวกเขาเขียน Flowchart กัน เพราะคนที่เก่งแล้วเขามักจะวาด Flowchart ในหัวได้เลย
อย่าไปคิดว่าเขาเก่งกว่า เริ่มแรกทุกคนก็ต้องเริ่มกันแบบนั้นแหละ แค่หลังจากเรียนไปเรื่อยๆ แล้วคุณเลิกทำมันไป แต่พวกนั้นเขายังทำอยู่ .. จนถึงจุดหนึ่งที่เขาสามารถเขียน Flowchart ในใจได้คุณจึงเห็นว่าเขาเริ่มด้วยการเขียนโค้ดเลยยังไงล่ะ
> Algorithm & Flowchart สำคัญมาก ไม่มีมันก็ไม่ต้องลงโค้ด มันเป็นไปไม่ได้อยู่แล้วที่งานจะออกมาได้ในเมื่อคุณยังไม่มีแผนเลยว่าต้องเดินไปทางไหน
7. ไม่รู้เหรอ ถาม google สิ!
คนเราไม่รู้ทุกอย่างหรอก โดยเฉพาะศาสตร์ที่ออกมาแค่อาทิตย์เดียวก็อาจจะตกรุ่นไปซะแล้วแบบวิทยาการคอมพิวเตอร์
แต่ไม่ต้องห่วง!
จากประสบการณ์ของผู้เขียน 90% หรือมากกว่าของปัญหาที่เราประสบพบเจอนั้น "มีคนเจอมาก่อนเราแล้ว!" (เอ้า เฮ~~)
เมื่อมีคนเจอมาก่อน ก็แปลว่ามีคนหาคำตอบเจอแล้วเหมือนกันว่าปัญหานี้ มันแก้ยังไง Errorแบบนี้ต้องเพิ่มconfigตัวนี้นะ ตรงนี้คุณลืมประกาศvar ตรงนั้ก็ บลาๆๆ
แต่คุณจะหาคำตอบพวกนั้นได้ก็ต้องใช้ Search Engine (โปรแกรมสำหรับค้นหาแบบ google น่ะ) ให้เป็นก่อน รู้มั้ยว่าเวลาที่พวกที่คุณเห็นว่าเป็น God of Programming มันรู้ทุกอย่าง ถามได้ตอบได้ในทันทีนั้น เขาก็อาจจะรู้เท่าคุณนั้นแหละแต่สกิลการค้นหาคำตอบมันเร็วมากจนคุณนึกว่าเขารู้คำตอบอยู่แล้ว
> ลองหาเถอะ ทุกอย่างแทบจะมีอยู่ในโลกอินเตอร์เน็ต เพียงแต่คุณหามันไม่เจอเท่านั้นเอง
8. เจอ Error ความคิดแรกคือเรียกเพื่อนช่วย
แล้วทำไมเพื่อนถึงรู้ล่ะว่า Error นี้มันแก้ยังไง? เคยถามตัวเองแบบนี้ต่อบ้างมั้ย
โดยส่วนตัวเอง ผู้เขียนมักจะบอกน้องๆ ที่มาเรียนด้วยว่า "พี่ก็ไม่ได้รู้หรอกนะว่า error ตัวนี้มันแก้ยังไงในครั้งแรกที่เจอ แต่ก็พยายาม google หาจนเจอ (กลับไปอ่านข้อที่แล้วนะ) ลองก๊อปปี้คำเออเร่อร์พวกนั้นไปหาดูซิว่าจะเจอวิธีแก้มั้ย แล้วถ้าเจอก็จำไว้ว่า error คำนี้ ต้องแก้อย่างนี้นะๆๆ ถ้าครั้งหน้าเจออีกและยังไม่จำ ก็ไปหาใหม่ มันต้องมีสักวันนั่นแหละ ที่เราจำมันได้แล้วก็จะเขียนโค้ดตรงนั้นไม่ผิดอีกเลย"
> หยุดช่วยเพื่อนที่เก่งแล้วให้เก่งขึ้นไปอีกเถอะ ทำให้ตัวเองเก่งบ้าง เพื่อนคนนั้นจะได้ย้อนกลับมาถามเราบ้าง
วันนี้เอาไว้แค่นี้ก่อน ไว้วันหลังนึกได้เพิ่มจะมาเล่าต่อละกัน
update:
ตอนต่อไปมาแล้วนะ อ่านได้ที่นี่ หลายๆ วิธีที่จะทำให้คุณเขียนโปรแกรมเก่งขึ้น