ကြ်န္ေတာ္
ေနာက္ဆံုး ေရးခဲ့တဲ့ -
Post ႏွစ္ခု မွာ OOP၊ Frameworks တို႕နဲ႕ပက္သက္ျပီး အျငင္းပြားဖြယ္ရာတစ္ခ်ိဳ႕ ေျပာထားခဲ့မိတာ ရွိပါတယ္... အခု Framework နဲ႕ ပက္သက္ျပီး ဆက္ေျပာခ်င္ပါတယ္...
Abstractions
အခုခ်ိန္မွာ MS-DOS ကို ရံုးသံုး Operating System တစ္ခုအေနနဲ႕ အသံုးျပဳဖို႕ဆိုတာ စိတ္ကူးၾကည့္လို႕ေတာင္ မရေတာ့သလို လိုလဲ မလိုအပ္ေတာ့ပါဘူး... အဲ့ဒီ ၁၉၈၁ ခုႏွစ္ေလာက္က စခဲ့တဲ့ MS-DOS အေပၚမွာ အေျခခံျပီး ကေန႕ေခတ္ Windows ေတြရဲ႕ အစျဖစ္တဲ့ Windows 3.x, Windows 95, စသျဖင့္ ေပၚေပါက္လာပါတယ္... ခ်က္ခ်င္းၾကီး Windows 95 ဆိုျပီး ေပၚလာတာ မဟုတ္ပါဘူး... MS-DOS ဆိုတဲ့ Command Line Operating System အေပၚ အေျခခံျပီးမွသာ ျဖစ္လာရတာပါ...
Windows တစ္ခုျဖစ္လာဖို႕ နည္းပညာ Layer ေတြ အဆင့္ဆင့္ထပ္ျပီး တည္ေဆာက္ထားရတာပါ... အဆင့္ဆင့္ ဘယ္ေလာက္ ထပ္ထားမွန္း ကြ်န္ေတာ္တို႕ အတိအက် မသိႏုိင္ပါဘူး...
Linux OS ေတြမွာလဲ အတူတူပါပဲ... Linux Kernel ေပၚမွာ User Interface အတြက္
X Window System က Run ေနရျပီး၊ X Window System ေပၚမွာမွ
Gnome Desktop Environment လို DE ေတြ ထပ္ ထားရပါတယ္... အဲ့လို အဆင့္ဆင့္ ထပ္ထားျပီး
Debian Packaging System (
apt) နဲ႕ ေပါင္းစပ္လိုက္ေတာ့မွာ ကြ်န္ေတာ္တို႕ သံုးေနတဲ့
Ubuntu Linux ဆုိတာျဖစ္လာတာပါ... သူလဲ Layer ေတြ အဆင့္ဆင့္ ထပ္ထားတာပါပဲ...
Programming Language ေတြမွာလဲ အတူတူပါပဲ... Assembly Language ကို အေျခခံျပီး C/C++ ျဖစ္လာသလို C/C++ ကုိ အေျခခံျပီး Java / C# စသျဖင့္ ျဖစ္လာတာပါ... Java ဆိုတဲ့ Programming Language ရုတ္တရက္ ေပၚလာတာမ်ိဳး မဟုတ္ပါဘူး... အဲ့ဒီလို အဆင့္ဆင့္ အေျခခံခဲ့လို႕လဲ ျပည့္စံုတဲ့ Java Programming Language ဆိုျပီး ျဖစ္လာတာပါ...
ကြန္ျပဴတာ နည္းပညာ ဘယ္ကတည္းက အစျပဳခဲ့မွန္း အတိအက် မသိေပမယ့္ ၁၉၈၀ ေက်ာ္မွာ Personal Computer ဆိုျပီး စတင္လိုက္ကတည္း ကြန္ျပဴတာနည္းပညာ အရွိန္အဟုန္နဲ႕ တိုးတက္လာလိုက္တာ အခုဆိုရင္ ႏွစ္ေပါင္း (၃၀)ျပည့္ဖို႕ နီးလာပါျပီ... အဲ့ဒီ ႏွစ္ေတြအတြင္းမွာ နည္းပညာေတြ တစ္ခုအေပၚတစ္ခုဆင့္ျပီး ဘယ္ေလာက္ေတာင္ ထပ္ထပ္ ထားသလဲဆိုတာ မွန္းၾကည့္လို႕ မရႏုိင္ေတာ့ပါဘူး...
လုိရင္းေျပာရရင္ေတာ့ ကေန႕
ကြ်န္ေတာ္တို႕ သံုးေနတဲ့ နည္းပညာ အားလံုးဟာ Layer အဆင့္ဆင့္ ထပ္ျပီး တည္ေဆာက္လာခဲ့တာျဖစ္သလို အဲ့ဒီလို အဆင့္ဆင့္ တည္ေဆာက္ခဲ့လို႕လဲ ျပည့္စံု ေကာင္းမြန္ေနတာ ျဖစ္ပါတယ္...
အဲ့ဒီ Layer အဆင့္ဆင့္ကို နားမလည္ပဲ လက္ရွိ ေနာက္ဆံုးအဆင့္ကိုပဲ သံုးတက္တဲ့သူကို User လို႕ေခၚျပီး Layer အဆင့္ဆင့္ကို နားလည္တဲ့သူကို Computer Technician (Scientist, Professional) လို႕ ေခၚတာလို႕ ျမင္မိပါတယ္...
Frameworks
Software Frameworks ဆိုတာကို အမ်ိဳးမ်ိဳး အဓိပၸါယ္ဖြင့္ဆိုလို႕ ရေပမယ့္၊ အရိုးရွင္းဆံုး ေျပာရရင္...
Frameworks ဆိုတာဟာ၊ Productive ျဖစ္ဖို႕အတြက္၊ အစစအရာရာ လိုက္ေရးေနစရာမလိုေအာင္၊ အသင့္ေရးထားေပးတဲ့၊ အသင့္သံုး Functions ေတြ စုစည္းထားတဲ့၊ Library တစ္ခုပဲျဖစ္ပါတယ္...
Framework ဆိုတာဟာ Programming Language အေပၚမွာ ထပ္အုပ္ထားတဲ့ Layer ေနာက္တစ္ထပ္ပဲ ျဖစ္ပါတယ္...
အဲ့ဒါကို နားမလည္ပဲ Program ေရးေနသူေတြကို
IDE User လို႕ ေခၚခ်င္ျပီး Framework ဆိုတာဟာ Programming Language အေပၚက Layer တစ္ထပ္မွ်သာျဖစ္တယ္လို႕ နားလည္ထားသူကို
Programmer လို႕ ေခၚခ်င္ပါတယ္...
Why Frameworks Suck?
Layer တစ္ထပ္ ထပ္လိုက္တိုင္း ဟာကြက္ေတြ ယိုေပါက္ေတြတိုးလာပါတယ္... အဲ့ဒီအေၾကာင္း အေသးစိတ္ ဒီေနရာမွာ မေျပာႏုိင္ပါဘူး...
Joel Spolsky ရဲ႕
Leaky Abstractions ဆိုတဲ့ Article ကို ဖတ္ၾကည့္ေစခ်င္ပါတယ္...
ဥပမာ တစ္ခုအေနနဲ႕ ASP.NET Framework မွာ ရွိေနတဲ့ Leak တစ္ခုကို ျပခ်င္ပါတယ္...
HTTP နဲ႕ Web Technology အရ Web ဆိုတာဟာ Event Driven မဟုတ္ပါဘူး... ASP.NET က Web Development ကို Windows Application Development ကဲ့သုိ႕ Event Driven သဖြယ္ Develop လုပ္လို႕ရေအာင္ လုပ္ေဆာင္ထားေပးပါတယ္...
ဒီလို Event Driven ျဖစ္လာဖို႕ ေနာက္ကြယ္ကေန Dirty Work ေတြ အမ်ားၾကီးလုပ္ရပါတယ္... ဥပမာ Post Back အတြက္ View States ေတြကို HTML Hidden Box ထဲမွာ Encrypt လုပ္မွတ္ထားရပါတယ္...
အဲ့ဒီ Behind the Scene လုပ္သြားတဲ့ Dirty Work ေတြကို Developer ေတြအေနနဲ႕ သိစရာမလိုပါဘူး... ASP Button Control တစ္ခုထည့္.. Double Click ေလးလုပ္ျပီး Button1_Click Event ထဲမွာ Code ေလးေတြ ေရးယံုပါပဲ...
သိစရာမလိုေတာ့ Developer ေတြ မသိၾကေတာ့ပါဘူး... (MITP မွာေတာင္ ေနာက္ကြယ္မွာ ဘာလုပ္သြားလဲ သိစရာမလိုဘူး ေျပာတဲ့သူေတြ ရွိပါတယ္ :) အဲ့ဒီလို မသိၾကေတာ့ ျပႆနာေတြ တက္ေတာ့တာပါပဲ...
ASP page တစ္ခုထဲကို asp Text Box control ႏွစ္ခု နဲ႕ Button control တစ္ခု ထည့္ပါ... Button ကို ႏွိပ္လုိက္ရင္ ပထမ Text Box ထဲကစာကို ဒုတိယ Text Box ထဲကို ကူးထည့္ေအာင္ ေရးပါ... ဘယ္ ASP.NET Developer မဆို ေရးတက္ပါတယ္... ျပီေတာ့မွ Page_Load မွာ ပထမ Text Box ကို Clear လုပ္ပါ...
ပထမ Text Box ထဲကို စာရိုက္ထည့္ျပီး Button ကို ႏွိပ္ၾကည့္ပါ...
Button ကို ႏွိပ္လုိက္ရင္ ပထမ Text Box ထဲက စာကို ဒုတိယ Text Box ထဲကို ကူးထည့္ရမွာ ျဖစ္ေပမယ့္ ဘာမွ ေပၚလာမွာမဟုတ္ပါဘူး.. ဘာျဖစ္လို႕လဲဆုိေတာ့ Event Driven စစ္စစ္မဟုတ္ပဲ Event Driven လို႕ ထင္ရေအာင္ လုပ္ထားတာမို႕လို႕ပါ... HTTP protocol က နဂိုကတည္းက တစ္ၾကိမ္ Request လုပ္မွ တစ္ၾကိမ္ Respond လုပ္တဲ့ Stateless System ျဖစ္လို႕ Button ကို ႏွိပ္လုိက္တာနဲ႕ Page ကို reload ျပန္လုပ္ေနပါတယ္... ဒါေၾကာင့္ Button ႏွိပ္တာနဲ႕ မဆီမဆုိင္ Page Load က အလုပ္ကိုပါ သြားလုပ္ေနပါတယ္... ဒီလို ကိစၥေတြအမ်ားၾကီးပါ...
Web Technology ကို နားလည္ထားတဲ့ Programmer ေတြနဲ႕၊ .NET Framework က ေနာက္ကြယ္မွာ ဘာေတြလုပ္သြားလဲ ဆိုတာကို နားလည္ထားတဲ့သူေတြအတြက္ ျပႆနာ မဟုတ္ေပမယ့္ IDE User ေတြအတြက္ေတာ့ တစ္ကယ့္ကို ျပႆနာ အၾကီးၾကီး ျဖစ္ႏုိင္ပါတယ္...
ကြန္ျပဴတာပညာေရး ႏွင့္ Frameworks/IDE
ကြ်န္ေတာ္တို႕ဆီမွာ Computer Science ကို စနစ္တစ္က် သင္ခဲ့ရတဲ့သူ သိပ္မရွိသလို သင္တန္းေတြကလည္း IDE User ေတြကိုသာ ေမြးထုပ္ေပးေနတဲ့အတြက္ သံုးမရတဲ့ IDE User ေတြ ပံုေနပါတယ္... သူတို႕ကို ASP.NET နဲ႕ Web site တစ္ခုေရးခိုင္းရင္ ေရးႏုိင္ပါတယ္... ဘာျဖစ္လို႕လဲဆိုေတာ့ Programming စစ္စစ္ကုိ မတက္ေပမယ့္ Visual Studio ဘယ္လိုသံုးရမလဲဆုိတာေတာ့ သူတို႕ ေကာင္းေကာင္း သိပါတယ္... သူမ်ားေတြဆီမွာေတာ့ မသိပါဘူး... ကြ်န္ေတာ္တို႕ ဆီမွာေတာ့ Frameworks ေတြနဲ႕ IDE ေတြက၊ သင္တန္းေတြနဲ႕ပူးေပါင္းျပီး Programmer ျဖစ္လာရမယ့္သူေတြကို IDE User ျဖစ္ကုန္ေအာင္ ဖ်က္ဆီးေနၾကပါတယ္...
ကြ်န္ေတာ္က Frameworks ေတြ မေကာင္းဘူး မေကာင္းဘူး ေျပာေနေတာ့ တစ္ျခား အေၾကာင္းေၾကာင့္ ထင္ၾကပါတယ္... အမွန္ေတာ့ ဒီကိစၥက အဓိကပါ...
ဒါေၾကာင့္ ျမန္မာျပည္က Programming သင္တန္းတက္ေနတဲ့ ေက်ာင္းသားေတြနဲ႕ သင္တန္းဆင္းစ IDE User ေတြကို၊
Programmer စစ္စစ္ ျဖစ္ခ်င္ရင္ သံုးေနတဲ့ IDE ေတြ Framework ေတြကို အခုခ်က္ျခင္းပစ္ခ်ျပီး Programming Language စစ္စစ္ကို ေလ့လာၾကဖို႕ ဒီေနရာကေန တိုက္တြန္းလိုပါတယ္...
တစ္ျခား Framework ေတြကို မၾကိဳက္ရတဲ့ အခ်က္တစ္ခ်ိဳ႕ကေတာ့...
- တစ္ခါတစ္ရံ ရိုးရွင္းတဲ့ ျပႆနာအတြက္ Frameworks ေတြရဲ႕ Convention ေတြ Structure ေတြကို လိုက္နာရတဲ့အတြက္ မလိုအပ္ပဲ ရွဳပ္ေထြးမွဳေတြ ပိုေစတယ္
- တစ္ခါတစ္ရံ ကိုယ္တုိင္ေရးလိုက္တာက Framework က Provide လုပ္တဲ့ Library ကို နားလည္ေအာင္ ေလ့လာရတာထက္ ပိုျမန္တယ္
- တစ္ခါတစ္ရံ Framework က Boundary လို ျဖစ္ေနျပီး သူေပးသေလာက္ပဲ လုပ္ရတဲ့အတြက္ လြပ္လပ္မွဳမရွိသလို ျဖစ္တက္တယ္... ASP.NET Web Site အေတာ္မ်ားမ်ားကို ၾကည့္လိုက္ရင္ တစ္ခုနဲ႕တစ္ခု ကြဲျပားမွဳသိပ္မရွိပဲ Framework က ေပးထားတာေတြကိုသာ သံုးထားတာ မ်ားတာကို ေတြ႕ရပါတယ္
- တစ္ခါတစ္ရံ မလိုအပ္ပဲ Library ေတြ တစ္ပံုၾကီး Loading လုပ္ရတဲ့အတြက္ ေႏွးပါတယ္... ASP.NET ဆိုရင္ compile အရင္လုပ္လို႕ PHP, Python တို႕လို Interpreted Language ေတြထက္ ျမန္တယ္ျမန္တယ္ေျပာေနျပီး Run Time မွာ Library ေတြ Component ေတြ တစ္ပံုၾကီး Load လုပ္ရတာေတြ၊ တစ္ခ်ိဳ႕ Behind the Scene Process တစ္ခ်ိဳ႕ေတြေၾကာင့္ လက္ေတြ႕မွာ အေတာ္ေလး ေႏွးတာကို ေတြ႕ရပါတယ္...
အမွန္ေတာ့ အဲ့ဒါေတြက Minor Reason ေတြပါ... Major Reason ကေတာ့ တစ္ကယ္ အေရးၾကီးတဲ့ Programming Language နဲ႕ Technology ေတြကို သိစရာ မလိုေတာ့သေယာင္ေယာင္ ျဖစ္ေအာင္ လုပ္ထားလို႕ပါ... Navigation နဲ႕ Paging ပါတဲ့
Image Rotate Circle Effect ကို Flash နဲ႕မွ လုပ္လို႕ရတယ္ထင္တဲ့၊ အေတြ႕အၾကံဳရွိပါတယ္ဆိုတဲ့ ASP.NET Developer ေတြ တစ္ပံုၾကီးပါ...
ကြ်န္ေတာ့္အျမင္မွာ နည္းပညာနဲ႕ အသုံးျပဳမယ့္ Programming Language ကို ေကာင္းေကာင္းနားလည္ျပီးသား Programmer ေတြအတြက္၊ Frameworks ေတြဟာ အေကာင္းဆံုး မိတ္ေဆြ ျဖစ္ပါလိမ့္မယ္... Productive ျဖစ္ေအာင္ ကူညီျပီး .NET Framework ကေျပာေနတဲ့ Rapid Development ကို ရမွာပါ... ဒါေပမယ့္ IDE User ေတြအတြက္ေတာ့ Frameworks ေတြဟာ သူတို႕ကို IDE User ျဖစ္ေအာင္ လုပ္ေနတဲ့ အၾကီးမားဆံုး ရန္သူေတြပါပဲ...
--
[
Ei Maung ]
You need to be a member of MyanmarITPro - A Social Network for Myanmar IT Professionals to add comments!
Join MyanmarITPro - A Social Network for Myanmar IT Professionals