တကယ်တတ်ချင် တကယ်လုပ်

MRT ပေါ်မှာ ထိုင်ခုံနေရာ ရလို့ ထိုင်ရင်း programming စသင်ခဲ့တဲ့ အချိန်ကို စဉ်းစားမိတယ်။ တစ်ခါတည်း ကို စိုးမင်းရဲ့ ၁၀ နှစ် ဆိုတဲ့ ဆောင်းပါး ကိုလည်း သတိရမိတယ်။ လွန်ခဲ့တဲ့ ၃ နှစ်လောက်က ဘာ langauge အသုံးပြုလဲလို့ မေးလိုက်ရင် ဖြေစရာတွေက အများကြီး။ အစုံပဲ။ အခုအချိန်မှာ မေးရင်တော့ ၂ မျိုးပဲ ရှိတယ်။ PHP နဲ့ objective-c ။ အခုအချိန်မှာ အဲလို ရဲရဲ ဝင့်ဝင့် ပြောရဲသွားပြီ။ Programming ကို စ လုပ်ခဲ့တာကတော့ VB ဆိုတာထက် Pseudo လို့ ဆိုရမယ်။ ဗိုလ်တထောင် ကောလိပ်မှာ diploma တက်တုန်းက VB မသုံးခင် Pseudo နဲ့တင် ၁ လ လောက် ကြာသွားတယ်။ Pseudo code ကနေ စခဲ့တယ်လို့ ဆိုရမယ်။

တတ်လိုက်တဲ့ Language တွေ

ဘာ language ရလဲလို့ မေးလိုက်ရင် စုံနေနတာပဲ။ C#, Java , VB , Flash တစ်ယောက်ကို အနည်းဆုံး ၃ ခု ၄ ခုလောက်တော့ တတ်ကြတယ်။ အဲလို တတ်တာကိုပဲ ဂုဏ်ယူနေကြသလိုပဲ။ ကျွန်တော့် တုန်းကလည်း သင်တန်းတွေတက်ဖြစ်သလို language တွေကလည်း တော်တော်စုံတယ်။ ကျောင်းမပြီးခင်မှာပဲ Java, C#, VB ကို သင်တန်းတွေ တက်လို့ တတ်နေပြီ။ သင်တန်း မတက်ပဲနဲ့ လေ့လာဖြစ်တာက javascript , html, css ။ အဲဒါလေးတွေက basic လေးတွေပါ။ သင်တန်းလည်း တက်စရာမလိုပဲ လွယ်လွယ်ကူကူ တတ်နိုင်တဲ့ အရာလေးတွေပါ။ သေသေချာချာ ကိုယ့်ဘာသာ ကိုယ် လေ့လာဖြစ်တာက Action script ပဲ။ Action script ကို Flash မှာပါတဲ့ Help file လေးကနေ လေ့လာဖြစ်တာ။ အဲတုန်းက Flash MX ပဲ ရှိသေးတယ်နဲ့တူတယ်။ Version 7 နဲ့ တူတယ်။ Internet လည်း မရှိပေမယ့် offline help file လေးကနေ လေ့လာဖြစ်တယ်။ ဒါကြောင့် အဲတုန်းက ဘာ language တက်လဲဆိုရင် ပြောစရာတွေက အများကြီး ဖြစ်နေတယ်။ ဒါတောင် ကျောင်းမှာ C++ သင်ပေမယ့် အဲဒီတုန်းက စိတ်မဝင်စားလို့ တတ်လို့ ထည့်မပြောတော့ဘူး။

တစ်ခုဆို လုံလောက်ပြီ

glite ကို စလုပ်ရင်းနဲ့ PHP ကို စရင်းနှီးလာတယ်။ 2007 က စပြီး လေ့လာဖြစ်တယ်လို့ ဆိုရမယ်။ လေ့လာရင်းနဲ့ သဘောကျလာပြီး လက်ရှိ ပြိုင်တူ လေ့လာနေတဲ့ .NET , Java , Flash အကုန်လုံးကို စွန့်ပြီး PHP မှ PHP ကို စလေ့လာတာပဲ။ PHP အတွက် BC မှာ မရှိဘူး။ ဒါကြောင့် ကိုယ့်ဘာသာကိုယ် စာအုပ်ဝယ်ဖို့ ရှာတော့ စာအုပ်ဆိုင်မှာ Visual Qucik Pro က ထုတ်တဲ့ PHP , MySQL စာအုပ်ကို တွေ့တယ်။ ပထမဆုံးတွေ့မိတာက City Mart မှာ။ စျေးကြည့်လိုက်တော့ ၅၀၀၀ လားမသိဘူး။ ကိုယ့်ရတဲ့ မုန့်ဖိုးက ၁ နေ့ ၁ ထောင်တောင် ရှိတာမဟုတ်ဘူး။ ကျောင်းကိုလည်း ထမင်းဘူးပဲ ထည့်ပေးတော့ မုန့်ဖိုး မရတဲ့ ရက်တွေက များတယ်။ အဲဒီ စာအုပ်လေး ဝယ်ချင်လို့ တော်တော်စုလိုက်ရတယ်။ စာအုပ်ရပြီး အဲဒီ စာအုပ်အတိုင်းပဲ အဓိက ထားလေ့လာတာပဲ။ နောက်တော့ သူငယ်ချင်းတစ်ယောက်ကို ငှားလိုက်တာ ပြန်ကို မရတော့တဲ့ စာအုပ်တွေထဲမှာ အဲဒီ စာအုပ်လည်း ပါတယ်။

PHP ကို စလေ့လာကတည်းက တခြားဟာတွေ တစ်ခုမှ မလေ့လာတော့ဘူး။ Windows Application မရေးတော့ဘူး။ Web App ပဲ ရေးတော့မယ် ဆိုပြီး ဆုံးဖြတ်လိုက်တယ်။ အဲလိုမျိုး ဆုံးဖြတ်ပြီး တစ်ခုတည်း လေ့လာခြင်းက သင်တန်းတွေ တက် အများကြီးလေ့လာတာထက် ပိုသာတယ်။ ကိုယ့်ဘာသာကိုယ် စာဖတ်။ စမ်းလိုက်။ error တက်ရင် ပြန်ရှင်းလိုက်နဲ့။ မေးဖို့လူကလည်း များများစားစားမရှိ။ စာအုပ်ကိုပဲ အားကိုးပြီး လေ့လာခဲ့ရတယ်။

တကယ်လုပ်နိုင်လား

PHP လေ့လာတာဟာ အခု အချိန်မှာဆို ၄ နှစ်လောက်ရှိသွားပြီ။ Programming ကိုလေ့လာတာကတော့ ၈ နှစ်လောက် ရှိသွားပြီ။ ၈ နှစ်ရဲ့ ပထမဆုံး ၂ နှစ်လောက်ကတော့ VB 6 နဲ့ပဲ ရေးခဲ့တယ်။ ပထမဆုံး စရေးတာကလည်း မဟာဘုတ် Application ကို VB6 နဲ့ ရေးပြီး သူငယ်ချင်းတွေကို soruce code ပါ ပေးလိုက်တာပဲ။ ကျန်တဲ့ ၂ နှစ်ကတော့ Flash , VB.NET , C#.NET , Java ကို လေ့လာဖြစ်တယ်။ Java ကို လုံးဝ စွန့်လွှတ်လိုက်သလို တော်ပြီ မလေ့လာတော့ဘူး။ ငါနဲ့ မဖြစ်ဘူးဆိုပြီး တစ်ခါတည်းကို ဆုံးဖြတ်ချက်ချလိုက်တဲ့ language လို့လည်း ဆိုလို့ရတယ်။

