วันอังคารที่ 8 มกราคม พ.ศ. 2556

Programmer มือใหม่ ทำยังไงให้เป็น lnw ฯ

มาดูกัน ว่าขั้นตอน หรือบันไดสู่การเป็นเทพ Programming (หัวข้อออกเกินจริงไปนิดหนึ่งนะ แต่เพื่อเรียกแขก) จะต้องฝ่าฟันอะไรกันบ้าง

การถูกเรียกว่า "เมพ ขิง ขิง" นั้นไม่ได้มาจากที่เราเรียกตัวเอง มันต้องมาจากการที่คนรอบข้าง เพื่อนร่วมงาน ลูกค้า ให้การยอมรับ และแลกมาด้วยหยาดเหงื่อ น้ำตา(ไหลเวลามองจอนานๆ T_T) และความพยายาม

 พื้นฐานต้องแน่น
    ทุกภาษา Programming มีรากฐานเดียวกันคือต้องมี Logic หรือ Algorithm ทุกคนรู้จัก if, else, for, while และ statement เหมือนกัน แต่เขียนอย่างไรให้ให้ทำงานได้เร็วที่สุด ใช้ทรัพยากรน้อยที่สุด (CPU, RAM) ขึ้นอยู่กับการฝึกฝน ความรวดเร็วในการตีความโจทย์ในชีวิตจริง ให้เป็นโปรแกรม
     วิธีฝึก เริ่มจากอย่างง่าย ที่ทำกันในห้องเรียนก็ได้ เช่นการ print * ให้เป็นรูป ในรูปแบบต่างๆ  การทำงานกับข้อมูล พวก min-max, sorting, searching, scheduling และ indexing พวกนี้เป็นพื้นฐานของโปรแกรมขนาดใหญ่เกือบทุกตัว โดยก่อนที่เราจะ "ถึก" คิดเอง ก็ควรจะลองหาๆ ดูว่าเดี๋ยวนี้เค้ามี Algorithm มาตรฐานที่ใช้ๆ กันอะไรบ้าง ทำงานได้ดีแล้วรึยัง แล้วเอามาปรับใช้ก็ได้
ตัวอย่างเช่น http://www.algosort.com/  หรือหาได้ใน google

เครื่องมือต้องพร้อม
    หลายครั้งที่เวลาส่วนใหญ่หมดไปกับการติดตั้ง Enviroment เช่น ติดตั้ง JDK, IDE(เช่น eClipse หรือNetBeans),  Web Server, Database Server และอื่นๆ ถ้าอยากเป็นมืออาชีพคุณควรเริ่มทำความรู้จักเครื่องมือต่างๆ เหล่านี้ และหาเวลาทดลอง ลงใช้งาน ปัญหาของการใช้งาน รวมถึงความแตกต่างของเครื่องมือแต่ละตัว ซึ่งควรจะวางแผนการศึกษาให้ชัดเจน โดยดูจาก trend ว่าตัวไหนจะรุ่ง ตัวไหนจะร่วง (คงจะไม่มีใคร อยากใช้ของที่รู้ว่ายังไง อีก 1 ปีต้องเลิกใช้)
    วิธีฝึก ลองหา project เล็กๆ ทำที่ใช้เวลาไม่เกิน 1 สัปดาห์ แล้วติดตั้ง environment ที่คุณต้องใช้ทั้งหมด ... ถ้าเครื่องมือนั้นๆ ตอนลงมันกระทบกับตัว OS ... ขอแนะนำให้ใช้พวก VM เข้ามาช่วย (ถ้า RAM มีเยอะนะ) อย่างพวก Virtual Box, VM Ware หรือ Virsual PC สำหรับจำลอง Virsual OS จะได้ไม่กระทบกับงานหลัก เมื่อไม่ใช้ก็แค่ปิด VM ที่สำคัญคือ backup ได้ง่าย โดยเฉพาะอย่างยิ่งถ้าการเขียน program บางอย่างต้องการ environment ที่พิเศษจริงๆ เช่นการเขียนกับ iOS ต้องใช้ Mac OSX เดี๋ยวนี้เค้ามีให้ load เป็น VM แค่ load มา เปิด (แต่ต้องมีเทคนิค พิเศษในการ unlock vmware นิดหน่อย ใครอยากรู้ก็หลังไมค์ได้)

