10 Things Software Developers Should Learn about Learning
ACM က blog post စိတ်ဝင်စားစရာကောင်းလို့ သင့်တော်ရာထုတ်နှုတ်ပေးထားတာ။ Programmer တွေအတွက်က်ဆိုပေမဲ့ တော်တော်များများဖို့လဲအသုံးတည့်မယ်ထင်တယ်။
1. Human Memory Is Not Made of Bits
Computer memory တွေက read ဆို update မလုပ်ဘူး။လူကျတော့ မှတ်ပြီးသားသင်ယူပြီးသားကို recall ခေါ်တဲ့အခါ neuron pathway တွေ ပိုကောင်းစေတယ်။ဆိုချင်တာကများများပြန် recall လေ ပိုမှတ်မိလေ။
2. Human Memory Is Composed of One Limited and One Unlimited System
လူ့မှတ်ဉာဏ်မှာ learning နဲ့ပတ်သတ်တာ အဓိကကျတဲ့ ၂ပိုင်းရှိတယ်။ Long term memory(သူက computer storage လိုအသေမှတ်ထားတာ limitless လို့ဆိုတယ်) Working memory ( သူကျတော့ Problem Solving အတွက်သုံးတာ ဥပမာ ပေါင်းနှုတ်မြှောက်စားလုပ်မယ်ဆို ခေါင်းထဲတပြိုင်တည်း ဘယ်နှခေါက်လောက် မှတ်နိုင်သလဲပေါ့)။ Working memory ကမွေးကတည်းက fixed လုပ်ပီးသား။ Working memory ကောင်းလေ higher general intelligence ရှိလေ။ ဒါပေသိ သူ့ချည်းပဲက အဆုံးအဖြတ်ပေးတာမဟုတ်ဘူး။ Working memory များတဲ့သူတွေကျတော့ တပြိုင်တည်းအချက်အလက်တွေ များများခေါင်းထဲ ထဲ့စဉ်းစားနိုင်တဲ့အတွက် သင်ယူရတာမြန်တာရှိတယ်။ Expert programmer တွေကျတော့ ့working memory နည်းတာများတာထက် long term memory မှာဘယ်လောက်သိမ်းထားလဲဆိုတာပေါ်မူတည်ပြီး expert ဖြစ်ကြတာ။ တနည်းအားဖြင့်အတွေ့အကြုံရှိပြီးသား အသိပညာဘယ်လောက်များလဲဆိုတာပေါ့။
အကြောင်းအရာတခုကို သင်ယူတဲ့အခါ လူတွေက chunk အပိုင်းအစလေးတွေနဲ့ဆက်စပ်ပြီးသင်ကြတာ၊ ဥပမာ computer တလုံးဆိုရင် CPU, memory, hard disk ဒီလိုအပိုင်းတွေ ဘယ်လိုဆက်စပ်သလဲ အဲ့လိုသင်ယူကြတာ။
တခုခုကိုသင်တဲ့ အခါ အဲ့ဒီ သင်ယူရတဲ့ task က congnitive load ဘယ်လောက်လိုသလဲဆိုတာသိဖို့လိုတယ်။ intrinsic load and extraneous load ဆိုပြီး ၂ ပိုင်းရှိတယ်။ ဥပမာ table schema တခုကို ပြတဲ့အခါ picture နဲ့မပြပဲ စာနဲ့ပြရင် ပိုရှုပ်တယ်။ (ငယ်ငယ်တုံး က desktop ဆိုတာစာနဲ့ အရှည်ကြီး ရှင်းပြတာ ကျက်ရတာမှတ်မိတယ် လက်ညှိုးထိုးပြလိုက်ရင်ဘာမှခက်တာမဟုတ်ဘူး) ခုနကမလိုပဲ ပိုရှုပ်အောင်လုပ်ထားတာတွေက extraneous load ပေါ့။ Beginer တွေမှာကကျတော့ အဲ့ကောင်ပိုများတယ်။ (ဒါမို့စာသင်တဲ့အခါ သင့်တော်တဲ့ analogy တွေနနဲ့ပြောပြရတယ် ဒါမှ extraneous load နည်းမယ် သဘောပေါက်လွယ်မယ်)။
intrinsic load ကတော့မူလ သင်ယူရတဲ့ task ရဲ့ရှိရင်းစွဲခက်ခဲမှု့ပဲ။
သင်ယူရတဲ့ task က complexity များတဲ့အခါ အပိုင်းပိုင်းလေးတွေခွဲပြီးလေ့လာတာ (နိုင်သလောက်လေး ခွဲ တာ) ပိုကောင်းတယ်။
3. Experts Recognize, Beginners Reason
Expert တွေကျတော့ သူတို့အတွေ့အကြုံအရ ပြဿနာ တခုခုဖြစ်လာပြီဆိုရင် အရင်အတွေ့အကြုံရဒါဘာဖြစ်တယ်ဆိုတာကို သိတယ်။(long term memory က ဆွဲထုတ်တာ)။ Beginner ကျတော့ မမြင်ဖူးတော့ တိုင်ပတ်တယ်။ Expert programmer ကျတော့ higher level မြင်နိုင်ပြီး abstract တွေးနိုင်တယ်။ Beginner တွေကျတော့ ဒါမျိုးဖြစ်အောင် code များများဖတ်ဖို့လိုတယ်။ အဲ့ကနေ pattern လေးတွေ မြင်လာမယ်သိလာမယ်။ ဥပမာ array ကို traverse လုပ်ချင်ရင် loop ဆိုတာသုံးရမယ် ဒီလိုမျိုး။
4. Understanding a Concept Goes from Abstract to Concrete and Back
Concept တခုကိုနားလည်ဖို့ဆိုရင် abstract ကနေ စဉ်းစားရတယ် high level ပေါ့ ပြီးမှ details သွားရတာ။ Beginner တွေကျတော့ ့details ကိုအရင်သွားတဲ့အတွက်တိုင်ပတ်တယ်။ (အဲ့တော့သင်ကြားတဲ့အခါမှာ abstract နားလည်အောင် အရင်ပြောတယ် ပြီးမှဆိုင်ရာအပိုင်းလေးတွေကို details နားလည်အောင်လုပ်ရတယ် မဟုတ်ရင် details ကိုအရင်ရှင်းရင် ရှုပ်တဲ့အတွက် ပိုနားလည်ရခက်တယ်)
5. Spacing and Repetition Matter
ပြွတ်သိပ်ထဲ့တာ အဆင်မပြေဘူး။ တဖြည်းဖြည်းချင်း ခနခန လေ့ကျင့်တာ ာသင်ယူတာ ကပိုကောင်းတယ်။
Problem solve လုပ်တဲ့အခါ skill ၂ ခုကိုသင်ယူရတယ်။ ပထမ ဒီ problem ကို match လုပ်နိုင်တာ။ဥပမာ အပေါ်ကပြောသလို ုarray ကို traverse လုပ်ဖို့လိုပြီ ဒါဆို match ဖြစ်မယ်ပေါ့။ ဘာနဲ့ match မှာလဲဆိုတော့ loop သုံးရင်ရတယ်ဆိုတာမျိုး။ ဒုတိယတခုက apply လုပ်တာ။ loop တကယ်ရေးပြီးစမ်းကြည့်တာမျိုးပေါ့။ အဲ့တော့ စဉ်းစားလို့မရဘူးဆိုတာ အရင်တုန်းက မမြင်ဖူး မကြားဖူးမလုပ်ဘူးလို့ အဲ့လို စဉ်းစားလို့ရအောင် မြင်ဖူးကြားဖူး အောင် လုပ်ရတယ်။
မိနစ် ၉၀ ထက်ပိုသင်တာမလုပ်သင့်ဘူး။ short break(10 second break for every 5 to 10 minutes) လေးတွေ ထားပီး သင်တာလဲပိုကောင်းတယ်။
6. The Internet Has Not Made Learning Obsolete
Search engine, ChatGPT တွေပေါ်လာတော့ အဲ့ကောင်တွေ အားကိုးလာတယ်။ အဲ့တော့ပြဿနာက တချို့ဟာတွေ details မှတ်မိရမှာ မမှတ်မိတော့ဘူး။အားလုံးမှတ်ရမယ်မဆိုလိုပေမဲ့ ဘာလုပ်လုပ် google ခေါက်နေရရင်ပြဿနာရှိတယ်။ နောက်တခုကို unknown unkown ကိုယ်မသိလို့ မသိမှန်းမသိတဲ့ဟာတွေ ဆိုပြဿနာတက်မယ်။ အပေါ်ဆုံးအချက်ကပြောသလို ခနခန memory က recall ခေါ်လေ ပိုမှတ်မိလေ၊ memory အစား ခုနကကောင်တွေသုံးတဲ့အခါကျတော့ ပိုဆိုးတယ် မမှတ်မိတော့ဘူး။
နောက်တခုက congnitive load အရ search engine ကိုရှာဖို့လုပ်တော့ problem ဖို့စဉ်းစားတာကနေ search လုပ်ဖို့ ဦးနှောက်က context switch ရတော့ load တက်တာလဲရှိတယ်။
7. Problem-Solving Is Not a Generic Skill
Problem solving က programming မှာအဓိကကျတယ်။ လူတွေမှာ generic problem solving skill ရှိပေမဲ့ domain တိုင်းကိုတော့သွားလုပ်လို့မရဘူး။ ဆိုချင်တာက chess ထိုးတက်တာနဲ့ program ရေး တက်သွားမှာမဟုတ်ဘူးဆိုချင်တာ။ Programming problem solve မှသာ program ရေးတတ်မယ်။
object တွေကို ခေါင်းထဲမှာ ှvisualize လုပ်တဲ့ spatial skills ကျတော့ general ကျတယ်၊ ဥပမာ tetris လိုပေါ့၊ ဒါတွေသင်ရင်တော့ learning မှာတိုးတက်လာနိုင်တယ်။
8. Expertise Can Be Problematic in Some Situations
Expert တွေမှာလဲပြဿနာတက်နိုင်တဲ့အခြေအနေတွေရှိတယ်၊ ဥပမာ C++ သင်ထားတဲ့သူက Java ကို knowledge tranfer ရင် virual method တွေမှာ နားလည်မှု့ လွဲနိုင်တယ်။ တူသယောင်ထင်ရပေမဲ့မတူတာကိုပြောတာ။ နောက်တခုက expert တွေက beginner တွေကို သင်ပေးတဲ့အခါ သူတို့ world view နဲ့သင်ပေးတော့ beginner တွေ နားလည်ရခက်တာဖြစ်တတ်တယ်။ အဲ့တော့ beginner world view ဆိုတာကို ထဲ့စဉ်းစားပြီးသင်ရတယ် (စာသင်တဲ့အခါ ဟိုးအခြေခံက စသင်ရတာ အဲ့ဒီပြဿနာကြောင့်)
9. The Predictors of Programming Ability Are Unclear
Programming သင်လို့ရတာနဲ့ သင်လို့မရတာ ၂မျိုးပဲရှိတယ်ဆိုပြီးယူဆလို့တော့မရဘူး။ အတွေ့အကြုံထက် ပင်ကိုယ်ပါရမီ ပါတဲ့သူတွေက ပိုအားသာတာသွားတွေ့တယ်။ အစောပိုင်းသင်ယူမှု့မှာ အောင်မြင်လား မအောင်မြင်ဘူးလားဆိုတာကျတော့ General Intelligence နဲ့ working memory capacity ပေါ်မူတည်တယ်။ တချိန်တည်း information ဘယ်လောက် process လုပ်နိုင်သလဲဆိုတာနဲ့ reasoning skill ကိုပြောချင်တာ။ (Working memory သုံးရတဲ့ highly complex ဖြစ်တဲ့ compiler တို့ OSတို့ရေးကြည့်ဖို့ ကြိုးစားသင့်တယ်။)
10. Your Mindset Matters
မလုပ်နိုင်ဘူး တိုးတက်လာမယ်မထင်ဘူးဆိုတဲ့အတွေးရှိတဲ့သူ (fixed mindset နဲ့)လုပ်ရင်းနဲ့တော့ဖြစ်ထွန်းလာမှာပါဆိုတဲ့သူတွေ Growth mindset ရှိတဲ့သူတွေ ကွာသွားတယ်။
Growth mindset ရှိဖို့လွယ်သလားဆိုတော့လဲမဟုတ်ပြန်ဘူး ခုနကအတွေးရှိတယ် ဒါပေမဲ့လုပ်ကြည့်တော့ failure တွေ setback တွေကကြုံလာရမှာပဲ အဲ့ဒီကျရင်ဘယ်လို cope လုပ်ရမလဲဆိုတာရှိသေးတယ်။
ဒီနေရာမှာ Grit, persistence ရှိတာကလဲစကားပြောဦးမယ်။
အောက်က March လဖွင့်မဲ့ JS +React နဲ့ JavaSE ကြော်ငြာ