Source Code Control (Version Control System)

Software Development လုပ်တဲ့အချိန်မှာ အရေးကြီးတဲ့အချက်တစ်ခုဟာ ရေးနေတဲ့ Sorce Code များကိုထိမ်းသိမ်းရခြင်း ဖြစ်ပါတယ်။ ရေးသားတဲ့နေရာမှာ အမြဲပြုလုပ်ရလေ့ရှိတာက မူရင်းရေးပြီးသား Sorce Code များကိုအကြောင်းအမျိုးအမျိုးကြောင့် ပြင်ပြီးစမ်းရတတ်ပါတယ်။ အဲဒီလိုပြုလုပ်ရင်း မကောင်း၍သော်လည်းကောင်း မူရင်းကိုပြန်လိုချင်၍သော်လည်းကောင်း တစ်ခါတစ်ရံမှာခက်ခဲ့တတ်ပါတယ်။ ဒီနေရာမှာ Source Code Control (Version Control System) တွေဟာ အများကြီးအရေးပါလာပါတယ်။

ဒီလိုအရာတွေကို ပုံမှန်အားဖြင့်ရှင်းလေ့ရှိတာက စမ်းသပ်မှု့ပြင်ဆင်မှု့မလုပ်ခင်မှာ backup လုပ်ပြီးစမ်းသပ်ပြင်ရပါတယ် မူရင်းပြန်လိုချင်တယ်ြဖစ်လာရင်တော့ backup လုပ်ထားတာကို ပြန်သုံးလို့ရပါတယ်။ နောက်ပြီးတော့ backup လုပ်ရာမှာလည်း ဖိုင်တွေကို Version သော်လည်းကောင်း နေ့စွဲအချိန်လိုသော်လည်းကောင်း ထည့်ပြီးမှတ်ထားမယ်ဆိုရင် ထိမ်းသိမ်းရလွယ်ပါတယ်။ backup လုပ်ထားတဲ့ ဖိုင်တွေကိုလည်း အားလုံးအတွက် တစ်နေရာတည်းမှာထားပြီး shared directory အဖြစ်ဆိုရင်အားလုံး အသုံးပြုရလွယ်ကူပါတယ်။ ဒါတွေဟာ Source Code Control ရဲ့အခြေခံအချက်တွေပါ။

Version Control System တွေကိုဘာလို့ အသုံးပြုရတယ်ဆိုတဲ့ အချက်တွေဟာလည်း အရေးကြီးပါတယ်။ shared directory တွေမှာက ပရောဂျက်တစ်ခုအတွက်နဲ့ ပရိုဂရမ်မာနည်းရင် ညှိနှိုင်းသုံးစွဲလို့ရပေမယ့် များလာရင်တော့ Version Control အင်မတန်ရှုပ်ထွေးလာပါတယ် နောက်ပြီးတော့ အများသုံးစွဲတာဖြစ်လို့ မူရင်းထားတဲ့ shared directory မှာပဲ တိုက်ရိုက်ပြုပြင်ဖို့ကြိုးစားရင် တစ်ခုတည်းကို တစ်ချိန်တည်းမှာပဲ လူအများဝိုင်းပြင်မိတာတွေ ဖြစ်လာနိုင်ပြီးတော့ ပြဿနာများစွာ ရှုပ်ထွေးလာမှာဖြစ်ပါတယ်။ နောက်တစ်ချက်က လူအများအသုံးပြုတာဖြစ်လို့ မိမိရေးသားထားတဲ့ Soruce Code များနဲ့အတူ ပြုလုပ်ခဲ့အတဲ့ အပြောင်းအလဲများကို မှတ်တမ်းတင်ဖို့လည်း လိုအပ်ပါတယ် ဒီနေရာမှာ shared directory တွေဟာ Soruce Code ရဲ့အတွင်းမှာပဲ Comment များရေးသားရုံကလွဲပြီး မထောက်ပံ့ပေးနိုင်တော့ပါဘူး။