อ่านเอกสารภาษาอังกฤษเป็น (พวก API Doc กับ tutorial)
    เดี๋ยวนี้ชีวิต progammer ง่ายขึ้นจนแทบจะเรียกได้ว่าติดนิสัย ไม่ค่อยเขียนอะไรเองซักเท่าไหร่ เนื่องจากมี API (พวก class library ที่คนอื่นทำไว้ให้แล้ว) เช่น การต่อกับ Network, Database รวมถึงเอกสารสอนการใช้งานแบบ step-by-step โดยแทบจะทำตามก็ใช้ได้เลย ซึ่งถ้าจะทำอะไรที่ยากกว่านั้น ก็ต้องอาศัยการปรับแต่งเล็กน้อย  แต่ไม่น่าเชื่อว่าเด็กที่เขียนโปรแกรมเก่งๆ หลายคนกลับมาตายน้ำตื้น คืออ่านเอกสารเหล่านี้ไม่ค่อยเป็น แม้กระทั้ง keyword ที่ใช้ค้นหายังใช้ไม่ถูก
    วิธีฝึก หาโจทย์ แล้วดูว่าต้องใช้อะไรเพิ่มเติมบ้าง ค้นหาใน Google (พยายามค้นภาษาอังกฤษ) ไม่ต้องกลัวอ่านไม่ออก เพราะบทความเกี่ยวกับ programming ส่วนใหญ่ไม่ต้องใช้ความรู้ภาษาอังกฤษ มากนัก และเกิน 50% เป็น code แรกๆ อ่านไม่เข้าใจ ก็ copy code มาทำตามดูก่อน พอทำแบบนี้ไปเรื่อยๆ ก็จะเริ่มชิน และชำนาญขึ้นเรื่อยๆ

อย่าเขียนอย่างเดียว หัดออกแบบไปด้วย
    Programmer ส่วนใหญ่มักจะคิดว่า แค่เขียน program อย่างเดียวก็เหนื่อยละ หรือไม่ถนัดในการออกแบบ ทำให้พลาดโอกาสสำคัญๆ ไป อีกทั้งพลาดโอกาสที่จะทำงานให้มันง่ายขึ้น หัดมองวิธีแก้ปัญหา และนำพวก Design Pattern มาใข้เช่นพวก GOF, JEE Pattern, Generic Pattern ดูว่าตัวไหนเหมาะจะใช้กับงานอะไร  หาวิธีที่จะทำให้ User ทำงานได้ง่ายขึ้น ระบบทำงานได้เร็วขึ้น ใช้เวลาประมวลผลน้อยลง แก้ไขภายหลังได้ง่ายขึ้น
  วิธีฝึก ถ้าเป็น programmer ที่ทำงานอยู่ในทีมอยู่แล้ว สามารถศึกษาจากพวก SRS และ Program Spec ที่ SA ส่งให้เราได้ ลองมาวิเคราะห์ดูว่า ถ้าเป็นเรา Req แบบนี้ จะออกแบบยังไง แต่ถ้าเพิ่งเริ่มหรือทำงานส่วนตัวให้เริ่มจากการลองออกแบบระบบง่ายๆก่อน เช่น ระบบเช่า-ยืม-คืน, ระบบหอพัก, ระบบขายสินค้าหน้าร้าน, ระบบบัญชีขนาดเล็ก ...ถ้าใครมาแนวเกมส์ ก็ให้ลองออกแบบเกมส์เริ่มจากง่ายๆ เช่นเกมบอร์ด พวก tic-tac-to หมากรุก PCMan ก่อนก็ได้

