Software Dev. รุ่นพี่แนะนำรุ่นน้อง (ไม่มีกั๊ก)

25-เม.ย.-17

IT Insider


จากประสบการณ์การทำงานด้าน Software Development มานานกว่า 10 ปี มีความรู้หลายอย่างที่จำเป็นต่อการทำงาน แต่มักจะไม่ค่อยได้สอนกันในหลักสูตรการเรียน และเอาเข้าจริงๆ หลายเรื่องก็เป็นสิ่งที่สอนกันไม่ได้ แต่ต้องสัมผัสและเข้าใจมันเอง สิ่งที่จะเล่าต่อไปนี้เกิดจากการสัมผัสของผมเองที่อยากชวนให้น้องๆ ได้ลองอ่านแล้วคิดพิจารณาดู

Choosing stacks of technology

การเลือกใช้เทคโนโลยีหนึ่งใดในการพัฒนาระบบเป็นการตัดสินใจที่มีเรื่องการบริหารจัดการเข้ามาเกี่ยวข้องด้วยเสมอ และอาจเป็นตัวตัดสินอนาคตของระบบนั้นๆ ได้ด้วย ผมจึงมองว่าการเลือก Technology stacks ซึ่งรวมไปถึง Programming language, Framework, Library ที่เหมาะสมตั้งแต่แรกเริ่มจึงเป็นสิ่งสำคัญมาก

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

"สุดท้าย จงทำตัวเป็น Software Atheist อย่าบูชาเทคโนโลยีเป็นดั่งเทพเจ้า เพราะมันจะทำให้การตัดสินใจของเรามีอคติ"
 

Perfect current skills while learning on new things

  • เมื่อเราทำสิ่งใดสิ่งหนึ่งมานาน ความชำนาญจะเกิด ซึ่งจะช่วยให้เราทำงานได้เร็วขึ้น เช่น การเขียนโปรแกรมภาษาใดภาษาหนึ่งมานานหลายปี แต่ความชำนาญสามารถเติบโตต่อไปเป็นความเคยชิน ที่จะทำให้เราไม่เต็มใจที่จะขยับไปหาสิ่งใหม่ๆ ดังนั้นจึงควรที่จะเรียนรู้และลองใช้เทคโนโลยีใหม่ๆ อยู่เรื่อยๆ
  • การตามโลกให้ทัน และค้นหาสิ่งใหม่ๆ อยู่ตลอดเวลาจะทำให้เรามีเครื่องมือในการช่วยทำงานให้มีประสิทธิภาพมากยิ่งขึ้น ไม่ว่าจะเป็นงานที่เสร็จเร็วขึ้นจากการใช้ของที่คนอื่นได้ทำไว้แล้ว หรืองานที่มีคุณภาพมากขึ้นจากการได้รู้ว่าวิธีที่เป็น best-practices คือแบบไหน
  • แต่การตามโลกให้ทันไม่ได้หมายความว่าเราต้องเปลี่ยนเทคโนโลยีที่ใช้อยู่ตลอดเวลา เราเพียงให้รู้เท่าทันการเปลี่ยนแปลงที่เกิดขึ้นอยู่ภายนอก เพื่อที่เราจะสามารถเลือกเปลี่ยนแปลงภายในได้ตามความเหมาะสมของเราเอง
     

Do not reinvent the wheel

ในยุคหนึ่งการเรียนรู้ภาษาหรือเครื่องมือใหม่ๆ ทำได้เพียงการหาหนังสืออ่าน การเขียนเว็บก็ต้องเขียน PHP ที่ไม่มี Framework ใดๆ และเมื่อเขียนเว็บเสร็จก็ยังต้องมานั่งแก้ให้เว็บรองรับ browsers ได้หลากหลาย โดยเฉพาะ IE6 อีก

ปัจจุบันเรามีเครื่องมือให้ใช้มากมาย กระนั้นแล้วเรามักจะเขียน code ใหม่ขึ้นมาแทนที่จะใช้ code หรือ library ที่มีอยู่ เพียงเพราะเราอาจไม่เข้าใจวิธีการทำงานของมัน หรือก็เพียงเพราะเราขี้เกียจไปค้นหาว่ามันเคยเขียนไว้อยู่ไหนเท่านั้นเอง

ขีดความสามารถของมนุษย์มีจำกัดเพราะเรามีเวลาจำกัด ดังนั้นสิ่งที่ไม่ใช่ core business ของระบบก็ควรพยายามใช้สิ่งที่ได้มีคนอื่นสร้างไว้แล้ว


Always thinking about users

นักเศรษฐศาสตร์ชอบตั้งสมมุติฐานว่ามนุษย์เป็นสัตว์ที่มีเหตุผลในการตัดสินใจ โปรแกรมเมอร์ก็ชอบคิดว่าผู้ใช้เป็นคนดีที่ทำตามขั้นตอนทุกอย่างด้วยเหมือนกัน

แต่โลกความจริงมันไม่ได้เป็นอย่างนั้น …

  • ผู้ใช้มักทำผิดพลาดอยู่เสมอ ระบบที่ดีนั้นต้องเป็นระบบที่ foolproof นั่นคือคิดไว้เสมอว่าผู้ใช้ในโลกความเป็นจริงมักจะขี้ลืม ไม่อ่านตัวหนังสือ กรอกข้อมูลผิด ไม่ทำตามที่แนะนำ ฯลฯ ซึ่งเมื่อเราตั้งสมมุติฐานให้ตรงกับโลกความจริงได้แล้ว จะทำให้เราสามารถสร้างระบบที่ตอบสนองความต้องการของผู้ใช้อย่างแท้จริงได้ด้วยเช่นเดียวกัน
  • ผู้ใช้บางคนไม่ใช่คนดี และบางคนก็เคยเป็นคนดี จนกระทั่งเห็นช่องทางที่จะสามารถโกงระบบได้ โปรแกรมเมอร์จึงไม่ควรเป็นคนที่มองโลกสวย แต่ควรเป็นคนที่ครุ่นคิดตลอดเวลาว่าสิ่งที่ตัวเองกำลังทำอยู่มีช่องทางไม่ปกติช่องทางไหนบ้างที่คนไม่ดีอาจจะสามารถเข้ามาได้


 

แบ่งปันประสบการณ์จาก ภาณุ ตั้งเฉลิมกุล
Freelance Software Developer / UX Designer


หมายเหตุ: รุ่นพี่คนไหนมีเรื่องราวไอทีดีๆอยากแบ่งปัน สามารถอีเมล์มาที่ itrockstar@techstarthailand.com

 

อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ

 

เพิ่มเพื่อน

 

 

 

บทความที่เกี่ยวข้อง