Computer Programming for Muggles
Intro
ဒီအကြောင်းဟာ ကျွန်တော် webinar တွေတော်တော်များများမှာ ပြောနေကျ ခေါင်းစဉ်ဖြစ်ပါတယ်။ အခုကာလမှ လူတော်တော်များများ programming ဆိုတဲ့စကားကို ကြားဖူးးနားဝရှိလာကြပါတယ်။ Programming နဲ့အတူ developer, software engineer စတဲ့အလုပ်အကိုင်တွေကို စိတ်ဝင်စားမှုများလာကြသလို လစာများတယ် မပင်မပန်းအိမ်မှာဘဲထိုင်ပြီး computer နဲ့အလုပ်လုပ်လို့ရတယ် စသဖြင့် expectation တွေလည်းမြင့်လာကြပါတယ်။ ဒီ article မှာတော့ ကျွန်တော် local event တွေမှာပြောနေကျ topic ကို အနည်းငယ်ပြုပြင်မွမ်းမံပြီး programming အကြောင်းစိတ်ဝင်စားနေကြတဲ့ ဖေဖေမေမေတွေ လူငယ်တွေအတွက် တတ်စွမ်းသလောက် နားလည်အောင်ရှင်ပြပေးသွားပါမယ်။
Discalimer Alert 🚨
ဒီ article မှာပါဝင်တဲ့အကြောင်းအရာတွေဟာ ကျွန်တော့်ရဲ့အတွေ့အကြုံနဲ့ internet search တွေအပေါ်အခြေခံထားတာဖြစ်လို့ ဖတ်စာအုပ်တစ်ခုအနေနဲ့ မမှတ်ယူသင့်ပါဘူး။ အောက်မှာဆက်လက်ရေးသားမယ့်အကြောင်းအရာတွေဟာ programming အကြောင်းလုံးဝမသိသေးတဲ့ muggles တွေအတွက် insight တစ်ခုခုပေးနိုင်ဖို့ ရည်ရွယ်ပါတယ်။ ဒါကြောင့် တစ်ချို့ topic တွေကို wikipedia ဆန်ဆန်မရေးဘဲ over simplify လုပ်ထားရတာမျိုးတွေရှိပါတယ်။
What is Computer
Programming ဆိုတာ Computer Science ရဲ့ branch တစ်ခုဖြစ်ပါတယ်။ ကွန်ပျူတာတက္ကသိုလ်တွေမှာ Computer Science ဘာသာရပ်ကိုယူမယ်ဆိုရင် programming ဆိုတာကိုသင်ကြရမှာဖြစ်ပါတယ်။ Programming အကြောင်းမပြောခင် ကွန်ပျူတာအကြောင်းအရင်ပြောရပါမယ်။ Computer ကို အဓိပ္ပာယ်ဖွင့်ဆိုတာအမျိုးမျိုးရှိတဲ့အနက် ကျွန်တော်ကြိုက်တဲ့ အဓိပ္ပာယ်ဖွင့်ဆိုချက်ကတော့ အောက်ပါအတိုင်းဖြစ်ပါတယ်။
A computer is a calculating machine that can perform arithmetic operations at very high speed.
တွက်ချက်နိုင်တဲ့စက်ကို ကွန်ပျူတာလို့ခေါ်ပါတယ်။ ဘာတွေကိုတွက်ချက်တာလဲဆိုတော့ arithmetic operations လို့ခေါ်တဲ့ ဂဏန်းသင်္ချာနဲ့ဆိုင်တဲ့ အလုပ်တွေကို လျှင်မြန်စွာတွက်ချက်တာဖြစ်ပါတယ်။ ကွန်ပျူတာဆိုတာနဲ့ ကျွန်တော်တို့က laptop, desktop စတာတွေကိုပြေးမြင်ကြပါတယ်။ တစ်ကယ်တော့ electronic device တော်တော်များများမှာ computer ကိုတွေ့နိုင်ပါတယ်။ အမြင်သာဆုံးကတော့ ကျွန်တော်တို့နေ့စဉ်သုံးနေတဲ့ smart phone တွေပါဘဲ။ ကျွန်တော်တို့ TV ဖွင့်တဲ့ခလုတ်နှိပ်ရင်ဘာလုပ်မလဲ ပိတ်တဲ့ခလုတ်နှိတ်ရင်ဘာလုပ်မလဲ အသံအတိုးအကျယ်လုပ်ရင် ဘာလုပ်မလဲ စတာတွေကို embedded computer တွေနဲ့ ထိန်းချုပ်ထားရပါတယ်။ ဒါကြောင့်မို့လို့ ကျွန်တော်တို့နေ့စဉ်ထိတွေနေတဲ့ ကွန်ပျူတာတွေကို ဘယ်လို program ရေးမလဲဆိုတာဟာ သိသင့်သိထိုက်တဲ့အရာတစ်ခုဖြစ်လာပါတယ်။
Programming in a nut-shell
လူတွေအချင်းချင်း စကားပြောချင်ရင် မြန်မာ အင်္ဂလိပ် စသဖြင့် အချင်းချင်းနားလည်မယ့်ဘာသာစကားတွေနဲ့ပြောကြရပါတယ်။ မြန်မာတစ်ယောက်က မြန်မာစကားမတတ်တဲ့ ဂျပန်လူမျိုးတစ်ယောက်ကို ဆူရှီတစ်ပွဲပေးပါလို့ မြန်မာလိုသွားပြောရင် ခင်ဗျားကို ဆူရှီလာချပေးမှာမဟုတ်ပါဘူး။ သူနားလည်တဲ့ဘာသာစကားနဲ့ပြောမှသာ ခင်ဗျားလိုချင်တာကို လုပ်ပေးမှာဖြစ်ပါတယ်။ Computer ဆိုတာလည်း ဒီလိုပါဘဲ။ Computer က ခိုင်းတတ်ရင် ခိုင်းသမျှကိုလုပ်ပေးနိုင်တဲ့ ဆရာကြီးပါ။ ဒါပေမယ့် သူနားလည်အောင်ခိုင်းတတ်ဖို့တော့လိုပါတယ်။ ကံဆိုးစွာနဲ့ ကွန်ပျူတာက လူတွေနားလည်တဲ့ဘာသာစကားတွေကို တစ်ခုမှနားမလည်ပါဘူး။ ကွန်ပျူတာကိုခိုင်းချင်တယ်ဆိုရင် computer နားလည်တဲ့ဘာသာစကားနဲ့ခိုင်းရပါတယ်။ အဲ့လို ကွန်ပျူတာနားလည်တဲ့ဘာသာစကားကို programming language လို့ခေါ်တာဖြစ်ပါတယ်။ လူတွေလုပ်ချင်တဲ့အလုပ်ကို ကွန်ပျူတာနားလည်အောင်ဘာသာပြန်ပေးတဲ့သူတွေကိုတော့ programmer တွေလို့ခေါ်ပါတယ်။ ဘာသာစကားတွေမှာ သဒ္ဓါစည်းကမ်းတွေ ဝါကျအထားအသိုတွေ ရှိသလို programming language တွေမှာလည်း ဝါကျဖွဲ့ထုံးတွေ ရေးထုံးတွေ ရှိပါတယ်။ အဲ့ဒါတွေကို programming မှာ syntax တွေလို့ခေါ်ပါတယ်။
Programmer vs Developer vs Software engineer
ကွန်ပျူတာကို ဘာလုပ်ရမယ်ဆိုတဲ့ instruction တွေပေးတာကို programming/coding လို့ခေါ်ပါတယ်။ ဒီလို code တွေရေးတဲ့သူတွကို coder/programmer ဆိုပြီးခေါ်လေ့ရှိပါတယ်။ Instruction တွေကိုစုစည်းပြီး လက်တွေ့အသုံးဝင်တဲ့ application တွေဖန်တီးနိုင်တဲ့သူတွဟာ developer တွေဖြစ်လာပါတယ်။ Developer နဲ့ software engineer ဆိုတဲ့ အခေါ်အဝေါ်နှစ်ခုဟာ တော်တော်လေးဆင်တူပြီး သိမ်မွေ့တဲ့ကွဲပြားခြားနားချက်တွေရှိပါတယ်။ ဒီနှစ်ခုကို အတူတူလိုသုံးနေကြတာတွေလည်းရှိသလို ဘယ်ဟာကဘယ်လိုဆိုပြီး စကားရည်လုကြတာတွေလည်း ဒုနဲ့ဒေးနဲ့ရှိပါတယ်။ ဘာဘဲဖြစ်ဖြစ် software engineer တစ်ယောက်ရဲ့ တာဝန်ယူမှုနဲ့ လုပ်နိုင်စွမ်းဟာ developer တစ်ယောက်ထက် ပိုများလေ့ရှိပါတယ်။
Evolution of programming languages
Computer တွေဟာ 0 နဲ့ 1 နှစ်လုံးကိုဘဲသိပါတယ်။ အောက်မှာဖော်ပြထားတဲ့ပုံက computer ကနားလည်တဲ့ ဘာသာစကားဖြစ်ပါတယ်။ ဒီလို 0 နဲ့ 1 တွေကြီးဘဲပါတဲ့ code တွေကို machine code လို့ခေါ်ပါတယ်။ လန့်မသွားကြပါနဲ့။ ၂၁ ရာစုမှာ အဲ့လောက်မဆိုးတော့ပါဘူး။
Machine code တွေကနေမှ computer တွေနဲ့ လူသားတွေကြား ဆက်သွယ်နိုင်အောင် ပထမဆုံးတီထွင်ခဲ့ကြတဲ့ human readable programming language ကတော့ assembly language ဖြစ်ပါတယ်။ 1940 – 50 ပတ်ဝန်းကျင်လောက်မှာ တီထွင်နိုင်ခဲ့တဲ့ ပရိုဂရမ်းမင်းဘာသာစကားဖြစ်ပါတယ်။ ဒါပေမယ့် အဲ့တာကလည်း သိပ်မနိပ်လှပါဘူး။ အောက်မှာ နမူနာပြပေးထားပါတယ်။
Machine code နဲ့ယှဉ်ကြည့်မယ်ဆိုရင်တော့ အင်္ဂလိပ်စကားလုံးတွေပါလာပြီဆိုတော့ နည်းနည်း လူသားတွေနဲ့နီးကပ်လာပြီလို့ ပြောလို့ရပါတယ်။ အဲ့နောက်မှာ Autocode, FORTRAN, ALGOL, COBOL, BASIC, VISUAL BASIC စသဖြင့် လူသားတွေအတွက်ပိုပြီးနားလည်ရလွယ်ကူအောင်မွမ်းမံထားတဲ့ programming language တွေဆက်တိုက်ထွက်လာခဲ့ပါတယ်။ 1972 မှာ တီထွင်ခဲ့တဲ့ C language ဟာ game changer ဖြစ်ခဲ့ပါတယ်။ သူ့ရှေ့က language တွေဟာ low level ဆန်ပြီး C နောက်ပိုင်းက language တွေဟာ လူသားတွေနဲ့ တော်တော်လေးကိုနီးစပ်လာပြီဖြစ်ပါတယ်။
C language ကိုကြည့်မယ်ဆိုရင် ဖတ်လို့နားလည်နိုင်မယ့် ‘main’, ‘void’ စတဲ့ english vocabulary တွေကို တွေ့ရမှာဖြစ်ပါတယ်။ သူ့ခေတ်သူ့အခါကတော့ C ဟာ ဖတ်ရအင်မတန်လွယ်တဲ့ language ဖြစ်ခဲ့ပါတယ်။ ဒါပေမယ့် သူ့နောက်ကထွက်တဲ့ language အများစုဟာ(Objective C မှလွဲ၍ LMAO!) C ထက်ပိုပြီး နားလည်ရပိုလွယ်ကူလာခဲ့ပါတယ်။ ဒါကြောင့် ဒီနေ့မှာတော့ C ဟာ ချဉ်းကပ်ရခက်တဲ့ language တစ်ခုဖြစ်နေပါပြီ။ ဒါဟာ C က မကောင်းလို့မဟုတ်ဘဲ ကျွန်တော်တို့က လွယ်ကူတဲ့ language တွေနဲ့အသားကျနေတဲ့အတွက်ဖြစ်ပါတယ်။
High-level Vs Low-level languages
ကွန်ပျူတာနဲ့နီးတဲ့ language တစ်နည်းပြောရရင် လူတွေနာလည်ရခက်တဲ့ language ကို low-level language တွေလို့ခေါ်ပါတယ်။ များသောအားဖြင့် ဒီလို language တွေကို hardware သမားတွေ robotics engineer တွေသုံးလေ့ရှိပါတယ်။ Computer နဲ့တဖြည်းဖြည်းဝေးလာပြီး လူနဲ့နီးလာလေ နားလည်ရလွယ်လေဖြစ်ပါတယ်။ အဲ့လို language တွေကိုတော့ high-level language တွေလို့ခေါ်ပါတယ်။
Programming languages
Programming languages တွေများစွာရှိပါတယ်။ အရင်တုန်းကလည်းရှိခဲ့ပြီး အခုလည်းရှိနေပြီး နောင်လည်းရှိနေဉီးမှာပါဘဲ။ ကျွန်တော့်ကိုအမေးအများဆုံးမေးခွန်းက ဘယ် programming language ကိုအရင်စလေ့လာရမလဲဆိုတာပါဘဲ။ အဲ့မေးခွန်းက တိတိကျကျဖြေဖို့ခက်ပါတယ်။ ကိုယ်လုပ်ချင်တဲ့အလုပ်အပေါ်မူတည်ပြီး programming language တစ်ခုကို ရွေးချယ်ရမှာဖြစ်ပါတယ်။ ရွေးချယ်ပြီးရင်လည်း ကိုယ်ရွေးချယ်ထားတဲ့ language ကို ကျွမ်းကျွမ်းကျင်ကျင် နားလည်တတ်မြောက်ထားဖို့လိုပါတယ်။ ဘာမှမကျွမ်းကျင်သေးဘဲ သူများပြောတဲ့ နာမည်ကြီး language တွေအကုန် လိုက်လေ့လာနေတာဟာ အကျိုးမရှိပါဘူး။ အရင်ဆုံး တစ်ခုကို စနစ်တကျနားလည်သဘောပေါက်မှ နောက်တစ်ခုကို ကူးသင့်ပါတယ်။ ဒီ article က programming language တွေကိုဘယ်လိုလေ့လာရမလဲပြောတဲ့ article မဟုတ်တဲ့အတွက် အကျယ်ချဲ့မပြောတော့ပါဘူး။
Frameworks
ပုံမှန်အားဖြင့် programming language တစ်ခုကိုလေ့လာပြီဆိုရင် သက်ဆိုင်ရာ framework တွေကိုလဲ တွဲဖက်လေ့လာရလေ့ရှိပါတယ်။ Framework ဆိုတာဘာနဲ့တူသလဲဆိုတော့ အသင့်စား မုန့်ဟင်းခါးဟင်းရည်ထုပ်နဲ့တူပါတယ်။ ကျွန်တော်က အစားအသောက်ဝါသနာထုံတဲ့သူဆိုတော့ ကျွန်တော့် talk တွေ lecture တွေမှာ ဉပမာပေးရင် အစားအသောက်တွေနဲ့ဘဲ ဉပမာပေးပါတယ် (ဤကား စကားချပ် 😝) မုန့်ဟင်းခါးဟင်းရည်ကို ပုံမှန်ကိုယ့်ဘာသာချက်မယ်ဆိုရင် ငါးဆီသတ်ပြီး ချက်ရပါတယ်။ ဒါပေမယ့် ကျွန်တော်တို့က အချိန်ကုန်သက်သာပြီး အလုပ်ရှုပ်မခံချင်တဲ့အခါ မြောင်းမြဒေါ်ချိုတို့ ခင်ထွေးရီတို့ နန်းသပြေတို့လို အသင့်စား မုန့်ဟင်းခါးခြောက်ထုပ်တွေကိုသုံးပါတယ်။ Framework ဆိုတာလည်း programming language တစ်ခုခုနဲ့ရေးထားတဲ့ အရာဘဲဖြစ်ပါတယ်။ Framework တွေကိုသုံးမယ်ဆိုရင် အစအဆုံးကိုယ့်ဘာသာရေးစရာမလိုဘဲ သူရေးပေးထားတာပေါ်မှာမှ ကိုယ်လုပ်ချင်တာကိုဆက်လုပ်သွားယုံပါဘဲ။ အချိန်ကုန်လည်းသက်သာသလို မြန်လည်းမြန်ဆန်ပါတယ်။ ဒါပေမယ့် language ကိုနောကျေနေအောင်သိထားပြီးမှသာ framework ကိုလေ့လာသင့်ပါတယ်။ မဟုတ်ရင် framework ကခွင်ပြုပေးထားတာထက်ပိုပြီးလုပ်ချင်တဲ့အခါ တစ်ခုခုပြင်ချင်တဲ့အခါ ပြသနာရှိပါတယ်။
Why should you learn to code?
နိုင်ငံတကာမှာ coding ကို ဖွံ့ဖြိုးရေးဘာသာရပ်အနေနဲ့ သင်နေကြပါတယ်။ ကျွန်တော်တို့နဲ့အနီးဆုံး စင်္ကာပူနိုင်ငံမှာ primary school မှာ programming fundamental course ကိုထည့်သွင်းသင်ကြားနေပြီဖြစ်ပါတယ်။ ဒါဟာ ကလေးတွေအားလုံးကို ကြီးလာရင် software engineer တွေဖြစ်လာစေချင်လို့မဟုတ်ပါဘူး။ Programming က ပန်းချီဆွဲသလို သီချင်းဆိုသလို normal human capability တစ်ခုဖြစ်ပြီး လူသားတွေရဲ့ တွေးခေါ်မျှော်မြင်နိုင်စွမ်းနဲ့ ဉီးနှောက်ဖွံ့ဖြိုးမှုကို အထောက်အကူပြုလို့ ဖြစ်ပါတယ်။
You acquire problem-solving skills
Programming ဟာ လူတွေရဲ့ပြသနာတွေကို ကွန်ပျူတာသုံးပြီးဖြေရှင်းတာဖြစ်ပါတယ်။ Programming ကြောင့် ပြသနာကို စနစ်တကျဖြေရှင်းတဲ့အလေ့အကျင့် ရရှိစေနိုင်ပါတယ်။
You will learn how to learn everything
ကျွန်တော်တို့ နည်းပညာလောကမှာ အသစ်အဆန်းတွေက နေ့တိုင်းထွက်နေပါတယ်။ Programming ကိုလေ့လာမယ်ဆိုရင် ဒီလိုအသစ်အဆန်းတွေကို အမြဲလေ့လာနေရမှာဖြစ်လို့ အခြားကိစ္စတွေကိုလေ့လာရာမှာလည်း ကိုယ့်ဘာသာဘယ်လိုလေ့လာရမလဲဆိုတဲ့ နည်းစနစ်တွေ အလေ့အကျင့်တွေကို ရရှိနိုင်ပါတယ်။ ဉပမာ ကိုယ်က visual learner ဆိုရင် သီအိုရီတွေကို analogy တွေ figure တွေနဲ့ တွဲမှတ်ရင်ပိုမှတ်မိလွယ်ကြောင်းသိလာတာမျိုး။ ဒါတွေဟာ programming က train ပေးလိုက်တဲ့အရာတွေဖြစ်ပါတယ်။ ကျွန်တော်ဆိုရင် programming လုပ်ပြီးမှ စစ်တုရင်ထိုးတာ vector art တွေဆွဲတာ စတာတွေကို ကိုယ့်ဘာသာလေ့လာခဲ့တာဖြစ်ပါတယ်။ ဒါကလည်း ကိုယ်က ဘယ်လိုလေ့လာရင် ခေါင်းထဲစွဲမလဲဆိုတာ သိလာတဲ့အတွက် အသစ်အဆန်းတွေကို ကိုယ့်ဘာသာလေ့လာချင်စိတ်ဖြစ်လာတာလည်းပါပါတယ်။ ဘယ်သူမှအရာအားလုံးကို မတတ်ပါဘူး။ ဒါပေမယ့် တတ်ဖို့လိုအပ်လာတဲ့အခါ ကိုယ့်ဘာသာလေ့လာနိုင်တယ်ဆိုတာ အရာအားလုံးကိုတတ်မြောက်ထားသကဲ့သို့ တန်ဖိုးရှိပါတယ်။
It teaches you how to be persistent
ကျွန်တော့်ရဲ့ lecture တွေမှာပြောလေ့ရှိပါတယ်။ Programming ကမလွယ်ပါဘူး။ ဘာကြောင့်လဲဆိုတော့ အားလုံကို မူကြိုအဆင့်ကနေ ပြန်လေ့လာရတာဖြစ်ပါတယ်။ ကျွန်တော်တို့ ကလေးဘဝခဲတံကိုင်တဲ့အချိန်ကို ပြန်စဉ်းစားကြည့်ရအောင်။ စာစီစာကုံးတွေ ညွန့်နေအောင်မရေးနိုင်ခင် ခဲတံကိုင်နိုင်အောင် လေ့ကျင့်ရတဲ့အချိန်က အခက်ခဲဆုံးဖြစ်ပါတယ်။ သူ့ထက်ပိုခက်တာက အဲ့ခဲတံကိုကိုင်ပြီး ဗျည်း ၃၃ လုံး ကို ရေးရတဲ့အချိန်ပါဘဲ။ အဲ့တုန်းက ကျွန်တော်တို့ ဝလုံးကို တစ်မျက်နှာ နှစ်မျက်နှာ နေ့တိုင်းရေးကျင့်ခဲ့ရပါတယ်။ ကြီးလာသည့်တိုင်အောင် အခြားဘာသာစကားတစ်ခုကိုလေ့လာရင် အဲ့ဘာသာစကားရဲ့ အက္ခရာတွေကို ရေးတတ်ဖို့ မှတ်မိဖို့ တော်တော်လေးကြိုးစားရပါတယ်။ Programming ဆိုတာလည်း ဘာသာစကားဖြစ်တာကြောင့် ဝလုံးရေးတုန်းကကြိုးစားမှုရဲ့ သုံးပုံတစ်ပုံလောက်အထိကို လိုအပ်ပါတယ်။ ဇွဲကောင်းမှသာ ဒီအဆင့်ကိုကျော်ဖြတ်နိုင်မှာဖြစ်ပါတယ်။
It brings ideas to life
Programming ကိုစလေ့လာတဲ့အချိန်မှာတော့ ဘာမှမယ်မယ်ရရလုပ်နိုင်ဉီးမှာမဟုတ်ပါဘူး။ လိုအပ်တဲ့အခြေခံတွေကိုဘဲ အချိန်တော်ကြာလေ့လာနေရဉီးမှာဖြစ်ပါတယ်။ ဒါပေမယ့် အချိန်ကြာလာတာနဲ့အမျှ creator mind set ဝင်လာပါတယ်။ ကိုယ်လုပ်ချင်တာကို လုပ်ပေးနိုင်တဲ့ app တွေမရှိတဲ့အခါ ကိုယ့်ဘာသာလုပ်ဖို့ စိတ်ကူးတွေပေါ်လာပါတယ်။ လုပ်နိုင်တဲ့ skill level လည်းရှိပြီဆိုရင် indie app creator life စတင်ပါပြီ။ ဘီလီယံဒေါ်လာ app တွေဟာ အဲ့လိုကနေစတင်ခဲ့ကြတာဖြစ်ပါတယ်။
High-income potential
ဒီကိစ္စကတော့ အနည်းငယ် tricky ဖြစ်ပါတယ်။ ယေဘူယျအားဖြင့်တော့ SWE(software engineer) တွေဟာ အခြားအလုပ်တွေထက် လစာများလေ့ရှိပြီး social status လည်းမြင့်ပါတယ်။ သို့သော် ဒါကတော့ ကံသေကံမ မပြောနိုင်ပါဘူး။ ကိုယ့်ဘက်က အရည်အချင်းပြည့်မီဖို့လည်းလိုသလို ကိုယ်လုပ်တဲ့အလုပ် position, ကိုယ့်ကုမ္ပဏီရဲ့ပေးနိုင်တဲ့ပမာဏ, ကိုယ့်ရဲ့လူရည်လည်မှုနဲ့ လစာညှိနှိုင်းနိုင်စွမ်း စတာတွေအပေါ် အများကြီး အများကြီး မူတည်နေပါတယ်။ ဒါကြောင့် အမြဲလစာများမယ်လို့တော့ မပြောနိုင်ပါဘူး။
Myths about programming
Programmer တွေနဲ့ပတ်သက်ရင် လူတွေအထင်မှားနေတဲ့ myths လေးတွေရှိပါတယ်။ အများစုကတော့ ရုပ်ရှင်ထဲက programmer တွေ hacker တွေကိုကြည့်ပြီး ကျွန်တော်တိုကိုလည်း အဲ့လိုအလုပ်လုပ်မယ်လို့ထင်ကြပါတယ်။ Developer တွေနဲ့ပတ်သက်တဲ့ scene အများစုဟာ ကြည့်ကောင်းအောင်သာ ထည့်ထားတာဖြစ်ပြီး အများစုက အမှန်တွေမဟုတ်ပါဘူး။ Screen အစိမ်းပေါ်ကနေ code တွေဆက်တိုက်ကျလာတာတွေ ကမ္ဘာလုံးပုံကြီးနဲ့ တီတီတီတီမြည်နေတဲ့ဟာတွေ အများစုဟာ စိတ်ကူးယဉ်ပြီးထည့်ထားတာသာဖြစ်ပါတယ်။ ကျွန်တော်ကြည့်ဖူးသမျှထဲမှာ reality နဲ့အနီးစပ်ဆုံးတူတာကတော့ The Social Network(Mark Zuckerberg အကြောင်းရိုက်ထားတာပါ) နဲ့ The Silicon Valley(2014 – 2019 series) နှစ်ခုဘဲရှိပါသေးတယ်။
❎ You need to be a genius to code
ဟုတ်ပါတယ်။ လူတစ်ရာမှာ ကိုးဆယ်လောက်က coding ကို သင်ယူနိုင်တဲ့ဉာဏ်ရည်ရှိပါတယ်။ ကျွန်တော်ရှေ့မှာပြောခဲ့သလို programming ဟာ natural human capability တစ်ခုပါဘဲ။ လူတိုင်းလုပ်နိုင်ပါတယ်။
❎ Math skills determine coding skills
ဒါကတော့ အနည်းငယ် debate ဖြစ်နိုင်ပါတယ်။ သင်္ချာဉာဏ်ရှိရင်တော့ ဘယ်နေရာမှာမဆို ပိုကောင်းပေမယ့် သင်္ချာမတော်ယုံနဲ့ coding skill ညံ့တယ်ဆိုတာမျိုးတော့ မဟုတ်ပါဘူး။ သင်္ချာလိုကိုလိုတဲ့အလုပ်တွေလည်း ရှိပါတယ်။ သင်္ချာသုံးစရာမလိုတဲ့အလုပ်တွေလည်း ရှိပါတယ်။ Programmer လုပ်ရင် အရင်ဆုံးစကြုံတွေ့ရတဲ့ စိန်ခေါ်မှုနှစ်ခုက ငါကဉာဏ်သိပ်မကောင်းဘူးပြီးရင် ငါကသင်္ချာမတော်ဘူးဆိုတာပါဘဲ။ ဘယ် engineering ဘာသာရပ်မဆို သင်္ချာလိုတယ်ဆိုတာကတော့ပြောနေစရာကိုမလိုပါဘူး။ ဒါပေမယ့် ကိုယ်က ကိုယ့်အားနည်းချက်ကိုသိရင် အတိုင်းအတာတစ်ခုအထိ ရှောင်သွားလို့ရပါတယ်။
❎ Language X is better than XX
Programming language တစ်ခုခုလောက်သင်ပြီးသွားရင် စတွေ့ရတဲ့ပြသနာဖြစ်ပါတယ်။ ငါသင်ထားတဲ့ language က မင်း language အတွက် ပိုကောင်းတယ်ဆိုတာမျိုးပါ။ ဘယ် language ကပိုကောင်းသလဲမေးတာက အဖေနဲ့အမေ ဘယ်သူ့ကိုပိုချစ်သလဲဆိုပြီး မေးသလိုမျိုးပါဘဲ။ Language တိုင်းမှာ သူ့ဘာနဲ့သူ အားသာချက် အားနည်းချက်ရှိပါတယ်။ လူတွေတောင် perfect မဖြစ်တာ programming language တွေလည်း နေရာအားလုံးမှာ perfect မဖြစ်ပါဘူး။ There’s no silver bullet လို့ပြောချင်တာဖြစ်ပါတယ်။ Development area တွေအပေါ်မူတည်ပြီး သင့်တော်ရာ language ကိုသာ ရွေးချယ်ရမှာဖြစ်ပါတယ်။ Web development လိုဟာမျိုးမှာဆိုရင် ရွေးချယ်နိုင်တဲ့ language တွေအများကြီးရှိပါတယ်။ စလုပ်လုပ်ချင်းမှာ တစ်ခုတည်းသိတာက ပြသနာမဟုတ်ပါဘူး။
❎ Should memorize all the syntaxes and avoid help
ဒါလည်း နောက်ထပ် ပြသနာတစ်ခုပါဘဲ။ စတင်လေ့လာတဲ့အချိန်မှာ အသစ်အဆန်းစကားလုံးတွေ အများကြီး အများကြီး အများကြီးကို တွေ့ရမှာဖြစ်ပါတယ်။ အဲ့တာတွေအကုန်လုံးကို မှတ်မိဖို့ဆိုတာ မဖြစ်နိုင်ပါဘူး။ မေ့သွားရင် ပြန်ကြည့်ရပါတယ်။ အဲ့တာ cheating လုပ်တာမဟုတ်ပါဘူး။ ကျွန်တော်တို့အများစုက အလွတ်ကျက်စာမေးပွဲတွေနဲ့ ကြီးပြင်းလာကြတော့ programming ကို အလွတ်ကျက်စာမေးပွဲလိုမျိုး လုပ်ကြပါတယ်။ ခင်ဗျားတို့ ကျောင်းစာမေးပွဲမှာတော့ အဲ့ syntax တွေ algorithm တွေအားလုံးဟာ အလွတ်ရနေရမှာဖြစ်ပါတယ်။ စာမေးပွဲခန်းထဲမှာတော့ ပြန်လှန်ကြည့်လို့မရပါဘူး။ဒါပေမယ့် တစ်ကယ့် အပြင်လောကမှာတော့ အကုန်အလွတ်ရဖို့ဆိုတာ တမင်အလွတ်ကျက်မှဘဲ ရပါမယ်။ အဲ့လိုအလွတ်ကျက်ဖို့ကလည်း မတန်ပါဘူး။ ဒါကြောင့် syntax တွေမေ့သွားရင် ပြန်ကြည့်တာ google က ရှာတာတွေ လုပ်ရမှာဖြစ်ပါတယ်။ အဲ့လိုလုပ်တာ ၁၀၀% တရားဝင်ကြောင်း ပြောလိုပါတယ်။ ယုတ်စွအဆုံး online မှာမရှိရင် stackoverflow တို့လိုနေရာတွေ forum တွေမှာ အကူအညီတောင်းလို့ရပါတယ်။ ကိုယ့်ဘက်က ဒီမေးခွန်းအတွက် ကြိုးစားအားထုတ်ထားတာတွေကို ပြဖို့တော့လိုပါတယ်။ ဘာမှကိုယ့်ဘာသာမရှာဖွေဘဲ သူများကိုချည်းလိုက်မေးနေတာကိုတော့ ဘယ်သူမှ ဝမ်းပန်းတသာနဲ့ကြိုဆိုမှာမဟုတ်ပါဘူး။ ကျွန်တော့်အဲ့လိုလာလုပ်ရင်တန်း bl ပါတယ် 😆။ အဲ့လိုအကူအညီယူခိုင်းတာက online ကတွေ့သမျှ code တွေအကုန် copy/paste လုပ်ခိုင်းတာမဟုတ်ဘူးဆိုတာလည်း ထည့်ပြောပါရစေ။ လုပ်ပါများလာရင် အလိုလိုမှတ်ကိုမှတ်မိသွားမယ့်အရာတွေဖြစ်ပါတယ်။
❎ Too old/young to learn to code
ပညာလိုအိုသည်မရှိဆိုသလိုဘဲ coding အတွက်လည်း ငယ်လွန်းတယ် ကြီးလွန်းတယ်ဆိုတာမရှိပါဘူး။
❎ I can fix your phone, laptop or even your TV
Programmer တွေဟာ software တွေနဲ့အလုပ်လုပ်ကြတာဖြစ်တဲ့အတွက် TV လိုင်းမချိန်တတ်ပါဘူး။ ဖုန်းလည်းမြင်တတ်သလို firmware ရေးတတ်ရမယ်လို့လည်း ဉပဒေသမရှိပါဘူး။ Developer အများစုက ကိုယ့်သက်ဆိုင်ရာနေရာမှာသာ ဆရာကြီးကြတာပါ။ ကိုယ့် field မဟုတ်တဲ့ကိစ္စတွေကျ စိတ်လည်းမဝင်စားတော့ မလုပ်ဖြစ်ကြပါဘူး။ အဲ့တော့ တစ်လုံးမှမသိတာများပါတယ်။
❎ I can hack your Fb acc and restore your forgotten password
ကျွန်တော့်ကို ပထမနှစ်လောက်က အသိတစ်ယောက်က သူ့ fb ကို hack ခိုင်းပါတယ်။ ဘာကြောင့်လဲဆိုတော့ သူ့ password မေ့သွားပြီး acc ဖွင့်ထားတဲ့ဖုန်းနံပါတ်ကလည်းပျက်သွားတယ်လို့ဆိုပါတယ်။ Developer အချို့ကတော့ hacking နဲ့ပတ်သက်တာတွေ သိကောင်းသိပါလိမ့်မယ်။ ဒါပေမယ့် developer တိုင်း hack တတ်ရမယ်ဆိုတာတော့မဟုတ်ပါဘူး။ Hack တယ်ဆိုတာ တစ်ကယ်တော့ နည်းပညာတစ်ခုကို ကျွမ်းကျင်အဆင့်ထက်ကျော်လွန်ပြီး အသုံးပြုနိုင်တာဖြစ်ပါတယ်။ အဲ့အပိုင်းကတော့ ကျွန်တော်ကျွမ်းကျင်တဲ့အရာမဟုတ်လို့ သေချာမပြောနိုင်ပါဘူး။
Recap
ခြုံပြောရမယ်ဆိုရင်တော့ programming ဆိုတာ ကွန်ပျူတာသုံးပြီး ပြသနာတွေကိုဖြေရှင်းတာဖြစ်ပါတယ်။ လူတွေလုပ်ချင်တာကို ကွန်ပျူတာတွေနားလည်အောင် ဘာသာပြန်ပေးရတဲ့အလုပ်ဖြစ်ပါတယ်။ Rocket sicence မဟုတ်ပါဘူး။ ဖွံ့ဖြိုးရေးဘာသာရပ်တစ်ခုဖြစ်ပါတယ်။ Programming သင်တဲ့သူတိုင်း Developer, SWE ဖြစ်တာမဟုတ်ပါဘူး။ လစာကတော့ ကောင်းနိုင်ခြေရှိပါတယ်။ နောက်ဆုံးအချက်အရေးအကြီးဆုံးကတော့ ဇွဲရှိဖို့လိုပါတယ်။ အသစ်အဆန်းတွေလုပ်ရမှာမကြောက်ဘူး အရာရာကိုမေးခွန်းထုတ်တတ်တယ် စူးစမ်းလိုစိတ်ရှိတယ် ဒါဆိုရင် programming စလေ့လာဖို့အသင့်ဖြစ်ပါပြီ။ အဲ့လိုမဟုတ်ဘဲ လစာကောင်းရုံတစ်ခုတည်းနဲ့တော့ programming ကိုလုပ်ရင် ကိုယ့်သားသမီးကို ဒီလမ်းကိုရွေးချယ်ခိုင်းရင် ကြာလာတာနဲ့အမျှ စိတ်ညစ်လာဖို့ဘဲရှိပါတယ်။ ကျွန်တော်တို့အလုပ်က stress လည်းအတော်အသင့်များသလို စိတ်အားထက်သန်မှုလည်း မရှိမဖြစ်လိုအပ်ပါတယ်။ အချိန်နဲ့အမျှ ဉီးနှောက်စားမယ့်အလုပ်လည်းဖြစ်ပါတယ်။ လစာကောင်းတာ ဒီအလုပ်တစ်ခုတည်းမဟုတ်ပါဘူး။ တစ်ကယ်တော်ရင် ဘယ်နေရာနေနေ လစာကောင်း အောင်မြင်ပါတယ်။ ဒါကြောင့် သူများပြောတိုင်း လိုက်မလုပ်ဘဲ ကိုယ့်အခြေအနေနဲ့ အချိန်အခါနဲ့ သင့်တော်မယ့်အရာကို သေသေချာချာရွေးချယ်နိုင်ကြပါစေကြောင်း ဆုမွန်ကောင်းတောင်းရင် ဒီတစ်ပတ်တော့ဒီမျှနဲ့ နားပါရစေခင်ဗျာ။