Friday, December 13, 2013

စံပြပရိုဂရမ်မာ

၂၀၀၃ ခုနှစ် ဇန်န၀ါရီလ၊ အမေရိကန်နိုင်ငံ အာ်ရီဂွန်ပြည်နယ်(Oregon) ပည်နယ်မှာရှိတဲ့ Portland ဆိုတဲ့မြို မှာ၊ Scott Meyers[Effective C++ စာအုပ်များ ရးသားခဲ့သူ Ph.D. Computer science] နဲ  Bruce Eckel [Thinking in Java, Thinking in C++ စာအုပ်များရေးသားခဲ့သူ ၊ B.S Applied Physics, M.S Computer Engineering] တို က ဦးဆောင်ပြီး “ပိုမိုကောင်းမွန်သော ကုဒ်များရေးသားခြင်း” ဆိုတဲ့ တွ ဆုံဆွေးနွေးပွဲတစ်ခု ကျင်းပခဲ့ပါတယ်။ သုံးရက်ကြာကျင်းပခဲ့တဲ့ အဲဒီ ဆွးနွေးပွဲမှာ သူတို နှစ်ဦးအပါအ၀င် တခြားပညာရှင် ၁၅ ရာက်လောက်က၊ ပရိုဂရမ်မာတွေရဲ့ coding ရးသားခြင်းနဲ  သက်ဆိုင်တဲ့ အရည်အသွေးကို ဘယ်လို တိုးတက်ကောင်းမွန်လာအောင် လုပ်ကိုင်ဆောင်ရွက် မှင့်တင်ကြမလဲဆိုတဲ့ အချက်တွေကို အဓိကထားဆွေးနွေးခဲ့ကြတာပါ။ အဲဒီလို ဆွးနွေးကြတဲ့ အချက်တွေထဲက တခုကတော့၊ Software Engineering လာက တနည်းပြောရရင်တော့ ပရိုဂရမ်ရေးသားခြင်းနယ်ပယ်မှာ လျစ်လျူရှုခြင်းခံနေရတဲ့၊ တကယ့်အခြေခံအကျဆုံးအချက်တချက်ရှိနေတယ် ဆိုတဲ့ အကြောင်းပါပဲ။ အဲဒီ လျစ်လျူရှုခံနေရတဲ့အချက်ကတော့ Dave Thomas နဲ  Andy Hunt တို   ဖာ် ထုတ်ခဲ့တဲ့ DRY Principle[Don’t Repeat Yourself Principle] ဆိုတာပဲဖြစ်ပါတယ်။ ဒီ စည်းမျဉ်းကို DIE Principle (Duplication is Evil ) လို လဲခေါ်ပါတယ်။
ဒီအာရ်ဝိုင် ရဲ့ အတိုချုပ်အနှစ်သာရကတော့ “လုပ်ကိုင်ဆောင်ရွက်ပုံခြင်း၊ Logic ခင်း၊ သဘောတရားခြင်း တူညီနေတဲ့ Code တခု(တစု)ကို application တခုထဲမှာ solution တခုထဲမှာ ထပ်ခါတလဲလဲမရေးနဲ  တကြိမ်ထက်ပိုမရေးနဲ ” ဆိုတဲ့ စည်းကမ်းသတ်မှတ်ချက်ပဲဖြစ်တယ်။ ဒီအချက်ရဲ့အနှစ်သာရကို တချို  ပရိုဂရမ်မာတွေက နားမလည်သေးတာ ဖစ်နိုင်ပြီး၊ တချို ကတော့ အဲဒီ DRY Principle ကို လုံးဝမသိသေးတာဖြစ်နိုင်ပါတယ်။ Software ရးသားရာမှာ၊ တခြားလိုက်နာ ကျင့်ဆောင်သင့်တဲ့ အချက်တွေ အများကြီးရှိပါသေးတယ်။ ဒါပေမယ့်လည်း Scott ရဲ့လေ့လာတွေ  ရှိချက်အရ၊ ဒီ DRY Principle ကိုတောင် သဘောပေါက်နားလည်ပြီး လက်တွေ  လိုက်နာဆောင်ရွက်လာအောင် မလုပ်နိုင်ဘူးဆိုရင်၊ တခြားပိုမိုရှုပ်ထွေးတဲ့ အချက်တွေဖြစ်တဲ့
• ရိုးရိုးရှင်းရှင်းဖြစ်အောင်ရေး[KISS(Keep It Simple, Stupid!)
• မလိုသေးရင် မရေးသေးနဲ YAGNI (You Ain’t Gonna Need It)
• Class တခု function တခုဟာ တိကျတဲ့ လုပ်ငန်းတာ၀န် တခုအတွက်ပဲဖြစ်ရမယ် ။ တခုထက်ပိုရင် ခွဲရေး။ SRP(Single Responsibility Principle) SoC (Separation of Concern)
ဆိုတဲ့အချက်တွေကို ကာင်းကောင်းနားလည်သဘောပေါက်လိုက်နာဖို ဆိုတာ အတွက်တော့ မျှာ်လင့်ချက်မရှိဘူး လို ဆိုပါတယ်။ ဒီ စည်းမျဉ်းတွေကို ပည့်ပြည့်စုံစုံ ရှင်းပြနိုင်ဖို  ရှည်ရှားတဲ့ ဥပမာ coding တွ လိုအပ်တဲ့အတွက် နာက်နောင်ဆောင်းပါးတွေမှာမှ အလျဉ်းသင့်တဲ့အခါ သီးသန် ဆွးနွေးပါဦးမယ်။
ဒါ့အပြင်၊ တခြားလွဲမှားနေတဲ့ ပရိုဂရမ်ရေးသားခြင်းဆိုင်ရာ ယူဆချက်တခုနဲ ပတ်သက်လို  “ပရိုဂရမ်ရေးတယ်ဆိုတာ လူနဲ စက် ဆက်သွယ်ရေးမဟုတ်၊ လူ လူချင်းဆက်သွယ်ရေးသာဖြစ်တယ်” လို  Bruce Eckel ကဆိုပါတယ်။ အဓိပ္ပါယ်ကတော့၊ လူ(Programmer)ဟာ၊ စက်(Computer Processor) ကို ဘာလုပ်ရမယ်ဆိုတာ နားလည်သွားအောင် Code တွရေးရုံ၊ ညွှန်ကြားချက်(Instruction) တွပေးရုံလောက်သာမဟုတ်ဘူး လို ဆိုလိုတာပါ။ မှန်ပါတယ်။ Program(Software) ရးတယ်ဆိုတာ၊ Software Engineer တွ၊ Pragrammer တွ နဲ ၊ ဒီ Software ကို အပ်နှံရေးသားစေတဲ့ Customer တွရဲ့ဆက်သွယ်ရေး၊ ပရိုဂရမ်ရေးသားနေတဲ့ အဖွဲ ဝင်(Team member)တွေ အချင်းချင်းရဲ့ဆက်သွယ်ရေး၊ လက်ရှိအဖွဲ ဝင်တွေနဲ  အဖွဲ ဝင်အသစ်ဖြစ်လာမယ့်သူတွေနဲ ဆက်သွယ်ရေးအပြင်၊ အထက်ပိုင်း စီမံခန်  ခွဲအုပ်ချုပ်သူတွေနဲ ဆက်သွယ်ရေးဆိုတာတွေအထိ၊ ကျယ်ကျယ်ပြန် ပန် ပါ၀င်နေပါတယ်။
ကောင်းကောင်းအလုပ်လုပ်နိုင်ရုံ၊ Run နိုင်ရုံ Program/Software တခုထွက်လာဖို ဆိုတာလောက်ဟာ၊ ကျွန်တော်တို  Software ရးသားထုတ်လုပ်မှုဖြစ်စဉ်ရဲ့ “ဆုံးမှတ်၊ ပန်းတိုင်၊ နာက်ဆုံးဦးတည်ချက်” မဟုတ်ပါဘူး။ ဒါဟာ Extreme Programming နည်းစနစ်တွေမှာ သိပ်ကိုအရေးပါတဲ့အချက်ပဲဖြစ်ပါတယ်။ ဒီ XP ဆိုတာ၊ ဆာဖ့်ဝဲအပ်နှံရေးသားစေသူ (Customers)တွေကိုပါ၊ ဆာဖ့်ဝဲရေးသားထုတ်လုပ်မှုဖြစ်စဉ် (Software Development Process) မှာ၊ Software Engineer တွနဲ အတူပူးပေါင်းပါ၀င်စေပြီး၊ သူတို  (Customer)ရဲ့လိုလားချက် လိုအပ်ချက်တွေကို တစတစ တိုးမြှင့်အကောင်အထည်ဖော်တဲ့နည်းစနစ် (Incremental Development Process) ကိုအခြေခံထားတဲ့ Software ရးသားနည်းတခုပဲဖြစ်ပါတယ်။ ဒါကြောင့်မို  ကျွန်တော်တို ရဲ့ပန်းတိုင်ဟာ ကျွန်တော်တို ရးသားတဲ့ Coding တွကို၊ တခြားသူတွေ တတ်နိုင် သမျှ ဖတ်ရှုနားလည်သဘောပေါက်အောင် ရးဖို ပါပဲ။
ဒီလိုရေးသားခြင်းဖြင့်
၁။ Software တခုကို မဖြန် ချိမီ၊ Coding နဲ  Design တွကို ပန်လည်သုံးသပ်ရာမှာ လွယ်ကူမှုရှိခြင်း။
၂။ နာင်အနာဂတ်မှာ ကိုယ့်ရဲ့ team ကို ပူးပေါင်းပါ၀င်လာမယ့် Programmer အသစ်တွေဟာ၊ သိပ်များများစားစား အားစိုက်ထုတ်ဖို မလိုပဲ အဲဒီ ကုဒ်တွေကို နားလည်သဘောပေါက်နိုင်တဲ့အတွက်၊ ကိုယ့်ရဲ့ ပရိုဂရမ်ရေးသားတဲ့ အဖွဲ ရဲ့ အတွေ အကြုံနဲ  အရည်အချင်း မန်မြန်ဆန်ဆန်တိုးတက်လာနိုင်ခြင်း။
၃။ ဒီစနစ် ဒီဆောဖ့်ဝဲကို ပင်ဆင်ပြောင်းလဲတိုးချဲ့ရေးသားဖို လိုအပ်လာတဲ့အခါ၊ သိပ်မခက်ခဲတော့ခြင်း ဆိုတဲ့ အကျိုးကျေးဇူးတွေရနိုင်ပါတယ်။
Software Engineering ဆိုင်ရာဝေါဟာရတွေနဲ ပာရမယ်ဆိုရင်တော့၊ Coding ကိုဖတ်ရှုနိုင်စွမ်း (Readability) တိုးတက်လာရင်၊ နားလည်နိုင်စွမ်း (Understandability) လည်းတက်လာမယ်။ အဲဒီရဲ့အကျိုးဆက်ကြောင့် ပင်ဆင်ထိန်းသိမ်းနိုင်စွမ်း (Maintainability) မင့်မားလာတဲ့အတွက်၊ ပင်ဆင်ထိန်းသိမ်းမှုကုန်ကျစရိတ်(Maintenance Cost) လျာ့ကျလာပါတယ်။ ဒါ့အပြင် DRY Principle ကိုလိုက်နာသုံးစွဲထားတဲ့ ပရိုဂရမ်တွေမှာ ကုဒ်အရေအတွက်(Lines of Code) လျာ့ကျလာပြီး၊ ရှုပ်ထွေးမှု (Complexity) လည်း အထိုက်အလျောက်လျော့ကျလာပါတယ်။ ဒီနှစ်ခုလျော့ကျလာတဲ့အတွက်၊ ဆာဖ့်ဝဲ ရးသားမှုကုန်ကျစရိတ်( Development Cost) အပြင် Maintenance Cost ပါ သက်သာလာစေနိုင်ပါတယ်။ ဒါကြောင့် ပရိုဂရမ်ရေးသားတယ်ဆိုတာ အဖြေတခုအတွက် အပြိုင်အဆိုင်အားသွန်ကြိုးပမ်းရုံ သက်သက်မျှသာမဟုတ်ပဲ၊ ပင်နိုင် ပာင်းနိုင် တိုးချဲ နိုင်တဲ့ စနစ်(System)တစ်ခုတည်ဆောက် တဲ့ပုံစံမျိုးသာဖြစ်ရပါမယ်။
အဲဒီ “ပိုမိုကောင်းမွန်သော Code များရေးသားခြင်း” ဆိုတဲ့ ဆွးနွေးပွဲမှာပဲ၊ ထိတ်လန် စရာ ကိန်းဂဏန်းတွေ လည်းပေါ်ထွက်လာခဲ့ပါတယ်။ အဲဒါကတော့ လက်ရှိ ဆာ့ဖ်၀ဲလောကကြီးမှာ ပါ၀င်ရေးသားနေကြတဲ့ “၉၅-ရာခိုင်နှုန်းသော Programmer တွရဲ့ ဆာဖ့်ဝဲရေးသားထုတ်လုပ်နိုင်စွမ်း [Productivity - Software ရးသားရာတွင် လိုအပ်သော idea, စိတ်ကူးစိတ်သန်း၊ တွးခေါ်နိုင်စွမ်း၊ ဖန်တီးနိုင်စွမ်း၊ စသည်...] ဟာ တခြား ကျန်တဲ့ ၅-ရာခိုင်နှုန်း သာ Programmer  အာက်ကို အဆ-၂၀ အထိ နိမ့်ကျ နတယ်”ဆိုတာပါပဲ။ ကတယ်တော်တဲ့ တန်းမှီ အရည်အသွေးပြည့် ပရိုဂရမ်မာတစ်ရောက်ဟာ တခြားသာမာန် သူလိုငါလို ပရိုဂရမ်မာတွေထက် အဆ ၂၀ လာက် ပိုတော် ပိုပြေး နတယ်ဆိုတဲ့ သဘောပါပဲ။ ဒါ့အပြင် T.DeMarco နဲ  T.Lister [Peopleware : Productive Projects and Teams, 2nd Ed. by Tom Demarco, Timothy R. Lister] တို ရဲ့ စာအုပ်မှာ၊ တကယ့်လေ့လာတွေ ရှိချက်တွေကို အခြေပြု တွက်ချက်ထားတဲ့ စာရင်းဇယားတွေ အရ၊ ၅၀-ရာခိုင်နှုန်း ကနေ၊ ၉၀-ရာခိုင်နှုန်းထိသော Software Project တွဟာ၊ မူလက မျှာ်လင့် ရည်မှန်းထားသလောက် လုပ်ဆောင်နိုင်မှုမရှိကြဘူး လို ဆိုပါတယ်။ အဲဒီ အချက်နှစ်ချက်ဟာ ဘာကြောင့်ဖြစ်တယ်လို ထင်ပါသလဲ။ ဒီဆွေးနွေးပွဲက ကြားသိရတဲ့ အချက်အလက်တွေအရ ပုံနှိပ်ထုတ်ဝေသူများရဲ့ နည်းပညာဆိုင်ရာ စာအုပ်စာတမ်းတွေဟာ၊ ၁၀-ရာခိုင်နှုန်းလောက်သာ အရင်းကျေခဲ့ပြီး တစ်ရာခိုင်နှုန်းလောက်သာ ငွကြေးအရ အာင်မြင်ခဲ့တယ်လို ဆိုပါတယ်။
ဒါဟာ ဘာကိုညွှန်ပြနေသလဲဆိုရင် “Software ရးသားထုတ်လုပ်နိုင်စွမ်း အကြီးအကျယ် ကွာဟနိမ့်ကျနေတဲ့ အဲဒီ ၉၅-ရာခိုင်နှုန်းသော ပရိုဂရမ်မာ တွဟာ စာမဖတ်ကြဘူး၊ အသစ်သစ်သောနည်းပညာတွေ၊ အထွေထွေဗဟုသုတတွေကို အချိန်နဲ တပြေးညီ မလေ့လာ မလိုက်စားကြဘူး” ဆိုတဲ့အဖြေထွက်လာပါတယ်။ တကယ်တော့ အသစ်အသစ်သော ပညာရပ်တွေကို ဆည်းပူးရတယ်ဆိုတာ၊ သက်တောင့်သက်သာရှိလှတဲ့ အလုပ်မျိုးတော့ဘယ်ဟုတ်မလဲ။ ရုပ်ရော စိတ်ပါ အနည်းနဲ အများတော့ နာကျင်ပင်ပန်းခံရတာကိုး။ ဒါပေမယ့်လည်း ဒါဟာမိတ်ဆွေတို အတွက် အကောင်းဆုံးရင်းနှီးမြုပ်နှံမှုပဲ မဟုတ်ပါလား။ မိတ်ဆွေဟာ ဒီ Program ရးသားခြင်း၊ Software ရးသားခြင်း နယ်ပယ်မှာပဲ ဆက်လက်ကျင်လည်ရပ်တည်နေဦးမှာဆိုရင်တော့၊ အမြဲမပြတ် ရှာဖွေလေ့လာသင်ယူနေဖို  [သင်တန်းတွေ တခုပြီးတခု တက်နေဖို  တာ့မဟုတ်ဘူးပေါ့ဗျာ] ဆိုတာဟာ တကယ့်ကိုပဲ မရှိမဖြစ်လိုအပ်ချက်တရပ်ပါ။ မိတ်ဆွေဟာ ဒီလိုမှမလုပ်နိုင်ဘူး၊ မလုပ်လိုဘူး၊ ဒီလို လုပ်ဆောင်ကြိုး ပမ်းနေရတာတွေကို မနှစ်သက် မခံစားနိုင်ဘူးဆိုရင်တော့၊ ဒီအလုပ်(Program/Software ရးသားအသက်မွေးခြင်းအလုပ်) ကို စွန်  လွှတ်လိုက်တာ အကောင်းဆုံးပါပဲ။ “Love it, or Leave it” ပဲပေါ့။ If you can’t stand the heat, get out of the kitchen ဆိုတာလို၊ အပူဒဏ်မခံနိုင်ရင်တော့ မီးဖိုထဲက ထွက်ရုံသာရှိတော့တာပေါ့ဗျာ။
ကျွန်တော်တို လည်း ဒီလိုပညာခေတ်၊ ယှဉ်ပြိုင်ရမှုတွေ မင့်မားနေတဲ့ခေတ်၊ စိန်ခေါ်မှုတွေများနေတဲ့ခေတ်၊ Globalization ဖစ်နေတဲ့ခေတ်ကြီးထဲမှာ စာများများဖတ်ရပါလိမ့်မယ်။ ကြီးကဲသူတွေ၊ ဆရာဆရာမတွေ၊ လ့ကျင့် သင်ကြားပေးနေသူတွေ အနေနဲ လည်း ဒီ အချက်နဲ ပတ်သက်ပြီး လူငယ်တွေကို အလေးအနက် တိုက်တွန်းသင့်ပါတယ်။ ပညာရပ်တစ်ခုကို ထဲထဲဝင်ဝင် ချချေမြစ်မြစ် လ့လာချင်တဲ့ လူငယ်တွေအတွက် အလွယ်တကူလက်လှမ်းမှီနိုင်တဲ့၊ အင်္ဂလိပ်လိုဖတ်ဖို  အဆင်မပြေသေးရင်တောင်၊ မန်မာပညာရှင်တွေရဲ့  မန်မာလိုရေးသားထားတဲ့ သင်္ချာ၊ ရူပဗေဒ၊ အတွေးအခေါ်၊ network, programming ပညာရပ်ဆိုင်ရာ အထွေထွေ သုတစာအုပ်တွေ အများကြီးရှိပါတယ်။
“ဟာ…တို က ကွန်ပျူတာသမား…သင်္ချာတို ..ရူပဗေဒ တို အတွေးအခေါ်တို နဲ ဘာဆိုင်လို လဲ” ဆို ရင်တော့ “စမ်းကြည့်ပါဦးခင်ဗျာ” လို သာ အတိုချုပ် ဆိုပါရစေတော့။ ကွန်ပျူတာသိပ္ပံ နဲ  တခြားပညာရပ်တွေဟာ သင်္ချာနဲ  ရူပဗေဒရဲ့ အုတ်မြစ်ပေါ်မှာ တည်မှီ ဖွံ ဖိုး ကြီးထွား ရှင်သန်လာကြတာ မဟုတ်ပါလား။ သင်္ချာနဲ  ရူပဗေဒဆိုတာ သိပ္ပံပညာရပ်အားလုံးရဲ့အနှစ်ချုပ်ပ်ပဲပေါ့။ အတွေးအခေါ် အထွေထွေဗဟုသုတဆိုတာလည်း ပညာရပ်တခုကို လက်တွေ အသုံးကျလာတဲ့ အဆင့်ထိရောက်လာအောင် တခြားနယ်ပယ်ပေါင်းစုံက ပညာရပ်ပေါင်းစုံကို ပူးပေါင်းဆက်စပ်ပေးမယ့် တံတားကြီးတစင်းပဲမဟုတ်ပါလား။ ဒါကြောင့် ကျွန်တော်တို ဟာ “အရှည်တွေး အဝေးမျှော်” တယ်ဆိုရင်၊ အမြင့်ဆုံးကိုရည်မှန်းပြီး ပညာရပ်တခုကို ရဆုံး ရဖျားထိ လိုက်တော့မယ်ဆိုရင်၊ မိမိကိုယ် မိမိ “ကျမ်းမျိုးစုံ၍ ဉာဏ်ဟုန်ပြင်း” အာင် လုပ်ရပါလိမ့်မယ်။ ကိုယ်နဲ တိုက်ရိုက်သက်ဆိုင်တဲ့ နည်းပညာဆိုင်ရာ စာတွေကို ဖတ်ရာမှာလည်း “ငါက C, C++ မှ ၊ ငါက Java, J5EE ကွ၊ ငါက VB, C# .NET မှ၊ ငါ open source မှ PHP မှ….” ဆိုတာတွေကလည်း အလွန်ပဲ ကျဉ်းမြောင်းမှားယွင်းနေပါတယ်။ အိန္ဒိယ၊ ဥရောပ၊ အမေရိက နဲ  တရုတ် ဂျပန် စတဲ့ နိုင်ငံရပ်ခြား ကျာင်းသားများ၊ ပညာရှင်များဟာ Programming Language အနညှ်းဆုံး ၄-၅-၆ မျိုးလောက်တတ်ကျွမ်းကြပြီး၊ Program/Software ရးသားရာမှာ ဘယ်လို Language မျိုးကိုပဲသုံးစွဲပြီးရေးရ ရးရ ရးနိုင်တဲ့သူတွေ၊ Language Neutral ဖစ်သူတွေပါ။ သူတို နဲ ယှဉ်ပြိုင်နိုင်ဖို ဆိုရင်၊ ကျွန်တော်တို လည်း အဲဒီလို ပုံစံမျိုးဖြစ်အောင် အမှီလိုက် ကြိုးပမ်းရပါလိမ့်မယ်။ ဒါကြောင့် ကိုယ့်ရဲ့တတ်ကျွမ်းမှုဘောင်ထဲမှာပဲ ကိုယ့်ကိုယ်ကို ပိတ်မိ မနေအောင် အထူးဂရုစိုက်သင့်ပါတယ်။ ကျွန်တော်ဆိုလိုတာက၊ အကုန်လုံးချည်း ပညာရှင်အဆင့် ကျွမ်းကျင်နေရမယ်လို  မဆိုလိုပါဘူး။ ကိုယ့်ရဲ့အဓိကအားပြုရာ (Major) တခု အခိုင်အမာရှိရမှာ ဖစ်သလို၊ ကျန်တာတွေကိုလည်း အရန်တွဲဖက်လေ့လာမှု(Minor) အဖြစ် ပိုင်တူသွားသင့်တယ်လို  ဆိုလိုတာပါ။ ဒါမှသာ ပင်းထန်မြန်ဆန်တဲ့ နည်းပညာအပြောင်းအလဲ လှိုင်းတံပိုးတခု ရိုက်ခတ်လာခဲ့ရင်၊ အလိုက်သင့် ပါ၀င်စီးမျော နိုင်မှာပေါ့။ အရေးကြီးတာကတော့ စာမေးပွဲမှာအမှတ်ကောင်းဖို ၊ လက်မှတ်ရဖို  အတွက် စာတွေချည်း အလွတ်ကျက်နေမယ့်အစား၊ ပညာတတ်ဖို  အတွေးအခေါ်မြင့်မားဖို  ကိုယ့်ကိုယ်ကို ယုံကြည်မှုရှိဖို  စာများများဖတ်သင့်ပါတယ်။ စာအုပ်ပုံထဲမှာချည်း နစ်မြုပ်နေဖို လည်းမဟုတ်ပါဘူး။လက်တွေ  လည်းလုပ်၊ ပတ်ဝန်းကျင်လည်းလေ့လာ၊ ရည်မှန်းချက်တူသူတွေ နဲ လည်း တွ  ဆုံဆွေးနွေးအဖြေရှာ၊ ဒီလိုမှသာ ကျွန်တော်တို ဟာ “ဘွဲ  ရ-ပညာတတ်” တွဖြစ်လာမှာပေါ့ ။ အဲဒီလိုဖြစ်လာဖို ဆိုရာမှာတော့ လွယ်ကူသက်သာစွာ အသာလေးနဲ့တော့ ဘယ်ဖြစ်ပါ့မလဲ။ဘယ်လို တန်ဘိုးရှိတဲ့အရာကိုမှ လွယ်လွယ်နဲ  မရနိုင်ဘူးဆိုတာ မိတ်ဆွေတို အားလုံး ကာင်းကောင်းသိပြီးသားမို  အထွေအထူး မိကျောင်းမင်းရေခင်းပြ မနေတော့ပါဘူး။
ဒါ့အပြင် နာက်ဆုံးတင်ပြလိုတဲ့အချက်ကတော့၊ အတ္တမဲ့ ပရိုဂရမ်ရေးသားခြင်း (Egoless Programming) ဆိုတဲ့အကြောင်းပါ။ အုပ်စုလိုက်လုပ်ကြရတဲ့ ဒီ Program/Software ရးသားမှုလုပ်ငန်းစဉ်တလျောက်မှာ၊ ငါရေးတာအမှန်၊ ငါတွေးတာအကောင်းဆုံး၊ ငါ့ပရိုဂရမ်မှာ ဟာကွက်မရှိဘူး အမှား(Error) မရှိဘူး၊ ငါ့ Logic ကိုမပြင်နိုင်ဘူးဆိုတဲ့ စိတ်မျိုးမထားမိစေဖို ပါပဲ။ ကမ္ဘာကျော် အသုံးချဆောဖ့်ဝဲ(Application Software) တွ၊ ကွန်ပျူတာကို မာင်းနှင်လည်ပတ် စတဲ့ဆောဖ့်ဝဲ စနစ်(Operating System Software) တွ အားလုံးဟာ၊ အချိန်နဲ အမျှ အဆင့်မြှင့်မျိုးကွဲအသစ် (New Version) တွ မရပ်မနားထွက်ပေါ်နေတာ အားလုံးအသိပါ။
ဒါဟာ ဘာကိုညွှန်ပြနေသလဲဆိုရင် “ပြီးပြည့်စုံပြီး အမှားကင်းတဲ့ Software ဆိုတာ လုံး၀မရှိနိုင်ဘူး” ဆိုတာပါပဲ။ ဒါကြောင့် ကျွန်တော်တို ဟာ ပရိုဂရမ်ရေးသားရာမှာ၊ “ပျော့ပျောင်းတဲ့သဘောထား ကျယ်ပြန် တဲ့အမြင်” ရှိဖို လိုပါတယ်။ တခြားသူတွေနဲ  ညှိနှိုင်းဆောင်ရွက်လုပ်ကိုင်နိုင်တဲ့ စွမ်းရည်ရှိရပါမယ်။ ပရိုဂရမ်ရေးသားတယ်ဆိုတာ တဦးကောင်း တယောက်ကောင်း လုပ်ကိုင်ဆောင်ရွက်ရတာမျိုးမဟုတ်ပဲ၊ အဖွဲ နဲ စုပေါင်းဆောင်ရွက်ကြရတဲ့ Team Work သာလျှင်ဖြစ်ပါတယ်။ ဒါကြောင့် ကိုယ်ရေးတဲ့ ပရိုဂရမ်ကို၊ တခြား ပရိုဂရမ်မာတွေ အလွယ်တကူ ဖတ်ရှုနားလည် သဘောပေါက်နိုင်စေဖို ၊ ပင်နိုင် ပာင်းနိုင် တိုးချဲ နိုင်တဲ့ ပရိုဂရမ်ဖြစ်စေဖို ၊ ကိုယ်နဲ  ရးဖော်ရေးဖက်တွေရဲ့ စွမ်းဆောင်ရည် အတူတကွ မင့်မားလာစေဖို  အတတ်နိုင်ဆုံးကြိုးပမ်းအားထုတ် သင့်ပါတယ်။ coding ကာင်းတွေ ရးသားနိုင်ဖို  programmer ကာင်းတွေဖြစ်ဖို လိုအပ်ပါတယ်။ programmer ကာင်းတစ်ရောက်ဖြစ်ဖို  စာအစုံ စာများများ ဖတ်ဖို လိုပါတယ်။ ဖတ်ပြီးသမျှကို ပန်တွေးဖို  တွးမိသမျှကို လက်တွေ ချရေးကြည့်ဖို  မဖြစ်မနေလိုအပ်ပါတယ်။ စာဖတ်တယ်ဆိုရာမှာလည်း ပရိုဂရမ်ရေးသားခြင်းဆိုင်ရာ နည်းပညာတွေကိုသာမက၊ ပရိုဂရမ်ရေးသားခြင်းဆိုင်ရာ သဘောတူညီချက်(Convention of Coding Technique)တွေ၊ ပရိုဂရမ်ရေးသားရာမှာသုံးတဲ့ အမည်ပေးပုံ စည်းကမ်းများ(Naming Rules)၊ သင်္ချာ ရူပဗေဒ အထွေထွေသုတ စတဲ့ စာမျိုးစုံဖတ်ပြီး မိတ်ဆွေတို အားလုံး စာများများဖတ်ခြင်းဖြင့် “ကျမ်းမျိုးစုံ၍ ဉာဏ်ဟုန်ပြင်း” နိုင်ပါစေကြောင်း။
ရွှင်လန်းချမ်းမြေ့ပါစေ။

infoTherapy(2013)
(2013 ဒီဇင်ဘာလထုတ် ကွန်ပြူတာဂျာနယ်တွင် ဖါ်ပြပြီးသော ဆာင်းပါးဖြစ်ပါသည်။)

Monday, September 23, 2013

ဆော့ဖ်ဝဲရေးသားခြင်းနှင့် စီမံခန့်ခွဲခြင်း

နိဒါန်း
Standish Group ရဲ့ Chaos (ခေးအော့စ်) Report ဆိုတာကို မိတ်ဆွေတို  ဖတ်သန်းခဲ့တဲ့ အိုင်တီ ပညာရေးလမ်းကြောင်းတလျောက်မှာ ဖတ်ဖူး မှတ်ဖူး ကြားခဲ့ဖူးမှာပါ။ ဆာ့ဖ်၀ဲပညာရပ်ဆိုင်ရာ စာအုပ်စာတမ်းပေါင်းများစွာနဲ  ပညာရှင်တွေ မကြာခဏဆိုသလို ရည်ညွှန်းကိုးကားလေ့ရှိတဲ့ သုတေသန အစီအရင်ခံစာတခုပေါ့။ အဲဒီအစီရင်ခံစာမှာ တချို သဘောမတူနိုင်စရာအချက်တွေ၊ အငြင်းပွားဖွယ်တွေ၊ ဆက်လက်လေ့လာသင့်တဲ့ နယ်ပယ်တွေ ရှိနေပေမယ့် မငြင်းသာတဲ့ အမှန်တရားတွေလည်း အထင်အရှားရှိနေပါတယ်။ အဲဒီထဲက တခုကတော့ (တကမ္ဘာလုံးမှာ ရးသားထုတ်လုပ်နေကြတဲ့) ဆာ့ဖ်၀ဲပရောဂျက်တွေရဲ့ အာင်မြင်တဲ့ ရာခိုင်နှုန်းဟာ အားရစရာမရှိသေးဘူး(32% လာက်ပဲ အာင်မြင်တယ်လို ပာနိုင်တယ်)ဆိုတဲ့ အချက်ပါပဲ။ [“CHAOS Summary 2009,” Standish Group, www1.standishgroup.com/newsroom/chaos_2009.php ] အဲဒီလို မအောင်မမြင်ဖြစ်ရတဲ့ ကျရှုံးရတဲ့ အကြောင်းရင်းမှာ အဓိကတာ၀န်ရှိတဲ့သူတွေဟာ၊ နည်းပညာပိုင်းဆိုင်ရာပုဂ္ဂိုလ်တွေ ဟုတ်ပဲ စီမံခန် ခွဲတဲ့ သူတွေဖြစ်တယ်လို အဲဒီ အစီရင်ခံစာကဆိုပါတယ်။ အဲဒီသုံးသပ်ချက်ဟာ လုံး၀ ရာနှုန်းပြည့်မှန်ကန်တဲ့ သုံးသပ်ချက်တခုဖြစ်နိုင်ပါတယ်။ မယုံမရှိပါနဲ မိတ်ဆွေ။ ဘာလို လဲဆိုတော့ အလွန်ထင်ရှားတဲ့ သက်သေ သာဓက တခုရှိနေလို ပါ။ တလွဲဆံပင်ကောင်းပြီး ညာဏ်ပညာမဲ့တဲ့ စီမံခန် ခွဲမှုအမှားတွေကြောင့်၊ အရှေ တာင်အာရှမှာ စီးပွားရေး ပညာရေး အလားအလာအလွန်ကောင်းခဲ့တဲ့၊ (ဟုတ်သော်ရှိ မဟုတ်သော်ရှိ) လူတကိုယ် တိုက်တလုံး ကားတစီး ဆိုပြီး မှန်းနိုင်ခဲ့တဲ့ နိုင်ငံဘ၀ကနေ၊ “ကယ်မပါ ကြည့်ရှုပါ၊ ပုစုပါ၊ ထာက်ပံ့ပါ၊ အကြွေးလေးတွေ လျှာ်ပေးပါ၊ ဘာညာ…” ဆိုပြီး၊ “မွဲသွေ သွ မျက်နှာနှင့်၊ ကိုယ်ချမ်းသာရာ ရကြောင်း၊ ငယ်ငေါင်းစုတ်ပဲ့၊ နုတ်နဲ သည့်စကားများကို” ကိုယ့်နိုင်ငံက ပုဂ္ဂိုလ်တွေက ကမ္ဘာအနှံ  ခဆန် ပီးပြောနေရတဲ့ ဘ၀ရောက်ခဲ့ရတာ မိတ်ဆွေတို အားလုံးအသိပဲဖြစ်ပါတယ်။ စလေဆရာကြီး ဦးပုည ကတော့ အဲဒီလို “ငယ်ငေါင်းစုတ်ပဲ့၊ နုတ်နဲ  တဲ့စကားတွေကို  ယာင်မှား၍ဆိုမိလျှင်” တာင် “လျှာတိုအောင်ရိတ်ချင်၏” တဲ့။ ကယ်ပါ ယူပါ စကားမျိုး ယာင်မှားပြီး ပာမိရင်တောင် သူ လျှာသူ ဖတ်ပစ်ချင်တယ်လို ဆိုလိုတာပါ။ တကယ်တော့ ဘယ်သူမဆိ်ု အဲဒီလို အတောင်းအရမ်း လက်ဖ၀ါးဖြန် ရတဲ့ စကားမျိုး ဘယ်ပြောချင်ပါမလဲဗျာ။ မပြေးသော်လည်း ကံရာရှိခဲ့ပြီမို ၊ ရှ မျက်နှာနောက်ထား၊ မျက်နှာအောက်ချကြရတော့တာပေါ့။ ဒါဟာ ဆိုး၀ါးညံ့ဖျင်းတဲ့ စီမံခန် ခွဲမှုအမှားတွေရဲ့ အဆိုးဆက်တွေပါ။ ကဲ ထားလိုက်ပါ မိတ်ဆွေတို ရာ (အင်း ပာလည်း ပီးသွားပြီကိုး) အခု ဆွးနွေးမှာက အဲဒီလိုအကြောင်းအရာတွေမဟုတ်ပါဘူး။ ဆာဖ့်၀ဲ ရးသား ထုတ်လုပ်တဲ့ လုပ်ငန်းစဉ်မှာ ပါ၀င်ဆောင်ရွက်သူတွေကို စီမံခန် ခွဲအုပ်ချုပ်တဲ့ Software Development Project ကို Manage လုပ်တဲ့အကြောင်းပါ။ တကယ်တော့ နိုင်ငံတခု အဖွဲ အစည်းတခု နာက်ဆုံး လူတဦးချင်းစီအတွက်ပဲဖြစ်ပါစေ၊ ရည်မှန်းချက်ကောင်းတွေ ပါက်မြောက်နိုင်ဖို  အာင်မြင်နိုင်ဖို ဆိုရင် ပညာပြည့်၀ နှလုံးလှသူတွေရဲ့ ကျွမ်းကျင်နိုင်နင်းတဲ့ ကာင်းမွန်မှန်ကန်တဲ့ စီမံခန် ခွဲမှုဟာ မုချလိုအပ်ပါတယ်။ ဆာ့ဖ်၀ဲပရောဂျက်တွေမှာလည်း ခွင်းချက်မရှိပါဘူး။ ဒါကြောင့် ဒီဆောင်းပါးမှာ စာအုပ်ကြီးတွေထဲက သီအိုရီဆန်ဆန် သဘောတရားတွေထက်၊ ကမ္ဘာအနှံ က Project Manager တွ CEO တွရဲ့ လက်တွေ ဆန်တဲ့ အမြင်သဘောထားတွေနဲ   ဆာ့ဖ်၀ဲပရောဂျက်တခုအတွက် အာင်မြင်စေကြောင်း နည်းလမ်းကောင်းလေးတွေကို ထုတ်နှုတ် ဖည့်စွက်ပြီး အတိုချုပ်တင်ပြပေးလိုက်ပါတယ်။ သင့်သည်ထင်သော်ယူ၍ မကိုက်ညီလျှင်လည်း ပယ်နိုင်ပါတယ်။
၁။ IT Project တစ်ခုကို အမြန်ဆုံးနှုံးနဲ  ကျရှုံးစေတာကတော့ ညံ့ဖျင်းတဲ့ စီမံခန် ခွဲမှု ပဲဖြစ်တယ်။ ဆာ့ဖ်၀ဲရေးသားတည်ဆောက်တဲ့ နည်းပညာသမား အများစုဟာ စီမံခန် ခွဲမှုလုပ်ငန်းနယ်ပယ်နဲ မသင့်တော်သလို၊ မန်နေဂျာအများစုကလည်း ဆာ့ဖ်၀ဲရေးသူတွေနဲ  သူတို သုံးစွဲတဲ့နည်းပညာရဲ့သဘောသဘာ၀အကြောင်း နကန်းတလုံးမှ မသိတာများတယ်။ အဲဒါကြောင့်လည်း ဆာ့ဖ်၀ဲပရောဂျက်တွေ မအောင်မမြင်ဖြစ်ရတာပေါ့။ ဒါကြောင့် “ဆော့ဖ်၀ဲရေးသူတွေအပေါ်မှာ အပြန်အလှန် အလေးထားမှု လးစားမှုရှိတဲ့၊ သူတို  ဘာလုပ်နိုင်တယ် ဘာလုပ်တယ် ဆိုတာကို ကာင်းကောင်း သိနားလည်နိုင်မယ့် အသင့်တော်ဆုံး ပရောဂျက်မန်နေဂျာကို မှန်ကန်စွာ ရွးချယ် ခန် အပ်ပါ” လို  Smart Science Eduction Inc ကို တည်ထောင်သူ၊ ဥက္ကဌ နဲ  အမှုဆောင်အရာရှိချုပ် Harry E. Keller က အကြံပြုပါတယ်။ ဒီနေရာမှာ သတိထားရမယ့်အချက်ကတော့ မန်နေဂျာဟာ နည်းပညာပိုင်းဆိုင်ရာ အသေးစိပ်အချက်အလက်တွေကို သိနားလည်ရမယ်ဆို ဆိုလိုတာမဟုတ်ပါဘူး။ သက်ဆိုင်ရာပညာရပ်တခုရဲ့ အခြေခံ သဘောသဘာ၀လောက်ကိုတော့ အနည်းဆုံး တီးမိခေါက်မိရှိနေရမယ်လို သာလိုလိုတာပါ။ အဲဒါမှလည်း “၀ယ်သာ (weather) မကောင်းရင် ၀ယ်သာဖြုတ်လဲလိုက်ပေါ့” ဆိုတာမျိုး၊ “မိမိတို အနေဖြင့် ပီချိတ်ချ် ဆဲဗင်း (ph7) ထုတ်နိုင်ရုံမျှဖြင့် ကျနပ်မနေပဲ၊ ph8, ph9 အဆင့်ထိ တိုးတက်ထုတ်လုပ်နိုင်အောင် ဆက်လက် ကျိုးပမ်းဆောင်ရွက်သင့်ကြောင်း၊ ရသန် စက်ရုံရှိ တာ၀န်ရှိသူများအား လမ်းညွှန်မှာကြားသွား” ဆိုတာမျိုး မဖြစ်တော့ဘူးပေါ့ဗျာ။
၂။ “ပရောဂျက်မန်နေဂျာတစ်ရောက်အတွက် မှန်ကန်သင့်တော်တဲ့ လူတွေပါတဲ့ အဖွဲ ကို ဖွဲ ပးထားပါ။” လို  Whirlpool Corporation ရဲ့ Internet & eCommerce ဆိုင်ရာ အကြီးတန်းမန်နေဂျာလည်းဖြစ်၊ ModernServantLeader.com ရဲ့ တည်ထောင်သူလည်းဖြစ်တဲ့ Ben Lichtenwalner က အကြံပြုပါတယ်။ မှန်ပါတယ်။ နာက်လိုက်ကောင်းတွေ တာ၀န်ခွေဲ၀ယူနိုင်မယ့်သူတွေ ပံ့ပိုးကူညီမယ့်သူတွေမရှိပဲနဲ  ဘယ်လိုခေါင်းဆောင်မျိုးကမှ အကောင်းဆုံး ပီးမြောက်အောင်မြင်အောင် ဆာင်ရွက်နိုင်မှာ မဟုတ်ပါဘူး။ “တစ်ရောက်ကောင်းက တသောင်းဗိုလ်ခြေ ညက်ညက်ကြေ” ဆိုတာ ဆာ့ဖ်၀ဲလုပ်ငန်းခွင်မှာ မမှန်ပါဘူး။ ဒါဟာ team work ပါ။ ဒါကြောင့် IT ပရောဂျက်တခု အာင်မြင်ဖို အတွက် မှန်ကန်တဲ့ ပရောဂျက်မန်နေဂျာကို ရွးချယ်ခန် အပ်ထားရုံတင်မကပဲ သူ အတွက် မှန်ကန်တဲ့ ထာက်ပံ့မှုကို ပးစွမ်းနိုင်မယ့် အဖွဲ လည်း ရှိရပါမယ်။ ဆိုလိုတာက ပရောဂျက် အရွယ်အစားနဲ  အနေအထားပေါ်မူတည်ပြီး Business Analyst တို  QA (Quality Assurance) Manager တို ၊ Development Team Leader တို  စတာတွေကို လိုအပ်ရင် လိုအပ်သလို ခွဲ ဖန်  ခန် ထားပေးရပါမယ်။ ဒါမှသာ ပရောဂျက်မန်နေဂျာ အနေနဲ  သူရဲ့ အဓိကအလုပ်ဖြစ်တဲ့ ပရောဂျက် စီမံခန် ခွဲတဲ့အလုပ် ကိုပဲ ဦးစားပေးလုပ်ဆောင်နိုင်မှာဖြစ်ပြီး နည်းပညာပိုင်းဆိုင်ရာကိစ္စတွေ ပဿနာတွေအတွက် မလိုလားအပ်တဲ့ အချိန်နဲ လုပ်အား အလဟဿ မဆုံးရှုံးတော့ဘူးပေါ့။ အဲဒီလို ပရောဂျက်မန်နေဂျာအတွက် လိုအပ်တဲ့သူတွေကို ခန် အပ်တာ၀န်ပေးတဲ့နေရာမှာလည်း “စွမ်းဆောင်ရည်ပေါ် မူတည်ပြီး ခိုင်း၊ ရတဲ့လူ ရှိတဲ့လူ ကို ကာက် တာ၀န်ပေးလိုက်တာမျိုးမလုပ်နဲ - Allocate resources on the basis of capability not availability” လို  IBM Global Technology Services က သတင်းအချက်အလက်နည်းပညာ အမှုဆောင်ဗိသုကာ Gerardo Menegaz က အကြံပြုပါတယ်။ ဆိုလိုတာက မိတ်ဆွေရာ.. လိုအပ်နေတဲ့ ရာထူးနေရာတခုကို ဒူးနေရာဒူး တာ်နေရာတော် သင့်လျော်လိုက်ဖက်တဲ့သူ လိုအပ်တဲ့အရည်အချင်း အမှန်တကယ်ရှိတဲ့သူကိုပဲ ခန် အပ် တာ၀န်ပေးဖို ဆိုလိုတာပါ။ အတိုချုပ်ကတော့ လူမှန်နေရာမှန်စေ ပါ့ဗျာ။
၃။ “ပရောဂျက်တစ်ခုကို ကာင်းကောင်း ထိန်းချုပ်နိုင်ဖို အတွက် အရေးအကြီးဆုံးကတော့ ‘ကိုယ်စီးတဲ့မြင်း အထီးအမ ကွဲကွဲပြားပြား သိထားရမယ်ဗျ။ [know your horses!]’။ ဆိုလိုတာက ခင်ဗျားအဖွဲ ထဲက ဘယ်သူဟာတော့ဖြင့် သိပ်လှည့်ကြည့်စရာမလိုပဲ သူဟာသူ အာင်မြင်အောင်လုပ်သွားနိုင်တယ်၊ ဘယ်သူကတော့ဖြင့် မဆလာပက် နှမ်းဖြူးပေးရုံလောက်ပဲ လိုတယ်၊ ဘယ်သူကတော့ဖြင့် အနီးကပ် ကြီးကြပ်ပေးဖို လိုအပ်တယ်၊ စသည်ဖြင့် သိထားရမယ်။ ဒါမှာသာ ကိုယ့်ပရောဂျက်ကို အာင်မြင်အောင် သင့်လျော်သလို စီမံခန် ခွဲအုပ်နိုင်မှာပေါ့” လို  စွမ်းရည်မြင့် ဂိမ်းကွန်ပြူတာတွေ ထုတ်လုပ်တဲ့ PshychsoftPC က အမှုဆောင်အရာရှိချုပ် Dr. Tim Lynch က ဆိုပါတယ်။ မှန်ပါတယ်။ ပရောဂျက်မန်နေဂျာကောင်းတရောက်ဟာ ကိုယ့်အဖွဲ မှာ ပါတဲ့ အဖွဲ ၀င်တရောက်ချင်းစီရဲ့ အားသာချက် အားနည်းချက် စိတ်နေစိတ်ထား အကြိုက် စရိုက် စတာတွေကို ကာင်းကောင်းသိထားရပါမယ်။ သိအောင်လည်း လုပ်ရပါမယ် စိတ်၀င်စားမှုလည်းရှိရပါမယ်။ နည်းပညာပိုင်းဆိုင်ရာ ဘယ်လောက်တော်တယ်ဆိုဆို၊ စီမံခန် ခွဲမှုဘယ်လောက်ကောင်းတယ်ပြောပြော၊ အတွေ အကြုံဘယ်လောက်ရင့်ပြီ ညွှန်းညွှန်း သူ ရဲ့ team member တရောက်အကြောင်းမေးလိုက်လို  “မသိဘူးဗျ၊ အဲဒီလူအကြောင်း စိတ်မ၀င်စားဘူး” လို  ဆိုသူဟာ ဘယ်တော့မှ ဆာ့ဖ်၀ဲပရောဂျက်မန်နေဂျာကောင်းတရောက် မဖြစ်နိုင်ပါဘူး။
၄။ ပရောဂျက်အတွက် အစီအစဉ်တွေကို စဉ်းစားတဲ့အခါ  ပင်ဆင်တဲ့အခါ ပရောဂျက်တခုလုံးကို ခုံကြည့်၊ တကယ် အကောင်အထည်ဖေါ် အလုပ်လုပ်ရင်တော့ အပိုင်းလိုက် အပိုင်းလိုက်လုပ်။ လို  bigWebApps.com ရဲ့ CEO Patrick Clements ကဆိုပါတယ်။ မှန်ပါတယ်။ သိပ်ကြီးလွန်းတဲ့ နှစ်နဲ ချီရေးရတဲ့ ဆာ့ဖ်၀ဲပရောဂျက်တွေမှာဆိုရင် ကိုယ့်ရဲ့ အဆုံးသတ် ရည်မှန်းချက် သတ်မှတ်ထားပေမယ့် ၊ အဲဒီ ရည်မှန်းချက်ကြီး ပါက်မြောက်အောင်မြင်ဖို ကျတော့၊ တဆင့်ချင်း တဆင့်ချင်းပဲ အကောင်အထည်ဖေါ်ရတာကိုး။ နာက်တစ်နည်း ပာရရင် Analysis တို  Design တို လိုကိစ္စတွေ စဉ်းစားတဲ့အခါ project ကြီး တခုလုံးအတွက် စဉ်းစား၊ Implementation အဆင့်မှာတော့ step by step သွား …ဆိုတဲ့သဘောမျိုးပါပဲ။ ဥပမာဗျာ ကိုယ် နာက်ဆုံးလိုချင်တဲ့ final product က On-line air ticket management system။ ဒါပေမယ့် တကယ် အကောင်အထည်ဖေါ်တဲ့အဆင့် တနည်းပြောရရင် ဆာ့ဖ်၀ဲရေးတဲ့အဆင့်မှာတော့ ပထမလမှာ Login နဲ  ပတ်သက်တာပြီးရမယ်၊ ဒုတိယလမှာ Registration နဲ  ပတ်သက်တာပြီးရမယ်၊ တတိယလမှာ User Management နဲ ဆိုင်တဲ့ module ပီးရမယ်…စသည်ဖြင့် စသည့်ဖြင့် အပိုင်းလိုက် ရည်မှန်းချက် နဲ  ခွဲစိပ်ပြီး လုပ်လို  ဆိုလိုတာပါ။ သိပ်ကြီးလွန်းတဲ့အခါ ဘယ်လိုအရာမှန်းမသိဖြစ်တတ်ပြီး၊ သိပေ်၀းလွန်းတဲ့အခါကြတော့လည်း မထင်မရှား ၀ေ၀၀ါး၀ါး ဖစ်တတ်လို ပါ။
၅။ ဦးစားပေးအစီအစဉ်တွေ ဆွဲထား။ အဲဒီ ဦးစားပေးအစီအစဉ်တွေအချင်းချင်း ထိပ်တိုက်တွေ လာရင် ဘယ်လို လုပ်ကိုင်ဆောင်ရွက်ရမယ်ဆိုတဲ့ တိကျ ခိုင်မာတဲ့ လမ်းညွှန်ချက်ချထား။ ဟိုကွေ ဟိုတက်နဲ လှာ်၊ ဒီကွေ  ဒီတက်နဲ လှာ်ပြီး မီးစင်ကြည့် ကကြတာပေါ့ကွာ ဆိုတာမျိုး မလုပ်နဲ ။ project plan ဆွဲတုန်းကတည်းက ပုံမှန်အစီအစဉ်၊ အရံအစီအစဉ်၊ အရေးပေါ်အစီအစဉ် စသည်ဖြင့် တခါတည်း ထည့်သွင်းရေးဆွဲထား။ နာက်တချက်က “အလုပ်တွေအများကြီး တပြိုင်တည်းလုပ်တာ (multitasking) ဟာ အရည်အသွေးရှိရှိ ပီးမြောက်အောင်မြင်နိုင်စွမ်းကို အကြီးအကျယ် ထိခိုက်စေတယ်ဆိုတာကို တကယ့် ပရောဂျက်မန်နေဂျာကောင်းတရောက်အနေနဲ  သိထားရမယ်။ ဒါကြောင့် လူတရောက်ကို တချိန်မှာ တခုကောင်းကိုသာ အာရုံစူးစိုက်ပြီး အလေးထားလုပ်ဆောင်စေရမယ်” လို  အမှုဆောင်အရာရှိတွေအသုံးပြုမယ့် အစီအစဉ်ရေးဆွဲတဲ့ဆော့ဖ်၀ဲတွေရေးသားတဲ့ Realization Technologies က အမှုဆောင်အရာရှိချုပ် Sanjeev Gupta ကဆိုပါတယ်။
၆။ ပရောဂျက်ရဲ့ အခြေအနေနဲ  အဲဒီ ပရောဂျက်မှာ ပါ၀င်ရေးသား အကောင်အထည်ဖေါ်နေသူတွေကိုပါ အမြဲမပြတ် စာင့်ကြည့် အကဲခတ်နေရမယ်။ “သမားရိုးကျ ပုံမှန်သုံးစွဲနေကျ project management tools တွကိုချည်း အားကိုးမနေပဲ ကိုယ့်ရဲ့ resource တွ (လူ ငွကြေး အချိန် နဲ  တခြား ရင်းမြစ်တွေ) ကို ပုံမှန်စောင့်ကြည့်နိုင်မယ့် အစီအစဉ်တခု လုပ်ထားရမယ်။ ပရောဂျက်မန်နေဂျာကောင်းတရောက်ဟာ ဘာတွေဖြစ်ပျက်နေသလဲဆိုတာ အချိန်နဲ တပြေးညီ သိနေရမယ်” လို  Harrisburg သိပ္ပံနဲ  နည်းပညာ တက္ကသိုလ်၊ ပရောဂျက်စီမံခန် ခွဲရေးအဖွဲ ရဲ့ ခါင်းဆောင် Albert Sarvis ကဆိုပါတယ်။
တချို ပရောဂျက်မန်နေဂျာတွေဟာ အစည်းအေ၀းတွေဘာတွေမှာ တင်ပြဖို  power point လးတွေပြင်ရုံ၊ gantt chart လးဆွဲရုံ၊ team member တွဆီကို remainder e-mail လးပို ရုံလောက်ကိုပဲ ဒါဟာ project management လို  ထင်နေတတ်ကြပါတယ်။ ဒါကြောင့်လည်း Web design, custom Web applications နဲ  Internet marketing solutions တွ ရးသားတဲ့ NeoNexus ရဲ့ ဥက္ကဌ Kent Milholland က “ပရောဂျက် စီမံခန် ခွဲရေးနဲ ပတ်သက်တဲ့ ဆာ့ဖ်၀ဲတွေသုံးတယ်ဆိုတဲ့နေရာမှာ အီးမေးလ် တခုလောက်ကိုပဲ သုံးမနေနဲ ” လို  အကြံပြုတာပါ။
အဲဒီလို ကိုယ့်ရဲ့ team တခုလုံးရဲ့ လှုပ်ရှားဆောင်ရွက်မှုတွေကို မျက်ချေမပြတ်ကြည့်နိုင်ဖို  “Team member တွ အားလုံးပါတဲ့ အပတ်စဉ် အစည်းအေ၀းလုပ်။ team member တရောက်ချင်းစီကို သူတို  အရင်တပတ်က ဘာတွေလုပ်ခဲ့တယ်။ အခုဘာတွေလုပ်နေတယ်။ ရှ တပတ်မှာ သူ တို ကို ဘယ်လို အလုပ်မျိုးတွေလုပ်ဖို  ခိုုင်းထားတယ် (assign လုပ်ထားတယ်)။ လာလောဆယ် ဘယ်လိုအခက်အခဲတွေရှိတယ် အဲဒီအတွက် ဘယ်သူဘာလုပ်ပေးနိုင်မလဲ..စသည်ဖြင့် အဖွဲ ၀င်တရောက်ချင်းစီကို အစည်းအေ၀းမှာ တင်ပြခိုင်း” လို ၊ Sage Nonporfit Solutions ကုမ္ပဏီ ရဲ့ သုတေသနနဲ ဖွံ ဖိုးရေးဌာနက ဒု-ဥက္ကဌ Grant M. Howe ကဆိုပါတယ်။
၇။ software project management အတွက် နာက်ဆုံးတင်ပြချင်တဲ့အချက်ကတော့ AppleTech Consultants က Jaimin Doshi ပးတဲ့အကြံညာဏ်ပါ။ အဲဒါကတော့ “မူလ သတ်မှတ်ထားတဲ့ အစီအစဉ်ကနေ၊ အပြောင်းအလဲတခုဖြစ်လာခဲ့ရင်လည်း အလိုက်သင့် ပာင်းနိုင်အောင်လုပ်ထားရမယ်။ အဲဒီလို အဆင်ပြေပြေ လိုက်ပြောင်းနိုင်ခြင်းဟာ ပရောဂျက်တခု အာင်မြင်ဖို အတွက် အလွန်အရေးပါတဲ့အချက်ဖြစ်တယ်” ဆိုတာပါပဲ။ ဒါကို change management လို လည်းခေါ်နိုင်ပါတယ်။ ဒီအချက်ကတော့ ရှင်းလင်းတယ်ထင်ရသလောက် နက်ရှိုင်းလှတဲ့အတွက် မိတ်ဆွေတို ဘာသာပဲ ဆက်လက်တွေးခေါ်စဉ်းစား ကြပါတော့။ ကျွန်တော်ကတော့ ဒါ၀င် (Charles Darwin )ပြောခဲ့တဲ့ စကားလေးတခွန်းကိုပဲ လက်ဆောင်ပါးချင်ပါတယ်။ အဲဒါကတော့ “အား အကြီးဆုံးတွေ ညာဏ်အရှိဆုံးတွေ ရှင်ကျန်ခဲ့တာမဟုတ်ဘူး။ အလိုက်သင့် လိုက်ပြောင်းနိုင်တဲ့အရာတွေဟာ ရှင်ကျန်ရစ်တာ “It is not the strongest of the species that survives, nor the most intelligent that survives. It is the one that is the most adaptable to change.” ဆိုတဲ့စကားပါ။ ကြံကြံဖန်ဖန် စဉ်းစားမိတာကတော့ တကယ်လို  မပြောင်းချင်တဲ့သူတွေက လာလောဆယ်မှာ အားအကြီးဆုံးဖြစ်နေပြီး၊ အသိညာဏ်ရှိသူတွေက paralyze ဖစ် ချိနဲ နမယ်ဆိုရင် နာင်အနာဂတ်မှာ ဘယ်လိုဖြစ်လာမလဲ ဆိုတာပါ။
ရွှင်လန်းချမ်းမြေ့ပါစေ။

infoTherapy(2013)
REF: 13 Tips for Keeping IT Projects Under Control By Jennifer Lonoff Schiff ( http://www.cio.com/article/730342/13_Tips_for_Keeping_IT_Projects_Under_Control) ကို အခြေခံပါသည်။

Wednesday, August 7, 2013

တန်ဖိုးကြီးမား ​ဆော့ဖ်ဝဲအမှားများ

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

Metric Mixup Problem
၁၉၉၈ ခုနှစ် ဒီဇင်ဘာ ၁၁-ရက်မှာ နာဆာ (NASA)က လွှတ်တင်ခဲ့တဲ့ အင်္ဂါဂြိုဟ် ရာသီဥတုလေ့လာရေး ဂိုဟ်ပတ်ယာဉ် (Mars Climate Orbiter) ဟာ၊ ၁၉၉၉ ခုနှစ် စက်တင်ဘာ ၂၃-ရက် မှာ အင်္ဂါဂြိုဟ်ပတ်လမ်းကို ချဉ်းကပ်နေစဉ်မှာပဲ ပျက်ကျ ပျက်စီးခဲ့ပါတယ်။ ပျက်ရတဲ့ အကြောင်းရင်းက နာဆာရဲ့ အာကာသယာဉ်တည်ဆောက်ရေးအဖွဲ နဲ  အာသာသယာဉ် လမ်းကြောင်း ထိန်းသိမ်းလမ်းညွှန်ရေးအဖွဲ  နှစ်ဖွဲ က မတူညီတဲ့ တိုင်းတာရေးစနစ်တွေကို သုံးထားတဲ့ အတွက်ကြောင့်ပါ။ တဖွဲ က English Unit (foot, pound, second – FPS) စနစ်ကိုသုံးပြီး၊ နာက်တဖွဲ က Metric Unit (meter, kilogram, second - MKS) စနစ်ကို သုံးထားတာကြောင့်လို ဆိုပါတယ်။ (REF: http://mars.jpl.nasa.gov/msp98/news/mco990930.html) အာကာသယာဉ်ပေါ်မှာရှိတဲ့ ပျံသန်းရေစနစ် ဆာ့ဖ်၀ဲက  ရွ လျားဖို လိုအပ်တဲ့ အား (force)နဲ  ပတ်သက်ပြီး ညွှန်ကြားချက်ကို လက်ခံတဲ့အခါ metric unit တခုဖြစ်တဲ့ newton (N) နဲ လက်ခံပါတယ်။ နာဆာရဲ့ မပြင်ထိမ်းချုပ်ရေးစခန်းက အဲဒီညွှန်ကြားချက်ပေးတဲ့အခါ Imperial Unit or British Unit ဖစ်တဲ့ pound-force (lbf) နဲ  ပးပါတယ်။ အကျိုးဆက်ကတော့ ယာဉ်ဟာ မူလက ရည်မှန်းသတ်မှတ်ထားတဲ့ အင်္ဂါဂြိုဟ်ပတ်လမ်းအမြင့်ထက် အများကြီးနိမ့်တဲ့ အမြင့် (altitude) ဖစ်တဲ့ အင်္ဂါဂြိုလ် အပေါ်ပိုင်းလေထုအလွှာထဲကို ချဉ်းနင်း၀င်ရောက်ခဲ့တာကြောင့် ပတ်၀န်းကျင် လထုရဲ့ဒဏ်အား ( atmospheric stresses) တွ ကိုခံရပြီး ယာဉ်ဟာ တစစီ ပုတ်ထွက် ပျက်စီးခဲ့ရပါတယ်။ အဲဒီအချိန်ကစပြီး အဲဒီလို အမှားမျိုးကို “စံ မတူညီတဲ့ တိုင်းတာရေးစနစ်တွေကို ရာပြီးသုံးလို ဖစ်ရတဲ့ ပဿနာ metric mixup problem” လို ခါ်တွင်ခဲ့ပါတယ်။

Weak Logic Check
တခါ သူနဲ တွဲလျက်ပရောဂျက်ဖြစ်တဲ့ ၁၉၉၉ ဇန်န၀ါရီ ၃-ရက်နေ မှာ နာဆာက လွှတ်တင်ခဲ့တဲ့ အင်္ဂါဂြိုဟ်၀င်ရိုးစွန်းဆင်းယာဉ် (Mars Polar Lander)ဟာလည်း၊ အင်္ဂါဂြိုဟ် ရာသီဥတု လ့လာရေးယာဉ် ပျက်ကျပြီး နာက်နှစ်လခွဲလောက်အကြာ ၁၉၉၉ခု ဒီဇင်ဘာ ၃-ရက်နေ မှာ အင်္ဂါဂြိုဟ်ပေါ်ကို ဆင်းသက်ဖို  ကျိုးစားစဉ်မှာပဲ ပျက်ကျခဲ့ပြန်ပါတယ်။ အကြောင်းကတော့ ယာဉ်ဟာ အမြင့်ပေ ၁၃၀ လာက်မှာ ရှိနေသေးလျက်နဲ ၊ ယာဉ်မှာ တပ်ဆင်ထားတဲ့ ခထောက်သုံးချောင်းရဲ့ အာရုံခံစနစ်(magnetic sensor)တွေက အင်္ဂါဂြိုဟ်ရဲ့ မျက်နှာပြင်နဲ ထိပြီ ဆိုပြီး မှားယွင်းအချက်ပေးတယ်။ အဲဒီအခါမှာ ယာဉ်ရဲ့ စက် (engine) ကို ထိန်းချုပ်တဲ့ ဆာ့ဖ်၀ဲစနစ်က၊ (ကျဆင်းနေတဲ့ အရှိန်လျော့ကျသွားအောင် ယာဉ်ရွေ လျားနေတဲ့ လမ်းကြောင်းရဲ့ ပာင်းပြန်လမ်းကြောင်းအတိုင်း တွန်းကန်ထားပေးတဲ့) အရှိန်သတ် ဒုံးကျည်တွေ (retro rockets) ကို ပိတ် ပစ်လိုက်တယ်။ ဒါကြောင့် အင်္ဂါဂြိုဟ်မျက်နှာပြင်အထက် မီတာ ၄၀ (ပေ ၁၃၀ ခန် ) လာက်အမြင့်မှာ တစ်စက္ကန်  ၁၃ မီတာနှုန်း ( 13 meter per second) အလျင် (velocity) နဲ ချဉ်းကပ်လာနေတဲ့ယာဉ်ဟာ၊ အရှိန်သတ်ဒုံးကျည်တွေရဲ့အား မပါတော့တာကြောင့် ၊ အင်္ဂါဂြိုဟ်မြေဆွဲအားရဲ့ဒဏ်ကို ပိုခံရပြီး၊ တကယ်ဆင်းသက်ရမယ့် အလျင် 2.4 meter per second ထက် ဆယ်ဆလောက်ပိုတဲ့့၊ 22 meter per second (တနာရီကို မိုင် ၅၀ လာက်) နှုန်းနဲ  အင်္ဂါဂြိုဟ် မျက်နှာပြင်ပေါ်ကို အရှိန်ပြင်းပြင်း ကျရောက် ပျက်စီးခဲ့ပါတယ်။ တကယ်တော့ အာရုံခံကရိယာတွေရဲ့ မှားယွင်းအချက်ပြနိုင်ခြေတွေနဲ ပတ်သက်ပြီး ဆာ့ဖ်၀ဲက ပည့်ပြည့်စုံစုံ ကာင်းကောင်းမွန်မွန် မကိုင်တွယ် မစစ်ဆေးလို အခုလို ဖစ်ရတာပါ။ ဆာ့ဖ်၀ဲရဲ့အမှားကြောင့် အဲဒီ Mars ဂိုလ်လေ့လာရေး အာကာသယာဉ် နှစ်စီး ပျက်စီးခဲ့မှုဟာ အမေရိကန်ဒေါ်လာသန်းပေါင်း ၁၈၀ လာက် အလဟဿ ဆုံးရှုံးစေခဲ့တယ်လို သိရပါတယ်။ (REF: http://news.bbc.co.uk/2/hi/science/nature/4522291.stm)

Self-intersecting shape outline problem
သက္ကရာဇ် ၂၀၀၀ ခုနှစ်၊ နို၀င်ဘာလတုန်းက၊ ပနားမားနိုင်ငံ (Panama) ရဲ့ အမျိုးသားကင်ဆာသိပ္ပံ (National Cancer Institute) မှာ၊ ကင်ဆော၀ဒနာရှင် ၂၈ ရာက်ကို ဆရာ၀န်ညွှန်ကြားတာထက် အများကြီးပိုတဲ့ ဓါတ်ရောင်ခြည်ပမာဏ ပးမိခဲ့တယ်။ အဲဒီရဲ့ အကျိုးဆက်ကြောင့် အနည်းဆုံး လူနာငါးဦးသေဆုံးခဲ့ရပြီး တခြားကျန်တဲ့ လူနာတွေလည်း ဓါတ်ရောင်ခြည်သင့်လို  ရာဂါ နာက်ဆက်တွဲ ၀ဒနာဆိုးကျိုးတွေ အကြီးအကျယ်ခံစား လိုက်ရတယ်လို  အမေရိကန် အစားအသောက်နဲ ဆး၀ါးထိမ်းသိမ်းကွပ်ကွဲရေးဌာန (U.S Food and
Drug Administration - FDA) ကဆိုပါတယ်။ (REF: http://www.fda.gov/cdrh/ocd/panamaradexp.html, July 6, 2001)
အကြောင်းရင်းကို စုံစမ်းစစ်ဆေးကြည့်လိုက်တော့၊ ဓါတ်ကင်တဲ့စက် (Theratronics Cobalt-60) ကို ထိန်းချုပ်တဲ့ Multidata ဆိုတဲ့ ဆာ့ဖ်၀ဲရဲ့ algorithm အမှားကြောင့်ဆိုတာ သွားတွေ ခဲ့ပါတယ်။
အဲဒီ Multidata ဆာ့ဖ်၀ဲမှာ စက်ကိုင်တဲ့သူ(Theratronics Cobalt-60 ရဲ့ operator) တွ ကို “block” နဲ  ပတ်သက်တဲ့ အချက်အလက်အလက် ကိန်းဂဏန်းတွေကို ထည့်သွင်းခွင့် ပးထားတယ်။ “block” ဆိုတာ၊ လူနာကို ဓါတ်ကင်တဲ့အခါ ( x-ray ဖတ်တဲ့အခါ ) ကင်ဆာဆဲလ်တွေရှိနေတဲ့ အပိုင်းကိုပဲ ဓါတ်ရောင်ခြည်သက်ရောက်စေပြီး၊ တခြား ကာင်းတဲ့ ကျန်းမာနေတဲ့ ဆဲလ်စ် (cells) တွ တစ်ရှုး(tissues) တွကို ဓါတ်ရောင်ခြည်မသင့်အောင် ကာကွယ်ပေးတဲ့ သတ္တုပြားကို ပာတာပါ။ ဆရာ၀န်တွေဟာ လူနာတဦးချင်းစီပေါ်မူတည်ပြီး အမျိုးမျိုးအထွေထွေ မတူကွဲပြားတဲ့ block တွကိုသုံးဖို ၊ လိုအပ်သလိုညွှန်ကြားတာဖြစ်ပါတယ်။ စက်ကိုင်တဲ့သူဟာ ဆရာ၀န်ညွှန်ကြားထားတဲ့ အဲဒီ block နဲ ပတ်သက်တဲ့ အချက်အလက်တွေကို စက်ထဲကို ရိုက်ထည့်လိုက်တဲ့အခါမှာ ၊ Multidata ဆာ့ဖ်၀ဲက သက်ဆိုင်ရာလူနာကို ဓါတ်ရောင်ခြည်ပမာဏ ဘယ်လောက်ပေးရမလဲဆိုတာကို တွက်ချက်တာဖြစ်ပါတယ်။
ဒီမတော်မတမှုဖြစ်စဉ်မှာ အဲဒီလို ဓါတ်ရောင်ခြည် လွန်ကဲသက်ရောက်စေတဲ့အကြောင်းရင်းကို ရှာဖွေကြည့်လိုက်တော့၊ ဆာ့ဖ်၀ဲ နားလည်မှုလွဲစေမယ့် ပုံစံမျိုးနဲ  operator တွကို data input လုပ်ခွင့်ပေးထားတဲ့ ပဿနာဖြစ်ကြောင်း သွားတွေ ရပါတယ်။ အဲဒါကြောင့် Multidata ဆာ့ဖ်၀ဲက ပုံဖေါ်ပေးတဲ့ block တွမှာ အပေါက်(hole) တွ ပါသလိုဖြစ်နေခဲ့ပြီး၊ လူနာရဲ့ မလိုအပ်တဲ့နေရာတွေကိုပါ ဓါတ်ရောင်ခြည်ကျရောက်စေခဲ့တာဖြစ်ပါတယ်။ တနေ ကို လူနာတစ်ရာလောက် ကုသပေးနေတဲ့ အဲဒီဆေးရုံကြီးမှာ operator တစ်ရောက်ချင်းစီရဲ့ data ရိုက်ပုံ သွင်းပုံတွေကြောင့် လူနာပေါင်းဘယ်လောက်အထိ ထိခိုက်နစ်နာခဲ့ရတယ် (ဓါတ်ရောင်ခြည်သင့်ခဲ့ရတယ်) ဆိုတာ အတိအကျ ပာဖို တာင် ခပ်ခက်ခက်ပါ။ အသေးစိပ်သိချင်တယ်ဆိုရင်တော့ March 2004 ထုတ်၊ eWEEK ရဲ့ ဆာင်းပါး http://www.findarticles.com/p/articles/mi_zdewk/is_200403/ai_ziff121063 မှာ ဖတ်ကြည့်ပါ။ ဆာ့ဖ်၀ဲရဲ့အမှားကြောင့် ဒါမှမဟုတ် အားနည်းချက်ကြောင့် ဖစ်ခဲ့ရတဲ့ အလားတူ ဆုံးရှုံးနစ်နာမှု အဖြစ်အပျက်တွေ အများကြီးရှိပါသေးတယ်။ ဥပမာတခုကတော့ ကနေဒါနဲ  အမေရိကန်နိုင်ငံမှာ ၁၉၈၅-၈၇ အတွင်း အဲဒီလိုပဲ ကွန်ပြူတာထိန်းချုပ်တဲ့ ဓါတ်ရောင်ခြည်ကုသရေးစက် Therac-25 ဟာ လူနာ ခာက်ရောက်ကို အလွန်များပြားတဲ့ ဓါတ်ရောင်ခြည် သင့်စေခဲ့ပြီး၊ အဲဒီအဖြစ်အပျက်ကို ဆးကုသရေးဆိုင်ရာ စက်တွေပေါ်ပေါက်ခဲ့တဲ့ ၃၅ နှစ်တာကာလအတွင်း အဆိုး၀ါးဆုံး မတော်တဆမှု လို သတ်မှတ်ခဲ့ရပါတယ်။ (REF: Nancy Leveson, Safeware: System Safety and Computers, Addison-Wesley, 1995)
Roundoff Problem
၁၉၉၀ မှာဖြစ်ပွားခဲ့တဲ့ ပထမပင်လယ်ကွေ စစ်ပွဲ(Gulf War I)မှာ မန်မြန်ဆန်ဆန် နဲ  အချိန်ကိုက် စစ်အောင်နိုင်ရေးအတွက်ဆိုပြီး အမေရိကန်ရဲ့ သဲကန္တာရမုန်တိုင်းစစ်ဆင်ရေး (Operation Desert Storm) မှာ၊ အဆင့်မြင့်ပြီး ရှုပ်ထွေးတဲ့ နည်းပညာတွေကို အသုံးချခဲ့ပါတယ်။ အဲဒီထဲက တစိပ်တပိုင်းကတော့ ပက်ထြီးရော့ လကြောင်းရန်ကာကွယ်ရေး ဒုံးကျည်စနစ် (Patriot missile air defence system) ပဲဖြစ်ပါတယ်။ [“ဒါနဲ  နစမ်းပါဦး။ patriot ဆိုတာ မျိုးချစ် လို အဓိပ္ပါယ်ရတာ လူတိုင်းလိုလို သိနေတာပဲ၊ ခင်ဗျားက ဘာလို အဆန်းထွင်ပြီး အသံထွက်အတိုင်း ရးထားတာလဲဗျ” လို  မိတ်ဆွေတချို က မးခွန်း ထုတ်ကောင်း ထုတ်ချင်ကြမှာပါ။ ‘အဲဒီ စကားလုံးကို၊ အဲဒီနေရာမှာ၊ အဲဒီ အဓိပ္ပါယ် နဲ  သုံးထားတာမဟုတ်ပဲ နာမည်အနေနဲ သုံးထားတာဖြစ်လို ပါ’ လို ဖပါရစေ။]
၁၉၉၁-ခု ဖဖ၀ါရီ ၂၅-ရက် ညမှာ၊ ဆာ်ဒီအာရေးဗီးယားနိုင်ငံ ဒါဟရန်ဒေသမှာ တပ်စွဲထားတဲ့ အမေရိကန် စစ်စခန်းတခုကို၊ အီရတ်က ပစ်လွှတ်လိုက်တဲ့ စကဒ်(Scud) ဒုံးကျည်တစင်း ထိမှန်ခဲ့ပါတယ်။ အကြောင်းကတော့ ပစ်လွှတ်လိုက်တဲ့ စကဒ်ဒုံးကျည်ကို ပက်ထြီးရော့ဒုံးကျည်စနစ်ရဲ့ ရဒါ(Radar)တွေက အချိန်မှီထောက်လှမ်းမိပြီး တန်ပြန် ဒုံးခွင်းဒုံးနဲ အလိုအလျောက် ကြားဖြတ် ပစ်မချနိုင်ခဲ့လို ပါပဲ။ အဲဒီ အဖြစ်အပျက်ကြောင့် အမေရိကန်တပ်သားပေါင်း ၂၈ ဦး ကျဆုံးခဲ့ရပြီး ၁၀၀ နီးပါး ထိခိုက် ဒဏ်ရာရခဲ့ပါတယ်။ ပက်ထြီးရော့ ဒုံးကျည်ကာကွယ်ရေးစနစ်ဟာ ဘာကြောင့် မျှာ်လင့်ထားသလို အလုပ်မလုပ်သလဲဆိုတာကို အကြောင်းရင်း ရှာလိုက်တော့၊ သူ ရဲ့ ရဒါစနစ် နဲ  လမ်းကြောင်းရှာဖွေထောက်လှမ်းရေးစနစ် ဆာ့ဖ်၀ဲမှာ အားနည်းချက်(bug)တခု ရှိနေလို ဆိုတာ သွားတွေ ရပါတယ်။ အဲဒီ အားနည်းချက်က ဒီလိုပါ။
• ရဒါစနစ်က ထာက်လှမ်းမိတဲ့ အရာ၀တ္တုရဲ့ အလျင်၊ တည်နေရာ၊ အကွာအေ၀း စတာတွေကို တွက်ချက်ဖို အတွက် လိုအပ်တဲ့ အလွန်တိကျတဲ့ အချိန်တခု မှတ်သားနိုင်မယ့် ကိန်းရှင် (variable) တခုရှိတယ်။
• အချိန်တန်ဘိုး assign လုပ်မယ့် အဲဒီ variable ထဲကို (အချိန်ကို ပိုတိကျအောင်) တစက္ကန် ရဲ့ ဆယ်ပုံတပုံ ယူနစ် (0.1) အဖြစ် သတ်မှတ်ပြီး သိမ်းဆည်းစေတယ်။
• အဲဒီ ဆာ့ဖ်၀ဲစနစ် run နတဲ့ ကွန်ပြူတာက 24-bit register ကို အသုံးပြုတယ်။
• 0.1 ကို binary စနစ် ဖစ်တဲ့ base-2 နဲ  ကိုယ်စားပြု ဖါ်ပြတဲ့အခါ သူဟာ အဆုံးမဲ့ (non-terminating) ဖစ်နေ တယ်။
• ဒါကြောင့် 24-bit fixed point register ထဲမှာ ထည့်သွင်းနိုင်အောင် binary ပုံစံနဲ  ကိုယ်စားပြုထားတဲ့ floating point ထဲက ၂၃ နရာမြောက်ရဲ့ နာက်က ဒဿမနေရာတွေကို ဖတ် (truncate) ပစ်တယ်။
အဲဒီလို ဖတ်ပစ်လို  တန်ဘိုး တချို  ဆုံးရှုံးသွားမယ်ဆိုတာ မိတ်ဆွေတို သိမှာပါ။ အဲဒီ တန်ဘိုးက လုံး၀ မများပါဘူး။ တစက္ကန် မှာမှ 2-20 (two to the power minus twenty) စက္ကန် သာ ပျာက်ဆုံး လျာ့ပါး (loss of precision) သွားတာပါ။
• 2 ^ -20 (two to the power minus twenty) = 0.00000095367431640625
• ဒါကြောင့် 24-bit register ကို သုံးထားတဲ့ အဲဒီ ဆာ့ဖ်၀ဲစနစ်မှာ ၁-စက္ကန် ဟာ ၀.၉၉၉၉၉၉ စက္ကန် လာက်ပဲ ရှိပါမယ်။ (1 - 0.00000095367431640625 = 0.99999904632568359375)
• အဲဒီလျော့သွားတဲ့တန်ဘိုးဟာ မူလတန်ဘိုးရဲ့ 0.00001% သာရှိပြီး တစ်စက္ကန် ရဲ့ အပုံ တစ်သန်းမှာ တပုံသာ ပျာက်ဆုံး လျာ့ပါး သွားတာဖြစ်ပါတယ်။
ဒါပေမယ့် ကျွန်တော်တို  ဆက် တွက်ကြည့်ကြပါစို ။
၁ စက္ကန် မှာ 0.00000095367431640625 စက္ကန်  လွဲရင်
၁ နာရီ (၃၆၀၀ စက္ကန် )မှာ 0.00000095367431640625 * 3600 = 0.0034332275390625 စက္ကန် ကွာဟနေပါမယ်။
ဒါကြောင့် နာရီပေါင်း ၁၀၀ ကြာတဲ့အခါမှာ 0.0034332275390625 * 100 = 0.34332275390625 စက္ကန် ကွာဟသွားပါပြီ။
နာရီ တစ်ရာ ပါ်မှာမှ တစ်စက္ကန် ရဲ့ သုံးပုံတစ်ပုံလောက်ပဲ ကွာဟတယ်ဆိုတာလည်း တကယ်တော့ မများလှဘူးလို ထင်ရပါတယ်။ ဒါပေမယ့် 1.7 km/sec ( ၁ စက္ကန် မှာ ၁.၇ ကီလိုမီတာ) နှုန်းအလျင်ရှိတဲ့ စကဒ်ဒုံးကျည်ဟာ အဲဒီအချိန်အတွင်းမှာ (1700 * 0.34332275390625) မီတာပေါင်း ၅၈၀ ကျာ် (ပေ ၂၀၀၀ နီးပါး) ခရီးနှင်ပြီး ချဉ်းကပ်လာခဲ့ပါပြီ။ ပက်ထြီးရော့ရဲ့ ရဒါစနစ်တွေက အဲဒီ စကဒ်ဒုံးကျည်ကို ထာက်လှမ်းမိပေမယ့်၊ တကယ့်လက်တွေ လာကရဲ့ ပကတိကြာချိန်နဲ  ကွန်ပြူတာမှာ မှတ်သားထားတဲ့ အချိန် ကွာဟနေတာကြောင့်၊ ဒုံးကျည်ရဲ့ အလျင် နဲ  တည်နေရာကို ဆာ့ဖ်၀ဲက တိကျမှန်ကန်အောင် မတွက်ချက်နိုင်လိုက်ဘူး။ ဒါကြောင့် ဒုံးခွင်းဒုံးစနစ်က အလိုအလျောက် တုံ ပန်ပစ်ချဖို  နှာင့်နှေးခဲ့ရပါတော့တယ်။
တချို ကလည်း ဒါဟာ ဆာ့ဖ်၀ဲရဲ့ အမှားသက်သက်ချည်းပဲ မဟုတ်ဘူးလို  ငင်းချက်ထုတ်ပါတယ်။ ဘာလို လဲဆိုတော့ မူလတုန်းက အဲဒီ ပက်ထြီးရော့စနစ်ကို ဆိုဗီယက်တို ရဲ့ ခရုဇ်ဒုံးကျည် အပါအ၀င် အလယ်အလတ်နဲ  အမြင့်ပျံ စစ်လေယာဉ်တွေကို (လိုအပ်ရင်) ပစ်ချနိုင်ဖို  ရွ လျားစနစ်တခုအဖြစ် တည်ဆောက် ခဲ့တာပါ။ တစ်နေရာမှာ နာရီနည်းနည်းပဲထား၊ နာက်တစ်နေရာရွှေ ..စသည်ဖြင့်ပေါ့။ ဒါကြောင့် သူ ရဲ့မူလရည်ရွယ်ချက်နဲ  မကိုက်ညီတဲ့ နရာမှာ သုံးလို  အခုလို ဖစ်ရတာလို ဆိုပါတယ်။ ဘယ်လိုမကိုက်ညီတာလဲဆိုတော့၊ တစ်အချက်က ခရုဇ်ဒုံးကျည်ဟာ တော၀းပစ်ဖြစ်တဲ့အတွက် သူ ရဲ့ အလျင်ဟာ (စကဒ်ဒုံးကျည်နဲ ယှဉ်ရင်) သိပ်မမြန်ပါဘူး။ စကဒ်ဒုံးကျည်ကတော့ တာတိုပစ်ဖြစ်တဲ့အတွက် ခရုဇ်ဒုံးကျည်ထက် ပိုမြန်ပါတယ်။ နှစ်အချက်က တစ်နေရာမှာ နာရီနည်းနည်းပဲထားဖို  ဒီဇိုင်းလုပ်ထားတဲ့ အဲဒီ ဒုံးကျည်ကာကွယ်ရေးစနစ်ကို တနေရာတည်းမှာ နာရီ တစ်ရာလောက်အထိ run ထားတဲ့အချက်ပါ။ မူလကတော့ “ဒီစနစ်ကို တကြိမ်မှာ ၈-နာရီထက် ပိုကြာအောင် မသုံးဘူး။ တကယ်လို  ဆက်တိုက်သုံးမယ်ဆိုရင်လည်း ပုံမှန် restart လုပ်ပေးမယ်” လို  ကြံရွယ်ခဲ့ပါတယ်။ အချိန်ကွာဟမှု (time variance) မရှိတော့အောင် ပျာက်သွားအောင်၊ time ကို zero ကို ပန်ထားဖို  system ကို re-start လုပ်မယ်ဆိုရင်၊ အချိန် တစ်မိနစ်လောက် ကြာမှာဖြစ်ပါတယ်။ ဒါပေမယ့် ခက်တာက စစ်ဖြစ်နေတဲ့အချိန်မှာ တစ်မိနစ်ဆိုတဲ့အချိန်ကို ပးပြီး အဲဒီ ဒုံးကျည်ကာကွယ်ရေးစနစ်ကြီးကို restart လုပ်ဖို ဆိုတာ တကယ်တော့ ဘယ်ဖြစ်နိုင်ပါ့မလဲ။ ဘာပဲပြောပြော အရင်းစစ်တော့ အမြစ်မြေမှာ ဆိုသလို loss of precision နဲ  ပတ်သက်ပြီး အရေးထားသင့်သလောက် မထားခဲ့လို ၊ ပာင်းလဲလာနိုင်တဲ့ အခြေအနေတွေနဲ  လိုက်လျောညီထွေဖြစ်အောင် အဖက်ဖက်ကပြည့်စုံအောင် ဆာ့ဖ်၀ဲကို ပင်ဆင်ရေးသား မထားလို  အခုလို ဖစ်ရတာလို ပဲ ဆိုရပါမယ်။

Inconsistency problem
၁၉၉၅ ဒီဇင်ဘာ ၂၀ မှာ အမေရိကန်နိုင်ငံ ဖလော်ရီဒါပြည်နယ်ရဲ့ မိုင်ယာမီအပြည်ပြည်ဆိုင်ရာ လဆိပ်ကနေ အမေရိကန်လေကြောင်းလိုင်း အမှတ်၉၆၅ ဘိုးရင်း (Boeing)757 လယာဉ်ဟာ၊ ကိုလံဘီယာနိုင်ငံ ကယ်လီ (Cali) မို  အယ်ဖွန်ဆို ဘိုနီးလား အာရဂွန် (Alfonso Bonilla Aragón) အပြည်ပြည်ဆိုင်ရာလေဆိပ်ကို ဦးတည်ပြီး ပျံသန်းထွက်ခွာခဲ့ပါတယ်။ လယာဉ်ဟာ မိုင်ယာမီက ထွက်ခွာချိန်နောက်ကျခဲ့ရတာကြောင့် အတတ်နိုင်ဆုံး စာ ဆိုက်ရောက်စေလိုတဲ့အတွက်၊ ကယ်လီတ၀ိုက်မှာလည်း လငြိမ်နေတာကြောင့် ကယ်လီထိန်းချုပ်ရေးစခန်းက လယာဉ်မှူးကို မူလသတ်မှတ်ထားတဲ့ ချဉ်းကပ်လမ်းကြောင်းအတိုင်းမဟုတ်ပဲ ပိုနီးတဲ့ ချဉ်းကပ်လမ်းကြောင်းအတိုင်း ပာင်းပြီးမောင်းမလား လို မးပါတယ်။ လယာဉ်မှူးကလည်း အိုကေပေါ့။ အဲဒီအခါမှာ ဖစ်ချင်တော့ လယာဉ်မှူးက ကွန်ပြူတာစနစ်မှာရှိတဲ့ (လက်ရှိခရီးစဉ်ရဲ့) လယာဉ်ပျံသန်းရေး လမ်းကြောင်းဆိုင်ရာ အချက်အလက်တွေကို မတော်တဆ မှားပြီး ဖျက်ပစ်လိုက်မိတယ်။ မပြင်ထိန်းချုပ်ရေးစခန်းအရာရှိက လယာဉ်မှူးကို ကယ်လီရဲ့ မာက်ဖက်မှာရှိတဲ့ တလူ၀ါ (Tuluá) ကို check in လုပ်ဖို  ညွှန်ကြားတဲ့အခါ၊ လယာဉ်ပရိုဂရမ်မှာက အဲဒီ Tuluá နဲ  ဆိုင်တဲ့အချက်အလက်တွေ မရှိတော့တာကြောင့် လယာဉ်မှူးတွေဟာ ကိုသြဒိနိတ် (coordinates) တန်ဘိုးတွေကို ပျံသန်းရေးဇယား (flight chart) မှာ manualပဲ ရှာရပါတော့တယ်။ ဒီအတွက် လယာဉ်ကို အရှိန် နဲနဲလေးလျော့ချထားလိုက်ပါတယ်။ (အရှိန်လျော့ရင် လယာဉ်ဟာ အာက်ကို နဲနဲချင်း နိမ့်ဆင်းလာမှာပေါ့။) သူတို Tuluá ရဲ့ ကိုသြဒိနိတ်တန်ဘိုးတွေကို တွ တဲ့အချိန်မှာ လယာဉ်ဟာ Tuluá ကို ကျာ်ခဲ့ပြီ။ ဒါကြောင့် လယာဉ်မှူးတွေဟာ ပျံသန်းရေးလမ်းကြောင်းနဲ ပတ်သက်ပြီး ပရိုဂရမ်ပြန်သွင်းဖို  ဆုံးဖြတ်ခဲ့ကြပါတယ်။ အနီးဆုံး နာက်ထပ် check in ပွိုင့် (နေရာ/မြို /ရေဒီယိုအချက်ပြစနစ်..etc) တခုကို flight chart မှာ ရှာတဲ့အခါ ROZO ဆိုတာကို သွားတွေ ရတယ်။ အဲဒီအခါမှာ လယာဉ်မှူးဟာ ဇယားမှာပြထားတဲ့ ROZO အတွက်ကုဒ် R ကို လယာဉ်စီမံခန် ခွဲရေးစနစ် (Flight Management System) ဆာ့ဖ်၀ဲ ထဲကို input အဖြစ်ပေးလိုက်ပါတယ်။ (R လို  ရိုက်ထည့်လိုက်တယ်ပေါ့ဗျာ။) FMS ထဲမှာက R ဆိုတာ Bogotá အနီးမှာရှိတဲ့ Romeo ကို ကိုယ်စားပြုတာ။ ROZO အတွက် ကုဒ်က FMS ထဲမှာ ROZO လို  အပြည့်အစုံ သုံးထားတာဖြစ်တယ်။ Flight Chart နဲ  Flight Management System Software ရဲ့ အဲဒီလို အချင်းချင်း ညီညွတ် ကိုက်ညီမှုမရှိတာကို လယာဉ်မှူးတွေကလည်း ဘယ်သိထားပါ့မလဲ။ အကျိုးဆက်ကတော့ တာင်ကုန်းတွေထူထပ်မြင့်မားလှတဲ့ Romeo အရပ်ကို ဦးတည်ပြီး အလိုအလျောက်မောင်းစနစ် (autopilot)က လယာဉ်ကို မာင်းနှင်သွားပါတော့တယ်။ လယာဉ်မှူးဟာ တာင်တန်းကြီးကို သတိထားမိလိုက်တဲ့အချိန်မှာ လယာဉ်ကို အတတ်နိုင်ဆုံး အမြင့်ကို ဆွဲတင်ပါသေးတယ်။ ဒါပေမယ့် မလွတ်တော့ပါဘူး။ အဲဒီမှာ မီတာ ၃၀၀၀ (ပေ ၉၈၀၀) လာက်အမြင့်ရှိတဲ့ တာင်ရဲ့ တာင်ထွတ်ပိုင်းကို လယာဉ်ဟာ ၀င်တိုက်မိပါတော့တယ်။ ဒီကြေကွဲစရာ မတော်တဆမှုကြောင့် လူပေါင်း ၁၅၉ ဦး အသက်ဆုံးရှုံးခဲ့ရပါတယ်။
နိဂုံး
ဒါတွေဟာဆော့ဖ်၀ဲကြောင့် ဖစ်တာမဟုတ်ဘူး ဆာ့ဖ်၀ဲရေးတဲ့သူတွေကြောင့်ဖြစ်တာ လို  တချို ကဆိုပါလိမ့်မယ်။ မှန်ပါတယ်။ ဆာ့ဖ်၀ဲရေးသားသူတွေဟာ သူတို ရးတဲ့ဆော့ဖ်၀ဲနဲ ပတ်သက်လို အပြည့်အ၀ လုံးလုံးလျားလျား တာ၀န်ရှိသူတွေဖြစ်ပါတယ်။ တာ၀န်လည်းယူရပါလိမ့်မယ်။ ဒါကြောင့်လည်း ကျင့်၀တ်သိက္ခာပိုင်းနဲ  လူမှုရေးဆိုင်ရာအကျိုးသက်ရောက်မှုတွေကို ဆာ့ဖ်၀ဲအင်ဂျင်နီယာပညာရပ်နဲ  ကွန်ပြူတာသိပ္ပံဘာသာရပ်တွေမှာ ထည့်သွင်းလေ့လာတာပေါ့။ နှလုံးခုန်နှုန်း ထိန်းညှိစက်တွေ၊ ကားတွေ လယာဉ်တွေ၊ ဘရိတ်(brake)စနစ်တွေ၊ ဒုံးကျည်ချိန်ရွယ်ပစ်ခတ်တဲ့စနစ်တွေ၊ ဆးပညာဆိုင်ရာကရိယာတွေ၊ မာင်းသူမဲ့ သယ်ယူပို ဆာင်ရေးစနစ်တွေ၊ အထပ်မြင့်ဓါတ်လှေကားစနစ်တွေ၊ စက်ရုပ်တွေ နဲ  စက်မှုထုတ်လုပ်ရေး လုပ်ငန်းခွင်တွေအထိ ဆာ့ဖ်၀ဲဟာ ထဲထဲ၀င်၀င် နရာယူထားတဲ့အတွက်၊ အဲဒီဆော့ဖ်၀ဲ တခုခု မှားလိုက်တာနဲ  အကျိုးဆက်ဟာ ဆိုး၀ါးပြင်းထန်လှပါတယ်။ ဒါကြောင့်ဆော့ဖ်၀ဲအင်ဂျင်နီယာတွေဟာ “ဒီဆော့ဖ်၀ဲက တခုခု မှားခဲ့ရင် လူ အသက်ဆုံးရှုံးစေနိုင်သလား၊ ဒုက္ခိတဖြစ်သွားစေနိုင်သလား၊ ငွကြေးဆုံးရှုုံးမှု အကြီးအကျယ်ဖြစ်စေနိုင်သလား” ဆိုတာ လးလေးနက်နက် မးခွန်းထုတ်သင့်ပါတယ်။ ကိုယ်ရေးထားတဲ့ ဆာ့ဖ်၀ဲကို တတ်နိုင်သမျှ ထာင့်ပေါင်းစုံက စစ်ဆေးသင့်ပါတယ်။ ရှုပ်ထွေးမှုမြင့်မားတဲ့ စနစ်တွေမှာ ဖစ်နိုင်ခြေရှိသမျှအားလုံးကို ကုန်စင်ပြည့်စုံအောင် စမ်းသပ်စစ်ဆေး ဖို ဆိုတာ မဖြစ်နိုင်တဲ့အတွက် testing တခုတည်းနဲ လည်း မလုံလောက်ပါဘူး။ ရှ ကလူတွေရဲ့ အတွေ အကြုံ၊ တခြားသူတွေရဲ့ အကြံညာဏ် အမြင်ရှုဒေါင့်၊ ကိုယ်ကိုယ်တိုင်ရဲ့ အတိတ်က အတွေ အကြုံ အမှား စတာတွေကို လက်တွေ အသုံးချနိုင်တဲ့ သင်္ခန်းစာတွေအဖြစ် ပာင်းလဲ ထုတ်နှုတ်ယူနိုင်စွမ်းရှိရပါမယ်။ ဆာ့ဖ်၀ဲအင်ဂျင်နီယာတစ်ရောက်ဟာ စိတ်ပိုင်းဆိုင်ရာရင့်ကျက်ပြည့်၀သူ၊ ကျင့်၀တ်သိက္ခာလေးစားလိုက်နာသူ နဲ  ကိုယ်လုပ်တဲ့ အလုပ်အပေါ် တာ၀န်ယူ တာ၀န်ခံနိုင်တဲ့သူ ဖစ်သင့်ပါတယ်။ ဆးပညာလောကနဲ  တခြားအရေးကြီးတဲ့ အင်ဂျင်နီယာပညာရပ်နယ်ပယ်တွေမှာ သက်ဆိုင်ရာအလုပ်ကိုလုပ်ဖို  အသိအမှတ်ပြုလိုင်စင် လိုပါတယ်။ ခက်တာက ဒီလောက်အရေးကြီးတဲ့ ဆာ့ဖ်၀ဲအင်ဂျင်နီယာ လာကမှာတော့ အဲဒီလိုမျိုးရှိတာမတွေ ရပါဘူး။ “ဆော့ဖ်၀ဲအင်ဂျင်နီယာတစ်ရောက်အတွက် လိုင်စင် ရှိသင့် မရှိသင့်ဆိုတာတော့ မသိဘူး။ ရှိသင့်တယ်ဆိုရင်တောင် ကျုပ်အတွက်တော့ လုံး၀မလိုဘူးဗျ။ ဘာလို တုန်းဆိုတော့ ကျုပ်က software engineer မဟုတ်ဘူး။ software developer” လို  တချို က ဆိုကြလေမလားမသိဘူး မိတ်ဆွေတို ရ။

ရွှင်လန်းချမ်းမြေ့ပါစေ။
infoTherapy(2013)
REFERECNE: Principles of Computer Science, Carl Reynolds and Paul Tymann, 2008, Chapter 9 Social Issues, Can Computers Kill? ကို အခြေခံ၍ ရးပါသည်။

မှတ်ချက်။ ၂၀၁၃ သြဂုတ်လထုတ် ကွန်ပြူတာဂျာနယ်တွင် ဖါ်ပြပြီးသော ဆာင်းပါးဖြစ်ပါသည်။

Sunday, July 7, 2013

ကွန်ပျူတာသိပ္ပံ နှင့် ကိုင်းကွဲပညာရပ်များ

မိတ်ဆက်နိဒါန်း
ကမ္ဘာ့ပထမဦးဆုံး ကွန်ပြူတာသိပ္ပံပညာရပ်ဆိုင်ရာဘွဲ  ဒီဂရီဖြစ်တဲ့ Cambridge Diploma in Computer Science ကို အင်္ဂလန်နိုင်ငံ ကင်းဘရစ်ချ်တက္ကသိုလ်ရဲ့ ကွန်ပြူတာလက်တွေ စမ်းသပ်ခန်း (University of Cambridge, Computer Laboratory) က ၁၉၅၃ ခုနှစ်မှာ စတင်သင်ကြားပေးအပ်ခဲ့ပါတယ်။ အမေရိကန်နိုင်ငံမှာတော့ ၁၉၆၂ ခုနှစ်ရောက်မှ ပါဂျူးတက္ကသိုလ် (Purdue University)က ကွန်ပြူတာသိပ္ပံ ဘွဲ  သင်တန်းကို စတင်ခဲ့ပါတယ်။ ဒီပညာရပ်ရဲ့ သက်တမ်းဟာ နှစ်ပေါင်း ၆၀-၇၀ ကျာ်ရှိလာပြီပေါ့။ ဒါကြောင့်လည်း ကွန်ပြူတာသိပ္ပံပညာရပ်ဟာ အတိုင်းအတာတရပ်အထိ ရင့်ကျက်တည်ငြိမ်မှုရှိနေပါပြီ။ ဒီပညာရပ် ဖွံ ဖိုးလာတာနဲ အမျှ သူနဲ ဆက်စပ်နှီးနွယ်တဲ့ ပညာရပ်ကိုင်းကွဲတွေပါ အမြောက်အများ ပါ်ထွက်လာခဲ့ပြီး ခုထက်ထိလည်း  ပါ်ထွက်လာနေဆဲပဲ ဖစ်ပါတယ်။ ဒီတော့ ပထမဆုံးအနေနဲ  ကွန်ပြူတာသိပ္ပံဆိုတာဘာလဲ ဆိုတာကိုသာ အရင်ဆုံး စတင်လေ့လာကြည့်ကြပါစို ။
ကွန်ပြူတာသိပ္ပံပညာဆိုတာ ကြီးကျယ်ခမ်းနားတဲ့ ဂရိုဂရမ်ရေးနည်းတွေကို လ့လာတာမဟုတ်ပါဘူး။ ကွန်ပြူတာသိပ္ပံလောကအတွက် နိုဘယ်လ်(Nobel) ဆုလိုပဲ ဂုဏ်သိက္ခာမြင့်မားလှတဲ့ တားရင်းဆု(Turing Award)ရှင် တရောက်ဖြစ်ပြီး ကွန်ပြူတာသီအိုရီ သဘောတရားရေးရာမှာ အလွန်ကြွယ်၀သူတရောက်ဖြစ်တဲ့ အက်ဒ်စ်ဂါ ဒဂျစ်ခ်စထြာ (Edsger Dijkstra) ရဲ့ ထင်ရှားတဲ့ ခိုင်းနှိုင်းချက် စကားတခွန်းရှိပါတယ်။ အဲဒါကတော့
 “နက္ခတ္တဗေဒပညာရပ် (Astronomy) မှာ နက္ခတာရာကြည့်မှန်ပြောင်း (Telecscope) ကို အသုံးချပြီး လုပ်စရာ လ့လာစရာတွေ တပုံတပင်ရှိသလိုပဲ၊ ကွန်ပြူတာသိပ္ပံပညာရပ်မှာလည်း ကွန်ပြူတာကို အသုံးချပြီး လုပ်စရာ ကိုင်စရာ လ့လာစရာတွေ တပုံတပင်ရှိနေပါတယ်”
 ဆိုတဲ့စကားပါ။
တကယ်တော့ ကွန်ပြူတာသိပ္ပံပညာရပ်ဆိုတာ ဘယ်လိုစနစ်မျိုးကိုမဆို နားလည်သဘောပေါက်အောင် လ့လာဖို ၊ သင်္ချာပညာရပ်ဆိုင်ရာ အသုံးချ ကရိယာတန်ဆာပလာတွေ နဲ  အတွေးအခေါ်အယူအဆ တွကို ပါင်းထားတာဖြစ်ပါတယ်။ ကွန်ပြူတာသိပ္ပံပညာရပ်ကိုအသုံးပြုပြီး လူ ဦးဏှောက်စနစ်၊ စကြာ်၀ဠာစနစ်၊ သက်ရှိစနစ် နဲ  ကွန်ပြူတာစနစ်တွေပါ အပါအ၀င် တခြားစနစ်မျိုးစုံကို လ့လာနိုင်ပါတယ်။
ဒီနေရာမှာ မိတ်ဆွေတို ဖက်က မးကောင်းမေးနိုင်တာက “ဥပမာဆိုရင်ဗျာ စကြာ်၀ဠာအကြောင်းနားလည်ဖို  အသင့်တော်ဆုံး အကောင်းဆုံး ပညာရေးလမ်းကြောင်းက ရူပဗေဒ မဟုတ်ဘူးလားဗျ။ ရူပဗေဒကို တိုက်ရိုက်မလေ့လာပဲ ကွန်ပြူတာသိပ္ပံပညာရပ်ကိုသုံးပြီး စင်္ကြာ၀ဠာကြီးအကြောင်း လ့လာမယ်ဆိုတာ ဖာင့်ဖြောင့်သွားလို ရတဲ့လမ်းကို ရှည်လျားအောင် ရှုပ်ထွေးအောင် တမင်ကွေ ၀ိုက်သွားနေသလို ဖစ်မနေဘူးလားဗျ” ဆိုတာပါပဲ။ အဲဒီမေးခွန်းရဲ့ အဖြေနဲ ပတ်သက်ပြီး MIT က သီအိုရီကွန်ပြူတာသိပ္ပံပညာရှင် ပါမောက္ခ စကော့ အာရွန်ဆွန် (Scott Aronson) က အခုလို ရှင်းပြပါတယ်။
 “တကယ်တော့ ရူပဗေဒပညာရှင်တွေ လ့တာတဲ့နည်းက အပေါ်ကနေ အာက်ကို တဖြည်းဖြည်း ချဉ်းကပ်လေ့လာတဲ့ပုံစံ ( top-down approach) မျိုးနဲ သွားတာဗျ။ ပုံစံတကျဖြစ်နေတဲ့ မင်တွေ နကျ ပုံမှန်အဖြစ်အပျက်တွေကို လိုက်လံရှာဖွေတယ်။ အဲဒီအဖြစ်အပျက် ကနေ အချက်အလက်တွေကို ထုတ်ယူ ပီး ယဘုယျ ဥပဒေသတွေ အဖြစ် ဖန်တီးတည်ဆောက်လိုက်တယ်။ ပီးတော့မှတခြားအချက်အလက်တွေနဲ ပါင်းစည်းဆက်စပ်ပေးနိုင်မယ့်၊ ပိုမို ကျယ်ပြန် နက်ရှိုင်း တဲ့ ဥပဒေသတွေ ထွက်ပေါ်လာတဲ့အထိ ဖွင့်ဆိုရှင်းပြကြတယ်။ ကွန်ပြူတာသိပ္ပံကတော့ အဲဒီရဲ့ ပာင်းပြန်လမ်းကြောင်းအတိုင်း အလုပ်လုပ်တယ်လို  တွးထင်မှတ်ယူလိုက်ဗျာ။ ကွန်ပြူတာသိပ္ပံပညာရှင်တွေက ဘယ်လိုလက်တွေ  စမ်းသပ်ဆောင်ရွက်ချက်တွေနဲ မှ သက်သေပြနေဖို မလိုပဲ မှန်ကန်ကြောင်း အလွယ်တကူလက်ခံထားပြီးဖြစ်တဲ့ စည်းမျဉ်းစည်းကမ်း ဥပဒေသတွေကို အသုံးပြုပြီးတော့ အဖြစ်နိုင်ဆုံး အရိုးရှင်းဆုံးစနစ်တခုနဲ  စ’ လိုက်တာပဲ။ ပီးတော့မှ ‘ဘယ်လောက်အထိ ရှုပ်ထွေးတဲ့ စနစ်မျိုးကို တို  တည်ဆောက်နိုင်မလဲ။ ဒါမှဟုတ် အဲဒီလောက်ထိ ရှုပ်ထွေးတဲ့စနစ်မျိုးကို တို  တည်ဆောက်လို ရပါမလား’ ဆိုပြီး ကိုယ့်ကိုကိုယ် မးမြန်းတဲ့ ပုံစံမျိုးနဲ သွားတာပါ”
လို ဆိုပါတယ်။ ဒါကြောင့် “တူညီတဲ့အကြောင်းအရာတစ်ခုတည်းကိုပဲ မတူညီနဲ ပညာရပ် (computer science) ကိုသုံးပြီး မတူညီတဲ လမ်းကြောင်းအသီးသီးကနေ ကွဲပြားခြားနားတဲ့ ပုံသဏ္ဍန်နဲ  ချဉ်းကပ်လေ့လာတာပါ” လို ပဲ ဆိုပါရစေ။
“ကဲကဲ..ဒါဆိုလည်း ကာင်းပါပြီဗျာ။ ပိုရှင်းသွားအောင် ကွန်ပြူတာသိပ္ပံဆိုတာ ဘာလဲ ဆိုတာကိုသာ တိတိကျကျ ပာစမ်းပါ” လို ဆိုရင် မိတ်ဆွေကို အရင်ဆုံး တခုတော့ တင်ပြချင်ပါရစေ။ ကွန်ပြူတာသိပ္ပံပညာရပ်နဲ ပတ်သက်တဲ့ ဖွင့်ဆိုရှင်းလင်းချက်တွေ အဓိပ္ပါယ်သတ်မှတ်ချက်တွေဟာ ပညာရှင်တွေပေါ်မူတည်ပြီး အမျိုးမျိုးအထွေထွေရှိနေပါတယ်။ ဒါကြောင့် ကျွန်တော် ဒီဆောင်းပါးမှာ တင်ပြမယ့်အချက်ဟာ မိတ်ဆွေ ဖတ်ဖူး မှတ်ဖူးတာနဲ  တူချင်မှ တူမှာပါ။ ဒါပေမယ့် သဘောတရားကတော့ အတူတူပဲဖြစ်ပါလိမ့်မယ်။ အဲဒီသဘောတရား အနှစ်သာရကတော့ ကွန်ပြူတာသိပ္ပံဆိုတာ တွက်ချက်မှုပညာရပ် (computing) နဲ  နှီးနွယ်ဆက်စပ်နေတဲ့ သီအိုရီသဘောတရားပိုင်း နဲ  လက်တွေ အသုံးချမှုပိုင်းဆိုင်ရာ ပညာရပ်ပေါင်းစုံကို ပါင်းစည်းဆက်စပ်လေ့လာတဲ့ ပညာရပ်ဖြစ်တယ် ဆိုတာပါပဲ။

ကွန်ပြူတာသိပ္ပံပညာအတွက် ဖွင့်ဆိုချက်များ
အမေရိကန်နိုင်ငံ၊ ကွန်ယက်နဲ သတင်းအချက်အလက်နည်းပညာအတွက် သုတေသနနဲ  ဖွံ ဖိုးရေးလုပ်ငန်းဆိုင်ရာ အမျိုးသားအဆင့် ပူးပေါင်းဆောင်ရွက်မှုဌာန (The US National Coordination Office for Networking and Information Technology Research and Development - NITRD) က ဖွင့်ဆိုတဲ့ computer science အတွက် အဓိပ္ပါယ်သတ်မှတ်ချက်က ဒီလိုပါ။
“the systematic study of computing systems and computation. The body of knowledge resulting from this discipline contains theories for understanding computing systems and methods; design methodology, algorithms, and tools; methods for the testing of concepts; methods of analysis and verification; and knowledge representation and implementation.” (http://www.nitrd.gov/pubs/bluebooks/1995/section.5.html)
ကွန်ပြူတာသိပ္ပံဆိုတာ တွက်ချက်မှုစနစ်တွေနဲ  တွက်ချက်မှုပညာရပ်အကြောင်းကို စနစ်တကျလေ့လာတဲ့ ပညာရပ်ဖြစ်တယ်။ ဒီပညာရပ်မှာ
• တွက်ချက်မှုစနစ်တွေ နဲ  နည်းလမ်းတွေ ကို နားလည်သဘောပေါက်နိုင်ဖို  လိုအပ်တဲ့ သီအိုရီတွေ၊
• ဒီဇိုင်းပြုပုံ၊ ပဿနာဖြေရှင်းပုံ နဲ  ကရိယာတန်ဆာပလာတွေ၊
• တွးခေါ်ယူဆချက်တွေ မှန် မမှန် စစ်ဆေးစမ်းသပ်နိုင်မယ့် နည်းနာနိဿယတွေ
• သရုပ်ခွဲဆန်းစစ်လေ့လာမှုနဲ အဲဒီလေ့လာမှုကရတဲ့ အချက်တွေကို ၀ဖန်ပိုင်းခြားမှု
• လူ အသိပညာကို ဘယ်လိုပုံစံနဲ  (ကွန်ပြူတာပေါ်မှာ) ဖါ်ပြမလဲ ဘယ်လိုတည်ဆောက်ယူမလဲ
ဆိုတဲ့ ပညာရပ် တွပါ၀င်တယ်။
Association for Computing Machinery (ACM) ရဲ့ ပိုမိုကျစ်လျစ်တဲ့ ဖွင့်ဆိုချက် နာက်တမျိုးကတော့ “study of computers and algorithmic processes, including their principles, their hardware and software design, their applications, and their impact on society.”
“ကွန်ပြူတာသိပ္ပံဆိုတာ ကွန်ပြူတာတွေနဲ ပဿနာဖြေရှင်းပုံနည်းလမ်းအဆင့်ဆင့်၊ စည်းမျဉ်းစည်းကမ်းနည်းလမ်း၊ လိုအပ်တဲ့ hardware နဲ  software တွရဲ့ ဒီဇိုင်း တည်ဆောက်ပုံ၊ လက်တွေ အသုံးချပုံ နဲ ကွန်ပြူတာတွေက လူ အဖွဲ အစည်းအပေါ် ဘယ်လို အကျိုးသက်ရောက်မှုတွေရှိသလဲဆိုတာ လ့လာတဲ့ပညာ” ဆိုပြီး ဖစ်ပါတယ်။
နောက်ထပ် အလွန်ထင်ရှားတဲ့ လိုရင်းတိုရှင်း ဖွင့်ဆိုချက်တခုကတော့ ကွန်ပြူတာသိပ္ပံနယ်ပယ်ရဲ့ ထိပ်တန်းပညာရှင်နှစ်ဦးဖြစ်တဲ့ Gibbs နဲ  Tucker တို ရဲ့ ဖွင့်ဆိုချက်ပါ။ “ကွန်ပြူတာသိပ္ပံဆိုတာ algorithm တွနဲ  သူတို ကို ဘယ်လို ဖွဲ စည်းတည်ဆောက်ထားသလဲ ဆိုတာကို အသေးစိပ် သရုပ်ခွဲ ဆန်းစစ်လေ့လာတဲ့ပညာ […algorithm development and analysis as the central focus of computer science ]” (Gibbs and Tucker, “A Model Curriculum for a Liberal Arts Degree in Computer Science,” Comm. of the ACM, vol. 29, no. 3, March 1986) လို  ဆိုပါတယ်။
ဘယ်လိုပဲ အဓိပ္ပါယ်သတ်မှတ်ချက်တွေကွဲပြားပေမယ့်၊ အားလုံးသောဖွင့်ဆိုချက်တွေက တညီတညွတ်တည်း ရည်ညွှန်းတဲ့ နယ်ပယ်ကတော့ “Algorithms” တွကို လ့လာတဲ့ ပညာရပ်ဖြစ်ကြောင်းတွေ ရမှာပါ။ မှန်ပါတယ်။ ဒီ algorithms ဟာ ပုံစံတမျိုးမဟုတ် တမျိုးနဲ  ကွန်ပြူတာသိပ္ပံပညာရပ်မှာ အဓိကဗဟိုချက် အဖြစ်ပါ၀င်နေပါတယ်။ “အလုပ်တခုလုပ်ဖို ၊ ပဿနာတခုဖြေရှင်းဖို ၊ စတာတွေအတွက် တိကျရှင်းလင်းတဲ့ လုပ်ထုံးလုပ်နည်းအဆင့်ဆင့်ကို အစီအစဉ်တကျ ဖါ်ပြထားတဲ့ လမ်းညွှန်ချက်၊ ညွှန်ကြားချက်” တွဟာ algorithm ပဲပေါ့။
ဥပမာ ကျွန်တော်တို  ငယ်ငယ်ကတည်းက ရင်းနှီးခဲ့ပြီးဖြစ်တဲ့ ကိန်းနှစ်ခုအတွက် အကြီးဆုံးဘုံဆခွဲကိန်း (Greatest Common Divisor – GCD) ဘယ်လိုရှာမလဲဆိုတဲ့ အကြောင်းကို algorithm တစ်ခု တည်ဆောက်ကြည့်ရင်
• There must be two positive integers: a and b.
• If b is zero, then the GCD of a and b is a. Algorithm ends.
• Set r to be the remainder obtained from the integer division of a by b.
• Repeat this process using b and r, until remainder becomes zero.
ဆိုပြီးဖြစ်မှာပေါ့။ မှန် မမှန် တာ့ မိတ်ဆွေတို ဘာသာပဲ ဆန်းစစ်ကြည့်ပါတော့။ တကယ်တော့ ကွန်ပြူတာ ပရိုဂရမ်ဆိုတာ အဲဒီ algorithm တွကို ကွန်ပြူတာနားလည်မယ့် electronic ပုံစံနဲ ကိုယ်စားပြုထားတဲ့ instruction sets (ညွှန်ကြားချက် အစုအေ၀း) တွပဲမဟုတ်ပါလား။ တကယ်လို  ကျွန်တော်တို ဟာ ပဿနာတစ်ခုကို ဖရှင်းပုံ algorithm ကိုသာ မတည်ဆောက်နိုင်ရင် programming လည်း ရးနိုင်မှာမဟုတ်ပါဘူး။
သင်္ချာ ကွန်ပြူတာ နှင့် ၀ိဇ္ဇာ သိပ္ပံ
ဒီနေရာမှာ မးစရာမေးခွန်းတစ်ခုက အသေအချာရှိနေပါတယ်။ အဲဒါကတော့ “ ကွန်ပြူတာသိပ္ပံ ပညာရပ်ဟာ ဘယ်လိုကြောင့် သိပ္ပံပညာရပ်ဖြစ်ရတာလဲ ဆိုလိုတာက ဘာကြောင့် သိပ္ပံပညာရပ်လို ပာနိုင်ရတာလဲ” ဆိုတဲ့ မးခွန်းပါ။ ဘာလို လဲဆိုတော့ တခြားသိပ္ပံပညာရပ်တွေဖြစ်တဲ့ ရူပဗေဒ၊ ဇီ၀ဗေဒ၊ ဓာတုဗေဒ စတဲ့ ပညာရပ်အသီးသီးဟာ လက်တွေ သဘာ၀လောကကြီးရဲ့ အဖြစ်အပျက် ဒပ်၀တ္တု စတာ တွကို အခြေခံပြီး လ့လာတာတဲ့ ပညာရပ်တွေဖြစ်ပြီး၊ ကွန်ပြူတာသိပ္ပံကတော့ အဲဒါတွေအပေါ်မှာ အခြေခံ လ့လာတာမှ မဟုတ်တာကိုး။ ကွန်ပြူတာသိပ္ပံပညာရပ်ဟာ ထင်ရှားတဲ့ သိပ္ပံပညာတွေနဲ စာရင်၊ သင်္ချာပညာရပ်နဲ သာပိုပြီး ဆင်တူနေပါတယ်။ ဒီနေရာမှာ မိတ်ဆွေတို စိတ်ထဲမှာ ချက်ခြင်းပေါ်လာမယ့် မးခွန်းက “သင်္ချာဆိုတာလည်း သိပ္ပံပညာရပ်ပဲမဟုတ်လားဗျ” ဆိုတာပဲဖြစ်ပါတယ်။ ဒီကိစ္စကတော့ အလွန်ရှုပ်ထွေးရှည်လျားတဲ့ သင်္ချာပညာရပ်ရဲ့ သမိုင်းကြောင်းနဲ  သဘောသဘာ၀တွေကို အရင်ဆုံးရှင်းပြရမှာဖြစ်တဲ့အတွက် ချန်လှပ်ခဲ့ပါရစေတော့။ ကွန်ပြူတာသိပ္ပံဆိုတာဘာလဲပြောနေရင်း သင်္ချာသည် ၀ိဇ္ဇာပညာရပ်လား သိပ္ပံပညာရပ်လားဆိုတဲ့ ဆွးနွေးငြင်းခုံမှုကို ရာက်သွားမှာစိုးလို ပါ။ အတိုချုပ်အဖြေကတော့ “သင်္ချာပညာရပ်ရဲ့ တကယ့်အနှစ်သာရဟာ အတွေးအခေါ် အယူအဆ သဘောတရား နဲ ၊ လက်တွေ စမ်းသပ်ဆောင်ရွက်မှုတွေကို၊ ယုတ္တိနည်းကျ ကြာင်းကျိုးဆက်စပ် ဆင်ခြင်စဉ်းစားတဲ့နည်းနဲ  ၊ ပါင်းစည်းပေးတဲ့ ပညာရပ်ဖြစ်တယ်။ ဒါကြောင့် တစ်ချိန်တုန်းက ရန်ကုန်တက္ကသိုလ်အပါအ၀င် ကမ္ဘာ့ထိပ်တန်းတက္ကသိုလ်ကြီးတွေမှာ သင်္ချာပညာရပ်အတွက်ဘွဲ ဒီဂရီပေးအပ်တဲ့အခါ ၀ိဇ္ဇာဘွဲ  (B.A) အနေနဲ  ပးအပ်ခဲ့တာပေါ့” လို ဆိုပါရစေ။

ဒါကြောင့် တချို သာပညာရှင်အုပ်စုတွေက computer art (ကွန်ပြူတာ၀ိဇ္ဇာပညာရပ်) လို  ပာဆိုကြပြီး၊ တချို ပညာရှင်အုပ်စုတွေကလည်း ကွန်ပြူတာသိပ္ပံပညာရပ်ကို သင်္ချာဘာသာရဲ့ ကိုင်းကွဲတခုအဖြစ် သတ်မှတ်ပါတယ်။ ကျွန်တော့ရဲ့ယူဆချက်ကတော့ နှစ်ဖွဲ လုံးမှန်ပါတယ်။ ဘာလို လဲဆိုတော့ သင်္ချာမှာသုံးတဲ့ “သိပြီးသား အချက်အလက်တွေအပေါ် အခြေခံပြီး  ကြာင်းကျိုး ဆက်စပ် ဆင်ခြင် စဉ်းစားတဲ့နည်း deductive reasoning” ဟာ သီအိုရီကွန်ပြူတာသိပ္ပံမှာ ယဘုယျအားဖြင့် မကြာခဏ တွ နမြင်နေကျ အချက်ဖြစ်နေလို ပါပဲ။ ပီးတော့လည်း ဒီပညာရပ်အပေါ် အများကြီး သြဇာလွှမ်းမိုးခဲ့တဲ့ ကွန်ပြူတာသိပ္ပံပညာရပ်ရဲ့ ဖခင်ကြီး ထားရင်း Alan M. Turing ၊ သီအိုရီကွန်ပြူတာသိပ္ပံပညာရပ်ရဲ့ ဖခင်ကြီး ဂါဒ်ဒဲလ် Kurt Gödel၊ ဒီကနေ ခတ်ကွန်ပြူတာတွေရဲ့ ရှ ဆာင် ဗွန်နွိုင်းမဲင်းန် John von Neumann တို ဟာ ဒိပ်ဒိပ်ကြဲသင်္ချာပညာရှင်တွေကိုး။ ပီးတော့လည်း ကွန်ပြူတာသိပ္ပံပညာရပ်ကို ထဲထဲ၀င်၀င် တတ်ကျွမ်းနားလည်ဖို ဆိုတာ သင်္ချာစစ် (pure maths) သီအိုရီသင်္ချာ(theoretical mathematics) အသုံးချသင်္ချာ(applied mathematics) တို ရဲ့ အဆင့်မြင့်သင်္ချာပညာကိုင်းကွဲတွေ လိုအပ်ပါတယ်။
တခြားရှုဒေါင့်ကကြည့်ပြန်ရင်တော့လည်း ကွန်ပြူတာ(သိပ္ပံ)ပညာရှင်တွေဟာ အသစ်အသစ်သော တွးခေါ်ယူဆချက်တွေကို အဆိုပြုတင်ပြဖို နဲ  အဲဒီအဆိုတွေ မှန် မမှန် လက်တွေ စမ်းသပ်ဖို အတွက် သိပ္ပံနည်းစနစ် (scientific methods) တွကိုပဲသုံးကြတာဖြစ်တဲ့အတွက် computer science လို ဆိုရင်လည်း မှန်တာပါပဲ။ ဒါကြောင့် ဘယ်ပညာရပ်ကိုမဆို ပညာရှင်ဆန်ဆန် လ့လာမယ်ဆိုရင်တော့ ဘယ်နေရာမှာမှ “လှေနံဒါးထစ်၊ အသေမှတ် အလွတ်ကျက်” မလုပ်မိဖို ကျွန်တော်တို  အထူးဂရုပြုသင့်ပါတယ်။
ကွန်ပြူတာသိပ္ပံ၏ ကိုင်းကွဲပညာရပ်နယ်ပယ်များ
Association for Computing Machinery (ACM) နဲ  IEEE-Computer Society (IEEE-CS) တို က ကိုယ်စားတွေ ပါ၀င်ဖွဲ စည်းထားတဲ့ “တွက်ချက်မှုသိပ္ပံပညာရပ် အသိအမှတ်ပြု အဖွဲ ” [Computing Sciences Accreditation Board - CSAB] က
1. theory of computation - တွက်ချက်မှုသီအိုရီ
2. algorithms and data structures - ပဿနာဖြေရှင်းပုံနည်းလမ်းအဆင့်တွေနဲ  အချက်အလက်ဖွဲ စည်းတည်ဆောက်ပုံ
3. programming methodology and languages - ပရိုဂရမ် ဘာသာစကားနဲ  ရးသားနည်း
4. computer elements and architecture ကွန်ပြူတာမှာ ပါ၀င်တဲ့အစိပ်အပိုင်းတွေ (hardware + software) ရဲ့ ဗိသုကာတည်ဆောက်ပုံ
စတဲ့ ပညာရပ် နယ်ပယ်လေးခုကို ကွန်ပြူတာသိပ္ပံရဲ့ အဓိက အရေးအကြီးဆုံး နယ်ပယ်တွေအဖြစ် သတ်မှတ်ခဲ့ပါတယ်။ အဲဒါတွေအပြင် CSAB က software engineering, artificial intelligence, computer networking and communication, database systems, parallel computation, distributed computation, computer-human interaction, computer graphics, operating systems, နဲ  numerical and symbolic computation စတဲ့ ပညာရပ်တွေကိုလည်း ကွန်ပြူတာသိပ္ပံရဲ့ အခြားအရေးကြီးတဲ့ နယ်ပယ်တွေအဖြစ် သတ်မှတ်ထားပါတယ်။
ACM ကပညာရှင်ပေါင်းများစွာ ပါ၀င်ရေးသားထားတဲ့ Allen B. Tucker ရဲ့ “Computer Science Handbook, second edition (2004)” မှာတော့ အာက်ပါပညာရပ် ၁၁ မျိုးကို ကွန်ပြူတာသိပ္ပံရဲ့ ကိုင်းကွဲ ဘာသာရပ်တွေအဖြစ် တိတိကျကျ သတ်မှတ်ထားပါတယ်။
1. Algorithms and Complexity - ပဿနာဖြေရှင်းပုံအဆင့်ဆင့် နဲ  သူရဲ့ ရှုပ်ထွေးမှုအတိုင်းအဆကို လ့လာတဲ့ပညာရပ်။
2. Architecture - မှန်မှန်ကန်ကန်နဲ  စွမ်းရည်မြင့်မြင့် လုပ်ပေးနိုင်မယ့် ကွန်ပြူတာ Hardware တွကို ဘယ်လို ဒီဇိုင်းပြု တည်ဆောက်မလဲဆိုတဲ့ ပညာ။
3. Computational science - သိပ္ပံဆိုင်ရာရှာဖွေတွေ ရှိမှုတွေရဲ့ အခြေခံအကျဆုံး အုတ်မြစ်သုံးခုဖြစ်တဲ့ သီအိုရီပိုင်း တွက်ချက်မှုပိုင်း နဲ  လက်တွေ  စမ်းသပ်လုပ်ဆောင်တဲ့အပိုင်း တွကို ပါင်းစည်းထားတဲ့ပညာရပ်။
4. Graphics - တကယ့်ရုပ်၀တ္တု (physical object)တွေနဲ  စိတ်ကူးပုံသဏ္ဌန် (conceptual object) တွကို ကွန်ပြူတာပေါ်မှာ ဘယ်လို ဖါ်ပြမလဲဆိုတာကို လ့လာတဲ့ပညာ။
5. Human-computer interaction - လူနဲ ကွန်ပြူတာရဲ့ အချင်းချင်းအပြန်အလှန် ဆက်သွယ်ပုံကို အထူးပြုလေ့လာတာ
6. Information management - အလွန်များပြားလှတဲ့ အချက်အလက်တွေကို သိုလှောင်သိမ်းဆည်း ရာမှာ ကြုံတွေ ရတဲ့ ပဿနာတွေနဲ  ဖရှင်းပုံနည်းလမ်းတွေကို လ့လာတာ
7. Intelligent systems - လူရဲ့ အချက်အလက်ပေါ်မူတည်ပြီး စဉ်းစားတွေးတောနိုင်စွမ်းကို ကွန်ပြူတာတွေပေါ်မှာ ပုံစံပြုလုပ်ဆောင် (simulate) နိုင်ဖို  လ့လာတဲ့ပညာရပ်။ ဒါကို တုပအသိညာဏ် (Artificial Intelligence) လို လဲခေါ်တယ်။
8. Net-centric computing - စနစ်တခုရဲ့ လုပ်ဆောင်နိုင်စွမ်းကို ကွန်ယက်တလျောက် ဖန် ကျက် တိုးချဲ့ ပီး လုပ်နိုင်ဖို  အတွက် လ့လာတဲ့ပညာရပ်
9. Operating systems - ကွန်ပြူတာ hardware တွနဲ  အသုံးချဆော့ဖ်၀ဲတွေကို ကြားခံဆက်သွယ်ဆောင်ရွက်ပေးတဲ့ စနစ်ကို လ့လာတဲ့တာ
10. Programming languages - ပရိုဂရမ်တွေ ဆာ့ဖ်၀ဲတွေ သတင်းအချက်အလက်စနစ်တွေ ရးသားတည်ဆောက်ဖို လိုအပ်တဲ့ ကွန်ပြူတာသုံးဘာသာစကားတွေနဲ ပတ်သက်ပြီး လ့လာတဲ့ပညာရပ်
11. Software engineering - ပရိုဂရမ်တွေ ဆာ့ဖ်၀ဲတွေ သတင်းအချက်အလက်စနစ်တွေ ရးသားတည်ဆောက်ရာမှာ လိုအပ်တဲ့ ဗိသုကာပိုင်း ဒီဇိုင်းပိုုင်း လက်တွေ တည်ဆောက်မှုအပိုင်း စမ်းသပ်စစ်ဆေးတဲ့အပိုင်း စီမံခန် ခွဲအုပ်ချုပ်တဲ့အပိုင်း သရုပ်ခွဲဆန်းစစ်လေ့လာတဲ့အပိုင်း စတာတွေကို လ့လာတဲ့ပညာရပ်။
နိဂုံးအမှာ
မိတ်ဆွေတို မင်တဲ့အတိုင်းပဲ ကွန်ပြူတာသိပ္ပံပညာဆိုတာဟာ ကွန်ပြူတာအတွက် ပရိုဂရမ်ရေးတဲ့အလုပ်ထက် အများကြီး ပိုပါတယ်။ ဒီဆောင်းပါးမှာတော့ ကိုင်းကွဲ ပညာရပ် ၁၁-မျိုးနဲ ပတ်သက်လို  စာရင်းချပြရုံအဆင့်လောက်ပဲ တင်ပြနိုင်ခဲ့ပြီး ဘာသာရပ်တခုခြင်းစီကိုက အများကြီးကျယ်ပြန်  နက်ရှိုင်းလေတော့ သက်ဆိုင်ရာထပ်ဆင့်ကိုင်းကွဲ ဘာသာရပ်တွေရဲ့ အမည်ကိုတောင်မှ မတင်ပြနိုင်ခဲ့ပါဘူး။ စကားစပ်ပြီးပြောရရင် မိတ်ဆွေတို  သိထားသင့်တဲ့ အကြောင်းအရာတခုကတော့ ပညာရပ်တခုကို သင်ကြားတဲ့အခါ တက္ကသိုလ် ကာလိပ်တွေရဲ့ သင်ရိုးညွှန်းတမ်းတွေဟာ လ့လာနည်းပုံစံနှစ်မျိုးထဲက တစ်မျိုးမျိုးနဲ  ချဉ်းကပ်ထားလေ့ရှိတယ်ဆိုတဲ့ အကြောင်းပါ။ ပထမ တခုက “breadth-first” approach လို ခါ်ပါတယ်။ ဆိုလိုတာက ပထမဦးဆုံးအနေနဲ  ပညာရပ်တခုနဲ ပတ်သက်ပြီး တတ်နိုင်သမျှ ကျယ်ကျယ်ပြန် ပန် လ့လာစေတာ၊ နှီးနွယ်ဆက်စပ်ရာပညာရပ်တွေကို အခြေခံအဆင့်ထိ နားလည်သဘောပေါက်အောင် လ့လာစေတာ၊ ပီးမှ ကျာင်းသူကျောင်းသား အားသန်တဲ့ စိတ်၀င်စားတဲ့ နယ်ပယ်တစ်ခုကိုကိုပဲ အထူးပြုပြီး၊ အသေးစိပ် နက်နက်ရှိုင်းရှိုင်း ထဲထဲ၀င်၀င် ခခြေမြစ်မြစ် ဆရာတဆူအဆင့်ထိရောက်အောင် လ့လာစေတဲ့ ပုံစံကိုပြောတာ။  နာက် ဒုတိယတခုကတော့ “depth-first” approach ဖစ်ပါတယ်။ အဓိပ္ပါယ်က တချို ဘာသာရပ်သင်ရိုးတွေမှာ ပညာရပ်တခု အကြောင်းကိုပဲ ဇာင်းပေးပြီး အသေးစိပ်လေ့လာသင်ယူစေတယ်။ တခြားဘာသာရပ်တွေလည်း အနည်းအကျဉ်း ပါတော့ ပါတာပေါ့။ ဒါပေမယ့် ခပ်ပါးပါးလောက်ပဲမိတ်ဆက်ထားပြီး ခုနက target ထားတဲ့ ပညာရပ်ကိုသာ လုံး၀ကျွမ်းကျင်သွားတဲ့ အဆင့်ထိရောက်အောင် သင်ကြားပေးလိုက်တယ်။ ပီးမှ နှီးနွယ်ဆက်စပ်ရာ ပညာရပ်တွေကို ဖည်းဖြည်းချင်းလေ့လာသွားဆိုတဲ့ သဘောပေါ့။
အဲဒီနှစ်ခုလုံးမှာ အားနည်းချက် အားသာချက်တွေ ကိုယ်စီရှိပါတယ်။ ဥပမာ breadth-first approach ပုံစံနဲ လ့လာခဲ့ရင် ဘွဲ ကြိုတန်းအဆင့် (graduate level) လာက်မှာတော့ ဟိုစပ်စပ် ဒီစပ်စပ် တာ်တော်များများ သိထား တတ်ထားပေမယ့် ဘာမှ မယ်မယ်ရရ ခခြေမြစ်မြစ် ကျွမ်းကျင်မှုမရှိသေးပဲ လုပ်ငန်းခွင်၀င်ဖို  အခက်အခဲကြုံရနိုင်ပါတယ်။ (ကျောင်းတက်နေရင်းနဲ ပဲ တပြိုင်တည်းမှာ ကိုယ်စိတ်၀င်စားတဲ့ ပညာရပ်ကို ကျွမ်းကျွမ်းကျင်ကျင်ဖြစ်အောင် နက်နက်ရှိုင်းရှိုင်း လ့လာသွားသူတွေကတော့ ချွင်းချက်ဖြစ်ပါတယ်။) ဒါဟာ ကျာင်းသူကျောင်းသား တာ်တော်များများ အဓိကရင်ဆိုင်ရတဲ့ အခက်အခဲပါ။ အဲဒီအခါမှာ ကိုယ်တကယ် စိတ်၀င်စားတဲ့လိုင်း အတွက် academic ပိုင်းအရ ဘွဲ လွန်အဆင့် (post graduate level / master level) ဆက်တက်ချင်တက်၊ ဒါမှမဟုတ်လည်း ပင်ပသင်တန်းတွေနဲ ပဲဖြစ်ဖြစ် ကိုယ်တိုင်လေ့လာမှုနဲ ပဲဖြစ်ဖြစ် ပညာတခုကို (ဥပမာ - database administrator, network engineer, software developer, etc) ဇာက်ချပြီး အထူးပြုလေ့လာလိုက်ရင် အချိန်အတိုင်းအတာတခု ရာက်တဲ့အခါ အဖက်ဖက်မှာ knowledge ပည့်၀တဲ့ ဒါင်ဒေါင်မြည် ပညာရှင်တွေ ဖစ်လာနိုင်ပါတယ်။
Depth-first approach ရဲ့ အားသာတဲ့အချက်ကတော့ ဘွဲ ကြိုအဆင့်လောက်နဲ တင် လုပ်ငန်းခွင်၀င်နိုင်တဲ့ အချက်ပဲဖြစ်ပါတယ်။ ဒါပေမယ့် ခက်တာက သူ မှာ ကန် သတ်အမြင် [limited vision - ကိုယ်သိထားတာ ကျွမ်းကျင်တာနဲ ပဲ ဘာင်ခတ်ပြီး စဉ်းစားလေ့ရှိတဲ့အကျင့်] ပဲရှိနေနိုင်ပြီး၊ တခြားနှီးနွယ်ဆက်စပ်ရာ ပညာရပ်တွေကို မသိရှိတာ၊ ချိတ်ဆက်ပေါင်းစည်းပြီး မလုပ်နိုင်တာ စတဲ့ အားနည်းချက်တွေ ရှိနေနိုင်ပါတယ်။ ချွင်းချက်အနေနဲ ကတော့ အထက်မှာ တင်ပြခဲ့သလိုပဲ ကျာင်းတက်နေရင်းနဲ  တပြိုင်တည်းမှာ ကိုယ်အထူးပြုလေ့လာနေတဲ့့ ဘာသာရပ်နဲ  ပတ်သက်ဆက်နွယ်နေတဲ့ ပညာရပ်တွေကိုပါ ကျယ်ကျယ်ပြန် ပန် လ့လာသွားသူတွေကတော့ အမြင်ကျယ် အမြော်အမြင်ကြီးတဲ့ ပညာရှင်တွေ ဖစ်လာနိုင်ပါတယ်။
ကွန်ပြူတာသိပ္ပံလို ကျယ်ပြန် နက်ရှိုင်းတဲ့ ပညာရပ်မျိုးကျတော့ breadth-first ပဲဖြစ်ဖြစ်၊ depth-first နဲ ပဲဖြစ်ဖြစ် ဘယ်နည်းနဲ  လ့လာ လ့လာ၊ သင်ရိုးညွှန်းတမ်းတွေက ဘယ်လိုပဲရှိရှိ အဓိက ပုဂ္ဂိုလ်ကတော့ မိတ်ဆွေကိုယ်တိုင်ပါပဲ။ ကွန်ပြူတာသိပ္ပံပညာရှင် လို ပာနိုင်ဖို  ကွန်ပြူတာသိပ္ပံပညာရှင်အဖြစ် ရပ်တည်နိုင်ဖို ဆိုရင် အဲဒီ ဘာသာရပ်ခွဲတွေကို ထဲထဲ၀င်၀င် ကျွမ်းကျွမ်းကျင်ကျင် နားလည်သဘောပေါက်ထားဖို လိုအပ်ပါတယ်။  ကျာင်းပညာရေးက မိတ်ဆွေကို ကျယ်ကျယ်ပြန် ပန်  သိရှိအောင် သင်ကြားပေးလိုက်ရင် နက်နက်ရှိုင်းရှိုင်းသိဖို ကမိတ်ဆွေရဲ့ တာ၀န်ပါ။ တခါ ကျာင်းပညာရေးက တခုခုနဲ  ပတ်သက်ပြီး နက်နက်ရှိုင်းရှိုင်း သင်ကြားပေးလိုက်ရင် အဲဒီပညာရပ်နဲ  ဆက်နွယ်တာတွေကို ကျယ်ကျယ်ပြန် ပန်  သိအောင်လုပ်ဖို ကလည်း မိတ်ဆွေရဲ့တာ၀န်ပါပဲ။ “နေစမ်းပါဦး..ကွန်ပြူတာသိပ္ပံပညာနဲ ပတ်သက်ပြီး အဲဒါတွေ အကုန်လုံးကို နားလည်တော့ရော လက်ရှိအချိန် ဒီနိုင်ငံမှာ ဘယ်လိုအစိုးရအဖွဲ အစည်း ဘယ်လိုကုမ္မဏီမျိုးက ကျုပ်တို ကို လစာထိုက်ထိုက်တန်တန်ပေးပြီး၊ ကွန်ပြူတာသိပ္ပံပညာရှင် ဆိုတဲ့ ရာထူးမျိုးနဲ  အလုပ်ခန် မှာမို လို တုန်းဗျ” မိတ်ဆွေကမေးလာရင်တော့ “အေးဗျာ ဒါကတော့ တိုင်းပြည်ရဲ့ အင်ဖရာ စထရပ်ခြာ (ingrastructure) တွ၊ R&D တွ (သုတေသနနဲ  ဖွဲ ဖိုးရေး လုပ်ငန်းတွေ) အားကောင်းလာရင်တော့ ဖစ်လာမှာပါ..အခုတော့ အင်း ..အဲ..” လို ပဲ ယာင်၀ါး၀ါး လုံးချရတော့မှာပဲမိတ်ဆွေရေ။

ရွှင်လန်းချမ်းမြေ့ပါစေ။
infoTherapy(2013)
မှတ်ချက်။ ၂၀၁၃ ဂျူလိုင်လထုတ် ကွန်ပြူတာဂျာနယ်တွင် ဖါ်ပြပြီးသောဆောင်းပါးဖြစ်ပါသည်။

Wednesday, June 26, 2013

ပရိုဂရမ်ရေးသားခြင်းအတွက် စိန်ခေါ်နေသော မေးခွန်းများ

၁။ ဘာကြောင့် ပရိုဂရမ်ဘာသာစကားပေါင်း ၂၅၀၀ ကျာ် ရှိနေတာလဲ

မိတ်ဆွေတို  အားလုံးသိကြတဲ့အတိုင်း လက်ရှိခေတ်ကာလ အခြေအနေရဲ့ လိုအပ်ချက်နဲ  တာင်းဆိုမှုတွေကြောင့် ကျွန်တော်တို ဟာ ကွန်ပြူတာတွေကို ပိုမိုအသုံးချလာကြပါတယ်။ တိတိကျကျပြောရရင်၊ တကယ့် လက်တွေ  ပင်ပလောကမှာ ကြုံတွေ လာရတဲ့ အမျိုးမျိုးအဖုံဖုံသော ပဿနာ ပုံစံအသစ်အဆန်းတွေကို ကွန်ပြူတာစနစ်တွေ ကွန်ပြူတာဆော့ဖ်၀ဲတွေ ပရိုဂရမ်တွေ အသုံးပြုပြီး ဖရှင်းလာကြတာကို ဆိုလိုတာပါ။ အဲဒီလို ဖရှင်းဖို  ကြိုးစားတဲ့နေရာမှာ လိုအပ်တဲ့ ဆာ့ဖ်၀ဲတွေရေးသားဖို အတွက် ရှိနှင့်ပြီးသား programming language တွဟာ အသစ်ကြုံတွေ လာရတဲ့ အခြေအနေ ပဿနာတွေကို ဖရှင်းနိုင်ဖို  အနည်းနဲ အများဆိုသလို လိုအပ်ချက်တွေ ကိုယ်စီ ရှိနေကြတာ သွားတွေ ရပါတယ်။ အဲဒါကြောင့်ပဲ computer scientist တွ softrware engineer တွ developer တွဟာ၊ အသစ်အသစ်သော ပဿနာတွေကို ပိုပြီး ထိထိရောက်ရောက် ဖရှင်းနိုင်ဖို ဆိုတဲ့ ရည်ရွယ်ချက်နဲ  အသစ်သစ်သော programming language တွကို တခုပြီးတခု တီထွင်ဖန်တီးလာကြတယ်ဆိုပါတော့။ တကယ်လို သာ ကျွန်တော်တို မှာ ပဿနာအားလုံးကို အထိရောက်ဆုံး အပြည့်စုံဆုံး ဖရှင်းပေးနိုင်မယ့် အကောင်းဆုံး programming language တစ်ခု ရှိနေပြီးသားဆိုရင် ဒီလို language အသစ်တွေကို အပင်ပန်းခံ အလုပ်ရှုပ်ခံပြီး ဘယ်မှာ ထပ်တီထွင်နေဖို လိုမလဲဗျာ။ ဒါဟာ ကျွန်တော်တို  အထူးသတိထားသင့်တဲ့ အချက်ပဲမဟုတ်ပါလား။ စီးပွားရေးဆိုင်ရာ ဒါမှမဟုတ် နည်းပညာ ပိုင်းဆိုင်ရာ ပဿနာတစ်ခုကို ဖရှင်းနိုင်ဖို ၊ လိုအပ်တဲ့ သီးသန် အခြေအနေတွေကို အကောင်းဆုံးနဲ  အထိရောက်ဆုံး လုပ်ပေးနိုင်မယ်ထင်တဲ့ programming language တွကို တခုပြီးတခု အမျိုးမျိုး အဖုံဖုံ တီထွင်ရင်း ဖန်တီးရင်းနဲ  သိပ်ကိုများပြားတဲ့ ပရိုဂရမ်ဘာသာစကားတွေ ပါ်ပေါက်ခဲ့ရတာပါ။ ၂၀၀၉ ခုနှစ် မှာ Bill Kinnersley ဆိုတဲ့ပုဂ္ဂိုလ် ပုစုထုတ်ပြန်ခဲ့တဲ့ စာရင်းအရဆိုရင် programming language ပါင်း ၂၅၀၀ ကျာ်ထိရှိတယ်လို သိရပါတယ်။ (REF: http://people.ku.edu) ဒါ့အပြင် programming language အသစ်တွေဟာလည်း တလကို အနည်းဆုံး ပျှမ်းမျှ ၂ ခုနှုန်းနဲ  ပါ်ပေါက်နေဆဲဖြစ်ပြီး တချို လတွေမှာဆိုရင် တလတည်းနဲ  programming language အသစ် ၁၀ ခု လာက်တောင် ပါ်ထွက်ခဲ့ဖူးတာတွေ ရှိပါတယ်။
ဒီလောက်များပြားတဲ့ programming language တွရှိနေရခြင်းရဲ့ နာက်ထပ်အကြောင်းတစ်ချက်ကတော့ အဲဒီလို Programming Language အသစ်တစ်ခုကို ဖန်တီးရတာကလည်း (အထိုက်အလျောက်) လွယ်တယ်လို  ပာနိုင်တာကိုး။ တချို  software engineer တွဆိုရင် programming language အသစ်တခု သက်၀င်အလုပ်လုပ်နိုင်တဲ့အဆင့်အထိရောက်အောင် ၁လ ၂လ အတွင်း အပြီး ဖန်တီးနိုင်စွမ်းရှိကြပါတယ်။ တကယ့်နာမည်ကြီး အဓိက special-purpose programming language တွ ဆိုရင်လည်း လူပုဂ္ဂိုလ် တစ်ဦးတည်း ဒါမှမဟုတ် နှစ်ဦးလောက်ကပဲ တည်ထွင်ခဲ့တာပါ။ ဥပမာ FORTRAN(၁၉၅၄) ကို John Backus ၊ Basic (Beginner’s all-purpose symbolic instruction code) (၁၉၆၄) ဆိုရင် John Kemeny နဲ  Thomas Kurtz ၊ C (၁၉၇၂) ကို Dennis Ritchie ၊ Objective C (၁၉၈၅) ကိုတော့ Brad Cox နဲ  Tom Love ၊ Java (၁၉၉၅) ကို James Gosling တို ကပဲ အဓိက ဖန်တီးခဲ့တာပါ။ တချို  ကျတော့လည်း ကာ်မတီ အဖွဲ အစည်းနဲ  စုပြီး တည်ထွင်ခဲ့တာတွေလည်း ရှိပါတယ်။ ဥပမာ COBOL (Common Business-Oriented Language) (1959) ဆိုရင် အမေရိကန် ရတပ်က Grace Hopper ရဲ့ အဓိက ဦးဆောင်ပါ၀င်မှုနဲ  ကာ်မတီဖွဲ ပီး တည်ထွင်ဖန်တီးခဲ့တာဖြစ်ပါတယ်။ PL/I (၁၉၆၄) တို ၊ ADA (၁၉၈၃) တို  လို language တွ ဖန်တီးရာမှာလည်း အဖွဲ လိုက် လုပ်ဆောင်ခဲ့တာပါ။
ဒီနေရာမှာ စိတ်၀င်စားစရာကောင်းတဲ့ အချက်ကတော့ programming language တစ်ချို ဟာ အတိုင်းအတာတရပ်အထိ တာ်တော်ကို ပည့်စုံကောင်းမွန်ပေမယ့်လည်း အာင်မြင်သင့်သလောက် အာင်မြင်ကျော်ကြားမှုမရှိတာတွေ ရပါတယ်။ ဥပမာအနေနဲ ပရရင် Ada တို  PL/I တို လို language တွဟာ ပုံစံတကျ စည်းစနစ်တကျ ဖွဲ စည်းတည်ဆောက်ထားတဲ့အပြင်၊ အကြမ်းခံ အသုံးခံပြီး အလွန်ကျယ်ပြန် တဲ့ နယ်ပယ်ပေါင်းများစွာအတွက်ပါ ထိထိရောက်ရောက် အသုံးချနိုင်ပါလျက်နဲ  ဘာကြောင့် အများစုသော programmer တွ software engineer ကြားမှာ ရပန်းစား အသုံးများတဲ့ ဘာသာစကားမဖြစ်ရတာလဲ ဆိုတာဟာ၊ လူမှုဗေဒရှုဒေါင့်ကရော နည်းပညာရှုဒေါင့်ကပါ အသေးစိပ် လ့လာသုတေသနလုပ်သင့်တဲ့ အချက်တခုပဲဖြစ်ပါတယ်။
ထွက်ပေါ်ခဲ့ပြီးသမျှ programming language တွကို အုပ်စုကြီးတွေအဖြစ် ခွဲမယ်ဆိုရင်တော့ သိပ်များများစားစား မရှိပါဘူး။ ၁၉၇၀ ခုနှစ်လောက်ကစပြီး ပရိုဂရမ်ဘာသာစကားတွေရဲ့ အဓိက ခွဲဖြာသွားတဲ့ နရာတွေထဲက တခုကတော့ Object Oriented လမ်းခွဲလို ပဲဆိုကြပါစို ။ ဆိုလိုတာကဗျာ တချို  language တွဖြစ်တဲ့ SMALLTALK, C++, Object C နဲ  Java တို လို ပရိုဂရမ် ဘာသာစကားတွေက OO အတွေးအခေါ်အယူအဆ နည်းစနစ်တွေကို လက်ခံကျင့်သုံးကြပြီး တချို  language တွ ဥပမာ Basic, Visual Basic နဲ  XML စတဲ့ language တွကတော့ OO concept ကို မသုံးကြဘူးပေါ့။ ဒီကနေ  လက်ရှိအချိန်ထိ သုံးစွဲနေသမျှ programming language တွရဲ့ ၅၀% က Object Oriented Programming Language တွဖြစ်ပါတယ်။ ကျန်တာတွေကတော့ Procedural Language, Functional Language နဲ  တခြား ပုံစံ တမျိုးမျိုးပေါ့ဗျာ။ programming language တွကို အုပ်စုခွဲပုံ နာက်တမျိုးကတော့ သူတို ဟာ typed language လား၊ un-typed language လား ဆိုတဲ အချက်ပဲဖြစ်ပါတယ်။ typed language တွမှာဆိုရင် data တခုရဲ့ အမျိုးအစား(type)ကို တိတိကျကျ သတ်မှတ်ထားပြီး computational operation လို ခါ်တဲ့ လုပ်ဆောင်ချက်တွေ လုပ်တဲ့အခါ၊ သက်ဆိုင်ရာ data type အလိုက် လုပ်ခွင့်ပြုမယ် မပြုဘူး ဆိုတာကို ကန် သတ်ထားတာတွေ ရှိပါတယ်။ ဥပမာ typed language တွ(Smalltalk, Ruby, Lisp, etc) မှာဆို character data type တွ တခုနဲ တခုကို mathematical operation တွလုပ်ခွင့်ပေးမထားဘူး။ ဆန် ကျင်ဘက်အနေနဲ  un-typed language (Assembly, Forth, etc) တွမှာတော့ data type ကို တင်းတင်းကြပ်ကြပ် အသေသတ်မှတ်မထားပဲ ဘယ်လို data ကိုမဆို ကြိုက်တဲ့လုပ်ဆောင်ချက် လုပ်လို ရတယ် လုပ်ခွင့်ပေးထားတယ်။ ခက်တာက ဒီ ၀ါဟာရနှစ်ခု (typed နဲ un-typed) ကိုက ဇေ၀ဇ၀ါ ရှုပ်ထွေးစေသလို ဖစ်နေတယ်ဗျ။ သူနဲ  ဆက်စပ်နေတဲ့ strongly typed တို  weakly typed တို ဆိုတာတွေကလည်း ရှိနေသေးတာကိုး။ ဒါ့အပြင် ဒီ type နဲ  un-typed မှာ သူကကောင်းတယ် ငါကကောင်းတယ်ဆိုတာလည်း ခုထိ အခြေအတင် ငင်းကြ ခုန်ကြတုန်းပါဗျာ။

၂။ လက်ရှိအချိန်မှာ ဘယ် language ကို လ့လာသင့်သလဲ

မိတ်ဆွေတို သိတဲ့အတိုင်း အကောင်းဆုံး နဲ  အပြည့်စုံဆုံး programming language ဆိုတာ လာလောဆယ်မှာ မရှိသေးပါဘူး။ ဒါကြောင့် ဘယ် programming language က အကောင်းဆုံးဆိုတာထက်၊ ဘယ် programming language တွဟာ လက်ရှိအချိန်မှာ အအောင်မြင်ဆုံး အကျော်ကြားဆုံးလဲ၊ ဈးကွက်လိုအပ်ချက် အမြင့်မားဆုံးလဲ ဆိုတာကို သာ အဓိကထား လ့လာကြည့်ပါ။ အဲဒီလို လ့လာတဲ့အခါ အာက်ပါနည်းစနစ်တွေကို သုံးပြီး ရှာဖွေ အကဲဖြတ်လို ရနိုင်ပါတယ်။
၁။ အင်တာနက် web site တွမှာ သက်ဆိုင်ရာ programming language နဲ  ပတ်သက်ပြီး ရှာဖွေကြည့်တဲ့အခါ တွ ရတဲ့ စုစုပေါင်း page အရေအတွက်ကို စာရင်းပြုစုကြည့်ပြီး သရုပ်ခွဲလေ့လာတဲ့နည်း။
၂။ သက်ဆိုင်ရာ programming language တစ်ခုနဲ ပတ်သက်ပြီး ပုံနှိပ်ထုတေ်၀ထားပြီးဖြစ်တဲ့ စာအုပ် စာတမ်း ဆာင်းပါး စတာတွေ ရဲ့ အရေအတွက်ကို စာရင်းပြုစုကြည့်ပြီး ဆန်းစစ်လေ့လာတဲ့နည်း။
၃။ သုတေသနလုပ်ငန်းတွေ၊ ပညာရေးဆိုင်ရာ ကျမ်းကြီး ကျမ်းခိုင်တွေမှာ အများဆုံး ရည်ညွှန်းကိုးကား ခံရတဲ့ programming language တွကို စာရင်းပြုစု လ့လာကြည့်တဲ့နည်း။
၄။ Software industry နဲ  programming လုပ်ငန်းခွင် တွအတွက် အလုပ်ခေါ်တဲ့ ကြာ်ငြာ တွမှာ အများဆုံး ဖါ်ပြခြင်းခံရတဲ့ programming language တွကို လ့လာသုံးသပ် စာရင်းလုပ်ကြည့်တဲ့နည်း။
၅။ လွန်ခဲ့တဲ့ နှစ်ပေါင်းများစွာ ကတည်းကနေ လက်ရှိအချိန်အထိ သုံးစွဲလာခဲ့တဲ့ legacy software applications တွမှာ သုံးစွဲရေးသားထားတဲ့ programming language တွကို စာရင်းပြုစု သုတေသနလုပ်ကြည့်တဲ့နည်း။
၆။ အနာဂတ်မှာ အသုံးပြုဖို  အသစ်ရေးသားမယ့် software applications တွကို ကနေ လက်ရှိအချိန်မှာ ဘယ်လို programming language တွ သုံးပြီးရေးနေကြသလဲဆိုတာကို စာရင်းပြုစု သုတေသနလုပ်ကြည့်တဲ့ နည်း။
စတဲ့ နည်းလမ်းတွေကို အသုံးချပြီး “ဘယ် programming language က လက်ရှိအချိန်မှာ popular အဖြစ်ဆုံးလဲ၊ ဈးကွက်မှာ အများဆုံး လိုအပ်နေတဲ့ ဟာလဲ၊ ဒါဆိုရင် ငါက ဘယ်လို language ကို ဦးစားပေးလေ့လာသင့်သလဲ” ဆိုတာ မိတ်ဆွေတို  အလွယ်တကူ သိရှိနိုင်မှာပါ။ အရေးကြီးတာကတော့ popular အဖြစ်ဆုံးဟာ အကောင်းဆုံးလို တာ့ ဘယ်သောအခါမှ မမှတ်ယူမိဖို  ပါပဲ။
ဟိုး အထက်မှာ တင်ပြခဲ့သလို programming language တွဟာ လစဉ် လစဉ် အသစ်ပေါ်ပေါက်နေတဲ့အတွက် ကျာ်ကြားမှုစာရင်း ဆိုတာဟာလည်း အမြဲတမ်း အပြောင်းအလဲရှိနေမှာတော့ အသေအချာပေါ့ဗျာ။ ဒါကြောင့် အဲဒီ ကျာ်ကြားခြင်း ဆိုတဲ့နေရာမှာ အများစုသော programming language တွက ကြာကြာမနေနိုင်ပါဘူး။ တချို ဆို န မင်ညပျောက် အဆင့်လောက်ပါပဲ။ တချို ကတော့ သူ ကိုသုံးပြီးရေးထားတဲ့ application ကိုတော့ ကနေ အချိန်ထိသုံးစွဲနေပြီး အဲဒီ language ကိုယ်တိုင်ကတော့ dead language အဖြစ် လုံး၀နီးပါး ပျာက်ကွယ်သွားတာမျိုးတွေလည်း ရှိပါတယ်။ dead language ဆိုတာ လက်ရှိအချိန်မှာ အဲဒီ language ကို ဘယ်သူမှမသုံးတော့တာ၊ အဲဒီ language ကို သုံးပြီးရေးတဲ့ programmer မရှိတော့တာ ကိုဆိုလိုတာပါ။ ပါ်ပေါက်ခဲ့တဲ့ programming language တစ်ခုခြင်းရဲ့ ပျှမ်းမျှသက်တမ်းကတော့ ငါးနှစ်လောက်ပါပဲ။ တကယ့်ကို အနည်းစုသော language တချို လာက်သာ ဆယ်စုနှစ်တွေနဲ ချီပြီး တည်တံ့နေတာပါ။ အဲဒီလို တကယ့်ကို အကြမ်းခံပြီး သမိုင်းကြောင်းကောင်းခဲ့တဲ့ အချိန်ရဲ့ တိုက်စားမှုကို ခံနိုင်ခဲ့တဲ့ language တွကတော့ Ada, C, C++, COBOL, Objective C, PL/I, SQL, Visual Basic, XML, Java စတာတွေပေါ့။ တခြား သက်တော်ရှည် language တွလည်း ရှိပါသေးတယ်။ ဒီစာရင်းက အကြမ်းဖျဉ်းသဘောလောက်သာ တင်ပြတာပါ။ အထူးသတိထားရမယ့်အချက်ကတော့ အဲဒီ language တွဟာ လည်း ဒီနေ အချိန်မှာတော့ ခိုင်ခိုင်မာမာ ရပ်တည်ဆဲဖြစ်ပေမယ့် နာင်တချိန်မှာ ဆက်လက် ရပ်တည်နေမယ် မရပ်တည်နိုင်တော့ဘူး၊ အသုံးများနေမယ် အသုံးနည်းသွားမယ်၊ ဒါမှမဟုတ်လည်း dying language တစ်ခုဖြစ်သွားမယ် မဖြစ်ဘူး၊ စတဲ့ ဘယ်လိုဖြစ်မယ်ဆိုတာကို ဘယ်သူမှ အတိအကျ အပိုင် မပြောနိုင်ပါဘူး။ အနာဂတ်မှာ မိတ်ဆွေတို ကိုယ်တိုင်သာ အထက်မှာ တင်ပြခဲ့တဲ့ အချက် ခာက်ချက်နဲ  သရုပ်ခွဲ လ့လာ ဆန်းစစ် ကြည့်ကြပါ။


၃။ ဆာ့ဖ်၀ဲရေးဖို  programming language အနည်းဆုံး ဘယ်နှစ်ခုလိုသလဲ

ဒီမေးခွန်းကို ဖနိုင်ဖို အတွက် ပထမဆုံး ကွန်ပြူတာတွေဖြေရှင်းရတဲ့ ပဿနာတွေကို အုပ်စုခွဲ ကြည့်ဖို လိုပါတယ်။ အဲဒီလို အုပ်စုခွဲကြည့်တဲ့အခါမှာ အာက်ပါ ပဿနာနယ်ပယ် ၁၀ မျိုးကို တွ ရပြီး အဲဒီ ၁၀ မျိုးကို အုပ်စုကြီး နှစ်စု အဖြစ် ဖွဲ နိုင်ပါတယ်။
Table - Problem Domains of Software Applications
Logical and Mathematical Problem Areas
1. Mathematical calculations
2. Logic and algorithmic expressions
3. Numerical data
4. Text and string data
5. Time and dates

Physical Problem Areas
1. Sensor-based electronic signals
2. Audible signals and music
3. Static images
4. Dynamic or moving images
5. Colors

တကယ်တော့ အဲဒီအုပ်စုကြီး နှစ်စုဟာ ဒီကနေ ခတ်ရဲ့ ဆာ့ဖ်၀ဲစနစ် အုပ်စုကြီး နှစ်စုနဲ  သဘောတရား အနှစ်သာရမှာ သွားပြီး ဆင်တူနေတာတွေ ရပါတယ်။ ကျွန်တော်တို ရဲ့ လက်ရှိ ရှိရှိသမျှသော ဆာ့ဖ်၀ဲတွေကို အုပ်စုဖွဲ ရင်လည်း အဓိက အုပ်စုကြီး နှစ်ခုရပါတယ်။ အဲဒါတွေကတော့ (၁) သတင်းအချက်အလက်တွေကို စီမံခန် ခွဲတဲ့ ဆာ့ဖ်၀ဲနဲ  (၂) ရုပ်၀တ္ထုပိုင်းဆိုင်ရာ ကရိယာတန်ဆာပလာ (Physical device) တွကို ထိန်းချုပ်အလုပ်လုပ်စေတဲ့ ဆာ့ဖ်၀ဲ ဆိုပြီး ဖစ်ပါတယ်။
ဒါကြောင့် ကျွန်တော်တို ဟာ software ရးသားရာမှာ အဓိက programming language ကြီး အနည်းဆုံး နှစ်ခု လိုမယ်လို  အနှစ်ချုပ်ပြီး အကြမ်းဖျဉ်း ပာလို ရပါတယ်။ ဒါဟာ သီအိုရီအရ သဘောတရားရေးရာအရ ပာတာပါ။ အဲဒီလို language နှစ်ခုလိုမယ်ဆိုရင် တစ်ခုစီဟာ အနည်းဆုံး ပဿနာနယ်ပယ် ငါးခုကို တိုင်တွယ် ဖရှင်းနိုင်တဲ့ language တွ ဖစ်ဖို လဲ လိုတာပေါ့။ ဘာလို တုန်းဆိုတော့ ကျွန်တော်တို  ဆာ့ဖ်၀ဲရေးပြီး ဖရှင်းရမယ့် တစ်ချို  တကယ့်ကို အနည်းစုသော ပဿနာတွေကသာ နယ်ပယ်အားဖြင့် ကျဉ်းမြောင်းပြီး သီးသန်  ကိုင်တွယ်ဖြေရှင်းရတဲ့ အခြေအနေမျိုးရှိတတ်ပြီး၊ ကျန်တဲ့ အများစုကတော့ ပဿနာပေါင်းစုံ ရာသမမွှေ နတဲ့ အနေအထားမျိုးတွေသာ ဖစ်ပါတယ်။ ဒါကြောင့် ဒီနေရာမှာ စဉ်းစားရမှာက “ပြဿနာတခုခြင်းအတွက် သီးသန်  programming language တခု၊ ပဿနာပေါင်းစုံအတွက် programming language ပါင်းစုံသုံးမလား” ဒါမှမဟုတ် “နယ်ပယ်အစုံက ပဿနာပေါင်းသောင်းခြောက်ထောင်ကို ဖရှင်းပေးနိုင်တဲ့ ကတယ့်ကို စွမ်းရည်မြင့်တဲ့ powerful ဖစ်တဲ့ programming language တစ်ခု နှစ်ခု ကို ပဲသုံးမလား” ဆိုတာဖြစ်ပါတယ်။ အဖြေကတော့ ရှင်းပါတယ်။ လုပ်ငန်းပေါင်းများစွာကို လုပ်နိုင်တဲ့၊ ပဿနာနယ်ပေါင်းများစွာကို ဖရှင်းပေးနိုင်တဲ့ programming language တွဟာ သိပ် မအောင်မြင်တတ်ဘူးဆိုတဲ့ အကြောင်းကို PL/I တို  Ada တို လို programming language တွက သက်သေထူ မီးမောင်းထိုးပြပြီး ဖစ်လေတော့ ကျွန်တော်တို  ဘယ်လမ်းကို ရွးခဲ့ကြသလဲ ရွးနေကြသလဲ ဆိုတာ အထူးပြောနေဖို  လိုမယ်မထင်တော့ပါဘူး။
ကျွန်တော်တို  အဲဒီလို ဒုတိယလမ်းကို ရွးခဲ့တာ မှန်မှ မှန်ပါရဲ့လား။ အဲဒီမေးခွန်းရဲ့ အဖြေအတွက် ဥပမာတစ်ခု တင်ပြပါမယ်။ အက်စ်ကီးမိုး(Eskimo) တွရဲ့ ဘာသာစကားမှာ အမျိုးမျိုးအဖုံဖုံသော မတူညီတဲ့ နှင်း(snow) နဲ ပတ်သက်ပြီး ကွဲပြားခြားနားတဲ့ ၀ါဟာရပေါင်း ၃၀ ကျာ်ထိရှိပါတယ်။ သူတို ဟာ သိပ်အေးတဲ့ ၀င်ရိုးစွန်းအရပ်ဒေသမှာ နထိုင်သူတွေဖြစ်လေတော့ နှင်းနဲ ပတ်သက်ရင် သူတို လာက်နားလည်သူ၊ နှင်း နဲ ပတ်သက်ပြီး သူတို လာက် ၀ါဟာရကြွယ်၀သူ ဘယ်ရှိနိုင်ပါ့မလဲ။ ဒါကို တခြား ဘာသာစကားတခုနဲ  ဥပမာ အင်္ဂလိပ်ဘာသာစကားနဲ  တိကျအောင် ရှင်းလင်း ပည့်စုံအောင် ဖါ်ပြဖို  ဘယ်လိုမှ မဖြစ်နိုင်ပါဘူး။ အဲဒီတော့ နှင်းနဲ ပတ်သက်ရင် အကောင်းဆုံး အပြီးပြည့်စုံဆုံး အကြွယ်၀ဆုံး ဖါ်ပြနိုင်တဲ့ ဘာသာစကားဟာ အက်စ်ကီးမိုး ဘာသာစကားပဲပေါ့။ ဒါကြောင့် အဲဒီဥပမာဟာ သက်ဆိုင်ရာ ပဿနာ နယ်ပယ်တခုအတွက် သက်ဆိုင်ရာ ဘာသာစကားကသာ (programming language ပဲဖြစ်ဖြစ်၊ human language ပဲဖြစ်ဖြစ်ပေါ့) အကောင်းဆုံး အထိရောက်ဆုံး ဖရှင်းပေးနိုင်တယ်ဆိုတဲ့ အချက်ရဲ့ အကောင်းဆုံး သက်သေသာဓက တခုပဲဖြစ်ပါတယ်။
Information processing software တွနဲ  embedded and systems application software တွကို သုတေသနပြု လ့လာကြည့်တဲ့အခါ ထွက်ပေါ်လာတဲ့ ကနဦးယူဆချက်တရပ်အရ software application တစ်ခုမှာ အနည်းဆုံး ပဿနာနယ်ပယ် လးခုလောက် ပါ၀င်ဖွဲ စည်းထားတယ်လို  ဆိုပါတယ်။ မတူညီတဲ့ နယ်ပယ် ၁၀ ခုထဲက လးခုကို permutation ပညာအရ တွဲစပ်မယ်ဆိုရင် software engineering domain တစ်ခုလုံးအတွက် programming language ပါင်း ၅၀၄၀ လိုအပ်နိုင်ပါတယ်။ လက်ရှိမှာ (၂၀၀၉ ခုနှစ်အထိပြုစုထားတဲ့စာရင်းအရ) programming language ပါင်း ၂၅၀၀ ကျာ်ရှိပြီးဖြစ်တဲ့အတွက် နာက်ထပ် ၂၅၀၀ လာက် ထပ်မံလိုအပ်နေဦးမယ် သဘောပေါ့။ တစ်နှစ်ကို language အသစ်ပေါင်း ၁၀၀ လာက် ပါ်ထွက်မယ်ဆိုရင်တောင် နာက်ထပ် နှစ်အစိပ်လောက်အထိ အသစ်သစ်သော programming language တွ ဆက်လက် ထွက်ပေါ်နေဦးမယ့် သဘောမျိုး သက်ရောက်ပါတယ်။ တကယ်လို များ အဲဒီ limit ဖစ်တဲ့ programming language စုစုပေါင်းအရေအတွက် ၅၀၄၀ ကိုရောက်သွားပြီးဆိုရင် ဖစ်နိုင်ချေရှိတဲ့ ပန် နှံ ခွေဲ၀ပုံ (probable distribution) က
-၄၈၀၀ လာက်သော programming language တွဟာ dead or dying language တွဖြစ်သွားမယ်၊ သူတို ကို လ့လာသူ တတ်ကျွမ်းသူ သုံးစွဲသူ programmer အရေအတွက်ဟာ တကယ့်ကို အနည်းငယ်ပဲ ကျန်တော့မယ်။
-၂၀၀ လာက်က၊ ထပ်မံဖွံ ဖိုးတိုးတက်မှုမရှိတော့တဲ့ software တွ၊ maintenance လုပ်ဖို သာ လိုအပ်တော့တဲ့ Legacy Application တွရဲ့ programming language တွအဖြစ်ရှိနေကြမယ်
-ကျန်တဲ့ ၄၀ လာက်ကသာ application အသစ်တွေ ရးရာမှာ အသုံးပြုတဲ့၊ လက်တွေ အသုံးချနေသူ သုံးစွဲနေသူ programmer တွ အများဆုံး ရှိနေမယ့် programming language တွ အဖြစ် ရှိနေမှာဖြစ်ပါတယ်။
အဲဒီတော့ မူလမေးခွန်းဖြစ်တဲ့ “software application တခုအတွက် programming language ဘယ်နှခုလိုသလဲ” ဆိုတဲ့ မးခွန်းကို ပန်ကောက်ရရင် “အဲဒါဟာ မိတ်ဆွေဖြေရှင်းရမယ့် ပဿနာရဲ့ အတိမ်အနက်နဲ  နယ်ပယ်အကျယ်အ၀န်းပေါ်မှာ မူတည်ပါတယ်” လို သာ အကြမ်းဖျဉ်းဖြေရပါလိမ် မယ်။
အောက်မှာ ဖါ်ပြထားတဲ့ ဇယားကတော့ အမေရိကန်ပြည်ထောင်စုကြီးတစ်ခုလုံးရဲ့ အစိုးရအုပ်ချုပ်ရေးပိုင်းဆိုင်ရာတွေနဲ  စီးပွားရေးလုပ်ငန်းတွေမှာ အများဆုံးအသုံးချနေတဲ့ အဓိက အရေးကြီး software application တွနဲ  အဲဒီ application တွကို ရးသားရာမှာ သုံးစွဲတဲ့ programming language တွရဲ့စာရင်းပဲဖြစ်ပါတယ်။ အဲဒီ စာရင်းနဲ ပတ်သက်လို  ပိုမိုပြီးပြည့်စုံတဲ့ သုတေသနလုပ်ငန်းတွေသာ ဆက်လက်လုပ်ဆောင်မယ်ဆိုရင် တချို critical software application တွဟာ programming language ပါင်း ၅၀ ကျာ်အထိ သုံးစွဲရေးသားကြတာကို တွ ရမှာဖြစ်တယ်လို  ခန် မှန်းရပါတယ်။ တခါလာ point of sales, တခါလာ online က ဈးရောင်းမယ်၊ သုံးသမျှကလည်း java, .net, php နဲ  သံသရာလည်နေတဲ့ ကျွန်တော်တို အတွက်၊ နည်းပညာမှာ ထိပ်တန်းဖြစ်နေတဲ့သူတွေက ဘယ်လို Application တွကို ဘယ်လို programming language တွ သုံးပြီး ဖန်တီးကြတယ်ဆိုတာ အနည်းဆုံးတော့ ဗဟုသုတအနေနဲ သိခွင့်ရတာပေါ့။ မိတ်ဆွေတို ဆင်ခြင်စဉ်းစားနိုင်အောင် နဲ  ၀ဖန်သုံးသပ်နိုင်အောင် ပန်လညေ်၀ငှလိုက်တာပါ။

Table - Programming Languages Used for Critical Software Applications
Critical Software Programming Languages
1. Air traffic control Ada, Assembly, C, Jovial, PL/I
2. Antivirus & security ActiveX, C, C++, Oberon7
3. Automotive engines C, C++, Forth, Giotto
4. Banking applications C, COBOL, E, HTML, Java, PL/I, SQL, XML
5. Broadband C, C++, CESOF, JAVA
6. Cell phones C, C++, C#, Objective C
7. Credit cards ASP.NET, C, COBOL, Java, Perl, PHP, PL/I
8. Credit checking ABAP, COBOL, FORTRAN, PL/I, XML
9. Credit unions C, COBOL, HTML, PL/I, SQL
10. Criminal records ABAP, C, COBOL, FORTRAN, Hancock
11. Defense applications Ada, Assembly, C, CMS2, FORTRAN, Java, Jovial, SPL
12. Electric power Assembly, C, DCOPEJ, Java, Matpower
13. FBI, CIA, NSA, etc. Ada, APL, Assembly, C, C++, FORTRAN, Hancock
14. Federal taxation C, COBOL, Delphi, FORTRAN, Java, SQL
15. Flight controls Ada, Assembly, C, C++, C#, LabView
16. Insurance ABAP, COBOL, FORTRAN, Java, PL/I
17. Mail and shipping COBOL, dBase2, PL/I, Python, SQL
18. Manufacturing AML, APT, C, Forth, Lua, RLL
19. Medical equipment Assembly, Basic, C, CO, CMS2, Java
20. Medical records ABAP, COBOL, MUMPS. SQL
21. Medicare Assembly, COBOL, Java, PL/I, dBase2, SQL
22. Municipal taxation C, COBOL, Delphi, Java
23. Navigation Assembly, C, C++, C#, Lua, Logo, MatLab
24. Oil and Energy AMPL,C, G, GAMS/MPSGE, SLP,
25. Open-source software C, C++, JavaScript, Python, Suneido, XUL
26. Operating systems, large Assembly, C, C#, Objective C, PL/S, VB
27. Operating systems, small C, C++, Objective C, OSL, SR
28. Pharmaceuticals C, C++, Java, PASCAL, SAS, Visual Basic
29. Police records C, COBOL, DBase2, Hancock, SQL
30. Satellites C, C++, C#, Java, Jovial, PHP, Pluto
31. Securities trading ABAP, C #,COBOL, DBase2, Java, SQL
32. Social Security Assembly, COBOL, PL/I, dBase2, SQL
33. State taxation C, COBOL, Delphi, FORTRAN, Java, SQL
34. Surface transportation C, C++, COBOL, FORTRAN, HTML, SQL
35. Telephone switching C, CHILL, CORAL, Erlang, ESPL1,ESTEREL
36. Television broadcasts C, C++, C#, Java, Forth
37. Voting equipment Ada, C, C++, Java
38. Weapons systems Ada, Assembly, C, C++, Jovial
39. Web applications AppleScript, ASP, CMM, Dylan, E, Perl, PHP, .NET
40. Welfare (State) ASP.NET, C, COBOL, dBASE2, PL/I, SQL


ရွှင်လန်းချမ်းမြေ့ပါစေ။
InfoTherapy(2013)

REFERENCE: “Software Engineering Best Practices”, by Capers Jones, McGraw-Hill, 2010. Chapter 8: Programming and Code Development

မှတ်ချက်။ ၂၀၁၃ ဂျွန်လထုတ် ကွန်ပျူတာဂျာနယ်တွင် ​ေဖါ်ပြပြီးသော ဆာင်းပါးဖြစ်ပါသည်။

Sunday, May 12, 2013

အရည်အသွေးမြင့် ဆော့ဖ်ဝဲအင်ဂျင်နီယာ


မိတ်ဆက်နိဒါန်း
ဒီကနေ ခတ်အခါမှာ စီးပွားရေး လူမှုရေး နဲ  အခြားအခြားသော အထွေထွေကိစ္စရပ်တွေဟာ တခုနဲ တခု ဆက်နွယ်ပြီး ရှုပ်ထွေးမှုတွေ မင့်မားလာပါတယ်။ အဲဒီလို မင့်မားလာတဲ့ ရှုပ်ထွေးမှုတွေကို ဖရှင်းနိုင်ဖို  ကျွန်တော်တို ဟာ ကွန်ပြူတာစနစ်တွေကို ပိုမိုအသုံးချလာကြရပါတယ်။ အခုဆိုရင် ကျွန်တော်တို ရဲ့ န စဉ်ဘ၀တွေမှာ ကွန်ပြူတာနဲ ကင်းလွတ်ဖို ဆိုတာ တာ်တော် မဖြစ်နိုင်တော့တဲ့ အခြေအနေကိုရောက်နေပါပြီ။ အဲဒီလို ကွန်ပြူတာစနစ်တွေကို ပိုမိုအသုံးချလာကြတာနဲ အမျှ၊ အဲဒီကွန်ပြူတာစနစ်တွေ ထိရောက်အောင်မြင်အောင် အလုပ်လုပ်နိုင်ဖို အတွက် ပိုမို အရည်အသွေးမြင့်မားတဲ့ ဆာ့ဖ်၀ဲတွေလိုအပ်လာပါတယ်။ အဲဒီလို အရည်အသွေးမြင့် ဆာ့ဖ်၀ဲတွေရေးဖို  ပထမတန်းစား programmer တွ၊ software engineer တွ၊ software developer တွ ပိုမိုလိုအပ်လာတယ်ပေါ့။ လိုအပ်လာတဲ့ လူ စွမ်းအားအရင်းအမြစ်တွေရဖို ၊ ပညာရေးဆိုင်ရာ အဖွဲ အစည်း တက္ကသိုလ် ကာလိပ် သိပ္ပံတွေက မွးထုတ်ပေးရမှာမှာပါ။ ဒါပေမယ့်ခက်တာက အဲဒီလို ကာလိပ် သိပ္ပံ တက္ကသိုလ်ဆင်း အများစုရဲ့ ပာစကားကတော့ အားတက်စရာပါပဲ။ “အခုအချိန်မှာ မင်္ဂလာပါကမ္ဘာကြီး Hello World * ဆိုတာတောင် အနိုင်နိုင်ပဲဗျို ” တဲ့ ။[* programming language တစ်ခုကို စတင်လေ့လာသင်ယူသူတိုင်း ပထမဆုံးအနေဖြင့် ရးလေ့ရှိသည့်၊ အဓိကလုပ်ဆောင်ချက်(statement) တစ်ကြောင်းတည်းသာပါသည့် ပရိုဂရမ်။]
ရိုးရိုးသားသား၀န်ခံရရင်တော့ ကျွန်တော်တို  ဘယ်လောက်ကြိုးစားခဲ့ပါတယ်ပြောပြော ဆိုးဆိုး၀ါး၀ါး မှားနေပြီဆိုတာပါပဲ။ ချိန်ဖို က လိုရင်းမဟုတ်ပဲ မှန်ဖို ကသာ အဓိကကိုးဗျ။ ရည်ရွယ်ချက်နဲ  ကြိုးပမ်းအားထုတ်မှုတွေထက် ဖစ်လာတဲ့ ရလာတဲ့ အကျိုးရလာဒ်ကသာ ပိုအရေးကြီးတယ်လို ဆိုလိုတာပါ။ မိတ်ဆွေတို ရာ ဘယ်လိုထင်ပါသလဲ။ ဒါနဲ  စကားမစပ်ပြောရရင်တော့ ကျွန်တော့ရဲ့ အရင်ဆောင်းပါးတွေမှာရော၊ အခုဆောင်းပါးမှာပါ ရည်ညွှန်းတဲ့ “မိတ်ဆွေတို ” ဆိုတာ ဆာ့ဖ်၀ဲရေးသားခြင်းအလုပ်နဲ  အသက်မွေး၀မ်းကြောင်းပြုကြမယ့် ကျာင်းသူကျောင်းသား လူငယ်တွေ၊ ဘွဲ ရကာစလူငယ်တွေ၊ programming တို  software engineering တို နဲ  ပတ်သက်ပြီး အသိပညာ ဗဟုသုတ ရှာဖွေစုဆောင်းနေသူတွေ ကို ရည်ညွှန်းတာပါ။ ဒီလူငယ်တွေဆီက စိတ်မကောင်းစရာ အမြဲလိုလို ကြားနေရတဲ့ စကားတွေကတော့ “programming က ခက်တယ်ဗျာ။ ဘယ်က စ’ရေးရမှန်းမသိဘူး။ ဘာမှလည်းမတတ်ဘူး ဘယ်လိုလုပ်ရမလဲ။” ဆိုတဲ့ စိတ်ပျက်အားလျော့တဲ့ လမ်းပျောက်နေတဲ့ အသံတွေပါပဲ။ အမှန်တော့လည်း ဒီဒုက္ခတွေဟာ မိတ်ဆွေတို လို အိုင်တီလိုင်း ဆာ့ဖ်၀ဲလိုင်း လိုက်မိတဲ့သူတွေချည်း ခံစားရတဲ့ အရာတွေမဟုတ်ပါဘူး။ ကျာင်းသူကျောင်းသားတိုင်း ဘွဲ ရကာစ လူငယ်တိုင်း ခံစားရတဲ့ ခံစားမှုပါ။ လူတိုင်းပါ။ ကိုယ့်ကျမှ ထူးပြီး ကံဆိုးနေတာတော့မဟုတ်ပါဘူး။ အဲဒီပြဿနာအတွက် လက်ညှိုးထိုး တရားခံရှာနေမယ့်အစား၊ တစ်စုံတရောက်ကိုပဲဖြစ်ဖြစ် ကိုယ့်ကိုကိုယ်ပဲဖြစ်ဖြစ် အပြစ်တင်နေမယ့်အစား ဒီအခက်အခဲတွေကို ကျာ်လွှားနိုင်အောင် ဘယ်လိုလုပ်ကြမလဲ ဆိုတဲ့ ဖရှင်းဖို နည်းလမ်းကိုသာ ရှာဖွေကြပါစို ။ မားဘယ်ကနေ ဘယ်သူပစ်လိုက်သလဲ ဆိုတာထက်၊ မားဒဏ်ရာကြောင့် အဆိပ်တက်နေသူကို အရင်ဆုံး ကုသပေးဖို  အရေးကြီးသလိုမျိုးပေါ့။
ကိုယ့်ကိုကိုယ်သိခြင်း (Know Thyself)
အရည်အသွေးမြင့် ပရိုဂရမ်မာတွေ ဆာ့ဖ်၀ဲအင်ဂျင်နီယာတွေ ဖစ်နိုင်ဖို အတွက်၊ အရေးအကြီးတကာ့အကြီးဆုံးနဲ  နံပါတ်တစ်အချက်ကတော့ မးခွန်းတခုနဲ  စတင်လိုက်ဖို ပါပဲ။ အဲဒီမေးခွန်းကတော့ “ငါဟာ.. ဒီ ပရိုဂရမ်မာဘ၀ ဆာ့ဖ်၀ဲအင်ဂျင်နီယာဘ၀ ဆာ့ဖ်၀ဲ Developer ဘ၀ ကို ပင်းပြင်းထန်ထန် လိုလိုလားလား ဖစ်ချင်စိတ်ရှိရဲ့လား။ ရှိတယ်ဆိုရင်ရော သချာရဲ့လား” ဆိုတာပဲဖြစ်ပါတယ်။ ဒီနေရာမှာ Apple ရဲ့ ဖခင်ကြီး၊ ကွယ်လွန်သွားရှာပြီဖြစ်တဲ့ စတိဗ်ဂျော့ဘ် Steven Paul Jobs (February 24, 1955 – October 5, 2011) ရဲ့ စကားကို ပန်လည်ကိုးကားပါရစေ။ အဲဒီစကားက အမေရိကန်ပြည်ထောင်စု ကယ်လီဖိုးနီးယားပြည်နယ်မှာရှိတဲ့ ကမ္ဘာ့အဆင့်မှီ နာမည်ကျော် စတဲန်ဖို ဒ် (Standord) တက္ကသိုလ်ကြီးရဲ့ ၊ ၂၀၀၅ ခု ဂျွန်လ ၁၂ န  မှာကျင်းပခဲ့တဲ့ ဘွဲ နှင်းသဘင် အခမ်းအနားမှာ မိတ်ဆွေတို လို ဘွဲ ရ ကျာင်းသူကျောင်းသား လူငယ်များကို ပာခဲ့တဲ့ စကားပေါ့။
“ခင်ဗျားလုပ်တဲ့အလုပ်က ခင်ဗျားဘ၀ရဲ့ကွက်လပ်ကိုဖြည့် ပးမှာဗျ။ ဒါကြောင့် ကိုယ့် ဘ၀ကိုယ် အမှန်တကယ် ကျနပ်ပျော်ရွှင်နိုင်ဖို ဆိုရင်၊ ကိုယ့်စိတ်ထဲမှာ အရမ်းမိုက်တဲ့အလုပ် တကယ်အနှစ်ကျတဲ့အလုပ်လို  လးလေးနက်နက်ယုံကြည်တဲ့ အလုပ်ကို လုပ်ဖို ပဲဖြစ်တယ်။ အဲဒီလို အရမ်းမိုက်တဲ့အလုပ် တကယ်အနှစ်ကျတဲ့အလုပ်မျိုးလို  ယုံကြည်နိုင်ဖို အတွက် တစ်ခုတည်းသော နည်းလမ်းကတော့ ခင်ဗျားဟာ ခင်ဗျားလုပ်တဲ့အလုပ်ကို ချစ် ဖို ပဲ။ အဲဒီလို အလုပ်မျိုး မတွေ သးရင်လည်း တွ အာင် ဆက်ပြီးသာ ရှာဗျာ။ ရာက်ရာဘ၀ ဖစ်ရာနေရမှာ ကျာက် မချလိုက်နဲ ..ရပ်တန် မနေနဲ ။ အဲဒီလို အလုပ်မျိုးတွေ ပီဟေ့ဆိုတာနဲ  ခင်ဗျားနှလုံးသားက (ဒီ အလုပ်ဟာ ငါတကယ်ချစ်တဲ့ အလုပ် ငါတကယ်လုပ်ချင်တဲ့ အလုပ်လို ) သိလာမှာပဲ။ တကယ်မြဲမြံခိုင်ခန် တဲ့ ဆက်ဆံရေးတွေလိုပဲ အချိန်ကြာလာတာနဲ အမျှ ခင်ဗျားအလုပ်ဟာ ခင်ဗျားဘ၀နဲ  တသားတည်း တထပ်တည်း ကျသထက်ကျလာလိမ့်မယ်။ ဒါကြောင့် အဲဒီလိုအလုပ်မျိုးတွေ တဲ့အထိိ ဆက်ပြီးသာရှာဗျာ။ မတွေ သးပဲနဲ တာ့ ဘ၀ကို ကျာက််မချလိုက်နဲ ။”
ဒါကြောင့် မိတ်ဆွေဟာ ကိုယ်တကယ် လိုလိုလားလား နှစ်နှစ်ကာကာ လုပ်ချင်တဲ့ အလုပ်မျိုးဟာ ဘယ်လိုအလုပ်မျိုးဖြစ်တယ်ဆိုတာ မိတ်ဆွေကိုယ်တိုင် ဆုံးဖြတ်ရွေးချယ်ရပါမယ်။
“မသိဘူးလေ..ဆယ်တန်းအောင်တုန်းက ကိုယ့်အမှတ်နဲ  အစိုးရက ခွဲချပေးလိုက်တဲ့ ကျာင်းပဲ တက်လိုက်ရတာပေါ့… ကွန်ပြူတာတက္ကသိုလ်ဆိုပဲ၊ မိဘကခိုင်းလို ၊ သူငယ်ချင်းတွေလိုက်တဲ့လိုင်း လိုက်လိုက်တာပဲ၊ ဒီလိုင်းက လစာကောင်းတယ်ဆိုလို ၊ ဘယ်လို ပာရမလဲပေါ့နော် ဒီလိုပါပဲ ..ဒီလိုနဲ ပဲ ဒီလမ်းကို ဒီလိုပဲ ရာက်လာတာလို  ဆိုရမှာပဲပေါ့နော်” တို ဘာတို ဆိုရင်တော့ အခြေအနေမကောင်းသေးဘူးဗျ။ နာက်တချက်က ကိုယ် လိုက်လက်စလိုင်းမို လို တို ၊ အိုင်တီနဲ ဘွဲ ရထားတော့လည်း အိုင်တီပဲလုပ်ချင်တယ် တို ဆိုတာတွေဟာလည်း လုံး၀မဟုတ်သေးပါဘူး။ လူတစ်ရောက်ဟာ ကိုယ့်ကိုကိုယ် ရှာဖွေတွေ ရှိလာတာနဲ အမျှ လိုအပ်ရင် လိုအပ်သလို ရဲရဲ၀ံ့၀ံ ချိုးကွေ နိုင်ရပါမယ်။ လမ်းကြောင်းပြောင်းပစ်နိုင်ရပါမယ်။ အသစ်တဖန် ပန်စရဲတဲ့ စိတ်ဓါတ်ခွန်အားရှိရပါမယ်။ မိတ်ဆွေဟာ ငါ ဘာဖြစ်ချင်တာလဲ ငါဘာလုပ်ချင်တာလဲ ဘယ်လမ်းကို လျှာက်ချင်တာလဲဆိုတာ မိမိကိုယ် မိမိ သိအောင်အရင်ဦးဆုံး အားထုတ်ကြိုးပမ်းလိုက်ပါဦး။ လမ်းမသိရင် လမ်းလွဲနေရင် လိုရာခရီးမရောက်ပဲ အလဟဿ အချိန်ကုန် လူပန်း “စရိတ်ကုန် ဇလုံပွန်း ဇွန်းတို” ဖစ်နေမှာပေါ့။ ပီးတော့လည်း နာက်တစ်ချက်က ကိုယ့်ဘ၀အတွက် အာင်အောင်မြင်မြင် ပျာ်ပျော်ရွှင်ရွှင် ရရှည် စိတ်၀င်တစား လုပ်နိုင်ဖို အတွက် အလုပ် ရွးချယ်တဲ့နေရာမှာ လစာတို  အကျိုးအမြတ်တို  စတဲ့ ငွတခုတည်းကိုချည်း ဦးတည်မစဉ်းစားသင့်ပါဘူး။ “အိုင်တီသမားက စလုံးမှာ ဆိုရင် အနည်းဆုံး သုံးထောင်ပဲ..အဲဒါကြောင့် အိုင်တီလိုင်းလိုက်ကြဟေ့”။ “အမေရိကားမှာဆိုရင် အနည်းဆုံး အစိမ်း ခာက်ထောင်လောက်ကတော့ အသာလေးပဲပေါ့..ဒေါ့နက်တို  ဂျာဗားတို  လ့လာကွာ” ဆိုတဲ့ စကားတွေဟာ အသက်မွေး၀မ်းကြောင်းအလုပ်တခုကို ရွးချယ်ဖို  မှန်ကန်တဲ့ အကြောင်းပြချက်တွေ တွန်းအားတွေမဟုတ်ပါဘူး။ စိတ်မ၀င်စားတဲ့ အလုပ်ကိုလုပ်ရင် မထူးချွန်ဘူး။ မထူးချွန်တဲ့အလုပ်ကိုလုပ်ရင် မအောင်မြင်ဘူး။ မအောင်မြင်တဲ့အလုပ်ကို လုပ်မှတော့ ဘယ်မှာလာ ကာင်းတော့မလဲဗျာ။ ငွကြောင့်သာဆိုရင်တော့ ဆာ့ဖ်၀ဲရေးတာထက်၊ ကုန်သည်ပွဲစား အရောင်းအ၀ယ်သမားလုပ်တာကမှ ငွများများရဖို  ချမ်းသာဖို  ပိုပြီးသေချာပါတယ်။ မိတ်ဆွေဟာ အသက်အရွယ်ရလာတာနဲ အမျှ အလုပ်တခုဟာ ငွများများရတိုင်းလည်း သိပ်တော့မနိပ်လှဘူး ဆိုတာ နားလည်လက်ခံလာမှာပါ။ ကိုယ်ဘာလုပ်ချင်သလဲ ဘာဖြစ်ချင်သလဲ ဘယ်နေရာတွေမှာ အားသန်လဲ ထူးချွန်သလဲ programming တို  software engineering တို ကို ငါ တကယ်စိတ်၀င်စားရဲ့လား ဆိုတာ စဉ်းစားဆုံးဖြတ်ပါ။ မသေချာရင်တော့လည်း ကိုယ်ထင်တဲ့ဟာ လက်တွေ လုပ်ကြည့်လိုက်ရုံ ရှိတော့တာပဲဗျာ။ လူ ဘ၀ကြီးဆိုတာကလည်း ခပ်ရှုပ်ရှုပ်ရယ်။ တချို အလုပ်တွေက လုပ်ကြည့်တော့မှ တဖြည်းဖြည်း စိတ်၀င်စားလာပြီး ကိုယ်၀ါသနာပါမှန်း ထူးချွန်မှန်း သိလိုက်ရသလို၊ တချို အလုပ်ကြပြန်တော့ ကိုယ်ကသိပ် crazy ဖစ်နေပေမယ့် တကယ်တန်းလုပ်ကြည့်လိုက်တော့မှ “ကျီးကန်း၊ စကားသင်” ဖစ်နေတာမျိုး ကြုံရတတ်တာကိုးဗျ။ ဒီလို မစမ်းခရမ်းပျိုး လုပ်ကြည့်နေရတဲ့အတွက် အချိန်တော့ နဲနဲ ရင်းရမှာပေါ့။ မတတ်နိုင်ဘူး။ ကိုယ့်ဘ၀ရဲ့ ကျန်တဲ့သက်တမ်းတလျောက်လုံး ကိုယ် တကယ်စိတ်၀င်စားပြီး ထူးချွန်အားသန်ရာကိုလုပ်နိုင်ဖို  အချိန်နဲ ရင်းပြီး ရှာဖွေသင့်ရင် ရှာဖွေရတော့မှာပဲ။ အင်း အရေးကြီးတာက limit လးတော့ထားပေါ့ဗျာ။ တစ်ချို ပုဂ္ဂိုလ်များလည်း တွ ဖူးပါရဲ့။ “ဘွဲ မျိုးစုံလည်းရထားတယ်၊ အလုပ်လည်းပေါင်းစုံပြီ၊ နိုင်ငံပေါင်းစုံလည်းရောက်ပြီးပြီ၊ အသက်လည်းခြောက်ဆယ်ကျော်ပြီ။ ခုထက်ထိတော့ ဘာကိုမှ ထူးထူးခြားခြား သိပ်စိတ်၀င်စားလှတယ်မရှိပါဘူး။ ဟိုကွေ ဟိုတက်၊ ဒီကွေ ဒီတက် နဲ ပဲ ဖတ်သန်းလာခဲ့တာပဲကွ” ဆိုတာမျိုးလည်းရှိလေတော့၊ ဒီလို မစမ်းခရမ်းပျိုး လုပ်ကြည့်တဲ့နည်းက သိပ်တော့မကောင်းလှဘူးပေါ့။ ဒါပေမယ့်လည်း ပတ်၀န်းကျင်နဲ  အခြေအနေက တွန်းပို လိုက်တဲ့ ကိုယ်မကျင်လည် မနှစ်သက်တဲ့ နရာမှာ ကျာက်ချနေမယ့်အစား မျာနေမယ့်အစားတော့၊ ဒီနည်းကမှ ခပ်ကောင်းကောင်းပါ။ အကောင်းဆုံးက ကိုယ်တိုင် စာများများဖတ် လ့လာ၊ မိဘ၊ ဆရာသမားကောင်း၊ မိတ်ဆွေကောင်း၊ အတွေ အကြုံဗဟုသုတများသူတွေ နဲ တိုင်ပင်ဆွေးနွေး အကြံညာဏ်ရယူပြီး နာက်ဆုံးအဆင့်မှာတော့ ကိုယ့်လမ်းကို ကိုယ်တိုင်ရွေးပေါ့ဗျာ။ အနှစ်ချုပ်ကတော့ ကိုယ့်ဆုံးဖြတ်ချက် ရွးချယ်ချက်ကြောင့်မဟုတ်ပဲ အခြေအနေတစ်ခုက တွန်းပို လိုက်လို  တစ်နေရာကို ရာက်လာတာဆိုရင်၊ တခြားအခြေအနေတစ်ခုက အဲဒီနေရာက ပန်တွန်းချသွားတာကို ကြုံရနိုင်တယ် ဆိုတာပါပဲ။

ရွေ လျားပစ်မှတ် (Software Engineering)
ဒုတိယအချက်အနေနဲ ကတော့ ဒီ software engineering လိုင်းကိုလိုက်တော့မယ်ဆိုရင် ဒီပညာရပ်ရဲ့ သဘောသဘာ၀ နဲ  အနေအထားကို ကာင်းကောင်း နားလည်သဘောပေါက်ထားဖို လိုအပ်တဲ့ကိစ္စပါ။ ဘာလို လဲဆိုတော့ ဒီပညာရပ်ဟာ တခြား အင်ဂျင်နီယာပညာရပ်တွေလို ရင့်ကျက် တည်ငြိမ် အသားကျတဲ့ အဆင့်ထိ မရောက်သေးတော့ ဒီ ပညာရပ်နဲ ပတ်သက်တဲ့ နည်းစနစ်အသစ်တွေ နည်းပညာအသစ်တွေ အတွေးအခေါ် အယူအဆအသစ်တွေနဲ ၊ programming language အသစ်တွေ ဒါမှမဟုတ် programming language version အသစ်တွေ ဟာ အချိန်နဲ အမျှ အဆက်မပြတ် ပုံမှန် ပါ်ထွက်နေလို ပဲဖြစ်ပါတယ်။ ဒီအချက်ဟာ ကျာင်းသူကျောင်းသားတွေသာမက၊ သင်ကြားရေးပိုင်းဆိုင်ရာ ဆရာ ဆရာမတွေအပြင် သင်ရိုးညွှန်းတမ်းရေးဆွဲသူတွေပါ တွ ကြုံနေရတဲ့ အခက်အခဲဖြစ်ပါတယ်။ သင်ရိုးတစ်ခုကို ပုစုချိန်၊ မိတ်ဆွေတို ကျာင်းသားဘ၀ ဖတ်သန်းချိန်နဲ  လုပ်ငန်းခွင်၀င်ရောက်ချိန် ကြားမှာ၊ ပင်ပ software industry လာကရဲ့လိုအပ်ချက်တွေ တာင်းဆိုမှုတွေနဲ ၊ ဆာ့ဖ်၀ဲအင်ဂျင်နီယာပညာရပ်ကိုယ်တိုင်က တာ်တော်လေး ပာင်းလဲသွားပြီဖြစ်ပါတယ်။ ဘာနဲ အလားသဏ္ဍန်တူသလဲဆိုတော့ မိတ်ဆွေတို ဟာ စစချင်းပဲ ရွ လျားပစ်မှတ်ကို တိတိကျကျ မှန်အောင် ပစ်ခတ်ဖို ကြိုးစား အားထုတ်နေရတဲ့ သူတွေလိုဖြစ်နေပြီး ရလာဒ်တော်တော်များများက ဦးတည်ချက်နဲ  လွဲချော်သွားရတဲ့ အဖြစ်မျိုးတွေ ကြုံတွေ နရတာပါ။ ဒါကြောင့် ဘွဲ ရကာစ လူငယ်တွေအနေနဲ  လုပ်ငန်းခွင်အတွက် ဘယ်လိုမှ အဆင်သင့်မဖြစ်နိုင်တဲ့ အနေအထားမျိုးကြုံရပါတော့တယ်။
ခက်တာက သင်ရိုညွှန်းတမ်းဆိုတာမျိုးကို အမြဲပြောင်းနေလို  အားတိုင်းအဆင့်မြှင့်နေလို ရတာမျိုးမဟုတ်ပါဘူး။ ဒါကြောင့် software engineering ပညာရပ်နဲ ပတ်သက်ရင် သင်ကြားရေးပိုင်းဆိုင်ရာ ဆရာ ဆရာမတွေနဲ  ကျာင်းသူကျောင်းသား လူငယ်တွေကိုယ်တိုင်ပဲ အမြဲမပြတ် ရှာဖွေ ဖည့်ဆည်းနေဖို  ၊ လ့လာနေဖို ၊ လ့ကျင့်နေဖို  ဆိုတာ မဖြစ်မနေ လိုအပ်လာပါတယ်။ အဲဒီလို လုပ်နိုင်ဖို ကျပြန်တော့ တိုင်းပြည်တပြည်ရဲ့ အခြေခံအဆောက်အဦပြည့်စုံမှု အနေအထားက အများကြီး စကားပြောလာပါပြီ။ နာက်ဆုံးပေါ် စာအုပ်စာအုပ်စာတမ်း တွ အလျှံပယ်ရှိတဲ့စာကြည့်တိုက်တွေ၊ မန်နှုန်းမြင့်အင်တာနက် စတာတွေဟာ ပညာရေးတိုးတက်ဖို ၊ ပာင်းလဲရွေ လျားနေတဲ့ နည်းပညာတွေနောက်ကို အမှီလိုက်နိုင်ဖို အတွက် မရှိမဖြစ် လိုအပ်ချက်တွေပါ။ တက္ကသိုလ် ကာလိပ် စုစုပေါင်းအရေအတွက် မဟုတ်ပါဘူး။ အခုတော့ အဲဒီလို အမှန်တကယ် လိုအပ်နေတဲ့ လိုအပ်ချက်တွေက မပြည့်စုံ ချို တဲ့လေတော့ ကျာင်းသူကျောင်းသား ခဗျာများလည်း ရှိတဲ့ မီးကျိုးမောင်းပျက် ကျာက်လက်နက်နဲ ပဲ  လာင်ချာထမ်းထားတဲ့ ဒိုင်နိုဆောကြီးကို ရင်ဆိုင်တိုက်ရလို ဖစ်နေတာပေါ့။ တခါတလေ မဆီမဆိုင် တွးမိပါတယ်။ စာကြည့်တိုက် နဲနဲ နဲ  အင်တာနက်နှေးနှေးပဲရှိတဲ့နိုင်ငံကလူတွေဟာ၊ စာကြည့်တိုက်များများ နဲ  အင်တာနက်မြန်မြန်ရှိတဲ့ နိုင်ငံတွေကို သွားအလုပ်ကြ ပညာရှာကြရတာပါလား လို ။ လက်တွေ မှာလည်း ဒီအတိုင်းပဲဖြစ်နေတာကိုး။ ကဲ ထားပါဗျာ မရှိတာတွေ ပာနေလို တာ့လည်း ကျွန်တော်တို ဘာမှ ဖစ်လာမှာမဟုတ်ပါဘူး။ ဒီအခက်အခဲကို လက်တွေ ကျကျပဲ ကိုယ်လုပ်နိုင်တဲ့ ရှုဒေါင့်ကနေ တတ်နိုင်သလောက်ဖြေရှင်းကြည့်ကြပါစို ။
ဤခရီး နီးပါသည် (Study, Analyse, Practise)
အဲဒီ ဖရှင်းနည်းကတော့ “အတ္တာဟိ အတ္တနော နာထော” ဆိုတာလို မိမိကိုယ်သာကိုးကွယ်ရာလို ခံယူပြီး (ဆရာဆရာမတွေရော ကျာင်းသူကျောင်းသားတွေပါ) မိမိကိုယ်ကို တာ်အောင် တတ်အောင် ကျွမ်းကျင်အောင် တဦးချင်းအနေနဲ  စတင်ကြိုးပမ်း တဲ့ နည်းလမ်းပါပဲ။ programming နဲ  software engineering မှာ တာ်ဖို အတွက်ဆိုရင် “များများဖတ် များများတွေး များများရေး” ရပါလိမ့်မယ်။ မိတ်ဆွေရဲ့ တခြားအပျော်အပါးတွေကို နဲနဲလေးတော့ စတေးရပါလိမ့်မယ်။ များများဖတ်ဖို အတွက် (လောလောဆယ်တော့) စာအုပ်များများမလိုပါဘူး။ မိတ်ဆွေမှာရှိတဲ့ စာအုပ်ကိုသာ တအုပ်ဆို ဆိုသလောက် ကျညက်အောင် ထုံးလိုချေ ရလိုနှေက်ပြီး၊ ကြာင်ပုဇွန်စား ကျွတ်ကျွတ်၀ါးသလို များများဖတ်ပါ။ ဖတ်ပြီးသလောက်ကို ပန်လည်တွေးတော စဉ်းစားဆင်ခြင်ပါ။ ပီးရင် ရးသင့်ရေးထိုက်တဲ့ ပရိုဂရမ်တွေ လ့ကျင့်ခန်းတွေကို လက်တွေ ချရေးပြီး run ကြည့်ပါ။ မးထားတဲ့မေးခွန်း၊ ရးထားတဲ့ ပရိုဂရမ်နဲ ထွက်လာတဲ့အဖြေကို နှိုင်းယှဉ်ဆင်ခြင် သုံးသပ်ကြည့်ပါ။ စက်နဲ  run ဖို  အဆင်မပြေရင် နာက်ဆုံးဗျာ ပရိုဂရမ်ကို စာရွက်နဲ သာချရေးလိုက်ပေတော့။ အရေးအကြီးဆုံးအချက်ကတော့ “ ဒီ program ကို ငါ ဘာအတွက် ရးတာလဲ ဘာကြောင့်ရေးတာလဲ” ဆိုတဲ့ မးခွန်း သို မဟုတ် ပဿနာကို သဘောပေါက်နားလည်အောင်လုပ်ဖို ပါ။ အကြိမ်တော်တော်များများမှာ ကျွန်တော်တို ဟာ အဖြေကိုမသိတာထက်၊ မးခွန်းကို နားမလည် တာက များနေတတ်ပါတယ်။
နောက်တဆင့်အနေနဲ ၊ မိတ်ဆွေဟာ ကိုယ်နဲ ၀ါသနာတူ ရည်ရွယ်ချက်တူတဲ့ သုူငယ်ချင်းတွေနဲ အစု အဖွဲ လးတွေဖွဲ ပီး၊ စာသင်နှစ်တနှစ်မှာ အနဲဆုံး assignment သးသေး နှစ်ခုလောက် နဲ  ပရောဂျက်ကြီးကြီး တခုလောက် ရအောင်ရေးပါ။ ဒါဆိုရင် လးနှစ် တာကာလပြီးရင် မိတ်ဆွေဟာ တာ်တော်ကြီး မဟုတ်တောင်မှာ တာ်တော်လေး တာ့ တီးမိခေါက်မိပြီး လုပ်ငန်းခွင် စိန်ခေါ်မှုတွေအတွက် အဆင်သင့်လောက်နီးနီး ဖစ်နေမှာပါ။ “နေပါဦးဗျ ခင်ဗျားပြောတော့လွယ်တယ် ကျုပ်တို က ဘယ်က စ’ ရးရမှန်းကိုမသိတာ ဘာတွေရေးရမှာလဲ” ဆိုရင် အလွယ်ဆုံးအဖြေပေးပါမယ်။ assignment အတွက်လောက်ဆိုရင်၊ ကိုယ်ပေးလိုက်တဲ့ input တွနဲ  ပါင်း နှုတ် မှက် စား လုပ်တဲ့ ပရိုဂရမ်လေးတွေ၊ အတိုးတွက်တာတို၊့ အလေးချိန် အပူချိန် အကွာအေ၀း စတဲ့ ယူနစ်တွေ တခုကတခုပြောင်းတာတို  ..အဲဒီလိုမျိုး ပရိုဂရမ်လေးတွေ စမ်းရေးကြည့်ပေါ့။ project အတွက်ဆိုရင် လည်း လူတိုင်းရေးနေကြ login, customer, order, product, supplier, invoice, report ပဲပေါ့ဗျာ။ တကယ်တော့ business system အများစုဟာ အဲဒီ flow အပေါ်မှာပဲ တာ်တော်များ အခြေခံထားတာကိုး။ assignment ကို တစ်ရောက်တည်းရေး ၊ project ကို နှစ်ရောက်သုံးရောက် တိုင်ပင်ပြီး ပူးပေါင်းရေးပေါ့။ ပရိုဂရမ်ရေးတာ ဆာ့ဖ်၀ဲရေးတာကို သိပ် ခက်ခဲ နက်နဲတဲ့ အလုပ်တွေလို  သဘောမထားနဲ ဗျ။ အစပိုင်းတော့ စိတ်ညစ်ရတာပေါ့ဗျာ။ မိတ်ဆွေတို  ငယ်ငယ်ကဆိုရင် စာထဲမှာအလွယ်ဆုံးဖြစ်တဲ့ ၀လုံး ရးတာတောင် လှဖို  ပပို  ပီပြင်ဖို  ၀ိုင်းစက်ဖို  တနှစ်လောက် ကြိုးစားခဲ့ရသေးတာပဲ။ အရည်အသွေးမြင့် software engineer ဖစ်ဖို နဲနဲတော့ စိတ်ရှည်သည်းခံပြီး ဇွဲနဘဲ ကြီးရမှာပေါ့။ နာက်အရေးကြီးတဲ့အချက်က မိတ်ဆွေဟာ တုန်ချိနှေးကွေး အင်တာနက်လေး သုံးဖြစ်တဲ့အချိန်တွေမှာ မိတ်ဆွေရဲ့ တန်ဘိုးရှိတဲ့အချိန်တွေကို software engineering တို  programming တို နဲ ဆိုင်တဲ့ forum တွ၊ blog တွ၊ site တွ မှာသာ သုံးစွဲဖို ပါ။ ကမ္ဘာ့ထိပ်တန်းတက္ကသိုလ်ကြီးတွေဖြစ်တဲ့ MIT, Cornel, Stanford, Princeton တို က ထိပ်တန်း ပါမောက္ခကြီးတွေရဲ့ လက်ချာ video တွ notes တွ၊ speech တွ၊ thesis paper တွ စာအုပ်စာတန်းတွေ အင်တာနက်မှာ အလျှံပယ်ရနေလျက်နဲ  ၊ g-talk, y-talk, facebook, twitter, ဂိမ်း, ဟိုဟိုဒီဒီ ဆိုဒ်တွေနဲ အချိန်မဖြုံးမိပါစေနဲ ။ မိတ်ဆွေတို ဖက်ကလည်းပြန်ပြောနိုင်ပါတယ်။ “အေး..ခင်ဗျားပြောတဲ့အတိုင်း လက်တွေ လုပ်ကြည့်ရင် ဘာဖြစ်လာမလဲတော့မသိဘူး။ အခုကိုပဲ လူ အခွင့်အရေး အတော်လေး ဆုံးရှုံးနေပါရောဗျ။ facebook လးတောင် မကြည့်ရဆိုတော့လည်း။ ညစ်သွားပြီဗျာ” လို ။ ကျွန်တော်ဆိုလိုတာက အဲ့ဒါတွေ လုံး၀ကြီး ဖတ်ရမယ်လို ဆိုလိုတာမဟုတ်ပါဘူး။ အတတ်နိုင်ဆုံး လျာ့ဖို လာက်ပါပဲ။ ကွယ်လွန်သွားရှာပြီဖြစ်တဲ့ အဆိုတော်ကြီး ကိုထီး (စိုင်းထီးဆိုင်) သီဆိုခဲ့တဲ့ “အပေးနဲ အယူ” သီချင်းထဲက ဆရာစိုင်းခမ်းလိတ်ရဲ့ စာသားလေးကိုပဲ မျှေ၀လိုက်ပါရစေ။ “ထိုက်တန်တဲ့ ရင်းနှီးမှုတော့ရှိရမယ်။ မယုတ်မလွန်တဲ့ ကျိုးစားမှုတော့ စိုက်ရမယ်။ နတ်စီတဲ့ အိပ်မက်လှလှ လွယ်လွယ်နဲ မရ” ဆိုတဲ့ စကားပါ။ မှန်ပါတယ်မိတ်ဆွေ။ လွယ်လယ်နဲ  စပယ်ပွင့်ရင်တော့ တလောကလုံး သင်းပျံ မွှးကြိုင်ပြီး လူတိုင်းရဲ့ခေါင်းမှာ ပန်းတွေနဲ ၀နေမှာပေါ့ဗျာ။

ဘယ်စာကို မာင်သင်မတုန်း (programming language)
ဒါကတော့ ကျာင်းသူကျောင်းသားအဆင့်ကျော်လာတဲ့ လူငယ်တွေနဲ  အများဆုံး ပတ်သက်တဲ့အကြောင်းပါ။ ထူးထွေတည့် အံ့ရာသော် ပဲဆိုကြပါစို ဗျာ။ တခြားနိုင်ငံတွေရဲ့ ဆာ့ဖ်၀ဲလုပ်ငန်းခွင်တွေမှာ လုပ်ကိုင်နေကြတဲ့ ပရိုဂရမ်မာတွေ ဆာ့၀ဲအင်ဂျင်နီယာတွေ ပညာရှင်တွေ ဆီက လုံး၀မကြားဘူးခဲ့ရတဲ့ စကားတွေ ဒီမှာ ကြားဖူးရပါတော့တယ်။
“ကုမ္ပဏီအတူတူပေမယ့် အဲဒီ ‘အပင်းဆို ’ကောင်တွေနဲ သိပ်မကြည်ဘူးဗျ။ PHP လး မတောက်တခေါက် နဲ ၊ ဂဂျိုးဂဂျောင် web page လး လးငါးခုပါတဲ့ ဆိုဒ်ကလေးလောက်ရေးပြီး သူတို ကိုယ်သူတို  open source သမားကွဆိုပြီး အခြောက်တိုက် ဘ၀င်မြင့်နေကြတယ်။”
“အဲဒီလူက သူကိုယ်သူ Java ကို Linux ပါ်မှာ run တာကွဆိုပြီး ဘယ့်သူ မှ လူထင်တဲ့ပုံမပေါ်ဘူး။ ကျုပ်တို ကလည်း ဒုန် ကဲ ပါဗျာ။”
“အဲဒီ ဒါ့နက်တွေ (Microsoft .NET သုံး၍ ရးသောသူများ) က အလကားပါဗျာ။ ဘာအရည်အချင်းမှရှိတာမဟုတ်ဘူး။ အဆင်သင့် သူများရေးထားပြီးသား library လးတွေ ခါ်သုံး ပီး ၀င်းဒိုးထဲပိတ်မိနေတဲ့ကောင်တွေကများ ကိုယ့်ကိုကိုယ် Developer လးဘာလေးနဲ ။ developer ဆိုတာ ကျုပ်တို လို ကိုယ့်ဟာကိုယ် အကုန်ရေးတဲ့သူတွေကိုမှ ခါ်တာဗျ”
“C, C++ မကျွမ်းပဲနဲ တာ့ programmer လို မခေါ်နိုင်ဘူးဗျ။ ကျန်တာတွေက အလကားပါ။ C++ ကို ပုံတူကူးချထားတာတွေချည်းပဲ”
စတဲ့ စကားတွေဟာ မန်မာပြည်မှာ ဆာ့ဖ်၀ဲရေးသည် ဆိုတဲ့ ရင်းနှီးတဲ့သူတွေဆီက ကြားဖူး လိုက်ရတဲ့စကားတွေပါ။ ကျွန်တော်အနေနဲ တာ့ အဲဒီစကားတွေနဲ ပတ်သက်ပြီး ဘာကိုမှ မှတ်ချက်မပြုလိုပါဘူး။ တကယ်တော့ အားလုံးထဲမှာ အကောင်းဆုံး အပြီးပြည့်စုံဆုံး ဆိုတဲ့ programming language ဆိုတာမရှိပါဘူး။ language အသီးသီးဟာ သူ နရာနဲ သူသာလျှင် အသင့်တော်ဆုံး အကောင်းဆုံးလို ပာနိုင်တာပါ။ ဒါတောင် ချွင်းချက်တွေ အငြင်းပွားဖွယ်တွေ ရှိဆဲပါ။ အားလုံးမှာ အားနည်းချက် အားသာချက်တွေ အသေအချာရှိနေပါတယ်။ ဒါကြောင့် ငါက ဘယ် language သမားကွဆိုပြီး ဘာမှ မာန်တက်နေစရာမလိုသလို စိတ်ပျက်စရာလည်းမလိုပါဘူး။ software engineer တစ်ရောက်အတွက်၊ programming language တစ်ခု တတ်ကျွမ်းတယ်ဆိုတာဟာ တကယ်တော့ အသပြာပဲ၀က်တောင်မတန်တဲ့ အဆင်တန်ဆာတစ်ခု ပိုင်ဆိုင်ထားသလေက်ပါပဲ။ တချို  (နိုင်ငံခြား) ကုမ္ပဏီတွေဆိုရင် အကြီးတန်းရာထူးတွေအတွက် လူတွေ စစ်ဆေးတဲ့အခါ programming language ဘယ်နှစ်မျိုးတတ်သလဲဆိုတာ လုံး၀မမေးပါဘူး။ ဘာလို လဲဆိုတော့ အရည်အချင်းပြည့်မီ ရင့်ကျက်တဲ့ senior level တွအားလုံးဟာ လိုအပ်ချက်အလိုက် ဘယ်ပရိုဂရမ်ဘာသာစကားနဲ မဆို ၊ မတတ်သေး မသိသေးရင်တောင် အချိန်တိုတိုအတွင်းလေ့လာပြီး ဆာ့ဖ်၀ဲရေးသားထုတ်လုပ်နိုင်စွမ်း ရှိရမယ်လို  ခံယူထားလို ပါ။
နောက် အရေးကြီးတဲ့ တချက်က၊ ကျွန်တော်တို ဟာ ဆာ့ဖ်၀ဲစနစ်တစ်ခုကို ဖန်တီးတည်ဆောက်တော့မယ်ဆိုရင်၊ ကိုယ့်ကိုဆောဖ့်၀ဲအပ်တဲ့ အဖွဲ အစည်းရဲ့ လုပ်ငန်း/စီးပွားရေး အမျိုးအစား၊ ကိုယ်ရေးသားတည်ဆောက်မယ့် ဆာ့ဖ်၀ဲအမျိုးအစား၊ အဲဒီဆော့ဖ်၀ဲအလုပ်လုပ်မယ့် platform, OS, ချိတ်ဆက်အလုပ်လုပ်ရမယ့် တခြား စနစ်တွေ နဲ  ဒီဆော့ဖ်၀ဲရေးဖို  အများဆုံးရတဲ့ resource, လူ အချိန် နဲ  ငွကြေး စတာတွေကို သချာ စိစစ်သုံးသပ်ပြီး နာက်ဆုံးမှ ဘယ် programming language ကိုသုံးပြီး အကောင်အထည်ဖေါ်ရေးသားကြမယ်ဆိုတာကို စဉ်းစားဆုံးဖြတ်တာပါ။ ပီးတော့လည်း မိတ်ဆွေကို ဆာ့ဖ်၀ဲအပ်တဲ့ လုပ်ငန်းရှင်ဟာ မိတ်ဆွေ ဘာ language ကို သုံးပြီးရေးတယ်ဆိုတာ လုံး၀ စိတ်မ၀င်စားပါဘူး။ သူဟာ စီးပွားရေးသမား လုပ်ငန်းရှင်ပါ။ မိတ်ဆွေရေးထားတဲ့ ဆာ့ဖ်၀ဲဟာ သူ ရဲ့ လုပ်ငန်းလိုအပ်ချက်တွေကို ပည့်ပြည့်စုံစုံ မန်မြန်ဆန်ဆန် နဲ  အမှားအယွင်းကင်းကင်း လုပ်ပေးနိုင်သလား ဆိုတာပဲကြည့်မှာဖြစ်ပါတယ်။ အခုတော့ ဟိုးအထက်မှာ ကြားခဲ့ရတဲ့ စကားတွေအတိုင်းဆိုရင် တချို သာ မန်မာပြည် ဆာဖ့်၀ဲလောကရဲ့ ပညာရှင်များကတော့ ကိုယ်တတ်ကျွမ်းထားတဲ့ programming language နဲ ပဲ software တစ်ခုကို ဘယ်လို ရအောင်တည်ဆောက်ကြမလဲလို  ဘာင်ခတ်ပြီး စဉ်းစားကြမယ်ဆိုတာ ထင်ရှားနေပါတယ်။ ဆာ့ဖ်၀ဲရေးတဲ့နေရာမှာ အဲဒီလိုသာ programming language ကို ဦးတည်စဉ်းစားတဲ့ နည်းနဲ သွားနေရင်တော့ တချိန်မှာ “ဖိနပ်က မတော်လို  ခထောက်ဖြတ်” ပစ်ရမယ့်ကိန်း ဆိုက်လာလိမ့်မယ် ဆိုတာပါပဲ။ ဒီစကားကို မိတ်ဆွေတို တချိန်မှာ နားလည်လာမှာပါ။ ခုနေတော့ ကျမ်းလေးအံ့စိုး၍ ;-) ဆက်မရှင်းတော့ပါဘူး။
“အေးဗျာ ထားပါတော့ ။ အဲဒါဆိုလည်း ကျုပ်တို က ဘယ် language ကို လ့လာရမတုန်းဗျ” ဆိုရင် အဖြေကရှင်းပါတယ်။ အနည်းဆုံးအဆင့်အနေနဲ  ၊ ဆာ့ဖ်၀ဲနဲ ဆိုင်တဲ့ ပညာသင်ကြားရေး နယ်ပယ်တွေမှာ သုံးစွဲနေတဲ့၊ ပင်ပလောကရဲ့ တကယ့်လက်တွေ  ဆာ့ဖ်၀ဲလုပ်ငန်းခွင်တွေမှာလည်း အခုလက်ရှိ အများဆုံးအသုံးချနေတဲ့၊ C, C++, Java (standard edition, enterprise edition နဲ  mobile edition), Microsoft ရဲ့ .NET (C#, VB, ASP), PHP နဲ  Python စတဲ့ general purpose programming language တွ၊ ဒါ့အပြင် html, xml နဲ  jvascript တို လို scripting language တွ နဲ  Database မှာ အသုံးချဖို  structured query language တွကိုပါ ပိုင်ပိုင်နိုင်နိုင် သိရှိနားလည် တတ်ကျွမ်းအောင် လုပ်ထားရမှာဖြစ်ပါတယ်။
“ဘာဗျ…ကျုပ်တို မှာ c plus plus နဲ တာင် ဒီလောက် တိုင်ပတ်နေတာ။ ခင်ဗျားက လာရန်စတာလား” လို တာ့မဆိုပါနဲ ။ တကယ်တော့ အထက်မှာ တင်ပြခဲ့တဲ့ language တွဟာ ပုံစံတူ အဆင့်မြင့် မျိုးကွဲတွေသာဖြစ်ပါတယ်။ သွင်ပြင်လက္ခဏာ လုံး၀ကြီး ကွဲပြားခြားနားတဲ့ programming language တွမဟုတ်ပါဘူး။ ဥပမာပြောရရင် တကယ်လို သာ မိတ်ဆွေဟာ c++ ကိုကျွမ်းကျင်ထားရင် သူနဲ  ပုံစံတူပြီး သူ ထက် low level ဖစ်တဲ့ c နဲ ၊ သူ ထက် high level ဖစ်တဲ့ Java တို  c# တို ကိုပါ အလွယ်တကူ နဲ  အချိန်တိုအတွင်း လ့လာလိုက်လို ရပါတယ်။ ပီးတော့ .NET platform မှာ c# ရရင် VB ကိုပါ အလွယ်တကူရမှာဖြစ်ပါတယ်။ Microsoft က ပုံစံတူ library တွ function name တွကိုပဲ သုံးတာကိုး။ ASP.NET ဆိုတာလည်း တကယ်တော့ scription language တွဖြစ်တဲ့ html နဲ  javascript ကို C# သို မဟုတ် VB နဲ  ပါင်းပြီး .NET framework ပါ်မှာ ရးလိုက်တာပဲ မဟုတ်ပါလား။ Python programming language ကတော့ အမေရိကားရဲ့ ဒိပ်ဒိပ်ကြဲ ထိပ်တန်းတက္ကသိုလ်ကြီးတွေ (ဥပမာ MIT - မက်ဆာချူးဆက်နည်းပညာသိပ္ပံ) မှာ computer science, software engineering နဲ  တခြား အင်ဂျင်နီယာ ပညာရပ်တွေအတွက် applied programming language အဖြစ် သုံးနေကြလို မိတ်ဆွေတို ကို လ့လာထားသင့်တယ်လို  အကြံပြုတာပါ။ အဲဒီ Python တို ၊ PHP တို ဆိုတာလည်း ဘာမှ ခက်ခဲနက်နဲ တာမဟုတ်ပါဘူး။ ထူးခြားဆန်းပြားပြီး အားလုံးနဲ ကွဲပြားခြားနားနေတဲ  programming language ဆိုတာ မရှိပါဘူး။ syntax လို ခါ်တဲ့ အသုံးအနှုန်း စကားလုံးလေးတွေ အနည်းအကျဉ်းကွဲပြားနေပေမယ့်၊ ပရိုဂရမ်ရေးရာမှာသုံးတဲ့ အတွေးအခေါ် အယူအဆ သဘောတရား အားလုံးဟာ အတူတူပါပဲ။ အနည်းဆုံးတော့ ခပ်ဆင်ဆင်ပါ။ တစ်ခုကို ကျွမ်းကျွမ်းကျင်ကျင်ရရင် ကျန်တာတွေကိုလည်း အသာကလေး လ့လာသွားရုံပါပဲ။ ဥပမာဗျာ ..မိတ်ဆွေတို ငယ်ငယ်က ၀လုံးကို ၀ိုင်းစက်နေအောင် ရးနိုင်ပြီဆိုရင်၊ တခြားစာလုံးတွေကိုလည်း လက်ရေးလှလှ ရးနိုင်သွားတာပဲ မဟုတ်ပါလား။ ဒီသဘောပါပဲ။ အစမှာတော့ စိတ်ရှည် ဇွဲသန် သည်းညည်းခံရတာပေါ့။ ဒါကြောင့် programming language များများတတ်လေ ကာင်းလေလို သာ အကြမ်းဖျဉ်းမှတ်ယူနိုင်ပါတယ်။ အလွန်ရှင်းလင်းထင်ရှားတဲ့ အမှန်တရားတခုကတော့ “မိတ်ဆွေမှာ တူပဲရှိထားတယ်ဆိုရင် သံပဲရိုက်လို ရမယ်” ဆိုတာပါပဲ။

ဆော့ဖ်၀ဲရေးသားခြင်းလုပ်ငန်း၏ သဘော သဘာ၀ (team work)
ဆောဖ့်၀ဲအင်ဂျင်နီယာကောင်းတရောက်ဖြစ်ဖို ဆိုရင်၊ အထက်မှာ ဒုတိယအချက်အနေနဲ ဆွးနွေးခဲ့တဲ့ software engineering ပညာရပ်ရဲ့ သဘောသဘာ၀ ကို သိဖို လိုသလို၊ ဆာ့ဖ်၀ဲလုပ်ငန်းခွင်ရဲ့ သဘောသဘာ၀ကိုလည်း မဖြစ်မနေ သိထားဖို လိုပါတယ်။  ဆာ့ဖ်၀ဲရေးတယ်ဆိုတာ သက်ဆိုင်ရာ ကျွမ်းကျင်ရာ နယ်ပယ်အသီးသီးက လူတွေပါ၀င်ပြီး အစုလိုက် အဖွဲ လိုက် အားလုံးညှိနှိုင်းတိုင်ပင်ပြီးမှ ပူးပေါင်းဆောင်ရွက်ကြရတဲ့ လုပ်ငန်းစဉ်တစ်ခုပါ။ အထူးသဖြင့် စီးပွားရေး ပုံသဏ္ဍန်အမျိုးမျိုး ရည်ရွယ်ချက်အမျိုး ကို၊ operating systems အမျိုးမျိုး platforms အမျိုးမျိုး အတွက် ဖန်တီးတည်ဆောက်ပေးရတဲ့ (enterprise systems for multi-faceted, heterogeneous platform support) ဆာ့ဖ်၀ဲစနစ်မျိုးတွေဟာ programming language ပါင်းစုံ၊ နည်းပညာပေါင်းစုံ၊ နည်းစနစ်ပေါင်းစုံသုံးပြီး၊ lines of code ပါင်း သန်းချီရေးရတာမျိုးဖြစ်တဲ့အတွက် တစ်ဦးကောင်း တစ်ရောက်ကောင်းနဲ  လုံး၀လုပ်လို မရတဲ့ အလုပ်တွေဖြစ်ပါတယ်။
ဒါကြောင့် ဆာ့ဖ်၀ဲအင်ဂျင်နီယာကောင်းတရောက် ဖစ်ဖို ဆိုရင် ကျွန်တော်တို ရဲ့ တကိုယ်တော်ကြဲချင်စိတ် တွကို လျာ့ဖို ၊ တတ်နိုင်ရင် ဖျာက်ဖို လိုပါတယ်။ “တကောင်တည်းပဲ ဒါပေမယ့် ခငေ်္သ့” ဆိုတဲ့ စကားဟာ ဆာ့ဖ်၀ဲအင်ဂျင်နီယာ လုပ်ငန်းခွင်မှာ အသုံးချလို မရနိုင်ပါဘူး။ “အဲဒါ..ကျွန်တော်တစ်ရောက်တည်း အစအဆုံးရေးတာပေါ့” ဆိုတာ ဂုဏ်ယူလောက်စရာ မဟုတ်သေးပါဘူး။ NCC, UK ဘွဲ လိုင်းက ကျာင်းသားတွေတောင် နှစ်စဉ် ပရောဂျက်တခု တခု၊ တရောက်တည်း ရးနေရသေးတာပဲဗျာ ဘာဆန်းလို လဲ။ မတူညီသော ပညာရှင်တွေ အင်အားစုတွေ အားလုံးနဲ  အဆင်ပြေပြေ အချိုးညီညီ ဟာမိုနီကျကျ ပူးပေါင်းဆောင်ရွက်ပြီး၊ အာင်အောင်မြင်မြင် ရလာတဲ့ product (software) မှာ ကိုယ်က ဘယ်လို နရာက ပါ၀င်ခဲ့တယ်ဆိုတာကသာ တကယ့်ဂုဏ်ယူစရာပါ။ ဒါဟာ ဆာ့ဖ်၀ဲအင်ဂျင်နီယာလုပ်ငန်းခွင်ရဲ့ တကယ့်အနှစ်သာရပဲဖြစ်ပါတယ်။ အပြန်အလှန်လေးစားယုံကြည်မှု ပူးပေါင်းဆောင်ရွက်တတ်မှု ညှိနှိုင်းတိုင်ပင်နိုင်မှု စတာတွေဟာ အာင်မြင်တဲ့ software development team တစ်ခုရဲ့ မဖြစ်မနေ လိုအပ်ချက်တွေပါ။ အဲဒီလို အဖွဲ မှာ ပါ၀င်ရေးသားခွင့်ရခဲ့ရင် ကိုယ့်အတွက်လည်း တန်ဘိုးမဖြတ်နိုင်တဲ့ အတွေ အကြုံဗဟုသုတ တွ ကိုယ်မသိသေး မတတ်သေးတာတွေ အများကြီး သိလာတတ်လာ နိုင်ပါတယ်။ မိတ်ဆွေမှာရှိတဲ့ ပန်းသီး နဲ  ကျွန်တော့မှာ ရှိတဲ့ပန်းသီး လဲလိုက်ရင် မိတ်ဆွေမှာလည်း ပန်းသီးတစ်လုံး ကျွန်တော့မှာလည်း ပန်းသီးတစ်လုံးပဲရှိမှာပါ။ ဒါပေမယ့် မိတ်ဆွေမှာ ရှိတဲ့ အသိပညာတစ်ခုနဲ  ကျွန်တော့မှာရှိတဲ့ အသိပညာကို လဲလှယ်လိုက်တယ်ဆိုရင်တော့ မိတ်ဆွေမှာရော ကျွန်တော့မှာရော အသိပညာ နှစ်ခုစီ ဖစ်လာတယ်ဆိုတဲ့ စကားလိုပေါ့။ ဒါဟာ team work ရဲ့ ထင်ရှားတဲ့ အကျိုးကျေးဇူးပါပဲ။

ဆော့ဖ်၀ဲရေးသားသူများအကြောင်း (Emotional Intelligence)
ပြီးတော့ မိတ်ဆွေတို  သတိထားရမယ့်အချက်က ဆာ့ဖ်၀ဲရေးတယ်ဆိုတာ လူနဲ ကွန်ပြူတာရဲ့ ဆက်သွယ်ရေးကို အကောင်ထည်ဖေါ်တာ မဟုတ်ဘူး..လူလူချင်း ဆက်သွယ်ရေးကို အကောင်အထည်ဖေါ် တည်ဆောက်တာသာလျှင် ဖစ်တယ်..ဆိုတဲ့အချက်ပါ။ ဒါကြောင့် software engineer ကာင်းတရောက်ဖြစ်ဖို ဆိုရင် လူတွေရဲ့ စိတ်နေစိတ်ထား ခံစားချက်တွေအကြောင်းကိုလည်း အနည်းဆုံး အခြေခံလောက်တော့ သိရှိနားလည်ထားရပါမယ်။ ဆိုလိုတာက မိတ်ဆွေမှာ EI လို ခါ်တဲ့ Emotional Intelligence နဲ ပတ်သက်တဲ့ အရည်အချင်း အထိုက်အလျောက် ရှိထားရမယ်ဆိုတာပါပဲ။ EI ဆိုတာ အတိုချုပ်ပြောရရင်တော့ မိမိကိုယ်တိုင်ရဲ့ စိတ်အခြေအနေ နဲ  သူတပါးရဲ့ စိတ်အခြေအနေတွေကို သိမြင်နားလည်နိုင်စွမ်းရှိတဲ့၊ ကိုယ့်ခံစားမှုကို ထိန်းသိမ်းနိုင်စွမ်းရှိပြီး သူတခါးခံစားမှုကို ကိုယ်ချင်းစာပေးနိုင်တဲ့ အရည်အချင်းပါ။ အဲဒါနဲ software ရးတာနဲ  ဘာဆိုင်လို တုန်းဗျလို လို  မိတ်ဆွေတို ထင်ကောင်းထင်ပါမယ်။ အလွန်အမင်းဆိုင်ပါတယ်။ Business Information Systems တို  Management Information Systems တို လို ဘာသာရပ်တွေ မှာ နည်းပညာအကြောင်းတွေအပြင် လူတွေအကြောင်းကိုပါ တာ်တော်လေး ဇာင်းပေးပြီးလေ့လာတာ တွ ရမှာပါ။ (ကြုံကြိုက်ရင် နာက်နောင်ဆောင်းပါးတွေမှာ အဲဒီဘာသာရပ်တွေအကြောင်း ဆွးနွေးပါဦးမယ်။) ဘာလို လဲဆိုတော့ Information Systems တွဟာ လူတွေစုပေါင်းလုပ်ရတဲ့ အလုပ်တွေဖြစ်တဲ့အတွက်၊ လူတွေအကြောင်းကို သိရှိနားလည်ထားမှသာ၊ ဒီလူတွေနဲ  လိုက်လျောညီထွေအဆင်ပြေပြေ ဆက်ဆံနိုင်မှာဖြစ်ပြီး၊ ဒီလူတွေကို ကာင်းကောင်းမွန်မွန် စီမံခန် ခွဲအုပ်ချုပ်နိုင်မှာပေါ့။ ဒါမှလည်း ကိုယ့်ရဲ့ software project, information system က အာင်မြင်မှာပေါ့။ ဒီ EI ဟာ ဘယ်နေရာ ဘယ်နယ်ပယ်မှာမဆို လူတစ်ရောက် အာင်မြင်ဖို အတွက် လုံး၀အရေးကြီးပါတယ်။ ညာဏ်ရည်ညာဏ်သွေးထက် လူ အရိပ်သုံးပါးနားလည်ပြီး လူမှုပေါင်းသင်းဆက်ဆံရေး ကာင်းမွန်တဲ့ သူတွေက လက်တွေ ဘ၀မှာ ပိုအောင်မြင်နေတာ မိတ်ဆွေသတိထားမိမှာပါ။ ပီးတော့လည်း software engineer လုပ်ငန်းခွင်မှာ ပါ၀င်သူတွေအားလုံးက သူ နရာနဲ သူ အရေးပါတဲ့ လူ တွချည်းပဲဖြစ်လေတော့ တစ်ရောက်ရောက်နဲ့ အဆင်မပြေဖြစ်လိုက်ရင်ကိုပဲ၊ မိတ်ဆွေရဲ့ အလုပ်တွေအပေါ်မှာ သိသိသာသာ အကျိုးသက်ရောက်မှုတွေ ရှိလာမှာပါ။ လက်တွေ လုပ်ငန်းခွင်၀င်တဲ့အခါ မိတ်ဆွေပိုပြီး နားလည်လာပါလိမ့်မယ်။ ဒီလိုဆိုလိုက်လို လည်း မိတ်ဆွေကို သူများအကြိုက်ချည်းလိုက်နေရမယ်လို  ဆိုလိုတာမဟုတ်ပါဘူး။ လူမှုပေါင်းသင်းဆက်ဆံရေးဆိုတာကလည်း အထူးပဲရှုပ်ထွေးလေတော့ “မလျော့မတင်း၊ စာင်းကြိုးညင်းသို ။ မလေးမပေါ့၊ လှဖေါင်ဖေါ့သို ။ မလျော့ပညာ၊ တံငါလုလင်၊ မှားကြိုးငင်သို ” ဆိုတာလို၊ လက်တွေ ကျကျ ချိန်ဆကျင့်သုံးပေါ့ဗျာ။

နိဂုံးအမှာ
ဆော့ဖ်၀ဲရေးတယ်ဆိုတာ နည်းပညာပိုင်းမှာ မိတ်ဆွေဘယ်လောက်ကျွမ်းကျွမ်း အမြဲတမ်း ပန်းခင်းလမ်းကိုလျှောက်နေရသလိုမျိုး မဟုတ်ပါဘူး။ ဆုံလည်ကုလားထိုင်ကြီးနဲ  အဲကွန်းခန်းထဲမှာ စတိုင်ကျကျထိုင်ရင်း ခါင်းမီးတောက်ပြီး ချွးဒီးဒီးကျနေရတဲ ကာလတွေ ရှိပါတယ်။ ပင်းထန်တဲ့ ဖိအားတွေ၊ များပြားလွန်းတဲ့တောင်းဆိုမှုတွေ၊ အရေးပေါ်လိုအပ်ချက်တွေကို အခါအားလျော်စွာကြုံရလေ့ရှိပါတယ်။ အဲဒီလို အခါမျိုးမှာ န မအိပ် ညမအိပ် လူရော စိတ်ပါ ဂျုံးဂျုံးကျတဲ့အထိ မရပ်မနား တွးတောကြံစည်ပြီး ဘယ်လိုအကြောင်းကြောင့်ပဲဖြစ်ဖြစ် ပီးမြောက်အောင်မြင်အောင် မဖြစ်မနေ လုပ်ကိုင်ရတဲ့အခါတွေ ရှိပါတယ်။ အဲဒီလိုဖိအားတွေကို ကြံ့ကြံ့ခံနိုင်ဖို ဆိုရင် မိတ်ဆွေဟာ အထက်မှာပြောခဲ့သလို ဒီအလုပ်ကို တကယ်ပြင်းပြထက်သန်စွာလုပ်ချင်လို  ကိုယ်တိုင် ရွးချယ်ခဲ့တာမျိုးပဲဖြစ်ရပါမယ်။ အမြဲမပြတ် လ့လာ လ့ကျင့် ပင်ဆင် ထားသူဖြစ်ရပါမယ်။ တခြားသူတွေနဲ ပူးပေါင်းဆောင်ရွက်နိုင်သူဖြစ်ရပါမယ်။ ဆာ့ဖ်၀ဲအင်ဂျင်နီယာဆိုင်ရာ ကရိယာ တန်ဆာပလာ ပါင်းစုံကို ကျွမ်း၀င် သုံးစွဲနိုင်သူဖြစ်ရပါမယ်။ တခြားလိုအပ်ချက်တွေလည်း ရှိပါသေးတယ်။ သို သာ်လည်း “ငါးသိုင်းများတော့ဟင်းဟုန်ပြီး၊ အနှစ်ချုပ်လိုက်တော့ အကာပဲကျန်တယ်” ဆိုတာမျိုးဖြစ်မှာစိုးလို software engineering principles တို ၊ domain knowledge တို ၊ software architecture တို ၊ desing pattern တို အကြောင်းကို နာက်နောင် ဆာင်းပါးတွေမှာမှ သီးသန် ဆွးနွေးပါဦးမယ်။
နောက်တချက်က၊ ဒီဆောင်းပါးမှာ ကျွန်တော်ဟာ မိတ်ဆွေတို ဖတ်ရှုရတာ ရှင်းလင်းစေဖို အတွက်၊ program နဲ  software, programmer နဲ  software engineer စတဲ့ စကားလုံးတွေကို တချို နရာတွေမှာ အနက်တူ အဓိပ္ပါယ်တူသဖွယ်် လဲလှယ်သုံးစွဲထားပါတယ်။ တကယ်တော့ မတူပါဘူး။ အလွယ်ကူဆုံးပြောရရင် program လို ခါ်တဲ့ programming language တစ်ခုခုကို သုံးပြီးရေးထားတဲ့ coding တွဟာ software system ကြီးတခုလုံးရဲ့ အစိတ်အပိုင်းလေးတစ်ခုမျှသာဖြစ်ပါတယ်။ ပီးတော့ duties and responsibilities အရလည်း၊ Programmer နဲ  Software Engineer ဟာ အများကြီး ကွာပါတယ်။ အားလုံးမြင်သာမယ့်  မို ပ တည်ဆောက်ရေး အင်ဂျင်နီယာလောကနဲ  ဥပမာပေးရရင်၊ Software Engineer က “ဗိသုကာပိုင်းဆိုင်ရာ၊ လက်တွေ  တည်ဆောက်ရေးပိုင်းဆိုင်ရာ၊ အရည်အသွေးပိုင်းဆိုင်ရာ စတာတွေကို တာ၀န်ခံ တာ၀န်ယူ ကြီးကြပ်ရတဲ့ အင်ဂျင်နီယာ ပညာရှင် သဘောမျိုး” ဆိုရင်၊ Programmer ဆိုတာကတော့ “အင်ဂျင်နီယာတို  အဖွဲ ခါင်းဆောင်တို ခိုင်းတဲ့အတိုင်း လက်တွေ  တည်ဆောက်ပေးရတဲ့ ရွဘော်ထိုး လွှတိုက် သံရိုက်၊ အုတ်သယ် ခဲထု မဆလာနယ်တဲ့ ပန်းရံ လက်သမား သဘောမျိုး” ပါ့ဗျာ။ ဒါဟာ လုပ်ကိုင်ဆောင်ရွက်ရတဲ့အလုပ်နဲ  ပတ်သက်ပြီး မင်သာအောင် ဥပမာပေးတာပါ ပရိုဂရမ်မာကို အဆင့်နိမ့်တယ်လို ဆိုလိုတာမဟုတ်ပါဘူး။ မိတ်ဆွေမှာ ဘယ်လောက်ပဲကြီးကျယ်ခမ်းနားတဲ့ စိတ်ကူးစိတ်သန်းနဲ  ကမ္ဘာ့အဆင့်မှီ ဗိသုကာဒီဇိုင်းကြီးရှိရှိ၊ လက်တွေ အကောင်အထည်ဖေါ်တည်ဆောက်ပေးမယ့် ပန်းရံ လက်သမားမရှိရင် ဘာမှဖြစ်လာမှာမဟုတ်ပါဘူး။ အားလုံးသူ နရာနဲ သူ အရေးပါသူတွေချည်းပါပဲ။ ပရိုဂရမ်မာတွေဆိုတာလည်း အချိန်မရွေး ဆာ့ဖ်၀ဲအင်ဂျင်နီယာ ဖစ်လာနိုင်ပါတယ်။ အထူးသတိထားရမယ့်အချက်၊ Software Engineering လာကနဲ့ တခြား Engineering လာက မတူတဲ့ အချက်ကတော့ Software Engineer တိုင်းဟာ အခြေခံအကျဆုံးဖြစ်တဲ့ Programmer ဘ၀ကို မဖြစ်မနေ ဖတ်သန်းခဲ့ရမှာဖြစ်ပြီး၊ ဘယ် Software Engineer မဆို၊ Programmer တွလုပ်တဲ့ အလုပ်ကို အချိန်မရွေး ကာင်းကောင်းလုပ်နိုင်တယ် လုပ်နိုင်ရမယ် ဆိုတာပဲဖြစ်ပါတယ်။
ရွှင်လန်းချမ်းမြေ့ပါစေ။
infoTherapy-2013

မှတ်ချက်။     ။ 2013, April လထုတ် ကွန်ပြူတာဂျာနယ်တွင် ဖါ်ပြပြီးသောဆောင်းပါးဖြစ်ပါသည်။