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 တို႔ပဲျဖစ္ပါတယ္။
Curiosity ဆိုတဲ့ စူးစမ္းသိျမင္လိုစိတ္ က အေရးအႀကီးဆုံးအခ်က္ျဖစ္ပါတယ္။ ဒီစိတ္အခံ မရွိရင္ ထူးခၽြန္တဲ့ Developer ျဖစ္ဖို႔ ခက္ပါတယ္။ Developer ေကာင္းတစ္ေယာက္ဟာ နည္းပညာအသစ္ (သို႔မဟုတ္) စိတ္ဝင္စားစရာတစ္ခုခုနဲ႔ ၾကဳံတဲ့အခါ အေသးစိတ္သိလိုတဲ့စိတ္ ျဖစ္ေပၚလာေလ့ ရွိၾကပါတယ္။ဥပမာ Linux မသုံးဖူးသူ (၂) ေယာက္ကို Linux သုံးခိုင္းရင္ – စူးစမ္းလိုစိတ္ မရွိသူက “ဟာ.. အဆင္မေျပပါဘူးကြာ၊ ဘာေတြမွန္းလဲမသိဘူး” ဆိုၿပီး လြယ္လြယ္နဲ႔လက္ေလၽွာ့သြားနိုင္ပါတယ္။ စူးစမ္းလိုစိတ္ရွိသူကေတာ့ “Windows နဲ႔မတူပါလား! Windows မွာဆို ဒီလိုလုပ္ရတယ္၊ ဒီမွာဘယ္လိုလုပ္ရပါလိမ့္! သုံးရတာသိပ္လည္းအဆင္မေျပဘူး၊ သူမ်ားေတြ ေကာင္းတယ္ဆိုတာ ဘာကိုေျပာတာပါလိမ့္!” စသျဖင့္ ေတြးပါလိမ့္မယ္။အဲ့ဒီအခ်ိန္မွာ တစ္ေယာက္ေယာက္ ဒီလိုသုံးရတယ္လိုသင္ေပးလိုက္ရင္ စူးစမ္းလိုစိတ္ မရွိသူက “ဪ.. ဟုတ္လား၊ အဆင္ေျပသားပဲ” ဆိုၿပီး အဲ့ဒီအတိုင္းပဲ အျမဲသုံးပါလိမ့္မယ္။ စူးစမ္းလိုစိတ္ရွိသူကေတာ့ “ဟိုလိုေကာ သုံးလို႔မရဘူးလား” လို႔ေတြးမွာပါ။Curiosity ရွိဖို႔ စာေတြဖတ္ၿပီး ေလ့လာေနယုံနဲ႔ အလိုလို ရွိမလာနိုင္ပါဘူး။ စိတ္ပညာရွင္မဟုတ္လို႔ ဒီေလ့လာစူးစမ္းလိုစိတ္ကို ေလ့က်င့္ပ်ိဳးေထာင္ယူလို႔ရမရ၊ ကၽြန္ေတာ္လည္း မေျပာတက္ပါဘူး။ ေျပာနိုင္တာကေတာ့၊ Curiosity ရွိျခင္းနဲ႔ မရွိျခင္းဟာ Developer ေကာင္းတစ္ေယာက္နဲ႔ သာမာန္ Developer ေတြကို ခြဲျခားသြားေလ့ရွိတဲ့ အခ်က္တစ္ခ်က္ ျဖစ္တယ္ဆိုတာပါပဲ။
2. Self-study and love of learnin
gေလ့လာသင္ယူလိုစိတ္ဟာ လည္း 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) ေတြ ဖန္တီးေပးထားဖို႔လိုပါတယ္။ေက်းဇူးတင္ပါတယ္။
via Ko Ei Maung
No comments:
Post a Comment
Thanks for your comments
Welcome from cyberoot