Computer Science ကိုဘယ်လို self-taught လုပ်မလဲ
Computer Science ဘွဲ့မရပဲနဲ့ Software Engineering နဲ့ IT မှာဘယ်လိုအောင်မြင်နိုင်လဲလို့ ကလေးအများစုက မေးကြတယ်။ ကျောင်းတက်ခွင့်ရှိရင် တက်ပြီး formal academic လမ်းကြောင်းကသွားဖို့တိုက်တွန်းဖြစ်ပေမယ့် လူတိုင်းက ဒီအခွင့်အရေး ရနေတာတော့ မဟုတ်ပါဘူး။ အဲဒီတော့ self study အကြောင်း ပြောကြမယ်။ သတိပေးချင်တာတခုက Computer Science ဘွဲ့မရလည်း အောင်မြင်နိုင်တယ်ဆိုတာက Computer Science ကိုတော့ သိထားရမှာပေါ့။ လိုအပ်တဲ့အခြေခံတွေ ဘာမှမရှိပဲ React တွေ Laravel တွေထလုပ်လို့က အချိန်ကုန်၊ ပိုက်ဆံကုန်၊ လူပင်ပန်း ရေရှည်မှာ ခွေးဖြစ်တာထက် ဆိုးမယ်။
Computer Science အတွက်လိုအပ်တဲ့ Core Foundation တွေကစပြောကြမယ်။ အခုဒီမိတ်ဆက်အဆင့်မှာ ဘာတွေလေ့လာသင့်လဲဆိုရင်
- What is CS
- Binary
- Data representation
- Logic gates
ဒီတွေကို ဖတ်သင့်တယ်။ အသေးစိတ်သွားဖို့ မလိုအပ်ဘူး။ ဒါပေမယ့် အနည်းဆုံးတော့ 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 ကိုရွေးယူ။
- Web Development သွားချင်ရင် Frontend အတွက် HTML, CSS, JavaScript, React ဒါတွေလေ့လာ။ Backend အတွက် Node.js, Django, Java Spring ထဲက တခုခုလေ့လာ။ သုံးခုလုံးတော့ မလိုဘူး။ Database အတွက် MySQL, Postgres, MongoDB ဒါတွေပေါ့။
- Mobile Development ကြိုက်ရင် Android (Kotlin), iOS (Swift) လေ့လာ။ Flutter (Dart), React Native တော့ အားမပေးဘူး။ ကိုယ့်ဟာကိုယ် အလုပ်အတွက် သပ်သပ်လေ့လာရင်လေ့လာ။ Mobile OS တွေနဲ့စထိတွေ့ဖို့ ကြိုးစားတုန်းမှာ Cross Platform သွားကိုင်တာကတော့ အကျင့်ပျက်တာပဲ။
- DevOps and Cloud ကြိုက်ရင် Docker, Kubernetes, AWS ရှိမယ်။ GitHub Actions, Terraform, Helm တို့လည်းကြည့်ပေါ့။
- AI/ML ကြိုက်ရင် supervised နဲ့ unsupervised learning, neural networks တွေလုပ်။ Python သေချာလုပ် numpy, scikit-learn, matplotlib, PyTorch, TensorFlow စသဖြင့် သုံးတတ်ဖို့ လိုအပ်မယ်။
- ဘယ်လမ်းကြောင်းရွေးရွေး Cybersecurity လည်းအခြေခံလောက် သိထားဖို့လိုမယ်။ hashing, encryption, OWASP Top 10
အခုဒါတွေက လမ်းကြောင်းတခုချင်းစီအတွက် လိုအပ်မယ့် 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 လုပ်သွားလို့ ရတာမို့ လက်မလျှော့ပါနဲ့ပေါ့။