#1 tech recruiter in thailand

แนวทางพัฒนาทักษะการแก้ปัญหา

คงทราบกันดีอยู่แล้วว่า งานด้านไอทีเป็นงานที่ต้องแก้ไขปัญหา เรามักเห็นคุณสมบัติข้อหนึ่งที่ระบุในประกาศรับสมัครงานว่า “มีทักษะการแก้ปัญหาที่ดี” ซึ่งแน่นอนว่ามันคุณสมบัติที่สำคัญของ Software Engineer ที่ดีด้วยเช่นกัน และเป็นสิ่งที่ควรได้รับการพัฒนาตั้งแต่ช่วงเริ่มต้นของการทำงาน วันนี้เรามาดูกันว่า แนวทางพัฒนาทักษะการแก้ปัญหา มีอะไรบ้าง

Omar Rabbolini (ผู้เขียนบทความนี้) เคยใช้วิธีแก้ปัญหาที่ไม่ดีนัก ในช่วงที่เขาเป็น Junior Engineer และทำงานอยู่ในทีมพัฒนา Web ซึ่งหลังจากที่เขาช่วยแก้ปัญหาให้เพื่อนร่วมงานด้วยการเขียน Recursive Function ที่ส่งผลกระทบถึง Database ด้วย ถึงแม้มันจะทำงานได้ แต่สุดท้ายพบว่ามันไม่ใช่ Solution ที่ดีเลย จึงทำให้เขาหวนกลับมาคิดถึงกระบวนการแก้ปัญหาใหม่อีกครั้ง

กระบวนการแก้ไขปัญหา

กระบวนการในการแก้ปัญหา โดยทั่วไปแบ่งออกเป็น 4 ขั้นตอน:

  • ทำความเข้าใจปัญหา
  • จัดทำแผนขึ้นมา
  • ดำเนินการแก้ไขปัญหา
  • ตรวจสอบความถูกต้องของผลลัพธ์ที่เกิดขึ้น

นอกจากนี้ ในขั้นตอนของการจัดทำแผน สามารถแบ่งออกเป็น 2 ขั้นตอนย่อย ได้อีกคือ:

  • การวิจัย (Research) เพื่อการแก้ปัญหาที่มีอยู่
  • ปรับใช้ (Adapt) ให้เข้ากับ Case ของเราโดยเฉพาะ

ในขั้นตอนของการวิจัย (Research) นั้น จะระบุถึง Solution ที่มีอยู่ก่อนหน้านี้สำหรับปัญหาที่คล้ายคลึงกับปัญหาที่อยู่ระหว่างการตรวจสอบ แล้วพิจารณาถึงข้อดี-ข้อเสียของแต่ละข้อ ทุกวันนี้เราสามารถทำได้ค่อนข้างง่ายด้วย Online Resource ที่มีอยู่ (StackOverflow, Quora, Arxiv และอื่น ๆ ) ซึ่งช่วยลดเวลาที่ต้องใช้ในการหาทางเลือกของ Solution

ส่วนขั้นตอนของการปรับใช้ (Adapt) ดูที่การเพิ่มประสิทธิภาพของ Solution ที่ใช้เพื่อให้เหมาะสมกับปัญหาของเรา บางครั้ง(โดยเฉพาะอย่างยิ่ง ในกรณีที่ขั้นตอนการ Research ให้ผลลัพธ์ที่ไม่ดี) ในขั้นตอนนี้จะมีความสร้างสรรค์มากขึ้น และเราอาจต้องใช้เทคนิคใหม่ ๆ เพื่อให้ตอบสนองกับความต้องการของเรา

ถ้าเราดูจากสิ่งที่กล่าวมาแล้วข้างต้น แม้ว่าปัญหาจะง่ายและไม่ต้องทำความเข้าใจกับมันมากก็ตาม แต่ความผิดพลาดของ Omar ก็คือ ไม่มีการ Research ใด ๆ นั่นหมายถึง การสร้าง Code ที่ทำงานได้ใน Unit-Test Level แต่ถูกกำหนดให้ Fail ตอน Load ซึ่งเป็นสิ่งที่เกิดขึ้นได้ในทางปฏิบัติ ดังนั้น สิ่งแรกที่ต้องทำสำหรับการพัฒนาทักษะการแก้ปัญหา ก็คือ “ใช้เวลา เพื่อทำความเข้าใจกับปัญหา และเพื่อหาแนวทางแก้ไขปัญหา”

ยิ่งคุณ “ฝึกฝน” มากเท่าไหร่ คุณก็ยิ่งสามารถ Research ได้เร็วขึ้นเท่านั้น แต่ในบางกรณีคุณต้องใช้เวลามากให้มากพอเพื่อให้แน่ใจว่าคุณเข้าใจปัญหาและแนวทางแก้ไข พร้อมกับจุดแข็ง-จุดอ่อนของมัน

ความคิดสร้างสรรค์ และความมั่นใจ

นอกเหนือจากที่ต้องผ่านขั้นตอนการวิจัย Omar พบว่า Engineer ส่วนใหญ่ (รวมถึงตัวเขาเอง) ก็มักติดอยู่ในช่วงการปรับใช้ ซึ่งมีอยู่ 2 กรณีตรงข้ามกัน โดยเฉพาะอย่างยิ่งเมื่อมาพร้อมกับ Solution ใหม่ ๆ :

  • ขาดความมั่นใจในตนเอง: คุณมี Solution ที่ดีแล้ว แต่คุณคิดว่ามันยังไม่ดีพอ
  • มีความมั่นใจมากเกินไป: คุณหา Solution ได้อย่างรวดเร็ว และคุณคิดว่ามันเป็นสิ่งที่ยอดเยี่ยมที่สุดแล้ว

