โปรแกรมเมอร์ที่มีคุณภาพเค้าต้องเทพขนาดไหนหรอครับ

หลายปีมานี้เห็นคนบ่นเรื่องคนเรียนไอทีเยอะแต่แรงงานโปรแกรมเมอร์ยังขาดแคลน เพราะคนไม่มีคุณภาพ ซึ่งเป็นประเด็นที่ผมเคยไม่ค่อยสนใจเท่าไหร่เพราะคิดว่าเป็นเรื่องไกลตัว แต่ไม่นานมานี้ผมได้มีโอกาสเปลี่ยนงานจากการ support โปรแกรมที่ dev โดยคนอื่นมาก่อน มาเป็นงานที่ต้อง dev project ใหม่จากศูนย์เป็นครั้งแรก และได้ค้นพบว่าระดับความยากและความเครียดของงานมันห่างกันเกินกว่าที่คาดไว้มากกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกก จนผมเริ่มไม่แปลกใจแล้วว่าทำไมโปรแกรมเมอร์ถึงเปลี่ยนไปทำอาชีพอื่น -- กลายเป็นส่วนหนึ่งของโปรแกรมเมอร์ไม่มีคุณภาพที่เค้าพูดถึงกัน -- ผมเริ่มสงสัยว่าโปรแกรมเมอร์ที่ทำงาน dev เต็มตัวและยังเหลือรอดอยู่ได้นี้คือเค้าต้องมีความสามารถขนาดไหนกันนะ

เคยได้ยินคนบอกว่า การเป็นโปรแกรมเมอร์ แค่เขียนภาษาหลักๆ ได้สักภาษานึง และรู้จัก framework หลักๆ ของภาษานั้นได้ก็ไม่ต้องกลัวตกงานแล้ว -- ผมพบว่ามันไม่จริงเลยครับ ผมเคยคิดว่าตัวเองเป็นคนที่ถนัดโปรแกรมมิ่งมากๆ เรียกได้ว่า born to be programmer เลย ชอบโค้ด อยู่ว่างๆ ก็ชอบเขียนโปรแกรมเล่น ศึกษาภาษาและ framework ใหม่ๆ นี่ของโปรด

แต่ ...

พอได้มาทำงาน dev เต็มตัวถึงได้รู้ว่าสกิลที่ว่ามานั้นมันเป็นแค่ส่วนเดียวของงาน แท้จริงแล้วยังมีสกิลที่โปรแกรมเมอร์จำเป็นต้องมีอีกมากมาย

การคุยกับลูกค้าและเพื่อนร่วมงาน

โปรแกรมเมอร์ต้องเค้นพลังงานทั้งหมดที่มีออกมาใช้เพื่อสร้างภาพให้ตัวเองดูคูลที่สุดเท่าที่จะทำได้ทั้งๆ ที่จริงแล้วไม่ถนัดเรื่องการพูดคุย ต้องเตรียมถูกตำหนิและถูกตั้งคำถามหลายอย่าง ต้องโม้ว่าโปรแกรมที่เราเขียนนั้นมันทำนั่นทำนี่ได้แล้ว ทั้งที่จริงมันยังทำไม่ได้ (แต่จำเป็นต้องโกหกเพราะเราผิดเองที่คิดไม่ถึงว่ามันต้องทำอันนี้ได้ด้วย) และต้องมาอดหลับอดนอนแก้โปรแกรมตามที่โม้ไป พอโม้เยอะไปหน่อยเลยทำให้ทำ feature ที่วางแผนไว้ไม่เสร็จ และอธิบายให้คนอื่นๆ เข้าใจไม่ได้ว่าทำไมถึงทำงานไม่เสร็จ

การดีไซน์ระบบ

