12 ข้อที่ Developer ควรจะเป็น และเด็กจบใหม่ควรทำความรู้จัก


ค้นไปเจอสไลด์ที่มีชื่อเรื่องว่า “12 Things Every Programmer Should Know" เห็นว่าน่าสนใจและน่าจะเป็นประโยชน์สำหรับเด็กจบใหม่อย่างเราๆ เลยนำมาแปลเป็นไทย เท่าที่จะพอเข้าใจได้ดังนี้
1. Be Passionate มีความรักในสิ่งที่กำลังทำ รักในสิ่งกำลังจะสร้าง ชอบที่จะทำให้ดีและชอบที่จะปรับปรุงให้ดีกว่าที่ผ่านมา นี่อาจจะ
"Programmer are a subset of creator have the responsibility to shape the new world ”  @steveklabnik and @jodufyr
2. Love Your Codes รักโค้ดที่คุณเขียนมันขึ้นมาเอง การที่จะรักหรือชอบโค้ดที่เขียนขึ้นมานั้น โค้ดนั้นมันต้องอ่านรู้เรื่อง สะอาดตา เพราะฉะนั้นก็พยายามเขียนให้มนุษย์ด้วยกันเองอ่านรู้เรื่อง ไม่ใช่เขียนให้ machine อ่านได้อย่างเดียว
3. Version Control อย่าง Git หรือ Mercurial ใช้เพื่อ Backup โค้ดของเรา เวลาเครื่องพังจะได้สบายใจว่าโค้ดไม่หาย, เวลาทำงานกันเป็นทีมหลายๆคน ก็สามารถจะ Track ได้ว่าใครเปลี่ยนแปลงอะไร เปลี่ยนตรงไหน เปปลี่ยนเมื่อไหร่ ไม่ต้องมานั่งทะเลาะกัน ใครลบโค้ดตรูทิ้งวะ เมื่อวานไม่ Error วันนี้ Error ได้ไง
4. Read Codes เขาบอกว่าจะเป็นนักเขียนที่ดีได้ก็ต้องเป็นนักอ่านที่ดีก่อน โปรแกรมเมอร์ก็เช่นกัน ว่ากันว่าในแต่ละวัน Programmer อ่านกว่า 70% และเขียนเพียง 30% พยายามอ่านและ ​Note เทคคนิคดีๆที่ช่วยให้ชีวิตง่ายขึ้นและเก็บเอาไว้ใช้
5. Practice, Practice and Practice ฝึกหัด ฝึกฝน ฝึกซ้อม กับแบบฝึกหัดที่เล็กๆง่ายๆ แบบฝึกหัดที่ไม่ได้เกี่ยวกับงานที่ทำอยู่ประจำ โจทย์เกมส์สนุกๆก็ได้ ทำได้เท่าที่มีความสามารถ ไม่ต้องกดดันตัวเอง ยกตัวอย่างเช่นการทำ Code Kata, Pair Programming กับเพื่อนๆ ก็ได้ 
6. Refactoring ปรับปรุงคุณภาพโค้ดของเราให้ง่ายต่อการเข้าใจ ง่ายต่อการ maintain และการต่อยอด แต่จะต้องไม่ไปเปลี่ยนแปลงพฤติกรรมการทำงานของโค้ด ซึ่ง Practices สำหรับการทำ Refactor ก็มีมากมาย เช่น Intension Revealing Names, Small method, Compose method ...
"Always check a module in cleaner than when you checked it out" Uncle Bob
7. Follow Patterns and Best Practices 
Object Oriented Design Principles
SOLID
GRASP
DRY (Don't Repeat Yourself)
KISS
Don’t Tell Us
Design Patterns
8. ทำ TDD/BDD
Test คือข้อกำหนดว่าระบบที่เขียนขึ้นมามีหน้าที่อะไร และกระทำอย่างไร อาจเปรียบได้ว่า Test คือผู้ใช้ระบบเราคนแรกก็ได้ (ข้อนี้แล้วแต่คนนะ บางคนเช่นผมก็ไม่ได้ชอบเขียนเท่าไหร่ =.=) แต่เวลาผมเขียน Code ผมจะ Drive ด้วยการใช้งาน Code นั้นอยู่แล้ว (แอบลักจำมาจากอาจารย์ผมเอง) 

แต่การเขียน Unit Test การทำ TDD เป็นเรื่องดีนะ เป็นเรื่องดีมาก มันช่วยให้เราคิดอะไรที่เล็กๆ และควรทำก่อนที่จะ Code เป็นเรื่องที่ควรทำ ... หาข้อเสียของมันไม่ได้จริงๆ นอกเสียจาก "ขี้เกียจ"
TDD : Loop ของการทำ TDD คือ เขียน Test ให้ Fail แล้วเขียนโค้ดให้พอผ่าน จากนั้นก็ Refactor โค้ดให้ดี แล้ววน Loop ใหม่
BDD : คล้าย TDD แต่การเขียน BDD จะ Drive ด้วยพฤติกรรมที่เห็นชัดกว่า การเขียนจะแนว User Terms มากกว่าภาษาที่มีแต่ Programmer เข้าใจเหมือน TDD
9. Automation ทำให้งานที่ต้องทำมือเป็นแบบอัตโนมัติซะ อย่างเช่นจะทดสอบระบบที่มี Form เยอะๆก็มานั่งกรอกทีละ field ไปเรื่อยๆ หมดกันอนาคต ของแบบนี้มนุษย์อย่างเราไม่จำเป็นต้องทำ ปล่อยให้เป็นหน้าที่ของหุ่นยนต์ ให้มันทำ มันไม่รู้จักคำว่าเหนื่อยไง แต่เราเป็นมนุษย์ เรามีหัวใจ 
Command line are you friend เนี่ยแหละ ช่วยเราได้ เมื่อก่อนเราเองเคยพูดว่า อะไรนี่หน้าจอดำๆ ไม่เห็นจะมีอะไรให้กดเลย อย่ากลัวที่จะหัดใช้มัน มีประโยชน์เยอะ เคยใช้เปลี่ยนชื่อไฟล์หลายๆร้อยไฟล์ด้วยคำสั่งเดียว เอาเวลาไปทำอย่างอื่นสบายๆ

Continuous Integration and Continuous Delivery เดี๋ยวนี้การ Deploy งานทำได้ง่ายขึ้นมาก ซึ่งสามารถทำส่วนนี้ให้เป็นการ Automate ได้เลย แค่เราเขียน Code แล้ว Push ขึ้น Repository ก็สามารถที่จะใช้ระบบที่จะ Monitor ความเปลี่ยนแปลงของ Code และจัดการ Deploy ให้ได้ทันที โดย Software ที่เป็นที่นิยมกันเช่น Jenkins
10. Understand Your Domain 
เข้าใจเรื่องหลักที่เราจะไปแก้ปัญหา เช่นจะทำโปรแกรมบัญชี ก็ต้องเข้าใจ ระบบบัญชี ตรงระบบบัญชีเนี่ยแหละคือ Domain ของเรื่องนี้ ส่วนเรื่อง เทคโนโลยี เรื่องภาษามันเปลี่ยนอยู่ตลอดอยู่แล้ว แต่โจทย์เรายังเหมือนเดิม เข้าใจโดเมนมันให้ดีๆ แค่นั้น
"Domain มันไม่ล้าสมัย เหมือนกับ Technology ที่พยายามมาแก้ปัญหามัน"
"You can’t creatively help a business until you know how it works." Chad Fowler
11. Continuous Learning คุณจำเป็นต้องเรียนรู้อยู่เสมอ เพื่อทำให้คงอยู่ในวงการนี้ได้ พยายามอ่านหนังสือ อ่านบทความตาม Blog ที่เป็นทั้งภาษาไทยและอังกฤษ ความรู้เยอะแยะมากมายบนด้วย Google เพื่อเป็นการพัฒนาทักษะดังการฝนมีดให้แหลมคมอยู่เสมอ
12. Participate in Communities มีส่วนร่วมกับคนในวงการ เพื่อนเรียนรู้วิธีคิด กระบวนการ เทคนิคจากเพื่อนร่วมวงการ หรือแม้แต่การสอนคนอื่นก็เป็นการเรียนรู้ที่ดีเช่นกัน พยายามพูดในสิ่งที่คิดออกไป ถูกหรือผิดไม่ต้องกลัว ถ้าผิดเค้าก็จะแนะนำได้ถูกจุด ถ้าถูกก็จะได้เป็นการแบ่งปันความรู้ไปด้วย เข้าร่วมกิจกรรมตามที่เราสนใจ เช่นกิจกรรม UX Academy, Geek Academy, Agile Tour Bangkok ฯลฯ

(ดัดแปลง) Credit: http://chansom.tumblr.com/post/70477063937/12-developer

Popular posts from this blog

[Android Dev] การติดตั้ง Eclipse+AndroidSDK เพื่อพัฒนาโปรแกรมบน Android

12 วิธี การบริการและดูแลลูกค้าในร้าน Starbucks

5 TED Talk ที่จะช่วยให้คุณทำงานดีขึ้น