07 กรกฎาคม 2558

[Android Dev Tips] 17 พื้นฐานที่ควรรู้สำหรับสายงาน Android Developer



        สำหรับสายงานฝั่ง Mobile Developer ในตอนนี้ ก็ยังคงเป็นที่ต้องการของตลาดอยู่ และน่าจะมีผู้ที่หลงเข้ามาอ่านหลายๆคนที่ตั้งเป้าหมายอยากจะทำงานเป็น Android Developer ดังนั้นเจ้าของบล็อกจึงขอฝากบทความนี้ให้เป็นบทความแนะนำสำหรับทุกๆท่านที่อยากจะผันตัวมาทำงานสายนี้นะครับ

Android Developer ยังคงเป็นที่ต้องการของตลาด

        เป็นเรื่องจริงของตลาดบ้านเราในตอนนี้เลยก็ว่าได้ ถึงแม้ว่าทุกวันนี้จะมี Android Dev เพิ่มขึ้นเรื่อยๆก็ตาม แต่ความเป็นจริงในตอนนี้ก็คือ

        Android Developer นั้นมีเยอะ แต่ Android Developer ที่ทำงานได้จริงกลับมีน้อย

        อันนี้ว่ากันจากประสบการณ์จริงเลย Android Dev ส่วนใหญ่เกิดจากการอยากลอง และหลายๆคนลองด้วยการลองทำงานจริงๆ ทั้งๆที่พื้นฐานยังไม่เพียงพอ จึงทำให้มีเพียงน้อยคนเท่านั้นที่ก้าวเข้าสู่สาย Android Dev และสามารถทำงานได้จริงๆ

       ดังนั้นปัญหาหลักๆเลยก็คือความสามารถไม่เพียงพอแม้แต่การเป็น Android Dev ระดับ Junior (ยิ่งเป็นระดับ Senior ยิ่งไม่ต้องพูดถึงว่าหาตัวกันยากแค่ไหน)

แล้ว Junior Android Developer ควรรู้อะไรบ้างล่ะ?

        นี่คืออีกหนึ่งคำถามที่ผู้ที่หลงเข้ามาอ่านหลายๆคนได้ถามเจ้าของบล็อก ดังนั้นเจ้าของบล็อกจึงถือโอกาสเขียนบทความนี้เลย ผู้ที่หลงเข้ามาอ่านคนไหนที่สนใจจะเดินเส้นทางนี้ก็จะได้ศึกษาเตรียมความพร้อมเพื่อเข้าสู่การเป็น Android Dev

        และนี่คือพื้นฐานที่เหล่า Junior Android Developer ควรจะรู้และเข้าใจครับ

1. Activity Life Cycle 

        เป็นสิ่งแรกๆและสิ่งสำคัญอย่างแรกๆของ Android Development เลยก็ว่าได้ เพราะ Activity คือหัวใจสำคัญหลักที่ทำให้แอปพลิเคชันทำงานได้ ดังนั้นถ้าไม่เข้าใจ Activity Life Cycle ก็เดาได้เลยว่าแอปพลิเคชันจะมีการทำงานไม่เป็นระบบระเบียบเป็นแน่แท้ ดังนั้นควรรู้ว่า Activity Life Cycle ประกอบไปด้วยอะไรบ้าง อันไหนจะทำงานเมื่อไร

2. พื้นฐาน Java, แนวคิด OOP และการเขียนโปรแกรมแบบ MVC

        เป็นเรื่องพื้นฐานในการเขียนแอปพลิเคชันเลยก็ว่าได้ ซึ่งพื้นฐานที่ดีก็จะทำให้เขียนโปรแกรมออกมาแล้วทำงานได้มีประสิทธิภาพ จัดการได้ง่าย มีการทำงานเป็นระบบ โดยเฉพาะอย่างยิ่ง OOP และ MVC ที่ใช้กันบ่อยมากใน Android Development