การทำงานโปรเจคใหญ่ ต้องมีการดีไซน์ระบบอย่างดี ไม่เหมือนกับการเขียนโปรแกรมเล่นยามว่าง เพราะเราต้องทำงานเป็นทีมร่วมกับคนอื่น ถ้าดีไซน์ไม่ดีจะลำบากตอนจะใส่ feature เข้าไปและสุดท้ายระบบก็จะเละเทะ ถ้าเรา dev คนเดียวเราจะมาแก้ดีไซน์ตอนไหนก็ได้ แต่การ dev เป็นทีม เราต้องแบกรับบาปกรรมของดีไซน์ห่วยๆ ของเราไว้ไปตราบนานเท่านาน แต่การดีไซน์ระบบให้รองทุก feature ของโปรเจคใหญ่ๆ นั้นไม่ง่ายเลย มันมีหลายอย่างที่เราไม่รู้ และไม่มีเวลาพอที่จะไปค้นคว้า และบางทีเราก็ไม่มีประสบการณ์พอที่รู้ล่วงหน้าว่าจะต้อง concern เรื่องอะไรบ้าง ทำให้เราเลี่ยงไม่ได้ที่จะต้องทำผักชีโรยหน้าไว้ก่อนและก้มหน้ารับกรรมในภายหลัง

การแบ่งงานและเวลา

ถ้าเปรียบโปรเจคใหญ่ๆ เป็นเหมือนการปั้นช้างที่ตัวใหญ่เท่าภูเขา เป็นไปไม่ได้เลยที่เราจะปั้นช้างทั้งตัวในทีเดียว ความยากก็คือเราต้องสามารถ zoom out สมองของเราออกมาและแบ่งให้ได้ว่างานทั้งหมดที่ต้องทำมันมีอะไรบ้างและใช้เวลาเท่าไหร่บ้าง และต้องใช้คนช่วยกี่คน

การวาง development process

โปรแกรมเมอร์ต้องศึกษาและมโนเอาเอง เพราะไม่รู้ว่าชาวบ้านเค้าทำยังไงกัน
   - การวาง CI (Continuous Integration) Server
   - การกำหนดกติกาในการแตก branch และ push code
   - การวางแผน release version เพราะเราต้องทยอยส่งงานลูกค้า ไม่ได้ส่งทีเดียวตอนเสร็จ
   - การทำ detailed design
   - การ review และ merge code
   - การทำเอกสารต่างๆ

การเทส

โปรแกรมเมอร์ต้องเป็นวัวสันหลังหวะ กลัวว่าสักวันลูกค้าและหัวหน้าจะรู้ว่าเราไม่ได้เขียน unit test (เพราะไม่มีเวลาจ้า)

ความรู้เฉพาะทางของธุรกิจต่างๆ
   
โปรแกรมเมอร์ต้องศึกษาความรู้เฉพาะทางของธุรกิจที่โปรแกรมซัพพอร์ต เช่นการเงิน การทำ stock สินค้า การออกใบเสร็จ และข้อกฎหมายต่างๆ

การจัดการเวลา

โปรแกรมเมอร์ต้องประเมินงานของตัวเองเสมอว่าจะใช้เวลากี่ชั่วโมง โปรดสังเกตคำว่าชั่วโมง มีคนกล่าวว่าถ้าโปรแกรมเมอร์ขอเวลาเป็นวันแปลว่าเขายังไม่ได้คิดว่าต้องทำอะไรบ้าง

ขอถามเลยครับ ว่าโปรแกรมเมอร์คุณภาพที่คนเค้าพูดถึงกันเนี่ย นอกจากสกิลการ coding ที่ดีแล้ว แล้วต้องมีสกิลดังกล่าวเหล่านี้ในระดับสูงด้วย ผมเข้าใจถูกต้องไหมครับ
แก้ไขข้อความเมื่อ
คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 8
ความคิดเห็นนี้ถูกลบเนื่องจาก
กระทู้นี้ถูกลบโดยระบบอัตโนมัติทั้งนี้เพื่อเป็นการรักษาบรรยากาศการสนทนา ของเพื่อนสมาชิกโดยรวมค่ะ

ความคิดเห็นนี้ได้ถูก ppantip.com ลบออกไปจากระบบแล้ว หากเนื้อหาที่ถูกลบยังคงถูกนำไปแสดงใน application หรือเว็บไซต์ใดๆ
ทาง ppantip.com ไม่มีส่วนเกี่ยวข้องใดๆด้วย การดำเนินการทางกฎหมายกรุณาติดต่อผู้พัฒนา application หรือเว็บไซต์นั้นๆโดยตรงค่ะ
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่