Good Developer
Developer Conference ရဲ့ နောက်ဆုံးပိတ် Discussion မှာ ဆွေးနွေးသွားတဲ့ မေးခွန်းတွေက စိတ်ဝင်စားဖို့ကောင်းသလို ဖြေရှင်းရခက်တဲ့မေးခွန်းတွေလည်း ဖြစ်ပါတယ်။ Discussion အစအဆုံး မမှီလိုက်ပေမယ့် မှီသလောက်မေးခွန်းတွေထဲက အချို့ကတော့ -
- Developer ကောင်းတစ်ယောက်ကို ဘာနဲ့တိုင်းတာမှာလဲ
- Developer ကောင်းတစ်ယောက်ဖြစ်ဖို့ ဘာတွေလုပ်ရမလဲ
- Developer ကောင်းတွေကို လုပ်ငန်း တွေအနေနဲ့ ဘယ်လိုထိမ်းသိမ်းသင့်သလဲ
- Developer တွေကရော အလုပ်ရှင်ကောင်းတွေကို ဘယ်လိုရွေးချယ်ရမလဲ
- လုပ်ငန်းတွေအပေါ်မှာပဲ သစ္စာရှိရှိရေရှည် လုပ်တဲ့ Developer တွေကို လုပ်ငန်းတွေဘက်က ဘယ်လိုအာမခံချက်တွေပေးနိုင်သလဲ
- Freelance လုပ်တာရော အမှန်တစ်ကယ်အလုပ်ဖြစ်ရဲ့လား
- Freelance လုပ်တဲ့သူတွေက ဘာကြောင့် Freelance လုပ်တာလဲ၊ လွပ်လပ်လို့လား၊ ဝန်ထမ်းလုပ်သူတွေထက် အကျိုးအမြတ်ပိုရနေလို့လား
- အလုပ်တွေက အတွေ့အကြုံရှိမှပဲခန့်မယ်ဆိုတာ ဘာဖြစ်လို့ပါလဲ
စတဲ့ မေးခွန်းတွေဖြစ်ပါတယ်။
လူအများဆွေးနွေးတဲ့ Discussion ဖြစ်လို့ ဖြေသူက တိုတိုနဲ့လိုရင်းကိုဖြေဖို့လိုပါတယ်။ ဒါပေမယ့် မေးခွန်းတွေက ခပ်တိုတိုနဲ့ ဖြေလို့ မရနိုင်တဲ့ မေးခွန်းတွေဖြစ်နေပါတယ်။ ဒါကြောင့် တစ်ခုနှစ်လောက်ကိုပဲ ဝင်ဆွေးနွေးဖြစ်ခဲ့ပါတယ်။ ဒီ Post မှာ ပထမမေးခွန်းဖြစ်တဲ့ “Developer ကောင်းတစ်ယောက်ကို ဘာနဲ့တိုင်းတာမှာလဲ” ဆိုတဲ့မေးခွန်းနဲ့ပက်သက်ပြီး ဆွေးနွေးချင်ပါတယ်။
Developer ကောင်းတစ်ယောက်ဖြစ်ကြောင်း ဘာတွေကြည့်ပြီး ဆုံးဖြတ်မလဲဆိုတဲ့ကိစ္စက နည်းနည်းတော့ ပြောရခက်ပါတယ်။ တစ်ယောက်နဲ့တစ်ယောက် တိုင်းတာတဲ့ ရေချိန်တူချင်မှတူမှာပါ။ ကျွန်တော်တိုင်းတာတဲ့ ရေချိန်ကိုဖော်ပြပါမယ်။
Skills and Knowledge
Developer ကောင်းတစ်ယောက်ဖြစ်ဖို့အတွက် Programming Skill နဲ့ Technical Knowledge တွေလိုအပ်တယ်ဆိုတာကတော့ ရှင်းပါတယ်။ နည်းပညာကျွမ်းကျင်မှုမရှိပဲနဲ့တော့ ဘယ်လိုမှ Developer ကောင်းတစ်ယောက်ဖြစ်လာမှာမဟုတ်ပါဘူး။ တစ်ယောက်နဲ့တစ်ယောက် ကျွမ်းကျင်မှုနယ်ပယ်ချင်းတော့ တူမှာမဟုတ်ပါဘူး။ အင်ဂျင်နီယာချင်းတူပေမယ့် တိုက်ဆောက်တဲ့အင်ဂျင်နီယာနဲ့ အင်ဂျင်ဆင်တဲ့အင်ဂျင်နီယာ ကျွမ်းကျင်မှု တူမှာမဟုတ်ပါဘူး။ Enterprise Application Developer တစ်ယောက်နဲ့ Mobile Developer တစ်ယောက်လည်း ကျွမ်းကျင်မှုချင်း တူမှာမဟုတ်ပါဘူး။
တစ်ချို့က Language တစ်ခုနဲ့ Platform တစ်ခုမှာ Expert ဖြစ်ပြီး အခြား Language နဲ့ Platform တွေ သိပ်မသိတာမျိုးဖြစ်နိုင်ပါတယ်။ အချို့ကတော့ တစ်ခုခုမှာ Expert ပါလို့ ပြောလို့မရပေမယ့် Language တစ်ဒါဇင်လောက်နဲ့ ရင်းနှီးကျွမ်းဝင်နေတာမျိုးလည်း ဖြစ်နိုင်ပါတယ်။ နှစ်မျိုးစလုံး လိုအပ်ပါတယ်။ Industry ထဲမှာ အကုန်သိနေတဲ့ Generalist တွေလိုသလို တစ်ခုခုမှာ Expert ဖြစ်နေတဲ့ Specialist တွေလည်း လိုပါတယ်။
ဒီနေရာမှာသတိပြုရမှာက ကျွမ်းကျင်မှု့ (Skill) က သင်ယူလို့ရပါတယ်။ အဲ့ဒီသင်ယူလို့ရတဲ့ကျွမ်းကျင်မှုတွေ ရှိနေယုံနဲ့ Developer ကောင်းလို့ခေါ်ဖို့ မလုံလောက်တဲ့အတွက် “Developer ကောင်းတစ်ယောက်ကို ဘာနဲ့တိုင်းတာမှာလဲ” ဆိုတဲ့မေးခွန်းတွေ ထွက်လာရတာပါ။ ဒါဆိုရင် သင်ယူလို့ မရနိုင်တဲ့ အရည်အချင်းတွေ ကျန်နေသေးလား ?
Conference Discussion မှာတော့ ကိုခွန်သာထက် က Attitude အရေးကြီးတယ်လို့ ဖြေခဲ့ပါတယ်။ သိပ်မှန်ပါတယ်။ Developer ကောင်းတစ်ယောက်ဖြစ်ဖို့ Attitude အရေးကြီးပါတယ်။ ဒါပေမယ့် Attitude ဆိုတဲ့ စကားလုံးက အနည်းငယ် General ဆန်ပြီး ကျယ်ပြန့်ပါတယ်။ ဒါကြောင့် ကျွန်တော်က Developer ကောင်းတွေမှာ ရှိလေ့ရှိတဲ့ Attitude တွေနဲ့ အရည်အချင်းတွေကို ဖော်ပြချင်ပါတယ်။ အဲ့ဒါတွေကတော့ -
- Curiosity
- Self-study and love of learning
- Passion
- Analysis skills
- Abstract Thinking
တို့ပဲဖြစ်ပါတယ်။
1. Curiosity
Curiosity ဆိုတဲ့ စူးစမ်းသိမြင်လိုစိတ် က အရေးအကြီးဆုံးအချက်ဖြစ်ပါတယ်။ ဒီစိတ်အခံ မရှိရင် ထူးချွန်တဲ့ Developer ဖြစ်ဖို့ ခက်ပါတယ်။ Developer ကောင်းတစ်ယောက်ဟာ နည်းပညာအသစ် (သို့မဟုတ်) စိတ်ဝင်စားစရာတစ်ခုခုနဲ့ ကြုံတဲ့အခါ အသေးစိတ်သိလိုတဲ့စိတ် ဖြစ်ပေါ်လာလေ့ ရှိကြပါတယ်။
ဥပမာ Linux မသုံးဖူးသူ (၂) ယောက်ကို Linux သုံးခိုင်းရင် – စူးစမ်းလိုစိတ် မရှိသူက “ဟာ.. အဆင်မပြေပါဘူးကွာ၊ ဘာတွေမှန်းလဲမသိဘူး” ဆိုပြီး လွယ်လွယ်နဲ့လက်လျှော့သွားနိုင်ပါတယ်။ စူးစမ်းလိုစိတ်ရှိသူကတော့ “Windows နဲ့မတူပါလား! Windows မှာဆို ဒီလိုလုပ်ရတယ်၊ ဒီမှာဘယ်လိုလုပ်ရပါလိမ့်! သုံးရတာသိပ်လည်းအဆင်မပြေဘူး၊ သူများတွေ ကောင်းတယ်ဆိုတာ ဘာကိုပြောတာပါလိမ့်!” စသဖြင့် တွေးပါလိမ့်မယ်။
အဲ့ဒီအချိန်မှာ တစ်ယောက်ယောက် ဒီလိုသုံးရတယ်လိုသင်ပေးလိုက်ရင် စူးစမ်းလိုစိတ် မရှိသူက “ဪ.. ဟုတ်လား၊ အဆင်ပြေသားပဲ” ဆိုပြီး အဲ့ဒီအတိုင်းပဲ အမြဲသုံးပါလိမ့်မယ်။ စူးစမ်းလိုစိတ်ရှိသူကတော့ “ဟို လိုကော သုံးလို့မရဘူးလား” လို့တွေးမှာပါ။
Curiosity ရှိဖို့ စာတွေဖတ်ပြီး လေ့လာနေယုံနဲ့ အလိုလို ရှိမလာနိုင်ပါဘူး။ စိတ်ပညာရှင်မဟုတ်လို့ ဒီလေ့လာစူးစမ်းလိုစိတ်ကို လေ့ကျင့်ပျိုးထောင်ယူလို့ရမရ၊ ကျွန်တော်လည်း မပြောတက်ပါဘူး။ ပြောနိုင်တာကတော့၊ Curiosity ရှိခြင်းနဲ့ မရှိခြင်းဟာ Developer ကောင်းတစ်ယောက်နဲ့ သာမာန် Developer တွေကို ခွဲခြားသွားလေ့ရှိတဲ့ အချက်တစ်ချက် ဖြစ်တယ်ဆိုတာပါပဲ။
2. Self-study and love of learning
လေ့လာသင်ယူလိုစိတ်ဟာ လည်း Developer ကောင်းတွေမှာရှိရမယ့် အရေးကြီးတဲ့ အချက်တစ်ချက် ဖြစ်ပါတယ်။ ကျန်တဲ့နေရာတွေမှာ ပျင်းလို့ရပါတယ်၊ လေ့လာရမှာ ပျင်းရင်တော့ Developer ကောင်းတစ်ယောက် ဘယ်လိုမှမဖြစ်နိုင်ပါဘူး။
သူက Curiosity နဲ့ နည်းနည်းတော့ ဆက်စပ်နေပါတယ်။ စူးစမ်းလိုစိတ်မရှိပဲ လေ့လာလိုစိတ်ရှိဖို့ခက်ပါတယ်။ စူးစမ်းလိုစိတ်မရှိပဲလေ့လာရင် တာဝန်အရ ဒီစာကျက်မှ ဒီစာမေးပွဲအောင်မှာမို့လို့လေ့လာတယ် ဆိုတဲ့ သဘောဖြစ်နေပြီး အမှန်တစ်ကယ် တက်ကျွမ်းမှာ မဟုတ်ပါဘူး။ တစ်ခုခုလေ့လာတဲ့အခါ ဒီ Certificate ရမှ ဒီအလုပ်ရမှာမို့လို့လေ့လာတယ် ဆိုတာမျိုးထက် ကိုယ်တိုင်က တက်ကျွမ်းချင်လို့ လေ့လာတယ် ဆိုတာမျိုးပဲ ဖြစ်သင့်ပါတယ်။
စက္ကန့်မလပ်ပြောင်းလဲနေတဲ့ နည်းပညာလောကမှ အဆက်မပြတ် လေ့လာနေနိုင်မှ တော်ကာကျတာပါ။ လေ့လာတယ်ဆိုတဲ့နေရာမှာ Self-study လုပ်နိုင်ဖို့ ပိုအရေးကြီးပါတယ်။ သူများသင်ပေးမှပဲ တက်တယ်ဆိုတဲ့လူဟာ ဘယ်လိုမှ Developer ကောင်းတစ်ယောက်ဖြစ်လာစရာမရှိပါဘူး။ “ဒီနည်းပညာလား၊ လောလောဆယ်တော့ သိပ်မသိသေးဘူးဗျာ၊ ဒါပေမယ့် တစ်ပါတ်လောက် လေ့လာလိုက်ရင် ဖြစ်ပါတယ်” လို့ ကိုယ့်ရဲ့လေ့လာနိုင်စွမ်းကို ယုံ ကြည်နေမှသာ Developer ကောင်းတစ်ယောက်ဖြစ်မှာပါ။
3. Passion
အနုပညာရှင်တွေဟာ သူတို့အလုပ်ကို ဝါသနာကြီးလို့၊ ချစ်မြတ်နိုးလို့၊ ယုံကြည်လို့လုပ်ကြတာပါ။ ပိုက်ဆံရဖို့တစ်ခုတည်းအတွက် သီချင်းဆိုတယ်ဆိုတဲ့ အဆိုတော်က ခွက်တစ်လုံး၊ စဉ့်အိုးဗုံနှစ်လုံးနဲ့ တောင်းစားနေတဲ့ သူတောင်းစားပဲရှိပါတယ် [ သူတို့လည်း အသံကောင်းကြပါတယ် :P ]။
Software Developer တွေမှာလည်း အများစုက ကိုယ်လုပ်ရတဲ့အလုပ်ကို ဝါသနာပါလို့၊ တန်ဖိုးထားဂုဏ်ယူလို့ လုပ်နေကြတာများပါတယ်။ စကားပြောရင် Programming အကြောင်း အားတက်သရောပြောလေ့ရှိတယ်၊ တစ်ခါတစ်ရံ ညအိပ်ရာထဲအထိ ဒီ Bug ကို ဘယ်လို Fix လုပ်ရမလဲစဉ်းစားနေတယ်၊ တစ်ခါတစ်ရံ အချိန်မေ့ ထမင်းမေ့ ဟင်းမေ့ Coding လုပ်နေတက်တယ်၊ အိုး.. အများကြီးရှိပါသေးတယ်။ တစ်ကယ့် Developer ကောင်းတစ်ယောက်ဆိုတာ ဒီလိုအလုပ်လုပ်တာပါ။ အလုပ်ကြိုးစားတယ်ဆိုတာထက် တက်တက်ကြွကြွ စိတ်နှစ်ပြီး အလုပ်လုပ်တက်တယ်လို့ ဆိုလိုတာပါ။
Monday ကို မကြောက်တာ Software Developer ပဲ ရှိပါတယ်။ [ တစ်ကယ်ဟုတ်မဟုတ်တော့ လိုက်မေးကြည့်ဦးမှ :D ]
Software Development ကို အမှန်တစ်ကယ် Passionate ဖြစ်လို့လုပ်တာမဟုတ်ပဲ၊ ခေတ်ကာလအရ ဒီလမ်းကြောင်းကောင်းတယ်ဆိုလို့ ရွေးပြီးဝင်လာတယ်ဆိုတဲ့လူမျိုးဟာ ဘယ်လိုမှ Developer ကောင်းတစ်ယောက်မဖြစ်နိုင်ပါဘူး။
4. Analysis Skill
ခွဲခြမ်းစိတ်ဖြာ အဖြေရှာနိုင်စွမ်း အရည်အချင်းကတော့ လေ့လာသင်ယူလို့ရသလို အသိပညာဗဟုသုတ၊ အတွေ့အကြုံ ကြွယ်၀မှုနဲ့လည်း သက်ဆိုင်ပါတယ်။ ဒါပေမယ့် ပင်ကိုအခံကိုက ဒီအရည်အချင်းကို Sense တစ်ခုအနေနဲ့ ရှိနေတက်သူမျိုး တွေလည်း ရှိပါတယ်။
Software Developer ဆိုတာ လက်တွေ့နယ်ပယ်က ပြဿနာတွေကို ကွန်ပျူတာနဲ့ ဖြေရှင်းပေးဖို့ ကြိုးစားရသူတွေဖြစ်ပါတယ်။ ဒီအရည်အချင်းရှိသူက ပြဿနာတစ်ခုခုကြုံလာရင် ရင်းမြစ်ကိုသိအောင် ရှိထားတဲ့အချက်အလက်တွေပေါ် ခွဲခြမ်းစိတ်ဖြာပြီး ရှာဖွေနိုင်သူတွေ ဖြစ်ပါတယ်။ အဲ့ဒီလို ရှာနိုင်စွမ်း မရှိသူတွေကတော့ သူများရှင်းပြမှပဲ သိပြီး သူများခိုင်းတာကိုပဲ လုပ်တက်တဲ့သူတွေ ဖြစ်နေပါလိမ့်မယ်။
ပြဿနာကို ခွဲခြမ်းစိတ်ဖြာပြီး ထွင်းဖောက်မြင်နိုင်စွမ်းရှိသူကသာ အဲ့ဒီပြဿနာရဲ့အဖြေ Solution ကို ပေးနိုင်မှာပါ။ တစ်ချို့က တစ်ခုခုဆိုရင် ဒက်ကနဲ သဘောပေါက်လောက်အောင် မြင်တက်သူတွေဖြစ်ပြီး တစ်ချို့ကတော့ အဲ့လောက်မလျှင်ပေမယ့် ရရှိလာတဲ့အချက်အလက်တွေကို အခြေခံ၊ စနစ်တစ်ကျ ခွဲခြမ်းစိတ်ဖြာ တွေးတောပြီးမှ ပြဿနာရင်းမြစ်ကို ရှာနိုင်သူတွေလည်း ရှိပါတယ်။
လိုရင်းကတော့ Analysis skill ရှိသူတွေဟာ ပြဿနာကိုမြင်တက်သူတွေဖြစ်ပါတယ်။ Developer ကောင်းတွေမှာသာ ဒီအရည်အချင်းက ရှိပါတယ်။
5. Abstract Thinking
Logical Thinking သို့မဟုတ် Critical Thinking လို့လဲ ပြောနိုင်ပါတယ်။ စိတ်ကူးပုံဖော်နိုင်မှု အရေးအချင်းတစ်ခုဖြစ်ပါတယ်။ တစ်ချို့ပြဿနာတွေက ဦးနှောက်ကို CPU လိုအသုံးချပြီး Logically တွေးတောဆင်ခြင်ပြီး ပုံဖော်ဖြေရှင်းဖို့လိုတက်ပါတယ်။ တစ်ချို့ပြဿနာတွေကတော့ ပြဿနာကို အပိုင်းလိုက် အပိုင်းလိုက် ပိုင်းပြီး Simplify လုပ်ပြီး ဖြေရှင်းဖို့ လိုတက်ပါတယ်။ တစ်ချို့ပြဿနာတွေကတော့ တွေးရိုးတွေးစဉ်ကနေ ဖြန့်ထွက်တွေးတောပြီး အဖြေရှာဖို့ လိုအပ်တက်ပါတယ်။
ဒီအရည်အချင်းက Analysis Skill နဲ့ ဆက်စပ်နေပါတယ်။ ပြဿနာရင်းမြစ်ကို မြင်နိုင်သူမှသာ ပြဿနာတွေရဲ့ အဖြေကိုရှာဖွေနိုင်သူတွေဖြစ်မှာပါ။ ဒီအရည်အချင်းကလည်း လေ့ကျင့်ပျိုးထောင်ယူလို့ ရနိုင်ပေမယ့် ပင်ကိုယ်အခံကိုက ထွင်းဖောက်တွေးတက်တက်သူဖြစ်မယ်ဆိုရင်တော့ ပိုပြီးထူးချွန်တဲ့ Developer ကောင်းဖြစ်မှာ ဖြစ်ပါတယ်။
Conclusion
အခြားသော Communication လို အရေးကြီးတဲ့ အချက်တွေရှိသေးပေမယ် ကျွန် တော်ကတော့ အခုဖော်ပြခဲ့တဲ့ အချက် (၅) ချက်ဟာ Developer ကောင်းတွေမှာ ရှိသင့်တဲ့ Attitude နဲ့ အရည်အချင်းတွေ ဖြစ်တယ်လို့ ထင်ပါတယ်။ စာသင်တဲ့အခါ တွေ့ရတဲ့ တပည့်တွေနဲ့ အလုပ်ထဲက Developer တွေထဲက Developer ကောင်းဖြစ်လာသူတွေအပေါ်အခြေခံပြီး ရွေးထုပ်ထားတဲ့ အချက်တွေလည်း ဖြစ်ပါတယ်။
Developer ကောင်းဖြစ်ဖို့ဆိုတဲ့ ကိစ္စကို Developer တွေကိုယ်တိုင် စိတ်ဝင်စားကြသလို လုပ်ငန်းရှင်တွေလည်း အတော်လေးစိတ်ဝင်စားတာကို တွေ့ခဲ့ရပါတယ်။ ကျွန်တော့်အမြင်မှာ လုပ်ငန်းတွေဖက်ကလည်း Developer ကောင်းတွေပေါ်ထွက်လာဖို့ ပံ့ပိုးပေးဖို့လိုအပ်တယ်လို့ မြင်မိပါတယ်။
Self-study and love of learning က အရေးကြီးတယ်လို့ပြောနေပြီး၊ Software လုပ်ငန်းတွေက Developer တွေကို လွပ်လပ်စွာလေ့လာနိုင်ဖို့ အခြေအနေနဲ့ အခွင့်အရေး ပေးမထားဘူးဆိုရင်တော့ မဟုတ်သေးပါဘူး။ Developer တွေဘက်က Passionate ဖြစ်ပြီး တက်ကြွဖို့လိုသလို၊ Software လုပ်ငန်းတွေဘက်ကလည်း Developer တွေရဲ့ Passion နဲ့ Pride ကို ရိုက်ချိုးတဲ့ အပြုအမူတွေ မလုပ်မိဖို့ လိုအပ်ပါတယ်။ Developer တွေဘက်က Analysis Skill နဲ့ Abstract Thinking လို အရည်အချင်းတွေ ရှိဖို့လိုသလို Software လုပ်ငန်းတွေဘက်ကလည်း Developer တွေအတွက် ဒီအရည်အချင်းတွေကို ထိထိရောက်ရောက်အသုံးချနိုင်မယ့် လုပ်ငန်းခွင်အနေအထား (Environment) တွေ ဖန်တီးပေးထားဖို့လိုပါတယ်။
ကျေးဇူးတင်ပါတယ်။
[ Conference Discussion မှာ မေးခဲ့ကြတဲ့မေးခွန်းတွေထဲက အခြားသောမေးခွန်းတွေကိုလည်း အလျှင်းသင့်တဲ့အခါ ဆက်လက်ဆွေးနွေးသွားပါဦးမယ် ]