Аж үйлдвэрийн дөрөвдүгээр хувьсгал хийгээд бидний аж төрж буй цахим эринг компьютергүйгээр төсөөлөх аргагүй бөгөөд технологийг зөвхөн ашиглах биш, хэрхэн яаж ажилладаг талаар ойлголттой байх нь бүх салбарт чухал шаардлагатай болсон. Тиймээс компьютерийн шинжлэх ухааны боловсрол нь хориннэгдүгээр зууны иргэнд байх хамгийн гол чадвараар (literacy for the 21st century) нэрлэгдэж байна. Та бид өдөр тутам програм хангамжийг ямар нэг хэлбэрээр хэрэглэж байгаа ба яг одоо таны цүнхэнд, халаасанд, бугуйнд яваа компьютерыг удирдаж буй тэрхүү биет бус виртуаль зүйл яг юу болох, хэрхэн ажилладгийг мэдэж авцгаая.

Компьютер
Компьютер нь програмын дагуу арифметик, эсвэл логик үйлдлүүдийг өндөр хурдтайгаар гүйцэтгэж тооцоолол хийдэг машин юм. Ямар нэгэн байдлаар програмчлах боломжтой техник болгоныг компьютер гэж хэлж болно. Компьютер тухайн агшинд хийж буй үйлдэл нь маш энгийн арифметик, эсвэл логик үйлдэл байдаг. Тиймээс угтаа бол компьютерийн хийх нэгж тооцоолол (computation) бүрийг та үзэг цаас ашиглан амархан хийж чадна. Харин секундэд хэдэн тэрбум удаа гэвэл яах бол? Тэрбум тэрбумаар тоологдох бичил тооцооллууд өнөөдрийн бидний хэрэглэж байгаа ухаалаг тоон технологиудыг бий болгодог.
Компьютер нь техник хангамж (hardware) гэсэн биет хэсэг, програм хангамж (software) гэсэн виртуаль хэсгүүдээс бүрдэх ба аль нэг нь дангаараа ажиллах боломжгүй. Техник хангамж нь өөрөө computer organization гэдэг маш том сэдэв ба эндээс бидэнд яг одоо хэрэг болох ганц зүйл нь процессор юм. Процессорыг бид CPU (Central Processing Unit) гэдэг нэрээр нь мэдэх ба энэхүү эд анги бол дээр дурьдсан олон тэрбум тооцооллыг гардан хийдэг уураг тархи юм. Харин бидний цаашаа дэлгэрүүлж үзэх сэдэв бол програм хангамж.

