Programmer တစ်ယောက်ဖြစ်ဖို့ အချိန်ဘယ်လောက်ပေးရမလဲ


ဒီမေးခွန်းက တော်တော်များများ လာမေးကြတယ်။


ကျွန်တော်လည်း ပြန်ဖြေချင်တယ်။ ဒါပေမယ့် ဖြေရမှာလည်း နည်းနည်းခက်နေတယ်။ ဘာကြောင့်တုန်းဆိုရင် ...


ကျွန်တော် ဆယ်တန်းအောင်ကတည်းက Programming ကို လေ့လာခဲ့တာ အခုဆို "၁၁" နှစ်ရှိပြီ။ ဟုတ်တယ်။ ၁၁ နှစ်။ ဒါပေမယ့် အထင်မကြီးလိုက်နဲ့ဦး။ တကယ် Concept ထိထိမိမိနဲ့ Program တစ်ပုဒ်ကို ကောင်းကောင်းမွန်မွန် ရေးတတ်တာ ၃ နှစ်လောက်ပဲ ရှိသေးတယ်။ ဒါတောင် ခုထိ လေ့လာလို့ကို မပြီးနိုင်သေးဘူး။


ဒါဆို Programmer တစ်ယောက်ဖြစ်ဖို့ ၁၀ နှစ် အချိန်ပေးရမှာလား ဆိုတော့လည်း မဟုတ်သေးပြန်ဘူး။


စစ်သားတွေလိုပဲ Programmer တွေမှာလည်း ကြယ်ပွင့်တွေ၊ အဆင့်တွေ ရှိတယ်။ ဒါကြောင့် အဆင့်တစ်ခုချင်းစီတိုင်းမှာ ပုံမှန် အချိန်ဘယ်လောက် ပေးရမလဲ၊ နောက်တစ်ဆင့်တက်ဖို့ ဘယ်လိုဖြတ်ကျော်ရမလဲ ဆိုပြီး ပြောရင် ပိုသဘာဝကျလိမ့်မယ်။


ကျွန်တော်ကတော့ ယေဘုယျ အဆင့် ၅ ဆင့် ခွဲထားတယ်။


၁. ချာတိတ် ဘဝ

-----

Programming ကို စပြီးထိတွေ့မိတယ်။ If..else တွေ၊ for loop တွေ ဘာညာ ရေးကြည့်တယ်။ Programming Syntax လေးတွေ၊ Data type လေးတွေ စသိလာတယ်။


မှတ်ချက်။ ။ အခုလို ချာတိတ်ဘဝ မှာ အရေးကြီးတာက "အများကြီး သိအောင် မကြိုးစားနဲ့။ ကိုယ်သိထားတဲ့ နည်းနည်းလေးကိုပဲ သေချာသိအောင်လုပ်"။ အထူးသဖြင့် "Google ခေါက်တတ်အောင် လုပ်"။ ပြီးရင် Demo Project ပိစီကွေးလေးတွေ "အစအဆုံး" ရေးပြီး လေ့ကျင့်။ ဒါမှ Code အပိုင်းအစလေးတွေ ရေးတဲ့ ချာတိတ်ဘဝကနေ Program တစ်ပုဒ်လုံးရေးနိုင်တဲ့ Coder ဘဝကို ရောက်မှာ။


ဖြတ်ကျော်ဖို့ ကြာချိန်။ ခန့်မှန်းချေ ၆လ ကနေ ၉လ။


၂. မျက်နှာငယ် Coder ဘဝ

-----

ချာတိတ်ဘဝကို ကျော်လွန်ပြီး Demo Project ၂ ခု၊ ၃ ခုလောက် ရေးကြည့်လာတယ်။ သေချာတာကတော့ Code တွေ ကောင်းကောင်းရေးနိုင်နေပြီ။ ဒါပေမယ့် Real-world Project အတွေ့အကြုံမရှိသေးဘူး။ ဒါကြောင့် မျက်နှာငယ် ရတယ်။