3. รู้จักการใช้ Layout หรือ Widget พื้นฐานทั้งหลาย

        Button, Text View, Edit Text, Image View, List View, Toggle Button, Linear Layout, Relative Layout และ Frame Layout ที่เป็น Component พื้นฐานของหน้าจอแอปพลิเคชัน ควรหัดใช้งานให้เป็นและทำความเข้าใจในแต่ละอย่างว่าทำงานยังไง เหมาะกับการใช้งานแบบไหน และมีข้อดีข้อเสียอย่างไร และถ้าเป็นไปได้ควร Custom View และ Layout เหล่านี้ให้เป็นด้วย

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

4. ฝึกฝนการจัดวาง Layout 

        เป็นเรื่องพื้นฐานที่ควรชำนาญ แต่ก็เป็นเรื่องยากมากๆสำหรับผู้ที่หลงเข้ามาอ่านหลายๆคนเช่นกัน อาจจะเพราะว่านักพัฒนาส่วนใหญ่นั้นไม่ค่อยถูกกับเรื่องงานออกแบบซักเท่าไร

        แต่เรื่องจริงก็คือนักพัฒนาอาจจะไม่ได้เป็นคนออกแบบหน้าตาแอปพลิเคชันนั้นๆก็จริง อาจจะมีดีไซน์เนอร์ออกแบบให้ แต่คนที่ต้องมานั่งจัดวาง Layout ให้ออกมาเป็นไปตามที่ต้องการก็คือตัวเราเองนั่นแหละ ดังนั้นจึงอย่ามองข้ามเรื่องนี้เด็ดขาด หัดฝึกซะ!

5. คิดอย่างมี Logic และเข้าใจใน Workflow 

        อันนี้เสริมให้ครับ เพราะเป็นสิ่งที่โปรแกรมเมอร์ควรจะมี นั่นก็คือมีการคิดอย่างเป็นลำดับขั้นตอน มีเหตุมีผล เพราะนี่คือพื้นฐานในการเขียนโปรแกรมซักตัว ถ้าคิดอย่างไม่เป็นระบบ งานที่ออกมาก็จะไม่เป็นระบบ

        มันคงจะแปลกดีถ้าสามารถเขียนงานออกมาตามที่ต้องการได้ แต่กลับไม่รู้ว่าแอปพลิเคชันนั้นทำอะไรไปบ้าง ดังนั้น Workflow เป็นอีกสิ่งหนึ่งที่สำคัญ ผู้ที่หลงเข้ามาอ่านควรรู้และเข้าใจการทำงานโดยรวมของแอปพลิเคชันว่ามีลำดับขั้นตอนการทำงานอย่างไร เมื่อมี Workflow ที่ดีก็จะช่วยให้การเขียนโค๊ดทำได้ดีขึ้นและง่ายขึ้น

6. พยายามอัพเดทข้อมูลและข่าวสารใหม่ๆเกี่ยวกับ Android อยู่เสมอ

        มันคงจะตลกดี แต่ก็ฮาไม่ออก ถ้าบอกว่าตอนนี้ลองหัดเขียนแอนดรอยด์มาปีกว่าแล้ว แต่กลับไม่รู้ว่าแอนดรอยด์เวอร์ชันล่าสุดในตอนนี้คือเวอร์ชันอะไร

        Android Development คือการทำงานกับเทคโนโลยี และเทคโนโลยีที่ว่านี้มันก็อัพเดทและเปลี่ยนแปลงบ่อยมาก มาก และมากที่สุด (เรียกได้ว่ามีให้อัพเดทกันแทบตลอดเวลา) จึงเป็นหน้าที่หลักของนักพัฒนาอยู่แล้วที่ต้องคอยติดตามอัพเดทข้อมูลและศึกษาสิ่งใหม่ๆที่เพิ่มเข้ามาเรื่อยๆ

        และเวลาศึกษาข้อมูลเหล่านี้ช่วยดูด้วยครับ ว่าข้อมูลมันเก่าหรือยัง เพราะโลกมันเปลี่ยนไว บทความสองปีที่แล้วอาจจะใช้ไม่ได้ในวันนี้ก็เป็นได้ ดังนั้นความสดใหม่ของเนื้อหาจึงเป็นสิ่งสำคัญในการศึกษาด้วยตัวเอง

         Best Practice ก็เป็นอีกเรื่องที่สำคัญ ผู้ที่หลงเข้ามาอ่านคงไม่อยากไปนั่งศึกษาข้อมูลจากบางที่ แล้วมารู้ตัวทีหลังว่าไอ้ที่ได้ศึกษาไปนั่นมันเป็นวิธีที่ผิด ดังนั้นถ้าเป็นไปได้ควรดูความถูกต้องของข้อมูลที่ศึกษาด้วย เทียบกับหลายๆที่แล้ววิเคราะห์ว่าอันไหนถูกต้อง อันไหนไม่ดียังไง อันไหนเหมาะสม นั่นล่ะครับการศึกษาด้วยตัวเองที่ถูกต้อง

