สัมภาษณ์ สมเกียรติ กิจวงศ์วัฒนะ นักพัฒนา Android ระดับ GDE กับประสบการณ์จาก I/O
คนที่อยู่ในสายงานการพัฒนาแอพ Android น่าจะคุ้นเคยกับ "เอก" สมเกียรติ กิจวงศ์วัฒนะ หรือชื่อในวงการคือ Akexorcist ที่เป็นนักพัฒนาระบบ GDE (Google Developer Expert) ด้าน Android
เขาขึ้นเวทีงานสัมมนาเกี่ยวกับ Android แทบทุกงานในไทย มีบล็อกเกี่ยวกับการพัฒนาบน Android ที่อัพเดตสม่ำเสมอ และล่าสุดเพิ่งไปร่วมงาน Google I/O 2017 ถึงถิ่นกูเกิล บทความนี้เราจึงสัมภาษณ์เขาเพื่อขอทราบมุมมองว่า โลกของนักพัฒนา Android ตอนนี้ไปถึงไหนกันแล้ว
แนะนำตัว
สวัสดีครับ ผมชื่อสมเกียรติ กิจวงศ์วัฒนะ (เอก) อยู่ในวงการ Android มานานพอสมควรทั้งฝั่ง Developer และ User
งานหน้าที่หลักคือเป็น Android Developer อยู่ที่บริษัท Nextzy Technologies ส่วนหน้าที่รองลงมาก็เป็น Google Developer Expert ด้าน Android (Android GDE) และเป็น Blogger ที่เขียนบทความเกี่ยวกับ Android Development อยู่ที่ Sleeping For Less ส่วนยามว่างก็เป็นนักเขียนที่ Droidsans ครับ
มาเป็น GDE ได้อย่างไร
ต้องย้อนไปประมาณ 5-6 ปีก่อน ตอนที่เริ่มหัดเขียนแอพ Android ใหม่ๆ ตอนนั้นฝึกเขียนและเรียนรู้ผ่านอินเทอร์เน็ตนี่แหละ เนื้อหาที่เจอเป็นภาษาอังกฤษเยอะมาก มีน้อยมากที่เป็นเนื้อหาภาษาไทย และเนื้อหาภาษาไทยที่มีอยู่ก็เป็นเรื่องพื้นฐานอย่างวิธีการติดตั้งโปรแกรมหรือคำสั่งพื้นฐาน เลยตัดสินใจเริ่มต้นเขียนบทความตั้งแต่ตอนนั้นเป็นต้นมา เวลาที่เรียนรู้หรือหัดเขียนโค้ดอะไรเสร็จ ก็เก็บมาเขียนเป็นบทความอยู่ประจำ
พอผ่านไปราว 2-3 ปี บทความที่เขียนไว้เริ่มมีคนรู้จักมากขึ้น จนวันหนึ่งมีคนทักมาใน Google+ (ทุกวันนี้ก็ยังใช้อยู่นะ) เพื่อเชิญผมไปพูดเกี่ยวกับการพัฒนา Android ที่งานหนึ่ง ต่อมารู้ว่าเป็น Community Manager ของ GDG Thailand ที่คอยจัดอีเวนท์ของ Google ที่เกี่ยวกับนักพัฒนาในประเทศไทย หลังจากนั้นเค้าก็ชวนผมไปช่วยงานแบบนี้บ่อยมากขึ้น
ในปีต่อมาก็ได้รู้ว่า "Google มีโปรแกรมที่ชื่อว่า GDE" เพื่อสนับสนุนนักพัฒนาที่ดูแล community ในแต่ละประเทศ พอมาดูรายละเอียด พบว่าเงื่อนไขสำคัญในการเข้ามาเป็น GDE คือสิ่งที่ผมทำเป็นประจำอยู่แล้ว ไม่ว่าจะเป็นการเขียนบทความหรือการไปพูดในงานต่างๆ จึงทำให้ผมเข้าสู่ขั้นตอนสัมภาษณ์ และได้เป็น GDE จนถึงทุกวันนี้ครับ
มาถึงตอนนี้ปี 2017 แล้ว คนเป็น Android Developer ควรมีความรู้อะไรบ้างที่เป็นพื้นฐานชนิดว่า ไม่มีไม่ได้
จริงๆ มีหลายอย่างเลยครับที่ต้องรู้เป็นพื้นฐาน แต่ขอเลือกเฉพาะอันที่สำคัญเป็นอันดับต้นๆ ละกัน
Lifecycle: Android ออกแบบการทำงานให้อยู่ในรูปของวัฏจักร (Lifecycle) เพื่อเราจะเขียนแอพ Android ให้ทำงานเหมาะตามสถานการณ์ได้ง่าย ยกตัวอย่างเช่น แอพของเรามีการใช้กล้อง ถ้าผู้ใช้กดย่อแอพก็ควรหยุดใช้งานกล้องชั่วคราว เผื่อว่าผู้ใช้ไปเปิดแอพกล้องตัวอื่นก็จะได้ใช้งานกล้องต่อได้ และพอกลับมาเปิดแอพของเราใหม่ก็ค่อยเปิดใช้งานกล้องต่อจากเดิม ตรงนี้ไม่ใช่แค่ต้องรู้ว่าใน Lifecycle มันมีอะไรบ้าง เพราะในการพัฒนาแอพจริงๆ เราต้องเข้าใจลึกกว่านั้น ต้องรู้ว่ามีโอกาสจะเกิดอะไรขึ้นในตอนไหนบ้าง และต้องเขียนโค้ดตรงไหนเพื่อจัดการกับการทำงานในแต่ละอย่างให้ถูกต้อง
Layout: เรื่องการจัด Layout หรือหน้าจอของแอพ เราต้องรู้ให้เยอะที่สุดเท่าที่ทำได้ว่ามีอะไรให้ใช้งานบ้าง รวมไปถึงข้อจำกัดของแต่ละตัว และฝึกจัดหน้าจอในรูปแบบต่างๆ มันเหมือนกับการเล่นเกมแนว Puzzle ที่ต้องพลิกแพลงและหาเทคนิคของตัวเอง ไม่ได้มีขั้นตอนหรือรูปแบบที่ตายตัวซักเท่าไร
Density Independent Pixels (DP): DP เป็นหน่วยที่ใช้ในการกำหนดขนาดหน้าจอภายในแอพ Android แทนหน่วย PX เพื่อแก้ปัญหาขนาดหน้าจอที่หลากหลายจนเกินไป หน่วย DP จะสัมพันธ์กับเรื่องขนาดหน้าจอของอุปกรณ์แอนดรอยด์ที่มีหลายขนาด ถ้าเราเข้าใจเรื่องนี้ก็จะช่วยลดปัญหาหน้าจอเพี้ยน หรืออยู่ในตำแหน่งที่ไม่ถูกต้องเวลาแสดงบนหน้าจอที่มีขนาดแตกต่างกันได้
Fragmentation: ใครๆ ก็รู้ว่าอุปกรณ์แอนดรอยด์ในทุกวันนี้มันมีสเปคต่างกันมากมาย แต่สำหรับ Android Developer มันคือข้อมูลที่เราต้องรู้ให้มากที่สุดครับ เพราะเวลาพัฒนาแอพจะต้องคิดเผื่อเรื่องนี้ด้วยเสมอ กรณีส่วนใหญ่ทางแอนดรอยด์ก็จะคิดเผื่อให้แล้ว และสร้าง guildeline, รูปแบบของไฟล์ หรือคำสั่งต่างๆ เพื่อช่วยจัดการเรื่องเหล่านี้ให้บางส่วน แต่ก็มีบางเรื่องที่ต้องเรียนรู้เพิ่มเติมเอง เช่น ฟีเจอร์ Doze Mode บน Android 6.0 เมื่อเป็นเครื่องยี่ห้อ Samsung จะมีฟีเจอร์ Smart Manager และของ Sony ชื่อว่า Stamina Mode ที่ไปครอบการทำงานของ Doze Mode อีกทีหนึ่ง ดังนั้นถ้าจะแสดงภาพขั้นตอนการปิดฟีเจอร์ดังกล่าวไม่ให้ยุ่งกับ App ของเรา จะใช้ชื่อและเมนูที่ไม่เหมือนกัน
Configuration Qualifier: เรื่องนี้จะเกี่ยวข้องกับเรื่อง fragmentation ที่ได้บอกไปแล้วว่าแอนดรอยด์ได้คิดเผื่อและกำหนดรูปแบบไฟล์ใน Android App ให้แล้ว (เรียกว่า Configuration Qualifier) และหน้าที่ของ Android Developer คือต้องเข้าใจรูปแบบที่เค้ากำหนดไว้ เช่น Android App จะมีโฟลเดอร์สำหรับเก็บภาพซึ่งแยกโฟลเดอร์ตามขนาดหน้าจออยู่แล้ว ดังนั้นต้องรู้ว่าควรเก็บภาพขนาดเท่าไรไว้ในโฟลเดอร์ไหน เป็นต้น
Configuration Changes: เวลาที่ผู้ใช้เปลี่ยนทิศทางการถือเครื่องแล้วหน้าจอแอพของเราต้องเปลี่ยนจากแนวตั้งเป็นแนวนอน หรือเปลี่ยนภาษาในตัวเครื่องจากภาษาไทยเป็นภาษาอังกฤษ แล้วแอพจะเปลี่ยนภาษาตามให้ทันที แอนดรอยด์เรียกสิ่งที่เกิดขึ้นนี้ว่า "Configuration Changes" ซึ่งเกี่ยวข้องกับ Configuration Qualifier ที่ได้อธิบายไปก่อนหน้า เช่น การเปลี่ยนหน้าจอแอพจากแนวตั้งเป็นแนวนอน นักพัฒนาก็แค่เตรียม Layout สำหรับแนวตั้งและแนวนอนไว้ แล้วเก็บไว้ในโฟลเดอร์ที่แอนดรอยด์กำหนดไว้ เดี๋ยวระบบของแอนดรอยด์จะจัดการต่อให้เอง นักพัฒนาต้องรู้ว่า Configuration Changes บนแอนดรอยด์มีอะไรบ้าง และ Configuration Changes เป็นเบื้องหลังการทำงานของ Multi-Window บน Android 7.0 และ Samsung DeX ถ้าแอพไหนไม่ได้คิดเผื่อเรื่องนี้ ก็จะรองรับฟีเจอร์เหล่านี้ไม่ได้หรือไม่สมบูรณ์
Handle Instance State: หัวข้อนี้เกี่ยวข้องกับ Configuration Changes และเรื่อง RAM ของแอนดรอยด์ (Android จะปิดแอพที่ไม่ได้ใช้งานเพื่อคืน RAM เมื่อ RAM ไม่พอใช้งาน) ซึ่งแอพที่ถูกปิดลง (เมื่อไรก็ได้) ตอนที่เปิดขึ้นมาใหม่อีกครั้งก็ควรจะกลับมาเปิดหน้าเดิมและทำงานต่อจากของเก่าได้ด้วยนะ ดังนั้นนักพัฒนาจะต้องเก็บข้อมูลจำพวกตัวแปรที่ประกาศไว้ในแอพลงในกล่องๆ หนึ่งที่ระบบแอนดรอยด์เตรียมไว้ให้ครับ เมื่อแอพถูกเปิดขึ้นมาใหม่อีกครั้งก็จะดึงข้อมูลเหล่านั้นกลับมาใช้งานต่อ และแอพก็ทำงานต่อจากเดิมได้
Testing: ยุคนี้แล้ว ฝึกเขียนเทสเถอะครับ
Soft Skill: ปัญหาคลาสสิคสำหรับนักพัฒนาส่วนใหญ่เลยก็ว่าได้ ผมมองว่านักพัฒนาในยุคนี้ควรมี Soft Skill ด้วย ไม่ใช่ว่ามีแต่ Hard Skill เท่านั้น
ความเชื่อว่า Android พัฒนายาก ยังมี fragmentation อยู่เยอะ ยังเป็นความจริงอยู่หรือเปล่า
ในมุมมองของผม Android ไม่ได้พัฒนายากนะครับ แต่ว่ามันมีเรื่องที่ต้องรู้เยอะมาก และเราต้องเรียนรู้ "ธรรมชาติของ Android" ก่อน ซึ่งผมอธิบายไปแล้วในคำถามเมื่อกี้
แต่นักพัฒนาส่วนใหญ่มักมองข้ามเรื่องเหล่านี้ แล้วไปเน้นแต่เรื่องโค้ดอย่างเดียว พอเขียนไปจนถึงจุดหนึ่งก็เจอกับทางตันและมองว่ามันเป็นเรื่องยากไปโดยปริยาย
แต่อีกส่วนหนึ่งก็ต้องโทษทาง Android ที่ทำเอกสารไม่ค่อยเป็นมิตรกับนักพัฒนามือใหม่มากนัก
ส่วนเรื่อง fragmentation ก็ต้องยอมรับว่าเยอะจริงๆ และเป็นภาระของนักพัฒนาก็ต้องศึกษาและเรียนรู้เองด้วย จึงเป็นเรื่องยากมากที่นักพัฒนาคนหนึ่งจะรู้สเปคและข้อมูลของเครื่อง Android หลายรุ่นหลายยี่ห้อได้ อย่างกรณีของผมโชคดีตรงที่เป็นนักเขียนอยู่ที่ Droidsans จึงมีโอกาสได้รีวิวหรือลองเล่นเครื่อง Android หลายยี่ห้อ ทำให้ผมมีข้อมูลเกี่ยวกับ fragmentation มากพอสมควร
ทีมพัฒนาของ Google ก็ช่วยแก้ปัญหาเรื่อง fragmentation บางอย่างให้แล้วนะครับ อย่างเช่นเรื่องขนาดหน้าจอที่มีหลายขนาด ใน Android มีวิธีจัดการกับเรื่องนี้ให้อยู่แล้ว ไม่ว่าจะเป็นหน่วย DP, การจัด Layout หรือ Configuration Qualifier แล้วมีพวกไลบรารีที่สร้างขึ้นมาเพื่อจัดการปัญหา fragmentation บางส่วนให้แล้ว
ทั้งหมดนี้ขึ้นอยู่กับนักพัฒนาว่าจะรู้จักไลบรารีเหล่านั้น และเข้าใจวิธีที่เค้าออกแบบและกำหนดไว้ให้หรือไม่
ภาพจาก [Android Dev Tips] Guideline สำหรับการเริ่มต้นเขียนแอปพลิเคชันแอนดรอยด์
ตอนนี้ควรตั้ง Minimum API เป็น level ไหนถึงน่าจะเหมาะสมที่สุด
ในการกำหนด Minimum API Level ของโปรเจคซักตัว ผมพิจารณาจากสองอย่างด้วยกัน น้ำหนักของทั้งสองอย่างก็เท่ากัน ถ้าอันไหนสำคัญกว่าก็จะอิงอันนั้นเป็นหลัก
อย่างแรกคือกลุ่มตลาดผู้ใช้ในปัจจุบัน โดยผมพยายามสังเกตผู้ใช้จริงอยู่เสมอ ถึงแม้ว่าทุกวันนี้เครื่อง Android รุ่นใหม่ๆจะมาพร้อมกับ Android 6.0 Marshmallow กันแล้ว แต่ในความเป็นจริง ก็ยังมีผู้ใช้ส่วนหนึ่งที่ใช้เวอร์ชันเก่าอยู่ ดังนั้นผมจะคิดย้อนกลับไป 2-3 ปี โดยอิงจากอายุการใช้งานของสมาร์ทโฟน และเทียบกับข้อมูลสถิติของเว็บ Android Developer อัพเดททุกเดือนว่ามีผู้ใช้ Android ในแต่ละเวอร์ชันเป็นสัดส่วนเท่าไร
อย่างที่สองคือ Core Feature ของ Android ที่ต้องการจะเรียกใช้งาน เพราะถ้าเรากำหนด Minimum API Level เป็นเวอร์ชันที่ต่ำกว่าเกินไป ก็ไม่สามารถเรียกใช้คำสั่งได้ ดังนั้นต้องดูด้วยว่า Core Feature ที่ต้องการใช้รองรับเวอร์ชันขั้นต่ำที่สุดคือเท่าไร ซึ่งขึ้นอยู่กับว่าเราพัฒนาแอพอะไรครับ ถ้าเป็นการทำงานพื้นฐานทั่วไป สามารถกำหนดเป็น API 16 (Android 4.1 Jelly Bean) ได้เลย เพราะครอบคลุมฟีเจอร์ส่วนใหญ่แล้ว
งานส่วนใหญ่ที่ผมทำอยู่เป็น API 17 (Android 4.2 Jelly Bean) จริงๆ ก็อยากใช้ API 18 (Android 4.3 Jelly Bean) ด้วยซ้ำ เพราะมีบางฟีเจอร์ที่ทำให้ผมทำงานสะดวกขึ้น แต่เนื่องจากยังมีเครื่อง Android ที่ยังใช้กันที่ถูกลอยแพอยู่ที่ Android 4.2 กัน
ประเด็น Minimum API Level เป็นเรื่องของ “เวลา” ครับ นักพัฒนาต้องใช้เวลาในการทนรออยู่พักใหญ่ๆ จนกว่าเวอร์ชันเก่าๆ จะหมดไป การรอคอยครั้งใหญ่ที่สุดคือช่วงที่รอให้ API 9-10 (Android 2.3 Gingerbread) หมดไป ตอนนั้นต้องรอนานมากถึง 3 ปีเลยแน่ะ
ตอนนี้การรอครั้งต่อมาเป็น API 21 (Android 5.0 Lollipop) ที่อาจต้องใช้เวลาอีกซัก 2 ปี เพราะในเวอร์ชันนี้ถูกยกระดับขึ้นมาเยอะมาก ไม่ว่าจะเรื่อง Material Design หรือ Camera API 2 หรือการเปลี่ยนจาก Dalvik มาเป็น ART และเวอร์ชันนี้ช่วยลดปัญหา Fragmentation ลงไปได้เยอะมาก
จากประสบการณ์ไปเยือน Google I/O ถึงถิ่นโดยตรง เห็นอะไรที่น่าสนใจบ้างจาก I/O 2017
โอ้ว มีเยอะเลยครับ อันที่เห็นได้ชัดก็คงเป็นเซสชันที่เยอะมาก ปีนี้มีหัวข้อสำหรับแอนดรอยด์ที่น่าสนใจเยอะมาก แต่ผมก็เลือกเข้าแค่เฉพาะเซสชันที่จำเป็นจริงๆ เท่านั้น ส่วนเซสชันที่เหลือก็ไปนั่งดูวิดีโอย้อนหลังแทน แล้วเอาเวลาไปเดินให้ทั่วงานแทน เพราะปีหลังๆ สถานที่จัดงานใหญ่มาก
การได้เดินในงาน I/O ทำให้เราได้เห็นอะไรเยอะมากกว่าดูผ่าน YouTube ผมชอบบูธแสดง Product ต่างๆ ของ Google ที่เน้นไปทางฝั่งนักพัฒนา มันไม่เหมือนกับงานทั่วไปที่คนเฝ้าบูธจะเน้นขายของเป็นหลัก แต่ในงานนี้เป็นทีมพัฒนาของ Product มาประจำอยู่ที่บูธเพื่อให้เราเข้าไปพูดคุย ปรึกษา และแสดงความคิดเห็นต่อ Product เหล่านั้นได้โดยตรง
ในทุกปีจะมี Experiment Project ของนักพัฒนาทั่วโลกที่ถูกเลือกมาแสดงในงานนี้ด้วย ผมสังเกตว่าในปีนี้โปรเจคส่วนใหญ่ที่ถูกเลือกเข้ามาเป็นโปรเจคที่เกี่ยวข้องกับ Machine Learning และ AI เยอะมาก สอดคล้องกับแนวทางของ Google ที่เน้น AI First ต่อไปในอนาคต
ส่วน After Party ในงานก็เป็นอะไรที่เจ๋งดีเหมือนกันครับ ลองนึกภาพว่าในตอนกลางคืนพื้นที่งาน Google I/O ถูกเปลี่ยนให้กลายเป็นพื้นที่สำหรับ After Party ทั้งงาน จากห้องที่เป็นห้องสัมมนาในตอนกลางวัน บางห้องก็กลายเป็นห้องเล่นเกมที่เอาโปรเจคเจ๋งๆ มาทำเป็นเกมให้เล่นกันด้วย
สิ่งที่สำคัญที่สุดคืองานนี้เป็นงานที่นักพัฒนาทั่วทั้งโลกมารวมตัวกัน จึงเป็นโอกาสที่ดีที่จะได้พบปะพูดคุยด้วยกัน ซึ่งภายในงานก็จะมีจุดนัดพบสำหรับผู้เข้าร่วมงานให้ มี Community จากประเทศต่างๆ มานัดพบกับในงาน และหลายๆคนก็มาทำความรู้จักกันภายในงานนี่แหละครับ
จากการไปกระทบไหล่นักพัฒนาระดับโลก คิดว่านักพัฒนาชาวไทยมีอะไรต่างจากชาวโลกไหม มีทักษะอะไรที่ยังขาด
อืม... ผมรู้สึกว่า นักพัฒนาบ้านเรากับต่างประเทศก็ไม่ต่างกันมากนัก จากที่ได้คุยกับนักพัฒนาชาติอื่น เค้าก็บอกว่าในประเทศเค้าก็มีปัญหาพื้นฐานของนักพัฒนาไม่ต่างกับบ้านเรา ไม่ว่าจะปัญหา Soft Skill หรือความรู้พื้นฐานไม่แน่น ดังนั้นคนที่เก่งจริงๆ จึงมีไม่มากนักเมื่อเทียบกับที่มีทั้งหมด
เมื่อมองกลับมาที่นักพัฒนาในบ้านเรา ทักษะอยากให้ฝึกกันเป็นอย่างแรกเลย คงเป็นการพูดคุยกับนักพัฒนาด้วยกันก่อน แต่ถ้าเป็นไปได้ ก็อยากให้ฝึกทักษะในการพูดคุยกับนักพัฒนาต่างชาติครับ
จากการที่ผมได้พูดคุยกับนักพัฒนาหลายๆ ประเทศ พบว่ามันเป็นอะไรที่สนุกมากเลยนะ เพราะแต่ละคนมาจากแต่ละที่ก็มีอะไรที่อยากจะแชร์ต่างกัน แต่ด้วยกำแพงภาษาและความกล้าแสดงออกที่คนไทยส่วนใหญ่มีปัญหากัน จึงทำให้นักพัฒนาในบ้านเราหลายคนขาดทักษะจุดนี้ไป ทั้งที่ภาษาอังกฤษเป็นตัวกลางที่ทำให้ทุกคนทั่วโลกเชื่อมกันได้ ถ้าเรามีปัญหาเรื่องภาษาและความกล้าแสดงออก ผมก็รู้สึกเสียดายโอกาสที่จะเสียไปนะ
อย่างที่สองเป็นเรื่องความรู้พื้นฐานที่นักพัฒนาควรรู้ครับ จากที่ผมได้เจอนักพัฒนาหลายคนที่เก่งๆ ต้องบอกเลยว่าเรื่องพื้นฐานสำคัญมากครับ เช่น ถ้าเป็น Android Developer ก็ต้องรู้เรื่องพื้นฐานของ Android แบบเข้าใจจริงๆ ไม่ใช่รู้แค่ว่ามีอะไรบ้าง แต่ต้องรู้ในระดับที่ว่ามันทำงานยังไง และจะเอาไปประยุกต์ใช้งานยังไง มีข้อดีข้อเสียอะไรบ้าง
มุมมองต่อ Kotlin ดีแย่แค่ไหนยังไง พร้อมไหมสำหรับการรัน production หรือว่าควรรอไปก่อน
ถ้าใครได้ดู Keynote งาน I/O 2017 ในช่วงที่มีการประกาศเรื่อง Kotlin จะได้ยินเสียงคนในงานร้องเฮกันดังมาก ซึ่งผมก็คือหนึ่งในนั้นครับ ฮ่าๆ
ส่วนตัวผมชอบ Kotlin อยู่แล้ว และจากการคุยกับคนที่ได้ลอง Kotlin ส่วนมากจะบอกว่าตอนแรกที่ลองฝึกเขียนก็จะไม่ค่อยชิน แต่เมื่อชินกับ Kotlin แล้ว ก็ไม่ค่อยอยากจะกลับไปเขียน Java กัน
ส่วนการนำไปใช้ใน Production บอกเลยว่าไม่มีปัญหาแน่นอนครับ ในประเทศไทยก็มีแอพที่ใช้ Kotlin กันแล้วครับ ของเพื่อนร่วมทีมผมก็มีตัวที่ใช้ Kotlin เหมือนกัน และในอนาคตผมมองว่าแอพหลายตัวก็จะเปลี่ยนไปใช้ Kotlin เพิ่มขึ้นแน่นอน
แต่ก็ไม่ได้หมายความว่าต้องย้ายไป Kotlin กันเดี๋ยวนี้เลยนะ เพราะว่าตอนนี้เป็นช่วงเวลาของการเปลี่ยนแปลงอยู่ อาจจะต้องใช้เวลาซักพักนึง ถ้ามีโปรเจคเก่าก็อาจต้องใช้เวลา migrate นานพอสมควร ดังนั้นอาจไม่จำเป็นต้องย้ายไป Kotlin มากนัก
แต่ถ้าเป็นโปรเจคใหม่ที่กำลังจะเริ่ม การเลือก Kotlin มาใช้ก็เป็นทางเลือกที่ดีต่ออนาคตเหมือนกัน
แต่ปัจจัยสำคัญที่สุดในการตัดสินใจว่าจะใช้ Kotlin ดีมั้ยคือ "คุณและเพื่อนร่วมทีมเตรียมพร้อมสำหรับ Kotlin แล้วหรือยังล่ะ?" ถ้ายังไม่พร้อมก็ควรไปเตรียมตัวมาให้พร้อมก่อน ตอนนี้ผมมองว่าถึงเวลาที่ควรจะเริ่มเรียนรู้ Kotlin กันได้แล้วครับ
tools ที่แนะนำสำหรับนักพัฒนา ควรใช้เป็น Android Studio หรือตัวอื่น มีตัวไหนที่น่าสนใจอีกบ้าง
จริงๆ แล้วไม่จำเป็นต้องใช้ Android Studio ก็ได้ เพราะยังมี tools หลายตัวที่สามารถใช้พัฒนาได้เหมือนกัน
แต่ถ้าจะพัฒนา native app ยังไงก็แนะนำให้ใช้ Android Studio เพราะว่ามันเป็น Official IDE ที่ทีมพัฒนาจาก Google ดูแลโดยตรง เวลาที่มีอะไรใหม่ๆ เพิ่มเข้ามาใน Android เวอร์ชันใหม่ก็จะได้ลองทันที
ผู้ใช้ Android Studio เป็นชุมชนที่ใหญ่ที่สุดของโลก Android Development ดังนั้นมันจึงอุดมไปด้วยไลบรารีมากมายให้เลือกใช้งาน เมื่อติดปัญหาอะไรก็สามารถหาคนช่วยเหลือได้ง่าย และถ้าคุณสนใจจะทำงานในสายงานด้านนี้ ก็จะมีโอกาสที่เปิดกว้างมากกว่าการใช้ tools ตัวอื่นๆ
สำหรับ hybrid app ผมไม่มีตัวไหนแนะนำเป็นพิเศษครับ เพราะผมโฟกัสที่ native app เป็นหลัก แต่เวลาเลือกใช้ tools ซักตัวในการพัฒนา hybrid app ผมก็แนะนำว่าอย่าเลือกเพียงเพราะว่าใช้ง่าย ให้พิจารณาจากปัจจัยอื่นด้วย ไม่ว่าจะเป็นชุมชนหรือการซัพพอร์ตจากทีมพัฒนาของ tools ตัวนั้นๆ
คำแนะนำสำหรับคนอยากเป็น Android Developer หาความรู้เพิ่มเติมอย่างไร มีแหล่งไหนแนะนำ
ทุกวันนี้มีแหล่งข้อมูลสำหรับ Android Developer ให้ศึกษาเยอะมากครับ ถ้าใครมีปัญหาเรื่องภาษาอังกฤษ ตอนนี้ก็มีเนื้อหาภาษาไทยเยอะเหมือนกัน ไม่ว่าจะเป็นเว็บสอนเขียน บทความ หรือวิดีโอสอนออนไลน์ แต่ถ้าเป็นไปได้ก็แนะนำให้อ่านของภาษาอังกฤษเป็นหลักครับ เพราะแหล่งข้อมูลจะกว้างกว่ามาก
นักพัฒนายังควรอัพเดทข่าวสาร อ่านบทความในอินเทอร์เน็ตเป็นประจำด้วย เพราะโลกของ Android เปลี่ยนแปลงไวไม่ต่างกับสายเว็บ ถ้าเราอ่านข่าวสารบ่อย อัพเดทความรู้บ่อย ก็ช่วยให้เราสามารถพัฒนาแอพได้ดีขึ้นด้วย
แต่ก็ไม่ได้หมายความแค่อ่านก็เก่งได้นะครับ เพราะการอ่านจะช่วยให้เรารู้ในเรื่องนั้นๆ แต่การฝึกเขียนด้วยตัวเองจะช่วยทำให้เราเข้าใจมันมากขึ้นครับ ดังนั้นถ้าเรา "อ่านและฝึกเขียน" จะทำให้เรา "รู้และเข้าใจ" ครับ
ส่วนแหล่งข้อมูลแนะนำก็ไม่ได้เจาะจงที่ไหนเป็นพิเศษ เพราะทุกวันนี้ที่มีเนื้อหา Android Development ภาษาไทยเยอะมาก ส่วนหนึ่งเกิดจากทุกคนในชุมชนช่วยกันเขียน ช่วยกันแบ่งปันความรู้ หลายคนก็เขียนไว้ใน Medium กัน บางคนก็มีเว็บเป็นของตัวเอง
ผมแนะนำเป็นกลุ่ม Thailand Android Developer ที่อยู่ใน Facebook ดีกว่า เพราะที่นั่นเป็นแหล่งรวม Android Developer ชาวไทยที่ใหญ่ที่สุดในตอนนี้ เวลาที่ใครเขียนบทความใหม่ๆ อยากจะแชร์อะไร ก็จะแชร์ในกลุ่มนี้กัน และเวลาใครมีคำถามหรือปัญหาอะไรเกี่ยวกับ Android Development คนที่อยู่ในกลุ่มก็จะมาช่วยกันตอบให้ด้วย
ส่วนวิดีโอสอนออนไลน์ก็ต้องคอร์สออนไลน์ของ NuuNeoI แหละครับ เป็นคอร์สสอนออนไลน์ที่มีเนื้อหาเป็นภาษาไทยและครอบจักรวาลมากที่สุดในตอนนี้แล้วล่ะ
สุดท้ายอยากจะฝากคำว่า "Learning First, Working Fast" ให้กับทุกคนครับ เป็นหนึ่งในคติประจำของผมที่ใช้มาตลอด เพราะนักพัฒนาที่ดีควรหาเวลาเรียนรู้และพัฒนาตัวเองอยู่ตลอดเวลาครับ เมื่อเวลาที่ต้องทำงานจริงๆ เราก็จะมีความพร้อมและสามารถทำได้เลย