52 คะแนน โดย spilist2 2023-08-19 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

นี่คือบทความที่เทียบได้กับภาค 1 ของ คู่มือภาคปฏิบัติเพื่อยกระดับผลงานและทักษะของวิศวกรฟรอนต์เอนด์ระดับจูเนียร์ ที่นำเสนอใน Infcon 2023 และอาจมองได้ว่าเป็นภาคต่อในเชิงแนวคิดของ
แผนที่เส้นทางอาชีพวิศวกรฟรอนต์เอนด์: 3 เส้นทางความเชี่ยวชาญสำหรับจูเนียร์ ที่เคยโพสต์ไว้ใน GeekNews ก่อนหน้านี้


วิศวกรที่โดดเด่นคือคนแบบไหน?

ในงานวิจัยปี 2015 <What Makes a Great Software Engineer?> Li Paul Luo ได้เสนอปัจจัยจำเป็น 5 ประการที่ทำให้วิศวกรคนหนึ่งโดดเด่น โดยมีวิธีการวิจัยดังนี้

  • วิเคราะห์งานวิจัยเดิมจำนวนมากเกี่ยวกับการศึกษา ความสามารถ และพฤติกรรมที่จำเป็นต่อการเป็นนักพัฒนา
  • สัมภาษณ์เชิงลึกนักพัฒนาใน Microsoft จำนวน 59 คน ที่อยู่ระดับ 2 ขึ้นไป หรือกล่าวได้ว่าเป็นผู้ที่ได้รับการยอมรับว่ามีความสามารถในระดับหนึ่ง แล้วสกัดรายการคุณลักษณะส่วนบุคคลที่นักพัฒนาควรมีออกมาได้ 54 ข้อ เช่น บุคลิก ความรู้ และพฤติกรรม
  • ทำแบบสำรวจนักพัฒนาใน Microsoft กว่า 2,000 คน โดยอธิบายคุณลักษณะแต่ละข้ออย่างละเอียดแล้วถามว่า “ถ้านักพัฒนาที่มีประสบการณ์ไม่มีคุณลักษณะนี้ คุณจะยังประเมินว่าเขาเป็นนักพัฒนาที่โดดเด่นหรือไม่?”
  • วิเคราะห์ผลแบบสำรวจและสัมภาษณ์ติดตามผู้ตอบ
  • นำผลการวิเคราะห์แบบสำรวจและการสัมภาษณ์ติดตามไปสัมภาษณ์เพิ่มเติมกับผู้ร่วมงานหลักของนักพัฒนาอีก 40 คน เช่น ศิลปิน นักวางแผนคอนเทนต์ นักวิทยาศาสตร์ข้อมูล ดีไซเนอร์ และวิศวกรไฟฟ้า

ผมได้นำปัจจัยจำเป็น 5 ประการที่ผู้เขียนเสนอมาเรียบเรียงใหม่เล็กน้อย ทั้งในลำดับและการตีความ พร้อมเสริมมุมมองของตัวเองลงไป

1. เขียนโค้ดที่ยอดเยี่ยม (Be a competent coder)

แทนที่จะตั้งเป้าเป็น “คนเขียนโค้ดที่เก่ง” การตั้งเป้าไปที่ “โค้ดที่ยอดเยี่ยม” น่าจะเหมาะกว่า

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

สำหรับผม เกณฑ์ที่ใช้ตัดสินความสามารถด้านการเขียนโค้ดของจูเนียร์คือ “1) มีมุมมองที่สม่ำเสมอเป็นของตัวเองเกี่ยวกับคุณภาพโค้ด 2) เขียนโค้ดที่ตอบสนองความต้องการของลูกค้า 3) ได้รวดเร็ว 4) มีบั๊กน้อย และ 5) อ่านง่าย”

2. ฝึกการตัดสินใจบนฐานของหลักฐาน (Practice informed decision-making)

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

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

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

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

แน่นอนว่าเมื่อคนเราเครียด ก็ยากจะทำตัวอย่างมีเหตุผล องค์กรก็เช่นกัน ดังนั้นองค์กรที่ฉลาดจึงตั้งใจเผื่อ ช่องว่าง ไว้ในกำหนดการและทรัพยากร และบุคคลที่ฉลาดก็เรียนรู้วิธีจัดการความเครียด เช่น ผ่าน การทำสมาธิ

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

3. ช่วยให้เพื่อนร่วมงานตัดสินใจได้อย่างมีประสิทธิภาพ (Enable others to make decisions efficiently)

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

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

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

