ဟပ်ချလောင်း iOS Developer ဋီကာ
နိဒါန်း
ခေါင်းစဉ်ကိုကြည့်ပြီး နေ့ချင်းညချင်း iOS developer ဖြစ်နည်း ပြောပြပေးမယ့် article လို့တော့ မထင်လိုက်ကြပါနဲ့။ အဲ့လို shortcut မျိုး ကျွန်တော်ရှာဖွေခဲ့ဖူးပါတယ်။ ဒါပေမယ့် နတ်ရေကန်ထဲပစ်ချလိုက်သလို နေ့ချင်းညချင်း developer ဖြစ်မယ့်နည်းလမ်း တစ်ကယ်မရှိသေးပါဘူး။ ကျွန်တော့်ရဲ့ iOS developer journey ကို VarCamp 2022 မှာ community corner တစ်ခုခုမှာ ပြောမယ်လို့ စိတ်ကူးခဲ့ပေမယ့် မပြောဖြစ်ခဲ့ပါဘူး။ အမှန်တော့ ဒီအကြောင်းအရာကိုဘဲ Twitter မှာ တော်တော်များများဆီက အမေးခံရဖူးပါတယ်။ သို့သော် ဘာသာစကားအခက်အခဲကြောင့်ကတစ်ကြောင်း အချိန်အခက်အခဲကြောင့်ကတစ်ကြောင်း အကြောင်းကြောင်းကြောင့် နောက်မှ အင်္ဂလိပ်လိုစာအရှည်ကြီးရေးမယ်ဆိုပြီး တေးထားခဲ့ပါတယ်။ အခုတစ်ခါ အကြောင်းတိုက်ဆိုင်လာတာကြောင့် အရင်ဆုံး မြန်မာလို စာအရှည်ကြီးရေးပြီး ဆွေးနွေးပေးလိုက်ရပါတယ်ခင်ဗျာ။
ဆက်ဖတ်သင့်သလား?
ကျွန်တော် သူများအချိန်တွေကို အလကားမဖြုန်းချင်ပါဘူး။ ဒီ article မှာ iOS Developer road map ကို ကျွန်တော်လေ့လာခဲ့တဲ့ပုံစံအတိုင်း ပြန်ဖောက်သည်ချသွားမှာဖြစ်ပါတယ်။ ဒါကြောင့် နေရာအတော်တော်များများမှာ ကိုယ့်အကြောင်း ကိုယ်ပြန်ပြောနေသလို ဖြစ်နေပါလိမ့်မယ်။ ပြီးရင်တော့ online ပေါ်က iOS Developer road map အချို့ကို ပြပြီး ဝေဖန် လေကန်ပါမယ်။ နောက်ဆုံးမှာတော့ ကျွန်တော့်မိတ်ဆွေတစ်ယောက် စုစည်းထားတဲ့ iOS Deveoper interview questions တွေကို share ပေးသွားပါမယ်။ ကျွန်တော်ဖြတ်သန်းခဲ့ရပုံတွေ ကျွန်တော့်အတွေးတွေကို သိချင်ရင်တော့ ဆက်ဖတ်ကြပါ။
Early in my career
iOS Developer မလုပ်ခင် ကျွန်တော် Java, Spring Boot, Angular တို့နဲ့ web development အပိုင်းကို လုပ်ဖြစ်ပါတယ်။ အထူးသဖြင့် Java နဲ့ Javascript ကို အချိန်အတော်ကြာ လေ့လာလိုက်စားဖူးပါတယ်။ ဒါ့အပြင် Android လုပ်မယ်ဆိုပြီး Kotlin ကိုလည်း နည်းနည်းပါးပါးလုပ်ခဲ့ဖူးသလို(အခုတစ်လုံးမှ မမှတ်မိတော့ပါ) iPhone ကိုပစ်ပြီး android phone ကောက််လဲလိုက်လို့ အခုထိ android phone နဲ့ သောင်တင်နေတုန်းပါဘဲ။ ဒီ့အတွက်ကြောင့် Swift ကို စလုပ်တဲ့အချိန်မှာ ကျွန်တော်ဟာ programming language တစ်ခုကို ဘယ်လိုလေ့လာရမယ်ဆိုတာ ကောင်းကောင်းသိနေပြီဖြစ်သလို OO design patterns တွေ SOLID principle တွေ JS ရဲ့ pure function, side effects, function currying စတဲ့ functional programming သဘောတရားတွေ RxJS လို reactive programming, pub-sub messaging အယူအဆတွေကို အတန်အသင့် သဘောပေါက် နားလည်ထားပြီးဖြစ်ပါတယ်။ ဒါတွေဘာကြောင့်ပြောနေရသလဲဆိုတော့ ကျွန်တော် ဘာကြောင့် ဟပ်ချလောင်း iOS Developer ဖြစ်လာသလဲဆိုတာကို မြင်သာစေဖို့ပါ။
My Journey
Learning Swift
ကျွန်တော် iOS Development ကို စတင်ထိတွေ့ဖြစ်ခဲ့တာ CS50x final project မှာပါ။ အဲ့တုန်းက Android, iOS, Web ဆိုပြီး track သုံးခုရှိတာမှာ တစ်ခါမှမလုပ်ဖူးတဲ့ iOS ကို ရွေးဖြစ်ခဲ့ပါတယ်။ အဲ့တုန်းက Pokedex app ပုံစံတူ country flag တွေရှာတဲ့ Country Explore ဆိုတဲ့ app လေးလုပ်ပြီး final project တင်ခဲ့တာကိုတောင် သွားပြန်သတိရမိပါတယ်။
အဲ့အချိန်တုန်းက ကျွန်တော် iOS Development ကိုမကြိုက်ခဲ့ပါဘူး။ Swift က သူ့ဘာနဲ့သူ အဆင်ပြေသေးပေမယ့် iOS ကတော့ whole new story ဖြစ်ခဲ့ပါတယ်။ iOS ကိုလုပ်မယ်ဆိုရင် Xcode ရဲ့ autocomplete ကို အကြီးအကျယ်အားကိုးရမှာဖြစ်သလို function name အရှည်ကြီးတွေနဲ့ method overloading လုပ်ထားတာကိုလည်း နားလည်ပေးနိုင်ရမှာဖြစ်ပါတယ်။
ဒီလိုနဲ့ 2020 နှစ်ကုန်ပိုင်းလောက်မှာ ဘာကြောင့်မှန်းမသိဘဲ iOS ကို ပြန်လုပ်ချင်စိတ် ပေါ်လာပါတယ်။ iOS ကို စလုပ်မယ်ဆိုရင် Swift language ကို အရင်သေချာနားလည်ပြီး အနည်းဆုံးတော့ သူ့ syntax အတိုင်း code တွေ ပေါ့ပေါ့ပါးပါး ရေးနိုင်တော့မှ iOS SDK ကို ဆက်လေ့လာမယ်လို့ ဆုံးဖြတ်ခဲ့ပါတယ်။ ဒါကြောင့် စစချင်း တစ်ပတ်ကတော့ Swift ကိုဘဲ အသည်းအသန်လုပ်ဖြစ်ခဲ့ပါတယ်။
ကျွန်တော် Swift ကို စတင်လေ့လာတဲ့အခါမှာ Swift language guide ကနေ စခဲ့ပါတယ်။ ဟပ်ချလောင်း develoepr ဆိုတဲ့အတိုင်း ကျွန်တော် Swift syntax နဲ့ ရင်းနှီးကျွမ်းဝင်ဖို့ ၂ ရက်လောက်ဘဲကြာပါတယ်။ အဲ့နောက်တော့ swift နဲ့ terminal app သေးသေးလေးတွေ လျှောက်ရေးကြည့်တာ တစ်ပတ်လောက်ကြာခဲ့ပါတယ်။ ဒါကြောင့် ပြောချင်တာက လူတစ်ယောက်နဲ့တစ်ယောက် လေ့လာပုံ လေ့လာနည်းလည်းမတူကြသလို background တွေလည်း မတူညီကြပါဘူး။
ဒါကြောင့် roadmap ဆိုတဲ့နေရာမှာ အကုန်လုံးကို ယေဘူယျ ခြုံပြီးဘဲ ပြောလို့ရမှာဖြစ်ပါတယ်။ ကိုယ်နဲ့ ကိုက်ညီမှုရှိအောင် ပြုပြင်ယူဖို့ရာ မိမိတာဝန်သာဖြစ်ပါကြောင်း။
ဘယ်လိုဘဲဖြစ်ဖြစ် Swift ကတော့ iOS Developer လုပ်နေသမျှ အမြဲလေ့လာနေရမယ့် language တစ်ခုဖြစ်ပါတယ်။ ဘယ်တော့မှ ပြီးသွားပြီဆိုတာ ရှိမှာမဟုတ်ပါဘူး။ Advanced ဖြစ်တဲ့ Swit concept တွေကို နောက်ပိုင်း တဖြည်းဖြည်းနဲ့ လေ့လာသွားရမှာပါဘဲ။
Learning Objective C
Objective C က အခုခေတ်မှာတော့ သိပ်လေ့လာစရာမလိုလောက်တော့ဘူးလို့ ယူဆပါတယ်။ ကျွန်တော် တစ်ခါတော့ လေ့လာဖူးပါတယ်။ အခုတော့ အကုန်မေ့သွားပါပြီ xD. ဒါပေမယ့် တစ်ချို့ senior role တွေက Objective C ကိုသိရမယ်ဆိုတာတွေ အခုထိတွေ့နေရပါသေးတယ်။ ကိုယ်က လုံးဝ completely badass senior dev ဖြစ်ချင်ရင်တော့ တွေ့မရှောင် ကျုံးသင့်ပါတယ်။ ဒါက နောက်အချိန်ရတော့မှ ပြောတာပါ။
Learning iOS Development
Swift language ကို အတော်အတန် ရေးနိုင်လာပြီး ရေးရတာ comfortable ရှိလာပြီးနောက်မှာတော့ iOS Development ကို စခဲ့ပါတယ်။ ပထမဉီးဆုံးသွားကြည့်ဖြစ်ခဲ့တာက Apple Developer website က tutorial ကနေ စဖြစ်ခဲ့ပါတယ်။ အခုဝင်ကြည့်လိုက်တော့ SwiftUI အတွက်ပါ tutorial တွေ ပြင်ပေးထားတာကို တွေ့ရပါတယ်။ ကောင်းလေစွ။
အဲ့တုန်းက လုပ်ခဲ့ရတာ food detail ပြတဲ့ UI လေးပါ။ အခု အဲ့ tutorial ရော ရှိသေးလား ဖျက်လိုက်ပြီလားတော့ သေချာမသိတော့ပြီ။ ရှာလို့တော့ မတွေ့တော့ပါ။ အခုနောက်ပိုင်း SwiftUI content တွေ ပိုများလာပါတယ်။
ဒုတိယသွားကြည့်ဖြစ်တာကတော့ Code With Chris ရဲ့ YouTube channel ပါ။
How to Make an App for Begineers (2020) playlist ကို အခုထိ recommend ပေးပါတယ်။ ကိုယ်တိုင်လည်း အဲ့ playlist ကနေမှ Xcode ကို ကျွမ်းကျွမ်းကျင်ကျင်သုံးတတ်လာပြီး app သေးသေးလေးတွေ စရေးတတ်ခဲ့တာပါ။ Swift ကတော့ ကိုယ့်အတွက် documentation ကနေ ဖတ်ပြီး လေ့လာတာပိုမြန်တဲ့အတွက် အဲ့လိုဘဲ လုပ်ဖြစ်ခဲ့ပါတယ်။
Swift/iOS နဲ့ပတ်သက်တဲ့ learning resource တွေကိုတော့ ဒီ tweet မှာ တင်ပေးခဲ့ပြီးဖြစ်ပါကြောင်း။ မေးချင်တာရှိရင် Twitter မှာ DM လို့ရပါတယ်။
UIKit Vs SwiftUI
ကျွန်တော် စလုပ်ခဲ့တုန်းကတော့ သေချာပေါက် UIKit နဲ့ စခဲ့တာပါ။ ဒါပေမယ့် အခု ၂၀၂၂ ကိုရောက်လာတဲ့အခါမှာ စလုပ်မယ့်သူတွေအတွက် ရွေးချယ်စရာ နှစ်မျိုးရှိလာပါတယ်။ ဒါကတော့ good old UIKit နဲ့ စလေ့လာမလား fresh new SwiftUI ကိုအရင်စရမလားဆိုတဲ့ မေးခွန်းပါဘဲ။ ဘယ်လိုဘဲဖြစ်ဖြစ် UIKit ရော SwiftUI ရောဟာ iOS Developer တို့အဖို့ မဖြစ်မနေ လေ့လာကြရမယ့်အရာတွေဖြစ်ပါတယ်။ ဘယ်ဟာကို အရင်စလေ့လာရမလဲဆိုတာကတော့ နောက်ထပ် မေးခွန်းတစ်ခုပါ။
ဒီမေးခွန်းကိုမဖြေခင် Apple ရဲ့ binaries တွေအပေါ်မူတည်ပြီး အခုလက်ရှိ iOS 15 မှာ ဘယ်လို နည်းပညာတွေသုံးနေကြသလဲဆိုတာကို အရင် လေ့လာကြပါဉီးစို့။ အသေးစိတ်ကိုတော့ Alexandre Colucci ရဲ့ Apple’s use of Swift and SiwftUI in iOS 15 ဆိုတဲ့ article မှာ သွားဖတ်ကြည့်ပါ။ ဘယ်သူမှ Apple ရဲ့ internal source code ကို access မရှိတဲ့အတွက် ဒီ data တွေအားလုံးက binaries တွေအပေါ်မူတည်ပြီး ခန့်မှန်းထားတာမို့လို့ လုံးဝ 100% မှန်တယ်လို့တော့ မဆိုလိုပါဘူး။
ပြောရမယ်ဆိုရင်တော့ Apple က ဒီနှစ်ပိုင်းအတွင်းမှာ Swift နဲ့ SwiftUI ကို ပိုပြီး ကျယ်ကျယ်ပြန့်ပြန့်သုံးလာတာကို တွေ့ရပါတယ်။ ဒါ့အပြင် iOS 15 မှာ Apple ရဲ့ Books, Notes, Weather, Music တို့လို လူသုံးများ နာမည်ကြီးတဲ့ App တွေကိုလည်း UIKit ကနေ SwiftUI ကို ပြန်ပြင်ရေးခဲ့ကြပါတယ်။
Language အပိုင်းမှာတော့ iOS13 ကနေ iOS14 ကိုအပြောင်းမှာ နှစ်စလောက်တက်သွားတာကိုတွေ့ရပါတယ်။ အခုထိ internal မှာ Objective C codebase တွေရှိနေပေမယ့် Apple က Swift နဲ့ SwiftUI ကို ဘယ်လောက် push နေသလဲဆိုတာ မြင်သာပါတယ်။
ခြုံပြီးပြန်ပြောရရင် SwiftUI က အနာဂါတ်ကောင်းရှိတာမှန်ပေမယ့် ကျွန်တော့်အမြင်မှာတော့ UIKit ကို လက်မလွှတ်စေချင်သေးပါဘူး။ SwiftUI ကိုသုံးတယ်ဆိုပေမယ့် အချို့နေရာတွေမှာ UIKit code တွေကိုနှောပြီးရေးနေရဆဲပါ။ SwiftUI ကနေစလေ့လာရင်ရော မရဘူးလားဆိုတော့ ရတယ်လို့လည်း ပြောလို့ရပါတယ်။ ဒါပေမယ့် ပြည်တွင်းမှာတော့ အခုစာရေးနေတဲ့အချိန်အထိ အလုပ်ရဖို့ 99% မဖြစ်နိုင်ပါဘူး။ Donny Wals က သူ့ရဲ့ blog မှာ ဒီလိုပြောထားပါတယ်။
ကျွန်တော့်ပုဂ္ဂလိကအမြင်အရတော့ UIKit နဲ့ စသင့်တယ်လို့မြင်ပါတယ်။ ဘယ်လိုဘဲဖြစ်ဖြစ် Storyboard နဲ့ Autolayout တို့ဟာ မဖြစ်မနေ လေ့လာရမယ့် နည်းပညာတွေဖြစ်ပါတယ်။ UIKit နဲ့ တော်တော်လေးအသားကျလာတော့မှ SwiftUI ကို ဆက်သွားတာက သင့်တော်မယ်လို့ထင်ပါတယ်။
Learning UIKit
iOS Development ကိုစတင်လေ့လာမယ်ဆိုရင် Swift ကို ကျေကျေညက်ညက်လေး နားလည်သဘောပေါက်ထားဖို့ အရေးကြီးပါတယ်။ ဒါမှသာ Apple ရဲ့ framework တွေကို ဉီးစားပေး လေ့လာနိုင်မှာဖြစ်ပါတယ်။ iOS ကိုလုပ်မယ်ဆိုရင်တော့ programming language သာမက Apple ရဲ့ framework တွေအပြင် Xcode ကို ကျွမ်းကျွမ်းကျင်ကျင်အသုံးပြုတတ်အောင်လည်း လေ့လာရဉီးမှာဖြစ်ပါတယ်။
ဒီအထဲကမှ ပထမဆုံးလေ့လာရမှာကတော့ Apple ရဲ့ UI တွေ ရေးဆွဲရာမှာအသုံးပြုတဲ့ UIKit framework ဖြစ်ပါတယ်။ Apple က framework တွေအပေါ်မူတည်ပြီး သူ့ရဲ့ class တွေ struct တွေကို နာမည်ပေးလို့ရှိပါတယ်။ ဉပမာ UIKit framework အောက်မှာရှိတဲ့ view ရဲ့ class name ကို UIView, view controller ဆိုရင် UIViewController, table view ဆိုရင် UITableView စသဖြင့်ပေးလေ့ရှိပါတယ်။ ဒီလိုဘဲ နောက်ထပ် framework တစ်ခုဖြစ်တဲ့ Core Animation မှာဆိုရင်လည်း သူ့ရဲ့ class တွေကို CALayer, CAShapeLayer, CAAnimation စသဖြင့် framework ရဲ့အစစကားလုံးတွေကို သုံးပြီးနာမည်ပေးရပါတယ်။ ဒါက ကျွန်တော့်ကို စလုပ်လုပ်ချင်းမှာ တော်တော် မျက်စိနောက်စေခဲ့ပါတယ်။
UIKit ကိုလေ့လာရမှာ view တွေနဲ့ container component တွေဆိုပြီး နှစ်ပိုင်းခွဲခြား မြင်နိုင်ပါတယ်။ View တွေအနေနဲ့ user ကို information ပြပေးနိုင်တဲ့ label, user interact လုပ်လို့ရမယ့် button, stepper, slider, text field စသဖြင့် UI component တွေပါဝင်ပါတယ်။
Container တွေကတော့ ခုနက view တွေကို layout ချနိုင်မယ့် stack view လို scroll view လို component တွေ, complex ဖြစ်တဲ့ list တွေကို တည်ဆောက်နိုင်ဖို့အတွက် UITableView, UICollectionView တို့လို component တွေကို ဆက်လက်လေ့လာရမှာဖြစ်ပါတယ်။ ဒီလို view တွေကို screen ပေါ်မှာ responsive ဖြစ်ဖြစ် နေရာချနိုင်ဖို့အတွက် constraint အသုံးပြုပုံတွေ autolayout ရဲ့ သဘောတရားတွေကိုလည်း သေသေချာချာ နားလည်သဘောပေါက်ဖို့လိုပါမယ်။
ဒါက programming ဆိုတာထက် iOS Development အတွက် လိုအပ်တဲ့ UIKit framework ကို လေ့လာရတယ်ဆိုတဲ့ အခြေအနေဖြစ်ပါတယ်။ အနည်းဆုံး တစ်လ နှစ်လလောက် UI သီးသန့် ကျွမ်းကျင်အောင် လေ့လာသင့်ပါတယ်။ Let’s Build That App ရဲ့ tutorial တွေကို recommend ပေးပါတယ်။ ကျွန်တော့်တုန်းကတော့ ဒီအတိုင်း ကြုံသလိုလေ့လာခဲ့တာပါ။ Project based ပုံစံနဲ့သွားခဲ့ပါတယ်။ Dribbble က screen တစ်ခုကိုကြည့်ပြီး ဒီလိုပုံစံမျိုးထွက်အောင် ဘယ်လိုလုပ်ရမလဲဆိုတဲ့ ရှုထောင့်ကနေ ဒီလိုပုံစံလုပ်ချင်ရင် ဘာတွေဆက်လေ့လာဖို့လိုမလဲဆိုပြီး လေ့လာဖြစ်ခဲ့ပါတယ်။ Step by step သိချင်ရင်တော့ သူများတွေပေးထားတဲ့ roadmap တွေနဲ့ ဝေဖန်လေကန်တဲ့အပိုင်းကို ကျော်ဖတ်ပါ။
ဒီနေရာမှာ တစ်ခုပြောချင်တာက Swift ကို အစအဆုံး လုံးစေ့ပတ်စေ့ သိပြီးတော့မှ iOS Development ကိုဝင်ရမယ်လို့ မဆိုလိုပါဘူး။ လူတိုင်းမှာ မတူညီတဲ့ learning process တွေရှိတဲ့အတွက် တစ်ယောက်နဲ့တစ်ယောက်တော့ တူမှာမဟုတ်ပါဘူး။ သို့သော် ကျွန်တော် အကြံပေးရရင်တော့ Swift ကို syntax နဲ့ အခြေခံသဘောတရားလောက်သိပြီဆိုရင် development အပိုင်းကိုဆက်သွားစေချင်ပါတယ်။ Swift ရော iOS SDK ရောက အမြဲပြောင်းလဲနေမယ့် breathing living creature တွေဖြစ်တဲ့အတွက် ဘယ်တော့မှ လေ့လာလို့ပြီးတယ်ဆိုတာ ရှိမှာမဟုတ်ပါဘူး။
Swift ကို programming language အနေနဲ့ လေ့လာတာ တအားကြာလာရင် ဘာဖြစ်လာနိုင်လဲဆိုတော့ motivation ပျောက်တာတွေ app ထွက်အောင်ရေးဖို့နှောင့်နှေးတာတွေ ဘာမှ မယ်မယ်ရရဆက်မလုပ်ဖြစ်တာတွေ ဖြစ်လာနိုင်ပါတယ်။ ကျွန်တော်ကတော့ Swift ကို အတော်အတန်ရပြီဆိုတာနဲ့ App ထွက်အောင်ရေးဖို့ကို ဉီးစားပေးခဲ့ပြီး မသိတဲ့ မကြားဖူးတဲ့ စကားလုံးတွေ terms တွေရှိလာတော့မှ ပြန်လေ့လာပါတယ်။ ဒါကလည်း ပြောခဲ့သလို ရှေ့မှာ background knowledge တွေရှိခဲ့တယ် ဘယ်ဟာကတော့ ဉီးစားပေးသင့်တယ် ဘယ်ဟာကိုတော့ နောက်မှလုပ်ရင် ရတယ်ဆိုတဲ့ sense က သူ့အလိုလိုရတာ ဖြစ်ပါတယ်။ ဒီအပိုင်းကတော့ တစ်ယောက်နဲ့တစ်ယောက် တူမှာမဟုတ်ပါဘူး။
UIKit နဲ့ပတ်သက်ပြီး နောက်ဆုံးအကြံဉာဏ်ပေးချင်တာကတော့ UI ကို programmatically render လုပ်နိုင်အောင် လေ့လာစေလိုပါတယ်။ တစ်နည်းပြောရရင် UI ကို storyboard နဲ့ drat & drop လုပ်တာအပြင် code နဲ့ပါ ရေးတတ်အောင် လေ့လာဖို့ပြောတာပါ။ ဒီအပိုင်းက controversial topic ဖြစ်ပေမယ့် ကျွန်တော့်အနေနဲ့ code နဲ့ constraint တွေရေးတတ်အောင် dynamic layout တွေရေးနိုင်အောင် လေ့လာထားတာ လုံးဝမမှားဘူးလို့ဘဲပြောပါရစေ။ Storyboard နဲ့ interface builder တို့ရဲ့ ဒုက္ခတွေကို လုပ်ရင်းကိုင်ရင်းနဲ့ သိလာပါလိမ့်မယ်။
ဒီထက်ပိုပြီး design မှာ expert ဖြစ်ချင်ရင်တော့ Core Animation တို့လို UIKit ရဲ့အောက်က low level api တွေကိုပါ လေ့လာထားသင့်ပါတယ်။ ဒါက must have တော့မဟုတ်ပေမယ့် senior တစ်ယောက်ဖြစ်ချင်တယ်ဆိုရင် ရှိထားသင့်တဲ့ should have knowledge တွေထဲက တစ်ခုလို့ ယူဆပါတယ်။ UIKit ကလည်း လေ့လာလို့ ကုန်မယ်ဆိုတာရှိမှာမဟုတ်ပါဘူး။ ဒါကြောင့် စစချင်းမှာ ပုံမှန် UI လေးတွေ ရေးတတ်ရုံလောက်လေ့လာတာပြသနာမရှိပေမယ့် နောက်ပိုင်းကျရင် UIKit ကိုလည်း သေချာလေး ပြန်လေ့လာရမယ့်အပိုင်းတွေရှိတယ်ဆိုတာ သတိချပ်စေလိုပါတယ်။
Learning SwiftUI
ဒီအပိုင်းကတော့ ခေါင်းစဉ်သာတင်ထားပေမယ့် ကျွန်တော်ကိုယ်တိုင်လည်း အဖြစ်ရှိအောင် မလေ့လာဖြစ်သေးပါဘူး။ SwiftUI ကိုလေ့လာမယ်ဆိုရင်တော့ Paul Hudson ရဲ့ 100 Days of SwiftUI ကို ညွှန်းချင်ပါတယ်။ ကျွန်တော်ကိုယ်တိုင်လည်း အဲ့တာကိုဘဲ လုပ်နေပါတယ်။ ကြားထဲမှာ လုပ်လိုက် မလုပ်လိုက်နဲ့ကြောင့် အခုထိကြာနေတာပါ။ သို့သော် SwiftUI ကို pragmatic ကျကျ နားလည်ဖို့ဆိုရင် Paul ရဲ့ 100 Days of SwiftUI က အကောင်းဆုံးပါဘဲ။ တစ်ခြား SwiftUI ကို သီအိုရီအပိုင်းတွေ နောက်ကွယ်က concept တွေကို နားလည်အောင် သင်ပေးနိုင်တဲ့နေရာတွေလည်း ရှိပါသေးတယ်။ ကျွန်တော့်အာဘော်အရတော့ ဒီအပိုင်းဟာ UIKit နဲ့ App တွေရေးရတာ သက်သောင့်သက်သာရှိပြီးမှသာ ဆက်သွားသင့်ပါတယ်။ SwiftUI ဟာ အနာဂါတ်ဖြစ်ပါတယ်။ ဒါပေမယ့် ပစ္စုပ္ပန်မှာတော့ SwiftUI တစ်ခုတည်းကို အားကိုးပြီး ရပ်တည်လို့မရသေးပါဘူး။ အနာဂါတ်မှာ ready ဖြစ်အောင်တော့ SwiftUI ကို လေ့လာထားရပါမယ်။
Learning iOS Networking
ဒီနေ့ခေတ် app တွေအားလုံးနီးပါး server ကနေ data သွားဆွဲရပါတယ်။ UI လေး သပ်သပ်ရပ်ရပ်ထွက်အောင် ရေးတတ်ပြီဆိုရင်တော့ public domain api တစ်ခုခုက data တွေကို fetch ပြီး UI မှာပြန်ပြတာလောက်ကတော့ အသေးအဖွဲဖြစ်နေအောင် ဆက်လေ့လာရပါမယ်။ ဒီနေရာမှာ network ကနေ data ဆွဲတာအပြင် ရလာတဲ့ JSON data (များသောအားဖြင့်တော့ JSON ဘဲ ပြန်ပို့ပေးတာများပါတယ်) ကို Swift object ဖြစ်အောင် decode ဘယ်လိုပြန်လုပ်မလဲ စတဲ့ အပိုင်းတွေကိုပါ အတွင်းကျကျ လေ့လာရပါဉီးမယ်။ Network data transfer အတွက် iOS မှာ ရွေးချယ်စရာအနေနဲ့ ရှိနေတာကတော့ Apple ကနေ ထုပ်ပေးထားတဲ့ URLSession နဲ့ 3rd party ကနေ URLSession အပေါ် abstraction layer အနေနဲ့အုပ်ပြီး elegant networking api တွေ ပြန်ထုတ်ပေးထားတဲ့ Alamofire library တို့ဖြစ်ပါတယ်။
တစ်ကယ့် production မှာတော့ Alamofire ကို အသုံးများပါတယ်။ သို့သော် native api ဖြစ်တဲ့ URLSession နဲ့ Codable protocol အပိုင်းတွေ JSON encode လုပ်ပုံတွေကိုလည်း သေချာ သိထားမှသာ တစ်ခုခုဖြစ်လာရင် ဖြေရှင်းနိုင်မှာဖြစ်ပါတယ်။ ပုံမှန် JSON လောက်ကို သာသာယာယာ ပြန်ပြနိုင်ပြီဆိုရင် file တွေ download ဆွဲတာ file တွေတင်တာ auth token ပို့တာ web socket ချိတ်တာ စတဲ့ ပိုပြီး advanced ဖြစ်တဲ့ usage တွေကို ဆက်လက်လေ့လာသွားရပါမယ်။
Learning offline support
Server ကနေ data ကိုဆွဲလာပြီးရင် poor internet connectivity မှာ local storage ထဲက data တွေကိုပြန်ပြရလေ့ရှိပါတယ်။ ဒီအတွက် local persistent framework တွေကိုလည်း လေ့လာထားရပါမယ်။ အသုံးများတာကတော့ Apple ရဲ့ native solution ဖြစ်တဲ့ CoreData နဲ့ cross-platform နည်းပညာတစ်ခုဖြစ်တဲ့ Realm တို့ဖြစ်ပါတယ်။ ကျွန်တော့်သဘောကတော့ နှစ်ခုစလုံးကို လေ့လာသင့်ပါတယ်။
ကျွန်တော့်အသိတစ်ယောက်ကတော့ သူအလုပ်လုပ်ခဲ့သမျှ company တွေမှာ Core Data ကို မသုံးကြဘူးလို့ဆိုပါတယ်။ Core Data က လုပ်ရကိုင်ရလက်ပေါက်ကပ်ပေမယ့် native solution ဖြစ်တဲ့အပြင် iCloud နဲ့လည်း compatible ပြီး Apple Devices အားလုံးမှာ sync ဖြစ်တဲ့အတွက် သုံးကြတယ်ဆိုတဲ့ international dev တွေနဲ့လည်း ကြုံရပါတယ်။ Local အပါအဝင် အခြား ကျွန်တော် access ရှိတဲ့ international iOS team အများစုကတော့ Realm ကိုသုံးကြပါတယ်။ ကျွန်တော့်အထင်လည်း Realm က ပိုအသုံးများမယ်လို့ထင်ပါတယ်။ ဘယ်လိုဘဲဖြစ်ဖြစ် Core Data ကို အနည်းဆုံးတော့ တီးမိခေါက်မိရှိထားသင့်ပါတယ်။
Learning Reactive Technologies
ဒါကတော့ လုံးဝ မဖြစ်မနေသိထားရမှာမျိုးမဟုတ်ပေမယ့် iOS Developer တစ်ယောက်ရဲ့ pocket ထဲမှာ ရှိထားသင့်တဲ့ skill တစ်ခုပါ။ အထူးသဖြင့် large team တွေ large project တွေမှာ ဒီလို reactive technology တွေကို အသုံးပြုကြပါတယ်။ ရွေးချယ်စရာအနေနဲ့ရှိနေတာတွေကတော့ Apple ရဲ့ native reactive technology ဖြစ်တဲ့ Combine, third party community တွေဖြစ်တဲ့ ReactiveX ရဲ့ RxSwift နဲ့ ReactiveCocoa ရဲ့ ReactiveSwift တို့ဘဲဖြစ်ပါတယ်။ သူ့ဟာနဲ့သူ ကောင်းတာ ဆိုးတာလေးတွေရှိပါတယ်။ ကျွန်တော်နဲ့ စကားပြောဖူးတဲ့ dev တစ်ယောက်ကတော့ သူ့ရဲ့ company မှာ internal reactive framework တစ်ခု သူတို့ဘာသာပြင်ဆင်ထားပြီး သုံးတယ်လို့ပြောပါတယ်။
ဒါ့အပြင် ဒီနှစ်တွေထဲမှာ Point Free ရဲ့ ComposableArchitecture ကလည်း စိတ်ဝင်စားဖို့ကောင်းလာပါတယ်။ အထူးသဖြင့် api တွေက တော်တော်လေး intuitive ဖြစ်ပြီး testability တော်တော်ကောင်းတယ်လို့ပြောပါတယ်။ ပြည်တွင်းမှာ အသုံးများတာကတော့ RxSwift ပါ။ သူက community လည်းကြီးသလို language တော်တော်များများအတွက်လည်းရှိပါတယ်။ နိုင်ငံတကာမှာတော့ Combine ကိုပိုသုံးကြပါတယ်။ အဓိကက Combine ကိုသုံးမယ်ဆိုရင် minimum iOS SDK က iOS 13 နဲ့အထက်ဖြစ်မှရပါမယ်။ Native solution ဖြစ်နေတာရယ် SwiftUI မှာလည်း အကြီးအကျယ်သုံးထားတာတွေရယ်ကြောင့် ကိုယ့်ရဲ့ app က iOS 13 ကနေစ support ပေးတယ်ဆိုရင်တော့ Combine ကို စသုံးသင့်ပါပြီ။ Point Free ရဲ့ Composable architecture ကတော့ ကိုယ်တိုင် တစ်ခါမှမလေ့လာကြည့်ရသေးပါဘူး။ သို့သော် အခုတလော လူပြောများလာလို့ experimental အနေနဲ့တော့ သုံးကြည့်သင့်ပါတယ်။
Learning deep links
Mobile application တွေတော်တော်များများမှာ deep link တွေက အသက်ပါဘဲ။ Noti တစ်ခုပို့ပြီး အဲ့ noti ကိုနှိပ်လိုက်ရင် ဘယ် screen ကိုပြန်ဖွင့်မလဲ back ထွက်ရင် ဘယ်လိုလုပ်မလဲ စသဖြင့် navigation logic တွေ state တွေအများကြီးကို handle လုပ်ရမှာပါ။ Deep link နဲ့ပတ်သက်တဲ့အပိုင်းကို ဒီ article မှာ သွားဖတ်ကြည့်ပါ။
Learning to work with audio/video
ကိုယ့်ရဲ့ app မှာ audio တွေ video တွေဘယ်လိုပြရမလဲဆိုတာကိုလည်း လေ့လာသင့်ပါတယ်။ App တိုင်းမှာ ဒီလို functionality တွေမပါပေမယ့် ကိုယ့်ရဲ့ iOS Dev career မှာ မလွဲမသွေ ကြုံတွေ့ရမယ့်အရာတွေဖြစ်ပါတယ်။ ခက်မယ်လို့ ထင်ရပေမယ့် Apple က တော်တော်လေးလွယ်ကူအောင် ပြုလုပ်ပေးထားပါတယ်။ AVKit နဲ့ AVFoundation ကို အဓိကလေ့လာရပါမယ်။ အပေါ်ကဟာတွေထက်စာရင်တော့ ဒီအပိုင်းက low priority တော့ ဖြစ်တဲ့အနေအထားတော့ရှိပါတယ်။ သို့သော် အချိန်ရရင် လေ့လာထားတာ မမှားပါဘူး။
Learning to embed Web Pages
နောက်ထပ် low priority skill တစ်ခုဖြစ်ပါတယ်။ တစ်ခါတစ်ရံ့ ကိုယ့် app မှာ web url embedd လုပ်ချင်တာတွေ web content တွေကို ပြချင်တာတွေ ရှိတတ်ပါတယ်။ ဒီလိုအခြေအနေတွေအတွက် WebKit ကိုလည်း လေ့လာထားသင့်ပါတယ်။
Learning Push Notification
Business တော်တော်များများက ကိုယ့်ရဲ့ app user ကို latest service တွေ new products တွေ တစ်ခြား information တွေ စသဖြင့် notify လုပ်လိုကြပါတယ်။ Push notification set up လုပ်တာက native way လည်းရှိသလို့ Firebase Cloud Messaging လို third-party service ကိုသုံးလို့လည်းရပါတယ်။ Apple ရဲ့ native push notification set up လုပ်တာကိုတော့ User Notifications ဆိုတဲ့ section မှာသွားဖတ်ပါ။ FCM set up လုပ်ပုံကိုတော့ ဒီကနေ လေ့လာလို့ရပါတယ်။
Learning XCTest Framework
အမှန်တရားတစ်ခုကိုပြောရရင် iOS Developer တော်တော်များများက test case တွေရေးဖို့ကို ပျင်းကြလေ့ရှိပါတယ်။ App တစ်ခုမှာ automated test suit တစ်ခု set up မလုပ်ထားဘဲ manually test လုပ်တာက app သေးရင် မသိသာပေမယ့် app size ကြီးလာတာနဲ့အမျှ တစ်ခုခုပြင်လိုက်တာနဲ့ ပြင်လိုက်တဲ့အရာတစ်ခုက တစ်ခြား feature တွေကို ထိခိုက်မှုရှိမရှိ validate လုပ်ဖို့ခက်ပါတယ်။ ဒါ့အပြင် အမြဲ manual testing နဲ့ scenario အမျိုးမျိုးကိုပြန် conduct လုပ်ရမှာဖြစ်တဲ့အတွက် tedious ဖြစ်ပါတယ်။ Developer တစ်ယောက်အနေနဲ့ coverage အတိုင်းအတာတစ်ခုထိရှိတဲ့ test case တွေရေးထားတာ good practise တစ်ခုဖြစ်တယ်ဆိုတာကိုတော့ လက်ခံထားပြီးဖြစ်မှာပါ။ XCode မှာ UI Testing Bundle နဲ့ Unit Testing Bundle ဆိုပြီး နှစ်ခုရှိပါတယ်။ အများအားဖြင့်တော့ unit testing ကိုဘဲ ထည့်လေ့ရှိကြပါလိမ့်မယ်။ Unit tests တွေရေးဖို့အတွက်ဆိုရင် XCTest ကို လေ့လာရမှာဖြစ်ပါတယ်။
Learning iOS App Deployment
ဒီအပိုင်းကတော့ နောက်ဆုံးမှ ထည့်ရေးထားတယ်ဆိုပေမယ့် အတော်လေးအရေးကြီးတဲ့အထဲမှာပါပါတယ်။ Developer တစ်ယောက်အနေနဲ့ ကိုယ့်ရဲ့ app ကို App Store ပေါ် တင်တတ်ရပါမယ်။ I know Apple Developer Program fee is quite expensive for us so brace yourself 💪. App တစ်ခုကို App Store ပေါ်တင်တာ TestFlight နဲ့ internal release လုပ်တာ tester ထည့်တာ crash report ထုတ်တာ ဒီအပိုင်းတွေက another set of challenges ဖြစ်ပါလိမ့်မယ်။ ကျွန်တော်ကတော့ အလုပ်ထဲရောက်မှ ပြန်လေ့လာရပါတယ်။
Other’s Roadmaps
ဒီအပိုင်းမှာတော့ internet ပေါ်က ကျွန်တော်သင့်တော်မယ်လို့ယူဆတဲ့ iOS Dev Roadmaps အချို့ကို ယှဉ်ပြပြီး ဝေဖန် လေကန်သွားပါမယ်။
# 1
Paul Hudson ရဲ့ How to Become an iOS Developer in 2021 ကို ညွှန်းချင်ပါတယ်။ 2021 ဆိုပေမယ့် 2022 အတွက်လည်း compatible ဖြစ်တာကိုတွေ့ရပြီး သူကအစထဲက Swift/iOS နဲ့ပတ်သက်ရင် တော်တော်လေး ယုံကြည်ရတဲ့ ကျွန်တော်သိသမျှထဲမှာ အကောင်းဆုံး အတော်ဆုံး အပြည့်စုံဆုံး content creator တစ်ယောက်ပါ။
# 2
နောက်တစ်ခုကတော့ Bohdan Orlov ရဲ့ iOS Developer Roadmaps 2020 နဲ့ iOS Developer skills matrix ပါ။
Roadmap မှာတော့ ဘယ်ဘက်အခြမ်းက CS နဲ့ပတ်သက်ပြီး သိထားသင့်တဲ့ knowledge တွေကို highlight လုပ်ထားပြီး ညာဘက်မှာတော့ iOS Dev တစ်ယောက်အတွက် solid skill တွေကို highlight လုပ်ထားတာကို တွေ့ရပါမယ်။ ကျွန်တော့်အနေနဲ့ကတော့ တစ်ဖက်ပြီးမှ တစ်ဖက်လုပ်တာထက် ဘယ်နဲ့ညာကို ဖြည်းဖြည်းစီ မျှလုပ်သွားပြီး အချိန်တစ်ခုရောက်မှ အဆုံးထိဆက်သွားတာက ပိုအဆင်ပြေမယ်လို့ထင်ပါတယ်။
iOS Dev skill matrix က လွန်ခဲ့တဲ့ ၄ နှစ်ကဟာဆိုတေော့ နည်းနည်း date အောက်နေပြီလို့ပြောလို့ရပေမယ့် mostly ကတော့ applicable ဖြစ်ပါတယ်။ ဒီနှစ်ထဲမှာ ထပ်တို့လာတာကတော့ Swift 5.5 ရဲ့ Structured programming concept နဲ့ async/await, actor စတာတွေပါ။ ဒီအပိုင်းတွေက mid-senior level လောက်ဆို သိသင့်တယ်လို့ယူဆပါတယ်။
ဒါကတော့ roadmap တွေနဲ့ပတ်သက်ပြီး ကျွန်တော်သဘောကျတဲ့ tweet တစ်ခုကို ဖော်ပြပေးလိုက်ပါတယ်။ ကျွန်တော့်ရဲ့ advice ကလည်း “don’t take the order too seriously” ပါဘဲ။
# 3
ဒါကတော့ Yura Istomin ရဲ့ medium article တစ်ခုပါ။ သူကလည်း road map လိုမျိုးတော့မဟုတ်ပေမယ့် Swift language နဲ့ပတ်သက်ပြီး algorithms တွေနဲ့ပတ်သက်ပြီး စုစည်းပေးထားတာ တော်တော်လေးပြည့်စုံတာကြောင့် အဲ့ထဲကအစဉ်အတိုင်း လေ့လာသွားရင် အကျိုးရှိမယ်လို့ ထင်ပါတယ်။
Should-know Questions for iOS Devs
နောက်ဆုံးအနေနဲ့ iOS Development ကို အတော်လေး ပိုင်နိုင်နေပြီဆိုရင် ဒီ မေးခွန်းတွေရဲ့အဖြေကို ဖြေနိုင်ပြီလားဆိုတာ စမ်းစစ်ကြည့်သင့်ပါတယ်။ ကျွန်တော့်ရဲ့ Twitter ပေါ်က မိတ်ဆွေကောင်းကြီး Aleksandr Morozov က iOS interview questions အခုသုံးဆယ်ကို စုစည်းပေးထားပါတယ်။ ဒီမှာ သွားကြည့်ကြည့်ပြီး ဖြေကြည့်ပါ။ သူကိုယ်တိုင်က အခုမှ iOS Development ကိုစလေ့လာတာဆိုပေမယ့် ဒီမေးခွန်းတွေက သူ့အသိ iOS Dev တွေကိုလိုက်မေးပြီး စုစည်းထားတာလို့သိရပါတယ်။ အပန်းမကြီးရင် သူ့ကိုလည်း follow လုပ်ပေးကြပါဉီး။
ဒါကတော့ အခြား dev တစ်ယောက်က ပြောထားတာပါ။ သူပြောသလိုဘဲ ကျွန်တော်လည်း တစ်ချို့မေးခွန်းတွေရဲ့အဖြေက သိပ်မသေချာပါဘူး။ ဒါတောင် ကျွန်တော်ကိုယ်တိုင် တစ်လနီးပါး iOS interview questions တော်တော်များများကို လေ့ကျင့်ထားဖူးပါတယ်။ ပြောချင်တာက သူက Junior လို့ပြောထားပေမယ့် တစ်ချို့မေးခွန်းတွေက နည်းနည်း deep တဲ့အတွက် senior-level တွေမှ ဖြေနိုင်မယ့်ဟာမျိုးတွေ ပါပါတယ်။ So, don’t take it personally ✌🏻. ဒီဟာတွေ ဖြေနိုင်ရုံလောက်လဲ မလေ့လာပါနဲ့။ မေးခွန်းတစ်ခုစီတိုင်းရဲ့အဖြေကို သေသေချာချာ နားလည်ပြီး ဖြေနိုင်တာမျိုးဖြစ်မှသာ အကျိုးရှိပါမယ်။ မဟုတ်ရင် အလကားပါဘဲ။
နိဂုံး
ဒီ article ကတော့ ကျွန်တော့်ဘဝမှာ ရေးဖူးသမျှတွေထဲ အရှည်ဆုံးဘဲထင်ပါတယ်။ စကားနဲ့ပြောရင် နာရီဝက် လေးဆယ့်ငါးမိနစ်လောက်ပြောရမယ့်ဟာတွေကို ပေထက်အက္ခရာတင်လိုက်တော့ စာလည်းတော်တော်လေးရှည်သွားပါပြီ။ အဆုံးထိ ဖတ်ရှုပေးခဲ့ကြလို့ ကျေးဇူးအထူးတင်ရပါတယ်။ iOS Development နဲ့ပတ်သက်ပြီး မေးချင်တာ အကြံတောင်းချင်တာရှိရင် ကြိုက်တဲ့ social media ကနေ ဆက်သွယ်လို့ရပါတယ်။ ဒီနောက်ပိုင်း Twitter ကိုလည်း ပိုပြီးသုံးဖို့ ကိုယ့်ကိုယ်ကို enforce လုပ်ထားပါတာကြောင့် ဖြစ်နိုင်ရင်တော့ Twitter ကနေဘဲ DM ပေးပါ။ အဲ့တာဆို စာပြန်တာ ပိုမြန်ပါလိမ့်မယ်။