Programming Language Paradigms

Programming Language Paradigms

ကမ္ဘာပေါ်မှာ သုံးနေတဲ့ programming language ပေါင်းမြောက်များစွာရှိပါတယ်။ အသုံးများတဲ့ programming language တွေကလဲ သိပြီးသားပါ Java, JavaScript, C#, C++, Python, Ruby, PHP, Lua, အစရှိသဖြင့်ပေါ့ဗျာ။ Programming Language Paradigm ဆိုတာ မြန်မာလို ဒီနေရာမှာ မြန်မာမူ.ပြုရရင် programming language တခုခြင်းစီရဲ. ရေးသားပုံ စံ တွေးခေါ်ပုံ model လို.ပြောရမှာပါ။ နည်းနည်းရှုပ်မယ်စိုးလို. ထပ်ရှင်းပြပါမယ်။

ဥပမာ ကျွန်တော်တို.ဒီမှာအသုံးအများဆုံးကတော့ imperative programming language တွေနဲ. Object Object Oriented Programming, procedural programming အစရှိတဲ့ paradigm တွေပါ။ Paradigm ကွာသွားရင် language တခုရဲ. စဉ်းစားပုံကွာသွားပါတယ် ။ ဥပမာ OO paradigm မှာဆိုရင် အားလုံးကို Object အနေနဲ.စဉ်းစားပြီး solution ထုတ်ပါတယ်။ Procedural Language (Cobol, VB) ဒါမျိုးတွေဆိုရင် procedure တွေအပေါ်မူတည်ပြီး စဉ်းစားပါတယ်။ တခုသတိထားရမှာ က နောက်ပိုင်း programming language တော်တော်များများက multi paradigm ကို support လုပ်ပေးထားတယ်ဆိုတာပါပဲ၊

ဥပမာ C# ဆိုရင် OO paradigm ကို support လုပ်သလို Functional programming အတွက်လဲ construct တွေထဲ့ပေးထားပါတယ်။ Software Development ဟာရှုပ်ထွေားလာတဲ့နဲ.အမျှ ပြဿနာအားလုံးကို paradigm တခုတည်းနဲ.ဖြေရှင်းလို.အဆင်မပြေနိုင်တော့ပါဘူး။ ဥပမာ Java ရဲ.ထင်ရှားတဲ့ web application framework တခုဖြစ်တဲ့ Spring မှာ Aspect Oriented Programming Paradigm ကိုသုံးထားတဲ့ AspectJ programming language ကိုသုံးပြီး transcation management, log writing တွေထဲ့သုံးထားပါတယ်။

ဒါဟာ ဘာကိုပြတာလဲဆိုတော့ အားလုံးကို paradigm တခုတည်းကနေ ရှင်းလို. အကုန်အဆင်မပြေဘူးဆိုတာပါပဲ။ Programming language တွေဟာ ခေတ်မှီလာတာနဲ. တပြိုင်နက် evolved လုပ်ရပါတယ်။ Evolved လုပ်ရတယ်ဆိုတာ အမှန်တော့ ခေတ်နဲ.လျော်ညီစွာ language ကို element တွေ contruct အသစ်တွေ idiom တွေထပ်ထဲ့တာပါပဲ။ အဲ့လိုမလုပ်တဲ့ language ဟာ ကျန်ခဲ့မှပါပဲ။ ဥပမာ PHP ဟာ သူပေါ်ခါစက OO paradigm ကို support မလုပ်ပေးပါဘူး။ နောက်ပိုင်း version တွေရောက်တော့မှ သူက OO Paradigm ကို support လုပ်ဖို. Construct တွေ language element တွေထပ်ထဲ့ခဲ့တာပါ။

