၁၉၆၀ ႏွစ္မ်ားပိုင္းမွာ Massachusetts Institute of Technology ရယ္ AT&T Bell Labs နဲ႔ General Electric ကုမၸဏီေတြ ပူးေပါင္းျပီး GE-645 mainframe computer ေပၚမွာ သံုးဖို႔ Multics (Multiplexed Information and Computing Service) လို႔ေခၚတဲ႔ operating system တစ္ခုကို စတင္ျပီး သုေတသန လုပ္ခဲ႔ၾကတယ္။ UNIX ကို ၁၉၆၉ ခု ႏွစ္မွာ AT&T ရဲ႔ အခြဲတစ္ခု ျဖစ္တဲ႔ Bell Laboratories က Ken Thompson နဲ႔ Dennis Ritchie တို႔က စတင္ေရးသားခဲ႔တာျဖစ္ပါတယ္။ Internet မွာ server အေနနဲ႔ သံုးတဲ႔ စက္ေတြမွာ UNIX ကို အသံုးမ်ားတယ္။ အင္တာနက္အတြက္ ရည္ရြယ္တဲ႔ Softwares အေတာ္မ်ားမ်ားကလဲ UNIX Platform အေပၚမွာပဲ ေရးခဲ႔ၾကတယ္။ သူ႔ရဲ႕အဓိက အားသာခ်က္ကေတာ႔ multiuser နဲ႔ multitasking လုပ္ႏိုင္တာပဲ ျဖစ္တယ္။ ရိုးစင္းတဲ႔ file system ရွိတယ္။ User တိုင္းက သူတို႔ ဖန္တီးထားတဲ႔ ဖိုင္ေတြကို ထိန္းခ်ဳပ္ခြင္႔ ရွိတယ္။ ဆိုလိုတာက မိမိတို႔ ဖိုင္ေတြကို ဘယ္သူေတြက ဖတ္ႏိုင္တယ္၊ ေရးႏိုင္တယ္ ဆိုတဲ႔ access level ကို control လုပ္လို႔ ရတာပဲ ျဖစ္တယ္။
C ကိုေတာ႔ ၁၉၇၂ မွာ Dennnis Ritchie က ဖန္တီးခဲ႔တယ္။ Assembly Language ထက္ ပိုအဆင္႔ျမင္႔တဲ႔ higher level programming လဲျဖစ္တယ္။ Compiled language အမ်ိဳးအစားလဲ ျဖစ္တယ္။ ဆိုလိုခ်င္တာက တစ္ေၾကာင္းခ်င္းဘာသာျပန္ျပီး အလုပ္လုပ္တဲ႔ interpreter မ်ိဳးမဟုတ္ဘဲ exe ဖိုင္ျဖစ္ေအာင္ လုပ္ႏိုင္တာျဖစ္တယ္။
Bell laboratories ရဲ႕ အခန္းက႑က EC သင္တန္းသားေတြ အတြက္ အထူးပဲ အေရးၾကီးပါတယ္။ အရင္က AT&T (American telephone and telegraph) တယ္လီဖုန္း ကုမၸဏီ ရဲ႕ ဌာနခြဲ တစ္ခု ျဖစ္ခဲ႔ျပီး ကြန္ျပဴတာ အီလက္ထေရာနစ္ နဲ႔ ဆက္သြယ္ေရး နည္းပညာကို တဟုတ္တိုး ထြန္းကားတိုးတက္လာေအာင္ ကူညီတီထြင္ေပးေနတဲ႔ ေနရာတစ္ခုလည္းျဖစ္တယ္။ ႏိုဘယ္ ဆုရွင္ မ်ားစြာကို ေမြးထုတ္ ေပးႏိုင္ခဲ႔ပါတယ္။
C ကို system software မ်ား ေရးသားရန္ ဒီဇိုင္းထုတ္ခဲ႔ေသာ္လည္း ေသးငယ္ေပါ႔ပါးေသား application soft wares မ်ား ေရးသားရန္ အတြက္လည္း တြင္က်ယ္စြာ အသံုးခ်ခဲ႔သည္။ အထူးသျဖင္႔ ဟက္ကာမ်ား ႏွင္႔ open source operation systems သမားမ်ား၏ အၾကိဳက္ဆံုး ဘာသာစကား ျဖစ္ခဲ႔ရသည္။ C အေနႏွင္႔ ေနာက္ထပ္ ထြက္ေပၚလာေသာ C++, Visual C++, C# စသည္႔ ပရိုဂရမ္းမင္း ဘာသာစကား အသစ္မ်ား အေပၚတြင္လည္း လႊမး္မိုးမႈရွိခဲ႔သည္။ 1980 ေလာက္မွာ ဂၽြန္စေရာက္စတား က C ကို ေနာက္ထပ္ features အသစ္ေတြ ထပ္မံေပါင္းထည္႔ျပီး " C with Classes " ဆိုတာကို ေရးခဲ႔တယ္။ အဲဒီ ဘာသာစကားဟာ တျဖည္းျဖည္း ပိုမို တိုးတက္လာျပီး C++ ရယ္လို႔ ျဖစ္လာတယ္။ ေနာက္ထပ္ေပၚလာတဲ႔ programming ဘာသာစကား အသစ္တစ္ခု ျဖစ္တဲ႔ Java ကေတာ႔ (1995) မွာ "C++ with bugs fixed" ဆိုျပီး နာမည္ရလာတယ္။ Sun Microsystems ရဲ႕ေဆာင္ပုဒ္ျဖစ္တဲ႔ "Write once, run everywhere" ဆိုတာကို အေကာင္အထည္ေဖၚေပးျပီး cross platform capability ကို စတင္ မိတ္ဆက္ေပးခဲ႔တယ္။
ပရိုဂရမ္းမင္းေတြရဲ႕သမိုင္းေၾကာင္းအစက ခ်ည္မွ်င္နဲ႔ အထည္စက္ရံုေတြမွာ စက္ယကၠန္းေတြကို အေပါက္ေဖာက္ထားတဲ႔ ကဒ္ျပားေတြသံုးျပီး ကိုယ္လိုခ်င္တဲ႔ အထည္ဒီဇိုင္းကို ယက္ခိုင္းဖို႔ ၾကံစည္ခဲ႔ၾကတယ္။ အဲဒီ punch card လို႔ေခၚတဲ႔ ကဒ္ျပားေလးေတြကို ေနာက္ပိုင္းမွာ ကြန္ပ်ဴတာကို ေဒတာ သြင္းဖုိ႔ အတြက္ ဆက္လက္သံုးစြဲခဲ႔ၾကတယ္။ သူ႔ကို 80-column manila card လို႔လဲ ေခၚတယ္။ သူ႔မွာ ေဒတာ အလံုး ၈၀ ကို အတန္းလိုက္ထည္႔သြင္းလို႔ ရတာေၾကာင္႔ ခုလို ေခၚတာျဖစ္တယ္။ အလ်ား ၇ လက္မ နဲ႔ အနံ ၃ လက္မ ရွိတယ္။ ေဒတာေတြထည္႔သြင္းဖုိ႔ကို keypunch machine လို႔ေခၚတဲ႔ အေပါက္ေဖာက္စက္ေလးေတြသံုးျပီး လုပ္ႏိုင္တယ္။ အဲဒီ အေပါက္ေလးေတြဟာ ဂဏန္းေတြ၊ စာလံုးေတြ နဲ႔ အျခား သေကၤတေတြကို ကိုယ္စားျပဳႏိုင္ျပီး punched-card reader ပါတဲ႔ ကြန္ပ်ဴတာေတြက ဖတ္ရႈနားလည္ႏိုင္တယ္။ (Source:Encarta)
ကြန္ပ်ဴတာေတြရဲ႕ သမိုင္းအစကေတာ႔ analog machine ေတြနဲ႔ အစျပဳခဲ႔တာျဖစ္တယ္။ ၁၆၂၃ ခုႏွစ္မွာ ဂ်ာမာန္ သိပၸံပညာရွင္ Wilhelm Schikard က ဘီး၁၇လံုး အသံုးျပဳထားတဲ႔ ဂဏန္းေပါင္းစက္ကို တီထြင္ခဲ႔တယ္။ အဲဒီစက္ဟာ အေပါင္း၊ အေျမွာက္နဲ႔ အစားေတြကို ေလာ႔ဂရစ္သမ္ ဇယား အသံုးျပဳျပီး ေဆာင္ရြက္ႏိုင္တယ္။
၁၆၄၂ ခုမွာေတာ႔ ျပင္သစ္ အေတြးအေခၚ၊ သခ်ၤာနဲ႔ ရူပေဗဒ ပညာရွင္ Blaise Pascal က အလိုအေလ်ာက္ ေပါင္းႏိုင္၊ ႏႈတ္ႏိုင္တဲ႔ စက္တစ္ခုကို တီထြင္ခဲ႔ ျပန္တယ္။ သူက အဲဒီစက္မ်ိဳး အလံုး ၅၀ ကို တည္ေဆာက္ခဲ႔ေပမယ္႔ မ်ားေသာအားျဖင္႔ လူခ်မ္းသာေတြ အပ်င္းေျပ ကစားစရာတစ္ခုသာ ျဖစ္ခဲ႔ရတယ္။ ၁၇ ရာစုကို ေရာက္ေတာ႔မွာ ဂ်ာမာန္ သခ်ၤာပညာရွင္ Gottfried Leibniz က Pascal ရဲ႕စက္မွာ အထူးျပဳလုပ္ထားတဲ႔ ဂီယာေတြကို သံုးျပီး အေျမွာက္ ပါ ေဆာင္ရြက္ႏိုင္ေအာင္ တီထြင္ခဲ႔တယ္။ ၁၉ ရာစု အေစာပိုင္းမွာ ျပင္သစ္ တီထြင္သူ တစ္ေယာက္ျဖစ္တဲ႔ Joseph-Marie Jacquard က ပိုးထည္မွ်င္ရက္ဖို႔ အထူးျပဳလုပ္ထားတဲ႔ စက္တစ္မ်ိဳးကို ဖန္တီးခဲ႔တယ္။ သူ႔ရဲ႕ ယကၠန္းစက္က အေပါက္ေတြေဖာက္ထားတဲ႔ ကဒ္ေတြကို သံုးျပီး ဒီဇိုင္းအမ်ိဳးမ်ိဳးကို ပရိုဂရမ္ လုပ္ႏိုင္တယ္။ Jacquard ဟာ သူ႔ရဲ႕တီထြင္မႈအတြက္ ျပင္သစ္ ဘုရင္ နပိုလီယန္ ၁ ရဲ႕ ေလးစားမႈႏွင္႔ ဆုခ်ီးျမွင္႔ျခင္းေတြကို ခံယူရရွိခဲ႔ေပမယ္႔ စက္ယကၠန္း အသံုး တြင္က်ယ္လာမွာကို စိုးရိမ္တဲ႔ လက္ယကၠန္း သမားေတြရဲ႕ ရန္ေၾကာင္႔ အသက္ေဘးကလြတ္ေအာင္ Lyon ျမိဳ႕ေလးကို ထြက္ေျပးခဲ႔ရတယ္။ သူေသသြားျပီးတဲ႔ အခါမွာ သူ႔ရဲ႕ စက္ယကၠန္းေတြဟာ ပိုမိုေအာင္ျမင္လာျပီး Lyon ျမိဳ႕ေလးတစ္ျမိဳ႕ထဲမွာတင္ သူ႔စက္ေပါင္း ၃ ေသာင္းေက်ာ္ အသံုးျပဳေနၾကတယ္။ စက္ယကၠန္းေတြကို ဒီေန႔ထိ ေအာင္ေအာင္ျမင္ျမင္ နဲ႔ တြင္တြင္က်ယ္က်ယ္ အသံုးခ်ေနဆဲလဲ ျဖစ္တယ္။
ပရိုဂရမ္းမင္းဘာသာစကားေတြဟာ သာမာန္ ဘာသာစကားေတြနဲ႔ သေဘာသဘာဝျခင္း ဆင္တူပါတယ္။ ဒါေၾကာင္႔ သာမာန္ဘာသာစကားေတြရဲ႕ ထူးျခားခ်က္မ်ားနဲ႔ ႏႈိင္းယွဥ္ေလ႔လာခ်က္ေတြကို သိထားျခင္းျဖင္႔ ပရိုဂရမ္းမင္းဘာသာစကား ေလ႔လာရာမွာ အေထာက္အကူ ရႏိုင္ပါတယ္။ သာမာန္ဘာသာစကားေတြမွာ သဒၵါ (grammar) ဆိုတာရွိသလို ပရိုဂရမ္းမင္းဘာသာစကားေတြမွာလဲ syntex လို႔ေခၚတဲ႔ ေရးသားပံု နည္းစံနစ္ သတ္မွတ္ခ်က္ေတြ ရွိပါတယ္။ သာမာန္ ဘာသာစကားကို သံုးျပီး လူလူခ်င္း ဆက္သြယ္ရာမွာ grammar အနည္းငယ္ မွားယြင္းတာ၊ စာလံုးေပါင္း မမွန္တာေတြကို လူေတြက ျဖည္႔စြက္နားလည္ေပးျပီး အဓိပၸါယ္ ေဖၚႏိုင္ေပမယ္႔ ကြန္ပ်ဴတာကေတာ႔ နည္းနည္းေလးမွ အမွားမခံပါဘူး။
အဂၤလိပ္ဘာသာစကား ဟာလဲ စကားလံုး ၾကြယ္ဝလို႔ တိက်တဲ႔ ညႊန္ၾကားခ်က္ေတြ ေရးတဲ႔ ေနရာမွာ ျပႆနာ ရွိတတ္ပါတယ္။ တစ္ခါတုန္းက ကြန္ပ်ဴတာေလာက က အမ်ိဳးသမီး ဥာဏ္ၾကီးရွင္တစ္ေယာက္ျဖစ္တဲ႔ Grace Hopper က shampoo တစ္ဘူးကို စမ္းသံုးၾကည္႔ပါတယ္။ အညႊန္းမွာက အဂၤလိပ္လို Wash Rinse Repeat ဆိုျပီး ညႊန္ၾကားခ်က္သံုးေၾကာင္း ပါလာပါတယ္။ အဓိပၸါယ္က ေရနဲ႔ ေဆး၊ shampoo သံုးျပီးေလွ်ာ္၊ ျပီးရင္ အစကျပန္လုပ္ ဆိုတာပါပဲ။ အဲဒီေတာ႔ အတိအက် လိုက္လုပ္လိုက္တာ သူ႔ရဲ႕ shampoo ေတြအားလံုး ကုန္သြားတာေပါ႔။ တကယ္ေတာ႔ အဲဒီ အျဖစ္အပ်က္ဟာ ပရိုဂရမ္းမင္းမွာ မၾကာခဏ မွားတတ္တဲ႔ အျဖစ္အပ်က္မ်ိဳးပါပဲ။ infinite loop လို႔ ေခၚပါတယ္။ အဆံုးမရွိတဲ႔ ျဖစ္စဥ္မ်ိဳးေပါ႔။ ပရိုဂရမ္ကို ဘယ္အခ်ိန္မွာ ရပ္ပစ္ရမယ္ ဆိုတဲ႔ တိက်တဲ႔ ညႊန္ၾကားခ်က္ မေပးထားပဲ ထပ္ကာတလဲလဲ လုပ္ဖို႔ ခိုင္းမိရင္ အခုလို ျဖစ္မွာပါပဲ။
အဂၤလိပ္စာမွာလဲ အတိအက် ေရးမယ္ဆိုရင္ ျဖစ္ႏိုင္ပါတယ္။ ျဖစ္လာႏိုင္သမွ် အေျခအေန အကုန္လံုးအတြက္ စဥ္းစားျပီး စာလံုးေပါင္းက အစ အတိအက် ေရးမယ္ ဆိုရင္ေပါ႔။ အဲဒီလိုမ်ိဳးေရးဖို႔ အခ်ိန္ေတြ အမ်ားႀကီးေပးျပီး ႀကိဳးစားေရးေနၾကတဲ႔ သူေတြေတာ႔ ရွိပါတယ္။ အဲဒါကေတာ႔ အစိုးရ အဖြဲ႕အစည္းမ်ားပဲ ျဖစ္ပါတယ္။ သူတို႔ ထုတ္ျပန္ထားတဲ႔ ဥပေဒေတြ၊ စည္းကမ္းေတြ ကို အတိက်ဆံုးျဖစ္ေအာင္ ႀကိဳးစားေရးၾကရင္းနဲ႔ သာမာန္လူေတြ အလြယ္ဖတ္လို႔ မရတဲ႔ စာေတြ ျဖစ္လာပါေတာ႔တယ္။ ဒါေပမယ္႔ တစ္ခါတစ္ေလ ဒီလိုမ်ိဳး ေရးထားတဲ႔ ၾကားကေန ျပႆနာ က ျဖစ္တတ္ပါေသးတယ္။ တစ္ခါတုန္းက ကယ္လီဖိုးနီးယားျပည္နယ္မွာ ေမာ္ေတာ္ဆိုင္ကယ္ ဦးထုပ္ေဆာင္းဖို႔ ဥပေဒ ထုတ္ကာစကေပါ႔။ ရဲတစ္ေယာက္က ဦးထုပ္ မေဆာင္းထားတဲ႔ ဆိုင္ကယ္သမားတစ္ေယာက္ကို ဖမ္းတဲ႔ အခါ ဆိုင္ကယ္သမားက ရဲကို ဥပေဒကို အေသအခ်ာ ျပန္ဖတ္ၾကည္႔ဖို႔ ေစာဒက တက္သတဲ႔။ ဥပေဒက ဘာဆိုထားသလဲ ဆိုေတာ႔ (၁) ဆိုင္ကယ္သမားတိုင္း ဦးထုပ္ပါရမယ္ (၂) ေမးသိုင္းၾကိဳး တင္းတင္းပတ္ထားရမယ္တဲ႔။ ေနာက္ဆံုး ရဲက အဲဒီလူကို လႊတ္ေပးလိုက္ရတယ္။ ဘာလို႔လဲ ဆိုေတာ႔ သူက ဆိုင္ကယ္စီး ဦးထုပ္ကို သူ႔ဒူးေခါင္းမွာ ခပ္တင္းတင္း စြပ္ထားလို႔ပဲ ျဖစ္တယ္။ ဦးထုပ္ကို "ေခါင္း"မွာ စြပ္ထားရမယ္လို႔ တိတိက်က် မေရးခဲ႔ မိလို႔ ျဖစ္တဲ႔ ျပႆနာေလးပါ။ ကဲ ကြန္ပ်ဴတာ နဲ႔က်ေတာ႔ ဘယ္လို ဆက္သြယ္ ခိုင္းေစၾကမွာလဲ?
ပထမ ဦးဆံုး ကြန္ပ်ဴတာေတြ တည္ေဆာက္ဖို႔ ေဒၚလာ သန္းေပါင္းမ်ားစြာ ကုန္က်ေပမယ္႔ ထူးခၽြန္တဲ႔ ပရိုဂရမ္မာတစ္ေယာက္ကိုေတာ႔ တစ္လကို ေဒၚလာ တစ္ေထာင္႔ တစ္ရာ ေလာက္ပဲ ေပးရတယ္။ ဆိုလိုတာက အဲဒီတုန္းက ကြန္ပ်ဴတာေတြက မတရားေစ်းၾကီးျပီး ပရိုဂရမ္မာေတြက ေစ်းသက္သာတဲ႔ သေဘာေပါ႔။ အဲဒီ ပရိုဂရမ္မာေတြက zero နဲ႔ one ေတြ နဲ႔ စီစဥ္ထားတဲ႔ ကြန္ပ်ဴတာ ပရိုဂရမ္ေတြ ေရးသားၾကရတယ္။ အဲဒီ ပရိုဂရမ္းမင္း ဘာသာစကားကို machine language လို႔ ေခၚတယ္။ ဥပမာအားျဖင္႔ ေအာက္ပါ ပံုစံမ်ိဳးေပါ႔။
1010 1111
0011 0111
0111 0110
................
ကြန္ပ်ဴတာက zero နဲ႕ one ေတြသံုးျပီး စဥ္းစားေပမယ္႔ လူေတြကေတာ႔ အဲလို နားမလည္ႏိုင္ဘူးေလ။ ဒါေၾကာင္႔ လူေတြနားလည္ႏိုင္မယ္႔ စကားလံုးေတြနဲ႔ အရင္ေရးျပီး ေနာက္မွ ပရိုဂရမ္မာက ဘာသာျပန္ဖုိ႔ ဇယားေတြ သံုးျပီး zero နဲ႔ one ေတြ ျပန္ေျပာင္းေပးရတယ္။ အဲဒီလို hand translate ဒါမွ မဟုတ္ assemble လုပ္ျပီး machine language ကိုေျပာင္းေပးေနရတာ ျဖစ္တဲ႔အတြက္ Assembly Language လို႔ ေခၚခဲ႔ၾကတယ္။
အဲဒီလို manually translate လုပ္ရတာဟာ ခက္ခဲသေလာက္ ပ်င္းဖို႔ ေကာင္းတဲ႔ အတိအက် အလုပ္ႀကီးျဖစ္လို႔ software engineer တစ္ေယာက္က အဲဒီအလုပ္ကို ကြန္ပ်ဴတာကို ခိုင္းဖို႔ ဆံုးျဖတ္ခဲ႔တယ္။ ဒါေၾကာင္႔ assembler လို႔ေခၚတဲ႔ program တစ္ပုဒ္ကို ေရးခဲ႔တယ္။ သူ႔ရဲ႕ တီထြင္မႈအသစ္ကို သူ႔အလုပ္ရွင္ကို ျပလိုက္မိတာနဲ႔ စျပီး အဆူခံရပါေလေရာ။ ဒီလို သာမာန္ အလုပ္ေလးအတြက္ တန္ဖိုးၾကီးတဲ႔ (computer time) ကြန္ပ်ဴတာ သံုးစြဲမႈ အခ်ိန္ေတြ ကို အကုန္မခံႏိုင္ဘူးေလ။
ကံေကာင္းတာကေတာ႔ အခ်ိန္ေတြၾကာလာတာနဲ႔ အမွ် ပရိုဂရမ္မာေတြကို ေပးရတဲ႔ လစာက ပိုမ်ားလာျပီး ကြန္ပ်ဴတာေတြရဲ႕ကုန္က် စားရိတ္က ပိုသက္သာလာတဲ႔အခါ တစ္လစာ လခ အမ်ားႀကီးေပးရတဲ႔ ပရိုဂရမ္မာေတြကို ဒီဘာသာျပန္ အလုပ္ေလးအတြက္ မသံုးႏိုင္ေတာ႔ပဲ assembler ပရိုဂရမ္ေလးနဲ႔ အလုပ္လုပ္ဖို႔ ေျပာင္းလဲ စဥ္းစား သံုးစြဲ လာရတယ္။
Assembly ဘာသာစကားဟာ ပရိုဂရမ္မာေတြကို နားလည္ လြယ္ေအာင္ ကူညီတာ မွန္ေပမယ္႔ ကြန္ပ်ဴတာ နားလည္ဖုိ႔ တစ္ေၾကာင္းခ်င္း ဘာသာျပန္ေနရတာေၾကာင္႔ computer run time အခ်ိန္ေတာ႔ ပိုၾကာသြားတယ္။
1 ေယာက္က ဒီလိုေျပာတယ္:
ေက်းဇူးပဲ
ဗဟုသုတ ပြားပါတယ္ ကိုငွက္ျပာၾကီးေရ။