บทความและข่าวสาร | Seven Peaks Insights

เมื่อความยากของการเป็น Android developer มาพร้อมกับความสนุก

SL_Andriod Deverloper_Champ_01-hero banner-min

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

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

การเรียนวิทยาการคอมพิวเตอร์

เรียนช่วงแรกๆ ก็ปวดหัวเหมือนกัน เพราะมันยังไม่ค่อยเกี่ยวกับคอมพิวเตอร์มากนัก เป็นพวกคณิตศาสตร์ แต่พอขึ้นปีสองได้เรียน mobile development แล้วรู้สึกสนุกกับมัน ใช้ Java เขียนแอปพลิเคชันบน Android เลยคิดว่าถ้าเรียนจบไปก็อยากทำงานเกี่ยวกับแอปฯ มือถือ ไม่อยากเขียนเว็บไซต์แล้ว 

พอปีสามปีสี่ก็ค่อยไปเรียนวิชาอื่นๆ ที่เกี่ยวข้องกับวิทยาการคอมพิวเตอร์ เช่น data structure, software engineering, software analysis อะไรทำนองนั้น แต่ผมก็ยังไม่รู้สึกว่าน่าสนใจเท่าการเขียนแอปฯ มือถือ เพราะคิดว่าทุกคนมีมือถือ มันเข้าถึงง่ายกว่า อีกทั้งมือถือเหล่านี้ก็มีองค์ประกอบภายในมากมาย เช่น เซนเซอร์ gyroscope, เซนเซอร์ลายนิ้วมือ, กล้องถ่ายรูป เป็นต้น มีอะไรหลายอย่างให้เล่น

เริ่มทำงานที่แรก

พอเรียนจบมาทำงานที่แรกผมก็สมัครงานเป็น Android developer เลย แล้วก็ทำมาจนถึงทุกวันนี้ รวมแล้วเกือบ 4 ปี 

พอมาทำงานจริงถึงได้เข้าใจว่ามันมีความแตกต่างจากตอนเรียนหนังสือมาก เพราะมีเรื่องต่างๆ ให้ต้องคิดเยอะขึ้น จากเมื่อก่อนที่เคยคิดแค่เรื่องเขียน UI แต่ตอนทำงานจริงมีเรื่องการจัดการฐานข้อมูล รวมถึงต้องติดต่อกับคนอื่นๆ ทั้งในทีมและนอกทีม แถมเราเองก็ไม่ได้เขียนแอปฯ คนเดียวอีกต่อไป แต่ยังมี product owner และ developer คนอื่นๆ ที่ต้องมาร่วมงานกันในโปรเจกต์ด้วย 

ความสนุกของการเป็น mobile developer

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

นอกจากนั้นผมจะชอบที่ได้เขียนพวก UI เพราะว่าได้เห็นสีสัน หน้าตาของแอปฯ เสมือนได้ออกแบบมันขึ้นมาเอง แม้ว่าจะไม่ได้รับผิดชอบในส่วนของ UX/UI โดยตรงก็ตาม แต่ก็ได้ช่วยเสนอแนะในทางเทคนิคว่าจริงๆ แล้ว UI ที่ควรจะเป็นของแอปฯ นั้นๆ เป็นอย่างไร ดีไซน์บางอย่างอาจจะเป็นไปไม่ได้เพราะว่า UI มันเล็กกว่ามาตรฐาน เป็นต้น

SL_Andriod Deverloper_Champ_02-min

ความท้าทายของ Android developer

ความยากของงานนี้คือความเปลี่ยนแปลงบ่อย เพราะ Google จะมีอะไรออกมาอัปเดตอยู่ตลอด ผมก็ต้องมานั่งเปลี่ยนตาม นอกจากนั้นอุปกรณ์ Android มันมีหลายแบรนด์ หลายรุ่น และหลายเวอร์ชันมาก ด้วยความที่มันเป็นโอเพนซอร์ส บางเครื่องอาจจะรัน Google Map ได้ดี แต่อีกเครื่องอาจจะมีปัญหา 

