Computer Science ကိုဘယ်လို self-taught လုပ်မလဲ

Computer Science ဘွဲ့မရပဲနဲ့ Software Engineering နဲ့ IT မှာဘယ်လိုအောင်မြင်နိုင်လဲလို့ ကလေးအများစုက မေးကြတယ်။ ကျောင်းတက်ခွင့်ရှိရင် တက်ပြီး formal academic လမ်းကြောင်းကသွားဖို့တိုက်တွန်းဖြစ်ပေမယ့် လူတိုင်းက ဒီအခွင့်အရေး ရနေတာတော့ မဟုတ်ပါဘူး။ အဲဒီတော့ self study အကြောင်း ပြောကြမယ်။ သတိပေးချင်တာတခုက Computer Science ဘွဲ့မရလည်း အောင်မြင်နိုင်တယ်ဆိုတာက Computer Science ကိုတော့ သိထားရမှာပေါ့။ လိုအပ်တဲ့အခြေခံတွေ ဘာမှမရှိပဲ React တွေ Laravel တွေထလုပ်လို့က အချိန်ကုန်၊ ပိုက်ဆံကုန်၊ လူပင်ပန်း ရေရှည်မှာ ခွေးဖြစ်တာထက် ဆိုးမယ်။

Computer Science အတွက်လိုအပ်တဲ့ Core Foundation တွေကစပြောကြမယ်။ အခုဒီမိတ်ဆက်အဆင့်မှာ ဘာတွေလေ့လာသင့်လဲဆိုရင်

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

ဒုတိယ programming fundamental တွေလေ့လာရမယ်။ Language ကို Python ဒါမှမဟုတ် C ရွေးလို့ရတယ်။ CS နဲ့အထိအတွေ့ လုံးဝ မရှိဖူးတဲ့သူတွေ Python နဲ့စပါ။ Python က English ဘာသာစကားလိုပဲ။ ဒါပေမယ့် C ကိုတော့မဖြစ်မနေ လုပ်ရမယ်။ ဒါမှ memory management ကိုနားလည်မယ်။ variable တွေ control structure တွေ function လေ့လာပြီး calculator တို့၊ to-do app အသေးစားလေးတို့၊ CLI tool လေးတွေ ရေးကြည့်ပါ။

သင်္ချာမုန်းတာ သိပေမယ့် programmer တယောက်လိုတွေးနိုင်ဖို့ သင်္ချာနဲ့ train ယူရမယ်။ Discrete Mathematics ထဲက logic, combinatorics, set theory, graph theory, proof technique ဒါတွေကိုလေ့လာပါ။ စာအုပ်ကနေ လေ့လာချင်ရင် Discrete Mathematics and Its Applications ဆိုတာလေး တကယ်ကောင်းတယ်။

Graphics, Machine Learning, Simulation တွေဖက်သွားဖို့ ရည်ရွယ်ရင် Linear Algebra, Vectors, Transformations, Matrices တွေလေ့လာပါ။ Data science, AI နဲ့ Security research ဖက်စိတ်ဝင်စားရင် random variables, distributions နဲ့ Bayes' theorem စသဖြင့် Probability/Statistics ကိုလုပ်ခဲ့ဖို့လိုမယ်။ Calculus ကိုအ​​ခြေခံလောက် သင်ခဲ့ရမယ်။ Derivatives တို့ Integrals တို့တွေပေါ့။ Game Development လုပ်ရတဲ့အခါ Physics engine မှာအသုံးဝင်မယ်။ နောက်ပြီး ML models, optimization တွေမှာလည်း ​ပြန်ပါမယ်။

ဒါလောက်ဆို သင်္ချာနဲ့ပတ်သက်လို့ အခြေခံ လုံလောက်ပြီ။ လေ့လာရမယ့် CS core subject တွေပြောမယ်။

နံပါတ်တစ် Data Structures and Algorithms

arrays, linked lists, stacks, queues, trees, graphs စတဲ့ data structure တွေကို နားလည်ရမယ်။ implement လုပ်တတ်ရမယ်။ သုံးတတ်ရမယ်။ searching, sorting, BFS, DFS, dynamic programming နဲ့ greedy စတဲ့ algorithm တွေ နားလည်ရမယ်။ အသုံးချ ဖြေရှင်းတတ်ရမယ်။ Beginner အတွက် Grokking Algorithms ဆိုတဲ့စာအုပ်ကောင်းတယ်။

နံပါတ်နှစ် Computer Architecture လေ့လာရမယ်