မှတ်ချက်။ ဒီအဆင့်မှာ ကြိုးစားသင့်တာက Real-world Project စရေးနိုင်အောင် ကြိုးစားရမယ်။ Project တစ်ခုလုံး မဟုတ်တောင် အစိတ်အပိုင်း တစ်ခုလောက် ရေးခွင့်ရအောင် လုပ်ရမယ်။ ဒါမှ Real-world Project တွေဟာ Online tutorial တွေထဲက CRUD လောက် မရိုးရှင်းဘူးဆိုတာ သိလာလိမ့်မယ်။


ဖြတ်ကျော်ဖို့ ကြာချိန်။ အနည်းဆုံး ၁ နှစ်ကနေ ၂ နှစ် ပတ်ဝန်းကျင် (ယခုအဆင့် တစ်ခုတည်းအတွက် ဖြတ်ကျော်ရန် ကြာချိန် ဖြစ်ပါတယ်။)


၃. ဒိုင်ကြောင် Coder ဘဝ

-----

Real-world Project လေးတွေ အတွေ့အကြုံရှိလာတယ်။ ကိုယ့်အသုံးပြုနေတဲ့ Programming Language ရဲ့ Syntax အပိုင်း၊ သက်ဆိုင်ရာ Framework ရဲ့ feature အပိုင်းတွေကို စုံစုံလင်လင် သိလာတယ်။ ကိုယ်ရေးချင်တဲ့ Feature ကို ကိုယ့်အားကိုယ်ကိုး ပြီး အစဆုံး ရေးနိုင်လာတယ်။


ဒါပေမယ့် Code structure အကြောင်း ထည့် မစဉ်းစားတတ်သေးဘူး။ Underlying design principles တွေ မသိသေးဘူး။ Library တွေ၊ Framework တွေ ယူသုံးတယ်။ ဒါပေမယ့် Runtime အကြောင်း မသိဘူး။ Memory Management အကြောင်း မဖတ်ဘူး။


မှတ်ချက်။ ဒါဆိုရင် Software Developer ဆိုတာထက် ကျွမ်းကျင့်အဆင့် Coder ဘဝ ပဲ ရှိသေးတယ်။ ဒီအဆင့်မှာ လိုအပ်တာက "ကိုယ် မှားနေတာလေးတွေကို ပြောပြဆုံးမ လမ်းညွန်ပေးမယ့် Senior ကောင်းကောင်း တစ်ယောက်" ပဲ။


ဖြတ်ကျော်ဖို့ ကြာချိန်။ ဒီအဆင့်ကို ဖြတ်ကျော်ဖို့ အချိန် ၁ နှစ်လောက်တော့ အနည်းဆုံး ပေးရတတ်တယ်။ လမ်းညွှန်ပေးမယ့်သူ မရှိ၊ ကိုယ်ကိုတိုင်ကလည်း လေ့လာအားနည်းလို့ အခန့်မသင့်ရင် တစ်သက်လုံး ဒီအဆင့်နဲ့ပဲလည်း ဇာတ်သိမ်းသွားနိုင်တယ်။


၄. အညွန့်တလူလူ Developer ဘဝ

-----

Software engineering concepts တွေ၊ Clean code best practices တွေ၊ Software design အကြောင်းတွေ စပြီး ဖတ်လာတယ်။


Code တွေကို ပိုပြီး ဂရုတစိုက် ရေးလာတယ်။ Result ထွက်ရုံရေးနိုင်တာနဲ့ မကျေနပ်တော့ဘူး။ Refactor တွေ၊ Optimize တွေ လုပ်တတ်လာတယ်။ အဓိက ကတော့ ကိုယ်သိဖို့ လိုအပ်နေသေးတယ်၊ လေ့လာဖို့ လိုအပ်နေသေးတယ် ဆိုတဲ့ အသိ ဝင်လာတယ်။


