Coding Standard (သို့မဟုတ်) အခြေခံကုတ်နည်း စနစ်များ အပိုင်း(၁)

Coding Standard (သို့မဟုတ်) အခြေခံကုတ်နည်း စနစ်များ အပိုင်း(၁)

Coding Standard

ဖြစ်စဉ် အဖွင့်

ကိုယ်ရေးထားတဲ့ ပရိုဂရမ်ပဲ​ဖြစ်ဖြစ် အခြား Developer တွေ ရေးထားတဲ့ ပရိုဂရမ်ပဲဖြစ်ဖြစ် source code ကို ဖတ်တဲ့အချိန် ဖတ်ရခက်လိုက်တာ ဘာတွေရေးလို့ ရေးထားမှန်းမသိဘူး လို့ တွေးမိတဲ့အချိန်တွေ ရှိကြမှာပါ။ ဘာလို့အဲ့လောက် ဖြစ်သလိုရေးထားရတာလဲ? ဒီစွဲချက်အတွက် တရားခံရှာမယ်ဆိုရင် နံပါတ်(၁) တရားခံကတော့ Coding Standard မရှိလို့ ဖြစ်ပါတယ်။

Coding Standard ဆိုတာ ဘာလဲ?

ပရောဂျက်တစ်ခု စတော့မယ်ဟေ့ဆိုရင် တစ်ယောက်တည်းပဲ​ရေးရေး အဖွဲ့လိုက်ပဲ​ရေးရေး ကုတ်ရေးတဲ့အခါ လိုက်နာရမယ့် စံသတ်မှတ်ချက်တွေ ရှိပါတယ်။ ဟ ပရိုဂရမ်ရေးတာပဲ​ ကိုယ့်စိတ်ကူးနဲ့ကိုယ် ကိုယ့်ရဲ့ Problem Solving Skill နဲ့ကိုယ် စိတ်ထဲရှိတဲ့အတိုင်းရေးမှာပေါ့လို့ တွေးစရာရှိတယ်။ ဒါလည်း မှန်ပါတယ်။ ကိုယ်အားသန်တဲ့ နည်းနဲ့ ပြဿနာကို ဖြေရှင်းလို့ရပေမယ့် ကိုယ်ဖြေရှင်းထားတဲ့ပုံကို တစ်ယောက်မှ နားမလည်ဘူး။ i means တစ်ယောက်မှ။ ဆိုလိုတာက နောင်တစ်ချိန် ကိုယ်တိုင်တောင် နားမလည်နိုင်တဲ့ ဖြေရှင်းနည်း ဖြစ်သွားမှာ မို့လို့ပြောတာပါ။

စံ ဆိုလို့ ထူးထူးဆန်းဆန်း ခက်ခက်ခဲခဲ သတ်မှတ် လိုက်နာရမယ့် စာအုပ်ကြီးတွေလည်း မဟုတ်ပါဘူး။ နေ့စဉ် ကုတ်နေတဲ့ အချိန်မှာ သတိလေးကပ်ပြီး ရေးရင် အဆင်ပြေတဲ့ အနေအထားပါ။(yeah သတိပဋ္ဌာန် is everywhere :D ) ဉပမာ ပရောဂျက်မစခင်မှာ ဒါမျိုးလေး တိုင်ပင်ထားမယ်

  • variable name တွေကို snake_case နဲ့ ကြေညာမယ်
  • class name တွေကို UpperCamelCase
  • method တွေကို camelCase
  • constant တွေကို UPPER_SNAKE_CASE
  • folder name တွေကို snake_case

စသည်ဖြင့်ပေါ့ ဘယ်နေရာမှာ ဘယ် naming convention ကို သုံးမယ်ဆိုတာလောက်နဲ့ အရင်စရင် အဆင်ပြေမှာပါ။ အသုံးများတဲ့ naming convention တွေက

  • snake_case : စာလုံးအသေးတွေကို underscore နဲ့ဆက်ထားတာ။
  • camelCase : ပထမ စကားလုံးကို အသေးနဲ့ရေးပြီး ကျန်တဲ့ စကားလုံးတွေရဲ့ အစကို Capital Letter နဲ့ ရေးတာမျိုး။
  • UpperCamelCase : စကားလုံးတိုင်းရဲ့ အစကို Capital Letter နဲ့ ရေးတာမျိုး။

