How to master programming and programming languages
Programming ဆိုတာ အလွယ်ပြောရရင် program code တွေရေးတာ algorithm တွေသုံးပြီး problem တွေ solve လုပ်တာလို.ပဲပြောရမယ်။ ဒီနေရာမှာ ကြိုက်ရာ language တခုခုကိုသုံးပြီး solve လုပ်လို.ရပါတယ်။
Programmer တယောက်အနေနဲ. language ဆိုတာ တကယ်တော့ အသုံးချ ကြားခံ medium တခုပါပဲ။ Problem နဲ. အဆင်ပြေရာ language, tool ကို အသုံးချတတ်ဖို.ပဲလိုပါတယ်။
Language တခုကိုလေ့လာမယ်ဆိုရင် Syntax, Semantic ,Pragmatic ဆိုတာကိုလေ့လာဖို.လိုပါတယ်။
Syntax ဆိုတာ အလွယ်ပြောရရင် Grammar ပေါ့ ရေးထုံးလို.ဆိုရမှာပေါ့။ ဥပမာ ကိုသုံးနေတဲ့ langauge မှာ variable ကိုဘယ်လိုကြေငြာသလဲပေါ့။ Assignment တွေ expression တွေ control structure တွေကို ဘယ်လိုပုံစံနဲ.ရေးရလဲပေါ။
Semantic ဆိုတာကတော့ ခုနက ပြောတဲ့ Syntax တခုချင်းဆီရဲ. အဓိပ္ပာယ်ပေါ့။ Syntax အရ ဆင်ချင်သာဆင်မယ် Semantic အရမတူဘူး။
ဥပမာပြရရင်
result = 3/2;
အပေါ်က code line မှာ result ရဲ.တန်ဖိုးသည် programming langauge အပေါ်မူတည်ပြီး ပြောင်းနိုင်တယ်။ ဥပမာ Java,C,C++,C# ဆိုရင် 1 ရမယ် ဘာလို.လဲဆိုတော့ integer division ကိုလုပ်လို..။
JavaScript, PHP ဆိုရင် 1.5 ရမယ် ဘာလို.လဲဆိုတော့ အဲ့ဒီ language တွေမှာ integer type မသုံးဘူး။ အားလုံးက double type သုံးလို.။ အဲ့တော့ division သည် double division ကိုလုပ်တဲ့အတွက်ကြောင့်။ PHP မှာဆိုရင်တော့ result နေရာမှာ $result ဖြစ်မှာပေါ့။ Java, C,C++,C# သည် statically type programming langauge ဖြစ်ပြီး JavaScript, PHP သည် dynamically typed programming language ဖြစ်လို.ပါပဲ။ Dynamically typed programming language တွေမှာ integer,float ,double ဆိုတာထက် nubmer type ဆိုပြီးတော့ပဲ ထားလေ့ရှိပါတယ်။ အဲ့ဒီ number type ကတော့ double နဲ.ပဲ သိမ်းလေ့ရှိလို.ပဲ။ Programming သင်တဲ့သူအများစုက ဒီ semantic အဆင့်ကိုမရောက်ကြဘူး syntax လောက်နဲ.ကို ရပ်နေကြပြီ။ ကို. language မှာသုံးနေတဲ့ statement တခုသည် တခြား langauge က statement နဲ.ဘာကွာလဲ မပြောနိုင်သေးရင် Semantic ကိုမသိသေးဘူးလို.ဆိုရမှာပဲ။
နောက်တခုက Pragmatic.
သူကတော့ တော်တော်များများ ရှိလို.ရှိမှန်းတောင်မသိကြဘူး။ ဘာကိုဆိုလိုချင်တာလဲဆိုတော့ Langauge element တွေ ဥပမာ OO language မှာဆို abstract class , interface ဘယ်နေရာမှာ ဘာကိုသုံးသင့်တယ်ဆိုတဲ့ သူရဲ. သက်ဆိုင်ရာ correct usage တွေ။ Deisgn Pattern တွေ principle တွေ။ implementation pattern တွေ shortcut တွေ thinking တွေကိုဆိုချင်တာပါ။ ဥပမာ Java သုံးပေမဲ့ OO design ကိုနားမလည်ပဲသုံးရင် ဒါဟာ Pragmatic ကိုမသိပဲသုံးတာ လွဲနေတာလို.ဆိုရမှာပါ။ တူညီတဲ့ problem တခုကို language တခုနဲ.တခု solve လုပ်ပုံခြင်းမတူပါဘူး ။ Paradigm ကွာရင်ပိုတောင်ဆိုးပါသေးတယ် ဒါကို Pragmatic လို.ဆိုရမှာပါ။ OO language ချင်းတူရင်တောင် C# မှာ problem solve လုပ်ပုံနဲ. Java မှာ problem solve လုပ်ပုံမတူပါဘူး။
နောက် Framework တွေ API library တွေကို pragmatic ထဲထဲ့ရမှာပါ။
အပေါ်က သုံးခုကတော့ Programming Language အတွက်ပါ။
Programming အတွက်ကျတော့ Problem Solving ဖြစ်တဲ့ Computer Science,Data structure, Algorithm တွေ အစရှိတာတွေ သိရမှာ။ ဒါမှသာ problem တွေကို effectively solve လုပ်နိုင်မှာပါ။
နောက်တခုက Advanced Level တခုခုကိုရောက်ချင်ရင်တော့ ကိုသုံးနေတဲ့ programming language ဟာ ဟိုးအောက်ဆုံးအထိ machine level အထိ ဘယ်လို အလုပ်လုပ်သွားလဲဆိုတာ သိအောင် လုပ်ထားရင် အဆင်ပြေပါပြီ။
ဒါဆို Master လုပ်နိုင်ပြီလို.ဆိုရမှာပါ။ အဲ့ဒါတွေကိုသိဖို. လုပ်နိုင်ဖို.ဆိုရင်တော့ Programming Language Theory, Compiler Design အဲ့ဒီကောင်တွေ နားလည်ဖို.ပါ လိုလာပါပြီ။
Programming Language တခုကို အကောင်းဆုံး Master လုပ်တဲ့နည်းကတော့ အဲ့ဒီ Programming Language ကို ကိုယ်တိုင် ပြန်တည်ဆောက်ကြည့်တဲ့နည်းပါပဲ။
Paradigm အမျိုးမျိုးနဲ. ကျွမ်း၀င်အောင် လေ့ကျင့်ထားသင့်ပါတယ် ဥပမာ ခု OO ကခေတ်စားနေပေမဲ့ Functional programming ကလဲ မပါမရှိဖြစ်လာတာ တွေ.ရပါတယ်။ အဲ့တော့ Functional Programming အရဆိုရင် problem ကိုဘယ်လို solve လုပ်တယ်ဆိုတာ လေ့လာထားသင့်ပါတယ်။ Paradgim တူတဲ့ language တွေကိုလေ့လာရတာလွယ်ပါတယ်။ ဥပမာ Java, C++, C# ဆိုရင် OO, Imperative Paradigm ထဲမှာရှိတဲ့အတွက် တခုကနေ တခုကူးရတာလွယ်မှာပါ။ ဒါပေမဲ့ Scala, F#, Clojure အဲ့ကောင်တွေသွားလေ့လာရင် ထင်သလောက် လွယ်မှာမဟုတ်ပါဘူး။ Functional Paradigm ဖြစ်သွားလို.ပါပဲ။ Paradigm ကွာသွားရင် thinking ကအစကွာတယ် မတူတော့ဘူးလို.ပြောရမှာပါ။
နောက်ဆုံး ပြောရရင် Programming ဆိုတာကွာ ဘာခက်တာမှတ်လို. ဒီ Language မှာလဲ for, do, while နောက် language မှာလဲဒါပဲဆိုတာ အဲ့လောက်ပဲသိတဲ့လူတွေပြောတာပါ။ Syntax လောက်ကို language လို.ထင်နေကြတာပါ။ For Loop သုံးတတ်ရင် program ရေးတတ်ပြီဆိုရင် Functional programming ကိုသုံးကြည့်ပါလို. ပြောရမှာပါပဲ။ FP Paradgim မှာ recursive function တွေသုံးပြီး control flow ကိုထိန်းကြလို.ပါပဲ။
Original link