ถ้าอยากส่งเสริมการตั้งคำถาม ก็ต้องสร้างวัฒนธรรมองค์กรที่ให้คุณค่าสูงกับความเปราะบางและความโปร่งใส โดยเฉพาะการกำหนดค่าเริ่มต้นภายในองค์กรนั้นสำคัญมาก เพราะค่าเริ่มต้นมีอิทธิพลต่อการรับรู้และพฤติกรรมของคนอย่างมาก

ในแง่นี้ เครื่องมือแบบ Public by Default อย่าง Slack หรือ Notion ซึ่งหากจะซ่อนต้องลงมือทำเพิ่ม จะดีกว่าเครื่องมือแบบ Private by Default อย่าง Email หรือ Google Docs ซึ่งหากจะแชร์ต้องลงมือทำเพิ่ม เช่นเดียวกัน “คุยได้ตลอด เว้นแต่ช่วงที่รบกวนไม่ได้ (Do Not Disturb)” ก็ดีกว่า “ช่วงนี้เข้ามาคุยได้อย่างอิสระ (Open Hours)”

4. เพิ่มมูลค่าปัจจุบันของงานให้สูงสุด (Maximize current value of your work)

นักพัฒนาที่โดดเด่นต้องมีทั้งการคิดเชิงระบบ เช่น คาดการณ์ส่วนที่อาจกลายเป็นปัญหาในอนาคตหรือคาดการณ์ว่าความต้องการจะเปลี่ยนอย่างไรเพื่อออกแบบจากมุมมองระยะยาว และการลงมือขยับทันที คือไม่หยุดนิ่งเพราะมัวแต่วิเคราะห์ แต่กล้ากระโดดลงไปทำแม้ยังมีความไม่แน่นอน เพื่อรับฟีดแบ็กกลับมา

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

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

5. เรียนรู้อย่างมีประสิทธิภาพและต่อเนื่อง (Continuously learn)

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

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

อย่างไรก็ตาม ข้อมูลที่มากขึ้นไม่ได้แปลว่าดีเสมอไป เหมือน big data ที่ยังไม่ได้ผ่านการกลั่นกรอง ข้อมูลบางอย่างมีไว้ก็รบกวนมากกว่าจะช่วย ดังนั้นเราจึงควรเพิ่มสัดส่วนของ “สัญญาณ” ให้มากกว่า “สัญญาณรบกวน” ที่ทั้งไม่แม่นยำหรือไม่เกี่ยวข้องกับปัญหาของเรา ตัวอย่างของสัญญาณที่ดีคืออินไซต์ที่ช่วยเชื่อมโยงความรู้เดิมของเรากับโดเมนที่ไม่ใช่ความเชี่ยวชาญโดยตรงของเรา หรือหลักฐานที่บอกว่าเราอาจคิดผิดภายใต้เงื่อนไขบางอย่าง

การเรียนรู้อย่างมีประสิทธิภาพสรุปได้ด้วยคำถามว่า “จะทำอย่างไรให้ฉันเติบโตได้อย่างมีประสิทธิภาพขึ้นทีละนิดทุกวัน?” คำตอบคือ 1) หาสิ่งที่จำเป็นต่อเราจริง ๆ ในโลกความเป็นจริงตอนนี้ 2) เรียนรู้พื้นฐานเชิงทฤษฎีที่เกี่ยวข้องเท่าที่จำเป็น และ 3) นำไปใช้ทันทีที่เรียนรู้เพื่อรับฟีดแบ็กด้วยตัวเอง แล้วทำซ้ำไปเรื่อย ๆ

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

จะนำไปใช้อย่างไร - มุมมองของจูเนียร์และซีเนียร์

สำหรับจูเนียร์ ลองใช้เป้าหมายแต่ละข้อนี้ โดยเฉพาะความรู้และพฤติกรรมที่อธิบายไว้ใน “การเขียนโค้ดที่ยอดเยี่ยม” และ “การเรียนรู้อย่างมีประสิทธิภาพและต่อเนื่อง” มาตรวจดูว่าตัวเองสอดคล้องกับสิ่งเหล่านี้มากน้อยแค่ไหน จากนั้นก็โฟกัสพัฒนาความสามารถที่ยังขาดอยู่

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