မှတ်ချက်။ ဒါပေမယ့် Second System Syndrome လည်း ဝင်တတ်တယ်။ ကိုယ်ဖတ်ထားသမျှ Design Pattern တွေ၊ Principles တွေကို သင့်သည်၊ မသင့်သည် မစဉ်းစားပဲ ရှိသမျှ အကုန်ထည့်သုံးမိတတ်တယ်။ ဒါကြောင့် Over-engineering ဖြစ်သွားတတ်တယ်။


ဖြတ်ကျော်ဖို့ ကြာချိန်။ ခန့်မှန်းချေ ကြိုးစားရင် ၁ နှစ်ကနေ ၂ နှစ် ပတ်ဝန်းကျင် (ယခုအဆင့် တစ်ခုတည်းအတွက် ဖြတ်ကျော်ရန် ကြာချိန် ဖြစ်ပါတယ်။)


၅. ဆာမူရိုင်း Developer ဘဝ

-----

Good code နဲ့ Bad code ကို ခွဲခြားတတ်သွားပြီ။ Abstract လုပ်ပြီး ရေးတတ်လာတယ်။ Code ရေးယုံမဟုတ်ပဲ System Design အမြင်၊ Architectural အမြင်ပါ ရှိလာတယ်။


Programming language ရဲ့ Syntax level ထက် Semantic level ၊ Pragmatic level ထိပါ သိလာတယ်။


Framework ကို မျက်လုံးမှိတ်ပြီး "ပေးထားတာ ယူသုံး" မဟုတ်တော့ဘူး။ ဒါလေးကတော့ ဒီလို ဖြစ်ရင် ပိုကောင်းမယ် ဆိုတာ ကိုယ်ပိုင် အသိလေးနဲ့ ဝေဖန်ပိုင်းခြားတတ်လာတယ်။


မှတ်ချက်။ ကိုယ်အသုံးပြုနေကျ Tech Stack ကနေ အခြား Stack တွေကို "Engineering" အမြင်ကနေ လေ့လာကြည့်သင့်တယ်။


ဒါမှ မျှတတဲ့ အမြင် ရှိမယ်။ Programming Paradigm တွေ ကွဲသွားတာ ခံစားမိမယ်။ သူ့နေရာနဲ့သူ Engineering Concepts တွေကို ဘယ်လို အသုံးပြုသွားလဲဆိုတာ သိနိုင်မယ်။


-----


ဒီ အဆင့်တွေ အားလုံးဖြတ်ကျော်ပြီး ဘာသိလာရသလဲဆိုရင် ...


" တောင်တန်းကြီးကို ဖြတ်ကျော်ပြီး တောင်ထိပ်ရောက်တော့ ရှေ့မှာ ပင်လယ်ကြီး ရှိနေသေးတာကို မြင်သွားတယ်။ ဒီထက် လေ့လာစရာတွေ အများကြီး ကျန်နေသေးတယ်။ ဒါပေမယ့် အကုန်လုံး ရှိသမျှလေ့လာဖို့ အချိန်ရော၊ မှတ်ဉာဏ်ရော မလုံလောက်မှန်းလည်း သိလာတယ်။ အဲ့တော့ လူတွေကို ပိုတန်ဖိုးထားတတ်လာလိမ့်မယ်။ အောင်မြင်ချင်ရင် စုပေါင်းလုပ်မှပဲ ရမယ်။ "


ဒီ လမ်းကြောင်းလေးဟာ ကျွန်တော့်ကိုယ်ပိုင်အတွေ့အကြုံပေါ် မူတည်ပြီး Software Developer တစ်ယောက်ရဲ့ Career Development အဆင့်ဆင့်နဲ့ ပေးရမယ့်အချိန်အတိုင်းအတာအပေါ်ကို မြင်တဲ့ အမြင်ပါ။


ဒီထက် မြင့်တဲ့ အဆင့်တွေလည်း ရှိဦးမယ်။ အခုကတော့ ကိုယ့်အတွေ့အကြုံနဲ့ ဉာဏ်မှီသလောက်လေးပဲ။


Credit: 

Nay Lin Aung