งานนักพัฒนาอย่าง Developer หรือ Software Engineer กำลังได้รับความนิยม เงินเดือนก็ค่อนข้างสูง แต่จบไม่ตรงสาย จะเปลี่ยนมาสายนี้ได้อย่างไร คำถามนี้น่ากลายเป็นหนึ่งคำถามยอดฮิตไปแล้วในปัจจุบัน
คุณลิ่ว วสันต์ ลิ่วลมไพศาล ผู้ร่วมก่อตั้ง Blognone และ CTO ของ MFEC บริษัทให้คำปรึกษา พัฒนาและวางระบบไอทีองค์กรชั้นนำของไทย ได้ให้คำแนะนำสำหรับผู้ที่ไม่ได้จบมาทางสาย Computer Science แต่มีความสนใจจะพัฒนาทักษะด้านโปรแกรมมิ่ง ไปจนถึงหางานด้านนี้อย่างจริงจัง
ลองเริ่มต้นเขียนโค้ดและรันโปรแกรมดูเลยว่าชอบไหมและเข้ากับเราไหม เช่น ทุกวันนี้มีแพลตฟอร์มฝึกเขียนโปรแกรมอย่าง CodeWars หรือ IDE ออนไลน์อย่าง CodePen เราสามารถลงมือทำเลยได้เพราะปัจจุบันการซื้อคอมพิวเตอร์เป็นเรื่องเล็กลง คอมพิวเตอร์อยู่กับเราในชีวิตประจำวันอยู่แล้ว และราคาก็ไม่แพงเหมือนเมื่อก่อน
อีกอย่างหนึ่งคือการลองลงคอร์สเรียนระยะสั้นหรือคลิปวิดีโอ Tutorial ต่าง ๆ ใน YouTube ที่มีอยู่แล้วและฟรีค่อนข้างเยอะ หรือถ้าจะซื้อคอร์สเรียนที่ต้องเสียเงินก็หาได้ง่าย
ส่วนถ้าเราลองเรียนคอร์ส Basic Programming ซักคอร์สนึงไม่ยาวนัก ก็เป็นจุดเริ่มต้นอีกส่วนที่ดีและมีราคาไม่แพง ถ้ารู้สึกว่ายังไม่ใช่ ให้ลองถามตัวเองดูก่อนว่าเราอาจจะต้องการคอร์สที่มีคนช่วยแนะนำและสามารถถามตอบคำถามระหว่างทางหากเราติดปัญหา ซึ่งราคาอาจจะสูงหน่อยซักประมาณ 10,000-20,000 บาทหรือเรียน onsite ราว 50,000-100,000 บาท แต่การเรียนคอร์สแบบนี้ก็จำเป็นที่จะต้องคิดให้มากขึ้น
อันนี้เป็นเรื่องที่เถียงกันยังไม่จบว่าเราควรให้คนเรียนแบบ top-down หรือ bottom-up กันดี มุมมองของคุณลิ่วคือไม่จำเป็นนัก เราสามารถสอนให้คนเข้าใจการควบคุมคอมพิวเตอร์ได้โดยคนควบคุมไม่ต้องเข้าใจคอมพิวเตอร์ไปทั้งหมดว่าภายในมันทำงานอย่างไร และความเข้าใจอย่างจำกัดก็สร้างมูลค่าได้แล้ว
ถ้าโจทย์แบบ algorithm เพียวๆ หลายคนอาจจะเรียกว่า leetcode ล้อไปกับชื่อเว็บฝึกเขียนโปรแกรมชื่อดังที่ใช้ฝึกสัมภาษณ์งานบริษัทใหญ่ๆ คุณลิ่วแนะนำว่า ถ้าเป็นคนทำงานเขียนโปรแกรมอยู่แล้วก็ควรฝึกพวกนี้เป็นช่วง ๆ เพราะหลายครั้ง การฝึกพวกนี้ต้องคลุกคลี การฝึกเป็นช่วง ๆ จะทำให้เราเจอปัญหาใหม่ ๆ แล้วนึกออกว่าถ้าจะแปลงปัญหาให้กลายเป็นคำสั่งที่คอมพิวเตอร์เข้าใจจะแปลงอย่างไร
อย่างไรก็ตาม คุณลิ่วบอกว่าไม่น่าจะต้องกังวลกับการออปติไมซ์ หรือต้องเขียนโปรแกรมให้ทำงานเร็วที่สุด งานส่วนมากไม่ต้องการความรู้ algorithm ขนาดนั้น ขนาดข้อมูลที่เจอ ถ้าไม่ใช่องค์กรขนาดใหญ่จริงๆ เช่น ธนาคาร เราอาจจะไม่ได้เจอปัญหาระดับที่ต้องออปติไมซ์มาก แม้จะเขียนไม่ดีไปบ้างแต่ก็พอชดเชยด้วยการขยายขนาดเซิร์ฟเวอร์ไปได้ แต่แน่นอนว่าคนที่ทำได้ดีก็ได้เปรียบในงานที่ยากขึ้นไปมากกว่า ถ้าฝึกข้อยากๆ ได้ก็ฝึก แต่คุณลิ่วมองว่าทำข้อระดับที่ไม่ยากมากแต่ฝึกเพื่อให้ใช้ภาษาได้อย่างคล่องแคล่ว เข้าใจข้อจำกัดและฟีเจอร์ของภาษาได้ดีก็เพียงพอกับการทำงานส่วนมาก
อีกจุดหนึ่งคือแพลตฟอร์มฝึกเขียนโปรแกรมอย่าง LeetCode หรือ CodeWar นั้นเมื่อเราทำโจทย์เสร็จแล้ว ตัวแพลตฟอร์มจะมีเฉลยที่เขียนมาเป็นอย่างดีให้อ่าน ทำให้ได้เรียนรู้โค้ดจากคนอื่น เราอาจจะไม่เคยรู้ว่าภาษาที่เราใช้มีฟังก์ชั่นในตัวที่ไม่ต้องเขียนเอง หรือเทคนิคการเขียนบางอย่างที่ไม่ใช่แค่โค้ดเร็วขึ้น แต่อาจจะทำให้โค้ดสวยขึ้น อ่านง่ายขึ้นอีกด้วย
เลือกวิธีเรียนให้เหมาะกับรูปแบบที่ตัวเองชอบ บางคนชอบฟัง Lecture หรือดูคนสอนทางวิดีโอ บางคนชอบอ่านเองจะได้ปรับระดับความเร็ว-ช้าในการเรียนได้ แต่การอ่านหนังสือก็จะมีข้อจำกัดเพราะอาจข้ามขั้นตอนไปบ้างทำให้ต้องใช้เวลาในการทำความเข้าใจ ส่วนการดูวิดีโอเราจะเห็นทุกขั้นตอนในการทำอยู่แล้ว
ส่วนเวลาที่เรามีคำถามและค้นหาใน Google โดยเฉพาะใน Stack Overflow ต้องระวังปัญหาอย่างนึงคือการสนใจแค่การหาคำตอบและ Copy & Paste คำสั่งมา แต่กลับไม่สามารถทำความเข้าใจว่าคำตอบที่คนมาตอบเขาเสนอแนวทางมาให้นั้นเขากำลังทำอะไร ทำให้หลายคนมองการเขียนโปรแกรมกลายเป็นการลองหาเฉลยมาลองไปเรื่อย ๆ จนกว่าจะได้ผลที่ต้องการ แต่กลับมองข้ามข้อสำคัญคือการ Copy & Paste คำตอบนั้นเราต้องการเรียนรู้จากประสบการณ์ของคนที่เคยเจอปัญหาเดียวกับเราว่าเขาแก้ปัญหาอย่างไรหากเราเข้าใจเราก็จะปรับเปลี่ยนได้เวลาที่เราเจอปัญหาใหม่ ๆ หรือได้โจทย์ใหม่ ๆ ซึ่งการประยุกต์ใช้เป็นเรื่องสำคัญเพราะงานโปรแกรมมิ่งถือว่าเป็นงานสร้างสรรค์
การค้นหาคำตอบโดยไม่พยายามเข้าใจคอนเซปต์ว่าแต่ละอันมีที่มาที่ไปยังไงเชื่อมโยงไปถึงการศึกษาไทยที่เน้นการให้คำตอบมากกว่ากระบวนการคิดด้วย
ภาษาที่เลือกเรียนจะเป็นตัวกำหนดว่าจะเจองานประเภทไหน เพราะฉะนั้นคนที่สนใจควรศึกษางานที่ต้องการทำก่อน แต่แนะนำว่าในช่วงแรก ควรเลือกเรียนแค่ภาษาใดภาษาหนึ่งก่อน
ภาษายุคใหม่ส่วนมากจะเป็น JavaScript และ TypeScript เพราะเป็นภาษาที่มีคนใช้เยอะและมักใช้กับการทำงานเป็น Full Stack Developer แต่งานจำนวนมากในโลกความเป็นจริงก็ยังใช้ภาษา PHP กันเยอะมากทั้งงานเว็บและอีคอมเมิร์ชทั้งหลาย ถ้าทำงานในระดับองค์กรก็ใช้ Java ส่วนด้าน Data หรือ AI นั้นก็แทบจะจำเป็นต้องเรียนภาษา Python ยืนพื้นไว้
ข่าวดีก็คือในตลาดแรงงานยังขาด Developer ในทุก ๆ ภาษาอยู่ และภาษาโปรแกรมมิ่งต่าง ๆ ก็มักมีแนวคิดที่หยิบยืมกันไปมาได้ การเรียนภาษาใหม่หลังจากคล่องภาษาแรกแล้วจึงง่ายขึ้นพอสมควร
โดยทั่วไปแล้วการทำงานมักจะไม่สามารถหยุดที่การเขียนโปรแกรมภาษาใดภาษาหนึ่ง ยกตัวอย่าง ถ้าคนอยากทำงาน Full Stack Developer เราอาจจะเขียน TypeScript ได้คล่องพอสมควรก็ต้องไปเรียน SQL ต่อ สำหรับเฟรมเวิร์คต่าง ๆ ถ้าตอนนี้เองที่ครองตลาดอยู่ก็คงเป็น React หรือ Vue ก็สามารถเลือกฝึกได้
สำหรับคนทำเว็บไซต์ เครื่องมือหนึ่งที่ควรฝึกให้คล่อง ๆ คือ Inspector Tools ในเบราว์เซอร์เราเอง เพื่อให้เราตอบคำถามได้ว่าเบราว์เซอร์เราส่งข้อมูลอะไรไปกลับเซิร์ฟเวอร์บ้าง
เครื่องมือที่ควรเรียนค่อนข้างแน่นอนทุกวันนี้ เช่น Git หรือ Docker/Docker-Compose ก็เป็นสิ่งที่ Developer หนีกันไม่พ้น
ทักษะที่เป็นประโยชน์กับการเป็น Developer อย่างแรกคือการทำงานด้วยความแม่นยำและความชัดเจน เพราะการทำงานกับคอมพิวเตอร์เป็นการทำงานกับอุปกรณ์ที่ทำงานแบบตายตัว การสื่อสารกับคอมพิวเตอร์เลยไม่เหมือนกับการสื่อสารกับคนปกติที่ไม่ได้ชัดเจนขนาดนั้น เวลามีปัญหาเราต้องอธิบายปัญหาในรูปแบบที่ชัดเจนที่สุด ไม่ใช่แค่บอกว่ารันโค้ดแล้วคอมพิวเตอร์ไม่ทำงาน ถ้าเราขอความช่วยเหลือในอินเทอร์เน็ต เราจำเป็นต้องบอก error code ตรง ๆ ต้องบอกขั้นตอนการทำงานว่าทำอย่างไรจึงเกิด error นั้น เราไม่สามารถสื่อสารได้ว่า มันทำไม่ได้ หรือบอกว่าเราเจอ error โดยไม่บอกว่า error อะไร
การฝึกสังเกตและความละเอียดก็เป็น Soft Skills อีกอย่างหนึ่ง อย่างถ้าเกิด error ขึ้น เราต้องดูสิ่งที่โชว์บนหน้าจอให้ละเอียดจะได้รายงานปัญหาได้ถูก และต้องรู้วิธีสื่อสารกับคอมพิวเตอร์ รู้ว่าเวลามีปัญหาแล้วเราต้องจัดการยังไง
ถ้านับงานเฉพาะด้านแล้ว คนจบตรงสายไม่ได้ได้เปรียบขนาดนั้นเพราะเทคโนโลยีที่ใช้งานมักต้องการความเชี่ยวชาญกับเทคโนโลยีบางตัว เช่น React, NodeJS ที่ได้รับความนิยมทุกวันนี้ หรืองานจำนวนมากต้องการผู้ที่ปรับแต่ง Wordpress ได้คล่อง ๆ ซึ่งไม่ใช้ความรู้ที่เรียนในมหาวิทยาลัยนัก แม้แต่มหาวิทยาลัยเองก็เริ่มปรับหลักสูตรมากขึ้น ช่วงหลังเราเริ่มเห็นวิชาที่สอนเนื้อหาตรงเพื่อใช้ในการทำงานเพิ่มขึ้นเรื่อย ๆ เช่น บางที่ก็มีวิชาที่สามารถนำไปใช้ทำงานเป็น Full Stack Developer ที่กำลังได้รับความนิยม โดยรวมก็เป็นคำถามว่าการออกแบบหลักสูตรระดับมหาวิทยาลัยควรจะมีวิชาพื้นฐานเยอะ ๆ หรือจะเน้นไปที่ทักษะที่ได้ใช้ในการทำงานโดยตรง
ส่วนคนจบไม่ตรงสายแล้วมาเรียนเปลี่ยนสายงานสามารถเลือกเรียนเฉพาะวิชาที่ตรงกับการทำงานจริงๆ อาจจะสามารถเรียนจบภายใน 3 เดือนก็ได้
ทั้งนี้ เมื่อเจองานที่ลึกมากขึ้น ตรงนี้คนจบตรงสายจะได้เปรียบมากกว่า เช่น ถ้าโจทย์คือการสร้างเว็บไซต์ที่รองรับผู้ใช้จำนวนมาก ๆ คนจบตรงสายจะรู้วิธีสื่อสารกับคอมพิวเตอร์ได้มากกว่าเพราะรู้เรื่องการทำงานและเครือข่ายของคอมพิวเตอร์ ไม่ได้รู้แค่งานเฉพาะด้าน เช่น การเขียนโปรแกรม อย่าง Front End หรือ Back End เท่านั้น แต่สามารถทำความเข้าใจว่าคอขวดของการทำงานคืออะไร หรืออย่างประเด็นความปลอดภัยทางไซเบอร์ คนที่เข้าใจพื้นฐานของโปรโตคอลต่าง ๆ ก็จะเห็นภาพได้ง่ายกว่าว่าคนร้ายโจมตีอย่างไร จุดใด หรือเข้าใจระบบป้องกันต่าง ๆ เช่น ไฟร์วอลล์นั้นทำงานอย่างไร จนสามารถออกแบบหรือพัฒนาซอฟต์แวร์ให้ทำงานร่วมกับระบบเหล่านั้นได้ดีขึ้น
คนที่จบไม่ตรงสายเมื่อต้องการทำงานที่ลึกขึ้นอาจจะต้องกลับไปเรียนความรู้พื้นฐานไปด้วยขณะที่ทำงาน ซึ่งอาจจะใช้เวลามากหน่อย ไม่ใช่เหมือนตอนเรียนเขียนโปรแกรมที่จบ 3 เดือนแล้วทำงานได้เลย
อย่างที่บอกไปก่อนหน้านี้ว่าการเรียนคอร์สเฉพาะทางเพื่อเขียนโปรแกรมทำให้สามารถเริ่มทำงานได้เลยก็จริง แต่มักมีปัญหาจากการขาดความรู้พื้นฐานบางอย่าง ทำให้มีข้อจำกัดในการแก้ปัญหาที่เกิดขึ้น รวมถึงการที่เราจะไม่รู้ว่าปัญหานั้น ๆ เกิดขึ้นมาจากส่วนไหน บางครั้งอาจจะอธิบายปัญหาด้วยคำเรียกเฉพาะทางไม่ถูก เช่น ทำเว็บได้แต่ไม่ได้เข้าใจว่า HTTP Request หน้าตาเป็นอย่างไร เห็น error แล้วแต่บอกไม่ได้ว่า error มันเกิดจากตรงไหน
วิธีแก้ปัญหาคือต้องไปหาความรู้พื้นฐานมากขึ้นระหว่างทำงานไปด้วย ในช่วงสิบกว่าปีที่ผ่านมามหาวิทยาลัยหลายแห่งก็มีโครงการเปิดให้คนทำงานลงเรียนบางวิชากันได้แล้ว
เป็นไปได้ เพราะถ้าเราทำงานกับเรื่องเฉพาะทางที่เราทำอยู่ตลอด เราก็จะทำงานได้คล่องกว่าและดีกว่า ยกตัวอย่างคนเรียนตรงสายอาจจะได้ใช้ React อยู่เทอมเดียว แต่คนจบไม่ตรงสายอาจจะเรียนทำเว็บอย่างเดียว 3 เดือนเต็ม เจอ error ทุกรูปแบบ ทำให้แก้ปัญหามาทุกรูปแบบก็ทำให้จัดการกับงานได้คล่องกว่า
คำว่า Developer จะถูกใช้เยอะขึ้นเรื่อย ๆ เพราะปัจจุบันก็มีคนจบไม่ตรงสายที่เรียนเขียนโปรแกรมมากขึ้นและจะมากขึ้นเรื่อย ๆ รวมทั้งในอนาคตน่าจะมีเทคโนโลยีที่ทำให้การเขียนโค้ดเป็นเรื่องง่ายขึ้น อย่างตอนนี้ที่มีการเอา AI มาช่วยเขียนโค้ด ทำให้คนเข้าถึงการสายงาน Developer ได้มากขึ้นด้วย
นอกจากนี้ ตำแหน่งงานในสายอื่นอาจจะควบตำแหน่ง Developer มากขึ้นเรื่อย ๆ ในบางระดับ อย่างทุกวันนี้เองเราเห็นการใช้งาน Excel กับซับซ้อนมากในโลกธุรกิจ ซึ่งคนพัฒนาไฟล์ Excel เหล่านั้นก็มักไม่ใช่คนจบคอมพิวเตอร์โดยตรงเหมือนกัน รูปแบบเดียวกันนี้ในอนาคตคนทำงานที่เชี่ยวชาญหน้าที่เฉพาะอื่น ๆ ก็น่าจะมีเครื่องมือที่ทำให้ทำงานเหมือนเป็นคนพัฒนาซอฟต์แวร์ไปในตัว คนทำงานตำแหน่งต่าง ๆ จะควบคุมการทำงานของคอมพิวเตอร์ในรูปแบบที่ซับซ้อนขึ้น จนหลายครั้งก็กลายเป็นซอฟต์แวร์เต็มตัวใช้งานกันในองค์กร
ในช่วงนี้ก็เริ่มมีกระแส No Code/ Low Code เข้ามาด้วยที่ทำให้เราสามารถเขียนโค้ดจำนวนน้อย ๆ แบบเดียวกับการใช้ Excel แต่สร้างซอฟต์แวร์ที่มีความซับซ้อนมากขึ้น โดยที่ตำแหน่งของเขาอาจจะไม่ใช่ Developer โดยตรง
สำหรับ Developer แบบเต็มเวลาจริง ๆ ก็จะเจอกับความเปลี่ยนแปลงที่มากขึ้น เราอาจจะต้องเตรียมตัวว่าภาษาหรือเทคโนโลยีที่ได้รับความนิยมสูงอยู่ช่วงหนึ่งอาจจะเปลี่ยนไปภายในเวลาไม่กี่ปี แล้วเราก็ต้องเรียน stack ใหม่อีกครั้ง แต่ความเปลี่ยนแปลงแบบนี้ก็อาจจะไม่จริงกับทุกคนนัก ทุกวันนี้บริการจำนวนมากที่เราใช้งานกันก็ยังเป็นเทคโนโลยีเดิม ๆ ที่ใช้มาแล้วหลายสิบปี PHP ยังมีการใช้งานสูงมาก หรือฐานข้อมูลที่หลายคนอาจจะตื่นเต้นกับ NoSQL กันพักใหญ่แต่ความรู้ SQL ก็ยังใช้งานกันจนทุกวันนี้ และอาจจะได้ใช้มากขึ้นเรื่อยๆ อยู่ดี
สำหรับคนที่ยังไม่เคยทำงานเลยคิดว่าควรเขียนให้ชัดว่าถนัดเทคโนโลยีตัวใด การอัพโหลดผลงานลง GitHub สามารถทำได้เลยและถ้าคิดว่าเป็นโปรเจคที่ใหญ่พอก็อาจจะใส่ไว้ใน Resume ได้ด้วย แต่ควรระวังว่าเราเข้าใจโปรเจคครบถ้วนดีไหม ถ้าใส่โปรเจคลงไปแต่คนสัมภาษณ์ขอเปิดโค้ดมาถาม หรือขอให้ไล่กระบวนการทำงานแล้วตอบไม่ได้ก็จะดูไม่ดี ตอนเรียนเราอาจจะแบ่งกลุ่มหรือแบ่งงานกันทำ แต่หลังจากเสร็จแล้วก็ควรรู้ว่าเราจำเป็นต้องเข้าใจทั้งโปรเจคโดยเฉพาะโปรเจคที่ขนาดไม่ได้ใหญ่มากในวิชาเรียน เราอาจจะต้องลองเปิดโค้ดเพื่อนมานั่งดูให้เข้าใจว่าทำงานอย่างไรและให้เพื่อนอธิบายกันในกลุ่มให้ทุกคนเข้าใจตรงกันว่าทำอะไรไปบ้าง
เรื่องหนึ่งคือแพลตฟอร์มฝึกเขียนโปรแกรมอย่าง CodeWar หรืองานแข่งเขียนโปรแกรมอย่าง Google CodeJam ตลอดจนเว็บสอนเขียนโปรแกรม นั้นมักมี profile ของผู้ใช้เหมือนกัน เราสามารถใส่ข้อมูลพวกนี้เข้าไปเพื่อให้คนอ่านเห็นว่าเราเรียนอะไรมาแล้วบ้าง รูปแบบก็คล้ายๆ การแนบใบรับรองที่ได้จากการอบรม แต่คนอ่านจะเข้าไปดูโค้ดที่เราเคยเขียน หรือระดับคะแนนได้เลย
ใครที่มีประสบการณ์ด้านนี้หรือเป็น Developer / Engineer มานานแล้วมีคำแนะนำให้กับคนนอกสายที่สนใจ สามารถคอมเมนท์ไว้ได้เลยครับ
ส่วนใครที่สนใจหางานประจำด้านโปรแกรมมิ่งและด้านเทคโนโลยีอื่น ๆ เข้ามาดูงานได้เลยที่ Blognone Jobs