บทความนี้แชร์ประสบการณ์ 3 เดือนแรกของการทำงานเป็น Android Developer ที่ Nextzy ครอบคลุมทั้งด้าน technical เช่น MVP architecture, Android Lifecycle, ProGuard, Git workflow และการเขียน Unit Test รวมถึงด้าน soft skill อย่างการสื่อสารกับทีม, การแชร์ความรู้, และการเขียนโค้ดให้ readable และยืดหยุ่น นอกจากนี้ยังสะท้อนวัฒนธรรมองค์กรที่เน้นทีมเวิร์ค การ review โค้ด และบรรยากาศการทำงานที่สนุกสนาน ซึ่งล้วนช่วยลด learning curve และพัฒนาทักษะได้เร็วกว่าการเรียนรู้คนเดียว

Table of contents

Nonthawit
CEO | Engineer | Designer
VIEW
8,525
CATEGORY
LAST UPDATED
December 30, 2016
ซักประมาณ 1 ปีที่แล้วตอนอยู่ปี 4 ตัดสินใจเริ่มหัดเขียน Android ซึ่งนับเป็นโอกาสที่ดีเพราะส่วนหนึ่งเรามีพื้นฐานภาษา JAVA มาก่อน ต่อยอดอีกนิดไปทาง Android น่าจะดีไม่น้อย
เมื่อเราเริ่มหัด ไม่มีคนมาคอยแนะนำหรือสอนเลยว่า “วิธีไหนคือวิธีที่ถูกต้อง” อาศัยอ่านจาก StackOverflow กับลองเองซะส่วนใหญ่ โชคดีที่เราลงงานแข่ง business ที่ต้องทำ application จริงๆ เลยได้ skill มาจากตรงนั้นมาบ้าง
แต่คิดว่าความรู้ที่มีอยู่ยังไม่พอและยังขาดอยู่ไม่น้อยจึงตัดสินใจสมัครงาน เพื่อจะได้ทำโปรเจคที่มี user ใช้งานจริงๆ และได้คนที่เก่งมีฝีมือมาค่อยช่วย “shape” ความรู้ให้มันดีขึ้นกว่าเดิม ซึ่งทั้งสองอย่างทำให้ได้เราเรียนรู้ว่า อะไรคือสิ่งที่ควรทำ อะไรไม่ควรทำ และทำให้ลด learning curve ไปได้เยอะ
ซึ่งในบทความนี้เราอยากจะแชร์ประสบการณ์การทำงานครั้งแรกในชีวิต ว่าหลังจากเป็น Android developer ที่ Nextzy 3 เดือน เราได้อะไรกลับมาบ้าง บวกกับความรู้เก่าที่มีมา จะมีทั้งเรื่องเกี่ยวกับ technical และไม่ป่นอยู่ด้วยครับ 😎
เนื่องจากเป็น architecture ที่แบ่งโค๊ดออกเป็น layer ชัดเจน ทำให้โค๊ดในโปรเจคยืดหยุ่นมากขึ้น เพราะเราแยกโค๊ดส่วนของ android framework ออกมา จะทำ unit test ก็ง่าย และลดเวลาการ maintenance โค๊ดของเราลงได้เยอะ

NOTE: ลองอ่าน click (ไทย), click, ตัวอย่างของทาง google click (Eng)
BONUS: ความแตกต่างระหว่าง MVC, MVP, MVVM click, ความรู้ MVP จากการใช้งานจริง click
การทำ base class โดยใช้ Generic type เพื่อให้คนในทีมเรียกใช้ได้ง่ายเป็นเรื่องสำคัญ มันคือการวางโครงโปรเจคเรานั่นเอง
ทำไมเราต้องยอมเสียเวลาวางโครงเป็นเวลานาน? คำตอบคือ เพื่อทำให้โค๊ดทั้งทีมไปในทางเดียวกันหมด แก้ไขก็ง่าย โค๊ดไม่ซ้ำซ้อน และหยิบมาใช้ก็ง่าย เพราะเราทำไว้หมดแล้ว
xml style ใน android ก็ทำเป็น base ได้เช่นกันนะ ทำให้เรากำหนด style ให้กับ view ที่ต้องต้องการเพียงแค่บรรทัดเดียว เพราะทุกอย่างอยู่ใน style.xml หมดแล้วทำให้โค๊ดใน xml clean ขึ้นเยอะ click