အခုအချိန်မှာ PHP နဲ့ web app တစ်ခုရေး ဆိုရင် ရေးနိုင်တယ်လို့ ပြောရဲတယ်။ တကယ်လို အပ်တာက Language များများ တတ်ဖို့ မဟုတ်ဘူး။ တစ်ခုတည်းကို သေသေချာချာ သိဖို့နဲ့ တကယ်ရေးတတ်ဖို့ပဲ။ PHP လို့ ဆိုလိုက်တာနဲ့ HTML , CSS , javascript , jquery စတာတွေက အလိုလို တွဲပါလာသင့်တာ။ Web လိုင်းမှာ အဲဒါတွေ ပစ်ပယ်ပြီးတော့ သွားလို့ မရဘူး။ PHP တတ်တယ်။ HTML နဲ့ CSS မတတ်ဘူး။ ဒါမှမဟုတ် javascript မတတ်ဘူးလို့ ပြောတဲ့သူတွေကို တွေ့ဖူးတယ်။ သေချာတယ်။ သူ အိယောင်ဝါး လုပ်နေတာပဲ ဖြစ်မယ်လို့ ဆုံးဖြတ်ချက်ချလို့ရတယ်။ HTML , CSS , javascript စတာတွေက PHP နဲ့ ယှဉ်ရင် တကယ့် minor learning လေးတွေ။ အဲဒီ အခြေခံအဆင့် မရှိပဲနဲ့ PHP ကို လေ့လာတာဟာ မဖြစ်သင့်ဘူး။ လက်တွေ့ ရေးဆိုရင် မရေးနိုင်တာတွေ အများကြီးပဲ။ ASP.NET သမားတွေ CSS တောင် မပြင်တတ်တာ တွေ့ဖူးတယ်။ ဘာလုပ်နေလဲဆိုရင် ASP.NET လို့ ဖြေပြီး CSS ကော ရလားလို့ မေးရင် ဘာကြီးလဲဟင်လို့ ပြန်မေးတာတွေလည်း တွေ့ဖူးပါတယ်။

ကျွန်တော် ပြောတဲ့ တစ်ခု ဆို လုံလောက်ပြီ ဆိုတဲ့ အထဲမှာ တစ်ခုက Langauge တစ်ခုကို ပြောတာမဟုတ်ဘူး။ Language တစ်ခု အပြင် သူနဲ့ ဆက်စပ်တာတွေပါ ပါတယ်။ Web app ရေးရင် HTML , CSS , javascript တတ်ထားရမယ်။ javascript အပြင် jquery ပါ တတ်ထားရင် ပိုကောင်းတယ်။ အဲဒါတွေ မတတ်ပဲ web application တွေ ရေးနေတယ်ဆိုရင်တော့ ဘယ်လိုမှ quality ကောင်းလာမှာမဟုတ်ဘူး။

in 24 Hour

PHP in 24 hour တို့ လို စာအုပ်မျိုးကို ကြည့်မိရင် ရယ်ချင်တဲ့ အထဲမှာပါတယ်။ HTML in 24 hour က လက်ခံလို့ရတယ်။ HTML + CSS in 24 hour ဆိုတဲ့ အထိ လက်ခံလို့ရတယ်။ Programming langauge ကို 24 hour ဆိုတာကတော့ မဖြစ်နိုင်ဘူး။ SAMS က ထုတ်တဲ့ စာအုပ်တော်တော်များများ ဖတ်ပြီး ကြီးပြင်းခဲ့ရတာပဲ။ စာတွေက တကယ်ကောင်းတယ်။ ခေါင်းစဉ်ကသာ လူရယ်ချင်စရာ ဖြစ်နေတာ။ ငယ်ငယ်တုန်းက ဟာ.. ငါ တော်တော် နှေးပါလား။ 24 hour စာအုပ်ကို ဖတ်နေတာ ၂၄ နာရီ မကတော့ဘူးလို့ ထင်မိသေးတယ်။ ခေါင်းစဉ်ကသာ 24 hour ။ လက်တွေ့စာတွေက အနည်းဆုံး ၃ နှစ်လောက် လေ့လာမှ သိတယ် ဆိုရုံလောက်ပဲ။ ကိုယ်ပိုင် PHP Framework ကို စမ်းပြီး ဆောက်ဖြစ်ခဲ့တာ မကြာသေးဘူး။ MZ User ကိုလည်း အဲဒီ framework နဲ့ပဲ ရေးထားခဲ့တာ။ ၄ နှစ်လောက် လေ့လာပြီးတဲ့အခါမှ နည်းနည်း တီးမိ ခေါက်မိလာတာ။ ရေးနိုင်တယ်လို့ ပြောရဲ ဆိုရဲ ရှိလာတာ။ ဒါကြောင့် သင်တန်းတွေ တက်ပြီး ၃ လ လောက်နဲ့ ငါ တတ်ပြီလို့ ပြောလို့မရဘူး။ သင်တန်းတွေ ကြော်ငြာက SAMS စာအုပ် ခေါင်းစဉ်တွေလိုပဲ။ စာသင်တာ ကောင်းနိုင်ပေမယ့် သင်တန်းပြီးတာနဲ့ တတ်ပြီဆိုတာကတော့ မဟုတ်ဘူးဆိုတာ သေချာတယ်။

Limit

Project တစ်ခုလောက် ရေးတတ်သွားမယ်။ နည်းနည်းပါးပါး သိလာမယ်။ ငါလိုချင်တာတွေက ဒါတွေ ဒါတွေ ပါတယ်။ ဒါတွေ ဒါတွေ လိုချင်တယ်။ အချိန်ကတော့ ဒီလောက်ပဲ ရမယ်။ ဖြစ်နိုင်လား လို့ မေးတဲ့ မေးခွန်းမျိုးတွေ ပြန်ဖြေနိုင်ဖို့ မလွယ်သေးဘူး။ Experience နဲ့ ဆိုင်သလို ကိုယ့် အကြောင်း ကိုယ်သိဖို့လည်း လိုတယ်။ တော်တော်များများက ကိုယ့်အကြောင်း ကိုယ်မသိကြဘူး။ ကိုယ်ဘယ်လောက် ထိ လုပ်နိုုင်တယ်ဆိုတာကို မသိကြဘူး။ အချို့တွေက ကိုယ့်ရဲ့ limit ကို လျော့တွက်ထားကြတယ်။ လုပ်နိုင်တဲ့ စွမ်းအင်ရှိတယ်။ ဉာဏ်ရယ်ရှိတယ်။ ငါမလုပ်နိုင်ပါဘူးလေ ဆိုပြီး ဝိရီယ ကို လျော့ချထားတယ်။ အချို့တွေကလည်း ရှိတာထက် ပိုပြီး များများစားတွက် ကြတယ်။ အဲဒီတော့ deadline မမှီတာတွေ ဖြစ်လာကော။ စိတ်ဖိစီးမှုတွေ များလာပြီး အဆင်မပြေတာတွေ ဖြစ်လာတယ်။ ဒါကြောင့် ကိုယ့် limit ကို ကိုယ် ကောင်းကောင်းသိဖို့ တကယ်ကို လိုအပ်တယ်။ သင်တန်းပြီးသွားတဲ့ သူတစ်ယောက်အနေနဲ့လည်း ကိုယ့်ရဲ့ limit ဘယ်လောက်ထိ ရှိလဲဆိုတာကို ကိုယ့်ဘာသာကိုယ် သုံးသပ်နိုင်ဖို့လိုတယ်။ လူကြီးတွေ တွေးသလို သင်တန်းဆင်းတာနဲ့ အကုန်တတ်ပြီလို့ ထင်ရင်တော့ မှားသွားမှာ အမှန်ပဲ။

