GORAGOD.com

มือใหม่หัดเขียนโปรแกรม เริ่มต้นอย่างไรดี

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

เลือกภาษาอะไรดี
ภาษาโปรแกรมในปัจจุบันมีหลากหลายภาษามาก ทุกภาษามีข้อดีข้อด้อยและข้อจำกัดต่างกัน การเลือกภาษาที่จะเขียนมีปัจจัยหลายอย่างประกอบ
  1. Application ที่ต้องการจะทำ เช่น Win App หรือ Web App หรือ Mobile App เราคงต้องเลือกสักอย่างเพื่อจะได้โฟกัสได้ถูกที่ตอนเริ่มต้น
  2. เป้าหมายงานที่ต้องการจะทำในอนาคต สำหรับคนที่มีเป้าหมายจะทำงานบริษัท หากมีบริษัทในใจแล้ว ก็ต้องคำนึงว่า บริษัทเป้าหมายที่ต้องการเขาใช้ภาษาอะไรในการทำงาน ต้องเลือกให้ถูก (ผิดภาษาเขาอาจไม่รับเน้อ) ส่วนคนที่คิดจะเป็นฟรีแลนซ์ แนะนำให้เลือกภาษาตามเทร็นด์ (หัวข้อถัดไป)
  3. เทร็นด์ หรือ ความนิยมในตัวภาษา จะบอกเราว่า ภาษานี้จะมีอนาคตแค่ไหน เนื่องจากการเขียนโปรแกรมเดียวกันมันสามารถสร้างได้จากหลายภาษา เช่น Web App สามารถสร้างจาก PHP ASP หรือ JAVA ...... ได้ ถ้าภาษาไหนมีแนวโน้มจะไม่เป็นที่นิยมในอนาคต ก็ไม่ควรเลือกเรียนภาษานั้นๆ
  4. ชุมชน หรือ Community ในสมัยนี้เวลาที่ติดขัดอะไรมันไม่ยากเหมือนสมัยผมอีกแล้ว เพราะสมัยนี้มีอินเตอร์เน็ตที่สามารถเข้าถึงได้ง่าย การศึกษา เรียนรู้ ตอบข้อสงสัยต่างๆ หรือแม้กระทั่งติดขัดอะไร สามารถหาได้จากอินเตอร์เน็ต หรือสอบถามได้จากชุมชน ยิ่งชุมชนมีความแข็งแกร่ง มีสมาชิกเยอะ นั่นหมายความว่า ภาษานั้นๆมีอนาคตกว่า
  5. เครื่องมือที่ต้องใช้ อันนี้คือต้นทุนแบบหนึ่ง ที่เราจะต้องจัดหามาในตอนเริ่มต้น ยกตัวอย่างเช่น จะเขียน IOS App ก็คงต้องมีเครื่องคอมพิวเตอร์ Apple ในการเขียน หรือ Web App ซึ่ง Server PHP หาง่ายกว่า ASP

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