ဒါတွေကို ကိုယ့်ဘာသာကိုယ် ခေါင်းခြောက်ခံပြီး စဉ်းစားစရာလည်း မလိုပါဘူး။ များသောအားဖြင့် Coding Standard နဲ့ Naming Convention တွေကို သက်ဆိုင်ရာ Programming Language အလိုက်က Official သတ်မှတ်ပေးထားတာလည်း ရှိတယ် Widely Accepted ဆိုပြီး community က သတ်မှတ်ပေးထားတွေလည်း ရှိတယ်။တစ်ချို့ language တွေကတော့ file name ပေးတာကိုပါ လိုက်ပြီး ချူပ်ချယ်တာမျိုးလည်းရှိတယ်​ ဉပမာ Java, java မှာဆိုရင် file name နဲ့ အဲ့ဖိုင်မှာ ရေးမယ့် class name ကို အတူတူပေးရတာမျိုး ရှိတယ်။ ဒါကလည်း ကောင်းတဲ့ စနစ်တစ်ခုပါပဲ။ Dart မှာလိုမျိုး မကန့်သတ်တဲ့ language မှာတောင် ကျွန်တော်တို့ Java ကအတိုင်း class name နဲ့ file name ကို အတူတူပေးနေတုန်းပဲ။ ဘယ်တစ်ခုကိုပဲ ယူယူ ကိုယ့်ပရောဂျက်မှာ Coding Standard တစ်ခု သတ်သတ်မှတ်မှတ်ထားပြီး ရေးရင် အဆင်ပြေပြီ။

မရေးဘူးကွာ ဆိုရင် ဘာဆက်ဖြစ်လာမလဲ?

  • အချိန်ကြာလာတာနဲ့ အမျှ ကိုယ့်ကုတ်ကိုယ် ကိုယ့်ဘာသာကိုယ်ပါ နားမလည်နိုင် ဖြစ်လာမယ်။ (Code Readability ကျလာမယ်ပေါ့)
  • Bug တစ်ခု တွေ့လို့ debugging လုပ်တဲ့ keyword တစ်ခုကို ကြည့်ပြီး ဒီကောင်က Variable လား Class လား Function လား ဆိုတာကို ချက်ခြင်း မသိနိုင်ပဲ ပြန်ပြန်ရှာနေရတာနဲ့ အချိန်ကုန်လာမယ်။ ( Code Maintainability လည်း မရှိနိုင်တော့ဘူး)
  • တစ်ခြားသူတွေနဲ့ ပေါင်းပြီး ရေးဖို့ အဆင်မပြေဖြစ်လာမယ်။ နောက်ထပ်လာပေါင်းတဲ့သူကို ရှင်းပြတဲ့အချိန် ပိုကုန်လာပြီး အသစ်ရောက်လာတဲ့သူတွေ အနေနဲ့ နားလည်ရခက်တဲ့ ပရိုဂရမ် ဖြစ်လာမယ်။
  • ကိုယ့် ပရောဂျက် နဲ့ အခြား ပရောဂျက်တွေ ပေါင်းရတဲ့အခါမှာလည်း Coding Standard တစ်ခုကို လိုက်နာပြီး ရေးတဲ့ ပရောဂျက်တွေနဲ့ အံဝင်ခွင်ကျ ပေါင်းနိုင်ဖို့ ခက်မယ်။ ဉပမာ PHP က Laravel ဆိုရင် PSR Standards နဲ့ ရေးထားကြတာ။​​ဒီတော့ PSR ကို လိုက်နာတဲ့ အခြား ပရောဂျက်နဲ့ ပေါင်းဖို့ အဆင်ပြေတယ်။ တစ်ယောက် folder တစ်ခုစီနဲ့ ယူပြီး ရေးကြမယ်ဆိုရင်တော့လည်း တစ်မျိုး :P
  • နောက်ဆုံးတစ်ခုကတော့ ကိုယ့်ရဲ့ Professionalism and Reputation ကို ထိခိုက်တယ်။ ကျွန်တော်တို့လိုမျိုးပေါ့ ကော်ပိုရိတ်မှာ ကိုယ့်ဘာသာကိုယ် အကောင်ကြီး ထင်နေတာ Outsource Team တစ်ခုနဲ့ အတူ တွဲလုပ်ရတဲ့အချိန် ဟိုဘက်က ကလေးတွေက အစ်ကိုတို့ရဲ့ coding standard လေး ကြိုပေးထားပါဉီးခင်ဗျဆိုပြီး မီတင်မှာ တောင်းတော့ ကိုယ့်မှာ ခွေးအကြီးလှည်းနင်းခံရသလို အအအိအိ တွေ ဖြစ်ကုန်ရော။ တကယ်ကို သိက္ခာကျပါတယ်။