တကယ်တတ်လာဖို့ အချိန်ဆိုတာထက် Experience လိုတယ်။ ငါ ၃ နှစ်လောက်ရှိပြီ PHP လေ့လာနေတာ။ ဒါပေမယ့် မတတ်သေးပါဘူးကွာဆိုရင်တော့ project တွေ ကောင်းကောင်းမလုပ်ခဲ့ရဘူးလို့ပဲ။ လေ့လာတဲ့ အချိန်ဆိုတာထက် လုပ်ခဲ့ရတဲ့ Project Experience က ကိုယ့်ရဲ့ limit တွေကို တိုးမြှင့်ပေးတယ်။ Knowledge တွေ တိုးတက်လာတယ်။

လုပ်ချင်စိတ်

အချိန်ဆိုတာထက် Experience ရဖို့လိုတယ်။ အလုပ်မှ မဝင်ရသေးတာ။ ဘယ်လိုလုပ် Experience ရှိမှာလဲလို့ ဖြေတာတွေလည်း ကြားဘူးတယ်။ ကိုယ့်ဘာသာကိုယ် project လေး တစ်ခု ပြီးအောင် ဖန်တီးဘူးလား လို့ မေးလိုက်ရင် ဟင်အင်းပဲ။ ကိုယ့်ဘာသာ project အသေးလေး တစ်ခု timeline ချ။ deadline တွေ ချပြီး ရေးကြည့်ပါလား လို့ပဲ အကြံပေးချင်တယ်။ တော်တော်များများက ကိုယ့်ဘာသာကိုယ် ချထားတဲ့ deadline အတွင်းတောင် မလုပ်နိုင်ကြဘူး။ နောက်ပြီး ရေးနေရင်းမှာ အကြောင်းပြချက်တွေနဲ့ ဆက်မလုပ်တာတွေ ဖြစ်လာတယ်။ အိမ်က ဟိုဟာခိုင်းလို့။ လုပ်စရာလေးတွေ ရှိသေးလို့ မလုပ်ဖြစ်ဘူး။ အဲဒါနဲ့ ကိုယ့်ဘာသာကိုယ် သတ်မှတ်ထားတဲ့ deadline နဲ့ project ကိုတောင် ပြီးဆုံးအောင်မြင်အောင် မလုပ်နိုင်ကြတာ များတယ်။ တနည်းပြောရင် လုပ်ချင်စိတ် မရှိဘူး။ လေ့လာချင်စိတ် မရှိဘူး။ သူများယောင်လို့ လိုက်ယောင် သလို ဖြစ်နေတယ်။ သူများပြောလို့ လိုက်လုပ်သလို ဖြစ်နေတယ်။ အများစုကတော့ အလုပ်ထဲရောက်ရင် တကယ်လုပ်မှာပါဆိုတဲ့ ဆင်ခြင်က အမြဲ ကပ်ပါလာတယ်။ experience မရှိတော့ အလုပ်ရဖို့ ခက်တယ်။ အလုပ်မရတော့ experience မရှိဘူးဆိုပြီး မုန့်လုံး စက္ကူကပ် တဲ့ ပြဿနာ ဖြစ်ကုန်ကော။

အတွေ့အကြံုရဖို့

အလုပ်ရမှ အတွေ့အကြံုရမယ်လို့ ပြောတာဟာ ချမ်းသာအောင် တန်ခိုးရှင်ကို ထိုင်စောင့်နေသလိုပဲ။ အတွေ့အကြံုဆိုတဲ့စကားကို တွေ့ တဲ့ အခါ ကြံု တဲ့ အခါမှာ တတ်မြောက်လာတာ။ ကိုယ်က တွေ့ဖို့ လိုတယ်။ ကြံုဖို့ လိုတယ်။ ဒါကြောင့် တွေ့ အောင် ကြံုအောင် ကိုယ့်ဘာသာ ကိုယ် ဖန်တီးရတယ်။ အလုပ် ရမှဆိုပြီး ထိုင်စောင့်နေတာဟာ တန်ခိုင်းရှင်ကို ထိုင်စောင့်နေတာနဲ့ အတူတူပဲ။ Working Experience က ပိုကောင်းတာမှန်ပေမယ့် ကိုယ့်ဘာသာကိုယ် လုပ်ထားတဲ့ project တွေကလည်း မတူတဲ့ အတွေ့အကြံုတွေကို ရစေတာပဲ။ နောက်ပြီး ကိုယ့် ဘာသာကိုယ် project သေးသေးလေးတွေ ရေးပြီး interview တွေမှာ ပြလို့ ရတယ်။ ပြောလို့ရတယ်။ လုပ်နိုင်တယ်ဆိုတာကို ပြောလို့ရတယ်။ နောက်ပြီး လုပ်နေတဲ့ project ကနေ သင်ယူစရာတွေ တွေ့လာရမယ်။ အသစ် ထပ်လေ့လာစရာတွေ ၊ ပြဿနာဖြေရှင်းနည်းတွေ တဖြည်းဖြည်းနဲ့ တတ်ကျွမ်းလာတယ်။ သို့ပေမယ့် အကြောင်းပြချက်အမျိုးမျိုးနဲ့ ကိုယ့်ဘာသာကိုယ် project သေးသေးလေးချပြီး မလုပ်ဖြစ်ကြတာ များတယ်။

Learn Objective-C : Day 6

ဒီနေ့တော့ Day 6 ရောက်ပါပြီ။ ဒီနေ့က categories လို့ခေါ်တဲ့ cocoa Touch အကြောင်းပါ။ လက်ရှိ object တွေကို implement ထပ်လုပ်တဲ့အကြောင်းပေါ့။ အရင်တုန်းက ရေးခဲ့တဲ့ အပိုင်းတွေကတော့

Other Articles In This Series

Categories

