How does computer work?

ကွန်ပျူတာတက္ကသိုလ်မတက်ခဲ့ရတော့ ကွန်ပျူတာတွေဘယ်လိုအလုပ်လုပ်လဲဆိုတာသေချာ Detail မသိဘူး (Computer တက္ကသိုလ်တက်မှ Abstraction တွေကိုကျော်နိုင်တာမဟုတ်ပါဘူး)။ အားလုံးက Abstraction တွေဘဲဖြစ်နေတယ်။ ဘာလို့လည်းတော့မသိဘူး ဒီ Abstraction တွေကို ဘယ်လို (How) အလုပ်လုပ်လဲဆိုတာကို Programmer စလုပ်ကာစက မစဥ်းစားဖြစ်ဘူး။ High-Level Over View တွေကိုဘဲလေ့လာဖြစ်တယ်။ အခုနောက်ပိုင်း Computer Science နှင့် Math ကို ကိုယ့်ဘာသာ Online က Self Study လုပ်တဲ့အခါမှ Abstraction တို့ How thing work တို့ဆိုတာတွေတွေ့လာရပြီး ဘယ်လိုအရေးကြီးတယ်ဆိုတာ ပိုပိုပြီးသိလာတယ်။

အခုကျွန်တော်တို့သုံးနေတဲ့ Computer ဆိုတာကအများကြီးလုပ်နိုင်တယ်… Program ရေးတာကမစ YouTube တို့ရုပ်ရှင်တို့ကြည့်တာတွေအဆုံးပါဘဲ။ ကျွန်တော်တို့ Laptop ကိုနမူနာကြည့်လိုက်ရအောင်… သူ့ကိုအားသွင်းတယ်… power button နှိပ်လိုက်ရင် OS တက်လာတယ်… ခုနကပြောခဲ့တဲ့ example တွေအကုန်လုံးလုပ်နိုင်သွားတယ်။ ကျွန်တော်အခုပေးလိုက်တဲ့ Example တွေတော်တော်များများက High-Level Overview လို့ပြောနိုင်တယ်။ တကယ်ကို Deep Down သိချင်တယ်ဆိုရင်တော့ အောက်ဖော်ပြပါ Crash Course Computer Science YouTube Video Playlist ကိုကြည့်ကြည့်လိုက်ပါ။

Crash Course Computer Science

ဒီ Playlist ကရှည်တယ်လို့ပြောလို့ရပါတယ်။ ခွဲခွဲပြီးကြည့်မှအဆင်ပြေပါလိမ့်မယ်။ အစပိုင်းမှာ computer တွေဘယ်လိုစဖြစ်ပေါ်တယ်ကစပြီး Electronic ကနေ Binary Number System တွေအကြောင်း…. အဲ့ကတစ်ဆင့် ALU တို့ Logic Gate တွေအကြောင်း… နောက်တစ်ဆင့် Storage RAM (Random Access Memory)၊ Sotrage၊ Operating System၊ Programming Language၊ Software Engineering တို့ကစပြီး ယနေ့ခေတ် Computer Science နှင့်ပါတ်သတ်တာတွေပါရှင်းလင်းထားတာက Animation လေးတွေနှင့်အတော်ကိုစိတ်ဝင်စားဖို့ကောင်းပါတယ်။ ဒီ Course ကိုတက်ပြီးတကယ်နားလည်တယ်ဆိုရင် Abstraction တွေကို Pass ဖြစ်ပြီးတော့ How Thing Work ကိုအနည်းနှင့်အများနားလည်မယ်ဆိုတာတော့အသေအချာပါဘဲ။

ဒီ Post မှာကျွန်တော် Abstraction ဆိုပြီးခဏခဏသုံးသွားတယ်။ မြန်မာလိုဘာသာပြန်ဖို့ကြိုးစားပေမယ့် တိုတိုနှင့်လိုရင်းကိုမရောက်ဘူး abstraction ကိုမြန်မာလို define လုပ်တာနှင့် Post တစ်ခုလောက်ဖြစ်သွားလိမ့်မယ်။ ဒါကြောင့် Abstraction ကိုသေချာရှင်းပြထားတဲ့ Video File ကိုရှာပြီးအောက်မှာပြန်ထည့်ပေးထားတယ်။

