V. Anton Spraul ရေးတဲ့
Think like a programmer စာအုပ်ဖတ်ပြီးတော့
Programming ကိုမြင်တဲ့အမြင်ပြောင်းသွားတယ်။
Programming ကိုစတင်လေ့လာတော့မယ်ဆိုရင်
ဘယ် programming language က စတင်လေ့လာရမလဲ
စဥ်းစားတတ်ကြတယ်။
ငယ်ငယ်ကလဲ အလုပ်သင်ဆရာဝန်လုပ်နေရင်း
Java Programming တွေသွားသင်တယ်။
သေချာမလေ့လာခဲ့မိတာ Programmer တစ်ယောက်လို
ဘယ်လိုစဉ်းစားမလဲ။
မားကတ်တင်းသမားတစ်ယောက်စဥ်းစားတဲ့ပုံစံနဲ့
Programmer တစ်ယောက်စဥ်းစားတဲ့ပုံစံမတူတဲ့အပိုင်းတွေ
အများကြီးရှိတယ်။
ဒီစာအုပ်မှာဖတ်ပြီး နာမည်တစ်ခုပေးရရင်
Programming = Problem-solving with codes
ပြဿနာကို programming framework ထဲက
Code တွေနဲ့ဖြေရှင်းတာ။
ပြဿနာဖြေရှင်းတဲ့အခါ
Problem statement တစ်ခုကိုနားလည်အောင်လုပ်တာ
Consulting လုပ်တာနဲ့ ပုံစံတူတယ်။
တခါတလေ ပြဿနာကို နောက်ပုံစံတစ်မျိုးနဲ့
Restate လုပ်ခိုင်းတာ၊
ပြဿနာကို define လုပ်ခိုင်းတာ၊
ပြဿနာကို သိပြီဆိုရင်
မတူညီတဲ့လမ်းကြောင်းတွေနဲ့ ဖြေရှင်းဖို့ စဥ်းစားတာ။
ဥပမာ ရေ နှစ်အောင်စကို ထည့်ပေး။
နှစ်အောင်စ 2 Oz လိုချင်တယ်။
ဒါပေမယ့် နှစ်အောင်စထည့်တဲ့ခွက်မရှိဘူး။
တစ်ခွက်က ၅ အောင်စ
တစ်ခွက်က ၃ အောင်စရေထည့်ထားတဲ့ တဲ့ခွက်ရှိတယ်။
ဘယ်လိုလုပ်မလဲ။
လိုချင်တာ ရေနှစ်အောင်စအတိအကျလိုချင်တယ်။
ဒီပြဿနာကိုဖြေရှင်းဖို့က
သုံးအောင်ဆရေကိုသွန်
ငါးအောင်ဆထဲက သုံးအောင်ဆခွက်ထဲကိုထည့်
ဒါဆို နှစ်အောင်ဆရေရမယ်။
ဒီပြဿနာကိုစဥ်းစားတဲ့အခါ
ဖြေရှင်းနည်းတွေ အမျိုးမျိုးရှိနိုင်တယ်။
Sudoku ဆော့တာလဲ
ပြဿနာဖြေရှင်းတဲ့နေရာမှာ ကူညီပေးနိုင်တယ်။
သင်္ချာ mathematical thinking ကလဲ
ပြဿနာဖြေရှင်းတဲ့အခါ အရေးပါတယ်။
ဥပမာ အိတ်တွေမှာပါတဲ့
ဂဏန်းသုံးလုံး lock တွေလိုပေါ့။
0 ကနေ 9 ထိရှိတဲ့
ဂဏန်းသုံးမျိုးရှိမယ်။
ဖြစ်နိုင်တဲ့ password ပေါင်းဘယ်လောက်ရှိမလဲ။
ဒါကို ငယ်ငယ်တုန်းက သင်ရတဲ့ သင်္ချာပညာဖြစ်တဲ့
Computations နဲ့ တွက်လို့ရတယ်။
ဖြစ်နိုင်ခြေ အမျိုးတစ်ထောင်ရှိတယ်။
0 ကနေ 9 ထိ ဖြစ်နိုင်ခြေ ဆယ်ခုရှိမယ်။
10 * 10 * 10 = 1,000
ဒါကို C++ မှာ input အနေနဲ့ ရေးရင်
#include <iostream> int main() { int possibilities = 10 * 10 * 10; // Calculate the number of possibilities using the formula std::cout << “The number of possibilities for a 3-digit lock code is: ” << possibilities << std::endl; return 0; }
Output အနေနဲ့
The number of possibilities for a 3-digit lock code is: 1000
ထွက်လာမယ်။
ဒါကို mathematical thinking လို့ခေါ်ပြီး
ပြဿနာဖြေရှင်းတဲ့နေရာမှာ အသုံးပြုလို့ရတယ်။
မာကတ်တာတွေအနေနဲ့ဆိုရင် ROAS
ကြော်ငြာစရိတ်သုံးပြီးပြန်ရတဲ့ငွေထွက်တာ၊
နောက် ဖောက်သည်တစ်ယောက်ရဲ့
တစ်သက်တာတန်ဖိုး Customer Lifetime Value
တွက်တဲ့နေရာမှာအသုံးပြုတာ
Programmer တွေစဥ်းစားတာနဲ့ တူမယ်။
နောက် programmer တွေက ပြဿနာဖြေရှင်တဲ့အခါ
Data တွေကို ဘယ်လိုထိန်းသိမ်းမလဲဆိုတဲ့
Data structure လိုတယ်။
စနစ်တကျ data သိမ်းဖို့
Arrays, Linked Lists, Stacks, Queues, Trees, Graphs, Hash Tables
တွေနဲ့ ဖော်ပြကြတယ်။
ဥပမာ arrays ကိုအသုံးပြုပြီး ပြဿနာဖြေရှင်းမယ်ဆိုပါတော့။
အောင်အောင့်မှာ ချိုချဥ် ငါးမျိုးရှိတယ်။
ဘယ်အချိုချဥ် အရေအတွက် အများဆုံးလဲ
စတော်ဘယ်ရီ ၁၀
သံပုရာ ၈
ပန်းသီး ၁၂
ငှက်ပျော်သီး ၆
လိုင်ချီး ၉
အထဲမှာ ဘယ်အချိုချဥ်က အများဆုံးလဲ
ဆိုတာသိချင်တယ်ဆိုပါတော့။
ပထမဆုံး စတော်ဘယ်ရီကိုယူလိုက်တယ်။
၁၀ လုံးနဲ့ ကျန်တာတွေကိုလိုက်နှိုင်းယှဥ်မယ်။
စတော်ဘယ်ရီအများဆုံးလို့ “ယူဆ”မယ်။
သူ့ထက်များတဲ့ ချိုချဥ်တွေ့ရင် “ဖြည့် update” လုပ်သွားမယ်။
အဲ့ဒီချိုချဥ်အများဆုံးဆိုပြီး။
တစ်ခုပြီးတစ်ခု program run နှိုင်းယှဥ်တဲ့အခါ
ပန်းသီးအရသာအများဆုံးဆိုတဲ့အဖြေရသွားမယ်။
ဒါကတော့ data မှာ array သုံးပြီးသွားတဲ့ပုံစံဖြစ်တယ်လို့ဆိုတယ်။
Class တစ်ခု အနေနဲ့ ပြဿနာဖြေရှင်းမယ်ဆိုပါတော့။
ဥပမာကိုယ်က ကျောင်းတစ်ကျောင်းမှာ
ပွဲတစ်ပွဲကျင်းပမယ်။
ဒီကျောင်းအတွက် မတူညီတဲ့ကျောင်းသားတွေအတွက်
မတူညီတဲ့ activities တွေစီစဥ်ပေးရမယ်ဆိုပါတော့။
ဒီတော့ နာမည်၊ အသက်အရွယ်၊ ပါဝင်ချင်တဲ့ activities အားကစား
ဒီသုံးခုကို ရွေးလိုက်တယ်ဆိုပါတော့။
မောင်မောင် အသက် ၁၂၊ ကြက်တောင်
အောင်အောင် ၁၅၊ ရေကူး
လှလှ ၁၁၊ ဘောလီဘော
ဒီလိုခွဲလိုက်ခြင်းအားဖြင့် အချက်အလက်တွေကို
စုစည်းထိန်းသိမ်းရလွယ်ကူပြီး စီမံခန့်ခွဲလို့လွယ်သွားတယ်။
Data တွေကို စုစည်းရင် Information ဖြစ်တယ်ဆိုတာ
ကြားဖူးလိမ့်မယ်။
အလားတူပဲ data ကို ဘယ်လိုစုစည်းမလဲ
စဥ်းစားဖို့အတွက် ထောက်တိုင်အဖြစ် class က ပါဝင်တယ်။
ပြဿနာဖြေရှင်တဲ့အခါ ပြဿနာကြီးကို
အပိုင်းလေးတွေလုပ်လိုက်နိုင်ဖို့လိုတယ်။
ပြဿနာဖြေရှင်းတဲ့အခါ recursion အသုံးပြုမယ်ဆိုပါတော့။
ကိုယ်က ဝင်္ဂဘာထဲကိုရောက်နေတယ်ဆိုပါတော့။
ကိုယ်လိုချင်တဲ့ solution အဖြေက ဝင်္ဂဘာထဲကထွက်ချင်တာ။
၁။ ဝင်္ဂဘာထဲမှာလား ကြည့်ကြည့်။
၂။ ထွက်ပေါက်ရောက်ပြီလားကြည့်ကြည့်။
ဟုတ်ဆို အောင်မြင်ပြီ။
မရောက်သေးဘူးဆို ဆက်သွား။
၃။ သွားမည့်လမ်းကိုရွေး (ရှေ့၊ နောက်၊ ဘယ်၊ ညာ)၊ ရှေ့ဆက်သွား။
၄။ လမ်းရှိတဲ့နေရာကိုသွား။
ရှေ့မှာနံရံရှိနေရင် ဆက်သွားလို့မရဘူး။
ရှေ့မှာလမ်းရှိရင် ရှေ့ဆက်
၅။ အပေါက်ဝမတွေ့မချင်း ၂ ကနေ ၄ ထိပြန်ဆက်။
ဒါကို ကွန်ပြူတာမှာ file တွေရှာတဲ့ နေရာမှာအသုံးပြုတယ်။
ဒီစာအုပ်ထဲကလေ့လာလိုက်ရတာတော့
ပြဿနာတစ်ခုဖြေရှင်းဖို့
အမြဲ plan ရှိဖို့လိုတယ်။
ပြဿနာကို နောက်တစ်မျိုးနဲ့
ပြန်ပြောကြည့်ကြည့်ဖို့ လိုတယ်။
နောက်ပြဿနာတွေကို
ခွဲခြမ်းပြီးဖြေရှင်းကြည့်။
ကိုယ်သိတာနဲ့ စ။
ပြဿနာကို တဖြည်းဖြည်းသေးအောင်လုပ်။
ဥပစာတွေ စဥ်းစားကြည့်။
စမ်းသပ်မှုပြုလုပ်။
ပြဿနာဖြေရှင်းဖို့ စိတ်မပျက်သွားနဲ့။
ဖြေရှင်းပြီးသား code library ရှိပြီး
Re-useable code တွေရှိတယ်။
ဒီအတိုင်းပဲ တခါတလေ သူများဖြေရှင်းပြီးသား
ပြဿနာတွေကို အစက ပြန်ဖြေရှင်းနေစရာမလိုဘူး။
Programmer တွေလို problem-solving mindset
ထားနိုင်မယ်ဆို consulting မှာလဲ
အများကြီးအထောက်အကူပြုမယ်။
Mental models တွေလေ့လာတဲ့သူတစ်ယောက်
အနေနဲ့ လူတွေကို စီမံခန့်ခွဲနိုင်ဖို့
မတူညီတဲ့ profession တွေရဲ့
စဥ်းစားပုံ၊ ကမ္ဘာကြီးကို ရှုမြင်ပုံတွေ
နားလည်ထားဖို့လိုတယ်။
HR တစ်ယောက်မြင်တာ၊ accountant မြင်တာ၊
Marketer မြင်တာ၊ programmer တစ်ယောက်မြင်တာ
တူတဲ့အပိုင်းရှိသလို၊ မတူညီတဲ့အပိုင်းတွေရှိတယ်။
ဒါကို နားလည်မှ ကောင်းကောင်း communicate လုပ်နိုင်မှာ။
Programmer တွေဆီကလေ့လာလို့ရတာ
Decomposition
ပြဿနာကို ခွဲခြမ်းစိပ်ဖြာခြင်း
Abstraction
ပြဿနာကိုအလွယ်ကူဆုံးဖြစ်အောင်
ဖြေရှင်းလို့ရတဲ့ အယူအဆတစ်ခုတည်ဆောက်ခြင်း
Patterns and Algorithms
ထပ်နေတဲ့အရာတွေကိုကြည့်ပြီး
ပြဿနာကိုအသစ်က ပြန်ဖြေရှင်းစရာမလိုအောင်လုပ်ဆောင်မှု
Logical Reasoning
ယုတ္တိကျကျစဥ်းစားမှု
Modularity
ပြဿနာတွေကို ခွဲလိုက်ပြီး၊
ခွဲထားတဲ့ပြဿနာတွေကို
သူ့အပိုင်းနဲ့သူ သီးသန့်ဖြေရှင်းခိုင်းခြင်း
Iterative Development
ရလဒ် feedback ပေါ်မူတည်ပြီး
ပိုကောင်းအောင်လုပ်သွားနိုင်တဲ့စွမ်းရည်
Debugging and Troubleshooting
စုံထောက်တစ်ယောက်လို ထောက်လှမ်းပြီး
error တွေကိုပြုပြင်ခြင်း
Data Structures
ဒေတာစနစ်ဖန်တီးခြင်း
Design Patterns
ဒီဇိုင်းစနစ်တွေ၊ template တွေဖန်တီးထားခြင်း
Optimization
လိုချင်တဲ့ရလဒ်ရောက်အောင်
အကောင်းဆုံးဘယ်လိုသွားရမလဲ
စဥ်းစားနိုင်စွမ်းတွေပဲဆို မမှားဘူး။
Programmer တစ်ယောက်လို
algorithmic thinking တို့၊
Mathematical thinking တို့က
နေ့စဥ်ဘဝမှာ ပြဿနာတွေဖြေရှင်းတဲ့အခါ
အများကြီးအထောက်အကူပြုမယ်လို့ထင်တယ်။
ကိုယ်ကတော့ ကိုယ့်ကိုကိုယ်ထင်တာ
လူဆိုတဲ့ ကွန်ပြူတာကြီးကို
ကိုယ်လိုချင်တဲ့ အထင်အမြင်နဲ့၊
အပြုအမူတွေလုပ်ဆောင်ဖို့
မက်ဆေ့တွေပေးနေရတယ်။
ဒီလိုလုပ်ဖို့ စကားလုံးအထားအသို syntax တွေ၊
အဓိပ္ပာယ်သက်ရောက်မှု semantics တွေကိုဂရုပြုရတယ်။
ကိုယ်ကတော့ App တစ်ခုဖန်တီးမယ်ဆိုရင်
Cloud အတွက် AWS တို့၊ Digital Ocean တို့
Front-end အတွက် React Native တို့ဘာတို့၊
Backend အတွက် PHP ဘာညာပြောနေတာတွေပဲရှိတာ
ကိုယ့် team က programmer ဆရာတွေ ဘယ်လိုစဥ်းစားလဲ
သိချင်တာနဲ့ V. Anton Spraul ရဲ့
Think like a programmer စာအုပ်ကို ဖတ်လိုက်
သူ့ Youtube Channel က video တွေကြည့်လိုက်နဲ့
Note ထုတ်ထားတာ။
တစ်ခုခုတော့ ရသွားမယ်လို့ထင်တယ်
အားတီ၊ အားမေတို့။
Phyo Paing @ Derek