Categories ဆိုတာ ဘာလဲ ? Objective-C tutorials တော်တော်များများမှာ categories ကို တွေ့နိုင်ပါတယ်။ အလွန်ပဲ အသုံးဝင်ပြီးတော့ code ကော သပ်သပ်ရပ်ရပ် ဖြစ်စေတယ်ဆိုလည်း မမှားပါဘူး။ အခုကျွန်တော်တို့တွေ မကြာခင် လေ့လာရတော့မှာပါ။ NSString function မှာ ကျွန်တော်တို့ ကိုယ်ပိုင် function တွေ ထည့်ချင်တဲ့ အခါတွေရှိပါတယ်။ ဥပမာ။။ a chatacters တွေကို 4 ပြောင်းလိုက်တဲ့ function မျိုးပေါ့။ ကျွန်တော်တို့တွေ NSString ကို subclass ရှိပြီး ကိုယ်တိုင် method ကိုယ့်ဘာသာကိုယ် ထည့်သွင်းနိုင်ပါတယ်။ subclass ပိုင်းကို ကျွန်တော်တို့တွေ car class ဆောက်တုန်းက တွေ့မြင်ဖူးမှာပါ။ subclass က တော်တော်ကောင်းမွန်ပါတယ်။ သို့ပေမယ့် categories က ပိုပြီး ပြည့်စုံကောင်းမွန်တယ်လို့ ဆိုလို့ရပါတယ်။

Categories က ကျွန်တော်တို့တွေကို methods အသစ်တွေကို ရှိနေတဲ့ class မှာ ထပ်ဖြည့်ထည့်ခွင့်ပေးထားပါတယ်။ ဥပမာ။။ 100 NSString Objects ကို သင့် app မှာ သုံးထားတယ်ဆိုပါဆို့။ reverstring function ကို extra method အနေနဲ့ ထည့်ချင်တယ်ဆိုရင်တော့ custom subclass ကို အသုံးပြုနိုင်ပါတယ်။ သို့ပေမယ့် Categories နဲ့ဆိုရင်တော့ ပိုပြီး ရိုးရှင်းပြီး လွယ်ကူတယ်လို့ ဆိုနိုင်ပါတယ်။ နောက်ပြီး ရှိနေဲ့ method တွေကိုလည်း overwrite လုပ်ပြီး အစားထိုးဖို့ကလည်း ဖြစ်နိုင်ပါတယ်။ Continue reading “Learn Objective-C : Day 6”

Learn Objective-C : Day 5

ကဲ… Part 5 ကိုတောင် ရောက်လာပါပြီဗျာ။ ဒီနေ့မှာတော့ memory mangagement အပိုင်းကို လေ့လာရအောင်။ Script Language တော်တော်များများ (PHP ကဲ့သို့ ) ဟာ memory management ပိုင်းကို အလိုအလျောက်ဆောင်ရွက်ပေးပါတယ်။ ဒါပေမယ့် Objective-C မှာကတော့ သတိထားဖို့လိုပါတယ်။ object ကို create လုပ်ပြီးရင် release လုပ်ပေးဖို့လည်းလိုပါတယ်။

Other Articles In This Series

iPhone Development လုပ်ပြီဆိုရင် memory management ပိုင်းက အရေးပါပါတယ်။ ဘာလို့လည်းဆိုတော့ iPhone က memory limit က Desktop နဲ့ ယှဉ်ရင် နည်းပါတယ်။

Two Approaches

Objective-C မှာ memory management အတွက် methods ၂ မျိုးရှိပါတယ်။ ပထမက reference counting နဲ့ ဒုတိယကတော့ garbage collection ပါ။ သင့်အနေနဲ့ စဉ်းစားလို့ရတာကတော့ manual နဲ့ automatic ပေါ့။ reference counting ဆိုတာက programmer က code ထည့်ပေးရပြီး garbage collection ကတော့ system ကို အလိုအလျောက် memory managing လုပ်ခိုင်းတာပေါ့။ Garbage collection က iPhone မှာ အလုပ်မလုပ်ဘူးဆိုတာကို သတိထားဖို့လိုပါတယ်။ အဲဒါက Mac developer တွေအတွက်သာ အသုံးဝင်ပါတယ်။

Reference Counting

ကဲ… ကျွန်တော်တို့app ကို memory manage ဘယ်လိုလုပ်မလဲ။ ပထမဆုံးအနေနဲ့ ဘယ်အချိန်မှာ code က memory ကို အသုံးပြုပါသလဲ။ ကျွန်တော်တို့တွေက class instance (object) ကို ဖန်တီးလုပ်ပြီဆိုတာနဲ့ memory က allocated လုပ်ပါတယ်။ object က သေးသေးလေးပေမယ့် app က တဖြည်းဖြည်း ကြီးလာတာနဲ့အမျှ memory ပြဿနာတွေက ဖြစ်လာနိုင်ပါတယ်။

ကဲ.. ဥပမာ တစ်ခုလောက် ကြည့်ရအောင်။ ကျွန်တော်တို့ Drawing App တစ်ခုဆွဲပါတယ်။ user ဆွဲတဲ့ shape တစ်ခုတိုင်းက separate object တွေပေါ့။ ကျွန်တော်တို့မှာ shpare 100 ဆိုရင် object 100 memory ပေါ်မှာ နေရာယူသွားပါလိမ့်မယ်။ screen ကို clear လုပ်ပြီး နောက်ထပ် shape 100 ထပ်ဆွဲမယ်။ ကျွန်တော်တို့ဟာ memory manage မလုပ်ခဲ့ရင် အသစ် shape 100 လည်းပြီးရော object 200 memory ပေါ်မှာ နေရာယူထားပြီလေ။ အဲလိုမျိုးတွေ လုပ်နေရင် ကြာလာတဲ့အခါမှာ memory တွေ အရမ်းစားပါလိမ့်မယ်။

ကဲ… ကျွန်တော်တို့ reference counting နဲ့ စဉ်းစားကြည့်ရအောင်။ create new object လုပ်လိုက်တိုင်း memory ပေါ်မှာ နေရာယူသွားတယ်။ object က count 1 ဖြစ်သွားပြီ။ နောက်ထပ် object ဆောက်ရင် retain count က 2 ဖြစ်သွားပြီ။ တကယ်လို့ release ပြန်လုပ်လိုက်ရင် retain count က decrease ဖြစ်ပြီး 1 ဖြစ်သွားပါလိမ့်မယ်။ ထပ်ပြီး decrease လုပ်လိုက်ရင် 0 ဖြစ်သွားမယ်။ zero ဆိုရင် ထိန်းမထားတော့ပဲ memory ပေါ်မှာ free ဖြစ်သွားပါပြီ။

Syntax

ကျွန်တော်တို့ ပထမဆုံး object တစ်ခုကို တည်ဆောက်ပါမယ်။ object တစ်ခုကို အောက်ကလို တည်ဆောက်ပါမယ်။

myCarClass *car = [myCarClass alloc];

ကျွန်တော်တို့ object ဆောက်ပြီးသွားရင် manual release သို့မဟုတ် autorelease ကို နောက်ပိုင်းမှာ လုပ်ပါမယ်။ သတိထားဖို့က object ကို manual release လုပ်ပြီးမှ autorelease ကို သွားခိုင်းလိုက်ရင် application က crash ဖြစ်သွားနိုင်ပါတယ်။

ကျွန်တော်တို့ oject ကို alloc နဲ့ တည်ဆောက်ပြီးပါပြီ။ အဲဒါတော့ reatin လုပ်ပါမယ်။ object က ဆောက်လိုက်တော့ object count က 1 ဖြစ်သွားပါပြီ။

