Tip:
Highlight text to annotate it
X
ผมชื่อกิตติภัฏ คำภา ชื่อเล่นชื่อบ๊อตครับ
เป็นนักศึกษาปริญญาเอกที่มหาวิทยาลัยฟลอริดา ที่เมืองเกนส์วิลล์ครับ
ผมอยู่ภาควิชาวิศวกรรมไฟฟ้าและคอมพิวเตอร์ครับ
แต่งานส่วนใหญ่ของผมเป็นเรื่องเกี่ยวกับการเขียนโปรแกรมครับ
ความถนัดของผมคือเรื่องการเรียนรู้ของเครื่อง (machine learning) ครับ
งานของผมมีทั้งด้านทฤษฏีและปฏิบัติครับ
ผมได้ทำงานมาหลายโครงการแล้ว ส่วนใหญ่จะเป็นเรื่องเกี่ยวข้องกับการสำรวจข้อมูลระยะไกล (Remote Sensing)
และยังมีโครงการด้านการทหารร่วมกับศูนย์วิจัยนาวี (Naval Research Laboratory) ด้วยครับ
เมื่อไม่นานมานี้ ผมเริ่มทำงานเกี่ยวกับคอมพิวเตอร์วิทัศน์ ซึ่งเป็นงานเชิงพาณิชย์ครับ
ทำงานร่วมกับทีมงานเกี่ยวกับอัลกอริทึมได้อย่างไร?
เราใช้กระดาษและกระดานบ่อยมากครับ เป็นอุปกรณ์หลักเลยก็ว่าได้
ผมว่ามันสำคัญมากกว่าคอมพิวเตอร์เสียอีกครับ เวลาที่เราทำงานร่วมกับทีม
เราก็ทำงานด้วยการเขียนบนกระดานเพื่อจะได้พูดคุยกัน ระดมความคิด และทำความเข้าใจร่วมกันครับ
ช่วยอธิบายถึงเส้นทางอาชีพของโปรแกรมเมอร์ได้ไหม?
เส้นทางอาชีพของโปรแกรมเมอร์ ลำดับแรกก็คือโปรแกรมเมอร์ที่มีทักษะ หรือวิศวกรซอฟต์แวร์ครับ
ลำดับถัดมาก็คืองานด้านการวิจัยครับ ซึ่งก็เป็นงานของวิศวกรซอฟต์แวร์ แต่เน้นไปทางด้านขั้นตอนวิธี หรืออัลกอริทึม
ลำดับที่สามคือผู้จัดการฝ่ายวิศวกรรมซอฟต์แวร์ ซึ่งต้องอาศัยทักษะด้านการสื่อสาร และสามารถบริหารโครงการได้
ลำดับที่สี่คือตำแหน่งผู้อำนวยการศูนย์วิจัย ซึ่งเป็นลำดับที่สูงกว่าวิศวกรซอฟต์แวร์ ต้องมีความรู้ความเชี่ยวชาญด้านอัลกอริทึม
เป็นตำแหน่งที่เทียบเท่ากับนักวิจัยอวุโสครับ
ต่อมาก็เป็นตำแหน่งประธานฝ่ายเทคโนโลยี หรือ CTO ซึ่งเป็นผู้ดูแลทิศทางและภาพรวมด้านเทคโนโลยีขององค์กร
และสั่งการลงมายังผู้ใต้บังคับบัญชาสี่กลุ่ม ที่กล่าวถึงในตอนต้นครับ
การเป็นโปรแกรมเมอร์มีข้อดีอะไรบ้าง?
ผมอยากตอบคำถามข้อนี้มากที่สุดเลยครับ ลองจินตนาการดูนะครับ สมมติว่าเราเป็นเด็กแล้วอยากจะสร้างหุ่นยนต์
ถ้าเราเป็นโปรแกรมเมอร์ ก็หมายความว่าเรารู้วิธีการสื่อสารกับคอมพิวเตอร์
คือ พอเรามีไอเดีย เราก็สามารถทำให้มันเกิดขึ้นจริงได้โดยใช้คอมพิวเตอร์ เพราะทุกวันนี้ใครๆ ก็ใช้คอมพิวเตอร์ใช่ไหมครับ
นั่นหมายความว่า เราจะทำอะไรก็ได้ที่ใจอยาก เป็นโปรแกรมเมอร์มันเจ๋งแบบนี้ละครับ
พูดง่ายๆ ก็คือ ถ้าเรามีไอเดีย ก็สามารถสื่อสารกับคอมพิวเตอร์ แล้วอยากจะเปลี่ยนโลกหรืออะไรก็สามารถทำได้เลยครับ
การเป็นโปรแกรมเมอร์มีข้อเสียอะไรบ้าง?
ผมก็คงพูดได้ไม่หมดนะครับ เป็นมุมมองส่วนตัวมากกว่า
สำหรับคนที่มีครอบครัวแล้ว แต่คุณหมกมุ่นกับงานมากไปคุณก็จะลืมทุกสิ่งทุกอย่างเมื่อนั่งอยู่หน้าคอมพิวเตอร์
ทางบ้านก็ตั้งตารอให้เรากลับบ้านละครับ
บางทีถ้าเรายึดติดกับทักษะด้านโปรแกรมมิ่ง สำหรับบางคนนะครับ เราก็อาจจะเพ่งอยู่แต่ปัญหาเรื่องเดียว ไม่ไปสนใจภาพรวมของชีวิต ของบริษัท และภาพรวมของงานของเราด้วย
นั่นหมายความว่า ถ้าจะเป็นโปรแกรมเมอร์ที่ดี อย่าสนใจเพียงแค่โปรแกรมมิ่ง เราต้องคิดถึงไอเดียใหม่ๆ
เพราะถ้าไม่มีไอเดีย ก็ไม่มีการเขียนโปรแกรม จริงไหมครับ?
การเขียนโปรแกรมก็เป็นเพียงภาษาที่จะสื่อสารความคิดของคุณออกไปสู่ภายนอก เป็นเพียงสื่อกลางเท่านั้นครับ
ก็เหมือนกับเราคิด แล้วก็พูดออกมาให้คนอื่นฟัง การเขียนโปรแกรมก็เหมือนการพูดเพียงแต่เราให้คอมพิวเตอร์เป็นคนพูด
อืมม์ มีอะไรอีกที่เป็นข้อเสีย ... บางทีเราก็ได้เงินเดือนน้อยกว่าผู้จัดการครับ [หัวเราะ]
คำแนะนำสำหรับการเป็นโปรแกรมเมอร์ที่ดีมีอะไรบ้าง?
คำแนะนำสำหรับการเป็นโปรแกรมเมอร์ที่ดี คือเราต้องมีวิธีการที่ดีที่จะแก้ปัญหาครับ ต้องรักที่จะแก้ปัญหา
หมายความว่าเราต้องรู้ว่าเคยมีวิธีการอะไรบ้างที่นักคอมพิวเตอร์ในอดีตเคยใช้ในการแก้ปัญหามาแล้วบ้าง
เราต้องคิดเป็นระบบ มีตรรกะในการแก้ปัญหา
และถ้าเราไม่มีทักษะการเขียนโปรแกรม เราก็ไม่สามารถทำงานได้
เราต้องเข้าใจโครงสร้างภาษา (syntax) ได้เป็นอย่างดี ยกตัวอย่างนะครับ ถ้าเราอยากจะเขียนโปรแกรมในระบบ Android
มันก็จะต่างกับการเขียนโปรแกรมใน PC ใช่ไหมครับ เราต้องรู้จักสภาพแวดล้อมที่เราจะทำงานและอุปกรณ์คอมพิวเตอร์ด้วย
รวมถึงโครงสร้างภาษา ชุดคำสั่งมาตรฐานของภาษา (library) เพราะเราคงไม่อยากพัฒนาซอฟต์แวร์จากศูนย์ใช่ไหมครับ
เราอยากจะหยิบยืมเอางานของคนอื่นมาต่อยอด เพราะนี่คือการทำงานในยุคปัจจุบัน
งานที่เราจะต้องทำนั้น ส่วนใหญ่ก็ไม่ได้ทำคนเดียวอยู่แล้วครับ เราต้องติดต่อสื่อสารกับคนอื่น
ทักษะด้านการสื่อสารคือสิ่งที่สำคัญมาก มากเสียยิ่งกว่าทักษะการเขียนโปรแกรมอีกครับ
เราต้องอธิบายความคิดของเราให้คนอื่นเข้าใจได้ แสดงจุดยืนในความคิดของเรา ทำอย่างไรจะให้คนอื่นเข้าใจเราได้ สิ่งนี้สำคัญมากครับ
ถัดมาเป็นเรื่องทักษะการวิเคราะห์ครับ เราต้องสามารถวิเคราะห์ได้ว่าอัลกอริทึมไหนดีกว่าตัวอื่นในการแก้ปัญหาหนึ่งๆ
ประการที่สาม เราต้องเป็นผู้ฟังที่ดีครับ เพราะถ้าเราไม่เป็นผู้ฟังที่ดีก็เป็นเรื่องยากที่โครงการจะดำเนินไปได้ครับ
เราต้องเป็นทั้งผู้ให้และผู้รับครับ
เราจะสามารถติดตามความก้าวหน้าของภาษาใหม่
ผมคงจะไม่ใช่คนที่เหมาะสำหรับการถามคำถามนี้นะครับ คือว่า ผมไม่ได้รู้เรื่องเกี่ยวกับภาษาใหม่ๆ เรื่องโครงสร้างของมัน แต่อย่างน้อยผมทราบว่าอะไรกำลังจะมา
ยกตัวอย่างนะครับ ปกติผมทำงานกับ MATLAB C++ และ JAVA แล้วสมมติว่าเราอยากจะไปทำงานกับระบบ Android ซึ่งใช้ภาษาที่คล้ายกับ JAVA ใช่ไหมครับ?
ทีนี้ เราก็รู้แล้วว่าภาษานี้กำลังมา เราก็อาจจะไปเปรียบเทียบกับภาษาที่เรารู้จัก เช่น JAVA หรือบางที Python อาจจะคล้ายกับ MATLAB และ JAVA สำหรับผม
เรื่องของเรื่องก็คือ ยิ่งเราสามารถเชื่อมความสัมพันธ์ระหวางภาษาโปรแกรมมิ่งเหล่านี้ได้ เราก็จะเรียนรู้ได้ดีขึ้น
ก็เหมือนกับแนวคิดที่ว่า คนรวยก็ยิ่งรวย นั่นละครับ ยิ่งรู้ก็ยิ่งรู้มากขึ้นไปเรื่อยๆ
การจะรู้สิ่งเหล่านี้ได้ก็ต้องอ่านเยอะครับ ซึ่งปกติผมก็สมัครเป็นสมาชิกของเว็บไซต์ด้านเทคโนโลยี
อีกเรื่องที่ขอแนะนำนะครับ คือเมื่อมีอุปกรณ์คอมพิวเตอร์ออกมาใหม่ เราสันนิษฐานได้ว่ามันทำงานด้วยซอฟต์แวร์ ซึ่งเราก็ต้องดูว่ามันเป็นระบบ Linux หรือระบบ Windows หรือ Mac OS
เมื่อทราบข้อมูลตรงนี้แล้ว เราก็หาต่อไปได้ว่าจะเรียนรู้มันจากแหล่งข้อมูลที่ไหน
อืมม์ เราต้องคุยกับเพื่อนร่วมงานมากๆ ด้วยครับ ความรู้ส่วนใหญ่ผมก็รู้จากบล็อก และจากอินเตอร์เน็ตด้วย
คนมีอคติอะไรกับงานโปรแกรมเมอร์ไหม?
สำหรับเรื่องนี้ คนส่วนใหญ่คิดว่าโปรแกรมเมอร์ทำงานคือนั่งอยู่หน้าคอมพิวเตอร์อย่างเดียว
เหมือนกับว่าคนพวกนี้ตัวติดกับคอมพิวเตอร์ตั้งแต่เกิดมาเลย ซึ่งไม่ใช่ภาพที่ถูกต้องเลยครับ
ที่จริงนะครับ ไม่ใช่แค่ผม แต่คิดว่าหลายๆ คนก็เป็น คือความคิดส่วนใหญ่เกิดขึ้นจากการพูดคุยกับคนทั่วไป
ตอนทานข้าว ดูภาพยนตร์ สิ่งที่สำคัญคือเราต้องมีปัญหาก่อน
เวลาผมเดินทาง หรือไปที่ไหนก็จะพยายามฟังว่าคนเขาบ่นอะไรกัน สิ่งเหล่านี้คือปัญหาใช่ไหมครับ?
ทีนี้พอเราได้ปัญหาแล้ว ก็ต้องหาไอเดียที่จะมาแก้ปัญหา ถัดมาจึงเป็นเรื่องทางด้านเทคนิค
จากนั้นเราถึงจะมาหาว่าอัลกอริทึมไหนดีสำหรับการแก้ปัญหานี้
นี่คือจุดที่คอมพิวเตอร์เข้ามามีบทบาทใช่ไหมครับ?
จะเห็นได้ว่าขั้นตอนส่วนใหญ่ไม่ได้เกิดขึ้นในคอมพิวเตอร์นะครับ มันเกิดขึ้นในชีวิตจริง
นั่นหมายความว่า ถ้าคุณเป็นผู้พัฒนาซอฟต์แวร์ ไม่ได้แปลว่าคุณจะใช่เวลาส่วนใหญ่อยู่หน้าคอมพิวเตอร์ครับ
คุณใช้เวลาส่วนใหญ่ในโลกความเป็นจริง แล้วก็ทำงานกับคอมพิวเตอร์
อีกเรื่องหนึ่งคือ คนส่วนใหญ่คิดว่าถ้าคุณไม่รู้ภาษาคอมพิวเตอร์อะไรเลย คุณก็ไม่สามารถจะอยู่ในวงการอุตสาหกรรมซอฟต์แวร์ได้ ซึ่งไม่จริงเลยครับ
เรื่องของเรื่องก็คือ คนที่อยู่ระดับสูงในองค์กรไม่ได้รู้วิธีการเขียนโปรแกรมครับ แต่พวกเขาคิดลึกซึ้งไปกว่านั้น เหมือนกับเป็นนักปรัชญาครับ
เขาจะคิดเรื่องการคำนวณทางคณิตศาสตร์ เกี่ยวกับปัญหาและการแก้ปัญหา
คือพวกเขาไม่จำเป็นที่จะต้องเขียนโปรแกรมเลยครับ
คนที่คิดอัลกอริทึมเจ๋งๆ บางทีเขาเขียนโปรแกรมไม่เป็นด้วยซ้ำครับ เป็นเรื่องปกติเลยก็ว่าได้
พูดสั้นๆ ก็คือ คนที่รู้ว่าปัญหาอยู่ตรงไหน และรู้ว่าจะแก้ปัญหาด้วยวิธีที่ดี วิธีการไหนดีสำหรับปัญหาๆ หนึ่ง ก็สามารถอยู่ในอุตสาหกรรมซอฟต์แวร์ได้ครับ
และมันจะเป็นเรื่องที่ดี ถ้าเรารู้วิธีการสื่อสารกับคอมพิวเตอร์ด้วยครับ เพราะถ้าเราไม่รู้ ก็ต้องไปจ้างคนอื่นมาสื่อสารกับคอมพิวเตอร์ให้เรา
คือถ้าทำเองได้ มันก็จะดีกว่า ง่ายกว่าด้วยในการสื่อสารกับโปรแกรมเมอร์คนอื่น เพราะคุณสามารถจะอธิบายได้
และจะดียิ่งกว่านั้น ถ้าเรารู้มากกว่าการเขียนโปรแกรม คือรู้ระบบ รู้ว่าจะใช้ภาษาอะไรกับระบบนี้
และภาษานี้มันมีความจำเป็นอะไรบ้าง และยิ่งกว่านั้น มันจะดีมากเลยครับถ้าเราเข้าใจธุรกิจด้วย
วงจรชีวิตของสินค้า (product) ของคุณ ใครต้องการสินค้าของคุณบ้าง และสามารถขายความคิดของคุณได้เหมือนสตีฟ จอบส์
คือเขาพูดได้ชนิดที่ว่าคนเป็นล้านๆ อยากซื้อสินค้าของเขา
และเรื่องสุดท้ายนะครับ มันจะเป็นเรื่องดีมากๆ ถ้าเรามีศีลธรรม คือคิดว่าสินค้าเราจะส่งผลในแง่ดีหรือเลว
เพราะถ้าเราคิดแค่เรื่องรายได้ บริษัทเราจะได้เงินเท่าไร สิ่งนี้อาจจะย้อนกลับมาทำร้ายครอบครัวคุณเองในวันหน้า
ดังนั้น ผมคิดว่าศีลธรรมเป็นเรื่องสำคัญมากครับ เป็นสิ่งที่เราต้องคิดถึงอยู่เสมอครับ
เราควรจะคิดว่าของสิ่งนี้มันจะเปลี่ยนสังคมอย่างไรบ้าง
จริงๆ แล้วในตอนนี้ มันอาจจะไม่ชัดเจนว่ามันจะกระทบกับสังคมอย่างไร แต่เมื่อคนเริ่มใช้งานมันแล้ว เราก็จะเริ่มเห็นผล
ซึ่งมันก็เป็นเรื่องที่ทำอะไรไม่ได้มาก เราก็เป็นแค่ปุถุชน ก็ทำเท่าที่เราทำได้ให้ดีที่สุดครับ
ที่ผมบอกได้แน่ๆ ก็คือ โปรแกรมเมอร์มันเจ๋งตรงที่ว่าถ้าเรามีไอเดีย เราก็สามารถเขียนโปรแกรมและเปลี่ยนโลกได้ทันทีเลยครับ