Shared directory တွေမှာဖြစ်နိုင်တဲ့ အခက်အခဲပြဿနာကို အောက်မှာပုံအဖြစ်နဲ့ပြထားပါတယ်။ ပုံမှာ လူနှစ်ယောက်ဟာ ဖိုင်တစ်ခုကို တစ်ပြိုင်တည်းဖတ်ပြီး ပြုပြင်ကြပါတယ် ဒီနေရာမှာ တစ်ယောက်ပြင်ထားတဲ့ ဖိုင်တစ်ခုကို နောက်တစ်ယောက်က မူရင်းဖိုင်ထင်တဲ့အတွက် ထပ်ရေးတဲ့အတွက်အခက်အခဲဖြစ်နိုင်ပါတယ်။

အလွယ်ဆုံးဖြေရှင်းနည်းကတော့ အသုံးပြုသူတစ်ယောက်အနေနဲ့ ပြုပြင်လိုခဲ့ပါက Lock ချတဲ့နည်းနဲ့ ​ဖြေရှင်းလေ့ရှိပါတယ် အချို့သော Operating System များမှာလည်း Shared file တွေကို Lock ချပေးထားနိုင်ပါတယ်။ သရုပ်ပြပုံကိုအောက်မှာ ကြည့်ရှု့နိုင်ပါတယ်။ Lock ကိုသုံးချင်းအားဖြင့် သာမန်အနေအထားအတိုင်း Shared လုပ်ရင်ြဖစ်လေ့ရှိတဲ့ နှစ်ယောက်ပြိုင်ရေးတဲ့ ပျောက်ဆုံးတာမျိုးမဖြစ်နိုင်တော့ပါဘူး။ ဒါပေမယ့်လည်း Lock လုပ်တဲ့အတွက် ဖြစ်လာနိုင်တာက Lock ပေးနိုင်ဖို့ သက်ဆိုင်တဲ့ System တစ်ခုလိုအပ်လာပါတယ်။ တစ်ခါတစ်ရံမှာ တူညီတဲ့ ဖိုင်တစ်ခုဖြစ်ပေမယ့် မတူညီတဲ့နေရာတွေကို နှစ်ဦးပြင်ဆင်လိုခဲ့ပါက Lock ဟာခွင့်ပြုပေးလို့မရတဲ့အတွက် အခြားပြင်ဆင်လိုသူတစ်ဦးဟာ စောင့်ဆိုင်းရမှာဖြစ်ပါတယ်။

Version Control System(VCS) တွေမှာတော့ အောက်မှာဖော်ပြထားတဲ့ ပုံမှာပြထားတဲ့အတိုင်း အထက်ပါအခက်အခဲတွေကိ ​ဖြေရှင်းလေ့ရှိပါတယ်။ ​ဖြေရှင်းပုံကိုတော့ Copy-Modify-Merge လို့ခေါ်လေ့ရှိပါတယ်။ သာမန် Shared directory တွေအတိုင်း လူအများအနေနဲ့ ကူးယူပြီးတော့ ပြင်ဆင်နိုင်ပါတယ်။ VCS အနေနဲ့ မည်သူကမည်သည့် Version ကို ကူးယူသွားတယ်ဆိုတာ မှတ်သားထားလိုက်ပြီး Repository ထဲမှာမူရင်း Version ရှိမှသာပြင်ဆင်ခွင့်ပေးပါတယ် အကယ်၍သာ အခြားလူတစ်ဦးက ဝင်ရောက်ပြင်ဆင်သွားပါက ပြင်ဆင်ခွင့်မပေးတော့ပဲ Version ပြောင်းသွားကြောင်း အကြောင်းကြားပြီး ပြောင်းလဲသွားတဲ့ Version ကိုထပ်မံဖတ်ရှု့စေပြီး ထပ်မံပြင်ဆင်စေမှာဖြစ်ပါတယ်။ ဒီနည်းအားဖြင့် Shared directory ရဲ့အခက်အခဲကို ပြေလည်စေပြီး Lock မလိုအပ်ပဲ တစ်ပြိုင်နည်း လူအများပြင်ဆင်နိုင်စေမှာ ဖြစ်ပါတယ်။ Lock မလိုအပ်​ဘူးဆိုပေမယ့် ချို့ယွင်းချက်အနေနဲ့ လိုအပ်နိုင်တဲ့ အ​ခြေအနေတွေလည်း ဖြစ်လာနိုင်ပါသေးတယ်။

