จากประสบการณ์การพัฒนา Android app อันเล็กน้อย
เลยนำมาสรุปไว้นิดหน่อยรวมกับข้อมูลจาก website ต่าง ๆ
ซึ่งอาจจะเป็นประโยชน์บ้างสำหรับ Android Developer
เพื่อที่จะไม่ต้องมาผิดซ้ำรอยกันอีก
มาเริ่มกันเลยดีกว่า
Don’t Reinvent the Wheel
น่าจะเป็นเรื่องที่พูดถึงกันอย่างมาก เนื่องจากการแก้ไขปัญหาพื้นฐานต่าง ๆ นั้น ถูกสร้างเป็น library ให้ใช้งานกันเยอะมาก ๆ ดังนั้นลดการสร้างการทำงานพื้นฐานด้วยตนเองลง เน้นไปที่ business logic ของ app ให้มากขึ้น ในปัจจุบันก็มีที่รวบรวม Android Library มากมาย เช่น- Android Arsenal
- CodePath Android Guide :: Must have libraries
- Awesome Android
- Opensource Android Apps
ตั้งสติก่อนเลือก Library ใด ๆ มาใช้
เนื่องจาก library มีจำนวนมาก แม้จะทำงานในเรื่องเดียวกัน คำถามคือ จะเลือกอย่างไรดีล่ะ ? จาก link เรื่อง Must have libraries เป็นจุดเริ่มต้นที่ดี ลองไปดู library บน github ด้วยนะว่า จำนวน star เยอะไหม ? มี issue ที่ยังไม่ทำการแก้ไข หรือ ปิดเยอะไหม ? มีคนใช้งานเยอะไหม ? เพื่อทำให้มั่นใจว่า สิ่งที่นำมาใช้มันเสถียรเพียงพอต่องานของเรา ที่สำคัญอย่าลืมว่า เราเข้าใจมันจริง ๆ หรือไม่ ? อย่าใช้เพียงคนอื่นบอกว่าดี ถ้าเราไม่รู้และไม่เข้าใจว่า library ทำงานอย่างไรแล้ว การนำมาใช้งานมันมีแต่ผลเสีย !! คำแนะนำ สามารถทดลองใช้งาน library ของ Android ผ่าน DryRun ได้นะให้เวลาสำหรับการอ่าน code ให้มาก ๆ
ถ้าถามว่าใช้เวลาในการอ่าน code มากเท่าไรดีล่ะ ? ตอบง่าย ๆ เลยคือ มากกว่าเวลาในการเขียน code ถ้า developer คนใดยังไม่ทำ เริ่มได้เลยนะอ่านเพื่อเรียนรู้ อ่านเพื่อให้เข้าใจ อ่านเพื่อสะท้อนตัวเราเอง อ่านเพื่อให้เราโต อ่านเพื่อให้เราพัฒนา
ต่อมาก็เรื่อง Coding standard !!
พบว่าเป็นสิ่งที่ Android developer ไม่ค่อยให้ความสำคัญหรือสนใจมากนัก ชอบเขียนตามประสบการณ์ของตัวเอง (ตามใจฉัน) ชอบเขียนตามความรู้สึก ยิ่งมาทำงานกันเป็นทีมยิ่งเห็นความต่าง ซึ่งก่อให้เกิดปัญหาตามมามากมาย ดังนั้น Android developer ต้องใส่ใจกับเรื่องนี้ให้มาก สามารถอ่านและศึกษาเพิ่มเติมได้ที่โครงสร้างของ Android project ก็สำคัญมากเช่นกัน
การเลือกโครงสร้างของระบบให้ดี ก็เป็นสิ่งหนึ่งที่สำคัญอย่างมาก มิเช่นนั้นแล้วโครงสร้าง code จะมั่วมาก ๆ ส่งผลให้ยากต่อการดูแลรักษาทั้งแก้ไข และ ปรับปรุง รวมทั้งต้องใช้เวลาดูแลรักษาเยอะอีก !! ดังนั้นแนะนำให้ลองเลือกโครงสร้างดี ๆ ตั้งแต่ต้น แต่ระวังเรื่องของ Over-engineer นะครับ !! เพราะว่าบางครั้งสิ่งที่ดี อาจจะไม่เหมาะสมก็เป็นได้ โครงสร้างของระบบมีเยอะเลย เช่น MVC, MVP, MVVM และ VIPER เป็นต้น หรือไปอ่านและศึกษาเพิ่มเติมได้จากเรื่องของ Proguard มันจำเป็นอย่างยิ่ง
ก่อนนำ APK ขึ้น Play store นั้นต้องผ่าน pro guard เสมอนะ จะช่วยลดจำนวน code ที่ไม่จำเป็นต้องใช้งานลงไปแล้ว ยังช่วยทำให้ code ของ app อ่านไม่รู้เรื่องอีกด้วย เนื่องจาก APK ของ app อาจจะโดน reverse engineer มาดู code ก็ได้นะ แต่ถ้า app ของคุณต้องการความปลอดภัยสูง ก็แนะนำให้ใช้ DexGuard ด้วยApp ไหนยังไม่ติด Analytic กันบ้าง ?
ผมคิดว่า มีน้อย app ที่ยังไม่ติด Analytic เพื่อดูเรื่อง- พฤติกรรมการใช้งาน
- Performance ของ app
- Crash report ต่าง ๆ
ลดเวลาการ Build app ของ Gradle ลงกันบ้าง
ปัญหาหลักของ Android app ขนาดกลางและใหญ่ คือ Build Time ที่นานมาก ๆ !! แต่ก็ยังอดทนนั่งรอกัน ดังนั้นสิ่งที่นักพัฒนาต้องลงมือทำกันก็คือ ลดเวลาการ build ของ Gradle ลงซะ ลดเวลาให้ได้มากที่สุดเท่าที่จะเป็นไปได้ เช่น- ลดจำนวน Library และ code ที่ไม่ได้ใช้ออกไป
- พยายามให้จำนวน method ไม่เกิน 65K (ทำยากมาก ๆ)
อีกเรื่องที่ผมจะจำไม่ลืมเลยคือ ให้พัฒนาและทดสอบ Android app บน Device คุณต่ำ ๆ กัน
ผมเชื่อว่าทุกคนชอบใช้งาน Android phone ที่มีคุณภาพที่ดี มีความสามารถสูง นั่นคือมุมมองจากผู้ใช้งาน แต่สำสำหรับนักพัฒนามันไม่ใช่เลย ไม่เชื่อก็ลองไปดูสถิติต่าง ๆ ดูนะ หรือดูจากสถิติการใช้งาน App ที่เราพัฒนานั่นแหละ ดังนั้นแนะนำให้ทดสอบกับ Android phone ที่มีคุณภาพต่ำ ๆ ด้วย ถ้าเป็นตัวหลักเลยก็ดีไม่น้อย ลองคิดดูสิว่า ถ้ามือถือกาก ๆ ยังทำงานได้อย่างรวดเร็ว แล้วมือถือคุณภาพสูงจะทำงานเร็วเพียงใด แนะนำให้ทดสอบหลาย ๆ device นะครับ แต่มักพบว่า เรามีมือถือทดสอบกันน้อยมาก ๆ ทำไมมันถึงขัดแย้งกับความจริงมากนักนะ หรือว่าเรากำลังหลงทาง หรือ เดินผิดทางกันทดสอบ ทดสอบ ทดสอบ และ ทดสอบ
เป็นสิ่งที่ขาดไปไม่ได้เลยสำหรับการพัฒนาระบบ เพื่อทำให้เรามั่นใจว่า- code ที่เขียนทำงานได้อย่างถูกต้อง
- code ที่เขียนไม่ส่งผลกระทบต่อส่วนอื่น ๆ
- code ที่เขียนทำงานบนมือถือต่าง ๆ ได้
- ทำงานบนมือถือต่าง ๆ ได้หรือไม่
- ทำงานบนหน้าจอต่าง ๆ ได้หรือไม่
สุดท้ายขอให้หยุดการ Copy and Paste code
ไม่ใช่บอกว่ามันไม่ดี แต่ขอให้เข้าใจก่อนว่า code ชุดนั้นมันทำอะไรได้ หรือ ไม่ได้บ้างก่อนนำไปใช้งานจริง และให้เวลากับการ contribute กลับไปยัง library ต่าง ๆ ที่คุณใช้ หรือ community ของ Android บ้างครับ ทั้งหมดนี้น่าจะพอมีประโยชน์บ้างไม่มากก็น้อยนะครับ ปล. ยังมีเรื่องอื่น ๆ ที่ต้องศึกษาอีกนะ เช่น- Refactoring
- Design pattern
- Kotlin อีกทางเลือกของการพัฒนา Android app ที่พลาดไม่ได้
- การใช้งาน Git และ Github/Bitbucket
- เรื่องของ User Interface และ User Experience
- จัดการกับ Android Fragmentation
- ว่าด้วยเรื่องของ Security