[car reatin];

ထပ်ပြီး reatin လုပ်လိုက်တော့ count က 2 ဖြစ်သွားပါတယ်။ ဒါကြောင့် ကျွန်တော်တို့ ၂ ကြိမ် release လုပ်ပေးဖို့လိုပါတယ်။

Autorelease and Autorelease Pool’s

XCode မှာ create project တစ်ခုဆောက်တဲ့အခါမှာ အချို့ code တွေက autorelease အတွက် ရေးထားတာကို သတိပြုမိမှာပါ။ code က အောက်ကလို မျိုး ပုံစံလေးပေါ့

NSAutoreleasePool * pool =[[NSAutoreleasePool alloc] init];
[pool drain];

Note: documentation အဟောင်းတွေမှာတော့ နောက်ဆုံး လိုင်းက drain အစား release ဖြစ်နေမှာပါ။ တကယ်တန်းတော့ အတူတူပါပဲ။ drain ပဲ သုံးသုံး release ပဲ သုံးသုံးအဆင်ပြေပါတယ်။

အပေါ်က code က autorelease အတွက်အလုပ်လုပ်ထားတာပါ။ ကျွန်တော်တို့တွေက object ကို autorelase message ပို့ထားလိုက်ပါတယ်။ drain message ကို sent လိုက်တဲ့အခါမှာတော့ object က release လုပ်သွားပါတယ်။ autorelease က အသုံးဝင်ပါတယ်။ pool စဆောက်တဲ့အချိန်ကနေ drain မလုပ်ခင်ထိ သုံးထားတဲ့ object တွေကို drain လုပ်တဲ့အချိန်မှာ အကုန် release လုပ်လိုက်ပါတယ်။ ကျွန်တော်တို့တွေ object ကို reatin count လုပ်ပေးနေစရာမလိုတော့ပဲ relase လွယ်လွယ်ကူကူ လုပ်ပေးလိုက်လို့ရပါတယ်။

Nested Autorelease Pool’s

nested autorelease pool နဲ့ ပတ်သက်ပြီးတော့ အကြမ်းရှင်းပြပေးလို့ရပါတယ်။ အဲဒါကို ဘာကြောင့်သုံးရတာလဲ။ တစ်ခါတစ်လေ loop ပတ်နေတဲ့အချိန်မှာ tempoary object ကို ဆောက်တဲ့ အခါလေးတွေ ရှိပါတယ်။

ဥပမာ။။ loop လုပ်နေတဲ့အခါမှာ temporary object ၂ ခု ဆောက်လိုက်ပါတယ်။ မလိုချင်တဲ့အခါမှာ အဲဒါကို autorelease ပြန်လုပ်ဖို့လိုပါတယ်။ အောက်က code လေးကို လေ့လာကြည့်လိုက်ပါ။

void main()
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

NSArray *args = [[NSProcessInfo processInfo] arguments];

for (NSString *fileName in args) {

NSAutoreleasePool *loopPool = [[NSAutoreleasePool alloc] init];

NSError *error = nil;
NSString *fileContents = [[[NSString alloc] initWithContentsOfFile:fileName
encoding:NSUTF8StringEncoding error:&error] autorelease];

/* Process the string, creating and autoreleasing more objects. */

[loopPool drain];
}

/* Do whatever cleanup is needed. */
[pool drain];

exit (EXIT_SUCCESS);
}

အဲဒီ code လေးက တော်တော်ကောင်းပါတယ်။ အဲဒီမှာ ကျွန်တော်တို့အနေနဲ့ pool တစ်ခုကို စဆောက်လိုက်တယ်။ ပြီးတော့ loop ထဲဝင်တယ်။ Loop ထဲမှာ pool ကို ထပ်ဆောက်တယ်။ အဲဒီ အချိန်မှာပဲ object ၂ ခု ထပ်ဆောက်တယ်။ ပြီးတော့ loopPool ကို drain လုပ်လိုက်တယ်။ ဒါကြောင့် pool စဆောက်တဲ့အချိန်ကနေပြီး drain လုပ်တဲ့ကြားက object တွေကို autorelease လုပ်သွားပေးပါလိမ့်မယ်။ object တွေ create လုပ်ခဲ့တဲ့အတွက် စိုးရိမ်စရာမရှိတော့ဘူးပေါ့။ နောက်ဆုံး program ပြီးသွားတော့ drain ထပ်လုပ်လိုက်တယ်။ ရှိနေတဲ့ object တွေကို အကုန် clear လုပ်သွားပေးတယ်။

loop ထဲမှာ သုံးထားတဲ့အတွက် loop လုပ်တဲ့အချိန်မှာ object တွေများလာပြီး memory တွေစားမှာ စိုးရိမ်စရာမလိုတော့ဘူးပေါ့။ တကယ်လို့သာ release သာ ပြန်မလုပ်ပေးရင် loop တွေများလာလေလေ memory က သုံးတာ များလာလေလေ ဖြစ်မှာပေါ့။

retainCount

အပေါ်မှာတုန်းကတော့ reatin နဲ့ပတ်သက်ပြီးပြောထားပြီးပါပြီ။ reatin ဘယ်နှစ်ခုရှိလဲ သိဖို့အတွက် reatinCount ကို အသုံးပြုနိုင်ပါတယ်။

NSLog(@"retainCount for car: %d", [car retainCount]);

retainCount က integer ဖြစ်တဲ့အတွက်ကြောင့် %d ကို သုံးထားပါတယ်။

Wrapping Up

Memory management က new programmer တွေအတွက် အနည်းငယ် နားလည်ရခက်ခဲနိုင်ပါတယ်။ အထူးသဖြင့် script langauge က လာတဲ့ programmer တွေအတွက်လည်း ခေါင်းရှုပ်စေနိုင်ပါတယ်။ ဒါပေမယ့် Objective-C မှာက memory management ကို ကိုယ်ပိုင် စိတ်ကျ ဖန်တီးနိုင်တဲ့အတွက်ကြောင့် program ပေါ့ပါးမှုက programmer ရဲ့ object တည်ဆောက်မှုနဲ့ release လုပ်မှုပေါ်မှာ မူတည်နေပါတယ်။ နားမလည်တာတွေကို မေးနိုင်ပါတယ်။

Next Time

နောက်တစ်ပိုင်းမှာတော့ Objectiv-C နဲ့ ပတ်သက်ပြီး ရိုးရှင်းတဲ့ code တွေအကြောင်းရေးသားသွားပါအုံးမယ်။

reference: http://mobile.tutsplus.com/tutorials/iphone/learn-objective-c-day-5/

ဘယ် programming language စ လေ့လာမလဲ ( Part 2 )

အပိုင်း ၁ မှာ Programming ဆိုတာဘာ။ Programming Langauge ဆိုတာ ဘာလဲဆိုတာကို ရှင်းလင်းခဲ့ပါတယ်။ Programming Lanaguage Generation တွေကိုလည်း ရှင်းပြပြီးပါပြီ။ ဒီ အပိုင်း ၂ မှာတော့ ဘယ် langauge ကို လေ့လာသင့်သလဲဆိုတာကို ဆွေးနွေးပါမယ်။