VCS တွေမှာအများအားဖြင့် အောက်မှာဖော်ပြထားတဲ့ အချက်များကို အထောက်အကူပြုလေ့ရှိပါတယ်။

(၁) Backup and Restore: သက်ဆိုင်ရာဆော့ဝဲ Soruce Code များကို Backup and Restore လုပ်ပေးနိုင်ရပါမယ် Backup and Restore ဆိုရာမှာ အချိန်အလိုက်လုပ်ဆောင်ပေးနိုင်ရပါမယ် ဒီအချက်ဟာတော့ shared directory မှာလည်း လုပ်ပေးနိုင်တာဖြစ်တာကြောင့် ထူးခြားတယ်မဆိုနိုင်ပါဘူး ဒါပေမယ့် VCS မှာတစ်ခါတည်း ပါလာတဲ့အတွက် Backup and Restore ပိုမိုလွယ်ကူနိုင်ပါတယ်။

(၂) Synchronization: ပုံမှန်အားဖြင့် Soruce Code များဟာ တစ်နေရာတည်းမှာ ထိမ်းသိမ်းထားတာဖြစ်ပြီး ပြင်ဆင်လိုတယ်ဆိုပါက မိမိရဲ့ကိုယ်ပိုင် စက်အတွင်းကို ကူးယူပြီးမှသာပြင်ဆင်လို့ရပါတယ် ပြင်ဆင်ပြီးလျင်တော့ မူရင်းထိမ်းသိမ်းတဲ့နေရာကို ပြန်လည်ပို့ပြီး အပြောင်းအလဲများကို မှတ်တမ်းတင်ရပါတယ်။ လူအများတစ်ပြိုင်တည်း ပြင်ဆင်နေတာ ဖြစ်တဲ့အတွက် မိမိယူထားတဲ့ Soruce Code များဟာ နောက်ဆုံးအပြောင်းအလဲကို လိုကောင်းလိုမှာ ဖြစ်လာနိုင်ပါတယ် VCS များမှာတော့ Synchronization ကိုလုပ်ပေးနိုင်စွမ်း ပါလေ့ရှိတာကြောင့် Synchronization ဟာ လူကိုယ်တိုင်လုပ်စရာမလိုအပ်ပါဘူး။

(၃) Undo: မိမိပြင်ဆင်လိုတဲ့ Soruce Code တွေကိုကူးယူပြင်ဆင်ပြီးမှ မူရင်းအခြေအနေ ပြန်လိုချင်ခဲ့လျင် လိုအပ်တဲ့ နောက်ဆုံးအခြေအနေကို အလွယ်တကူပြန်လည်ရရှိနိုင်ပါတယ်။ အများအားဖြင့် မိမိတိုပြန်လည်ရောက်ရှိချင်တဲ့ Version or Revision အခြေအနေကို ပြန်လည်ကူးပြောင်းလို့ရပါတယ်။

(၄) Track Changes: မိမိတို့ပြင်ဆင်လိုက်တဲ့ အကြောင်းအရာတွေကို မှတ်ချက်များရေးသား ပြင်ဆင်ချင်တယ်ဆိုရင် ပြောင်းလဲတဲ့အကြိမ်တိုင်းမှာ မိမိတို့မှတ်သားလိုတဲ့ ပြောင်းလဲချက်များကို ရေးသားထိမ်းသိမ်းလို့ရပါတယ်။ ဒီအချက်တွေဟာ မိမိတို့ရဲ့ဆော့ဝဲမှာ ဘယ်လိုအပြောင်းအလဲတွေ ရှိခဲ့တယ်ဆိုတာတွေကို လိုအပ်လာပါကပြန်လည် စီစစ်ရာမှာ အသုံးပြုကြပါတယ်။

(၅) Track Ownership: လူအများနဲ့ အလုပ်လုပ်တာ ဖြစ်တဲ့အတွက် ပြုလုပ်သွားတဲ့ အပြောင်းအလဲတွေကို ပြန်လည်စီစစ်နိုင်ဖို့လိုပါတယ်။ VCS တွေမှာ Track Changes တွေအပေါ်မှာ ဘယ်သူကဘယ်လို ပြောင်းလဲသွားတယ်ဆိုတာကို ပြန်လည်ပြီးတော့ စီစစ်နိုင်အောင် မှတ်သားထားပေးနိုင်ပါတယ်။ တစ်ချိန်မှာပြဿနာရှိလာရင် မည်သူပြောင်းလဲသွားလို့ ဖြစ်ရတယ်ဆိုတာမျိုး ပြန်လည်ရှာဖွေပေးနိုင်ပါတယ်။