เพราะฉะนั้นเสียเวลาวางโครงในโปรเจคเราให้เยอะๆ ดีกว่าเขียนๆไปแล้วต้องแก้ทีหลัง
If I had six hours to chop down a tree, I’d spend the first four hours sharpening the axe.
(Abraham Lincoln)

เป็นเรื่องอันดับต้นๆที่นักพัฒนาแอนดรอยด์ควรทำความเข้าใจเป็นอันดับแรก ถ้าเราไม่แม่นว่า actvity/fragment จะตาย หรือ สร้างกลับมาตอนไหน หรือมีกระบวนการ savestate อย่างไร จะมีปัญหาขึ้นภายหลังได้เป็นแน่เอาหัวเป็นประกัน
NOTE: อ่านเพื่มเติม click และ click, Activity vs Fragment lifecycle click, การ savedstate viewgroup click

ปัญหา Android fragmentation เป็นปัญหาโลกแตกที่ทุกคนต้องเจอแน่นอน เพราะ device บนโลกของ android มีหลากหลายยี่ห้อ หลากหลายขนาดมากถึงมากที่สุด
วิธีแก้ปัญหาที่คิดว่าโอเคที่สุดคือ
NOTE: developer option ใน Android N สามารถปรับ small width ได้โดยไม่จำเป็นต้อง root เครื่อง แต่อย่างใด click


เปิด ProGuard ทุกครั้งที่นำ app ขึ้น playstore เป็นอะไรที่สำคัญมากถึงมากที่สุด นอกจากสามารถกันการ reverse engineer ได้ระดับหนึ่งแล้ว ยังลดขนาดของ application เราด้วยเนื่องจากมันจะไปไล่ตัด class ที่ไม่จำเป็นออกจากโปรเจคเรา และอะไรอีกหลายๆอย่าง ยอมเสียเวลาศึกษามันหน่อยคุ้มมากๆครับ

NOTE: ลองอ่าน click, DexGuard, รายละเอียดการ shrink
การเลือกใช้ library ในโปรเจคเราต้องเช็คให้ละเอียดก่อนว่าเกิดปัญหาภายหลังหรือไม่ เพราะส่วนใหญ่เป็น library ที่ open source นั้นหมายความว่า FREE แต่ก็ไม่มีอะไรรับรองว่ามันจะเหมาะสมกับโปรเจคเรา เราจึงต้องเช็คให้ละเอียด
และที่สำคัญคือมีปัญหากับ ProGuard หรือไม่?
ดูจำนวนคนสนใจ

จำนวน issue ที่ open แล้ว closed ไปแล้วเท่าไหร่ เพื่อประกอบการพิจารณา