အရင်ဆုံး ကျွန်တော် ဆွဲထားတဲ့ route map လေးကို ကြည့်လိုက်ပါ။

အဲဒါကတော့ သာမာန် သမာရိုးကျ သွားဖို့ လမ်းကြောင်းလေးပါ။

လုပ်ငန်းခွင် မဝင်သေးသူများ

လုပ်ငန်းခွင် မဝင်သေးသူများ အနေနဲ့ အရင်ဆုံး route map လေးကို ကြည့်လိုက်ပါ။ အဲဒီမှာ ပထမဆုံး အဆင့်အနေနဲ့ C++ , Pseudo , Flowchart တွေနဲ့ စထားပါတယ်။ အခုနောက်ပိုင်း UCSY မှာ Flowchart နဲ့ Pseudo ကို သင်မသင်တော့ မသိတော့ပါ။ C++ မတိုင်ခင်မှာ Pseudo နဲ့ Flowchart ကို လေ့လာခြင်းအားဖြင့် programming flow နားလည်သွားဖို့ပါ။ Programming langauge တစ်ခုကို မသင်ခင်မှာ program flow ကို နားလည်ဖို့ analyst လုပ်တတ်ဖို့ လိုပါတယ်။ Programming က thinking က အရေးပါပါတယ်။ Program တစ်ခုကို စရေးတဲ့အခါမှာ thinking ပိုင်းကို အဓိကျပါတယ်။

တော်တော်များများဟာ C++ နဲ့ စတင်ပြီး ရေးရတာကို သဘောကျပြီးတော့ Pseudo နဲ့ Flowchart ကို လေ့လာရမှာကို သဘောမကျဘူး။ Pseudo နဲ့ Flow chart ကို သင်တဲ့အခါမှာ ပြန်စစ်ပေးဖို့ လူလိုပါတယ်။ C++ ကတော့ အခုရေး အခု run အခု အဖြေထွက်ပါပဲ။ ဒါကြောင့် လူအရမ်းများတဲ့ သင်တန်းတွေ UCSY တွေမှာ Pseudo နဲ့ Flow chart ကို စိတ်ဝင်စားမှု နည်းနိုင်ပါတယ်။

ပထမဆုံး လေ့လာသင့်တာကတော့ C ကို နည်းနည်းနဲ့ နောက်ပိုင်း C++ ကို ထပ်မံလေ့လာသင့်ပါတယ်။ C++ မှာ Object Oriented ပိုင်းကို နားလည်အောင် လေ့လာခဲ့ဖို့လိုပါတယ်။ ဒါမှသာ နောက်ပိုင်း အခြား Langauge ကို ကူးတဲ့အခါမှာ လွယ်ကူအောင်ပါ။

လုပ်ငန်းခွင် ဝင်နေသူများအတွက်

လက်ရှိ အလုပ်လုပ်နေပြီး programming ကို စိတ်ဝင်စားလို့ လေ့လာနေသူများအတွက်ကတော့ python က အသင့်တော်ဆုံးပဲ။ C++ ကတော့ အခြေခံကနေ စပြီး လေ့လာတာကောင်းပေမယ့် အချိန်မရှိတဲ့ သူများအတွက်ကတော့ python က လွယ်ကူမြန်ဆန်စွာ ရေးသားနိုင်တဲ့အတွက် အချိန်လည်း သိပ်မကုန်တော့ပါဘူး။ python ကိုလေ့လာပြီးသွားရင်တော့ အခြား language တွေကို လေ့လာလိုစိတ် အားနည်းသွားမှာတော့ အမှန်ပါပဲ။ python က အခြား language တွေထက် စာရင် လေ့လာရတာ လွယ်ကူပြီးတော့ ရေးသားရတာလည်း လွယ်ကူပါတယ်။

ဘယ်လိုင်းကို သွားမလို့ လေ့လာတာလဲ

programming ကို လေ့လာတော့မယ်ဆိုရင် ဘယ်လိုင်းကို သွားမလို့ လေ့လာတာလဲဆိုတော့ မေးခွန်းကိုလည်း မေးသင့်ပါတယ်။ အဲဒီ မေးခွန်းပေါ်မှာ အခြေခံပြီးတော့ ဘယ် language ကို လေ့လာသင့်သလဲဆိုတာကိုလည်း ဆုံးဖြတ်သင့်ပါတယ်။ ဘယ် programming ကိုပဲ သွားသည် ဖြစ်စေ OOP ကိုတော့ ကျေညက်အောင် လေ့လာထားဖို့လိုပါတယ်။

Windows Platform ကိုသွားမယ်ဆိုရင်တော့ C++ နဲ့ပဲ စစ python နဲ့ ပဲ စစ အဆင်ပြေပါတယ်။ C++ ကို လေ့လာတဲ့သူတွေကတော့ C# သို့မဟုတ် Java ကို ကူးပြောင်းပြီး ရေးဆွဲတာက ပိုအဆင်ပြေမယ် ထင်ပါတယ်။ python အတွက်ကတော့ နည်းနည်း ထပ်ဖြည့်ပြီး လေ့လာရုံပါပဲ။

Mac and Linux ကိုသွားမယ်ဆိုရင်တော့ python နဲ့လည်း ရေးလို့ရသလို C++ နဲ့လည်း ရေးလို့ရပါတယ်။ Mac အတွက်ကတော့ C ကို အခြေခံထားတဲ့ objective-c ကို ထပ်ပြီး လေ့လာသင့်ပါတယ်။ C++ သမားတွေအတွက် လွယ်လွယ်ကူကူ objecive-c ကို လေ့လာနိုင်ပါတယ်။