(၆) Sandboxing: မူရင်း Soruce Code များကို ပြင်ဆင်လိုပါက VCS ထံကနေ မိမိတို့ထံကိုကူးယူပြီးတော့ ပြင်ဆင်စမ်းသပ်တာ ဖြစ်တဲ့အတွက် စမ်းသပ်မှု့တွေ ပြင်ဆင်မှု့တွေပြီးတဲ့ အချိန်မှသာ VCS ထဲကို ပြောင်းလဲမှု့ပြုလုပ်တဲ့အတွက် မူရင်း VCS ကိုထိခိုက်စေမှု့မရှိပါဘူး။ ဒီနေရာမှာ VCS ဟာ File Server မဟုတ်ဘူးဆိုတာ ဆိုလိုပါတယ် မိမိတို့ပြင်ချင်သလောက်ပြင် VCS ထဲကိုပို့ဆိုတာမျိုးမလုပ်သင့်ပါဘူး အတိုင်းအတာတစ်ခုအထိ ပြုပြင်ပြီးမှသာ VCS ထဲကိုပြောင်းလဲရပါတယ် ဒါမှသာ Revision တစ်ခုနဲ့တစ်ခု ဘယ်လောက်ကွာခြားတယ်ဆိုတဲ့ Track Changes များဟာအသုံးဝင်မှာဖြစ်ပါတယ်။

(၇) Branching and merging: အပေါ်မှာပြောခဲ့တဲ့ Sandboxing ဟာကိုယ်ကူးယူထားတဲ့ Source code များကိုစိုက်ကြိုက် စမ်းသပ်မှု့ဖြစ်ပါတယ် အကယ်၍သာ အဲဒီ့စမ်းသပ်မှု့များမှာလည်း အဆင့်တွေများနိုင်သလို Track Changes တွေကိုလည်း မူရင်း VCS လိုလိုချင်တယ်ဆိုရင် VCS မှာပဲ စမ်းသပ်ဖို့အတွက် Branching အဖြစ်ခွဲထုတ်ပြီး အသုံးပြုနိုင်ပါတယ်။ Branch တစ်ခုစမ်းသပ်ပြီးလို့ မူရင်းထဲကို ပြောင်းလဲမှု့တွေကို ပေါင်းထည့်တာကိုတော့ VCS မှာ merging လုပ်တယ်လို့ ခေါ်လေ့ရှိပါတယ်။

( VCS များမှအခေါ်အဝေါ်များ၊ SVN ဖြင့်သရုပ်ပြ၍ ပုံနှင့်ပြထားခြင်းများ ဆက်ရန် )

အောက်ဖော်ပြပါ References များမှဖတ်ပြီး အဆင်ပြေသလို ရေးထားခြင်းဖြစ်သည် မူရင်းနှင့်လွဲနိုင်ပါသည် စိတ်ဝင်စားလျှင်သွားဖတ်ပါ စာရင်းများအောက်တွင်ပြထားသည်။

References

[1] http://betterexplained.com/articles/a-visual-guide-to-version-control/
[2] http://svnbook.red-bean.com/en/1.5/index.html

[3] http://www.dwheeler.com/essays/scm.html
[4] http://en.wikipedia.org/wiki/Version_control
[5] http://en.wikipedia.org/wiki/Versioning_file_system
[6] http://www.ericsink.com/scm/source_control.html
[7] http://en.wikipedia.org/wiki/Comparison_of_revision_control_software
[8] http://better-scm.berlios.de/comparison/

iBus, KMFL and Myanmar Unicode

