Turing Programming Training Center
Nearby gyms & sports facilities
Insein Road
Zeyarthiri Street
Yangon-Innsein Road. Block-3
U Tun Lin Chan Street
U Tun Linn Chan Street
U Tun Linn Chan St,Hledan
Insein Road
Kamayut Tsp, Kamayut
U Tun Lin Chan Street, Kamayut
Programming/Software Development နဲ.ပတ်သတ်ပြီး Human Resources တွေမွေးထုတ်ရာသင်တန်းတခု
https://bestofjs.org/
JS နဲ့ပတ်သတ်တဲ့ Framework, Tool, Lib တွေချည်းစုထားတာ
Web Application Architecture
System design ဘက်နဲ့ပတ်သတ်ပြီး modern web application တွေဘယ်လိုတည်ဆောက်ထားသလဲ ဘာတွေပါသလဲဆိုတာ အကြမ်းဖျင်းရေးပေးထားတာပါ။ Ref ယူထားပြီးတော့ပေါ့။
1. DNS
Web က HTTP protocol ကိုသုံးတယ်။ User ကနေ ဥပမာ www.google.com ကိုရိုက်လိုက်ပြီဆိုရင် HTTP protocol ကိုသုံးပီး web application ဆီကိုဆက်သွယ်ရမယ်။ အဲ့လိုလုပ်ဖို့အတွက် web application
ရှိတဲ့ server ရဲ့ IP address ကိုသိဖို့လိုတယ်။ www.google.com က domain ပေါ့ လူဖတ်လို့လွယ်တယ်။ ့IP ဆိုတာ machine နားလည်တဲ့ address ပေါ့။
Domain ကနေ IP ကိုရဖို့ DNS( Domain Name System)ကိုသုံးရတယ်။ DNS က ပြောရရင် ်internet မှာ telephone directory တွေလိုအလုပ်လုပ်တာ။
သူ့ကို domain name တခုပေးလိုက်ရင် IP address ပြန်ပေးတယ်ပေါ့လေ။
ဒါတွေက browser ရဲ့ networking module ကနေလုပ်သွားမှာ။
2.Load Balancer
Web application တွေက traffic အရမ်းများလာတဲ့အခါ server တခု instance တခုလောက်နဲ့အဆင်မပြေဘူး။
အဲ့တော့ multiple server,multiple application တွေသုံးပီဲး load အများကြီးကို handle လုပ်ရတယ်။
အဲ့ဒီမှာ ခုနက server 1, server 2, server 3 ဆိုပြီး ထားမယ်ဆိုပါစို့။ ဒါမျိုးကို horizontal scaling လို့ခေါ်တယ်။
အဲ့မှာ request တခုကဝင်လာပြီဆိုရင် အဲ့ request ကိုဘယ် server ဆီပို့မလဲဆိုတာ တွက်ရတာ။
server1 က loadများနေတယ်ဆိုရင်သူ့ဆီပို့လို့မဖြစ်ဘူး။ ဒါမျိုး လုပ်ပေးတဲ့ ကောင်ကို load Balancer လို့ခေါ်တာ။
သူကလဲ အမျိုးမျိုးရှိသေးတယ်။ TCP/IP ဘယ် layer ပေါ်မူတည်ပြီး လုပ်တာမျိုးဆိုတာမျိုး။
3.Web App Servers
သူကတော့ တကယ့် web application logic ကိုလုပ်ပေးတာ။ဥပမာ Java နဲ့ရေးထားတဲ့ application တွေဆို tomcat/netty စတာတွေကနေ serve လုပ်ပေးတာမျိုး။
နောက် Node.js/Go စတာတွေဆို standalone မျိုးပေါ့။ web application ပေါ်မူတည်မယ်။ သုံးတဲ့ concurrency model လဲကွာမယ်။
ဥပမာ Thread based, event loop based စတာမျိုးပေါ့။
အဓိက user request ကို handle လုပ်ပေးပီဲးလိုတဲ့ business logic လုပ် DB မှာ save, response ပြန် ဒါမျိုးလုပ်ပေးတာ။
4.Database
Web application က data တွေ သိမ်းဖို့လိုတဲ့အခါ Database တွေကိုသုံးရတယ်, ဥပမာ MySQL,Oracle,Mongo စတာမျိုးပေါ့။
အဲ့မှာလဲ load balancing,clustering,scaling တွေ ပါတာမျိုးရှိနိုင်တယ်။
5. Caching Service
မကြာခန လိုတဲ့ data မျိုးကို database ကနေသွားသွားဆွဲတဲ့အခါ အဆင်မပြေဘူး ဘာလို့ဆိုတော့ IO ဆိုတာ နှေးလို့
အဲ့တော့ မြန်အောင် IO အစား memory ကိုသုံးမယ် data ကို memory ပေါ်တင်ထားမယ် ်memory ကနေ ပြန်ယူသုံးတော့မြန်တယ်။
ဒါကို cache လုပ်တယ်လို့ခေါ်တယ်။ ဥပမာ Redis,Memcache လိုကောင်တွေ။
မကြာခနလိုတဲ့ ဥပမာ FB လိုဆို login ဝင်တာနဲ့ Profile information ကလိုပြီးသား ဒါမျိုးကို cache ထဲ ထဲ့သိမ်းထားလိုက်တာမျိုး။
6. Job Queue
Application အနေနဲ့ချက်ချင်းပြီးဖို့မလိုတဲ့ asynchronous task တွေ နောက် scalability လိုတဲ့အခါမျိုးမှာ job Queue ကိုသုံးကြတယ်။
ဥပမာ email ပို့ဖို့လိုတာမျိုး ။ massive အများကြီးလိုလာရင် ခုနက web application server တွေကနေ queue ထဲကို email ပို့ဖို့လိုတဲ့ task တွေထထဲ့လိုက်မယ်။
ဒါဆို web application server က တခြားအလုပ်ဆက်လုပ်လို့ရတယ်။ Job queue တွေက email ပို့တာဆက်လုပ်ပေးလိမ့်မယ်။
အဲ့တော့ ပို scalable ဖြစ်တယ်။ မြန်မယ်ပေါ့။ RabbitMQ, Kafka စတာမျိုးတွေ ရှိတယ်။
7.Full-Text Search Service
Full text search ဆိုတာ google လိုမျိုး free form text နဲ့ရှာတာမျိုးကိုဆိုချင်တာ။ Application တွေမှာ အဓိက အားဖြင့် application log တွေ ရှိတယ်။ အဲ့တာမျိုးဆို ပြန်ရှာတာဘာညာက အရမ်းများရင် ခုနက full text search service တွေကိုသုံးရတယ် ဥပမာ ELK stack လိုကောင်တွေပေါ့။
8.Service
Web application ကိုတခြား system တွေက သုံးဖို့လိုတဲ့အခါ REST လို SOAP လိုကောင်တွေထုတ်ပေးထားတတ်ကြတယ်။ ဒါမျိုးကိုဆိုတာ။ Web Application ထဲမှာပေါင်းရေးတာဖြစ်ဖြစ် လိုအပ်လို့သက်သက် ခွဲထုတ်ရေးတာဖြစ်ဖြစ်လုပ်ကြတယ်။
9.Data warehouse
Databse နဲ့ warehouse ဘာကွာလဲဆိုတော့ database သည်နေ့စဉ်လုပ်ဆောင်နေတဲ့ transaction data မျိုးကိုသိမ်းတာ။ warehouse ကျတော့ reporting, analytics ဖို့ data ကိုသိမ်းတာများသောအားဖြင့် summary ပိုကျမယ်။ source အများကြီးကလာမယ် (database အများကြီး သို့မဟုတ် more than one application) volume ပိုများမယ်လို့ပြောလို့ရမယ်။
10. Cloud storage
အဓိက အားဖြင့် data ကို cloud ပေါ်မှာသွားသိမ်းတာ။ဘာပိုကောင်းလဲဆိုတော့ ကိုယ်တိုင် manage လုပ်စရာမလိုဘူး။ scalability ဘာညာ စိတ်ပူစရာမလိုဘူး ။ size ဘာညာ စိတ်ပူစရာမလိုဘူး။ ဒါတွေအားသာတယ်။မကောင်းတာကတော့ ပိုက်ဆံ။
11. CDN
Content delivery network လို့ခေါ်တာ ဥပမာ jquery file တဖိုင်ဆိုပါစို့ဒါဆို userတော်တော်များများ site တော်တော်များများကသုံးတယ်ဆိုပါစို့။ Multiple server တွေနအနေနဲ့ထားပြီး user နဲ့နီးစပ်တဲ့ server ကနေ ယူပေးတာဘာကောင်းလဲဆိုတော့ မြန်တယ်။
အဓိကအားဖြင့် web application တွေမှာ သုံးလေ့ရှိတဲ့ ့static HTML, JS, CSS file တွေကို သိမ်းတာ။
photo credit
900 Free Computer Science Courses from the World’s Top Universities
https://www.freecodecamp.org/news/free-courses-top-cs-universities/
Reddit ကတွေ့လိုက်တဲ့ paper တစောင် စိတ်ဝင်စားဖို့ကောင်းလို့။
What Makes A Great Software Engineer တဲ့ ဘယ်အချက်တွေက great software engineer ကိုဖြစ်စေသလဲ ဘယ်အချက်တွေ skillset တွေရှိသင့်တာလဲဆိုတာကို survey ကောက်ထားတာ။
Microsoft က engineer 59 ယောက်ကို survey ကောက်ပြီး ဆွဲထုတ်ထားတာ။
A.Personal Characteristics
1.Improving
ရှိနေတဲ့အနေထား ဥပမာ product quality, technical know-how စတာတွေကိုကျေနပ်မနေပဲ အမြဲတိုးတက်အောင်လုပ်နေတာ။
2.Passionate
ပြင်ပကလာတဲ့ reward, salary စတဲ့ဟာတွေထက် စိတ်ပါလို့ကိုလုပ်နေတာ။ တချို့ကောင်တွေလို လူအထင်ကြီးဖို့လုပ်နေတာမျိုးလဲမဟုတ်ဘူး။
ဒါလုပ်ရင်ပျော်နေတာမျိုးဆိုတာမျိုး။
3.Open-minded
ပြုလွင်ပြင်လွယ်တာ မှားနေတာ ထောက်ပြရင်ပြင်မယ်။ ပိုကောင်းအောင်သင်ယူမယ် အဲ့လိုစိတ်ရှိတာ။
4.Data-driven
Data ပေါ်မူတည်ပြီး ကောက်ချက််ချတာ ပိုကောင်းအောင် adapt လုပ်ယူတာ။
B. Decision Making
1.Knowledgeable about people and the organization
ကိုယ်အလုပ်လုပ်နေတဲ့နေရာမှာဘယ်သူတွေကဘာတွေသိတယ် ဘယ်သူ့ကိုဘယ်ကိစ္စဆိုရင်ချဉ်းကပ်ရမယ် တာဝန်ပေးရမယ် အားကိုးလို့ရမယ်ဆိုတာကိုသိတာ။
2.Sees the Forest and the Trees
Level of details အသေးစိတ်ကိုသိသလို bigger picture, company objective, strategic plan စတာတွေကို မြင်နိုင်တာ။
3.Update Their Mental Models
အလုပ်မှာလူတွေ role တွေ မတူတဲ့အခါ ဥပမာ UI သမားစဉ်းစားတာက programmer နဲ့မတူဘူး အဲ့တာမျိုးကို mental model ခေါ်တာ အဲ့တာတွေကို adjust လုပ်ပြီးဆိုင်ရာအလိုက် လိုက်စဉ်းစားနိုင်တာ။
4.Handling Complexity
Complexity ကို handle လုပ်နိုင်တာ ဆိုချင်တာက layer အလိုက် technial depth ရှိနေတာ။ ဒါကလူတိုင်းမရှိနိုင်ဘူး မွေးရာပါသဘောလို့တောင်ပြောလို့ရတယ်။
C.Teammates
1.Creates Shared Context
Problem details ကိုနားလည်တာချင်းမတူတာ ဒါမှမဟုတ် business background tech background မတူတာစတဲ့လူတွေကို နားလည်အောင် share understanding ဖြစ်အောင်လုပ်တာ။
2.Creates Shared Success
Team member တွေကိုစုပြီး တဦးတည်းမဟုတ်ပဲ အားလုံးဖို့ success ဖြစ်စေတာ။
3.Creates A Safe Haven
Teammate တွေကို negative consequence တွေမဖြစ်စေပဲနဲ့ (အားပေးတာမျိုး learn from mistake မှာ blaming မပါတာမျိုး) လုပ်ပေးတာ။
4.Honest
Teammate အချင်းချင်း communication ကောင်းဖို့က ယုံကြည်မှု့ကအဓိကကျတယ်။ ယုံကြည်တယ်ဆိုတာကလဲ ရိုးသားတဲ့သူမှ အဲ့တာမှ ယုံကြည်မှာ။
D. Software Product
1.Elegant
ရိုးရိုးရှင်းရှင်း solution မျိုးထုတ်ပေးတာ။နားလည်ရလွယ်တာမျိုးလုပ်ပေးတာမျိုး။
2.Creative
တခြားသူတွေနဲ့မတူပဲ problem ကို လွယ်လွယ်ကူကူ solve လုပ်နိုင်အောင် နည်းလမ်းအသစ်တွေနဲ့ကြိုးစားတာမျိုး။
3.Anticipates Needs
ခုလိုနေတဲ့ requirement အတွက်တင်မကဘူး နောက်ဖြစ်လာနိုင်တာတွေအတွက်ပါကြိုတင်ထဲ့စဉ်းစားထားတာမျိုး။
Refhttps://faculty.washington.edu/ajko/papers/Li2015GreatEngineers.pdf
2025 Jan စမဲ့အတန်းပါ
Java SEအပ်လို့ရပါပြီ
Fully online ဖြစ်ပါမယ်။
Jan -4 မှာစပါမယ်။
🏛️ JavaSE
=============
စနေ တနင်္ဂနွေ ညနေ 6:30 PM ကနေ 8:30 PM ပါ။ အင်္ဂနေ့ 7:00 PM to 9:00PM.
5 လ ကြာမြင့်ပါမယ်(ကံကောင်းရင်လဲ ပိုကြာဖို.ရှိနိုင်ပါတယ်)။
သင်တန်းကြေးက ၃ သိန်းကျသင့်ပါမယ်။
အချိန် ၅ လဖြစ်လို. အရေးကြီးတာတွေ အရေးပါတာတွေ အခြေခံတွေ အကုန်သင်ပေးဖြစ်ပါမယ်။ အဓိက theme က programming ကိုဘယ်လိုဆက်လေ့လာရမယ် programming language တွေကို ဘယ်လိုကိုယ်တိုင်လေ့လာသွားလို.ရမလဲဆိုတဲ့ skillset ကိုသင်ပေးမှာပါ။
အဓိက က programming lanugage တခုရဲ. syntax, semantic, pragmantic ကိုဟန်ချက်ညီညီ သုံးတတ်အောင် ဆက်လေ့လာလို. အဆင်ပြေအောင် သင်ပေးမှာပါ။
Java နဲ.ပတ်သတ်ပြီးရင် ဒါတွေ သင်ပါ့မယ်။
★How Java Language works from source to JVM bytecode.
★Data Type, Control Flow Structure
★Class
★Array
★Interfaces
★Generics
★Collections
★Exception Handling
★File Handling
★Core Utility classes
★Reflection, Annotation
★ Concurrency & MultiThread Programming
★ Mutual Exclusion
★ Semaphore
★ CountDownLatch,Lock
★ Deadlock
★ Fork-Join programming
★ ThreadPool
★ Lambda Function
★ Functional Interface
★ Basic Functional Programming
★Network Programming
★ Socket Programming
★ Http Server
★Object Oriented Programming
★OO Design Principle,
★OO Design Pattern
★Writing Clean code.
★Basic Refactoring.
★JDBC
★JavaSwing
Note: JavaSE အတန်းက JavaEE Spring Angular အတန်းအတွက် basic အတန်းဖြစ်ပါတယ်။
သင်တန်းပြီးရင် Project တခုလုပ်ရပါ့မယ်
နှစ်တန်းလုံးကို FB Group မှာ live လွှင့်ပေးမှာဖြစ်ပါတယ်။ Video တွေကျန်ခဲ့တဲ့အတွက် ပြန်ကြည့်လို့ရပါမယ်။
2025 Jan စမဲ့ ၂ တန်းပါ
JS+React တန်းနဲ့ Java SE ၂တန်း စအပ်လို့ရပါပြီ
Fully online ဖြစ်ပါမယ်။
Jan -4 မှာစပါမယ်။
🏛️ JavaScript +Frontend development with React
===========================================
🕛 စနေ တနင်္ဂနွေ ညနေ 4:00 PM ကနေ 6:00 PM ပါ။ တနင်္လာ 7:30 to 9:30 PM ပါ
၅ လလောက်ကြာပါမယ်။ Online ဖြစ်ပါမယ်
💸 သင်တန်းကြေးက ၃ သိန်းပါ။
ဒါတွေပါပါမယ်
⭐ How JS work from Source code to machine code in Browser.
⭐ Data Type, Control Flow Structure.
⭐ Function
⭐ Event Handling
⭐ DOM
⭐ JavaScript Event Loop Model.
⭐ Object Oriented Programming with JS
⭐ Functional Programming(From high order function to, functor, monoid, monad, functional design pattern)
⭐ Programming principle.
⭐ Basic Nodes.js
⭐ CRUD+JWT with Express.js and MongoDB
⭐ Asynchronous programming ( callback, promise, async await)
⭐ Writing Clean code.
⭐ Basic Refactoring.
⭐ React with Next.js
⭐ Package Manager/Project Setup.
⭐ React Overview and How React Work under the hook.
⭐ React Element,
⭐ JSX In Depth
⭐ Virtual DOM
⭐ Component and Component Life Cycle
⭐ Conditional Rendering.
⭐ Component Architecture
⭐ React Design Pattern (HOC, Composite, Render Property Pattern)
⭐ Flux And Redux.
⭐ RTK and RTK Query
⭐ Forms
⭐ HTTP
⭐ Routing
⭐ Hooks
⭐ Context API
JavaSE
=============
စနေ တနင်္ဂနွေ ညနေ 6:30 PM ကနေ 8:30 PM ပါ။ အင်္ဂနေ့ 7:00 PM to 9:00PM.
5 လ ကြာမြင့်ပါမယ်(ကံကောင်းရင်လဲ ပိုကြာဖို.ရှိနိုင်ပါတယ်)။
သင်တန်းကြေးက ၃ သိန်းကျသင့်ပါမယ်။
အချိန် ၅ လဖြစ်လို. အရေးကြီးတာတွေ အရေးပါတာတွေ အခြေခံတွေ အကုန်သင်ပေးဖြစ်ပါမယ်။ အဓိက theme က programming ကိုဘယ်လိုဆက်လေ့လာရမယ် programming language တွေကို ဘယ်လိုကိုယ်တိုင်လေ့လာသွားလို.ရမလဲဆိုတဲ့ skillset ကိုသင်ပေးမှာပါ။
အဓိက က programming lanugage တခုရဲ. syntax, semantic, pragmantic ကိုဟန်ချက်ညီညီ သုံးတတ်အောင် ဆက်လေ့လာလို. အဆင်ပြေအောင် သင်ပေးမှာပါ။
Java နဲ.ပတ်သတ်ပြီးရင် ဒါတွေ သင်ပါ့မယ်။
★How Java Language works from source to JVM bytecode.
★Data Type, Control Flow Structure
★Class
★Array
★Interfaces
★Generics
★Collections
★Exception Handling
★File Handling
★Core Utility classes
★Reflection, Annotation
★ Concurrency & MultiThread Programming
★ Mutual Exclusion
★ Semaphore
★ CountDownLatch,Lock
★ Deadlock
★ Fork-Join programming
★ ThreadPool
★ Lambda Function
★ Functional Interface
★ Basic Functional Programming
★Network Programming
★ Socket Programming
★ Http Server
★Object Oriented Programming
★OO Design Principle,
★OO Design Pattern
★Writing Clean code.
★Basic Refactoring.
★JDBC
★JavaSwing
Note: JavaSE အတန်းက JavaEE Spring Angular အတန်းအတွက် basic အတန်းဖြစ်ပါတယ်။
သင်တန်းပြီးရင် Project တခုလုပ်ရပါ့မယ်
နှစ်တန်းလုံးကို FB Group မှာ live လွှင့်ပေးမှာဖြစ်ပါတယ်။ Video တွေကျန်ခဲ့တဲ့အတွက် ပြန်ကြည့်လို့ရပါမယ်။
Developer ဖြစ်ဖို့ ဘာတွေ မလိုဘူးဆိုတာမျိုးတွေ့ရလို့။
Computer science မလိုဘူးဆိုတာ မဟုတ်ပါ။
ဆိုချင်တာက CS မလိုတဲ့နေရာမှာလုပ်ရမဲ့ အနေအထားဆိုရင်တော့ဖြစ်နိုင်ပါတယ်။
ဥပမာ application က userbase ဘယ်လောက်မှ မရှိတာမျိုး။ Optimization, Scaling ဘာမှမလိုတာမျိုး။
နောက် သင်္ချာမလိုဆိုတာမျိုး။ သင်္ချာဆိုတာ calculus တွေလိုထိုင်တွက်နေရမှ သင်္ချာလို့ဆိုရမှာမဟုတ်ဘူး။
Daily usage မှာ မမြင်မသိပဲ သုံးနေရတာမျိုး။
အနည်းဆုံး % လေးတောင်မတွက်တတ်လို့တိုင်ပတ်နေရတာမျိုးကျ အဆင်မပြေဘူးပေါ့။
AL/ML လိုကောင်မျိုးတွေသေချာလေ့လာမယ်ဆို မဖြစ်မနေသိရမယ်။
နောက် Computer Graphics, Game programming မှာ algebra, trigo, calculus မသိလို့မရဘူး။
Database လောက်ကို နေ့စဉ်သုံးပြီဆိုရင်တောင် အထဲက Set theory ကိုသုံးနေတာပဲပေါ့။
ကိုယ်ကတာမသိတာမသိတာတပိုင်းပေါ့။
ဥပမာ Functional programming လေ့လာလို့ function, set ဆိုတာလောက်မသိရင် ဘာမှဆက်လုပ်လို့မရဘူး။
Abstract category theory လောက်ကိုအသာထားအဝေးကြီးပဲ။
နောက်တခုက English ဘာညာ သိစရာမလိုဘူးဆိုတာ။
ဗမာလိုရေးထားတဲ့ တရားဖိုး၃ပုဒ် သုံးပုဒ်တရာပဲ ဖတ်မယ်ဆိုရင်သိစရာမလိုဘူး။
တလ ၂လ လောက်နဲ့ Subject တခုသိနိုင်သလား။ ကြားဖူးယုံ သုံးဖူးယုံလောက်တော့ သိနိုင်တယ်။
အဲ့တော့ အပေါ်ကဟာတွေ မသိတော့ရော developer ဖြစ်နိုင်လားဆိုတော့ ဖြစ်နိုင်တာပေါ့။
ဒစ်လည်ကောင် developer ဖြစ်နိုင်တယ်။
ကျဉ်းထဲကျပ်ထဲရောက်လို့ stackoverflow သွားကြည့်လို့ အဖြေမရှိရင်ဘာမှမလုပ်တတ်တဲ့ကောင်မျိုးပေါ့။
Software development သို.မဟုတ် programming ဆိုတာကြီး အစိမ်းသက်သက်နဲ. ဘယ်က စရမလဲ ဆိုတာမေးတာတွေများလို.ပါ။
လက်ရှိ Software development ကိုအဓိက ခွဲရင် သုံးမျိုးရှိတယ်လို.ပြောရမယ်။ အဲ့ကောင်တွေက Enterprise Application Development, Mobile application development, Desktop Application ရယ်လို. သုံးမျိုးရပါလိမ့်မယ်။
Enterprise Application development ဆိုတာကတော့ business တခုရဲ. function တွေအစုံအလင်ပါ၀င်တဲ့ software development မျိုးပါ။ ဒီအပိုင်းကိုဆိုရင်တော့ C #, ASP.NET, Java , JavaEE,Spring အစရှိတာတွေနဲ.ရေးလေ့ရှိပါတယ်။
C #, ASP.NET သည် Microsoft အောက်က technology ဖြစ်ပြီး Java, JavaEE,Spring အစရှိတာတွေက Oracle အောက်က technology တွေပါ။ Enterprise app development အတွက်ဆို C # or Java လေ့လာရမှာပါ ပြီးတော့မှာ ASP.NET, JavaEE, Spring ဆိုင်ရာတွေဆက်လေ့လာရမှာပါ။
ခုနောက်ပိုင်းမှာ Node.js ကလဲခေတ်စားလာတော့ Enterprise တွေကို Node.js နဲ.ပါရေးလာပါတယ်။ အဲ့တော့ JavaScript Node.js ကိုလေ့လာရမှာပါ။ ဒါကတော့ JavaScript သုံးရေးမယ်ဆိုရင်ပေါ့။ Node.js ဆို express, meteor လို framework တွေသိဖို.လဲလိုပါသေးတယ်။
Enterprise application လောက် မဟုတ်ပဲ web application or web site လောက်ပဲဆိုရင်တော့ PHP, CMS (Drupal, wordpress) စတာတွေလေ့လာရမှာပ့ါ။ Web application ရေးဖို.ဆိုရင်တော့ Laravel လို framework တွေလိုပါတယ်။ အခုပြောခဲ့တာတွေက backend အပိုင်းပါ။
Web application တွေ Enterprise application တွေအတွက် front end ဆိုရင်တော့ JavaScript, JQuery, React, Angular အစရှိတဲ့ ဟာတွေလေ့လာရမှာပါ။ အဲ့အပြင် HTML, CSS, boostrap , foundation အစရှိတဲ့ CSS framework တွေလဲလေ့လာရမှာပါ။
Desktop Application ကိုတော့ C #, JavaSE နဲ.ပဲရေးကြပါတယ်။ C # ကတော့ပိုသင့်တော်ပါတယ်။
နောက် ဆုံးကတော့ Mobile application developement ပါ။
သူကတော့ ၂မျိုးပေါ့ popular ဖြစ်တာက Android , IOS ပေါ့. Android ဆိုရင် Kotlin, Java , Android လေ့လာရမှာဖြစ်ပြီး IOS ဆိုရင် Objective C, Swift လေ့လာရမှာပါ။
အပေါ်က ဘယ် application ပဲလုပ်လုပ် မဖြစ်မနေသိထားရမှာကတော့ SQL အကြောင်းပါ။
ဒါလောက်ဆိုဘယ်ကစရမလဲသိလောက်ပြီထင်ပါတယ်။ နောက်ပိုတိကျတဲ့နည်းကတော့ အလုပ်ခေါ်စာတွေမှာ ဘာတောင်းလဲဘာတွေသိဖို.လိုလဲ ဆိုတာကို လိုက်ကြည့်ပါ။ ဒါကတော့အရှင်းဆုံးနည်းပါပဲ။ Framework တွေမသင်ခင် language ကိုလေ့လာတာအကောင်းဆုံးပါ။. JavaEE, Spring ကိုမလေ့လာခင် SE ကိုလေ့လာတာအကောင်းဆုံးပါ။ ASP.NET မလုပ်ခင် C # ကိုအရင်လေ့လာပါ။ Laravel မလုပ်ခင် PHP ကိုအရင်လေ့လာပါ။ Angular, React မလုပ်ခင် JavaScript ကိုနားလည်အောင်အရင်လုပ်ပါ။
Coding exercise လုပ်ဖို့ ဘာ project တွေလုပ်ရမှန်းမသိရင် Project idea တွေ
Exp level အလိုက်ပါခွဲပေးထားတာ
https://github.com/florinpop17/app-ideas
https://github.com/karan/Projects
https://github.com/Divide-By-0/ideas-for-projects-people-would-use
React CheatSheet
https://reactcheatsheet.com/
Course timeline
ဒီဇင်ဘာမှာ Data structure & Algorithm တန်းစပါမယ်။ (အတန်းအပ်လို့ရပါပြီ)။
Jan မှာ JS React, နဲ့ Java SE တန်းစပါမယ်။ (ဒီလကုန်အပ်လို့ရပါမယ်).
JavaSE တန်းပြီး JavaEE Spring တလှည့်စီသွားတာဖြစ်ပါတယ်။
React Ecosystem
React က view library တခုအနေနဲ့ပဲထုတ်ထားတော့။ အဲ့တော့သုံးရင် သူ့ချည်းပဲ full application တခုတည်ဆောက်မရဘူး။ တခြား library တွေ သုံးရတယ်။ Application တခုတည်ဆောက်ဖို့ အရန်သင့် အားလုံး ဥပမာ routing, authentication စတာတွေပါပါရင် framework လို့ခေါ်တာ။ Angular ကျတော့ framework ပေါ့။ All in one ပါတယ်ဆိုတဲ့သဘောပေါ့။ နောက်ပိုင်း Next.js လို framework တွေပေါ်လာတော့တော်တော်အဆင်ပြေသွားတယ်။ ဒါပေမဲ့လိုက်ထဲ့ရတာတွေရှိတုန်းပဲ။
React Framework
Next.js
သူကနောက်ပိုင်း React team ကိုယ်တိုင်က advocate လုပ်တာ။ အဓိက SSR, SSG support တွေပါတယ်။ နောက်ပိုင်း fullstack application ရေးလို့ရအောင်ပါလုပ်ပေးထားတယ် (သုံးသင့်မသုံးသင့်ဆိုတာကနောက်တပိုင်း)။ Template တွေပေးထားတဲ့အတွက် လုပ်ရတာမြန်တယ်။ တခြားကောင်းတာတွေလဲအများကြီးပေါ့။
Remix
သူကလဲ Netx.js လို fullstack framework ပဲ။ server render component စတာတွေလဲ support ပေးတယ်။
State management
State management လို့ပြောရင်တော်တော်များများက misunderstood ဖြစ်ကြတယ်။ State မှာ အဓိက server state, client state ဆိုပြီး ၂မျိုးခွဲရမှာ။
Client state management
Client state မှာ business logic state, component state (UI state) ဆိုပြီး ၂မျိုးထပ်ခွဲလို့ရတယ်။ အဲ့မှာ business logic state ဆိုတာမြင်သာအောင်ပြရရင် e-commerce application တခုကို API ထုတ်ထားတယ်ဆိုပါစို့။ ဒါဆို shopping cart လိုကောင်မျိုးကိုလုပ်တဲ့အခါ addToCart functionality ကို server မှာသွားသွားမသိမ်းပဲနဲ့ client ဘက်မှာပဲသိမ်းထားတာ။ တကယ် check out လုပ်တော့မှ server သွားသိမ်းမှာ။ ခုနက add to card, လုပ်မယ် remove လုပ်မယ်ဆို ဒါမျိုး business logic ကိုကျတော့ ထိန်းဖို့ client state management lib တွေလိုတယ်။ ဥပမာ Redux, Zustand. UI State ကိုကျတော့ useState, useReducer, Context စတာတွေသုံးယုံနဲ့အဆင်ပြေတယ်။
Redux
Functional programming, immutability ကိုအခြေခံတယ်။ complex ဖြစ်တယ်။နောက်ပိုင်းလွယ်အောင် Redux Toolkit ထုတ်ထားတာတောင် သုံးရတာတော်တော်ခက်သေးတယ်။ အဓိက behind the scence, functional programming concept တွေ နားမလည်တာ Flux architecture နားမလည်ရင်ပိုဆိုးတယ်။ Project အကြီးတွေအတွက်ဆိုသင့်တော်တယ်။ နိုင်ငံတကာအလုပ်အကိုင်တွေ ခေါ်စာတွေကြည့်လိုက်ရင် React/Redux ဆိုပြီးတွေ့ရမယ်။ Redux developer tool စတာတွေနဲ့ time travel debugging ထိ ရတော့တော်တော်အဆင်ပြေတယ်
မချစ်သော်လည်းအောင့်ကာနမ်းရမဲ့ lib. API management လုပ်မယ်ဆိုရင် RTK Query ဆိုတာရှိတယ် React Query လိုကောင်မျိုးပဲ။
Zustand
ပိုသေးတယ်။ ပိုရှင်းတယ်။ concept ပိုင်းအရအလုပ်မရှုပ်ဘူး။ ဒါပေသိ small to medium project တွေအတွက်ပဲကောင်းတယ်။ ကြီးလာရင် performance ပြဿနာရှိတယ်။ ကိုယ်ပိုင် deve tool မရှိဘူး။ ဒါပေမဲ့ redux developer tool နဲ့ချိတ်သုံးလို့ရတယ်။ Redux မသုံးမနေရမဟုတ်ရင် သူ့သုံးလို့ရတယ်။
Server state management lib
Server state management ဆိုတာတကယ်က API တွေခေါ်မယ်၊ ဒါပေသိ api1 ကိုချည်း page တခုထဲမှာ ထပ်ခါထပ်ခါခေါ်တာတို့ (duplciate request) နောက်ခေါ်ပြီးသား api တွေကို ပြန်မခေါ်ပဲ caching လုပ်တာတို့ကို လုပ်ပေးတာ။ တချို့က fetch, axios နဲ့မှားတတ်ကြတယ်။ တကယ်က fetch, axio က http client လို့ပဲဆိုရမှာ။
RTK Query
Redux ကိုသုံးရင် RTK Query ကိုသုံးသင့်တယ် server state ဖို့ပေါ့။ တခါတည်း redux developer tool နဲ့ချိတ်လို့ရတယ်။ Redux ကိုနောက်မှာသုံးသွားတာ Redux ecosytem ဆို server state က သူ့ပဲသုံးတာအဆင်ပြေတယ်။
TanStack Query (FKA React Query)
ဒါကလဲ RTK Query လိုပဲ API management, API caching လုပ်တာပဲ။ API Based SPA ဆို သူ့တခုတည်းနဲ့တော်တော်အဆင်ပြေနေပြီ။
Form
React နဲ့ form handling လုပ်လို့ရပေမဲ့တော်တော် verbose ဖြစ်မယ်နောက် validation , error message ဘာညာလဲ လက်ပေါက်ကပ်မယ်။ ဒါမျိုးဖို့ကျတော့ Formik (သူကျ အသုံးများပေမဲ့ repo က update မလုပ်တော့ဘူး open source ရဲ့ပြဿနာ) React Hook Form စတာတွေသုံးလို့ရတယ်။
Testing lib
Jest တို့ React testing lib(Testing lib ) တို့သုံးကြတယ်။ Redux သုံးရင် Redux developer tool ကနေ တခါတည်း reducer တွေကိုစမ်းလို့အဆင်ပြေတယ်။ test code auto ထုတ်ပေးနိုင်တယ်။
Styling , UI
သူတို့ကျတော့ tailwind တော်တော်များများသုံးတယ် ။ နောက် UI Component lib တွေလဲသုံးကျတယ်။ Chakra UI, Material UI စတာမျိုးတွေပေါ့။
Deployment
ဒါကျတော့ Vercel နဲ့ Netlify အသုံးများကျတယ်။ Free tier တွေလဲရှိတယ်။
Programming langage တခုကို လေ့လာဖို. ဘာတွေ တွေကိုလေ့လာရမလဲ။
Six layer model of programming language
UC San Diego ရဲ. Assistant professor တယောက်ရဲ. programming langauge တခုကို layer အမြင်နဲ.ဖော်ပြထားတာကို ပြန်ကောက်နှုတ်ထားတာပါ။
Language တခုမှာ layer အနေနဲ.ခွဲလိုက်ရင် 6 layer ရှိတယ်လို.ဆိုပါတယ် (စာအုပ်တွေမှာတော့အဲ့လိုမခွဲကြဘူး syntax, semantic, pragmantic, runtime enviroment,implementation) အဲ့လိုတွေတော့ခွဲကြတယ်။
၁ Specification
၂ Implementation
၃ Run-time environment
၄ Standard library
၅ Third-party libraries
၆ Community
Language တခုကိုသေသေချာချာနားလည်ဖို. အပေါ်က layer မှာ 1 ကနေ ၅ အထိလေ့လာရမှာပါ။ အဲ့အပြင် design တွေ pattern တွေကလဲပါဦးမှာ ဒီထဲမှာတော့ထဲ့မထားဘူး။
1Specification
Langauge specification ဆိုတာ language တခုရဲ. synatax နဲ. semantic ကိုသတ်မှတ်ထားတဲ့ document တခုလို.ပြောရမှာပါ။ ဘာလို.အဲ့လိုသတ်မှတ်လဲဆို၇င် standard မရှိရင် implementation တွေ တယောက်နဲ.တယောက် မတူပဲဖြစ်ကုန်မယ် semantic အရလွဲကုန်မယ် ဒါကြောင့် specification ထုတ်ထားရတာပါ။ Specification ရှိတဲ့ language တွေက C++,Java,C #,JavaScript အစရှိတာတွေပါ ကျန်တဲ့ PHP, Ruby, Python အစရှိတာတွေက specification မရှိပါဘူး documentation လောက်ပဲရှိပါတယ်။ Specification ကိုသိချင်းအားဖြင့် language ရဲ. syntax , semantic (semantic ကတော့ documentation လောက်နဲ.အကုန်သိဖို.အဆင်မပြေဘူး တခါတလေ implementation ပါသိရမယ်) ကိုနားလည်ပါလိမ့်မယ်။
၂ Implementation
Implemenation ကတော့ ဒီ language ကိုဘယ်လို Implement လုပ်ထားသလဲဆိုတဲ့ specific implementation, ခုနက gcc က C++ compiler နဲ. Microsoft က Visual C++ compiler သည် C++ language တခုတည်းကို ပဲ implement လုပ်ထားတဲ့ different implementation ပါ။ Implementation ကိုသိချင်းအားဖြင့် ကို.ရဲ. language အသေးစိတ် low level ဘယ်လိုအလုပ်လုပ်သလဲဆိုတာကို နားလည်ပါလိမ့်မယ်။ Compiler တွေ langauge ကိုဘယ်လိုတည်ဆောက်ထားတယ်ဆိုတာကို နားလည်မှာပါ။
၃ Runtime enviroment
ဒါကတော့ ကို. program ကို run ဖို.လုပ်ပေးတဲ့ software system ကိုပြောတာပါ။ C # ဆို CLR, Java ဆို JVM, JS ဆို JavaScript Engine, Python ဆို CPyton interpreter , PHP ဆို zend engine byte code interpreter အစရှိတာတွေပါ။ ဒီ runtime system တွေကို နားလည်ပြီဆိုရင် language တခုရဲ. contruct တွေ ဘယ်လိုအလုပ်လုပ်တယ်ဆိုတာကို သေသေချာချာနားလည်မှာပါ။
၄ Standard Library
ဒါကတော့ language မှာပါလာတဲ့ built in API တွေကိုဆိုလိုတာပါ။ Language တခုကိုသင်ရင် မသိမဖြင့်သိသင့်တဲ့ API တွေပါ။ ဒီကောင်တွေမသိပဲ Application ရေးလို.မရပါဘူး။
၅ Third Party Library
ဒါကတော့ language ကပေးထားတဲ့ built in API တွေမဟုတ်ပဲ ပြင်ပ vendeor ကနေ ပေးထားတဲ့ library တွေ framework တွေကိုဆိုလိုတာပါ။ Framework တွေသိချင်းအားဖြင့် သက်ဆိုင်ရာ Application ကိုတည်ဆောက်ရမှာလွယ်ကူစေပါလိ့မ်မယ်။ ဥပမာ Java ဆို Spring, PHP ဆို Laravel, C # မှာဆို ASP.NET MVC, JavaScript ဆို React,Angular အစရှိတာတွေပါ။
၆ Community
ဒါကတော့ဒီ langauge အတွက် ဝိုင်းလုပ်နေတဲ့သူတွေပါ။
အဲ့တော့ layer ၁ ကနေ ၅ အတွင်းမှာကိုက ဘယ်နှစ်ခုသိပြီလဲ 1,2,3 သိရင်တော့ ဆရာကျပြီလို.ဆိုရမှာပါ :3
၄-၅ ကိုသိရင်တော့ API user, framewrok user ပါ :3
Layer 1,2,3 ကို နားလည်အောင်ကြိုးစားရဦးမှာပါ။
တကယ်တမ်းက ဒီ layer တွေမှာမပါပေမဲ့ langauge pragmatic တွေ design တွေ language idiom တွေပါသေးတယ်လို.လဲ သိထားရဦးမယ်
http://www.pgbovine.net/what-is-a-programming-language.htm
Software Enginner တယောက်အနေနဲ့ဘာတွေသိသင့်လဲ။
ဒါက General ပေါ့။ Software Enginner က design & architecture & methodlodogy
အစရှိတာတွေကိုကောင်းကောင်းမွန်မွန်သုံးနိုင်ပြီး system build လုပ်တဲ့သူပေါ့။
၃ ပိုင်းခွဲလို့ရမယ်။ Theory, practise, Soft Skill ဆိုပြီးတော့
Theory အပိုင်းကျတော့ computer science ပေါ့အဓိက ကျတာတွေကတော့ဒါတွေပါ့။
Algorithm & data structure
ကိုယ်တိုင် Algorithm တွေ မရေးရဘူး ဒါမှမဟုတ် data structure တွေ create မလုပ်ရဘူး(လုပ်ရတဲ့အလုပ်လဲရှိတာပေါ့)
ဆိုရင်တောင် Algorithmic thinking, problem solving ကဒီကောင်တွေဆီကနေရနိုင်တယ်။ မရှိမဖြစ်ကိုသိသင့်တယ်။
Space complexity, time complexity စတာတွေကို နားလည်သင့်တယ်၊ Big O လိုကောင်မျိုးနားမလည်ရင် large scale
ဒါမှမဟုတ် တချို့ solution တွေမှာ performance ကောင်းအောင် ဒါမှမဟုတ် cost သက်သာအောင်ဘယ်လိုလုပ်ရမလဲသိမှာမဟုတ်ဘူး။
Software Design Princple & Architecture
ဒါကျတော့ clean code, SOLID Princple, design pattern, architecture စတာတွေ၊ ဒီကောင်တွေ နားမလည်ရင်
code တော့ရေးနိုင်မယ် အလုပ်လုပ်မယ် ဒါပေသိ good code မဖြစ်ဘူး။ နောက်တခုက maintain လုပ်တာ။ featureအသစ်ထဲ့တာမှာအဆင်မပြေဖြစ်မယ်။
Unit testing, TDD, Refactoring, စတာတွေ နားမလည်ရင် automated test တွေရေးဖို့ခက်မယ် well design code မဖြစ်နိုင်ဘူးပေါ့။
Micorservice architecture pattern တို့ Dev-Ops တို့အစရှိတာတွေကလဲ ဒီဘက်မှာ မသိမဖြစ်ဖြစ်လာပြီ။
နောက် distributed computing concept လိုကောင်တွေပေါ့၊
Software Development methodlodogy
ဒါတွေကျတော့ Agile တို့ Scurm တို့ပေါ့။ ဒီ concept တွေနားမလည်ရင်လဲ အလုပ်လုပ်ဖို့မလွယ်ဘူး။
Database
ဒါကျတော့ RDBMS,NoSQL ဘာဖြစ်ဖြစ် application တိုင်းမှာ မပါမဖြစ်သိရမှာတွေ။
Database modelling, SQL အစရှိတာတွေက backend developer တိုင်းမဖြစ်မနေနားလည်ထားရမှာ။
Security Best practise
OWASP top 10 လိုကောင်တွေ, real world မှာမပါမဖြစ်သုံးရမဲ့ concept တွေ encoding, encryption, hashing, certificate,
digital signature အစရှိတဲ့ concept တွေ
Programming langauge concept
ဒါကတော့ programming language theory ထဲကကောင်တွေ ဥပမာ type system တွေ language paradigm တွေ ေ
ဥပမာ Imperative, OOP, Functional programming စတာတွေ။
Practise ပိုင်း
သူကျတော့ တကယ်လုပ်ရတဲ့အပိုင်း
Language
backend ပဲဖြစ်ဖြစ် frontend ပဲဖြစ်ဖြစ် programming langauge တခုခုကတော့သိရမှာ။
Static type, Dynamic typed , type system ၂ ခုကတခုစီရယ်။ Paradgim မတူတဲ့ language တွေရယ်သိထားရင်ပိုကောင်းတယ်။
Framework
ဒါကတော့ language နဲ့လုပ်ရမဲ့ task အပေါ်မူတည်ပြီး Java ဆို Spring Boot လိုကောင်မျိုး, JS ဆို React, Angular လိုကောင်မျိုး
ကိုဆိုချင်တာ Framework မသိရင်အလုပ်လုပ်ဖို့ကလဲ အဆင်မပြေဘူး။
Others tools
သူကျတော့ ခုနက Dev-Ops လိုကောင်မျိုးတွေ, cloud ဆိုလဲ ဆိုင်ရာ AWS, Azure စတာမျိုးတွေ။ containerization တွေ ေ
နောက် Git လိုကောင်မျိုးတွေ ဒါတွေက daily life မှာသုံးနေတာဖြစ်တဲ့ကောင်တွေ။ နောက် Unix,Linx အစရှိတဲ့ဟာတွေ။
Soft Skill
ဒါကျတော့ communication, team building , stress management နောက် time management, work life balance,
burn out မဖြစ်အောင်လုပ်တာတွေ။ continuous learning စတာတွေပေါ့။
ကျန်တာတွေရှိရင်လဲ ဖြည့်ပေးကြပါ။
Free MOOC course
MOOC ဆိုတာ massive open online course ကိုပြောတာ တနည်း အခကြေးငွေမပေးရတဲ့ online တက်လို့ရတဲ့ course တွေ
Computer, Business, Biology, Finance ကစပြီးတော်တော်များများဘာသာရပ်တွေ ပါတယ်၊ Category အလိုက်ရွေးပြီးတက်ယုံပဲ။
https://www.mooc.org/courses
The Programmer's brain ဆိုတဲ့စာအုပ် cognitive science ဘက်ကနေ programmer တွေအတွက်ရေးထားတာ။
သီတင်းကျွတ်လက်ဆောင်ပေါ့။ အရေးကြီးတာလေးတွေပေါ့ summary ပါပဲ။
Code ရေးတဲ့အခါ confuse ဖြစ်ရတာရှိတယ် ဒါသဘာဝပဲ။ဖြစ်ရတဲ့အကြောင်းက ၃ချက်
1.Lack of knowledge
ဥပမာ Array ဆိုတာဘာမှန်းမသိတာမျိုး။ Thread ဆိုတာဘာမှန်းမသိတာမျိုး။ဆိုင်ရာ language အသစ်မှာသုံးတဲ့
idiom တွေ concept တွေကိုနားမလည်တာမျိုး။ ဒါဖြစ်ရတာက long term memory မှာဖတ်ထားတာနည်းလို့။
Long term memory ဆိုတာနားလည်အောင်ပြောရရင် အသေသိမ်းဆည်းထားတဲ့မှတ်ဉာဏ်မျိုး ဥပမာ အလီလိုကောင်မျိုးတွေ။
Computer အရပြောရင် hard disk နဲ့တူတာ။ Flash card သုံးတာမျိုး။ ခနခနလေ့ကျင့်တာမျိုး။
နောက်တခုက retrival လုပ်တာ (ပြန်ပြန်စဉ်းစားတာ recall ခေါ်တာ) ရေးနေရင်းနဲ့ စက်ဘီးစီးသလိုမျိုး muscle memory လိုမျိုး
အလိုလိုဖြစ်အောင်လေ့ကျင့်တာမျိုးက ပိုကောင်းလာနိုင်တယ်။
2.Lack of information
ဒါက project နဲ့ဆိုင်တဲ့ domain, business logic, background မသိတာမျိုး။ ဒါကျတော့ short term moemory နဲ့ဆိုင်တယ်။ ခနပဲသိမ်းတာတွေမှတ်တာမျိုး။
ဥပမာ လောလောဆယ်ကြည့်နေတဲ့ method မှာဘယ် variable ကဘာကိုဆိုလိုတာဒါမျိုး။ လူတွေက ၆ ခု ၇ ခုလောက်ပဲ စက္ကန့် ၃၀ လောက်ကြာမှတ်နိုင်တာ။
Short term memory မှာပေါ့။ Computer term အရဆို RAM လိုပေါ့။
ဒီမှာကျတော့ chess player တွေကိုလေ့လာပြီး သုတေသန လုပ်ထားတာရှိတယ်။
chess ကစားကွက်တွေ မှတ်တဲ့အခါ သူတို့ကြုံဖူးပြီးသား standard pattern တွေအနေနဲ့မှတ််တော့ ပိုလွယ်တယ်။ Chunking လို့ခေါ်တာ။
ဥပမာ ပေးရရင် inserting sort ကိုသိတဲ့သူက code ကိုမြင်တာနဲ့ဒါ inserting sort ဆိုတာသိတယ်။
line by line memorize လုပ်စရာမလိုဘူး။ inserting sort မသိတဲ့သူကျတော့ loop တွေ swap တွေလိုက်မှတ်နေရမှာ။ပိုခက်သွားတယ်။
အဲ့တော့ design pattern လိုကောင်မျိုးတွေသုံးတာက ခုနကလို chunking ဆိုတာမျိုးနဲ့ကိုက်တယ်။ ပိုမှတ်ရလွယ်တယ်။
3.Lack of processing power in brain
ဒါကျတော့ ဥပမာ complex code တွေဖြစ်လာတဲ့အခါ ဘယ်ကနေဘယ်ကိုသွားတယ် ဘာတွေလုပ်သွားတယ်ဆိုတာကိုခေါင်းထဲမှာ map မလုပ်နိုင်တော့တာမျိုး။
ဒါကျတော့ brain မှာ x+y ဆို x ကဘယ်လောက် y ကဘယ်လောက်ဒါမျိုးတွက်နိုင်တာမျိုး။ CPU နဲ့သွားတူတယ်။
Complex ဖြစ်တာတွေကိုဘယ်လောက်နားလည်နိုင်လဲ။ ဘယ်လို abstractly think လုပ်နိုင်သလဲအပေါ်မူတည်တယ်။
Complex ဖြစ်ပြီး အဓိပ္ပာယ်မရှိတဲ့ တနည်း clean code မဖြစ်တဲ့ code တွေကို ဖတ်ရတာ processing power ပိုကုန်တယ်။
အဲ့တော့ clean code ဖြစ်ပြီး meaniful ဖြစ်တဲ့ name တွေ short method တွေ ရေးတာမျိုးက ဒိီပြဿနာကိုဖြေရှင်းနိုင်တယ်။
Complex code တွေဖတ် တဲ့အခါ ဒီလို conginitive load တွေရှိတယ်။
1. Intristic congnitive load
Problem ရဲ့မူရင်းပြဿနာကြောင့်လိုတဲ့ congnitive load, ဥပမာ problem ကိုယ်တိုင်ကခက်နေတဲ့ပမာဏပဲ။
Computational geometry မှာ rotation လုပ်မယ်ဆိုရင် computer graphic, geometry စတာတွေကသိရမှာမဟုတ်ရင်
equation မြင်လဲ ဘာလုပ်လို့လုပ်နေမှန်းသိမှာမဟုတ်ဘူး။ ဒါကတော့ရှောင်မရဘူး။
Complex problem တွေကို divide conquer နည်းနဲ့ problem ကြီးကို အသေးလေးတွေခွဲထုတ်ပြီး ရှင်းတာမျိုးတော့ရမယ်။
2. Extraneous cognitive load
Accidental complexity ပေါ့။ problem ကိုရှင်းပုံရှင်းနည်းမှားတာ ဥပမာ မလိုအပ်ပဲ complex ဖြစ်တဲ့ programming concept မျိုးသုံးတာ
(ဥပမာ synchronous နဲ့ရေးလို့ရတာကို asynchronous , reactive ရေးတော့ အပို complexity တက်လာတာ)။
နောက် proper design, clean code, refactor မလုပ်ပဲရေးထားတာ။ အဲ့ကောင်တွေကို code smell ဖယ်။ refactor လုပ်ရင်သက်သာနိုင်တယ်။
3. Germane load
ဒါကတော့ခုနက တွေးနေတာတွေကို long term memory မှာသွားသိမ်းရတဲ့ကိစ္စ။
Expert တွေကျတော့ဘယ်လိုအားသာသလဲဆိုတော့ ဆပ်စပ်ပြီးတွေးတယ် သိမ်းတယ်။
ဥပမာ encryption နဲ့ ဲ့hashing ,security ဘယ်လိုဆပ်စပ်သလဲဆိုတာစဉ်းစားပြီးသိမ်းတော့ ပိုလွယ်တယ်။
Knowledge သဘောက semantic tree လို တခုနဲ့တခုချိတ်ဆက်ပြီး သိမ်းရတာ။
Beginner တွေကျတော့ အဲ့လို မဆပ်စပ်နိုင်တော့ ပိုခက်တယ်။
Reaching deeper understanding of code
အရေးကြီးတဲ့ focal point ဥပမာ main method ကိုရှာပြီးအဲ့ကနေ expand လုပ်။
ပြီးတော့အရေးကြီးတာတွေကို summary လုပ်။ Abstract လုပ်ပြီးတော့ ခုနက component တွေ ဆပ်စပ်ပုံကို နားလည်အောင်လုပ်။
ဥပမာ class တခုက ကြီးနေပေမဲ့ သူရဲ့အလုပ်ကဘာပဲလုပ်တယ်ဆိုတာရှိမှာပဲ အဲ့လိုနည်းနဲ့ abstractly think ရင်ပိုနားလည်မယ်။
Problem solving ကောင်းအောင်
Mental model တွေသုံးတာ။ Mental model ဆိုတာ တကယ့်လက်ရှိကောင်တွေကို နားလည်ရလွယ်အောင်ရှင်းထုတ်ပြီးပုံစံငယ်တခုလို ထုတ်ထားတာ။
ဥပမာ Architecture pattern တွေ, design pattern တွေ algorithm တွေ data structure တွေက mental model ပဲ။
Sorting စီတယ်ဆိုရင် algorithm လိုက် စီပုံစီနည်းမတူပေမဲ့ ရှိသမျှ item တွေကို pairwise comparision လုပ်တာမျိုးကတော့ တူတယ်
ဒါမျိုးကို mental model လို့ဆိုတာ။ ဥပမာ Event Loop လို့ဆိုလိုက်ရင် JS event loop ဖြစ်ဖြစ် Spring WebFlux ဖြစ်ဖြစ်။
Nginx event loop ဖြစ်ဖြစ် mental model representation ကအတူတူပဲ။ တခုကိုသိထားတဲ့အခါ နောက်တခုက အေးဆေးပဲနားလည်ရလွယ်တယ်။
ပထမဆုံး language သင်ပြီးတဲ့အခါ နောက် ်language တွေ သင်ရတာ လွယ်သွားတာ (paradigm တူရင်ပေါ့)
ခုနက mental model လို knowledge တွေကို ုtransfer လုပ်လို့ရလို့။ transfer learning လို့ခေါ်တာ။
ခပ်ဆင်ဆင်တူပေမဲ့ကွဲတာတွေကိုပါလေ့လာနိုင်ရင်ပို in-depth ကိုနားလည်နိုင်တယ်
ဥပမာ Java က int နဲ့ Go က int ကဘာကွာသလဲဆိုတာမျိုးပေါ့။
ခုနက transfer learning ကြောင့် Java int က Go int နဲ့တူပါတယ်ဆိုတာမျိုး တွေးလိုက်တာ ။
Java inteface က Go interface နဲ့တူတူပဲလို့ထင်လိုက်တာကျတော့ Negative transfer လို့ခေါ်တာ။
ဒါမို့ တူသယောင်နဲ့ကွဲတာတွေကိုလဲသိဖို့လိုတယ်ပြောတာ။
Code ကိုကောင်းကောင်းရေးဖို့ ဖတ်ရနားလည်အောင်လုပ်ဖို့ဆို ခုနကအပေါ်က congnitive load နည်းအောင်ရေး တနည်း clean code သုံး။
Keep it simple stupid လုပ်ပေါ့။လွယ်သလားဆိုတော့ရှင်းအောင်လုပ်ရတာလဲ တော်တော်ရှုပ်တဲ့အလုပ်ပဲ။
Complex problem တွေ solve လုပ်နိုင်ဖို့ကျတော့ ခေါင်းထဲမှာကိုယ် solve လုပ်မဲ့ problem မျိုး အဆင့်မဟုတ်တောင်
similar တူတာဆင်တာမျိုး solve ဖို့လိုတယ်။ ခေါင်းထဲကရှိတာတွေကို ဆင့်ပွားတွေးပြီး pattern match လုပ်ပြီးမှ problem အသစ်ကို solve လုပ်နိုင်မှာ။
ခေါင်းထဲမှာ အရင်ရှိထားဖို့လိုတယ်လို့ဆိုချင်တာ။ Data structure တွေ algorithm တွေလေ့လာ တယ်ဆိုတာ အဲ့တာ။
Programming language semantic တောင်သေချာနားမလည်ပဲ compiler ထရေးဖို့လောက်ကတော့မဖြစ်နိုင်ဘူးဆိုတာမျိုး။
Click here to claim your Sponsored Listing.
Website
Address
Yangon
Hlaing Campus
Yangon
Ever since its foundation in 1992, ACE Data Systems has been the most successful IT Services company
Yankin Street
Yangon, GOLDENCITYCONDO,OFFICETOWER,ROOFTOP
Prepare yourself everyday to be the best
Ayeyar 3rd Street
Yangon, 11031
#PLAY FOR FIGHT⚽ #FIGHT FOR WIN🎉🎊 #STRENGTH OF YOUTH🏃♂️⚽ #NEVER GIVE UP💪