7. รู้จักการใช้งาน Resource 

        เจ้าของบล็อกหมายถึง Drawable Resource, Color Resource, String Resource, Value Resource หรือ Dimension Resource นั่นเอง ซึ่งพวกนี้จะช่วยให้สามารถจัดการกับแอปพลิเคชันได้ง่ายขึ้น เลิกได้แล้วกับวิธี Hard Code แต่จงหันมาใช้ Resource เหล่านี้ให้เกิดประโยชน์ซะ ควรรู้ว่ามีอะไรบ้าง แต่ละอันใช้งานยังไง

        เพราะเวลาทำงานจริงๆ พวก Resource เหล่านี้จะช่วยให้สะดวกมากขึ้น โดยเฉพาะในเรื่องของ Layout (ถ้าใช้งานอย่างถูกต้อง)

8. Version Control

        ยุคสมัยนี้ควรใช้ Version Control ให้เป็นได้แล้วนะครับ เพราะในการทำงานหลายๆที่เดี๋ยวจะมีการใช้ Version Control เข้ามาจัดการกับงานแต่ละโปรเจคอยู่แล้ว เพื่อให้โปรเจคดำเนินไปได้ดี ไม่วุ่นวาย โดยเฉพาะการทำงานในระดับทีม

        ดังนั้นการใช้งาน Version Control เป็นก็จะช่วยให้ได้เปรียบมากขึ้นเลยล่ะ (ใน Requirement สมัครงานหลายๆก็เขียนไว้) ซึ่งบางที่ก็ใช้ SVN บางที่ก็ใช้ Git ถ้าเป็นไปได้ก็ควรรู้จักการใช้งาน Git เป็นอย่างน้อยนะ เพราะเป็นที่นิยมกัน

9.  อย่ามัวแต่ใช้ Activity หัดใช้ Fragment กันได้แล้ว

        ทุกวันนี้งานส่วนใหญ่ใช้ Fragment กันซะส่วนใหญ่แล้ว เพราะต้องการลูกเล่นและรูปแบบการทำงานบางอย่างที่ Activity ไม่สามารถตอบโจทย์ได้เพียงลำพัง และโปรเจคบางตัวจะระดมไปด้วย Fragment หลายสิบตัวด้วยซ้ำ ดังนั้นถ้าไม่รู้วิธีจัดการกับ Fragment อย่างถูกต้อง ก็เตรียมโปรเจคบึ้มได้เลยจ้า

        ดังนั้นควรใช้งาน Fragment เป็น รู้ว่า Fragment คืออะไร เอาไปใช้งานยังไง รวมไปถึงการใช้งาน View Pager ด้วย

10. เลิกใช้ AsyncTask โหลดภาพได้แล้ว Library ดีๆมีให้ใช้เยอะแยะ

        การใช้งาน Thread หรือ AsyncTask เป็นสิ่งที่ควรศึกษาให้เข้าใจครับ แต่ในการใช้งานจริงๆต้องดูด้วยว่าประสิทธิภาพในการทำงานมันดีจริงๆหรือป่าว ลองหัดใช้ Library ต่างๆกันได้แล้ว

        ทุกวันนี้เจ้าของบล็อกยังเจอผู้ที่หลงเข้ามาอ่านบางคนโหลดภาพจากอินเตอร์เน็ตโดยใช้ AsycnTask กันอยู่แล้ว เปลี่ยนมาใช้ Library อย่าง Picasso หรือ Glide กันได้แล้ว เพราะมันช่วยจัดการกับการทำงานต่างๆให้หมดแล้ว แถมมีประสิทธิภาพกว่าเขียนเองด้วยซ้ำ