Evolution Theory အရ evolve လုပ်မှပဲ survive ဖြစ်နိုင်မှာပါ။ အရမ်း evolve ဖြစ်လွန်းရင်လဲ programmer တွေ ဘက်က learning curve များနိုင်ပါတယ် ၊ အဲ့အတွက် language designer တွေဘက်ကကြည့်ရင်လဲ construct တခုထပ်ဖြည့်ဖို.ဆိုတာ အတော်စဉ်းစားရပါတယ်။ C# ဆိုရင် evolve ဖြစ်တာ တော်တော်များပြီး Java ဆိုရင် Evolve ဖြစ်တာတော်တော်နှေးတယ်လို. ပြောလို.ရပါတယ် ။အကျိုးဆက်အနေနဲ. Java ရဲ. JVM ကိုသုံးပြီး ပိုကောင်းအောင်လုပ်ထားတဲ့ language တွေပေါ်လာတာပါပဲ။ ဥပမာ Clojure, Scala, Groovy. အဲ့တော့ Paradigm ဆိုတာ လွယ်လွယ်ပြောရရင် program ရေးရမှာ အခြေခံစဉ်းစားတဲ့ thinking လို.ပဲပြောရမှာပါ။ ဥပမာ ကျွန်တော်တို.က C နဲ. Object Oriented Program တွေရေးလို.ရပါတယ်။ Object thinking သာရှိမယ်ဆိုရင်ပေ့ါ။ ဒါပေမဲ့ C ဟာ OO paradigm ကို directly support မလုပ်တဲ့အတွက် ရေးရတာလွယ်ကူမှာမဟုတ်ပါဘူး။

ဒါကြောင့် OO paradigm ကို directly support လုပ်တဲ့ language ကိုသုံးပြီး OO thinking နဲ.ရေးမယ်ဆို ပိုအဆင်ပြေမှာပါ။ Paradigm တူတဲ့ language တခုကိုသင်ပြီးနောက်တခုကို သင်ရင်လွယ်ပေမဲ့ paradigm မတူတဲ့နောက်တခုကိုသင်တဲ့အခါမှာ concept, thinking ကွာတဲ့အတွက် တူတဲ့ languageလောက်တော့မလွယ်နိုင်ပါဘူး။ Multi paradigm ဖြစ်တဲ့ programming language တွေကို သိထားတဲ့အခါ Cross Pollination Effect အရ thinking ကွာသွားတဲ့အတွက် ဘယ် problem ကိုဘယ်လို solve လုပ်သင့်တယ်ဆိုတာ ကျယ်ကျယ်ပြန်.ပြန်.ပိုတွေးသွားနိုင်ပါလိမ့်မယ်။ Good programmer တယောက်အနေနဲ.ဆိုရင် programming language တခု ပဲ ဇောင်းချ ကျွမ်းကျင်နေတာဟာ အဆင်မပြေပါဘူး။

Paradigm မတူညီတဲ့ language တွေ ဒါမှမဟုတ် မတူညီတဲ့ programming language တွေ တတ်ထားခြင်းဟာ ငါသုံးနေတဲ့ language သာလျှင် အကောင်းဆုံးဆိုတဲ့ အယူအဆ အမှားကြီးကိုလဲ ပယ်ဖျက်နိုင်ပါလိမ့်မယ်။ ဥပမာ Observer Pattern ကို C# မှာ implement လုပ်တဲ့အခါ Java ထက်ပိုလွယ်ပါလိမ့်မယ် ဘာလို.လဲဆိုတော့ C# မှာ event ရယ် delegate ရယ်ရှိလို.ပါပဲ။ Mulicast subscribe facility လိုမျိုးကို delegate, event တွေက ပေးနိုင်တဲ့အတွက် Code ကပိုရိုးရှင်းသွားပါလိမ့်မယ်။ ထင်ရှားတဲ့ Major Paradigm တွေကတော့ အောက်ပါအတိုင်းပါ။ Imperative Object Oriented Functional Logic Imperative Paradigm Von Neumann architecture of computers တွေအပေါ်မူတည်ပြီး ဆောက်ထားတဲ့ programming language တွေကို imperative paradigm တွေလို.သတ်မှာပါတယ်။ Java,C,C++,C#,JavaScript, Python, Ruby ဒီအထဲမှာပါ ပါတယ်။ အဓိက core conceptကတော့ program တွေဟာ assignment statement ,side effect တွေသုံးပြီးရေးတယ်၊ တလိုင်းပြီးနောက်တလိုင်း အလုပ်လုပ်တယ် ဒီလို language တွေပါ။