หลังจากเลือกภาษาได้แล้ว สิ่งที่ต้องศึกษาเป็นอย่างแรกคือการเรียนรู้ syntax ของภาษานั้นๆ เพราะแต่ละภาษาจะมีรูปแบบการเขียนเฉพาะตัว ซึ่งเราต้องเขียนให้ถูกหลักภาษานั้นๆ
มีคำถามบ่อยๆ ว่าเริ่มจาก Framework เลยดีมั้ย ผมตอบแบบฟันธงเลยว่า ตอนเริ่มต้นอย่าเลยเชียว เพราะสิ่งที่จะทำให้เราไปต่อได้อย่างยืนยาวคือพื้นฐานของภาษา ไม่ใช่ Framework (เนื่องจาก Framework มันเกิดใหม่อยู่เรื่อย และที่มีอยู่ก็ดับไป)
สิ่งที่ต้องเรียนรู้จริงๆในตอนเริ่มต้น คือ รูปแบบวิธีการเขียนของแต่ละภาษา การใช้คำสั่งพื้นฐานต่างๆ เช่น if case for while หรือฟังก์ชั่นพื้นฐาน เช่น echo print กฏเกณฑ์การสร้างโปรแกรมเพื่อให้ได้โปรแกรมอย่างง่าย (Hello World นั่นแหละครับ)
มีคำถามบ่อยๆ อีกเหมือนกันว่าแล้วเราต้องจำทุกฟังก์ชั่นของภาษานั้นเลยมั้ย ตอบได้อีกเหมือนกันว่า ไม่จำเป็นครับ (จำได้ก็ดี) เนื่องจากเราไม่ได้ใช้ทั้งหมดของความสามารถที่มีอยู่หรอก และผมไม่เชื่อว่าจะมีใครจำได้หมด คำสั่งต่างๆ มันจะจำเป็นเมื่อเราต้องเขียนโปรแกรม และจำเป็นต้องใช้มันเท่านั้น ยกตัวอย่างเช่น คำสั่งเขียนไฟล์ บางโปรแกรมไม่จำเป็นต้องมีการเขียนไฟล์ เราไม่จำเป็นต้องรู้ในตอนนี้ก็ได้ แต่ทักษะที่ควรมี คือเราต้องมีความสามารถในการค้นหาสิ่งที่เราต้องการได้
ก้าวที่สอง
จะเป็นโปรแกรมเมอร์ ต้องสร้างโปรแกรมได้ โปรแกรมจะเล็กหรือใหญ่ไม่สำคัญ สำคัญที่โปรแกรมนั้นต้องทำงานได้ แก้ปัญหาได้ และ มีคนใช้ (ขาดข้อหนึ่งข้อใด มันก็คือไฟล์ขยะ) ตอนเริ่มต้น เรามักจะไม่รู้ว่าจะต้องเขียนโปรแกรมอะไรดี คำแนะนำจากผมคือ
  1. สร้างโปรแกรมเพื่อแก้ปัญหาให้ตัวเอง โดยมองว่าเรามีปัญหาอะไนในชีวิตบ้าง แล้วเลือกสร้างโปแกรมเพื่อแก้ปัญหานั้นๆ เช่น 30 แล้ว ยังไม่มีเมีย สร้างแอปหาคู่มันซะเลย ถ้าสุดท้ายเราได้คู่จากโปรแกรมที่เราสร้าง นั่นหมายความว่าเราเขียนโปรแกรมได้แล้ว การสร้างโปรแกรมเพื่อแก้ปัญหาให้ตัวเอง เราจะมีตัวเองเป็นคนตรวจสอบว่าโปรแกรมที่เราสร้าง สามารถใช้งานได้จริงหรือไม่ มีข้อผิดพลาดหรือไม่ หรือจะปรับปรุงยังไงได้
    ในทางปฏิบัติ เราควรเริ่มต้นจากการแก้ปัญหาเล็กๆในชีวิตก่อน เช่นโปรแกรมจดบันทึก โปรแกรมแจ้งเตือนสำหรับคนขี้ลืม อย่ามองว่าการทำโปรแกรมที่มีอยู่ในท้องตลาดเยอะแยะเป็นเรื่องที่ไม่น่าทำ แต่ให้พิจารณาว่าโปแกรมที่มีเยอะแยะในท้องตลาดมีข้อบกพร่องอะไร เราจะทำได้ดีกว่าหรือไม่ เพราะโปรแกรมที่ประสบความสำเร็จคือโปแกรมที่มีคนใช้เท่านั้น
  2. จากที่ผมบอกไปข้างต้นว่าความสำเร็จของโปรแกรมมันวัดจากการที่มีคนใช้ ดังนั้นสำหรับมือใหม่ (ผมก็ใช้วิธีนี้มาตั้งแต่ตอนเริ่มต้น) ผมแนะนำให้เขียนโปรแกรมแจกมันซะเลย เพราะมันให้ประโยชน์หลายข้อ
    • แน่นอนว่าถ้ามีคนนำโปรแกรมของเราไปใช้จริง ก็จะหมายความว่าเราสามารถเขียนโปรแกรม (เพื่อให้คนอื่นใช้) ได้ ข้อนี้สำคัญที่สุด เพราะการเขียนโปรแกรมคือการแก้ปัญหาของคน(อื่น) หรือคนที่จ้างเราเขียนนั่นแหละครับ
    โปรแกรมตอนเริ่มต้นยังไม่สมบูรณ์หรอกครับ ฟีดแบ็คจากผู้ใช้จะเป็นผลประโยชน์อย่างหนึ่งให้เรารู้ว่าผู้ใช้ต้องการอะไร และเราควรทำอย่างไร (หรือเขียนอย่างไร) เพื่อปรับปรุงโปรแกรมของเราให้เป็นที่ถูกใจผู้ใช้ การปรับปรุงคือการฝึกสกิลอีกขั้นในการเขียนโปรแกรม เพราะมันอาจเป็นสิ่งที่เราไม่เคยรู้มาก่อน หรือไม่ก็อาจเป็นประสบการณ์ที่ตกๆหล่นๆของเราก็ได้
    • มีคนรู้จักเราเพิ่มขึ้น ยิ่งมีคนใช้โปแกรมของเรามากเท่าไร มีการบอกต่อมากเท่าไร เราก็จะมีคนรู้จักมากขึ้น ส่งผลให้มีโอกาสได้งานมากขึ้น
    สำหรับผม การเขียนโปรแกรมแจกเป็นจุดเริ่มต้นของผมเลยทีเดียว และปัจจุบันผมก็ยังทำเช่นนี้อยู่ โปรแกรมที่ผมแจกถูกว่าจ้างให้พัฒนาต่อโดยที่ผมไม่ต้องวิ่งหางานเลย