Abstraction ဆိုတာဘာလဲ Professor David J. Malan မှရှင်းပြခြင်း

မှတ်ချက်။ ဒီ YouTube Playlist လိုမြန်မာလို Animation လေးတွေနှင့်တစ်နေ့နေ့တော့ရှင်းပြနိုင်ဖို့ကြိုးစားပါဦးမယ်။

Big O Notation ဆိုတာဘာလဲ

Computer ကျောင်းဆင်းတွေဆိုရင်တော့ Big O ဆိုတာဘာလဲသိကြမယ်ထင်တယ်။ ကျွန်တော်တော့ ကိုယ့်ဘာသာ Algorithm Courses တွေလိုက်တက်ရင်းဟိုဖတ်ဒီဖတ်ဖတ်ရင်းမှ Big O ဆိုတာကြားဖူးပြီးလေ့လာဖြစ်တာပါ။ ကျွန်တော့်အတွက်တော့စလုပ်ခါစမှာ သိပ်မလွယ်ဘူးလို့ခံစားရပါတယ်။ ကျွန်တော်တက်နိုင်သလောက် အလွယ်ကူဆုံးဖြစ်အောင်တော့ကြိုးစားပြီး References တွေယူပြီးရှင်းပြထားပေးပါတယ်။

Big O ဆိုတာဘာလဲကအရင်စလိုက်ကြရအောင်။ ရိုးရိုးရှင်းရှင်းနားလည်အောင်ပြောရမယ်ဆိုရင် Big O ဆိုတာ Programmer အချင်း Algorithm တွေအကြောင်းပြောတဲ့နေရာမှာသုံးတဲ့စကားဖြစ်ပါတယ်။ Algorithm ထပ်ရှင်းရမယ်ဆိုရင် ကျွန်တော်တို့ရေးနေတဲ့ Function တွေဟာ Algorithm တွေလို့အကြမ်းဖျင်းမှတ်သားနိုင်ပါတယ်။ အဲ့တော့ Big O ဆိုတာ ကျွန်တော်တို့ရေးသားနေတဲ့ Program ထဲက Function တွေက input size ပေါ်မူတည်ပြီးတော့နှေးတယ်မြန်တယ်ဆိုတာတွေကိုခွဲခြားပေးတဲ့နည်းလို့ သတ်မှတ်နိုင်ပါတယ်။ နောက် Big O ကိုတစ်နည်း Asymptotic Notation လို့ခေါ်ပါတယ်။

မှတ်ချက်။ ကျွန်တော်ဒီ Blog Post မှာတော့ Big O ရဲ့ Mathematical Formal Definition ကိုရှုပ်သွားမှာစိုးလို့မရှင်းပြတော့ပါဘူး။ နောက်ထက် Post တစ်ခုလုပ်ပြီးရှင်းပြဖို့ကြိုးစားပါ့မယ်။

O(1) time (or “constant time”)

အောက်က Function တစ်ခုနှင့်စမ်းလိုက်ကြရအောင်…

function printFirstItem(items) {
  console.log(items[0]);
}

အထက်ဖော်ပြပါ Function ကိုတစ်ချက်ကြည့်မယ်ဆိုရင် items ထဲက values တွေဘယ်လောက်ဘဲတိုးလာတိုးလာ ဒီ Function ရဲ့ complexity က O(1) ဘဲဖြစ်ပါတယ်။

O(1) function

အထက်ဖော်ပြပါ ပုံဟာ O(1) run time ဖြစ်တဲ့အတွက်ဘယ်လောက်ဘဲ Value တွေတိုးလာတိုးလာ အချိန်ကြာတာကတော့တူတူ (“constant time”) ဘဲဖြစ်နေပါလိမ့်မယ်။ O(1) constant time ဖြစ်တဲ့ Function ရဲ့ running time ကတော့ဘယ်လိုပြောရမလဲ the best ပေါ့နော် 🤣။

O(n) time (or “linear time”)

function printAllItems(items) {
  items.forEach(item => {
    console.log(item);
  });
}