Coding Standard တစ်ခုကို လိုက်နာပြီး ရေးမယ်ဆိုရင်တော့ ကောင်းကျိုး အနန္တ ရမယ်ဗျား :D ရေးရင်းနဲ့ တရားဟောတဲ့ပုံစံ ပေါက်လာပြီ :P

  • အပေါ်က ပြဿနာတွေကို အော်တိုမစ်တစ် ဖြေရှင်းပြီးသား ဖြစ်သွားမယ်
  • ကိုယ်သုံးနေတဲ့ IDE / Code Editor တွေက ကိုယ့်ကို ကူညီပေးနိုင်လာမယ်။​ ရေးနေတဲ့အချိန် coding standard နဲ့ မညီတာရှိရင် ချက်ခြင်း အသိပေးလာနိုင်လို့ တန်းပြင်နိုင်မယ်။ မှားလေ့မှားထ ရှိတဲ့ အမှားတွေ မဖြစ်နိုင်တော့ဘူးပေါ့။
  • ပရော်ဖက်ရှင်နယ်ပုံစံ ပိုပေါက်လာမယ်။ Linux kernel ကို ရေးခဲ့တဲ့ Linus Torvalds ပြောသလိုပဲ “Talk is cheap. Show me the code.” ဆိုရင် ကိုယ့်ကုတ်ကို ပြလိုက်တာနဲ့ ဟ ဒိကောင်တွေက မိုက်လှချည်လား “Code is cool” လို့ ဖြစ်သွားမယ်။

ခင်ဗျားတို့ရော ဘယ်ပရောဂျက်တွေမှာ ဘယ်စံတွေ သုံးပြီး ရေးနေကြတုန်း?

ဘယ်သူတွေကို ရည်ရွယ်လဲ?

Coding Standard ရှိမှန်းမသိတဲ့သူတွေ ရှိမှန်းသိလည်း မသုံးတဲ့သူတွေ

ဘာတွေ ပြောမှာလဲ

  • coding standard ဆိုတာ ဘာလဲ?
  • naming convention
  • မလိုက်နာရင် ဘာဆိုးကျိုးတွေ ကြုံရမလဲ?
  • လိုက်နာရင် ဘာကောင်းကျိုးတွေ ရမလဲ?
  • လိုက်နာမယ်ဆိုရင် ဘယ်က စရမလဲ?
  • Tools and Documentaion တွေ ညွှန်ပေးရမယ်။
  • နောက် ကိုယ်တွေ့ကြုံရတဲ့ အဖြစ် -> Professionalism , Image ကို ထိခိုက်ပုံ နဲ့ တိုးတက်ပုံ
  • ဉပမာ Languange တွေ အနေနဲ့ PHP(Laravel), JS(Node,Express), Dart(Flutter) နဲ့ Java က ဖိုင် - Class နာမည် တူနေရပုံတွေ ထည့်မယ်။

ပုဂ္ဂလ ဓိ၎ာန် ဆိုပေမယ့် ကိုယ့်ကိုယ်ကိုပဲ​ ညွှန်းပြောရမယ်။


Coding Standard (သို့မဟုတ်) အခြေခံကုတ်နည်း စနစ်များ အပိုင်း(၁)

ကိုယ်ရေးထားတဲ့ ပရိုဂရမ်ပဲ​ဖြစ်ဖြစ် အခြား Developer တွေ ရေးထားတဲ့ ပရိုဂရမ်ပဲဖြစ်ဖြစ် source code ကို ဖတ်တဲ့အချိန် ဖတ်ရခက်လိုက်တာ ဘာတွေရေးလို့ ရေးထားမှန်းမသိဘူး လို့ တွေးမိတဲ့အချိန်တွေ ရှိကြမှာပါ။ ဘာလို့အဲ့လောက် ဖြစ်သလိုရေးထားရတာလဲ? ဒီစွဲချက်အတွက် တရားခံရှာမယ်ဆိုရင် နံပါတ်(၁) တရားခံကတော့ Coding Standard မရှိလို့ ဖြစ်ပါတယ်။