ဒီရက်ပိုင်း စာ​မရေးဖြစ်သလောက်ြဖစ်နေတယ် ဖြစ်ရတာက မအားတာရယ် နောက်ပြီးတော့ ကွန်ပျူတာကနည်းနည်း ဒုက္ခပေးနေတယ် တင်ထားတာတွေ များလွန်းလို၌ ဝင်းဒိုးကတစ်ခါဖွင့်ရင် ၁၅ မိနစ်လောက်စောင့်မှ သုံးလို့ရသလိုဖြစ်နေတော့ အားတဲ့အချိန်လေးသုံးတာ အဲလောက်စိတ်မရှည်ဘူးဖြစ်တယ် ဒါနဲ့ Linux ​ဘက်မှာပဲသုံးနေဖြစ်တယ်။ ဖြစ်ချင်တော့ Linux ဘက်က Unicode ကဘုရားစူးမိုးကြိုးပစ် ကီးဘုတ်ြဖစ်နေတော့ ရိုက်လို့အတော်ခက်တယ် အဲဒါနဲ့ စာလည်းရေးမရဘူးဖြစ်နေတယ်။

လိုက်ရှာကြည့်တော့ ThanlwinSoft ကလုပ်ထားတဲ့ ကီးဘုတ်ကရှိတယ် Ubuntu Repository ထဲမှာကိုပဲ Package က kmfl-keyboards-mywin ဆိုတဲ့နာမည်နဲ့ပါပါတယ် ဒါပေမယ့်သူက SCIM ကိုသုံးထားတဲ့ဟာဆိုတော့ အခုက iBus ကို Default သုံးနေတဲ့အချိန်ြဖစ်နေတော့ နည်းနည်းလေး ခေတ်နောက်ကျနေပါပြီ။ အဲဒါနဲ့​ KMFL ကိုသွားကြည့်တော့ SCIM ရော iBus ရောနှစ်ခုလုံးမှာသုံးလို့ရပါတယ်။ လုပ်ဖို့လိုတာက iBus အတွက် KMFL ကို Install လုပ်ရပါမယ် Compile လုပ်ယူချင်ရင်တော့ မူရင်းဆိုက်မှာ Source code ကိုယူလို့ရတယ် Binary ပဲလိုချင်ရင်တော့ SIL Repository ကိုထည့်ဖို့လိုမယ်။

deb http://packages.sil.org/ubuntu lucid main

KMFL ကို iBus အတွက် package ကို Install လုပ်ဖို့လိုမယ်။ Ubuntu လိုကတော့လွယ်ပါတယ် apt နဲ့ Install လုပ်လိုက်ရုံပါပဲ။

apt-get install ibus-kmfl

အဲဒါပြီးရင်တော့ Keymen Source Code ရှိရင်အဆင်ပြေပြီ ဗမာစာအတွက် ကီးဘုတ်က Thanlwin Soft မှာ myWin ရှိတယ် အဲဒါကိုယူလည်းရတယ် ဒါမှမဟုတ် Myanmar 3 ကလည်း Open Source လုပ်ထားတော့ သူ့ဆီက ကီးဘုတ်လည်း ယူလို့ရတယ် အဲဒီ့ Keyman Source File .kmn ကို

/usr/share/kmfl

ထဲကိုကူးထည့်လိုက်ရင်ရပြီ root access လုပ်ခွင့်မရှိရင်လည်း ကိုယ့်ရဲ့ Home ထဲမှာပဲ .kmfl ဆိုပြီး directory တစ်ခုနဲ့ကူးထည့်လိုက်လည်းရတယ် ကိုယ့်တစ်ယောက်တော့ သုံးလို့ရပါတယ်။ အဲဒါဆို iBus ကိုဖွင့် ကီးဘုတ်အသစ်ထည့် ကီးဘုတ်အသစ်က Other အောက်မှာပဲတယ် အဲဒါဆိုသုံးလို့ရပြီပဲ။ ဒါကိုဘိုလိုရေးထားတာ ဖတ်ကြည့်ချင်ရင်တော့ အောက်ကလင့်ကိုသာ သွားကြည့်ပါ SIL မှာအသေအချာ ရေးထားပြီးသားရှိပါတယ်။

http://linux.lsdev.sil.org/wiki/index.php/Installing_KMFL_on_Ubuntu

ပြဿနာရှင်းတတ်ဖို့အရေးကြီးတယ်