ကျွန်တော်တို့အထက်ဖော်ပြပါ Code block ကိုကြည့်မယ်ဆိုရင် ဒီ Function ရဲ့ Run Time က O(n) (linear time) ပါ။ ဒီနေရာမှာ items ထဲက value တိုးလာတာနှင့်အမျှ Function ထဲက Process လုပ်တာကလည်းတဖြည်းဖြည်းတိုးလာမှာဖြစ်တဲ့အတွက် O(n) (linear time) ပေါ့။ သူ့ရဲ့ Run time က Big O(n) လောက်မမြန်တာတော့သေချာတယ်။ O(1) က the best ဆို O(n) က Good လို့ပြောရမယ်ထင်တယ်။

O(n) runtime

O(n^2) time (“quadratic time”)

function printAllPossibleOrderedPairs(items) {
  items.forEach(firstItem => {
    items.forEach(secondItem => {
      console.log(firstItem, secondItem);
    });
  });
}

အထက်ဖော်ပြပါ Function ကိုကြည့်မယ်ဆိုရင် nested loop. Loop ထဲမှာ Loop ပြန်ပတ်ထားတယ်။ ကျွန်တော်တို့ items ဆိုတဲ့ array ထဲမှာ n items ရှိတယ်ဆိုရင် အပြင်ဘက်က Loop က n time နောက်အတွင်းပိုင်း loop က n time ကြာမယ် စုစုပေါင်းဒီ Function ရဲ့ Running time က O(n^2)။ O(n^2) က O(1) တို့ O(n) တို့နှင့်ယှဥ်ရင်တော့ Shitty ဖြစ်တယ်လို့ပြောရမှာဘဲ 🤣။ အောက်ဖော်ပြပါ O(n^2), O(n), O(1) Running Time နှိုင်းယှဥ်ချက် Graph ကိုတစ်ချက်ကြည့်ကြည့်လိုက်ရအောင်။

O(n^2), O(n), O(1) Running Time နှိုင်းယှဥ်ချက် Graph

အခုကျွန်တော်ရှင်းပြဖို့ကျန်နေသေးတာကတော့ O(log n) ဘဲ။ သူကဒီတိုင်းရှင်းပြရတာနည်းနည်းရှုပ်လို့ Merge Sort တို့ Binary Search တို့အကြောင်းပြောပြမှသူကိုအသေးစိတ်ပြန်ရှင်းပြတော့မယ်။

ဒီလောက်ဆိုရင် Big O ဆိုတာဘာလဲသိသွားလောက်ပါပြီ။ အခုဆို ကိုယ်ရေးထားတဲ့ Code ထဲမှာ O(n^2) Nested loop တွေများပါမလား… O(n) ရအောင်လုပ်လို့ရမလား… ဒါမျိုးလေးတွေတွေးနိုင်သွားပါပြီ။ နောက်ပိုင်း Algorithm တွေ Data Structure တွေရဲ့ Running Time အကြောင်းပြောတဲ့အခါမှာလည်းအသုံးပြုသွားနိုင်ပြီလို့ထင်ပါတယ် 😎။

ကြမ်းကိုးများ

Asymptotic Notation Best explanation

Hexadecimal number system ဆိုတာဘာလဲ

ကျွန်တော်ပြီးခဲ့တဲ့ Post မှာ Binary Number System ဆိုတာဘာလဲဆိုပြီးရေးခဲ့တယ်။ ကျွန်တော်တို့ပုံမှန်သုံးနေတဲ့ 0 to 9 က Base 10, Binary Number System က Base 2၊ အခုကျွန်တော်ဒီနေ့ပြောမယ့် Hexadecimal number system ကတော့ base 16 ဖြစ်ပါတယ်။

ကျွန်တော်တို့ပုံမှန် Base 10 က

0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9 = Base 10

အခု Base 16 မှာဆိုရင်

0 1 2 3 4 5 6 7 8 9 A B  C  D  E  F
0 1 2 3 4 5 6 7 8 9 0 11 12 13 14 15 = Base 16

ဆိုပြီးစုစုပေါင်း 16 လုံးရှိမှာဖြစ်ပါတယ်။