Код ба програм
Эдгээр нь ижил төстэй ойлголтууд ба програм зохиох гэдэг нь харьцангуй том дүр зургаар бөгөөд код бичих гэдэг нь тухайн програмыг зохиохын тулд програмист компьютерт мөр мөрөөр нь зааварчилгаа өгч буй үйл явц юм. Өнөө цагт програмыг ихэвчлэн програмистуудын баг ажиллаж зохиодог болсон ба програмист болгон өөр өөрсдийн хөгжүүлэх хэсгийнхээ кодыг бичнэ гэвэл эдгээр ойлголтуудын ялгаа илүү тодорхой болох байх.
Програмыг хамгийн энгийн үгээр тодорхойлбол ердөө зааварчилгаануудын бүрдэл (set of instructions) гэж хэлж болно. Үүнд зааварчилгаа буюу instruction гэдэг нь тодорхой нэгж үйлдлийг хийлгэхийн тулд процессорт өгч буй комманд юм. Нэгж үйлдэл нь харин ямар ч үйлдэл байж болно. Жишээ нь ямар нэг өгөгдлийг (data) санах ойд хадгалах, хадгалсан өгөгдлүүд дээр тооцоолол хийх, эсвэл үр дүнг гаргаж харуулах гэх мэт. Програм болгон тодорхой алгоритмд захирагдана.
Алгоритм
Математик болон компьютерийн шинжлэх ухаанд алгоритмыг “тодорхой асуудлыг шийдвэрлэх, хязгаартай, сайтар тодорхойлогдсон, компьютераар хэрэгжүүлж болохуйц зааварчилгаа” гэсэн байдаг. Үүнд хязгаартай (finite) гэдэг нь алгоритм заавал төгсгөлтэй байх, сайтар тодорхойлогдсон (well-defined) гэдэг нь хоёрдмол утга агуулаагүй, компьютераар хэрэгжүүлж болохуйц (computer-implementable) гэдэг нь шууд компьютерийн програм болгох боломжтой гэсэн үг юм. Алгоритм гэдэг бол нэг ёсондоо асуудлын шийдэл, гаргалгаа гэсэн үг ба алгоритмын хэрэгжилт (implementation) нь програм юм. Нэг асуудлыг шийдэх хэдэн ч алгоритм байж болох ба жишээ нь арван ширхэг тоон утгуудыг дундажлах хэрэгтэй болоход бүгдийг нь нэмээд 10-т хуваах, эсвэл тус бүрд нь 10-т хуваагаад гарсан хариунуудыг нэмэх гэсэн хоёр боломжит шийдэл буюу алгоритм байж болно. Харин энэ хоёр шийдлийн алиных нь ч дагуу код бичсэн орчин үеийн процессорын гүйцэтгэлийн ялгаа доль, милли-секундаас ч магадгүй бага байх учраас алгоритмын ач холбогдол мэдрэгдэхгүй. Харин томоохон, ээдрээтэй асуудлын шийдэл гаргахад алгоритм дезайн (algorithm design) хамгийн чухал хүчин зүйлд тооцогдоно. Алдаатай алгоритм дезайны дагуу програм зохиовол согогтой (bug) програм болох ба түүний бизнесийн үр дагавар нь хэмжээлшгүй их юм. Алгоритмыг олон аргаар илэрхийлж болох ба үүнд урсгалын диаграмм (flowchart — график хэлбэрээр тодорхойлох), псевдо код (pseudocode — жинхэнэ кодтой төстэйгөөр стандарт бичиглэл ашиглан тодорхойлох), шууд аль нэг програмчлалын хэлээр (programming language) тодорхойлох, эсвэл бүр хүмүүний хэлээр (natural language) ч тодорхойлж болох юм.
Програмчлалын хэл
Маш чухал бас сонирхолтой сэдэв рүү орцгооё. Энгийн үгээр хэлэхэд програмчлалын хэл гэдэг нь компьютерийн ойлгодог хэл юм. Програмчлалын хэлийг ерөнхийд нь доод түвшний хэл (low-level language) ба дээд түвшний хэл (high-level language) гэж хоёр ангилдаг. Доод түвшний хэлэнд машины хэл (machine language) болон ассемблей хэл (assembly language) нар багтана. Үүнээс машины хэл нь компьютерийн процессорыг шууд удирддаг цорын ганц хэл юм. Өөрөөр хэлбэл таны компьютерт байгаа Intel Core i7 зөвхөн өөрийн машины хэлээр зааравчилгааг авч ажилладаг гэсэн үг юм. Дээд түвшний хэл дээр бичсэн код процессорыг шууд удирдаж чадахгүй ба замдаа хэд хэдэн дамжлагат хувиргалтаар орж машины хэл болж ажилладаг.