Software Development လုပ်တဲ့လူတစ်ယောက်အနေနဲ့ လိုအပ်တဲ့ ကျွမ်းကျင်မှု့တွေ အမျိုးမျိုးရှိပါတယ် ပထမဆုံးအနေနဲ့ လူလိုတွေးတာကို ဖျောက်ပြီးတော့ ကွန်ပျူတာအလုပ်လုပ်သလို တွေးတတ်ရပါတယ် ဒုတိယအနေနဲ့ ကွန်ပျူတာအလုပ်လုပ်သလို ခိုင်းနိုင်ဖို့အတွက် Programming Language တစ်ခုခုကို အရင်ဆုံးကျွမ်းကျင်အောင် လေ့လာရပါတယ် တတိယအနေနဲ့က နမူနာပြဿနာအတု တွေကိုဖြေရှင်း ကြည့်ရပါတယ်။ နမူနာပြဿနာအတုဆိုရာမှာ ကိုယ်တိုင်က System တစ်ခုသတ်မှတ်ပြီး Implement လုပ်ကြည့်ရပါမယ် ဥပမာပြောရရင် Programming Language တစ်ခုလေ့လာအပြီးမှာ အဲဒီ့ Programming Language ကိုသုံးပြီးတော့ System တစ်ခုရေးကြည့်တာမျိုးကို ဆိုလိုပါတယ်။

သင်မှတတ်တယ်ထင်တဲ့ ကိုယ့်လူမျိုးရဲ့ အကျင့်အရပြောရမယ်ဆိုရင် အပေါ်ကသုံးဆင့်မှာ သင်ပေးလို့ရတာ ဒုတိယတစ်ဆင့်ပဲရှိပါတယ် ကျန်တဲ့အဆင့်နှစ်ခုက ကိုယ်တိုင်လုပ်ယူရတာပါ။ ပထမဆင့်မှာ ကွန်ပျူတာလို တွေးတတ်ဖို့ Logic Building ပုစ္ဆာတွေကို ရှင်းခိုင်းရပါတယ် သင်ယူတဲ့လူက ကိုယ်တိုင်မရှင်းနိုင်လို့ သင်ပေးတဲ့လူက ရှင်းလိုက်ပြီးတော့ အဖြေကိုရှင်းပြရင် သင်ယူတဲ့လူနားလည်သွားပါလိမ့်မယ် ဒါပေမယ့် သင်ယူတဲ့လူမတတ်လိုက်ပါဘူး သူနားလည်သွားတာက နမူနာပုစ္ဆာရဲ့အဖြေသာဖြစ်ပါတယ် တတ်သွားရမယ့် Logic ကိုမရခဲ့ပါဘူး။ တတိယတစ်ဆင့်မှာလည်း ပရောဂျက်တစ်ခု လုပ်ခိုင်းလိုက်တယ် ကျောင်းသားကကြိုးစားမလုပ်ဘူး အဲဒီ့မှာ သင်တန်းဆရာက ဒီလိုဆိုပြီး အစကနေ ဘယ်လိုရေးတယ်ဆိုပြီး ရေးပြလိုက်တယ် အဲဒါဆိုလည်း ကျောင်းသားအတွက် အလကားပါပဲ ရေးတတ်သွားတယ်လို့ ထင်သွားတယ် သို့ပေမယ့် ဘာမှမရလိုက်ပါဘူး။