CPU, memory, instruction sets, caching, assembly စသဖြင့်။ ဒီအဆင့်ကိုမသိပဲ code ချည်းရေးနေရင် code တွေကဆန်းလိုက်တာ။ ဒီစာလုံးရေးရင် ဒီပုံထွက်လာတယ်လို့ပဲ ဖြစ်နေလိမ့်မယ်။ ဒါတောင် code ရေးတာနော်။ code တောင်ဘူကိုးမသိပဲ AI ကို prompt တတ်ရင် ရပြီဆိုတဲ့ဟာတွေ ယုံစားနေရင်တော့ ကိုယ့်ထိုက်နဲ့ကိုယ့်ကံပဲ။

နံပါတ်သုံး Operating System အကြောင်းလေ့လာရမယ်

OS process, thread, memory management, file system နဲ့ synchronization တွေလောက်သိခဲ့ရမယ်။ ဒီအတွက် MIT ကထုတ်တာလား မသိတဲ့ Operating Systems: Three Easy Pieces ဆိုတဲ့ဟာ ဖတ်ကြည့်ပါ၊ ကောင်းတယ်။

နံပါတ်လေး Networking လေ့လာရမယ်

OSI model, TCP/IP, socket, routing, DNS, HTTP ဘာညာပေါ့။ ဒါတွေ နကန်းတလုံးမှ မသိပဲ Web App တွေရေး Web Developer ဖြစ်နေတဲ့သူတွေ မြင်ရတွေ့ရတာ တကယ်စိတ်မချမ်းသာဘူး။ အနည်းဆုံးတော့ ဒီအဆင့်မှာ packet sniffer လေးတခုနဲ့ chat app အသေးလေးတခု ရေးကြည့်ခဲ့လိုက်။

နံပါတ် ၅ Database တွေမဖြစ်မနေ လေ့လာရမယ်

Relational DBs, SQL Algebra, indexing, transactions နဲ့ NoSQL ဒါတွေလေ့လာရမယ်။ Database ရရင် blog CMS ဖြစ်ဖြစ်၊ database backend နဲ့ REST API (CRUD) လေးပဲဖြစ်ဖြစ်ရေးလို့ရပြီ။ Youtube ပေါ်မှာ Cornell University ရဲ့ course ရှိတယ်။

နံပါတ် ၆ Software Engineering လေ့လာရမယ်

SE မဖြစ်ချင်ဘူးဆိုရင် ဒီဟာကိုကျော်၊ SE လုပ်မှာဆိုရင်တော့ SDLC, design patterns, testing, version control, Agile, CI/CD နဲ့ clean code စသဖြင့် လေ့လာ။ Robert C. Martin ရဲ့ Clean Code ကိုမဖြစ်မနေဖတ်။

ပြီးရင် ကိုယ့်ရဲ့ specialization ကိုရွေးယူ။

အခုဒါတွေက လမ်းကြောင်းတခုချင်းစီအတွက် လိုအပ်မယ့် fundamental တွေပဲ။ Computer Science ကိုသေချာလေး ကျကျနန လေ့လာချင်တာဆိုရင် Theory of Computation ကိုဆက်သွားဖို့ လိုလိမ့်မယ်။ automata, regular expression, Turing machine, P vs NP စသဖြင့်။ Introduction to the Theory of Computation ဆိုတဲ့စာအုပ်ကောင်းတယ်။ MIT မှာလည်း Course ရှိတယ်နဲ့တူတယ်။

နောက် compiler တွေလေ့လာရမယ်။ lexical analysis, parsing, code generation စသဖြင့်ပေါ့။ ANTLR လိုမျိုးသုံးပြီး compiler လေးဖြစ်ဖြစ်၊ interpreter ဖြစ်ဖြစ် လက်တွေ့ project ရေးကြည့်ပါ။ parallel and distributed system တွေအကြောင်းဖတ်သင့်တယ်။ ဥပမာ multithreading, MapReduce, consistency model, CAP theorem ဒါတွေက system programming နဲ့ platform engineering မှာလိုအပ်တယ်။

ဒါလောက်ဆို Computer Science နဲ့ formal ဘွဲ့သာမရထားတာရှိမယ်။ လိုအပ်တဲ့ ဗဟုသုတတွေနဲ့ အတော်လေး ပြည့်စုံသွားပြီမို့လို့ အခြေခိုင်ခိုင် ဆက်လျှောက်သွားနိုင်ပြီ။ နောက်တခေါက် ထပ်ပြောဦးမယ်။ ကျောင်းတက်လို့ရရင်တက်ပါ။ မရရင်လည်း self study လုပ်သွားလို့ ရတာမို့ လက်မလျှော့ပါနဲ့ပေါ့။