ข้อผิดพลาดที่นักพัฒนาระดับ Junior มักจะทำ

การส่งโค้ดที่ทำงานได้คือมาตรฐานขั้นต่ำ แต่มันไม่ใช่เป้าหมาย

ครั้งหนึ่งผมเคยรีวิว pull request ที่ต้องใช้เวลาถึง 45 นาทีกว่าจะเข้าใจ ตรรกะนั้นถูกต้อง การทดสอบผ่านหมด แต่โค้ดกลับถูกเขียนขึ้นราวกับว่าจะมีแค่ผู้เขียนคนเดียวเท่านั้นที่จะได้อ่านมัน

เมื่อผมให้คำแนะนำ (feedback) นักพัฒนากล่าวว่า "แต่มันก็ทำงานได้นี่ครับ"

เขาพูดถูก มันทำงานได้ และนั่นแหละคือปัญหา

นักพัฒนาระดับ Junior มักจะมุ่งเน้นไปที่ทักษะทางเทคนิค แต่ช่องว่างที่แท้จริงมักจะอยู่ที่นิสัยและวิธีคิด (mindset)

และนี่คือข้อผิดพลาดเล็กๆ น้อยๆ ที่จะทำให้คุณทำงานช้าลง:

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

  • คัดลอกโค้ดโดยไม่เข้าใจ การใช้ Stack Overflow นั้นไม่เป็นไร แต่การคัดลอก regex pattern โดยไม่รู้ว่ามันทำงานอย่างไรนั้นอันตราย คุณกำลังสร้าง "กล่องดำ" (black box) ไว้ใน codebase ของคุณ และคุณจะไม่สามารถ debug มันได้เลยเมื่อเกิดปัญหา

  • เพิ่มความซับซ้อนโดยไม่จำเป็น บ่อยครั้งที่ Junior มักจะเข้าใจผิดว่าความซับซ้อนคือทักษะ พวกเขามักนำ design patterns มาใช้กับงานง่ายๆ การทำ abstraction ที่ไม่จำเป็นจะทำให้โค้ด debug ยากขึ้นและแก้ไขยากขึ้น ให้เพิ่ม abstraction ก็ต่อเมื่อคุณเริ่มรู้สึกถึงความลำบากจากการที่ไม่มีมันเท่านั้น

  • เพิกเฉยต่อข้อความแสดงข้อผิดพลาด error messages คือเอกสารประกอบ (documentation) ที่ได้มาฟรีๆ อย่าเพิ่งรีบไป Google ทันทีที่เห็น stack trace ให้ลองอ่านข้อความทั้งหมดดู เพราะมันมักจะบอกคุณอย่างชัดเจนว่าบรรทัดไหนที่ผิดพลาดและเพราะอะไร

  • ขอความช่วยเหลือเร็วเกินไปหรือช้าเกินไป อย่าเสียเวลาสามชั่วโมงกับปัญหาที่ใช้เวลาแก้แค่ 10 นาที เพราะนั่นคือความไม่มีประสิทธิภาพ แต่ในขณะเดียวกัน ก็อย่าทักไปหา Senior ด้วยแค่ภาพหน้าจอโดยไม่มีบริบทใดๆ ให้ใช้ "กฎ 20 นาที": ลองพยายามแก้ปัญหาด้วยตัวเอง 20 นาที จดบันทึกสิ่งที่คุณได้ลองทำไปแล้ว จากนั้นจึงขอความช่วยเหลือพร้อมกับข้อมูลเหล่านั้น

  • สร้างสิ่งที่เคยมีอยู่แล้วขึ้นมาใหม่ ก่อนที่คุณจะเขียน utility ตัวใหม่ ให้ลองค้นหาใน codebase ดูก่อน ทีมของคุณน่าจะเคยแก้ปัญหานั้นไปแล้ว

  • เขียน commit message ไม่ดี ข้อความอย่าง "fix bug" ไม่ได้บอกอะไรทีมของคุณเลย จงอธิบายว่าอะไรเปลี่ยนไปและเพราะอะไร ให้ปฏิบัติกับ Git history เสมือนว่าเป็นเอกสารประกอบ

  • มองว่าความต้องการ (requirements) คือกฎเหล็ก บ่อยครั้งที่ requirements มักจะตกหล่นกรณีที่เป็น edge cases อย่าเพียงแค่ทำตามสิ่งที่ได้รับมอบหมายมา แต่จงถามด้วยว่า "จะเกิดอะไรขึ้นถ้ามีบางอย่างผิดพลาด"

  • หยุดแค่ตอนกดปุ่ม "Merged" ความรับผิดชอบไม่ได้สิ้นสุดลงเมื่อ PR ของคุณถูก merge ให้ติดตามฟีเจอร์ของคุณไปจนถึงขั้นตอน QA คอยดูการทำงานใน production และอ่านรายงานข้อผิดพลาด (error reports) ด้วย

ช่องว่างที่ใหญ่ที่สุดคือความรับผิดชอบ (accountability) นักพัฒนาระดับ Senior ไม่ได้แค่เขียนโค้ด แต่พวกเขาแก้ปัญหาโดยไม่สร้างปัญหาใหม่ขึ้นมา

เลิกมุ่งเน้นแค่การทำให้ "เสร็จ" (done) แต่เริ่มมุ่งเน้นที่การทำให้ "ดี" (good)

Source: https://dev.to/jasda_cf511abd504d201e7bd/the-mistakes-junior-developers-keep-making-that-senior-devs-stopped-talking-about-2pe6