ติดตามข่าวสารและเทคโนโลยี
   เคยเจอรึเปล่า คุณลุงบางคนเขียน COBOL มา 15 ปี โดยไม่รู้ภาษาอื่นเลย บางคนเขียนแต่ C หรือ Java อย่างเดียว พออยากจะมาเขียน Mobile แล้วใบ้รับประทาน  ในโลกไอที การหยุดนิ่งคือการถอยหลัง หากคุณอยากเป็นผู้รอบรู้ และรู้รอบ ควรต้องติดตามข่าวสาร พิสูจน์ความจริง และนำเสนอในรูปแบบของคุณเอง มีบ่อยครั้งที่ผมถูกถามว่า ถ้างานแบบนี้ จะใช้อะไรดี มีอะไรให้เลือกบ้าง แต่ละตัวแตกต่างกันยังไง ข้อดี ข้อเสีย คืออะไร (การศึกษาควรลงไปถึงต้นกำเนิด เพื่อให้รู้ถึงเหตุผลว่าทำไมถึงตั้งเป็นแบบนั้น)
   วิธีฝึก เดี๋ยวนี้ทำได้ไม่ยากแล้ว แค่สมัครรับข่าวไอที หรือแค่หาแอพฯ ที่รับ feed จาก Blog ต่างๆ ถ้าเป็นภาษาไทยก็อย่างเช่น Blognone หรืออื่นๆ ยิ่งอ่านเยอะ อ่านจากหลายแหล่ง ความคิดเราก็จะคมไปด้วย ทำให้สามารถแยกแยะ หาข้อมูลเพิ่มเติม และมีเหตุผลมากขึ้น

รู้แล้วอย่ากั๊ก สอนให้เป็น
   สิ่งสำคัญของความสำเร็จคือ การให้ ซึ่งบ้างครั้งมันหมายถึงการแลกเปลี่ยนความรู้กัน คุณอาจจะพบเพื่อนใหม่ๆ โอกาสใหม่ๆ คนรู้จริง ควรถ่ายทอดให้เป็น ถ้ารู้แล้วทำให้คนอื่นรู้ด้วยไม่ได้ ก็ไม่ถือว่ารู้จริง ต้องฝึกการอธิบายสิ่งที่ยาก ให้ง่ายแก่การเข้าใจ บ้างครั้งอาจจะเป็นคนในทีม เพื่อนร่วมงาน รุ่นน้อง แล้วความยอมรับนับถือจะตามมาเอง
   วิธีฝึก เริ่มจากการฝึกพูดหรือสอนแบบสั้นๆ ดูก่อน เตรียมข้อมูลสำหรับการนำเสนอ ถ้ามีโอกาสอาจจะลองรับงานเป็น tutor หรือ อาจารย์พิเศษ หรือ Trainner ดู จะทำให้เราเปิดมุมมองและได้ความรู้เพิ่มขึ้นจากสิ่งที่ผู้เรียนถาม หรืออีกทางหนึ่งที่คุณสามารถทำได้เลยคือการเขียน Blog หรือทำ VDO สอนแล้ว upload ลงบน youtube พยายามเผยแพร่สิ่งทีคุณรู้ นอกจากได้บุญแล้ว บางครั้งยังอาจจะได้เงินด้วย


เพียงเท่านี้ถ้าเราทำสิ่งเหล่านี้อย่างสม่ำเสมอ (ไม่เหนื่อยตายซะก่อน 555) รับรองอีกไม่นานคงมี เทพฯ มาจุติแน่นอน ^_^

Aj.Bee

3 ความคิดเห็น:

  1. ตั้งแต่ปีใหม่มานี้เขียนบทความเยอะเลยนะครับอาจารย์ แอบแซว :)

    ตอบลบ
    คำตอบ
    1. กะว่าวันละ 2 บทความ ไปเรื่อยๆ อะครับ
      เสียดายสิ่งที่ผ่านมาในหัวถ้าปล่อยเลยไปไม่เขียนก็จะลืม 555

      ลบ
    2. ของผมลืมไปเยอะ พอมานั่งรื้อฟื้นใหม่นานพอดูเลย >_<"

      ลบ