Web Development ကို သွားမယ်ဆိုရင်တော့ C++ ကနေ PHP သို့မဟုတ် ASP.NET (C#) , Ruby on Rail စတာတွေ ကို ပြောင်းလဲ လေ့လာဖို့လာပါပြီ။ Python ကတော့ Django လိုမျိုး python framework တွေကို အသုံးပြုနိုင်ပါတယ်။ Web Development အတွက် ထွေထွေ ထူးထူး မပြောတော့ပါဘူး။ Route Map ကို လေ့လာလိုက်ရင် ရပါမယ်။ Web Development သွားဖို့အတွက် web essential ကို ကျေညက်နေဖို့လည်း အဓိကျပါတယ်။

Mobile Development မှာကတော့ C++ အခြေခံရှိထားတဲ့ သူတွေအနေနဲ့ အတော့်ကို အဆင်ပြေပါတယ်။ Java , Objective-C , Android SDK စတာတွေကို လွယ်လွယ်ကူကူ လေ့လာနိုင်ပေမယ့် python အတွက်တော့ mobile development က ထဲထဲဝင်ဝင် မရှိသေးပါဘူး။ ဒါကြောင့် python သမားတွေအနေနဲ့လည်း ကိုယ် develop လုပ်မယ့် mobile platform ပေါ်မူတည်ပြီး language ကို ထပ်မံလေ့ဖို့လိုပါတယ်။

Summary

ဘယ် language ကို စလေ့လာသင့်သလဲဆိုတဲ့ အထဲမှာ C နဲ့ python ၂ ခု ထဲက တစ်ခုပါ။ အခြေခံ ကောင်းလိုချင်ရင်တော့ C ကို စလေ့လာသင့်ပါတယ်။ C က python နဲ့ ယှဉ်ရင် အများကြီး လေ့လာရခက်ပြီးတော့ နောက်ပြီး အခြား language တွေကို ကူးပြောင်းလေ့လာတဲ့ အခါမှာ အဆင်ပြေပါလိမ့်မယ်။ လိုအပ်တဲ့ langauge ကို C အခြေခံရှိထားတဲ့သူတွေ အနေနဲ့ လွယ်လွယ်ကူကူ ပြောင်းလဲ လေ့လာနိုင်ပါတယ်။ Python သမားတွေအနေနဲ့ကတော့ အခြား langauge ကို ကူးပြောင်းပြီး လေ့လာဖို့ သိပ်မလိုဘူးလို့ ဆိုရမှာပေါ့။ mobile development က လွဲရင် အခြား platform တော်တော်များများမှာ python ကို အလုပ်လုပ်နိုင်ပါတယ်။ သတိထားစရာ တစ်ခုက python အတွက် web server setup က php ထက်စာရင် အနည်းငယ် ရှုပ်ထွေးပါတယ်။ ဒါတွေက နောက်ပိုင်း သူ့အလိုလို သင်သွားမှာဆိုတော့ မလိုအပ်ပါဘူး။

၁၀ တန်းပြီးခါစ လူတွေ သို့မဟုတ် လုပ်ငန်းခွင်ထဲက မဟုတ်တဲ့သူတွေအနေနဲ့ C++ ကို စတင်လေ့လာသင့်တယ်လို့ အကြံပေးပါရစေ။ ဘာလို့လည်းဆိုတော့ အခြား language တွေကို လွယ်လင့် တကူကူးပြောင်း လေလ့ာနိုင်အောင်ပါ။ လုပ်ငန်းခွင် ဝင်ရောက်နေတဲ့သူတွေအတွက်ကတော့ အချိန်မရှိတဲ့ ကြားကလေ့လာနေရတာ ဖြစ်လို့ python ကို စတင်လေ့လာသင့်ပါတယ်။

လိုအပ်တာတွေ ကျန်ခဲ့တာတွေကို comment ပေးပြီး ဆွေးနွေးနိုင်ပါတယ်ဗျာ။ 

ဘယ် programming language စ လေ့လာမလဲ

programming တစ်ခုကို စသင်ဖို့ ရည်ရွယ်လိုက်တာနဲ့ ဘယ်ကနေ စသင်ရမလဲ။ ဘယ် language ကို စလေ့လာရမလဲဆိုတာက ပြဿနာ တစ်ရပ်ပါ။ သမာရိုးကျ computer တက္ကသိုလ် တက်ရောက်နေတဲ့သူတွေ အတွက်ကတော့ C , C++ နဲ့ စတင် ရင်းနှီး ကျွမ်းဝင်ရမှာပါ။ အဲဒါတွေ မစခင် သင် programming ဆိုတာကို ဘယ်လောက် သိထားပြီးပြီလဲ။

Programming Language ဆိုတာ ဘာလဲ။

Programming ကိုလေ့လာတော့မယ့် ဆိုသူတွေအတွက် အကြီးမားဆုံး စတင် စိန်ခေါ်မှုက programming language ဆိုတာ ဘာလဲဆိုတာပဲ။ အဲဒီတော့ ကျွန်တော်တို့ ပထမဆုံး စဉ်းစားသင့်တာက Programming language ဆိုတာဘာလဲ ဆိုတာပဲ။

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

Programming Language ဆိုတာ ဒီလိုပါပဲ။ Computer က နားလည်တဲ့ ဘာသာစကား တစ်ခုခုကို ကြားခံပြီး computer ကို ခိုင်းစေရတာပါ။ Computer ကတော့ ပုံမှန်အားဖြင့် 0 နဲ့ 1 သာ အလုပ်လုပ်ပါတယ်။ သို့ပေမယ့် ကျွန်တော်တို့တွေက သူ့ကို ခိုင်းစေဖို့အတွက် 0 နဲ့ 1 တွေ ရေးပြီး command ပေးဖို့ ဆိုတာ အလွန်တရာမှ ခက်ခဲလှပါတယ်။ မဖြစ်နိုင်ဘူးတော့ မဟုတ်ပါ။ အဲဒီတော့ ကိုယ် နားလည်လွယ်ပြီး computer ကို တဆင့် ပြန်ခိုင်းရတဲ့ langauge တစ်ခုခုကို ကြားခံပြီး ဆောင်ရွက်ပေးဖို့ လိုအပ်လာပါပြီ။

Language Generation

programming language generation နဲ့ ပတ်သက်ပြီးတော့ programming ကို စတင် သင်တဲ့ သူတွေ တော်တော်များများ သိထားသင့်ပါတယ်။ မသိလို့ ဘာဖြစ်လည်း ဆိုတော့ ဘာမှတော့ မဖြစ်ပါဘူး။ သိထားတော့ လက်ရှိ ကိုယ် သုံးနေတာ ဘယ် generation ရောက်နေပြီလဲ။ ဒီ generation မတိုင်ခင်က ဘယ် language တွေ ရှိခဲ့လဲ။ အခု ကိုယ်လေ့လာနေတာက ဘယ် generation လဲ။ စတာတွေကို သိရှိနိုင်ပါတယ်။

First Generation Language ( 1GL )

1950 မတိုင်ခင်က UNIVAC I နဲ့ IBM 701 တို့ဟာ ပထမဆုံး machine language program လို့ ဆိုလို့ရပါတယ်။ သို့ပေမယ့် 1GL ဟာ လျင်မြန်စွာ ကုန်ဆုံးသွားပြီး 2GL ကို ကူးပြောင်းလာခဲ့ပါတယ်။

Second Generation Language ( 2GL )

2GL ကတော့ လူသိများတဲ့ assembly language သို့မဟုတ် assembler ပေါ့။ assembler ကတော့ အခုထက်ထိတော့ အချို့နေရာတွေမှာ အသုံးချနေဆဲပါပဲ။

Third Generation Language ( 3GL )

အဲဒီနောက်ပိုင်းမှာတော့ 3GL တွေ ဖြစ်တဲ့ FORTRAN , LISP, COBOL တွေ ထွက်ခဲ့ပါတယ်။ 3GL ဟာ ပိုမို ရေးသားရမှာ လွယ်ကူလာပြီး အရင်တုန်းက machine code တွေနဲ့ မတူညီတော့ပါဘူး။ 3GL ဟာ gerneral use အနေနဲ့ အသုံးချလာနိုင်ခဲ့ပါတယ်။ 3GL နဲ့ အတူတူ general purpos language တွေကိုလည်း ပေါ်ထွက်လာခဲ့ပါတယ်။

C language ကို 1969 နဲ့ 1973 ကြားမှာ developed လုပ်ခဲ့ပြီးတော့ အခုအချိန်ထိ popular ဖြစ်နေသေးတဲ့ langauge တစ်ခုပါ။ C ကို ထပ်ပြီးတော့ version အသစ်တိုးကာ 1980 မှာ C++ ကို ထုတ်ခဲ့ပါတယ်။ C++ က object-oriented နဲ့system programming တွေ ပါဝင်လာပါတယ်။

Third Generation နဲ့ အတူ လက်ရှိ အသုံးပြုနေတဲ့ general purpose programming language တွေကတော့  C, C++, C#, Java, Delphi, and Python တို့ ဖြစ်ပြီး သူတို့ဟာလည်း Third generation Language တွေပါပဲ။

Fourth Generation Language ( 4GL )

Fourth generation language ကိုတော့ စီးပွားရေးဆိုင်ရာ business software တွေအတွက် ရည်ရွယ်ပြီး ဖန်တီးခဲ့ကြပါတယ်။ 3GL တွေက 4GL တွေနဲ့ ပူးပေါင်းဆောင်ရွက်ပြီး develop လုပ်နေရဆဲပါပဲ။ 4GL ထဲမှာ

  • General Use
  • Database
  • Report generators
  • Data manipulation, analysis, and reporting languages
  • Data-stream languages
  • Database-driven GUI application development
  • Screen painters and generators
  • GUI creators
  • Mathematical optimization
  • Web development languages

ဥပမာ အနေနဲ့ ဆိုရရင် Database ထဲမှာ SQL ဖြစ်ပြီးတော့ Web Development မှာတော့ ColdFusion ပေါ့။

Fifth Generation Language ( 5GL )

5GL ကတော့ အဓိကအားဖြင့် programmer မလိုပဲနဲ့ program တွေကို တည်ဆောက်ဖို့အတွက် ရည်ရွယ်ထားတာပါ။ 5GL တွေကို အဓိကအားဖြင့် Artificial Intelligence research တွေ မှာ အဓိက အသုံးပြုပါတယ်။ Prolog , OPS5, Mercury တို့က 5GL example တွေပေါ့။

Summary

အခုအချိန်မှာတော့ 5GL ထိ ရောက်နေပေမယ့် ကျွန်တော်တို့တွေ စပြီး လေ့လာသင့်တာကတော့ 3GL ပါပဲ။ လက်ရှိ တော်တော်များများ အသုံးပြုနေကြတာတွေဟာ 3GL တွေပါပဲ။ 4GL တွေနဲ့ အချို့နေရာတွေမှာ ပေါင်းသုံးကောင်း သုံးပါလိမ့်မယ်။ စလေ့လာမယ့်သူတွေကတော့ Database တွေ ဘာတွေကို လေ့လာဖို့ မလိုသေးပါဘူး။ ပထမဆုံး လေ့လာရမှာက 3GL Programming Langauge ပါ။

What Next

နောက် အပိုင်းမှာ လက်ရှိ အသုံးပြုနေတဲ့ Programming language တွေနဲ့ ဘယ်ဟာကို လေ့လာသင့်သလဲဆိုတာကို ဆွေးနွေးရေးသားသွားမှာပါ။ ဒီ post နဲ့ ပတ်သက်ပြီး မရှင်းတာတွေကို comment ပေးခဲ့လို့ရပါတယ်။

Basic Java အပိုင်း (၂)

Brief History of JAVA

၁၉၉၁ မှာ ( ၉၁ ဆိုတော့ ကျနောှ့ထက် တစ်နှစ်ကြီးတဲ့ အစ်ကိုကြီးပဲ Big Brother Java 😛 😛 ) James Gosling ဆိုတဲ့သူရဲ့ Oak အမည်ရတဲ့ Project ကနေ ထွက်ပောှလာပာတယ်.. C / C++ ရဲ့ Notation တွေကို အခြေခံပေမယ့် C/C++ ထက် ပိုပြီး ရှင်းလင်းလွယ်ကူအောင် လုပ်ဖို့ပာပဲ.. ပထမဆုံး Public ကို Implementation လုပ်တဲ့ Java 1.0 ဟာ 1995 မှာ ထွက်ပောှလာပာတယ်.. လူအကြား ရေပန်းစားလာတဲ့ အကြောင်းက “Write Once, Run Anywhere” ဆိုတဲ့ အချက်နဲ့ပာ ဆိုလိုချင်တာက Java ဟာ Platform Dependency မရှိပာဘူး.. Window ပောှမှာ ရေးထားတဲ့ Java codes တွေကို Unix ပောှမှာ run လို့ ရပာတယ်.. Unix ကို အခြေခံထားတဲ့ Linux, Mac မှာလည်း run လို့ ရပာတယ်.. ဒာ သူ့ရဲ့ အားသာချက်လို့ ပြောနိုင်ပာတယ်..

နောက်ပိုင်းမှာ large enterprises တွေအတွက် J2EE (Java 2 Platform, Enterprise Edition), Mobile အတွက်J2ME (Java 2 Platform, Micro Edition) ဆိုပြီး ထွက်ပောှလာပာတယ်..
Continue reading “Basic Java အပိုင်း (၂)”

Basic Java အပိုင်း (၁)

ပထမဦးစွာ ပြောချင်သည်မှာ ကျနောှ Java Developer မဟုတ်ပာ.. 🙂

ကျောင်းတွင် သင်သော စုတ်ပြတ်သတ် လက်ရေးများဖြင့် Notes လိုက်မှတ်ထားသည်များကို ဆီလျောှအောင် ပြန်လည် ရေးသားပာသည်.. မသင့်တောှသည်များကို Admin ကြီး saturngod မှ ပြင်ဆင်ပေလိမ့်မည် 😀

OOP အကြောင်းကို ကိုလူပျိုကြီးရေးထားတာလည်းရှိပာတယ်..

အရင်ဆုံး Java အကြောင်း မပြောခင်မယ် Object-Oriented-Programming အကြောင်း အရင် ပြောဖို့လိုမယ်ထင်ပာတယ်..

OOP ဆိုတာ Object ဆိုတဲ့အရာများကို အသုံးပြုပြီးတော့ Apps တွေ Program တွေ Design လုပ်ထားတဲ့ Programming Standard တစ်ခု ဖြစ်ပာသည်.. OOP မှာ နည်းလမ်းတွေ အများအကြီးရှိပာတယ်.. အဲထဲက အဓိကဟာတွေကတော့

Inheritance

Polymorphism

Encapsulation

တို့ဖြစ်ပာတယ်.. အောက်ဘက်မှာ အသေးစိတ် ပြန်ရှင်းပာ့မယ်

အရင်ဆုံး Object ဆိုတာကြီးကို Define လုပ်ကြည့်တာပော့

Object ဆိုတာ Subject မဟုတ်တာလို့ ပြောမှာလားဆိုတော့ မဟုတ်ပာဘူး 😛

An object is a thing that you can see, hold, or touch လို့ အရှင်းဆုံး ပြောလို့ရပာတယ်.. ကျနောှတို့ ပာတ်ဝတ်ကျင်းမှာ ကိုင်တွယ်နိုင်တဲ့အရာတွေ၊ မြင်နိုင်တဲ့အရာတွေ ၊ ထိတွေ့နိုင်တဲ့အရာတွေ အားလုံးဟာ Object ပာ..
Continue reading “Basic Java အပိုင်း (၁)”