ยิ่งไปกว่านั้น ความสามารถเหล่านี้ยังกลายเป็นเกณฑ์ที่ดีในการประเมินอาชีพใดก็ตาม เพียงแค่เปลี่ยน “การเขียนโค้ดที่ยอดเยี่ยม” ให้เป็นความเชี่ยวชาญเฉพาะโดเมนของสายงานนั้น ๆ ดังนั้นที่ XL8 ไม่ว่าจะเป็น PM ดีไซเนอร์ หรือวิศวกร เวลารับคนเข้า ทำ onboarding หรือให้ฟีดแบ็ก เราก็พยายามใช้สิ่งเหล่านี้เป็นเกณฑ์ในการประเมินความสามารถให้มากที่สุด และพบว่าได้ผลดีมาก

ข้อควรระวังเมื่อนำไปใช้

ความสามารถทั้ง 5 ข้อนี้ล้วนส่งเสริมซึ่งกันและกัน เพราะเชื่อมโยงกันทั้งหมด การตั้งเป้าจะพัฒนาแค่ข้อเดียวให้เก่งอาจไม่ใช่วิธีที่มีประสิทธิภาพนัก ในทางกลับกัน ถ้าเก่งสักข้อหนึ่งแล้ว ก็อาจทำให้เก่งข้ออื่นได้ง่ายขึ้นเช่นกัน

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

นอกจากนี้ เพราะชื่อบทความคือ ‘อะไรทำให้นักพัฒนาคนหนึ่งโดดเด่น?’ คนอ่านอาจเผลอคิดไปได้ว่า ถ้ามีความสามารถ 5 ข้อนี้ครบก็จะกลายเป็นนักพัฒนาที่โดดเด่น หรือมองว่าเป็นเงื่อนไขที่เพียงพอ แต่สิ่งที่งานวิจัยศึกษาจริง ๆ คือ “หากไม่มีสิ่งนี้ จะไม่อาจเรียกว่าเป็นนักพัฒนาที่โดดเด่นได้” นั่นคือเป็นเงื่อนไขที่จำเป็น ดังนั้น จะใช้สิ่งเหล่านี้เป็นเป้าหมายที่ดี เป็นทิศทางที่ควรมุ่งไป หรือเป็นจุดแวะระหว่างทางก็ได้ แต่ไม่จำเป็นต้องมองว่าเป็นจุดหมายสุดท้าย

จะนำไปใช้อย่างไร - มุมมองของนักพัฒนาฟรอนต์เอนด์

เพื่อใช้ความสามารถทั้ง 5 ข้อนี้ในบริบทของการพัฒนาฟรอนต์เอนด์ เราอาจตั้งคำถามแบบนี้

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

สิ่งที่เกิดขึ้นจากการขบคิดว่าจะตอบคำถามเหล่านี้อย่างไร ก็คือ แผนที่เส้นทางอาชีพวิศวกรฟรอนต์เอนด์ ซึ่งอธิบายบทบาทที่องค์กรคาดหวังจากนักพัฒนาฟรอนต์เอนด์ โดยแบ่งออกเป็นสายที่เน้นเว็บ/ผลิตภัณฑ์/ปฏิบัติการ พร้อมอธิบายลักษณะเด่น ข้อดี และข้อเสียของแต่ละสาย (ในงานนำเสนอที่ Infcon เนื้อหาส่วนนี้ถูกตัดออกทั้งหมด และวางแผนจะขยายความเพิ่มเติมในบทความแยกต่างหาก)

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

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

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

แน่นอนว่า เช่นเดียวกับงานวิจัยข้างต้น ทั้ง 3 เส้นทางนี้ต่างก็ส่งเสริมกันและกัน ไม่ใช่ความจริงสัมบูรณ์ และไม่ใช่จุดหมายปลายทางสุดท้าย ซึ่งเป็นสิ่งที่ควรจำไว้

การเป็นนักพัฒนาซีเนียร์ที่โดดเด่น

ใน แผนที่เส้นทางอาชีพวิศวกรฟรอนต์เอนด์ ผมยังกล่าวถึงความคิดของตัวเองแบบสั้น ๆ เกี่ยวกับการเป็นนักพัฒนาซีเนียร์ที่โดดเด่นด้วย

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

1 ความคิดเห็น

 
spilist2 2023-08-19

พอย้ายมาจาก Notion ตรงๆ เลยทำให้ลิงก์ 'แผนที่เส้นทางอาชีพ Frontend Engineer' ด้านท้ายเข้าไปเป็นลิงก์ของ Notion นะครับ T_T https://steady-study.super.site/frontend-engineer-career-roadmap อันนี้ครับ