11.  HTTP GET/POST หรือ REST และอื่นๆ ก็มี Library ให้เลือกเยอะแยะ

        OkHttp, ION, Retrofit, Volley หรือ Asynchronous HTTP Client พวกนี้มีให้ใช้งานเช่นกัน อย่ามัวแต่เขียนเอง เพราะถ้ามัวแต่นั่งจัดการกับการเชื่อมต่อ Server ก็จะมีแต่เสียเวลามากเกินไป ซึ่ง Library หลายๆตัวก็จัดการให้เรียบร้อยแล้ว โดยที่ไม่จำเป็นต้องไปจัดการเองให้วุ่นวาย

         แต่สิ่งที่สำคัญคือควรศึกษาหลายๆตัว แล้วเปรียบเทียบด้วยตัวเองว่าตัวไหนดีกว่ายังไง และตัวไหนเหมาะกับงานแบบไหน

12. จัดการกับข้อมูล JSON ให้เป็น

         Requirement ในการเข้าทำงานหลายๆที่คือต้องเชื่อมต่อข้อมูลกับ Server ซึ่งต้องมีการรับส่งข้อมูลระหว่างกัน และส่วนใหญ่ก็จะนิยมใช้เป็น JSON (บางที่ก็เป็น XML) ดังนั้นควรศึกษาวิธีการจัดการกับข้อมูล JSON ซะ ว่ารับข้อมูลมายังไง แล้วจะดึงข้อมูลไปใช้ยังไง และจะลองเอา Library มาช่วยจัดการอย่างเช่น GSON ก็ได้ จะได้จัดการและเอาข้อมูลไปใช้งานได้ง่ายขึ้น

13. เรียนรู้การใช้งาน Component ใหม่ๆกันบ้าง

        Action Bar, Navigation Drawer, Snackbar, Toolbar, Recycler View หรือ FAB พวกนี้เป็น Component ที่เพิ่มเข้ามาใหม่ และนิยมใช้งานกันเยอะมาก รวมไปถึง 3rd Party Library อย่างเช่นใน GitHub อย่างล่าสุดทาง Google ก็ปล่อย Android Design Support Library มาให้ใช้กันแล้วด้วย

        ผู้ที่หลงเข้ามาอ่านควรเรียนรู้เพิ่มเติมอยู่ตลอดเวลาด้วย อย่ามัวแต่ใช้ Component พื้นฐานอย่างเดียว เพราะหลายๆตัวอาจจะช่วยให้งานจบได้ง่ายขึ้นและไว้ขึ้น ถ้ารู้จักใช้งานเป็น

14. อย่ามัวแต่พึ่ง Library อย่างเดียว เรื่องพื้นฐานก็ควรศึกษาอยู่ดี

         อาจจะดูขัดๆกับข้อที่ผ่านมา แต่เรื่องจริงอย่างหนึ่งก็คือมีนักพัฒนาหลายๆคนที่ใช้แต่ Library จนติดเป็นนิสัย และเมื่อ Library นั้นๆเกิดมีปัญหาขึ้นมาก็ไม่รู้จะแก้ยังไง เพราะรู้แค่วิธีใช้ แต่ไม่รู้ว่ามันทำงานยังไง

         ดังนั้นถ้าเป็นไปได้เรื่องพื้นฐานหรือวิธีพื้นๆก็ควรลองศึกษาดูบ้าง แต่ก็ดูว่าควรเอาไปใช้งานจริงหรือป่าว บางเรื่องอาจจะศึกษาไว้เป็นพื้นฐานก็พอ แต่เวลาใช้งานจริงก็ค่อยเลือก Library ที่เหมาะสม