ဘယ်သင်တန်းကောင်းသလဲ ဆိုတဲ့အမေးတွေကို ဖြေရမယ်ဆိုရင် အပေါ်မှာပြောထားသလို သင်ယူမယ့်လူအနေနဲ့ ပထမနဲ့ တတိယ အဆင့်နှစ်ဆင့်ကို ကိုယ်တိုင်သင်ယူရမယ်ဆိုတာ သဘောပေါက်ရင် ဘယ်သင်တန်းမှာသင်သင် အတူတူပါပဲ။ ချော့သင်တဲ့နေရာမှာ ဗမာပြည်ထက် ကောင်းတဲ့နေရာ တစ်နေရာမှ မမြင်ဖူးပါဘူး ဗမာပြည်က တက္ကသိုလ်မှာ Language တစ်ခုကို တစ်နှစ်သင်ရတယ် စာသင်လအနေနဲ့တွက်ရင် ၉ လလောက်ရှိပါတယ် တတိယနှစ်အထိ Language တစ်မျိုးစီသင်ပါတယ်။ တစ်ခြားနိုင်ငံက တက္ကသိုလ်မှာ Language တစ်ခုဟာ Semester တစ်ခုပဲသင်ပါတယ် စာသင်လဟာ ၄ လလောက်ပဲရှိတယ် စာသင်ရက် ၁၅ ရက်လောက်ပဲရတယ် အနည်းဆုံး တစ်ရက်တစ်ခန်းနဲ့ အပြတ်သင်တာပါ ဗမာပြည်လို ဒီတစ်ပါတ် if နောက်တစ်ပါတ် for ဆိုပြီးသင်နိုင်တာမဟုတ်ပါ။ အဲဒါကို ဘာလို့တတ်သလဲဆိုတော့ ပရောဂျက်က အနည်းဆုံး ၄ဝ% လောက်ယူပါတယ် ဒီတော့အဲဒါမလုပ်ရင် ကျဖို့ကသေချာပါတယ် ဒီတော့သင်တာ မကောင်းလည်း ကျမှာကြောက်တော့ အတင်းတွန်းပြီး ကိုယ့်ဟာကိုယ်လုပ်ရပါတယ်။ ဗမာပြည်က တက္ကသိုလ်က အဲဒီ့လိုဖိအား မရှိတဲ့အတွက် ကိုယ့်ကိုကိုယ် တတ်အောင်လုပ်မယ်ဆိုတဲ့ ဖိအားလိုပါတယ် အဲဒါသာရှိမယ်ဆိုရင် ဘယ်မှာသင်သင် အတူတူပါပဲ။

အဲဒီ့လိုသင်ခဲ့ရင် အလုပ်မှာသုံးလို့ရပြီလားဆိုရင် သုံးစားလို့မရသေးပါဘူး ပြောရမယ်ဆိုရင် လက်သင်ပဲရှိပါသေးတယ် အလုပ်မှာက သင်တန်းမှာရေးတဲ့ ပရောဂျက်နဲ့ကွာတာက အပြင်မှာသုံးတဲ့ပြဿနာပါ သူ့သတ်မှတ်ချက်ကို မရရအောင်ရေးရပါတယ် ဒီနေရာမှာကိုယ်ရေးတဲ့ Language မှာမပါတဲ့ Features ဖြစ်ဖြစ် ရှိပေမယ့်ကိုယ်မသိတာပဲဖြစ်ဖြစ် ပြဿနာပေါင်းစုံ အမြဲတွေ့ရပါတယ် အဲဒါကိုရှင်းတဲ့နေရာမှာ ကိုယ်တတ်သလောက်နဲ့ ဖြစ်အောင်လုပ်ယူရပါတယ် အဲဒါကို Problem Solving Skill ခေါ်ပါတယ် Problem Solving Skill ဟာတစ်ယောက်နဲ့ တစ်ယောက်မတူပါ။ ပြဿနာများများကြုံတဲ့လူဟာ ဖြေရှင်းနည်းများများသိပါတယ် အဲဒါကို အတွေ့အကြုံလို့ခေါ်တာပါပဲ။ Problem Solving Skill မမြင့်ပေမယ့် ပြဿနာတက်လိုက် ဟိုလူ့မေးလိုက် ဒီလူ့မေးလိုက်နဲ့ လိမ်ဖယ်လိမ်ဖယ်နဲ့ အတွေ့အကြုံများများလာတဲ့ လူလည်းရှိတာပါပဲ။ ဒီတော့ဆိုလိုတာက အလုပ်လုပ်တယ်ဆိုရင် အတွေ့အကြုံဆိုတာက တစ်ဖြည်းဖြည်းများလာတာပါ နည်းတာနဲ့ များတာပဲကွာပါတယ် Problem Solving Skill မြင့်တဲ့လူကတော့ အလုပ်လုပ်တာ အချိန်တူရင်တောင် အတွေ့အကြုံပိုများများရမယ်ပေါ့။ ဒီတော့အလုပ်လုပ်ဖို့အတွက် Problem Solving Skill မြင့်သည်ဖြစ်စေ နိမ့်သည်ဖြစ်စေ လိုအပ်ပါတယ်။ အဲဒါမရှိရင်တော့ အလုပ်လုပ်လို့မရပါ။