ก้าวที่สาม ทักษะที่ควรมีและการพัฒนา
  1. ทักษะที่จะขาดไม่ได้ของการโปรแกรมเมอร์คือ อัลกอริทึม การไม่เข้าใจสิ่งนี้จะทำให้เราเขียนโปรแกรมได้อย่างจำกัด หรือ เขียนได้ยากขึ้น ยกตัวอย่างเช่น ถ้าเราเก่งคณิตศาตร์ เราก็สามารถเขียนโปรแกรมจำพวก Photoshop ได้ แต่ถ้าเราไม่เก่ง สิ่งที่เราทำได้อาจเป็นแค่โปรแกรม Paint (การประมวลผลรูปภาพอาศัยการคำนวณทางคณิตศาตร์ในการทำงาน) แต่ทักษะเหล่านี้สามารถฝึกฝนได้ ยิ่งถ้าเรามีประสบกรณ์มากขึ้นเท่าไร ทักษะด้านนี้ก็จะพอกพูนมากขึ้นเป็นลำดับ
  2. ทักษะที่สำคัญอีกอย่างของโปแกรมเมอร์คือ ตรรกะ เพราะการเขียนโปรแกรมมีได้แค่ 2 อย่างเท่านั้นคือ จริง หรือ เท็จ และ ตรรกะของคอมพิวเตอร์ คงที่ ทุกกรณี (ไม่เหมือนคนที่ ตรรกะ แปรผันตามปัจจัยภายนอก) ดังนั้นการเขียนโปแกรมจึงจำเป็นต้องมีตรรกะที่ชัดเจน เพราะการใช้ ตรรกะผิด อาจทำให้ผลลัพท์ผิดได้
  3. ทักษะสุดท้าย คือ ทักษะด้านภาษาอังกฤษ เนื่องจากคนออกแบบโปรแกรมส่วนใหญ่ใช้ภาษาอังกฤษ การใช้ภาษาอังกฤษได้คือสิ่งสำคัญที่จะทำให้เราได้รับข้อมูลเพิ่มเติมจากชุมชนที่แข็งแกร่งกว่า เช่น Stack overflow ซึ่งเบื้องต้นทักษะทางภาษาที่สำคัญคือ อ่านออก คำแนะนำสำหรับผมคือ หมั่นอ่านครับ แล้วแปลไปทีละตัว ซึ่งวิธีที่ง่ายกว่าก็ใช้การแปลของ Google เข้าช่วย ถึงภาษาที่ได้มันจะแปลกๆสักหน่อย แต่ก็พออ่านรู้เรื่อง ซึ่งถ้าเราฝึกฝนบ่อยๆ อีกหน่อยก็จะอ่านได้เอง