Машины хэлээр машины кодыг (machine code) бүтээх ба уг код нь шууд процессор уншаад ажиллуулахад бэлэн хоёртын (binary — компьютерийн тооллын систем) хэлбэртэй сигнал байдаг. Онолын хувьд хүн машины хэл дээр шууд код бичиж болох ч практикын хувьд бүтэхгүйгээс гадна процессорын загвар (ISA — Instruction Set Architecture) болгон өөр өөр хэлтэй.
Дараах жишээг харцгаая (эх сурвалж: Wikipedia):
00000101
Дээрхи найман цифр машин код Zilog Z80 загварын процессорын B регистерт (register — процессорын өөрийнх нь бичил санах ой) хадгалагдсан утгыг нэгээр багасгаж байна. Ийм байдлаар код бичих амаргүй л байх болов уу. Хэрэв магадгүй энэ таны сонирхолыг үнэхээр татаж байвал микропроцессорын програм хангамжийг (microprocessor programming) судлаж үзээрэй. Машины код ажиллахад хамгийн сонирхолтой нь яг тухайн агшинд компьютер ямар нэгж үйлдэл хийж буй нь шууд харагдана, ямар нэг хийсвэрлэл, халхавч байхгүй.
Дараагийн түвшний хэл болох ассемблей хэлийг (asm гэж хочилдог) авч үзье. Ассемблей хэл нь машины хэлийг хүн уншихад арай дөхөм болгох үүднээс үсгээр төлөөлүүлсэн mnemonic code юм. Дээрхи жишээ кодыг ассемблей хэлээр бичвэл:
DEC B
Ассемблей хэлний гол зорилго нь машины хэлийг хийсвэрлэн хялбарчлах ба үүгээр маш үр ашигтай програмуудыг бичдэг. Томоохон давуу тал нь програмист техник хангамжтай хамгийн ихээр ойртох боломжтой. Тэгэх шалтгаан нь гэвэл өндөр хурдтай ажиллагаа юм. Үндсэн хэрэглээ нь ихэнхдээ гүйцэтгэлийн оновчлолтой (performance optimization) холбоотой ба системийн програм хангамж зохиоход ашиглана.
Машины хэлтэй адилаар ассемблей хэл ч мөн процессор болгоны хувьд өөр өөр. Энэ нь яагаад хэлний доод, дээд түвшингүүд байдаг, байх шаардлагатайн бас нэг шалтгаан юм. Хийсвэрлэл (abstraction) гэдэг нь доод түвшний нарийн чимхэлүүр ажлуудыг дээд түвшинд нь хийсвэрлэн халхалж эцсийн хэрэглэгчийн (энэ тохиолдолд програмист) ажлыг хялбар болгоход оршино. Уг арга зүйг компьютерийн шинжлэх ухаанд өргөнөөр ашиглана.
Одоо харин түвшин ахиж хэлэлцүүлэг хамгийн ихээр өрнөдөг дээд түвшин рүү орцгооё. Дээд түвшний хэлнүүд нь англи хэл дээр үндэслэн зохиогдсон хүн код унших, бичих, сурахад хялбар байхаар бүтээгдсэн хэлнүүд юм. Мөн хийсвэрлэлийг ашигласнаар таны дээд түвшний хэл ашиглан бичсэн код нь доор нь ямар загвартай процессор ажиллаж байгаагаас үл хамааран хаана ч ажиллана гэсэн үг юм.
Хэрвээ та анзаарсан бол дээрхи зурганд дээд түвшний хэл гээд гурван хэл байна. Үүнээс Fortran нь хамгийн анхны дээд түвшний хэл гэгдэх ба 50-иад онд IBM компани бүтээсэн байна. Pascal нь 70-аад онд хүчээ авч байсан ба тэр үедээ Америкын их сургуулиудад анх код зааж эхэлсэн хэл гэгддэг. 90-ээд онд Монголын зарим сургуулиудад мэдээлэл зүйн хичээл дээр ч заадаг байсан.
Голынх нь харин домогт C хэл бөгөөд анх Unix үйлдлийн системд зориулж бүтээгдээд 80-аад оноос ерөнхий програмчлалын хэл (general-purpose language) болж тархсан байна. C бол маш хүчирхэг хэл ба өөр бусад дээд түвшний хэлнүүдийг ч C ашиглан бүтээх нь элбэг.
Код сурч буй хүн болгоны хамгийн анх бичдэг Hello, World! (зүгээр л дэлгэцэн дээр эдгээр үгсийг хэвлэх) програмыг C дээр бичвэл:
#include <stdio.h>
int main(void)
{
printf(“Hello, World!\n“);
}
C хэлний амжилт уг хэлэнд тулгуурласан олон төстэй хэлүүд гарч ирэх суурь болсон ба томоохон жишээ гэвэл C++ хэл байна. С++-ыг C хэлний объект-хандалтат (object-oriented programming — програм зохиох нэгэн төрлийн загвар) хувилбар гэж бас ярьдаг боловч хоёр тусдаа хэлнүүд юм. Play Station, Xbox-г програмчлахад C++ ашиглана.
Дээд түвшин дотроо бүр өндөр түвшний хэлүүд рүү орцгооё. Эхнийх нь Java гэж 90-ээд онд гарч ирсэн түгээмэл хэл (Sun Microsystems-д бүтээгдэж дараа нь Oracle-ынх болсон) байна. Java ашиглан хийхгүй зүйл гэж үгүй бөгөөд та бидний өдөр тутам хэрэглэдэг Android аппуудыг хүртэл Java дээр бичнэ. Hello, World!-г Java-гаар бичье:
public class HelloWorldApp {
public static void main(String[] args) {
System.out.println(“Hello, World!”);
}
}
Харин өнөөдөр дэлхий даяаар бүх салбарт хэрэглээ нь хамгийн хурдацтай өсөж буй нэгэн дээд түвшний хэл бол Python билээ. Python нь өнөө цагийн #1 хэл гэдгийг хэн хүнгүй хүлээн зөвшөөрөх ба энэхүү хэл нь хиймэл оюун, өгөгдлийн шинжлэх ухаан, вэб хөгжүүлэлт, автоматжуулалт гээд орчин үеийн чухал салбаруудад өргөн хэрэглэгдэж байна. Уншихад ойлгомжтой, энгийн бөгөөд товчхон бичиглэлтэй байдал нь анхлан суралцагсад код бичиж эхлэхэд нэн тохиромжтой хэл юм. Hello, World!-г Python-оор бичвэл ердөө ганц л мөр код болох юм:
print(“Hello, World!”)
Цаашилбал өөр мянга мянган програмчлалын хэлүүд байх ба бусад түгээмэл хэрэглэгдэх ерөнхий програмчлалын хэлүүдээс дурьдвал JavaScript, C#, PHP, Ruby, Perl, R, Swift, Go, Kotlin, Julia гээд програмистуудын сонголт арвин. Гагцхүү хэр ирээдүйтэй хэлийг сонгож цаг заваа гарган сурах вэ гэдэг л чухал юм.
Програм хангамж
Програм хангамж (software) нь ажиллахад бэлэн болсон эцсийн бүтээгдэхүүн юм. Олон жижиг програмууд цогц болж програм хангамжийг бүрдүүлэх ба тэдгээрийг үндсэнд нь системийн (system software) болон хэрэглээний (application software) програм хангамж гэж ангилна. Үүнд системийн програм нь хэрэглээний програмынхаа ажиллах нөхцөлийг бүрдүүлж өгдгөөрөө онцлог юм. Системийн програм хангамжийн хамгийн энгийн жишээ бол үйлдлийн систем (operating system) юм. Бидний байнга хэрэглэдэг Windows, Android, iOS нар бүгд системийн програм хангамж байх нь. Хэрэглээний програмууд бол харин маш олон янз бөгөөд бидний өдөр тутам хэрэглэдэг аппууд, вэб хөтөч, оффис програмууд, тоглоом бүгд багтана.
Дээд түвшний хэлээр бичсэн кодыг машины код болж хувиргах үүргийг “орчуулагч” програмууд гүйцэтгэдэг ба үндсэн хоёр төрөл байдаг нь compiler болон interpreter нар юм. Эдгээр нь мөн системийн програм хангамжууд юм. Тиймээс compiler/interpreter орчуулгыг нь хийгээд өгөх учраас программист доод түвшний хэл хэрэглэлгүйгээр ганц дээд түвшний хэлээр програм зохиох боломжтой.
Эдгээрийн хоорондын ялгаа гэвэл товчхондоо compiler нь эхлээд бүх дээд түвшний кодыг машины хэл рүү орчуулснаар машины кодыг бүтээж нэг мөсөн ажиллуулдаг бол interpreter нь дээд түвшний кодыг газар дээр нь мөр мөрөөр нь орчуулж нэг нэгээр нь ажиллуулах гэсэн ондоо зарчимтай. Дээд түвшний програмчлалын хэлнүүд эдгээрийн аль нэг зарчмаар ажилладаг ба дээр дурьдсан Fortran, Pascal, C, C++ хэлнүүд нь compiler ашиглах (compiled language) ба Java, C#, PHP, JavaScript, Ruby, Perl, Python, R, Kotlin нар interpreter ашигладаг (interpreted language) байна. Харин ажиллагааны хувьд compiled language ашигласан код ажиллах үедээ шууд машины хэл болчихсон байдаг учраас илүү хурдан ажиллагаатай.
Нийтлэлийг бичсэн М.Золбаяр нь Codercub-ын үүсгэн байгуулагч ба Энэтхэгийн Пүнэгийн их сургуулийн мэдээллийн технологийн инженер баклавр, АНУ-ын Миззуригийн их сургуулийн компьютерийн шинжлэх ухааны магистр цолтой.
Уг нийтлэл нь Өдрийн сонины 2019 оны 12-р сарын 24-ны дугаарт нийтлэгдсэн ба бидний оюуны өмч бөгөөд мэдлэг түгээх зорилгоор чөлөөтэй ашиглаж болох ба энэ тохиолдолд эх сурвалжаа дурьдахыг хүсье.
Codercub нь Code.org байгууллагын Монгол дахь түнш бөгөөд хүүхдэд зориулсан Монголын анхны coding bootcamp юм.
hey there and thank you for your info – I’ve definitely picked up something new from right
here. I did however expertise some technical points using this site,
as I experienced to reload the web site many times previous to
I could get it to load properly. I had been wondering if your web host is OK?
Not that I’m complaining, but sluggish loading instances times will very frequently affect your placement in google and could damage
your high quality score if ads and marketing with Adwords.
Anyway I am adding this RSS to my e-mail and could look out for much more of your respective exciting content.
Make sure you update this again very soon.