Software Engineering Roadmap
အရင်ကတော့ရေးဖူးတယ် ခုက Advanced Software Engineering အတန်းက သင်ရိုးတွေနဲ့ ထပ်ဖြည့်ထားတာ၊ Ref တွေရောပေါ့ꩻ
ဒီက Developer အများစုမှာ တွေ.ရတဲ့ ပြဿနာက design, architecture, software engineering ပိုင်းအားနည်းတဲပြဿနာပါ။ ဆိုချင်တာက how to better design and structure your program ပေါ့။
ဒီအောက်က ဟာတွေကို တဆင့်ချင်းလေ့လာသင့်ပါတယ်
၁. Clean code ဘယ်လိုရေးရမလဲလေ့လာပါ ဆိုချင်တာက variable ဘယ်လိုပေးရမလဲ function တခုထဲမှာ ဘာတွေပါသင့်သလဲ၊ parameter အရေ အတွက် ဘယ်လောက်ထားသင့်သလဲ ဘာတွေလုပ်သင့်သလဲ ဒါတွေက clean code principle တွေပါ ဟိုးအောက်ဆုံးအဆင့် design အရ သူတို.ကောင်းမှ ကောင်းမှာပါ အဲ့အတွက် (Clean Code, Code Complete, Code Simplicity ,Working with Legacy Code) လိုစာအုပ်တွေ ဖတ်သင့်ပါတယ်။
၂ Software Quality Metric
ဒါကတော့ software quality ကိုထိန်းတဲ့ တိုင်းတာတဲ့ metric တွေအကြောင်းပါ၊ A Metrics Suite for Object Oriented Design ဆိုတဲ့စာအုပ်ကို ဖတ်သင့်ပါတယ်။ SonarQube လို static analysis tool တွေ metric tool ေတွေသုံးတာမျိုးပေါ့။
၃. Object Oriented Programming and Principle
များသောအားဖြင့်က industry မှာ OO programming တွေ အသုံးများပါတယ် အဲ့တော့ Object Oriented Programming ဆိုင်ရာ concept တွေ elements တွေကိုလေ့လာပါ၊ ဥပမာ class က ဘယ်လိုဆောက်သင့်သလဲ ဘယ်ကောင်ကို class ထားသင့်တာလဲ ဘယ်အချိန်မှာ interface သုံးသင့်ပြီး ဘယ်အချိန်မှာ abstract class သုံးသင့်တာလဲ ဆိုင်ရာ OO usage တွေ အကြောင်း အသုံးဝင်ပုံတွေ သေချာလေ့လာသင့်ပါတယ်။ နောက် basic software principle တွေဖြစ်တဲ့ SOLID လိုကောင်မျိုးတွေ နားလည်အောင် လုပ်သင့်ပါတယ်။ ဒီအပိုင်းဖို. Object Oriented Analysis and Design with Application စာအုပ်က ကောင်းပါတယ်။ နောက်တခုက UML ကိုပါတွဲလေ့လာသင့်ပါတယ်။ တကယ်လို. ကိုယ်သုံးနေတဲ့ language က OO မဟုတ်ရင် ဆိုင်ရာ paradigm က ဟာကိုလေ့လာသင့်ပါတယ်
၄ Design Pattern
ဒီအဆင့်ကတော့ OO language တွေဆိုရင် design pattern 23 မျိုး၊ မဟုတ်လို. တခြား language တွေဆိုရင် ဆိုင်ရာ implementation pattern တွေ ဉပမာ JS မှာဆို Module pattern, prototype pattern အစရှိတာတွေလေ့လာသင့်ပါတယ်. စာအုပ်အနေနဲ. GoF Design Pattern စာအုပ်ကို ညွန်းလိုပါတယ်။
၅ Static vs Dynamic Type System
ဒီမှာ အများစုက Java PHP တခုခုပဲသွားတာများတယ် အဲ့တော့ ဆိုင်ရာ static type,dynamic type တွေ အကြောင်း နားလည်အောင် လေ့လာသင့်တယ် Subtyping, Ducktyping,Nonimal Typing,Structural Typing စတာတွေ
၆. Functional Programming
သူက မချစ်သော်လည်းအောင့်ကာနမ်းရတော့မှာ နေရာတိုင်း frontend, backend သုံးလာနေတာ, Higher Order function, Composition, Currying, Composition, Pipe, Category Theory (Monoid, Functor, Monad(Either,MayBe စတာတွေ)), Railway Oriented Programming, Functional Error Handling, နောက် fp နဲ့ပတ်သတ်တဲ့ lib တွေ FP အတွက်ဆို JS နဲ့လေ့လာတာပိုအဆင်ပြေတယ်။ FP power ကိုတော်တော်များများသုံးလို့ရတယ် လူတိုင်းချဉ်းကပ်လို့လွယ်မယ်။
၇ TDD
သူကတော့ Test Driven Development ပါ unit test, integration test အစရှိတာတွေရေးတာကိုလေ့လာတာပါ။ TDD ကိုလေ့လာမယ်ဆိုရင် refactoring ကို နားလည်မှ ပိုအဆင်ပြေမှာပါ။ Refactoring ကိုလေ့လာမယ်ဆိိုလဲ design pattern, architecture pattern တွေကို သိမှ အဲ့အပေါ်က principle တွေကိုသိမှအဆင်ပြေမှာပါ။ Kent Beck ရေးတဲ့ Test Driven Development ဆိုတာကို ဖတ်စေချင်ပါတယ်။ growing object oriented software guided by tests ဆိုတာလဲ မဆိုးဘူး။ TDD ကျတော့ သေချာ နားလည်ဖို့က အပေါ်က ကောင်တွေ နားလည်မှရမှာ ဥပမာ SOLID principle လောက် ကောင်းကောင်းနားမလည်ရင် ရေးလို့ရမှာမဟုတ်ဘူး။ လေ့ကျင့်ဖို့ကျတော့ TDD-Kata (Code problem) လေးတွေ ရှိတယ် အဲ့ကောင်တွေ လေ့လာလို့ရတယ်။
၈ Refactoring
ဒီအပိုင်းကကျတော့ ခုနက ရေးပြီးသား code တွေကို ဘယ်လိုပြန်ပြီးကောင်းအောင် refactor လုပ်မလဲ ဆိုတာကိုလေ့လာရတာပါ။ Code တွေမှာ ဘယ်လိုအားနည်းချက်တွေရှိသလဲဆိုတဲ့ Code Smell တွေအကြောင်းလေ့လာသင့်ပါတယ်။ Martin Fowler ရဲ. Refactoring ဆိုတဲ့စာအုပ်ကို ညွန်းလိုပါတယ်။ Refactoring အတွက်လဲ Kata တွေရှိပါတယ်။
၉ Architecture Pattern
ဒီအပိုင်းကျတော့ framework ဘက်မှာသုံးတဲ့ pattern တွေ enterprise pattern တွေလေ့လာသင့်ပါတယ်၊ ၊ဥပမာ Android သမားဆို MVC,MVP, MVVM, အစရှိတာတွေ။ JavaEE ဘက်ဆို Dependency Injection, IoC,MVC အစရှိတာတွေ လေ့လာသင့်ပါတယ်။, စာအုပ် အနေနဲ. Pattern of enterprise application architecture, Clean Architecture ကိုလေ့လာသင့်ပါတယ်။
Original link