สุดท้ายถ้าคิดว่าโอเค ให้ใช้ DryRun เพื่อลองใช้ library ตัวนั้นดูก่อน
ถ้าไม่มี library ตัวไหนโอเคเลย หนทางสุดท้ายคือทำ library ให้คนในทีมใช้กันเอง เช่น RoundCornerProgressBar LocalizationActivity ที่คนเทพๆใน Nextzy ทำไว้ให้ใช้ open source อีกต่างหากใจดีจริงๆ
BONUS: Awesome library click, Android Utility click, CrashActiviy library click
เราอยากบอกว่าไม่มีอะไรสำคัญไปกับการเขียนเทสอีกแล้ว ทำไมถึงสำคัญ? ขอยกตัวอย่างง่ายๆ
ถ้าคุณเขียนโปรเจคขึ้นมาหนึ่งตัวโดยไม่มีการเขียนเทส ถ้าวันนึงคุณต้องการ refactor โค๊ดบางส่วนให้ดีขึ้น ซึ่งนั้นไม่มีอะไรรับรองได้เลยว่า refactor โค๊ดส่วนนั้นแล้วจะไม่กระทบกับส่วนอื่นๆในโปรเจคคุณ
ซึ่งถือเป็น error ที่ร้ายแรงมากสำหรับนักพัฒนาถ้าแอพเรายังทำงานได้แต่ให้ผลที่ผิดพลาด
ทางออกที่ดีที่สุดคือการเขียนเทสไว้ตั้งแต่แรก เมื่อ refactor เสร็จก็เพียงแค่รัน test เพื่อเช็คดูว่ากระทบกับส่วนอื่นในโปรเจคหรือไม่
เสียเวลาเขียนเทสดีกว่า ไปช้ากว่าแต่ไปอย่างมั่นคง
BONUS: ใช้ Hamcrest ช่วยในการทำ unit test click, test layer click
หลีกเลี่ยงไม่พ่นกับการที่ต้องอ่านโค๊ดคนอื่น ซึ่งเป็นเรื่องที่ดีที่ทำให้การเขียนโค๊ดของเราดีขึ้นเรื่อยๆ เพราะจะเจอสไตร์การเขียนโค๊ดที่หลากหลายมากขึ้น
โดยเฉพาะ การยอมเสียเวลา ศึกษา Design pattern
If you compare coding with writing, then coding patterns is like your handwriting.
เราควรเสียเวลากับการอ่าน code pattern ดีๆ และเมื่อเราเจอ pattern ที่สวยงาม เราควรเซฟเป็น code snippet เก็บไว้เพื่อไว้วันหลังเราสามารถยิบขึ้นมาใช้ได้ด้วยง่าย
มีหนังสือหลายเล่มที่อ่านไว้ไม่เสียหาย อาทิเช่น

NOTE: java pattern click
เนื่องจากเราไม่ได้ทำงานคนเดียวเหมือนแต่ก่อน เราจึงต้องทำให้คนอื่นในทีมเข้าใจโค๊ดที่เราเขียนได้โดยง่าย ไม่ว่าจะเป็น ชื่อตัวแปร ชื่อ method ชื่อ class ต่างๆ โดยเฉพาะการรวบโค๊ดไว้ใน fuction เพื่อให้อ่านง่าย
เช่น
if ((employee.flags & HOURLY_FLAG) && (employee.age > 65)){...} if (employee.isEligibleForFullBenefits()){...}
// Betterเพราะบ่อยครั้งที่คนในทีมจะไล่อ่านโค๊ดกันเองจึงต้องทำให้เป็นนิสัย
โค๊ดควรอธิบายตัวมันเองได้ โดยไม่ต้องใส่ comment ถือเป็นการเขียนโค๊ดที่ดี
NOTE: code guild line click
เรามีกฏการเขียนโค๊ดที่ Nextzy อยู่ ที่ชอบมากๆ
ถ้าคุณเสียเวลาไม่เกิน 2 นาที ในการแก้ไขหรือเพิ่มเติมอะไรซักอย่างตอนนั้น ทำไปเถอะ ! ! !
ถ้าเกิดมากกว่า 2 นาที ต้องปรึกษากับทีม ว่าวิธีแบบนี้โอเคไหม? มีปัญหาตามมาไหม? …
การมีประโยคนี้อยู่ในหัวตลอด มันสอนให้เราต้องคิด สอนให้วางแผน ก่อนที่โค๊ดว่า สมมุติอนาคต requirement ในโปรเจคถูกเปลี่ยนเราต้องแก้งานเยอะมากแค่ไหน ถ้าเขียนไว้ดีแน่นอนแก้นิดเดียว ถ้าไม่ดีหัวร้อนแน่นอน
เพราะฉะนั้น จงเสียเวลาวางแผนก่อนดีกว่าต้องมานั่งแก้งานทีหลัง