15. หัดใช้ Android Studio ให้ชำนาญ

         Android Studio เป็น IDE ที่ฉลาดพอสมควร มีเครื่องมือต่างๆนานาที่จะช่วยให้สามารถเขียนโค๊ดได้สะดวกมากขึ้น ไวมากขึ้น ดังนั้นถ้ารู้ความสามารถของ Android Studio ก็มีชัยไปกว่าครึ่งแล้ว

         Gradle, Dependencies, Build Variant รวมไปถึงคีย์ลัดและ Plugin ต่างๆนานาควรรู้จักและใช้งานให้เป็นไว้ดีกว่านะ


16. รู้จักและเข้าใจกับหน่วย DP บ้างอะไรบ้าง

         ยังมีอีกหลายๆอย่างที่นักพัฒนาหลายๆคนรู้ว่าใช้ยังไง แต่ไม่รู้ว่าเพราะอะไร และทำไม ซึ่งหน่วย dp ก็เป็นหนึ่งในนั้นๆ ทั้งๆที่หน่วย dp ช่วยให้นักพัฒนาสามารถรับมือกับหน้าจอหลากหลายขนาดได้อย่างง่ายดาย แต่สิ่งที่เกิดขึ้นคือไม่รู้วิธีใช้มันรับมืออย่างไรนั่นเอง ดังนั้นควรศึกษาและทำความเข้าใจให้ได้ซะ เพราะคนที่ต้องมานั่งรับมือกับ Fragmentation ของหน้าจอก็คือตัวเราเองที่เป็นคนเขียนโค๊ด

17. ควรมี Soft Skill 

        Android Dev ส่วนใหญ่จะขาด Soft Skill หรือความสามารถในการพูดคุยสื่อสาร ซึ่งผู้ที่หลงเข้ามาอ่านหลายๆคนมักจะบอกว่ามันเป็นเรื่องปกติของโปรแกรมเมอร์ที่พูดไม่ค่อยเก่ง พูดไม่ค่อยเข้าใจ หรือพูดไม่รู้เรื่อง (โดยเฉพาะตอนสัมภาษณ์ ไม่รู้เป็นอะไรกัน)

        แต่เจ้าของบล็อกมองว่ามันคือสิ่งที่โปรแกรมเมอร์มองข้ามกันไปจนคิดว่ามันเป็นเรื่องปกติมากกว่า เพราะโปรแกรมเมอร์ก็เป็นคนๆหนึ่งที่มีชีวิตจิตใจเหมือนคนทั่วไป ดังนั้นก็ควรมี Soft Skill เหมือนคนอื่นๆสิ

        และบางครั้งการมี Soft Skill ที่ดีก็จะช่วยเปิดโอกาสในการพัฒนาได้มากขึ้นอีกด้วยนะเออ
     

นี่คือส่วนหนึ่งของพื้นฐานที่ Android Dev ควรมี

         ทั้ง 17 ข้อนี้ถูกใช้งานค่อนข้างบ่อยมากในการทำงานจริงๆ ซึ่งเจ้าของบล็อกเลือกมาแต่อันที่น่าจะเหมาะเป็นแนวทางสำหรับมือใหม่หรือ Junior ทั้งหลายที่คิดว่าตัวเองยังขาดอะไรไปอยู่ แต่ในความเป็นจริงยังมีอีกมากมายก่ายกองที่ Android Dev จะต้องรู้ในการทำงานจริงๆ

        เพราะงั้นก็สู้ๆนะจ๊ะ

ถ้าทำได้ทั้งหมด 17 ข้อ แล้วยังไงต่อ?

        จะมัวรออะไรอยู่ล่ะครับ เส้นทาง Senior Android Developer รออยู่นะ จงอย่าหยุดพัฒนาตัวเองครับ จงก้าวต่อไปให้ถึงระดับ Senior ต่อสิครับ เพราะโลกของ Android Dev มันเปลี่ยนแปลงไวเสมอ


...อยากให้ Android Dev ที่ทำงานได้จริงมีเยอะๆครับ...





เหล่าพันธมิตรแอนดรอยด์

Devahoy Layer Net NuuNeoI The Cheese Factory Somkiat CC Mart Routine Artit-K Arnondora Kamonway Try to be android developer Oatrice Benz Nest Studios Kotchaphan@Medium Jirawatee@Medium Travispea@Medium