ကျွန်တော်တို့ဒီနေရာမှာပြောစရာရှိတာက ဟုတ်ပါပြီ A to F က Number တွေမဟုတ်ဘူးလေဆိုပြီးမေးမယ့်သူတွေရှိမှာပါ… ဒီနေရာမှန်တစ်ချက်ကျွန်တော်တို့ပြန်စဥ်းစားရမှာက 0 to 9 ဆိုတာကလည်းအမှတ်လက္ခဏာတွေဘဲမဟုတ်ဘူးလားဆိုတာပါဘဲ၊ အဲ့လိုတွေးလိုက်ရင် A to F က Number မဟုတ်တာကအဆင်ပြေသွားပြီ။ ပုံမှန်ဆို A က 13 ဖြစ်နေမှာ… အခု Base 16 မှာကြတော့ A အဲ့ဒါကြောင့် A လို့ဘဲခေါ်ရင်အဆင်ပြေမယ်ထင်တယ်။ ကျွန်တော်တို့ပုံမှန်တွေးတာတွေဖျောက်လိုက် Base 16 Number System အတိုင်းဘဲသွားလိုက် ဒါဆိုအဆင်ပြေသွားပြီ။

ကျွန်တော် Binary Number System အကြောင်းရေးတုန်းက Base 10 – 125 က Binary Number မှာဆို 1111101 ရတယ်ဆိုပြီးပြဖူးတယ်။ အခု 125 က Hexadecimal number မှာဘာရမလဲဆိုတာတစ်ချက်ကြည့်လိုက်ရအောင်…

Base 16 မှာ Base 10 Number 125 က 7D ဆိုပြီးရပါတယ်။ ဘယ်လိုရတာလဲတစ်ချက်အောက်မှာကြည့်လိုက်ရအောင်…

0 1 2 3 4 5 6 7 8 9 A  B  C  D  E  F
                    10 11 12 13 14 15

Base 10 Number 125 is equal to 7D of Base 16.

125 = 7 D
= (7 x 16) + (D x 1)
= 112 + (D=13 x 1)
= 125
Base 16 7D is equal to Base 10 125

ကျွန်တော်ဒီတိုင်းပုံမှန်စာနှင့်ဘဲရှင်းပြမလို့နားလည်ဘို့မလွယ်ဘူးထင်လို့ ဘောပင်နှင့်စာရွက်ပေါ်ရေးပြီးတော့နည်းနည်းရှင်းပြထားတယ်။ အဲ့ဒါကိုတစ်ချက်ပြန်ရှင်းလိုက်ရအောင်… 7D မှာ D က 1 နေရာမှာရှိတယ် base 16 ရဲ့ power ကဒီနေရာမှာ 0 ဖြစ်တယ်ဆိုတာအရင် Post မှာရှင်းပြပြီးလို့နားလည်မယ်ထင်ပါတယ်။ ဒါကြောင့် (D x 1) ဖြစ်သွားတယ်။ နောက် D ရဲ့တန်ဖို့းက Base 16 မှာ 13။ 7 ကြတော့ base 16 power က 1 ဖြစ်တယ်။ နောက် base 16 ဖြစ်တဲ့အတွက် 16 နှင့်ဆတိုးဖြစ်သွားတဲ့အတွက် Base က 16။

ဒီလောက်ဆိုလျှင် Hexadecimal Number ဘယ်လိုအလုပ်လုပ်လဲဆိုတာသိလောက်ပြီထင်ပါတယ်။ ကျွန်တော်ရှင်းပြတာတွေနားမလည်သေးရင် Comment မှာမေးနိုင်ပါတယ်။ သို့မဟုတ်ကြမ်းကိုး မှာကိုယ်တိုင်သွားရောက်လေ့လာနိုင်ပါတယ်။

ကြမ်းကိုး

Binary number system ဆိုတာဘာလဲ