ทำแอพเสร็จเราควรชำแหละแอพเราดูเองด้วย เพื่อเช็ค performance ต่างๆ
เบื้องต้นแนะนำให้นำ apk ไปใส่ APK analyzer ใน android studio เพื่อเช็คขนาดของแอพว่าไปหนักที่ส่วนไหน และสามารถปรับลดส่วนใหนได้บ้าง click
ต่อไปก็ต้องเข้าใจการทำงานของ Garbage Collector ว่ามันทำงานอย่างไร ทำไมจึงเกิด Memory Leak ในแอพ แล้วจะเช็คอย่างไร click
NOTE: ใช้ library ช่วยตรวจสอบ memory leak click

สามารถนำไป search ได้ใน Plugin manager ใน Android studio ได้เลย ลองเอาไปเล่นกันดูเองเนาะ
NOTE: awesome plug-in click
แรกๆเราเน้น download แตก zip แล้ว copy paste ลูกเดียวเลย ซึ่งเป็นวิธีที่ไม่ควรทำเป็นอย่างยิ่งในฐานะนักพัฒนา ถึงเราจะทำงานคนเดียวก็ตาม ถ้าทำงานเป็น team ยิ่งต้องใช้อย่างมาก เพราะ
Git คือ Version Control ตัวหนึ่ง ซึ่งเป็นระบบที่มีหน้าที่ในการจัดเก็บการเปลี่ยนแปลงของไฟล์ในโปรเจ็คเรา มีการ backup code ให้เรา สามารถที่จะเรียกดูหรือย้อนกลับไปดูเวอร์ชั่นต่างๆของโปรเจ็คที่ใด เวลาใดก็ได้ หรือแม้แต่ดูว่าไฟล์นั้นๆใครเป็นคนเพิ่มหรือแก้ไข หรือว่าจะดูว่าไฟล์นั้นๆถูกเขียนโดยใครบ้างก็สามารถทำได้
ฉะนั้นมันดีมากใช้เถอะนะ
NOTE: อ่านเพิ่ม click
เนื่องจากการทำงานเราเป็นแบบ Agile การับ Feedback จากลูกค้าเลยค่อนข้างเร็ว เราจึงเลือกใช้ Redmine (คิดว่าดีที่สุด ณ ตอนนี้) เพื่อจัดการกับเรื่องพวกนี้ไม่ว่าจะเป็นการเปิด status: issue, feedback, resolved ไปให้คนในทีม และนำเลข Task ใน Redmine ใส่เป็น prefix ตอน commit เพื่อ track การทำงาน


การพูดคุยกับคนในทีมเป็นหนึ่งที่นักพัฒนามองข้ามกันมาก ซึ่งมันส่งผลหลายอย่างต่อภาพรวมเป็นอย่างมาก ทั้ง bug ที่เกิดมากขึ้น เขียนโค๊ดไม่เป็นไปทางเดียวกัน งานล่าช้า ไม่สนิทกับคนในทีมเสนอหรือพูดคุยอะไรยาก และอีกมากมาย…
เพราะส่วนหนึ่งคือ นักพัฒนาคุยไม่ค่อยเก่ง ซึ่งเป็น skill ที่ฝึกฝนกันได้
เดือนแรกที่ทำงานเราเน้น alone ไม่ค่อยคุยกับใครผลที่ตามมาคือ bug มหาศาล เนื่องจาก requirement ต่างๆค่อนข้างละเอียดจึงเก็บไม่หมด + กับยังไม่ชินกับโครงที่วางไว้ยิ่งไปกันใหญ่ เราจึงเริ่มหาวิธีแก้ไขทำให้รู้ว่าปัญหาพวกนี้จะหมดไป ถ้าเราเริ่มคุยกับคนในทีมมากขึ้นกว่าเดิม ปรึกษากันมากกว่าเดิม รีวิวโค๊ดกันบ่อยขึ้น ผลที่ได้คือมันได้ผลอย่างน่าตกใจมันดีขึ้นเรื่อยๆ
และสิ่งสำคัญอีกอย่างคือ “ที่นั่ง” ควรจัดที่นั่งให้ทีมคุยกันง่ายที่สุด โดยเฉพาะคนที่ทำส่วนเดียวกัน เพราะต้องปรึกษากันตลอด
คุยกับคนในทีมให้บ่อยๆอย่ามองข้ามจุดนี้ไปหละ