အဲ့တော့ မေးစရာရှိပါတယ် assignment နဲ.မလုပ်လို. ဘာနဲ.လုပ်ရမှာတုံး မင်းဟာက ဆန်းသလားဆိုတော့ functional programming language (pure functional ပေ့ါ)တွေမှာဆိုရင် လုံးဝ destructive side effect ပါတဲ့ statement တွေရေးလို.မရပါဘူး၊ နောက်တခုက တလိုင်းပြီးနောက်တလိုင်း အလုပ်လုပ်တယ်ဆိုတာ ဆန်းလို.လား အားလုံးဒီလိုမဟုတ်ဘူးလားပေါ့။ Logic programming language တွေမှာ line by line execute လုပ်တာမဟုတ်ပဲနဲ. ပေးထားတဲ့ fact, predicate အပေါ်မူတည်ပြီး forward chaining ,backward chaining တွေသုံးပြီး inference လုပ်သွားတာမျိုးရှိလို.ပါ။ Inferencing ဆိုတာကတော့ ပေးထားတဲ့ fact တွေ logic တွေအပေါ်မူတည်ပြီး predicate တွေကို true, false evaluate ဖြစ်အောင် knowledge base ထဲကနေ ရှာပြီးလိုက်တွက်ရတာမျိုးပါ။

Object Oriented ဒီနေ.ခေတ် Popular အဖြစ်ဆုံး paradigm လို.တောင် ပြောလို.ရပါတယ် OO paradigm ကတော့။ သူကတော့ Problem မှာရှိတဲ့အားလုံးကို Object တွေအနေနဲ. ထည့်သွင်းရူ.မြင် စဉ်းစားတာပါပဲ။ သူရဲ.အားသာချက်ကတော့ reusable ကိုလွယ်လွယ်ပေးနိုင်တာ (by mean of inheritance and composition)၊ maintainable ကို support လုပ်ပေးနိုင်တာ (by mean of encapsulation) အစရှိတာတွေပါပဲ။ ပထမဆုံး စပေါ်တဲ့ OO programming language ကတော့ SIMULA ပါ။ သူ.နောက်မှာပေါ်တာကတော့ Smalltalk ပေါ့။ Virutal Machine concept ဆိုတာမျိုးက Smalltak မှာ ပိုပေါ်ပြူလာဖြစ်လာတာပါ။ အဲ့မတိုင်ခင် LISP မှာကတည်းက JIT (Just In Time) Compilation တွေတောင် ရပါတယ်။ Java programmer များ VM Concept က ငါတို.က စတာကွ ဆိုတာမျိုး တွေ.ဖူးလို.ပါ။ OO Paradigm ရတဲ့ language တွေကတော့ Smalltalk, C++, Java,C#, JavaScript,VB.NET, Python,PHP,Ruby, Scala အစရှိတဲ့ language တွေပဲဖြစ်ပါတယ်။ OO programming language တွေကို pure OO နဲ. Impure OO ဆိုပြီး ထပ်ခွဲလို.ရပါသေးတယ်။ Pure Object Oriented Language ဆိုတာ language ထဲမှာ အားလုံးက Object တွေပါပဲ ဥပမာ Smalltalk မှာဆိုရင် no primitive type ပါ်။ အားလုံးဟာ Object ပါ။ Loop လို conditional statement တွေလိုကောင်တွေက အစ Object ရဲ. Method တွေပါ 1+2 ဆိုတဲ့ meaning က object literal 1 ရဲ. + method ကို parameter အနေနဲ. Object 2 ကိုပေးလိုက်တာပါပဲ။ ကောင်းတဲ့အချက်ကတော့ Concept အရ အားလုံးဟာ တပြေးညီဖြစ်တဲ့အတွက်ရှင်းပါတယ်။