หน้าจอแต่ละเครื่องก็ไม่เท่ากัน บางเครื่องหน้าจอใหญ่ บางเครื่องหน้าจอเล็ก บางเครื่องอาจจะแสดงผลได้ตามที่ต้องการ แต่บางเครื่องก็ไม่ แม้ว่าจะออกแบบมาให้ responsive แต่บางครั้ง UI บางส่วนอาจจะเล็กเกินไป หน้าที่ของผมก็คือ ต้องมาเขียนโค้ดให้มันรองรับคุณสมบัติที่แตกต่างกันเหล่านี้ให้ได้มากที่สุด เพื่อให้ผู้ใช้ทุกคนที่ดาวน์โหลดแอปฯ จาก Play Store มาสามารถใช้งานได้

หลักการคือ เราต้องกำหนดว่าเวอร์ชันของ Android ต่ำสุดและสูงสุดที่จะทำออกมาให้รองรับอยู่ที่เท่าไร ก็ต้องมาเช็กว่ามันมี API ที่ใช้งานต่างกันแค่ไหน เช่น บางครั้งเวอร์ชัน 11-12 อาจจะเขียนไม่เหมือนกัน เครื่องที่ใช้เวอร์ชันอื่นมันจะไปเรียกโค้ดชุดนั้นชุดนี้ที่แตกต่างกันไป อาจจะมีปัญหาได้ ต้องไปแก้ไขเพิ่มเติม

ปกติแล้วการทดสอบซอฟต์แวร์พวก unit test ก็มักจะทำใน emulator ที่จำลอง Android รุ่นนั้นๆ แต่ถ้าเป็นบริษัทที่ใหญ่มากๆ ก็อาจจะมีฟาร์มมือถือเครื่องจริงไว้ให้ทดสอบอย่างครบครัน ซึ่งแน่นอนว่าเครื่องจริงย่อมดีกว่าอยู่แล้ว สามารถดูรายละเอียดการทำงานได้แม่นยำกว่า ในขณะที่ emulator จะเชื่อถือได้ประมาณ 80-90%

พอมองย้อนกลับไปดูพัฒนาการของ Android ผมว่ามันก็มีพัฒนาการที่ดีขึ้นเรื่อยๆ นะ โดยเฉพาะเมื่อมองในมุมของผู้ใช้ เพราะเขาพยายามยกระดับด้านความปลอดภัยขึ้นมากขึ้นเรื่อยๆ จากที่เมื่อก่อนมีหลายคนไม่ค่อยไว้ใจในความปลอดภัยของ Android ซึ่งก็เป็นเรื่องดี แต่ developer ก็จะเหนื่อยหน่อยที่ต้องมาตามเรื่องพวกนี้ให้ทัน

พอพูดถึงความปลอดภัย พวกข้อมูลสำคัญอย่าง credential ต่างๆ เช่น รหัสผ่านที่บันทึกเอาไว้ใช้ทีหลัง ก็ไม่ควรเก็บเอาไว้ในเครื่อง เพราะเอาจริงๆ แล้วผู้ไม่ประสงค์ดีสามารถหาวิธีแกะรอยด้วยหลัก reverse engineer แล้วเข้าไปดูโค้ดข้างในได้ ปัจจุบันนี้จึงต้องระวังมากขึ้น ถ้าจะจำเป็นต้องเก็บรหัสผ่านจริงๆ ก็ต้องหาวิธี encrypt ให้มันแกะตรงๆ ไม่ได้ แต่ส่วนมากแล้วสมัยนี้ developer จะใช้วิธีไปดึงข้อมูลจาก backend มาใช้แทนที่จะเก็บข้อมูลไว้ในเครื่องตรงๆ แบบนี้จะปลอดภัยกว่า

