ปัญหาที่ผมเจอมาตลอดหลายปีที่ทำงานในวงการไอทีเมืองไทยก็คือ บุคลากรทางไอทีเน้นที่โปรแกรมเมอร์ที่จบใหม่ๆมาจากรั้วมหาวิทยาลัยนั้นไม่มีความพร้อมที่จะเข้าทำงานตามสายงานที่ตัวเองร่ำเรียนมาได้ทันที ร้อยทั้งร้อยจะต้องผ่านการฝึกหัดให้เข้าที่เข้าทาง ซึ่งนี่ก็เป็นอีกหนึ่งการลงทุนที่ค่อนข้างเสี่ยงอยู่เหมือนกันสำหรับบริษัท สอนไปสอนมากลายเป็นสอนเพื่อให้ไปทำงานบริษัทอื่นซะหรือเปล่าก็ไม่รู้ (นอกเรื่อง) คิดแล้วก็ไม่เข้าใจเหมือนกันว่าทำไมสถาบันการศึกษาที่ผลิตบุคลากรทางเหล่านี้ถึงไม่ปรับปรุงหลักสูตรให้ทันสมัย และให้ตรงกับความต้องการของตลาดในโลกแห่งความเป็นจริงบ้าง จริงอยู่ผมไม่เถียงที่เด็กๆที่จบมาจากสถาบันเหล่านี้ส่วนมากค่อนข้างจะเก่ง โดยเฉพาะทางโปรแกรมเมอร์แล้วยิ่งเก่ง แต่จะพูดไปมันก็เหมือนคนไทยชกมวยเก่ง แต่แตะบอลไม่ค่อยดี ยังไงยังงั้น….
บทความนี้ตั้งใจจริงๆที่จะเขียนเพื่อจะเป็นแนวทางให้เด็กๆน้องๆรุ่นใหม่เตรียมความพร้อมให้ตัวเองให้มากที่สุด ทำตัวเองให้อยู่ในสถานะที่ได้เปรียบคู้แข่ง(ในการหางาน)ที่สุด จริงอยู่การเขียนโปรแกรมเก่ง การคิดโลจิก ตีโจทย์ได้นั้น ก็สำคัญ แต่สิ่งที่สำคัญมากกว่าในโลกแห่งความเป็นจริงของการเข้าทำงานในสายนี้ก็คือ “มาตรฐาน” ครับคำเดียวสั้นๆ แต่มีความหมาย มาตรฐานในที่นี้ก็คือการทำงานโปรแกรมให้อยู่ในมาตรฐานของสากลหรือมาตรฐานของการพัฒนาซอฟท์แวร์นั้นๆ ซึ่งมาตรฐานที่กล่าวมานี้นั้นก็มีมากมายหลากหลายกรรมวิธี ก็แล้วแต่ว่าสำนักไหนจะเลือกใช้อะไร ถ้าเป็นบริษัทใหญ่ๆหน่อยก็มักจะเป็นพวก ISO หรือ CMM http://www.sei.cmu.edu/cmm ถ้าเป็นบริษัทที่ทำพวก web application ก็มักจะเป็นพวกเฟรมเวิร์ค (framework) ต่างๆอาธิเช่น fusebox http://www.fusebox.org หรือ Ruby on Rails http://www.rubyonrails.org เป็นต้น ซึ่งบทความนี้ไม่ขอลงลึกไปถึงการอธิบายมาตรฐาน หรือเฟรมเวิร์คต่างๆเพราะว่ามันเยอะ (ขี้เกียจเขียน ว่ากันตรงๆ) แต่จะเป็นการแนะแนวทางในสิ่งที่ควรจะต้องฝึกซ้อมไว้ให้ชินเพื่อสร้างความได้เปรียบในการทำงานจริงเป็นข้อๆดังนี้
1. หัดทำงานเอกสารให้เคยชิน
ผมเข้าใจและรู้ซึ้งดีว่าโปรแกรมเมอร์กับงานเอกสารนั้นเป็นไม้เบื่อไม้เมากันมาตั้งแต่ยุคสมัยขอมยังเรืองอำนาจ ว่าไปนั่น แต่เอาเข้าจริงๆแล้ว นี่คือสิ่งที่บริษัทไอทีชั้นนำเกือบจะร้อยทั้งร้อยมองหามากที่สุดเวลาจะจ้างพนักงานโปรแกรมเมอร์ อาจจะมีคนแย้งว่าก็ทำไมไม่ให้ SA (system analyst) หรือนักวิเคราะห์ระบบ ทำงานเอกสารละ โปรแกรมเมอร์ก็โค้ดงานตามสั่งไปสิ ผมอยากจะขอให้คนแย้งคิดนอกกรอบไปอีกสักนิดว่า ถ้าเลือกได้ระหว่างเด็กจบใหม่เหมือนกัน เงินเดือนเท่ากัน เก่งพอกัน คนนึงเป็นโปรแกรมเมอร์ อีกคนนึงเป็นได้ทั้งโปรแกรมเมอร์และนักวิเคราะห์ระบบ ถ้าคุณเป็นคนจ้างคุณจะเลือกใคร
2. หัดบันทึกเวลาและรายละเอียดการทำงาน
หมายถึงในแต่ละวันหรือแต่ละครั้งที่ทำงาน หรือเอาง่ายๆก็เขียนโปรแกรมนี่แหละ ลองหัดจดบันทึกดูบ้างว่าวันนี้ทำอะไรไปบ้าง ใช้เวลาเท่าไหร่ ทำให้ชิน เพราะในบริษัทไอทีที่มีมาตรฐานทั่วๆไปเขาจะต้องให้คุณทำบันทึกนี้ หรือที่เรียกว่า Time sheet กันเกือบจะทั้งนั้น และเชื่อสิ ถ้าคุณเคยทำมาก่อนนะ เวลาไปสัมภาษณ์งานคุณเอาไปคุยได้เลยว่าลง Time sheet ทุกครั้งสมัยทำโปรเจคตอนเรียน (ขี้โม้)
3. ศึกษามาตรฐาน และเฟรมเวิร์คให้เข้าใจ
ไม่ว่าคุณจะถนัดโปรแกรมไหน เขียนภาษาอะไร ส่วนใหญ่เฟรมเวิร์คมักจะไม่หนีกัน เพราะว่าส่วนมากจะประยุกต์มาจากหลักการของ Software engineering ทั้งนั้น ไม่ว่าจะเป็น CMM, ID5, fusebox ศึกษาสิ่งเหล่านี้ให้ถ่องแท้ รับรองจริงๆว่าคุณได้เปรียบแน่ๆครับ
4. ฝึกทำความเข้าใจเอกสารเทคนิค
เอกสารเทคนิคในการพัฒนาซอฟท์แวร์นั้นมีไม่ใช่น้อยนะครับ ไม่ว่าจะเป็น UML, Scope of work, ER Diagram, Data dictionary, Functional structure, Test plan, etc เยอะแยะมากๆครับ ถ้าอยากได้เปรียบต้องศึกษาแต่เนิ่นๆ
5. ฝึกทำงานเป็นทีม
อันนี้สำคัญมาก ถ้าอยากเก่งคนเดียว ขอแนะนำให้ไปชกมวย หรือเล่นเทนนิส หรือตีกอล์ฟจะดีกว่า การพัฒนาซอฟท์แวร์นั้นต้องอาศัยเป็นการทำงานเป็นทีมเพื่อจะบรรลุเป้าหมาย ต่างคนต่างมีหน้าที่ต่างกันไป บ้างก็คุม บ้างก็เขียนเสปก บ้างก็บ้าโค้ด บ้างก็บ้าทดสอบ แต่สุดท้ายก็หล่อหลอมรวมกันออกมาเป็นชิ้นงาน ทุกส่วนเสมือนฟันเฟืองของเครื่องจักรที่ต้องทำงานผสานกันเพื่อผลลัพท์อันดีเลิศ ตรงนี้สำคัญมากจริงๆครับ
6. อันนี้ของแถมไม่ทำก็ได้แต่ถ้าทำได้จะดี
ก็คือฝึกการใช้เครื่องมือต่างๆที่เกี่ยวข้อง ที่นอกเหนือจากเครื่องมือในการพัฒนาซอฟ์ทแวร์ ยกตัวอย่างเช่น Rational Rose ซึ่งจัดอยู่ในประเภท Integrated Development Environment (IDE), พวก Groupware ต่างๆ หรือที่เรียกกันว่าระบบ Collaboration ลองเลือกๆกันดูเถิดครับ แค่นี้ก็เยอะจนจำไม่ไหวแล้ว