Java ,C# စတာတွေကတော့ impure OO language ပါ။ Pure OO concept ကို ပေးတဲ့ modern programming language တွေကတော့ Ruby နဲ. Scala ပါ။ JavaScriptကိုတချို.က Object Based OO language လို.လဲသုံးကြပါတယ်။ OOP ရတဲ့ language ဆိုရင် အနည်းဆုံး encapsulation, inheritance နဲ. Polymorphism ဆိုပြီးတော့ ပေးထားရပါတယ်။ Functional Functional programming paradigm ကတော့ ကျွန်တော်တို.နဲ. အတော်စိမ်းပါတယ်။ LISP, ML, Scala အစရှိတာတွေက သူ.ထဲမှာပါ ပါတယ်။ သူတို.က တော့ mathematical function concept ကိုယူပြီးတော့ program တွေကိုရေးတာပါ။ pure functional programming language တွေမှာ side effect ကိုပေးနိုင်တဲ့ destructive assignment လိုကောင်မျိုးမပေးရပါဘူး။ Theory အရတော့ variable တွေဟာ mutable ဖြစ်လာတာနဲ.အမျှ ဟိုနေရာကနေ သူ.တန်ဖိုးကိုပြောင်းလိုက် ဒီနေရာကနေသူ.တန်ဖိုးပြောင်းလိုက်ဆိုတာကြောင့် program တွေမှာ bug တွေ ပေါတယ်လို.ယူဆပါတယ်။ ဒီလို concept မျိုးကို OO paradigm မှာ encapsulation သုံးပြီး destructive assignment နည်းအောင်လုပ်ပါတယ်။ mathematical function တွေဖြစ်တဲ့အတွက် proof လုပ်ရတာလွယ်ပါတယ်။ ဒါကြောင့် functional program တွေဟာ bug ပိုနည်းနိုင်တယ် လွယ်လွယ်ကူကူ verification လုပ်နိုင်တယ်လို.ပြောရမှာပါ။ ဒါပေမဲ့ တဖက်ကကြည့်ရင်လဲ side effect မပေးတာက IO လို case မျိုးမှာ အဆင်မပြေပါ၊ ဒါကြောင့် pure functional language တွေဟာ mainstream ထဲမှာ မပါလာတာပါ။

နောက်ပိုင်း OOP နဲ.ပေါင်းပြီး hybrid OO+functional ဖြစ်တဲ့ language တွေထုတ်လာကြပါတယ်။ သိသာထင်ရှားတဲ့ language ကတော့ Scala ပေါ့ဗျာ။ Logic သူကတော့ AI တွေဘက်မှာ သုံးကြပါတယ်။ အဓိကတော့ axiom (မှန်တယ်လို.သေချာသိတဲ့ fact )တွေ။ predicate(ဘယ်အချက်နဲ. ဘယ်အချက် axiom တွေဖြစ်ရင်တော့ ဘာဖြစ်နိုင်တယ်ဆိုတဲ့ function တွေ)။ ဥပမာ အဖိုးဟာ ယောကျာင်္း ဒါဟာ axiom ပါ။ ယောကျာင်္းဆို အထီးဟုတ်သလားဆိုတာမျိုးကတော့ predicate ပါ။ အဲ့တော့ goal က အဖိုးဟာ ယောကျာင်္းဟုတ်သလားဆိုရင် သူရဲ. Knowledge base အရ ဟုတ်ပါတယ်လို.ဖြေပါလိမ့်မယ်။ ထင်ရှားတဲ့ logic programming language တွေကတော့ prolog,Godel ဖြစ်ပါတယ်။ ခုပြောထားတဲ့ paradigm ထဲမှာ မပါပေမဲ့အသုံးများလာတာ ၂ခု က AOP (Aspect Oriented Programming) နဲ. Node.js (Asynchronous Programming) ဖြစ်ပါတယ်။ AOP ကတော့ cross cutting concern တွေ aspect တွေနဲ. အလုပ်လုပ်ရတဲ့ programming paradigm ဖြစ်ပါတယ်။ Node.js ကတော့ language တခုမဟုတ်ပေမဲ့ သူပေးထားတဲ့ thinking အရတော့ asynchronous programming ကိုရေးလို.ရလို. ထူးခြားလို. ထပ်ဖြည့်ပေးထားတာပါ။

Original Post=>(https://www.facebook.com/thet.khine.587/posts/pfbid02QGFy1wc52FCvsxAKxCxDXfhdgexZSmWJLnAU7T22rMEjhHCN1zruJbeYnjU8AHY5l)

Leave a comment