หลังจากที่มีกฎหมาย PDPA ออกมา ในฐานะ mobile developer ก็ยังต้องคำนึงถึงข้อมูลความเป็นส่วนตัวมากขึ้นด้วย จากเมื่อก่อนที่สามารถเก็บเป็น cache ไว้ได้ เดี๋ยวนี้ถ้าเก็บเอาไว้ เวลาไม่ใช้งานก็ต้องมาเคลียร์ทิ้งให้หมด เรื่องการขออนุญาตเข้าถึงข้อมูลต่างๆ ก็ต้องเคารพความต้องการของผู้ใช้ เวลาจะขอก็ต้องบอกให้ชัดว่าเอาไปใช้เพื่อทำอะไร ถ้าเขาไม่อนุญาต ฟังก์ชันนั้นก็ต้องใช้งานไม่ได้เลย แต่ถ้าเป็นฟังก์ชันที่ต้องมี ก็ต้องบอกผู้ใช้ว่าจำเป็นต้องให้เขาอนุญาตก่อนเท่านั้นจึงจะใช้งานได้

SL_Andriod Deverloper_Champ_03-min

โปรเจกต์ที่ภาคภูมิใจ

ก่อนหน้านี้เคยร่วมงานกับ Muze Innovation ทางนั้นเขาก็ไปรับโปรเจกต์จาก Axons มาอีกที ซึ่งเขาทำพวก AgriTech โดยทำแอปตัวหนึ่งชื่อ FarmPro ให้เกษตรกรได้ใช้งาน

ด้วยความที่เป็นโปรเจกต์ที่เพิ่งพัฒนาขึ้นมาใหม่ และเขียนด้วยเทคโนโลยีใหม่ๆ ไม่ได้ใช้พวก Java ใช้ Jetpack Compose ในการเขียน UI ซึ่งเป็น UI kit ที่ Android เขาพยายามผลักดันอยู่ให้คนมาใช้กัน แล้วมันก็เขียนง่ายและทำงานได้อย่างรวดเร็ว ผมก็เลยชอบที่ได้ใช้เทคโนโลยีใหม่ๆ เหล่านี้ แถมยังได้ร่วมงานกับทีมงานของลูกค้าที่มีแต่คนเก่งๆ ได้เรียนรู้อะไรมากมายจากคนเหล่านั้น โดยรวมก็สนุกดีครับ

ในขณะเดียวกัน โปรเจกต์นี้ก็มีความท้าทาย เพราะว่าลูกค้าอย่าง Axons เขาก็ค่อนข้างรีบ เพราะต้องไปทำแอปพลิเคชันอีกตัวหนึ่ง เพื่อให้ฝั่งเจ้าหน้าที่ได้ใช้งาน ด้วยความรีบเร่ง ทำให้ไทม์ไลน์มันกระชั้นชิดและฟีเจอร์ก็ถาโถมเข้ามาในเวลาที่จำกัดมาก 

เรียกว่าน่าเห็นใจทั้ง product owner และทีม developer ด้วยกัน ซึ่ง product owner เองเขาก็พยายามชี้แจงแล้วว่าฟีเจอร์อาจจะเยอะเกินไปจนทำไม่ทัน แต่เราก็ต้องพยายามทำให้ทัน แม้ว่าจะไม่มีเวลาทดสอบอย่างละเอียดเท่าที่ควรจะเป็น ซึ่งส่งผลให้มีบั๊กให้แก้เยอะในแต่ละ sprint แต่ก็ยังดีที่ลูกค้าเข้าใจและสุดท้ายก็ผ่านพ้นไปได้ด้วยการแก้บั๊กให้ได้มากที่สุดในช่วงโค้งสุดท้าย

ปรัชญาในการทำงาน

ส่วนตัวผมจะชอบอ่านบทความใน Medium และ Reddit รวมไปถึงดูช่อง YouTube ต่างๆ ที่มี conference ดูพวก design pattern หรือ best practice ว่าแต่ละแบบมันดีอย่างไร เหมาะใช้กับงานแบบไหน ซึ่งอาจจะไม่ต้องทำตามก็ได้ แต่ก็อยากจะรู้ว่ามันทำงานอย่างไร 

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

