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

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