25 สิ่งที่ต้องรู้ สำหรับ Android developer
สวัสดีค่ะทุกท่าน เนื่องจากเราได้เปลี่ยนสายงานมาเป็น Android developer อย่างจริงจังแล้วที่ฟังใจ เราก็ได้เตรียมตัวศึกษาเพิ่มเติม ทั้งในและนอกเวลางาน และได้อ่านของพี่เอกในการเตรียมตัว และคิดว่าน่าจะมีเพิ่มเติมอีก จึงได้ดัดแปลงบทความนี้เป็นในแบบของเราเอง ดังนี้
0. เรียนคอร์สพี่เนย หรือคอร์สออนไลน์อื่นๆ
สำหรับผู้ที่อยากศึกษาขั้นเริ่มต้น คอร์สออนไลน์นี้เหมาะมากๆในการปูพื้นฐานจาก zero to hero เลยทีเดียว ราคาประมาณ 5,000 บาท สามารถซื้อได้ที่ Udemy หรือที่นี่
แล้วก็ resource ต่างๆ https://inthecheesefactory.com/a
แนะนำให้อ่าน The Android Cheese Sheet นะ ตัวโปรเจกที่ทำ คือ อันนี้
สำหรับบางคน หนูไม่มีบัตรเครดิต ผมไม่มีเงินครับ ไม่ใช่ข้ออ้างในการไม่ศึกษาหาความรู้นะ โอเคไม่เสียเงินซื้อคอร์สไม่เป็นไร คอร์สฟรีมีมากมาย อีกแหล่งนึงที่ฟรี แถมยัง Official คือ Udacity ที่มีหลากหลายคอร์สเลยนะ ทาง Google มาสอนเองเลยนะ ที่เสียเงินก็พวก nanodegree
แนะนำคอร์สกันดีกว่า เราเองก็เรียนไม่จบหมดนะ แหะๆ
- Material Design for Android Developers
- Android Performance
- Firebase in a Weekend: Android
- UX Design for Mobile Developers
มันมีความ advance เลยนะนี่แต่ละอันที่แนะนำ แต่ของ Android มีหลายอันมากๆ ชอบอันไหน กดเรียนฟรีได้เลยยยย เย้
ส่วนใน Udemy คอร์สไหนฟรีจิ้มไว้ก่อน ค่อยว่ากัน 😜
อันนี้เริ่มเข้าสู่โหมดจริงจังหล่ะ ว่า 25 ข้อที่ว่า คืออะไร
1. Lifecycle ทั้งตัว activity และ fragment
ปฎิเสธไม่ได้เลยว่าแอปในระดับ production ของบริษัท startup นั้น มีความซับซ้อน และใช้ fragment ด้วย ดังนั้นการเรียนรู้และเข้าใจ lifecycle จึงเป็นเรื่องสำคัญมากๆ ซึ่งมีรูปที่เข้าใจได้ง่าย แบบนี้
เดี๋ยวนี้มี Architecture Components มาอีก สนุกสนานกันไป
บล็อกเพิ่มเติม
2. OOP ต้องแน่น
เพราะปัจจุบันใช้ java เขียน ซึ่งเป็นภาษาแบบ OOP มีการ override เยอะมากๆ แค่ onCreate ก็ตัวนึงแล้วเนอะ ไหนจะ public protected private ไหนจะ final static abstract บลาๆ เอาเป็นว่าใครรู้สึกว่าไม่เก่ง เขียนไปเขียนมาก็เก่งเอง แถมเข้าใจง่ายกว่าอาจารย์สอนอีก เชื่อเรา 555
3. Design Pattern MVC MVP MVVM style ที่ต้องรู้
หลักๆตามท้องตลาด (มันไม่ควรเรียกงี้ป่ะ) จะมี MVC (Model-View-Controller), MVP (Model-View-Presenter) และ MVVM (Model-View-View Model) แต่ละตัวก็ต่างกันไป
ตัวที่เหมือนกัน Model ก็พวก object class ต่างๆ ส่วน View ก็พวก UI
แล้วที่ต่างกันหล่ะ ปกติมักจะเขียน MVC กัน ซึ่ง Controller ก็คือ Activity หรือ Fragment นั่นเอง ซึ่งเหมือนยัดทุกอย่างรวมกัน ทำให้เราไม่อยากทำ Unit Test เพราะมันเยอะ ถ้า MVP ส่วน Presenter จะเป็นตัวกลางคอยประสานงาน ทำให้ test ง่ายขึ้น ส่วน MVVM ง่ายๆก็คือ Architecture Components นั่นแหละ
บล็อกเพิ่มเติม : MVC MVP MVVM คืออะไร และต่างกันอย่างไร ในนี้อธิบายได้ดีทีเดียวเชียว
4. Android studio ต้องใช้ให้คล่อง
เดี๋ยวนี้ไม่ใช้ Eclipse กันแล้วเนาะ เพราะทาง android เลิก support ไปนานแล้ว
ดังนั้นนอกจากจะใช้ android studio ให้เป็นแล้ว ต้องให้คล่องด้วยนะ
ทาง Google Developer ได้สรุป key ลัดที่ใช้ ทั้ง windows และ mac เราสามารถปริ๊นแปะไว้ดูได้ (ความจริงคือไม่มีเวลาสรุป เลยเอามาแปะ นอกจากง่ายแล้ว ยังครบด้วย)
5. Fragment ใช้เถอะ ชีวิตจะได้ง่ายขึ้น
เนื่องจากการใช้ activity มันรองรับ layout แบบ 1:1 ดังนั้น การใช้ fragment เป็นการแบ่งส่วนต่างๆในหน้านั้นๆ โดยใช้ activity เป็นคนแปะ เช่น การแสดงผล layout หลายๆแบบในหน้าเดียว การมีปุ่มสักอย่างลอยอยู่มุมขวาล่างตลอดเวลาที่เลื่อนจอ เป็นต้น ทำให้จัดต่างส่วนต่างๆได้อย่างมีโฟกัส ไม่มึนงงสับสน
ตัวอย่างการใช้งานแบบคร่าวๆ
6. หัดใช้ RecyclerView
ยุคนี้ไม่ใช้ ListView กันแล้ว เขาใช้ RecyclerView กัน ซึ่งจะสอดคล้องกับข้อที่แล้ว
7. การจัด layout และ material design
เนื่องจากหน้าจอแอปหน้าต่างๆที่เราใช้ มีการทำ UI และ UX ผ่านการทดสอบมาว่า compatable กับ user ดังนั้นการจัด layout เป็นเรื่องจำเป็น ซึ่งไม่ได้ยากอะไร ส่วนใหญ่ใช้ LinearLayout RelativeLayout ไม่เกินนี้แน่นอน ส่วนพวก padding และ margin ก็กะๆเอาว่าที่ designer ทำมา ในแอปจริงมันหน้าตาตรงกันไหม
สิ่งสำคัญนอกจากเรื่องการคำนวณขนาดของ Drawable ที่ใช้ในแอปกับหน้าจอต่างๆแล้ว
ยังมีเรื่องของการนำ UI ที่ designer ออกแบบไว้มาใช้ด้วย โดย UI designer จะใช้ Sketch ในการทำ layout และแชร์ผ่าน zappin ให้เรานำ resource ไปใช้ในแอปได้ แถมมีบอกเรื่องขนาดตัวอักษร font ที่ใช้ padding margin สี โอ้ยยย เยอะแยะ
เราหยิบรายละเอียดของ workshop นึงสำหรับสาย Designer มาให้ Developer เข้าใจอย่างคร่าวๆ ว่ากรอบการทำงานเป็นประมาณไหน
8. dimension ต่างๆ และขนาดหน้าจอพิศวง
คือเราต้องทำแอปให้รองรับกับ tablet ได้ด้วย อาจจะต้องมีการทำ layout ขนาดเพิ่มเติมขึ้นมาโดยเฉพาะ ซึ่งอาจจะทดสอบแต่ละขนาด แล้วแก้กันไป
9. ใช้ library ตามท้องตลาดที่มีอยู่อย่างเหมาะสม แต่ไม่ควรผูกติดจนเกินไป
เช่น ใช้ retrofit เพื่อรับ json เข้ามา ใช้ gilde เพื่อโหลดรูปภาพมา
แต่ ButterKnite นี่ API version 26 ไม่รองรับแล้วนะ เปลี่ยนทีล้องห้ายหนักมาก
และเราต้องเข้าใจการทำงานพื้นฐานระหว่างมี library กับไม่มี library ด้วยนะ
10. การ get ข้อมูลจาก Json มาแสดง
แอปส่วนใหญ่เลยนั้นไซร์ จะมีการเชี่อมต่อกับ API ดังนั้น เราจะต้องเข้าใจการทำงานของ API นั้นๆว่าทำงานอะไร ได้อะไรกลับมา ใช้อะไรเรียก ส่วนใหญ่จะใช้ retrofit กันเนอะ
11. ใช้ git ในการทำงานเป็นทีม
การทำงานต้องทำเป็นทีม และแต่ละคนก็รับบทบาทหน้าที่ในแอปตัวเดียวกันต่างกันออกไป ดังนั้นการใช้ version control เป็นเรื่องสำคัญมากๆ และตัวที่นิยมใช้คือ git นั่นเอง มีทั้งใน command line และ GUI ที่เราใช้หลักๆก็ใน Android Studio และก็ SourceTree
12. อย่าใช้ magic number
เพราะเวลาแก้ ก็แก้ค่าที่ตัวแปรนั้นๆเลย โดยเฉพาะการใช้หลายที่ด้วย และจะได้ไม่งงว่าค่านี้คืออะไรวะ
การสร้างตัวแปรมาเก็บค่าแล้วใช้หลายที่ ข้อดีคือแก้ค่าที่ตัวแปรได้โดยตรง โค้ดไม่รก ไม่เฉพาะในโค้ดนะ ใน dimen ของ layout ก็ด้วย
13. เขียนโค้ดให้คนอื่นรู้เรื่อง และสะอาดตาที่สุด
ก่อนอื่นทำความเข้าใจ workflow ของสิ่งที่เราจะทำก่อน และเข้าใจ logic ในสิ่งที่ตัวเองเขียน มีสติทุกครั้งในการเขียนโค้ด ใช้หลักการ clean code คือ เขียนทุกอย่างให้สั้นและเข้าใจง่ายที่สุด แม้ไม่มี comment และ Boy Scout ถ้าเราเห็นอะไรรกหูรกตาก็เก็บกวาดให้เรียบร้อย
และอีกอย่าง ถ้าสามารถรวบได้ก็รวบ ให้คนอื่นๆดึงไปใช้งานได้ง่าย
14. ฝึกทำ test ต่างๆ โดยเฉพาะ Unit Test
เพราะ การทำ Unit Test เป็นหน้าที่ของ Android Developer เนอะ
15. Firebase ต้องรู้
Developer ไม่ว่าสายไหนๆต้องรู้จัก Firebase แล้วนะ และนางก็ทำได้หลายสิ่ง ทำให้เราลดความยุ่งยากซับซ้อนในการทำ back-end ทำให้เราสามารถเล่นโน้นนี่ได้มากขึ้น เช่น ทำ API เอง, เก็บข้อมูลจาก user ลง cloud, ทำ chatbot
เดี๋ยวนี้นางกินรวบหลาย service เช่น Analytics, Google Cloud Service, Fabric อีก มากมายหลายสิ่งมาก
16. รู้จักลดขนาดแอปให้มีขนาดเหลือน้อยที่สุดเท่าที่ทำได้
ก็เกิดจากข้อ clean code ด้วยส่วนนึง การใช้ resource ก็ส่วนนึง พยายามใช้ภาพที่มีขนาดเล็กแต่ยังชัดเจนอยู่ ใช้ drawable แทนได้ก็จะดี ถ้าเป็นตัวหนังสือพร้อมรูปก็ไม่ต้องแยกสองชิ้น ใช้ชิ้นเดียวจะโหลดแอปได้เร็วกว่า รูปก็ใช้จาก material design ซึ่งก็ใช้วนไป
บล็อกเพิ่มเติม
17. Kotlin
คือไม่จำเป็นต้องเขียนเป็นเว้ยย คือเมิงต้องรู้นะว่าคืออะไร (อันนี้หยาบนิดนึงเน้อ)
ในเมื่อนางเป็นภาษา Official ที่สองของ Android Developer ก็ควรจะรู้ไว้ติดตัว บางทีเขาก็ใช้กันเลย และก็ migartion ไม่ยากด้วย แถมใช้ร่วมกับโค้ด JAVA เดิมได้อีก ดีงามอยู่นะ
18. ภาษาอังกฤษเป็นเรื่องสำคัญ
เพราะวิทยาการและเทคโนโลยีสมัยใหม่ มาจากต่างประเทศทั้งนั้น เช่น Google I/O
เรารู้ก่อน ย่อมได้เปรียบ ถ้าสนใจเรื่องไหน ก็มีแต่ภาษาอังกฤษทั้งนั้น จะรอ Dev ใจดีแปลไทยก็ แล้วแต่ภาระงานอ่ะเนอะ
เอาเป็นว่าเราสามารถใช้ภาษาอังกฤษในการอ่านสิ่งต่างๆ และสามารถพูดคุยได้ ก็จะเป็นเรื่องดีเลยหล่ะ อย่าไปกลัวผิด ส่วนใหญ่เขาใจดี แบบคุยกับเราเถอะ เราอยากรู้ว่าพวกยูคุยไรกัน
19. Google It!
สกิลที่สำคัญสำหรับ Developer ทุกสายเลยนะ
ขอเล่าอะไรนิดนึง เราเคยไปลงแข่งที่โรงเรียนสมัยมัธยม ในการทำสืบค้นข้อมูลตามหัวข้อที่กำหนด แล้วทำ presentation บน powerpoint เคล็ดลับ ไม่สิ กฏกติกาตามคะแนนเหรียญทอง เงิน ทองแดง ส่วนนึง ก็คือ keyword ที่ใช้ค้นหานั่นเอง ถ้าใช้ keyword ดี จะทำให้เวลาเราสืบค้นน้อยลง ได้ข้อมูลที่ตรงจุดมากขึ้น และวิชาห้องสมุดสมัย ม.1 ก็สอนวิธีการค้นหาข้อมูลทางอินเตอร์เน็ต
ทั้งหมดทั้งมวลเลยเป็นสันดาน เอ้ยยย นิสัยของเรา เวลาเราเขียนโค้ดติดอะไรก็จะไป search Google ก่อน ถ้าไม่ได้จริงๆก็ค่อยถามพี่ๆเอาเนอะ ทั้งในทีม และใน Thailanf Android Developer ด้วย ซึ่งทุกครั้งที่เราหา จะเจอ stakeoverflow ตลอดเลย ในส่วนนี้ทำให้เราเก่งขึ้นหลายๆด้าน เช่น ทั้งภาษาอังกฤษ การเขียนโค้ดเนอะ
20. พัฒนาตัวเองอย่างสมํ่าเสมอ
คนเราต้องไม่หยุดอยู่กับที่ จริงไหม
ถามว่า Android Developer ต้องรู้อะไรเพิ่มเติม อ่านจากข้อ 0 ได้นะ หรือไม่ก็เพจหรือบล็อกต่างๆ หาไม่ยากหรอกเนอะ
21. ตามข่าวสาร android develop เรื่องเทคโนโลยี และเรื่องต่างๆ ตามสนใจ
นอกจากจะตามเรื่อง Google IO แล้ว อาจจะตามเรื่อง Mega Trend เช่น Big Data ด้วย เพราะเราต้องตามโลกให้ทัน จะได้คุยกับคนอื่นรู้เรื่อง
และนอกจาก skill เรื่องงานแล้ว ควรรู้เรื่องอื่นๆด้วยตามที่เราสนใจ เช่น อาจจะสนใจเรื่องหุ้น เรื่องดนตรี เรื่องบอล บลาๆ
22. ไปงาน Event ที่เกี่ยวข้องบ่อยๆ
เช่นงาน Hackathon ถ้าหนักไปอาจจะงานประมาณ Meetup ต่างๆ หรือเข้าไปเรียน Workshop คนจะเห็นเราตัวเป็นๆเนอะ ทำให้เรารู้จักคนอื่นตัวเป็นๆมากขึ้น และคนรู้จักเรามากขึ้นด้วย
23. ฝึก present ให้เป็น
อันนี้รวมๆ เช่น การแนะนำตัวเอง การนำเสนองานให้คนในทีม ให้ลูกค้า ให้คนอื่นๆเข้าใจ
อย่างฟังใจมี town hall session อันนี้หัวข้อแบบ general มากๆกับ give & take ในทีม
สรุปคือ พูดให้คนอื่นเข้าใจในสิ่งที่เราจะพูดก็พอแล้ว
ในทีม product ของฟังใจมีกิจกรรม Give & Take คือจะเวียนกันพูดเรื่องอะไรก็ได้ที่มีประโยชน์กับทีม ไม่ว่าจะด้าน technique หรือด้านอื่นๆ แลกเปลี่ยนความรู้กัน ของเราเอาเรื่อง Kotlin จากการ Workshop มาแบ่งปัน เพราะคนกดบัตรสามคน เราได้ไปคนเดียว (แอบเล่า คนที่ไปก็คละๆบริษัทกัน แต่วงในนี่ได้สองสามคน คือต้องกดท่าไหนวะ...)
ถ้างานพรีเซนต์ใหญ่ๆต้องมั่นใจในสิ่งที่เรานำเสนอ และอย่าตื่นเต้นเนอะ (พูดแล้วทำไม่ได้ตลอด555) อันนี้ที่เราไป workshop ฟรีมาจ้า จริงๆไปเรียนที่อื่นๆก็ได้แหละ ลองหาดูๆ
24. รู้จักการ give & take และ sharing
เขียนบล็อกดีที่สุด ห๊ะ บางคนเขาก็ไม่ถนัดป่ะว่ะ
เอาเป็นว่าอธิบาย แบ่งปันความรู้ ตอบข้อสงสัยได้ นอกจากเราจะได้เรียนรู้เพิ่ม ยังได้มิตรภาพดีๆด้วยนะเออ ไม่จำเป็นต้องเขียนบล็อก อัดคลิป tutorial บน youtube (ซึ่งใช้สกิลเยอะกว่าเขียนบล็อกอีก เราลองมาแล้ว) แค่แคปรูปโพสก็ได้แล้วมั้ง ฮ่าๆ
ตัวอย่าง เช่น วันนี้เขียนแชทบอทเสร็จไปอีกขั้นแล้ว เดี๋ยวคนสนใจก็มาถาม มาคุยเองแหละ ว่าใช้อะไรทำ ยากไหม ทำยังไง บลาๆ ถือว่าเป็นการ sharing แบบเนียนๆ (เหรอ)
จากการเขียนบล็อกก็มีคนมาแอดเฟรนด์ใน Facebook เนื่องจากเราเขียนเสร็จแล้วไปแปะตามกรุ๊ปที่เกี่ยวข้อง หรือไม่ก็จาก medium ซึ่งบางคนเรารับ บางคนไม่รับ ซึ่งเป็นส่วนใหญ่นะ แหะๆ ขออภัยด้วยแล้วกันเน้อออ (ในกรณีที่รับแอดคือรู้จักว่าคนนี้คือใคร หรือไม่ก็รุ่นน้องที่ภาค ที่คณะอ่ะ)
25. Business mindset
ไม่จำเป็นต้องมีหัวการค้าขนาดนั้น หมายถึงเข้าใจธุรกิจ ทั้งที่เราทำงาน และอื่นๆ ทำให้เราเข้าใจลูกค้าและ user มากขึ้น สาย dev เพียวๆอาจจะงงๆว่าแล้วจะไปเรียนรู้ที่ไหน ก็แล้วแต่โอกาสเนอะ ในบล็อกนี้ก็มีให้อ่านอยู่ จากการที่เราไปประกวดงานเถ้าแก่น้อยเทคโนโลยี และไป workshop หรือไปนิทรรศการ หรือไปซื้อหนังสืออ่านก็ได้นี่นาาา เอ้อออ ทำไมลืม
แนะนำให้ลองอ่าน 4P, 4M, Business Model Canvas, digital marketing รวมไปถึงพวกทำการ analytics ทั้งหลาย เพราะข้อมูลถือเป็น asset ของกิจการ จะเอาไปทำอะไรก็ได้ เช่น โปรโมชั่น, content ให้เข้าถึงกลุ่มเป้าหมายมากขึ้น ตัวอย่าง เช่น
หรือแอบไปดู tag นี้ของเราก็ได้เนอะ :D
สรุป เราเองก็ปรับตัวได้ประมาณนึงกับการเป็น Android Developer เต็มตัว ที่ทำงานปัจจุบัน
ทำให้เรามีไฟที่จะทำอะไรมากขึ้น
คิดว่าบล็อกนี้น่าจะเป็นประโยชน์แก่คนอ่านผ่านๆมานะคะ :)
สุดท้าย ฝากร้านกันสักนิด ฝากเพจด้วยนะจ๊ะ