Coding Standard ဆိုတာ ဘာလဲ? ပရောဂျက်တစ်ခု စတော့မယ်ဟေ့ဆိုရင် တစ်ယောက်တည်းပဲ​ရေးရေး အဖွဲ့လိုက်ပဲ​ရေးရေး ကုတ်ရေးတဲ့အခါ လိုက်နာရမယ့် စံသတ်မှတ်ချက်တွေ ရှိပါတယ်။ ဟ ပရိုဂရမ်ရေးတာပဲ​ ကိုယ့်စိတ်ကူးနဲ့ကိုယ် ကိုယ့်ရဲ့ Problem Solving Skill နဲ့ကိုယ် စိတ်ထဲရှိတဲ့အတိုင်းရေးမှာပေါ့လို့ တွေးစရာရှိတယ်။ ဒါလည်း မှန်ပါတယ်။ ကိုယ်အားသန်တဲ့ နည်းနဲ့ ပြဿနာကို ဖြေရှင်းလို့ရပေမယ့် ကိုယ်ဖြေရှင်းထားတဲ့ပုံကို တစ်ယောက်မှ နားမလည်ဘူး။ i means တစ်ယောက်မှ။ ဆိုလိုတာက နောင်တစ်ချိန် ကိုယ်တိုင်တောင် နားမလည်နိုင်တဲ့ ဖြေရှင်းနည်း ဖြစ်သွားမှာ မို့လို့ပြောတာပါ။

စံ ဆိုလို့ ထူးထူးဆန်းဆန်း ခက်ခက်ခဲခဲ သတ်မှတ် လိုက်နာရမယ့် စာအုပ်ကြီးတွေလည်း မဟုတ်ပါဘူး။ နေ့စဉ် ကုတ်နေတဲ့ အချိန်မှာ သတိလေးကပ်ပြီး ရေးရင် အဆင်ပြေတဲ့ အနေအထားပါ။(yeah သတိပဋ္ဌာန် is everywhere :D ) ဉပမာ ပရောဂျက်မစခင်မှာ ဒါမျိုးလေး တိုင်ပင်ထားမယ်

  • variable name တွေကို snake_case နဲ့ ကြေညာမယ်
  • class name တွေကို UpperCamelCase
  • method တွေကို camelCase
  • constant တွေကို UPPER_SNAKE_CASE
  • folder name တွေကို snake_case

စသည်ဖြင့်ပေါ့ ဘယ်နေရာမှာ ဘယ် naming convention ကို သုံးမယ်ဆိုတာလောက်နဲ့ အရင်စရင် အဆင်ပြေမှာပါ။ အသုံးများတဲ့ naming convention တွေက

  • snake_case : စာလုံးအသေးတွေကို underscore နဲ့ဆက်ထားတာ။
  • camelCase : ပထမ စကားလုံးကို အသေးနဲ့ရေးပြီး ကျန်တဲ့ စကားလုံးတွေရဲ့ အစကို Capital Letter နဲ့ ရေးတာမျိုး။
  • UpperCamelCase : စကားလုံးတိုင်းရဲ့ အစကို Capital Letter နဲ့ ရေးတာမျိုး။

ဒါတွေကို ကိုယ့်ဘာသာကိုယ် ခေါင်းခြောက်ခံပြီး စဉ်းစားစရာလည်း မလိုပါဘူး။ များသောအားဖြင့် Coding Standard နဲ့ Naming Convention တွေကို သက်ဆိုင်ရာ Programming Language အလိုက်က Official သတ်မှတ်ပေးထားတာလည်း ရှိတယ် Widely Accepted ဆိုပြီး community က သတ်မှတ်ပေးထားတွေလည်း ရှိတယ်။တစ်ချို့ language တွေကတော့ file name ပေးတာကိုပါ လိုက်ပြီး ချူပ်ချယ်တာမျိုးလည်းရှိတယ်​ ဉပမာ Java, java မှာဆိုရင် file name နဲ့ အဲ့ဖိုင်မှာ ရေးမယ့် class name ကို အတူတူပေးရတာမျိုး ရှိတယ်။ ဒါကလည်း ကောင်းတဲ့ စနစ်တစ်ခုပါပဲ။ Dart မှာလိုမျိုး မကန့်သတ်တဲ့ language မှာတောင် ကျွန်တော်တို့ Java ကအတိုင်း class name နဲ့ file name ကို အတူတူပေးနေတုန်းပဲ။ ဘယ်တစ်ခုကိုပဲ ယူယူ ကိုယ့်ပရောဂျက်မှာ Coding Standard တစ်ခု သတ်သတ်မှတ်မှတ်ထားပြီး ရေးရင် အဆင်ပြေပြီ။