အလုပ်လုပ်လို့ရပြီဆိုရင် ဘယ်လောက်အထိ တိုးတက်မလဲဆိုတာ ကြည့်သင့်သေးတယ် Implementation မှာ Problem Solving Skill မြင့်တယ် အတွေ့အကြံများတယ်ဆိုရုံနဲ့ အပြင်ကကြုံတွေ့နေတဲ့ ပြဿနာတွေကို Analyze မလုပ်နိုင်သလို ပရောဂျက်တစ်ခုကို စီမံခန့်ခွဲနိုင်ခြင်းမရှိပါ ဒီနေရာမှာ Implementation ထက်ပိုတဲ့ ဘာသာရပ်တွေ အများကြီးသင်ယူဖို့လိုပါသေးတယ် Software Engineering, Project Management, Management Information System, System Analysis and Design စသည်ဖြင့် တတ်ကျွမ်းဖို့လိုပါတယ် အဲဒါတွေကို မသင်ပဲအလုပ်လုပ်ရုံနဲ့ တတ်မယ်လို့မျှော်လင့်လို့မရပါ။ အဲဒါတွေသင်ဖူးရင် လုပ်နိုင်ပြီလားဆိုတော့လည်း မဟုတ်ပါ ဒီနေရာမှာလည်း သင်ထားတာကို သင့်လျော်တဲ့ပြဿနာမှာ သုံးတတ်တဲ့ Problem Solving Skill ရှိဖို့လိုအပ်ပါတယ်။ အဲဒါတွေမသင်ဖူးရင် ပြဿနာမရှင်းတတ်ဖူးလားဆိုတော့ အဲဒီ့လိုလည်းမဟုတ်ပါ မြင်ဖူးတဲ့ပြဿနာတော့ ရှင်းတတ်ကောင်း ရှင်းတတ်ပါလိမ့်မယ် သို့ပေမယ့် ရှုပ်ထွေးတဲ့ပြဿနာတွေ ရှင်းနိုင်လိမ့်မည်မဟုတ်ပါ Implementation ပြဿနာမဟုတ်တဲ့အတွက် ဒါလေးမရေးတတ်လို့ဆိုပြီး ဖိုရမ်မှာမေးလို့လည်း မရတော့ပါ။ ဒီအရာတွေကို Management Problem Solving Skill လို့နာမည်တပ်လိုက်ပါ့မယ် ဒါတွေမကျွမ်းကျင်ပဲ သက်ဆိုင်ရာဌာနရဲ့ Management Level ကိုမရောက်နိုင်ပါ။

ဒါတွေကတော့ လိုအပ်တဲ့ Technical Skill တွေကိုပြောတာပါ ဒါတွေနဲ့တော့ မလုံလောက်သေးပါဘူး အခြားသော Communication, Team Work စသည်ဖြင့်လိုအပ်တဲ့ Skill တွေရှိဦးမှာပါ။ နောက်တစ်ခုက Technical ပဲသိရှိပြီး စီးပွားရေးအမြင်မရှိရင်လည်း Software Developement လုပ်ငန်းတစ်ခုနဲ့ ငွေရှာနိုင်မယ့်လူ ဖြစ်မလာပါဘူး သူများဆီမှာအလုပ်လုပ်တဲ့ ဝန်ထမ်းပဲဖြစ်နိုင်ပါတယ် ရာထူးကြီးသည်ဖြစ်စေ ငယ်သည်ဖြစ်စေ အလုပ်သမားဟာ အလုပ်သမားပါပဲ။ ဒါ့ကြောင့် Software Developement နဲ့အသက်မွေးချင်တယ်ဆိုရင်တော့ ဆယ်တန်းအောင် ကျောင်းမတက်ပဲ Programming သင်ပြီးအလုပ်လုပ်လို့ရတယ်လို့ မတွေးစေချင် လခစားလုပ်ရင်တောင် ခိုင်းသမျှလုပ်ရမယ့် Implementation မှာတစ်သက်လုံး အချိန်ကုန်ခံဖို့မသင့်လျော်ပါ။ ဒါ့ကြောင့် ဘယ်နေရာရောက်ရောက် သင့်တော်တဲ့ ပညာသင်ဖို့လိုအပ်သလို သင်လို့မရတဲ့ Problem Solving Skill လည်းအရေးကြီးလှပါတယ်။