ကျွန်တော်တို့နေ့စဥ်အသုံးပြုနေတဲ့ Decimal Number System ဖြစ်တဲ့သုညကနေကိုးကတော့အားလုံးသိပြီးသားဖြစ်မယ်ထင်ပါတယ်… အဲ့ဒါက သုညကနေကိုးထိဖြစ်တဲ့ Number 10 လုံးကိုအခြေခံထားတဲ့အတွက် Base-10 လို့ခေါ်ပါတယ်ကွန်ပျူတာ programming language တွေအသုံးပြုမှုများလာတဲ့နောက်ပိုင်း နောက်ထပ် Number System တစ်ခုခေတ်စားလာပါတယ်… သူ့ကိုတော့ Binary Number System လို့ခေါ်ပါတယ်။ Binary Number System မှာ Digit 2 လုံးဘဲရှိပါတယ်။ အဲ့ဒါကတော့ သုညနှင့် တစ်ဘဲဖြစ်ပါတယ်။ (0 and 1) Binary Number System ကို Base-2 လို့လည်းခေါ်ပါတယ်။ သူ့မှာ (0/1) နှစ်လုံးဘဲရှိတာကိုး။ကွန်ပျူတာတွေက Binary Number System ကိုနားလည်ပါတယ်။ဘာလို့လည်း?ဘာလို့လည်းဆိုတော့ ကွန်ပျူတာက electrical device ဖြစ်တယ်။ electrical device တွေက electrical signal ကိုနားလည်တယ်။ Electrial signal မှာက On/Off ဆိုတဲ့နှစ်မျိုးဘဲရှိတယ်။ အဲ့ဒါကြောင့် On ဆို One, Off ဆို Zero ဆိုပြီး Binary ဖြစ်တဲ့ 0/1 ကနေ Electronic Singal ကိုပြောင်းလဲပြီး Computer ကနေနားလည်တာဖြစ်ပါတယ်။နောက် Binary Number System မှာ Number တွေကိုဘယ်လိုရေးလည်းတစ်ချက်ထပ်လေ့လာလိုက်ကြရအောင်…Binary Number System အကြောင်းမပြောခင်ကျွန်တော်တို့ရင်းနှီးတဲ့ Decimal Number System အကြောင်းအရင်ပြောကြရအောင်…

125 က Decimal Number System မှာ ကျွန်တော်တို့တစ်ရာနှစ်ဆယ့်ငါး… ကျွန်တော်တို့ကျောင်းမှာသင်ခဲ့ဖူးတာလေးတွေပြန်ဖော်လိုက်ဦးမယ် ဒီနေရာမှာ 125 မှာ 5 က 1 နေရာမှာမှာ 2 က 10 နေရာမှာ 1 က (100) ရာနေရာမှာ ပုံမှာပြထားတဲ့အတိုင်း base number ဖြစ်တဲ့ 10 ကိုမူတည်ပြီးတော့ 5 ကခုနေရာဖြစ်တဲ့အတွက် 5 x 10^0 နောက် 2 ကဆယ်နေရာဖြစ်တဲ့အတွက် 2 x 10^1 နှင့်နောက်ဆုံးရာနေရာမှာရှိတဲ့ 1 ကို 1 x 10^2 စုစုပေါင်းရလဒ်ကိုပေါင်းလိုက်ရင် 125 ဆိုပြီးရလာမှာဖြစ်ပါတယ်။ ဒါကကျွန်တော်တို့ Decimal Number System မှာ။Binary Number System မှာဘယ်လိုလည်းဆိုတာတစ်ချက်ကြည့်လိုက်ရအောင်။

125 ကို Binary Number System မှာ 1111101 ဆိုပြီးတော့ခေါ်ပါတယ်။ သူက Number 2 လုံးနှင့် Base လုပ်ထားတာဖြစ်တဲ့အတွက် Base က 2 ဖြစ်နေတဲ့အတွက်ကြောင့် right to left တိုးတဲ့အချိန်မှာ 2 ဆတိုးတိုးသွားတာပါ။ အခုတော့ Binary number system ဆိုတာဘာလဲဆိုတာသိလောက်ပြီထင်ပါတယ်။ ကျွန်တော်အခုစာရေးပြီးရှင်းပြထားတာတွေကရှုပ်တယ်ထင်ရင်အောက်ဆုံးမှာ YouTube Link ထည့်ပေးထားပါတယ်… အဲ့ကနေကြည့်ပြီးဆက်လေ့လာနိုင်ပါတယ်။အောက်ဖော်ပြပါ YouTube Videos များမှလေ့လာမှတ်သား/ဘာသာပြန် ပြန်လည်ဝေမျှခြင်းဖြစ်ပါတယ်။

YouTube Video Link