မရေးဘူးကွာ ဆိုရင် ဘာဆက်ဖြစ်လာမလဲ?

  • အချိန်ကြာလာတာနဲ့ အမျှ ကိုယ့်ကုတ်ကိုယ် ကိုယ့်ဘာသာကိုယ်ပါ နားမလည်နိုင် ဖြစ်လာမယ်။ (Code Readability ကျလာမယ်ပေါ့)
  • Bug တစ်ခု တွေ့လို့ debugging လုပ်တဲ့ keyword တစ်ခုကို ကြည့်ပြီး ဒီကောင်က Variable လား Class လား Function လား ဆိုတာကို ချက်ခြင်း မသိနိုင်ပဲ ပြန်ပြန်ရှာနေရတာနဲ့ အချိန်ကုန်လာမယ်။ ( Code Maintainability လည်း မရှိနိုင်တော့ဘူး)
  • တစ်ခြားသူတွေနဲ့ ပေါင်းပြီး ရေးဖို့ အဆင်မပြေဖြစ်လာမယ်။ နောက်ထပ်လာပေါင်းတဲ့သူကို ရှင်းပြတဲ့အချိန် ပိုကုန်လာပြီး အသစ်ရောက်လာတဲ့သူတွေ အနေနဲ့ နားလည်ရခက်တဲ့ ပရိုဂရမ် ဖြစ်လာမယ်။
  • ကိုယ့် ပရောဂျက် နဲ့ အခြား ပရောဂျက်တွေ ပေါင်းရတဲ့အခါမှာလည်း Coding Standard တစ်ခုကို လိုက်နာပြီး ရေးတဲ့ ပရောဂျက်တွေနဲ့ အံဝင်ခွင်ကျ ပေါင်းနိုင်ဖို့ ခက်မယ်။ ဉပမာ PHP က Laravel ဆိုရင် PSR Standards နဲ့ ရေးထားကြတာ။​​ဒီတော့ PSR ကို လိုက်နာတဲ့ အခြား ပရောဂျက်နဲ့ ပေါင်းဖို့ အဆင်ပြေတယ်။ တစ်ယောက် folder တစ်ခုစီနဲ့ ယူပြီး ရေးကြမယ်ဆိုရင်တော့လည်း တစ်မျိုး :P
  • နောက်ဆုံးတစ်ခုကတော့ ကိုယ့်ရဲ့ Professionalism and Reputation ကို ထိခိုက်တယ်။ ကျွန်တော်တို့လိုမျိုးပေါ့ ကော်ပိုရိတ်မှာ ကိုယ့်ဘာသာကိုယ် အကောင်ကြီး ထင်နေတာ Outsource Team တစ်ခုနဲ့ အတူ တွဲလုပ်ရတဲ့အချိန် ဟိုဘက်က ကလေးတွေက အစ်ကိုတို့ရဲ့ coding standard လေး ကြိုပေးထားပါဉီးခင်ဗျဆိုပြီး မီတင်မှာ တောင်းတော့ ကိုယ့်မှာ ခွေးအကြီးလှည်းနင်းခံရသလို အအအိအိ တွေ ဖြစ်ကုန်ရော။ တကယ်ကို သိက္ခာကျပါတယ်။

Coding Standard တစ်ခုကို လိုက်နာပြီး ရေးမယ်ဆိုရင်တော့ ကောင်းကျိုး အနန္တ ရမယ်ဗျား :D ရေးရင်းနဲ့ တရားဟောတဲ့ပုံစံ ပေါက်လာပြီ :P

  • အပေါ်က ပြဿနာတွေကို အော်တိုမစ်တစ် ဖြေရှင်းပြီးသား ဖြစ်သွားမယ်
  • ကိုယ်သုံးနေတဲ့ IDE / Code Editor တွေက ကိုယ့်ကို ကူညီပေးနိုင်လာမယ်။​ ရေးနေတဲ့အချိန် coding standard နဲ့ မညီတာရှိရင် ချက်ခြင်း အသိပေးလာနိုင်လို့ တန်းပြင်နိုင်မယ်။ မှားလေ့မှားထ ရှိတဲ့ အမှားတွေ မဖြစ်နိုင်တော့ဘူးပေါ့။
  • ပရော်ဖက်ရှင်နယ်ပုံစံ ပိုပေါက်လာမယ်။ Linux kernel ကို ရေးခဲ့တဲ့ Linus Torvalds ပြောသလိုပဲ “Talk is cheap. Show me the code.” ဆိုရင် ကိုယ့်ကုတ်ကို ပြလိုက်တာနဲ့ ဟ ဒိကောင်တွေက မိုက်လှချည်လား “Code is cool” လို့ ဖြစ်သွားမယ်။

ခင်ဗျားတို့ရော ဘယ်ပရောဂျက်တွေမှာ ဘယ်စံတွေ သုံးပြီး ရေးနေကြတုန်း?

Written on September 10, 2023