แม้ว่าจะมันตรงกันข้าม แต่พฤติกรรมเหล่านี้ล้วนเกิดจากปัญหาเดียวกัน คือ อคติโดยใช้ความเห็นส่วนตัว หรือกล่าวอีกนัยหนึ่งคือ คุณกำลังดูวิธีแก้ปัญหาของคุณจากมุมมองที่ไม่เป็นกลาง ดังนั้น เคล็ดลับที่ 2 สำหรับการพัฒนาทักษะการแก้ปัญหาคือ “เมื่อคุณสร้างหรือปรับใช้ Solution แล้ว ให้พิจารณามันด้วยความเป็นกลาง”

แล้วเราจะทำแบบนั้นได้อย่างไร? วิธีที่ดีที่สุดคือการนำไปใช้และตรวจสอบความถูกต้อง อย่างไรก็ตามเรามักจะไม่ได้มีทางเลือกที่หรูหราสวยงามในด้าน Software Engineering เนื่องจากการใช้งาน Solution ที่เป็นไปได้แต่ละครั้งอาจมีค่าใช้จ่ายที่สูงและใช้เวลานานเกินไป

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

การนำไปใช้งาน และการตรวจสอบความถูกต้อง

ตอนนี้ เรามาดู 2 ขั้นตอนสุดท้ายของกระบวนการแก้ปัญหากัน

เรื่องการนำไปใช้งาน ถือเป็นสิ่งที่หลีกเลี่ยงไม่ได้ เว้นเสียแต่ว่า เราหา Solution ที่เหมาะสมไม่ได้หรือ Project ถูกยกเลิกไปเสียก่อน สำหรับเรื่องของการปรับปรุงให้ดีขึ้น (Improvement) จะไม่ขอกล่าวถึงในบทความนี้

ส่วนเรื่องของการตรวจสอบความถูกต้องนั้น มักเป็นขั้นตอนที่ถูกมองข้าม ทีมงานมักจะข้ามไปทำเรื่องที่สำคัญอื่น ๆ หลังจากที่ได้นำไปใช้งานเสร็จแล้ว ซึ่งเป็นเรื่องที่น่าเสียดาย ในขั้นตอนของการยืนยันความถูกต้อง จะช่วยให้ Engineer รู้สึกว่า มันเป็น Solution ที่ดีแล้ว ดังนั้นเคล็ดลับที่ 3 สำหรับการพัฒนาทักษะการแก้ปัญหาคือ “อย่าลืมที่จะเรียนรู้จากประสบการณ์ที่ผ่านมา”

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

การให้ Feedback กันเกี่ยวกับ Code Review ถือเป็นสิ่งที่มีประโยชน์อย่างมาก แต่ก็อย่าลืมว่า มีเรื่องของอคติของแต่ละบุคคลเข้ามาเกี่ยวข้องด้วยอยู่ดี

สิ่งอื่น ๆ ที่คุณสามารถทำได้

ยังมีอีกหลายสิ่งที่คุณสามารถทำได้เพื่อพัฒนาทักษะการแก้ปัญหาของคุณ:

ขยายทักษะให้กว้างมากขึ้น : คุณไม่จำเป็นต้องจำกัดตัวเองในการแก้ปัญหาเฉพาะงานที่ทำอยู่ ลองเข้าร่วม Open Source Project และดูว่าคุณสามารถช่วยหรือทำอะไรได้บ้าง สิ่งนี้จะช่วยให้คุณเรียนรู้จาก Engineer คนอื่น ๆ ที่อยู่ในแวดวงอื่น และจะได้เจอกับปัญหาที่คุณอาจไม่เคยเจอมาก่อน

ท้าทายตัวเอง : คุณสามารถท้าทายความสามารถตัวเองด้วยการฝึกฝนทักษะ Coding โดยสามารถเข้าไปที่ Coderbyte หรือ HackerRank หรืออื่น ๆ ก็ได้

สร้างสิ่งใหม่ ๆ : คุณอาจลองสร้าง App ใหม่และเปิดเป็น Open Source ดู คุณสามารถทำมันคนเดียวหรือร่วมกับ Engineer คนอื่น ๆ และพัฒนาต่อยอดไปด้วยกัน การเปิดเป็น Open Source จะสามารถเชิญ Engineer คนอื่นให้แสดงความคิดเห็นเกี่ยวกับการตัดสินใจของคุณ และการปรับปรุงทักษะการแก้ปัญหาของคุณได้ หากคุณยังไม่มีไอเดียในการสร้าง App ก็ลองดูที่ Codementor เพื่อเป็นแรงบันดาลใจได้เช่นกัน

ISM Technology Recruitment Ltd. (#1 Tech Recruiter in Thailand) เราเชี่ยวชาญในธุรกิจ IT Recruitment & IT Outsourcing โดยเฉพาะ เปิดทำการกว่า 28 ปี มีพนักงานทุกสายและทุกระดับทางด้าน IT ที่ได้ร่วมงานกับลูกค้าองค์กรใหญ่ที่มีชื่อเสียงและบริษัทข้ามชาติมากมาย หากคุณเป็นคน IT ที่อยากทำงานท้าทายและร่วมงานกับองค์กรชั้นนำ สามารถฝากประวัติการทำงาน (Resume) ของคุณไว้กับ ISM ได้ที่ https://www.ismtech.net/submit-your-resume แล้วคุณจะพบว่าอนาคตและโอกาสก้าวหน้ากำลังรอคุณอยู่

Source: https://levelup.gitconnected.com/

th