ที่จริง Nextzy เราเล่นกันหลายเกมส์ Dota, CS:GO, บลาๆ แต่อยากนำเสนอ Awesomenauts เพราะเล่นกันได้ทั้งบริษัททั้ง ผู้หญิง ผู้ชาย ฝึกเล่นง่ายแถมไม่แพง ที่สำคัญเกมไม่เครียด
เพราะจุดประสงค์ที่เราเล่นกันก็เพื่อ ความสนุก คลายเครียด หลังจากโค๊ดติดๆกันเป็นเวลานาน และทำให้คนในทีมสนิทกันมากขึ้นด้วย
ลักษณะเกมแบ่งเป็นสองฝั่ง 3 vs 3 ดังนั้นเล่นได้มากสุด 6 คนต่อเกม ใครตีฐานใหญ่แตกก่อนก็ชนะไป ลักษณะคล้าย dota แต่ง่ายกว่าเยอะมาก
NOTE: ลิงค์ไว้กดซื้อใน stream click, ไว้เปิด skill ดู click และ click

นอกจากการโค๊ดเป็นนิจแล้ว เราก็มีมุมไร้สาระพักสมองเยอะแยะ นอน เล่นเกมส์ ร้องเกะ ดูหนัง ตีปิงปอง boardgame โต๊ะลูกชิ้น กินเลี้ยง บลาๆ…

ที่ Nextzy เรามองว่าการ การแชร์ความรู้ให้คนในทีมเป็นเรื่องที่ควรทำอันดับต้นๆ
เราจึงแชร์ความรู้กันตลอด โดยจะนัดกันที่ห้องประชุม section ประมาณ 1 ชม. โดยประมาน รวมไปถึงรีวิวโค๊ดด้วยเช่นกัน

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

นอกเหนือจากนี้เป็นรายละเอียดยิบย่อยถ้าอยากรู้ต้องลองเข้ามาสัมผัสกันเอาเองว่า การทำงานที่นี่เป็นยังไง
Put your feet in the right place.
วันนี้คงพอแค่นี้เจอกัน blog หน้าครับผม
อย่าลืม share ให้มนุษย์ Medium คนอื่นด้วยหละ 😎
KNOWLEDGE


Nonthawit
CEO | Engineer | Designer
เข้าใจการทำ Selector แบบ Ripple effect
![[Tip/Trick] วิธีติดต่อกับ WebView ผ่าน JavascriptInterface มันเท่มาก](https://image.nextzy.tech/1_Aleix_TFC_7yz_Qh_Q_Sx_GV_Rqxw_a29e28219a.png)

Nonthawit
CEO | Engineer | Designer
[Tip/Trick] วิธีติดต่อกับ WebView ผ่าน JavascriptInterface มันเท่มาก


Nonthawit
CEO | Engineer | Designer
Quantum Computer จะมาปฏิวัติอุตสาหกรรมโลกครั้งต่อไป ไม่ต่างอะไรกับยุคที่เปลี่ยนจากแรงงานคนมาเป็นพลังไอน้ำในศตวรรษที่ 18
Quantum Computer คือ "เครื่องจักรไอน้ำ" แห่งศตวรรษที่ 21 — เมื่อกฎของมัวร์เริ่มถึงทางตัน นักวิทยาศาสตร์จึงหันมาสร้างคอมพิวเตอร์ที่ใช้ทรานซิสเตอร์ระดับอะตอม ประมวลผล 0 และ 1 พร้อมกันได้ในทีเดียว (Qubit) เร็วกว่าคอมทั่วไปหลายร้อยล้านเท่า บทความนี้พาย้อนดูตั้งแต่การปฏิวัติอุตสาหกรรมครั้งแรก มาจนถึง Quantum Computer ว่ามันคืออะไร ทำงานยังไง มีข้อจำกัดอะไรบ้าง และจะมา disrupt อุตสาหกรรมโลกอย่างไรในอีก 5-10 ปีข้างหน้า