ดังนั้น ปรัชญาของผมคือ “Keep learning, keep using”

sample project ที่ทำยามว่าง

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

จริงๆ แล้วผมคิดว่า Android developer หลายคนก็ชอบทำแบบนี้ เพราะถ้าต้องมาทำงานจริง เราอาจจะหาไลบรารีที่ต้องการไม่เจอ ไม่รู้ว่าโค้ดอยู่ตรงไหน การลองทำ sample project มันจะทำให้เราสนใจแค่ในส่วนที่เราต้องการแก้ไข ทำให้โฟกัสกับงานได้ง่ายกว่า สิ่งเหล่านี้เรียกได้ว่าผมต้องหาเวลาว่างทำอยู่เสมอ ไม่อย่างนั้นลืมแน่ๆ เพราะไลบรารีมีเยอะแยะเต็มไปหมด 

ผมเป็นคนนอนน้อย ชีวิตไม่ค่อยบาลานซ์เท่าไรนัก แต่ผมกลับรู้สึกสนุกกับการทำแบบนี้ ไม่คิดว่าตัวเองต้องมี work-life balance ขนาดนั้น ผมคิดว่าเวลาที่ผมเอามาศึกษาสิ่งต่างๆ มันไม่ได้กระทบชีวิตส่วนตัวขนาดนั้น เพราะผมอยากทำอยู่แล้ว และเป็นคนชอบเรียนรู้ แต่ก็ยังไม่ถึงขั้นโหมจนป่วย ยังอยู่ในระดับที่รับมือได้ แต่ละวันผมจะนอนตอนเที่ยงคืนแล้วตื่นตีห้า ได้นอนแค่ห้าชั่วโมงเอง แต่ดีหน่อยที่ลุกมาวิ่งออกกำลังกายเบาๆ

SL_Andriod Deverloper_Champ_04-min

ทำงานที่ Seven Peaks

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

Seven Peaks เราจะยึดหลักการ clean architecture ซึ่งหมายความว่า component แต่ละตัวมันไม่ควรไม่ผูกติดกับ component ตัวอื่นๆ สมมติมีอยู่คลาสหนึ่ง คลาสนี้จะต้องไม่รับข้อมูลบางอย่างมาจากข้างนอก สามารถทำงานได้ด้วยตัวเอง ซึ่งมันจะง่ายกว่าในการเขียน test และสามารถ reuse ได้สะดวก คนที่นำโค้ดไปทำงานต่อก็จะเข้าใจและทำตามได้ง่าย

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

ถ้าลูกค้าบางรายพร้อมจะปรับ และมีแนวโน้มว่าจะร่วมงานกันในระยะยาว เราก็อาจจะต้องไปคุยกับเขาว่าอาจจะค่อยๆ migrate ระบบจากของเดิม ไปเป็น clean architecture เพื่อให้สามารถทำงานในรูปแบบเดียวกันได้ง่ายขึ้นในระยะยาว

แผนในอนาคต

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

นอกจากนี้ผมก็ศึกษาเรื่องการเขียน backend ด้วย หัด Golang, TypeScript ไปเรื่อยๆ เพราะผมไม่ได้อยากทำงานแค่เรื่อง mobile development ไปตลอด อยากลองทำ full-stack มากๆ เลยพยายามศึกษาเพื่อทำให้ทุกอย่างมันทำงานเชื่อมโยงกันได้ ที่อยากเป็น full-stack developer ก็เพราะรู้สึกสนุกที่ได้เรียนรู้ ไม่ได้อยากเป็นเพราะจะได้มีเงินเยอะขึ้น คิดว่าการรู้กว้างๆ มันเป็นสิ่งที่ดี

ฝากถึง developer ที่อยากพัฒนาตัวเอง

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

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

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

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

SL_Andriod Deverloper_Champ_Profile-min

คุณณัฐดนัย ไชยกาล (แชมป์), Android Developer ที่ Seven Peaks

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