Унших хугацаа: 14 минут
Улирлын шалгалтуудаа дуусгаад профессорынхоо хүсэлтээр нэг case study бичих санаатай гэртээ сууж байлаа. Энэ case study-д би өөрийнхөө талаар чухам яагаад олон нийтлэл бичиж, өөрийнхөө сурсан мэдсэнээ бусадтай хуваалцдаг тухайгаа хүнд ойлгогдохоор болгож бичих ёстой. Надад бол энийг яаж бичих талаар ямар ч санаа орж ирэхгүй ичмээр юм болоод, үсээ зулгаагаад, дагзаа малтаад сууж байсан. Харин яг энэ үед надад өөрийгөө би бол wantrepreneur гэж танилцуулсан охин хэрхэн програмчлалыг сурах талаар зөвлөгөө асууж холбогдлоо. Нээх тийм ч их сонин асуулт биш боловч яагаад энийг сурах гэж хүссэн нь надад их сонин байлаа. Өөрийнхөө “яагаад”-г олоогүй хүн юу хийхээ олдоггүй шүү дээ. Тэгээд л тэр охиноос яагаад програмчлал сурах болсныг нь асууж тамлаж байхад толгойд нэг юм тогхийгээд л явсан. Аа тэр би яагаад нийтлэл бичиж өөрийн нандин цагаа бусдад үрж суудаг гэдгээ мэдэхгүй суугаад байж. Харин энэ асуултад хариулахын тулд олон жилийн өмнөх “Би” рүү буцаж аялах хэрэгтэй болно.
2008 онд би гэдэг хүн их сургуулиа хаясан, нэг студид цалингүйгээр, өөрийн гэрийнхээ компьютерыг тэр студидээ зөөж авчраад тэнд ажилладаг байлаа. Орой бүр Энхтайваны гүүрнээс 100н айл хүртэл ажлын андтай хамт алхаад, тэндээсээ гэр лүүгээ харина. Гэртээ шөнө дунд өнгөрсөн хойно орж ирээд хоолоо идчихээд жаал ном уншиж суугаад унтана. Дараа өдрөө энийг давтана, ажлын өдөр бүр, хагас бүтэн сайн, баярын өдрүүд хамааралгүйгээр. Тухайн үед бол яагаад ингэж явдаг байсан гэхээр надад мэдлэг, боловсрол, чадвар хэрэгтэй байсан учраас гэж хариулна. Зөвхөн студи дээр л надад интернет холболт олдож байсан, зөвхөн интернет холболттой байж л google, youtube, torrent ашиглаж өөрийгөө сайжруулах хичээлийг сурах боломжтой байсан, зөвхөн студи дээр л надаас илүү ухаантай, боловсорсон хүмүүсээс юмыг хэрхэн сурах талаар асуух боломжтой байсан, зөвхөн тэнд л би боловсорсон иргэн болох алхмаа эхлүүлж байсан учраас тэгж явдаг байлаа. Тэр студидээ сайхан юм бүтээх юм сан гэх чин хүсэлтэй залуустай хамт өөрт шаардлагатай зүйлсийг хэрхэн сурах аргаа өөрөө хайж олж сурч байсан нь өнөөдрийн “би”-г бүтээсэн үндэс болсон. Энэ ч утгаараа студийнхан маань надад маш их тусалсан сайн залуус. Чухам ингэж явж байсныхаа үр дүнд хүн боловсролгүй байх ямар болохыг, мэдлэггүй боловсролгүй хүн хэрхэн ичиж үхэм байдалд байдгийг, мэдлэг боловсрол олж авах явц хир хэцүү болохыг, хүмүүс боловсролтой болох замдаа хир хэцүүг давах хэрэгтэй болохыг ухаарч мэдсэн. Харин би энэ хэцүү болгоныг өөрийнхөө чадах хэмжээнд, мэдэх зүйлсийн хүрээнд хүмүүст боловсорсон иргэн болох процессыг нь хөнгөвчилж өгөхийг хүсдэг бололтой. Энэ бол миний яагаад IELTS, academic English-н талаар цуврал нийтлэлүүд бичиж, яагаад өөрийн өдөр тутмын цагаа үрэн энэ группийг зохицуулж суудаг шалтгаан байлаа. Сүүлийн үед зөвхөн англи хэл, IELTS ч гэлтгүй өөр ганц хоёр шинэ зүйлийн талаар бичиж ч эхэлсэн. Харин энэ удаагийн нийтлэлдээ хэрхэн програмчлалын ертөнцөд хөл тавьж, тэндээ хөл алдалгүйгээр өөрийн хүссэн хэмжээндээ хүрэх талаар бичье.
Нийтлэлээ цааш үргэлжлүүлэхээс өмнө зарим хүмүүсийн цагийг хэмнэх үүднээс би өөрийнхөө ямархуу төвшинтэй, ямар чиглэлээр сонирхож хөөдөг гэдгээ бичсэн нь дээр болов уу. Би бол хүмүүсийн мундаг гэж тодорхойлдог дэлхийн том том компаниудад ажилладаг хүн биш бөгөөд тэдгээр залуучуудын мэдлэг, туршлагыг гүйцэх хэмжээнд очоогүй нэгэн. Сонирхлын хувьд бол хиймэл оюун ухаан, тооцооллын үндэс, алгоритм, визуал эффэкт, визуал боловсруулалт хийх тал руу судалдаг нэгэн. За тэгээд өөрийн тань сонирхол нийтлэлийг цааш үргэлжлүүлэх хэвээрээ бол ингээд үргэлжлүүлж уншина уу.
Хамгийн эхэнд үндсэн онолын талаар болон бакалаврын хөтөлбөрийг онлайнаар эзэмшинэ гэвэл ямархуу байх талаар бичих бол програмчлал сурах явцаа хүмүүсийн сонирхлоор хуваасан гурван тусдаа замд хувааж бичих болно. Мэдээж хүн болгонд яв цав таарах процесс гэж байхгүй учраас хүн бүрийн “яагаад”-д тааруулж ингэж хувааж байгаа болно. Одоо үеийн програмчлалын дэвшил, хөгжил дэндүү өргөн болсон бөгөөд нэг хүн нэг чиглэлийнхээ ч бүх зүйлийг мэддэг байх ямар ч боломжгүй болсны дээр манай Монголчуудын хэт их биеээ үнэлсэн зангийн улмаас ингэж хуваах болсон. Манайхан маань бид бол бусдаас тусдаа гээд хэт итгэчихсэн, ямарваа нэг зүйлийг бүүр эхнээс нь бүх зүйлийг сурч байхыг хүсдэг нэг гэнэн талтай. Зарим нийгмийн шинжлэх ухааны салбарт энэ байж болох ч програмчлалд бол энэ боломжгүйн дээр ингэж сурах гэж оролдох нь зүгээр л цагийн гарз. Үүнээс гадна код бичдэг болгон программист биш. Computer scientist, programmer, software engineer бол гурвуулаа өөр өөр ойлголт. Хүн харахад хийж байгаа зүйл нь код бичиж байгаа боловч ажил мэргэжлийн үүрэг нь шал тусдаа. Энэ ойлголтын ялгааг барилгын инженер дээр жишээ аваад тайлбарлая. Манайхан бүгд л барилгын инженер гэж ямар хүн болохыг мэдэж байгаа, хэдэн жилийн баталгаатай барилга хэрхэн баригдах талаар зураг төсөл зурж, хэдий хугацаанд, ямар төхөөрөмж, хэдэн хүн ашиглаж барилгаа хэрхэн барих талаар тооцоолж төлөвлөнө. Програмчлалд ийм зүйл хийдэг хүн бол software engineer. Барилгад ашиглаж болох шинэ технологиуд байнга гарч ирнэ. Тэрийг барилгын материал, технологийн салбарын эрдэмтэд судалж гаргаж нээлт хийнэ. Програмчлалд бол энэ хүн computer scientist. Заримдаа хүн болгонд богино хугацаанд байшин барих эсвэл засвар хийх шаардлагатай болдог. Энэ үед манайхан 100н айл явж тэндээсээ “Би чадна”-г хөлсөлж өөрсдийн барилга дээр ажиллуулдаг. Програмчлалд бол эдгээр хүмүүс programmer. Ийм учир шалтгаануудын улмаас гурав хувааж ангилсан байгаа. Мэдээж үндсэн онол бол аль алинд ч адилхан.
Одоо үед интернетийн ачаар өөрийн хүссэн зүйлээ google-д дөхүүлж шахуу бичээд л хайхад хэрэгтэй хайлт гараад ирдэг. Хэрвээ google-д ажилд орохын тулд юу мэдэх ёстой вэ гэж хайвал иймэрхүү хариулт гарч ирэх болов уу.
Source: Google Career
Энэ зааварт хамгийн хэрэгтэй гэх зүйлсийг болон тэдгээрийг сурч болох онлайн курсийн хамт оруулсан. Хамгийн эхнийхээс нь эхлээд Test your code гэдэг хэсэг хүртэл бүх зүйлийг сурах хэрэгтэй ба тэрнээс бусад хэсгийг бол програмчлалыг юунд хэрэглэж байгаагаасаа хамаараад сонгон үзэж болно. Google-н энэ жагсаалтаас гадна өөр нэг сайн жагсаалт гэвэл:
Source: Open Source Society
Энэ жагсаалтаас Core CS хэсэг хүртэл бүгдийг нь үзэх хэрэгтэй ба тэрнээс цаашаа бол өөрийн сонирхлоос хамаарна. Уг сайтад ч гэсэн энийг сайн тайлбарласан байгаа даа. За тэгээд үндсэн сууриа үзсэний дараа цаашаагаа юу сурах бол хүн хүнд өөр. Жишээлбэл зөвхөн бизнес хийхийг хүсэж буй хүн бол advanced subject-уудыг үзэх шаардлагагүй. Шууд Ruby сураад өөрийн бизнес санаагаа туршиж байсан нь дээр. Одоо үед Ruby-г ашиглаад Twitter-тэй адилхан вэб аппыг хэд хоногт л шууд угсраад ажиллагаанд оруулаад зах зээл дээр туршчихдаг болсон үе. Програмчлал сурах арга замын эхнийх нь бол өөрийн гэсэн апп хийж, хурдан хугацаанд өөрийнхөө санааг хэрэгжүүлж бизнес эрхлэх гэсэн хүмүүст зориулсан, хоёр дахь нь бол програмчлалыг яг програм бүтээх буюу програм инженерчлэл талаас судлах гэсэн хүмүүст тохирох бол гурав дахь зам бол програмчлалын онцлог, тооцооллын үндэс, хиймэл оюун ухаан, бие даан сурах машин ухаанчлал гээд онол, судалгаа, шинэ салбарууд руу орохыг хүссэн залуус, дөнгөж сонирхож эхэлж байгаа сурагчид илүү тохирох болно. Хэрхэн сурах арга замуудыг онлайн курсүүд болон онлайн аппаар бүрдүүлэн сонгож, заримд нь онлайн тэмцээн, урам авах бодит түүхүүд, хэрэгцээт сайтуудыг хамруулж өглөө.
1.Хурдхан шиг бизнес апп хийхийг хүсэгчдэд
Бизнес аппаар юуг төлөөлүүлж хэлж байгаа юм гэхээр вэб аппуудыг хэлж байна. Хэн нэгэн вэб хөтөч дээрээсээ өөрийн чинь хийсэн аппыг ашиглах боломжтой. Ийм зүйл хийж сурахын тулд мэдээж вэб сайт хийх хэрэгтэй. Вэб сайт хөгжүүлэлтийг Frond-end болон Back-end гээд хоёр хуваагаад ангилчихдаг. Энэ хоёрыг аль алин дээр ажиллах чадвартай инженерийг Full-stack гэнэ. Front-end хөгжүүлэлтээс эхлээд суралцвал их амар. Яагаад гэхээр бусад програмчлал шиг тэгж их логиктой зууралдах байхгүй.
https://academy.microsoft.com/en-us/professional-program/front-end-development/
Microsoft-с бэлдэж гаргасан энэ цувралд HTML, CSS, JavaScript гээд front-end хөгжүүлэлтийн үндсэн хэлнүүдийг сурахаас гадна jQuery, AngularJS, Bootstrap, Node.js гээд орчин үеийн вэб хөгжүүлэлтэд их хэрэг болдог хэрэгслүүдийн талаар үзэх боломжтой. HTML бол вэбийн үндэс агуулгыг гаргаж өгөх бол CSS вэбийг ямархуу харагдах вэ гэдгийг, JavaScript бол вэбийг хэрхэн хэрэглэгчтэй харьцахыг шийднэ.
https://www.edx.org/professional-certificate/front-end-web-developer-9
Энэ цуврал W3C (World Wide Web Consortium)-с гаргаж буй хичээлүүд. W3C дэлхийн вэб технологийн стандартыг тодорхойлдог байгууллага. Өмнөх цувралын адил HTML, CSS, JavaScript үзнэ. За тэгээд HTML5 гээд шинэ стандартаар хэрхэн вэб тоглоом хийхийг хүртэл үзнэ.
https://developers.google.com/web/fundamentals/
Хэрвээ Google-н шүтэн бишрэгч бол дээрх цувралуудтай адилхан зүйлсийг эндээс сурч болно.
Одоо хэрхэн Back-end хөгжүүлэлт хийх талаар ярилцая. Энэ бол ерөнхийдөө сервер дээрх датагаа хэрхэн удирдах, вэб хэрэглэгчээс ирэх хүсэлтийг (HTTP request) хэрхэн биелүүлэх талаар юм. Жишээлбэл хэн нэгэн Facebook-д пост бичлээ гэхэд тэрийг нь сервер дээрх хард диск дээрээ хадгалж авах бол хэн нэгэн өөрийнхөө зургийн цомгийг үзэхээр болвол хэрэглэгчид сервер дээрх харднаасаа тэр зургийн цомгийг гаргаж ирэх юм. Одоо дэлхий дахинд хэрэглэгдэж байгаа програмчлалын хэлнээс хамгийн амархан, хамгийн хурдан хугацаанд бүрэн вэб апп хийх чадвартай хэл бол Ruby гэж бодож байна. Ruby-д орчин үеийн хэрэглээнд байдаг үе тэнгийнх нь програмын хэлнүүдэд байдаг бүх шинж бий, дээрээс нь meta-programming гэх онцгой шинж болон functional programming-н хэдэн элемент бий.
https://www.codecademy.com/learn/ruby
Эдгээр сайтаас Ruby-н талаар сурч болно. Гэвч яаж энэ хэлийг ашиглан хурдан вэб апп хийх билээ? Хариулт нь бол – Ruby on Rails.
https://www.edx.org/professional-certificate/agile-development-using-ruby-rails
https://www.railstutorial.org/book
Дээрх цувралаар RoR (Ruby on Rails) –н талаарх сурч болно. Ялангуяа Micharl Hartl-н номоос их зүйл сурч, хэдэн апп, twitter хуулбар хүртэл хийж сурна.
Яахав Ruby-р юм хийж байгаад гацаад google-дэж гацсан зүйлээ засахаар хайгаад үзэхэд маш их хариулт гарч ирнэ. Бүүр маш их. Хэтэрхий их байхаас гадна нэг зүйлийг хэдэн янзаар хийх талаас нь тайлбарласан хариултууд их учраас заримдаа толгой эргэм. Ruby-н metaprogramming-н шинж чанараас л тэгж байгаа л даа. Програмчлалын функцүүдээ шууд өөрчлөөд кодоо бичиж болдог болохоор ямар нэг асуултад яг нэг тохирсон шийдэл гарна гэж байхгүй. Хэрвээ Ruby-д дургүй ч юм уу эсвэл Монголчуудынхаа ашигладаг хэл, технологийг ашиглана гэвэл доорх цувралуудыг харж болно.
Bentio бол програмчлалыг бие даан сурсан хүний гаргаж байгаа хэрхэн вэб програмчлал сурах талаар заавар аргачлалын товчоон. Эндээс front-end, back-end гэх ч юм уу эсвэл шууд web development гэж сонгоод өөрийгөө хөгжүүлээд байх боломжтой. Энд Python-г ашиглаж хэрхэн вэб апп хийх талаар их хичээл бий. Харин нөгөө хоёр нь бол Harvard-н цуврал хичээл. Яг л тэндхийн оюутнуудын нэг улиралд үздэг курс. Хоёулаа хэрхэн вэб апп хийх талаар PHP хэл дээр тулгуурлан заана. Курсийн төгсгөлд өөрийн гэсэн нэг вэб апптай болно. CS164 бол хэрхэн вэб апп хийх техник талдаа биш хэрхэн вэб апп инженерчлэх вэ гэх онол тал уруугаа их хазайсан.
За эд нарыг сурч аваад дараа нь Google-н tech entrepreneur, start-up гэх программууд, эсвэл MIT-н хөтөлбөрүүд, Do School-н хөтөлбөрүүд гээд зөндөө сургалтын материалууд олдоно.
2. Програм инженерчлэл
Програм инженерчлэхдээ C++, Java, Python гэдэг үгнүүдийг маш сайн мэдэх хэрэгтэй болно. Гэхдээ үүнээс илүү хэрэгтэй зүйл нь програмчлалын төслийн менежмент. UML, Water Fall model, Unified process, V-model гээд л танил үгнүүд. Одоо эдгээр аргачлалууд хоцрогдож эхэлсэн ба Agile гэх аргачлал стандарт боллоо гэхэд буруудахгүй.
https://www.edx.org/professional-certificate/agile-development-using-ruby-rails
https://www.edx.org/course/software-engineering-essentials-tumx-seecx
Дээрх хоёр курсээс ерөнхий процесс болон хэрхэн зохион байгуулах талаар мэдээлэл авчхаж болох байх. Би өөрөө ч энэ зун эдгээр курсүүдэд таваргаж яваа. Надад бол хувьдаа Agile аргачлал их таалагддаг. Манай Монголд хүн захиалга өгөхдөө нэг юм хийчих гээд л орхичихдог. Тэрийг нь нэлээн удаан хугацаанд нойр хоол, аз жаргал, гэр бүл, анд найз, зугаа цэнгэл, агаар салхи, Улаанбаатарын утаа, замын түгжрэл, нарны гэрлийг умартан амь насаа дэмчин тавин байж хийж дуусгаад захиалсан хүндээ үзүүлэхээр нөгөө хүн маань “Өө энд нэг зүйл нэмэхээ мартсан байна, ийм зүйл байсанг чамд хэлэлгүй мартчихаж, энийг жаахан өөрчилчихье, нэг юм нэмчих тэгээд маргааш гэхэд дуусчихна биз дээ” гэх мэт зүйл яриад уур хүргэдэг л биз дээ тээ. Иймэрхүү байдалд хэрхэн хүрэхгүйгээр л программаа бичиж дуусгах нь Agile-н гол мөн чанар. Захиалагчаас заавраа аваад тэрийгээ хурдан загварчилж програмчлаад тэндээсээ захиалагчтайгаа ойр ойрхон програмынхаа процесс өөрчлөлтийнхөө талаар холбогдож явж төслөө дуусгана.
Source: Calumo.com
Эндээс Agile-н ерөнхий зарчмыг харж болно. http://agilemanifesto.org/
Agile болон бусад уламжлалт төслийн менежментийн процессын талаар Bolor dictionary-г зохиогчийн Монголоор бичсэн тайлбарыг харах бол эндээс үзнэ үү.
За тэгээд хэрхэн програмаа бичих вэ гэвэл эдгээр курсийг оролдож болох юм уу.
https://www.edx.org/micromasters/software-development
https://www.edx.org/professional-certificate/computer-science-essentials-software
Ер нь тэгээд явж явж хэрхэн сайн програм инженер байх бол шууд л математик, алгоритмын мэдлэгээс хамаарч байгаа юм даа. Би гэж нөхөр нэг удаа demo google interview-д хэдэн хүнтэй цуг орж байсан юм. Тэнд ирсэн асуултууд бол хэрхэн програмчлах биш, хэрхэн асуудлыг шийдэх тал уруугаа байсан. Жишээ нь хэрхэн youtube-д их хандалттай байгаа бичлэгүүдийг тухайн видео үзэж байгаа газрын байршлаас хамааруулаад серверүүдийн ачааллыг тохируулах вэ, wifi цацагчдыг хүртээмжийг аль болох өндөр байлгаж, аль болох бага зардлаар тодорхой хэсэг газарт хэрхэн байрлуулах вэ гэдэг ч юм уу. Ярилцлагад бол би цаасаа харж, өрөөний таазны бүтцийг судалж байгаад л гарч ирсэн хаха. Доорх youtube playlist алгоритм сайн сурахад их хэрэг болохоор юм билээ. Би бас өөрөө энэ видеон дунд толгойгоо цохиод л яваа.
https://www.youtube.com/playlist?list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb
Ойрын үед (магадгүй ойрын 10н жил) хамгийн их моодонд орох сэдвүүд бол Machine learning, Blockchain, VR. Эд нар дөнгөж манай Монголд орж ирээд буй. Энэ чиглэлээр мэдлэг сайтай бол Монголдоо томоохон төслүүдэд ажиллах бол нээлттэй байх гэж бодох юм.
https://www.ibm.com/developerworks/learn/
https://developers.google.com/training/
IBM, Google хэзээд ямар нэг сургалтын програм гаргасаар л ирсэн. Энэ дунд хэсэг эргэлдэхэд шинэ зүйлс гараад ирэх байх. Эдгээр компанид дургүй юу? Тэгвэл Intel-н Machine learning program ямар уу?
https://software.intel.com/en-us/ai/machine-learning
3. Сурагчид болон онол сонирхогч
Шинжлэх ухаан талаас нь эсвэл сурагч, оюутан залуус маань хэрхэн бие дааж суралцаж болох талаар хэдэн зүйл бичье. Ерөнхийдөө бол өмнөх үндсэн ухагдахуунуудтай хэсгээс хөөгөөд сурсан ч болно л доо. Тэгэхдээ арай илүү дэлгэрэнгүй задалсан сурах зам хэрэгтэй байж магад.
http://blog.agupieware.com/2014/06/online-learning-intensive-bachelors.html
https://github.com/jwasham/coding-interview-university
Энэ хоёрын хамгийн эхнийх нь хэрхэн онлайнаар ямар ч үнэ төлбөргүйгээр бакалаврын зэргийн сургалтыг сурч болох талаар их нарийн задалж бичсэн байгаа. Харин нөгөөдөх нь бол дэлхийн том компаны инженерийн албан тушаалд ажиллахыг хүссэн хүнд зориулсан жагсаалт. Юу мэдвэл зохилтой талаар жагсааснаас гадна яг ярилцлагад орохынхоо өмнө хэрхэн өөрийгөө бэлдэх талаар ч багтаасан их өргөн жагсаалт. Онолын мэдлэгээ илүү гүнзгийрүүлэх материал хайж байгаа бол MIT-н материалууд дунд харахад гэмгүй дээ.
Source: Andrewmui.com
https://ocw.mit.edu/courses/find-by-topic/#cat=engineering&subcat=computerscience
Би л хувьдаа энэ дундаас байнга ганц хоёр сэдэв судалж суудаг. Бусадтай харьцуулахад муу сайныг бол хэлж мэдэхгүй юм. Гэхдээ уг сургууль маань дэлхийн хамгийн шилдэг технологийн сургууль шүү дээ. Хэрвээ аль курсийг нь сонгож сурахаа мэдэхгүй байгаа бол энийг үз.
https://www.scotthyoung.com/blog/myprojects/mit-challenge-2/
Нэг залуу өөрөө бие дааж MIT-н бакалаврын хөтөлбөрийг нэг жилд сурч дуусгахаар шийдэж, нэлээн олон курсийг дээрх жагсаалтаас бие дааж суралцаж өөрийнхөө бодлыг бичиж хадгалсан байдаг. Аль курс нь ямархуу гэдгийг энэ залуугийн сэтгэгдлээс харж болно.
За сурагч хүүхдүүд хэрхэн програмчлал сурч болох вэ? Хүүхдүүдийн хувьд бол энийг бол аль болох эрт сурсан нь дээр. Яагаад гэвэл тэдэнд чөлөөт цаг болон юмыг хурдан ойлгох потенциал бий. Анхан шатнаас нь сурахад:
https://ocw.mit.edu/courses/intro-programming/
https://see.stanford.edu/Course#Introduction to Computer Science
https://www.khanacademy.org/computing/computer-programming
https://www.khanacademy.org/computing/computer-science
https://www.udacity.com/course/intro-to-computer-science–cs101
https://developers.google.com/edu/python/
Эдгээр курсүүдээс харж судалж болно. Анзаарсан бол ихэнх нь Python хэл дээр хөгжүүлэлт хийж эхэлнэ. Яагаад гэвэл энэ хэл маань их амархан бас хэрэглээ нь их өргөн. Мөн уг хэл маань Google-н албан ёсны хэл гэдгийг ч мартаж болохгүй. Энэ дунд нэг Stanford-н курс бий. Ороод үзэхэд бол их дээр үеийн курс гэдэг нь шууд анзаарагдана. Их хуучных хэдий ч тэнд яригдаж байгаа онолын зүйлс нь одоо хүртэл хэвээрээ. Бас шууд самбар дээр ажиллаад компьютерын хийх үйлдлийг шууд самбар дээрээ тайлбарлаад байгаа нь ойлгоход их тустай. Мөн суралцаж эхэлж байхад жижиг хэдий ч их чухал зүйл байдаг. Тэр бол бичиж байгаа хэлний бичилтийн стил. Чи өөрөө өөртөө хэрхэн лаг ойлгомжтой байхаар код бичсэн ч тэр кодыг чинь бусад хүн бас харж ашиглах учраас кодоо аль болох ойлгомжтойгоор стандарт хэв маягт тохируулж бичих хэрэгтэй. Хэдий сонин санагдаж магадгүй ч би энэний хэцүү байдлыг саяхан биеэрээ мэдэрсэн. Манай багийн нэг залуугийн код бол үнэхээр ойлгомжгүй. Код нь бол зөв ажиллагаатай хэдий ч бусад хүмүүс тэрийг нь ашиглах болоход нэг л болж өгөхгүй. Энэ байдлаас болж багийн ажил хэдэн долоо хоногоор доголдолтой байсан гэж бодно. Дэлхий даяарх мэргэжилтнүүд ер нь Google-н гаргасан стандартыг дагаад явчихдаг. Тэрийг сурч байгаа хэл болгоноороо шүүж хараад, тэр стилийг дагаж бичиж сураарай. https://github.com/google/styleguide
Сурагч байх үедээ програмчлал сурах нь бас өөр нэг том давуу талтай. Тэр нь юу гэхээр элдэв тэмцээн уралдаанд их орох боломжтой. Google-н зүгээс зарладаг сурагчдад зориулсан хэдэн тэмцээнт хөтөлбөрөөс сонирхуулбал:
https://developers.google.com/open-source/gci/
https://www.cs-first.com/en/home
https://edu.google.com/resources/programs/high-school-symposium/
https://edu.google.com/resources/programs/computer-science-summer-institute/
Эдгээр хөтөлбөрөөс гадна Олон улсын мэдээлэл зүйн олимпиад байна. Энэ мэт тэмцээнд оролцож өөрийн сургуульд явуулах анкет дээрээ томоохон жин нэмэх амжилт нэмж болно. Саяхан эдгээр тэмцээний нэгд Камерун улсын нэг тосгоны нэг хүү ялж их шуугиан тарьсан. Тэр хүүхэд ямар ч интернетгүй газраас хаа хол өөр тосгон уруу явж уг тэмцээндээ ордог байсан гэж ярилцлагадаа хэлсэн байсан.
Бахархам байгаа биз? Ийм сайхан бодит түүхүүд хаанаас ч олдоно. Танд урам өгөх хэдэн түүхийг хуваалцая л даа. Хэдэн жилийн өмнө нэг адуу тахалдаг залуу ажлынхаа хажуугаар хэрхэн код бичихийг сурч, хэрхэн өөртөө цаг гаргаж байгаа, хэрхэн бүтэлгүйтэхийнхээ хажуугаар хүссэн ажилдаа орсон тухайгаа өөрийн блогтоо долоо хоног болгон тэмдэглэл хийж оруулсныг эндээс уншиж болно. Одоо энэ залуу маань data scientist болох гээд өөрийгөө шахаж суугаа. Бас өөрөө хэрхэн 9н сар бие дааж програмчлал сурсан тухайгаа ном бичээд ч амжсан овоо гар. Энэ залуутай адилаар өөрийнхөө бизнесийн мэргэжлээ солиод апп хөгжүүлэгч болсон бас нэг залуугийн түүхийг эндээс уншиж болно. Энэ залуу өөрийнхөө хэрхэн сурч байгааг нийтлэл болгоод оруулаад яваа болохоор бас нэг талаасаа амар. Бизнестэй огт хамаагүй, дизайнер хүн бас хэрхэн програмчилж сурч байгаагаа нийтлэл болгоод хөтөлсөн аялалыг эндээс уншиж болно. Дандаа л програмчлалаар ажилд орсон хүмүүсийн тухай түүх уншиж байхаар өөрийнхөө санааг апп болгохын тулд програмчлал сураад тэр нь амжилттай байгаа хүний талаар уншвал ямар уу? Энэ бүсгүй өөрийн хүссэн фитнессийн аппаа хийхийн тулд програмчлал сурч тэр аппаа хэрхэн амжилттай байгаа нь бас л гоё түүх. Бүсгүй гэснээс эмэгтэй хүмүүс ч гэсэн ажлынхаа хажуугаар програмчлал бие дааж сураад, одоо томоохон компанид ажиллаж байгаа талаар эндээс уншиж болно. Энэ бүсгүйн хэрэглэсэн сурах материал бол нэг ашгийн бус байгууллагын гаргадаг материалууд. Уг материалыг ашиглаж маш олон хүн web development сурдаг, маш олон хүн ч кареертаа, амьдралдаа өөрчлөлт хийж програмчлалын ертөнцөд нэвтэрдэг. Уг байгууллагын материалууд бүгд үнэгүйгээс гадна тэд сертификат олгодог болохоор их олон хүн хамрагддаг байх л даа. Эндээс уг байгууллагыг сонирхож болно.
За энэ бүх хүмүүсийн түүхэнд юу нь их адилхан байна вэ? Бүгд л цаг завгүй хүмүүс, ажлынхаа хажуугаар бие дааж програмчлал сурч байгаа биз. Тэгээд бас энэ бүх хүмүүс web development-д орсон. Одоо үед бол вэб сайт, гар утас ашиглаж мэддэггүй соосогтой нярай ч олоход хэцүү цаг болсон. Үүнийгээ ч дагаад гар утасны апп, вэб хийх шаардлага компани болгонд л гарч ирнэ. Энэ их эрэлт хэрэгцээг дагаад вэб сайт сайн хийдэг тусгай мэргэжилтнүүдийн шаардлага ч дагаад өснө. Тэгээд web development-н нэг гоё тал нь бараг ямар ч математикийн хүнд хэцүү зүйл шаардагддаггүй. Ер нь ч програмчлалд ч математик их хэрэг болоод байх нь ховор. Мэдээж хэрэг ямар апп хийх гэж юунд ашиглаж байгаагаас бас хамаарна. Гэвч олон нийтэд байдаг тоондоо сайн гавал хүн л програм бичиж сурах боломжтой гэх бол шал хуурамч зүйл. Намайг demo google interview-д орж байхад Англи дахь Google-н салбарын хүмүүсийн өргөдөл шалгадаг инженер бол их хэцүү математикийн ойлголт хэрэггүй, магадлал, тооны зэрэг, ерөнхий хуваагч олох зэрэг математик чадвар их хэрэглэгддэг гэж байсан (Би нээрэн тэр ярилцлагадаа маш сүртэйгээр унасан гэж дурьдлуу хаха). Хэдий сонин ч, хэрхэн тулгарсан бэрхшээлийг зөв зүйтэйгээр шийдэх аргачлал олох л маш чухал байсан. Энэ чадварыг бол хүн болгон л эзэмшиж чадна.
Харин энэ чадварыг яаж эзэмших вэ? Яаж өөрийн хүссэнээ сурч, өөрийн хүслээ биелүүлж амьдрах вэ? Хариулт бол энгийн – бүтэлгүйтэх. Яг ингээд гоё түүх уншаад л, амжилтад хүрсэн хүмүүсийн тухай уншаад, тэдний тухай нэвтрүүлэг, кино үзээд дотор нээх гоё мэдрэмж төрөөд л, бүсэлхийнээс дээшээ цус хөөрөөд байгаа нь мэдрэгдээд л, нэг л шал өөр. Ингээд суух бол ганц хормын л мэдрэмж. Өөр юу ч биш. Хэнд ч хэрэггүй зүйл. Яг үнэндээ бүгд л нэг хүний амжилтын тухай ном уншаад, нэг хүний лекц сонсоод л тэрүүхэн мөчид дэлхийг гартаа атгаж байгаа юм шиг л санагдаж байгаад өөрийнхөө санаа, зорилгын талаар ойр дотнынхондоо хэлээд л тээ. Гэвч хэд хоногийн дараа гэхэд л тэр ярьж байсан бүхэн чинь агаарт ууршаад алга болсон, өмнө нь хийж байсан юмаа хийсээр л мөрөөрөө гутлаа чирээд явж байх нь олонтаа. Тэгээд л буцаад эхний байрандаа очоод хэн нэг хүний амжилтын тухай мэдэх, нэг лаг хүний яриа сонсох гээд л эхэлнэ. Нөгөө нэг хоромхон зуурын мансуурлаа мэдрэх гэж л тэр шүү дээ. Арай л сонин байгаа биз? Хажуугаар нь бас чухам мундаг хэргэм зэрэгтэй өөр нэг нь “эерэг зүйлийг бод, зөвхөн сайн сайхныг бодсоноор диваажинд хүрнэ, сайн бодол сайн үйлд хүргэнэ” гэх мэт утгагүй so hyped үгсийг урсгаад л. Үүнд нь бас төөрөлдөөд л, өөрийн хийсэн зүйл нь санаснаар нь болохгүй болохоор нь нөгөө “эерэг” зүйл бодож, “сайн сайхан” зүйлд анхаарлаа төвлөрүүлж өөрийнхөө алдаа гаргалгүй төгс хийдэг өдөр тутмын ажил амьдралдаа эргэж гишгээд л. За за юу ч бичээд эхлэв дээ, эерэг зүйл бодоод л бодоод л тэрэндээ үнэн батаар итгээд байхад сайн сайханд хүргэдэг гэдэг хийсвэр онолыг confirmation bias гээд шинжлэх ухаанд нэрлэчихдэг. Завтай бол хайж судалж үзнэ биз. Тэгэхээр юу хүнд хэрэгтэй вэ гэхээр яагаад тэр өөрийнхөө хүссэн зүйлийг хийх ёстой вэ, яаж аль болох оролдож байгаа ажилдаа хурдханаар бүтэлгүйтэх вэ, хэрхэн алдаан дээрээсээ босож цааш үргэлжлүүлэх вэ гэдэг сэтгэхүй л хэрэгтэй. Энэ талаар би нэг ийм нийтлэл бас нэг нисдэг хүүгийн тухай үлгэр бичиж байсан санагдана.
Тэгэхээр орчин үед үнэ цэнэ өндөртэй биет хүн байхын тулд програмчлал сурах гэж буй бол миний энд жагсааж бичсэн сурах гарцууд ямар ч хүнд хангалттай байж чадна гэж итгэж байна. Хамгийн гол нь эндээс сурч эхлээд хэрэгтэй мэдлэгээ хэрхэн сурах вэ, энд жагсаасан зүйлсийг сураад цаашаагаа хэрхэн хөгжих вэ гэдэг л тухайн хүний шийдэх ёстой асуудал. Мөн энэ чиглэлээр суралцаж байхад эхнээс нь эхлээд суралцах хэрэгтэй хувь хүний чадвар бий. Тэр нь хэрхэн багаар ажиллах. Үүнийг бол pair programming, code review гэх мэт байдлаар хэрэгжүүлж болно. Өөртэйгөө адилхан сонирхолтой хүнтэй хамтраад сурах зүйлээ нэгтгэж хамт зүтгэсэн ч болно. Тэртэй тэргүй энэ салбарт нэг хүн хэзээ ч ганцаараа бүгдийг нь хийхгүйгээс хойш эртхэн шиг багаар ажиллах чадварт суралцсан нь дээр. Одоо манай Монголын олон мундаг залуус гадаадад нарийн мэргэжил их эзэмшиж байгаа, тэдгээр залуучууд маань өөрсдийн мэдлэгээ эх хэл дээрээ хуваалцвал их олон хүнд тус болно гэж итгэх юм. Мэддэг гэж онгирох нэг хэрэг, харин мэддэг зүйлээ хүмүүст хүртээх гэдэг бол шал өөр зүйл.
За энэ бүхэн зуныг үр бүтээлтэйгээр өнгөрүүлэхэд тусалж чадах нь уу? Эсвэл програмчлалаас арай өөр чадвартай болмоор байна уу? Тэгвэл энэ сайт уруу ороод өөрийн юу сурмаар байгаагаа бичээд хайгаад үз. Тэндээс хэрхэн сурах талаар арга замыг гаргасан зурагчлал гарч ирнэ. Тэр замын дагуу оролдож байхад өөрт юу хэрэгтэй гэдгээ хараад эхэлнэ.
Link: https://learn-anything.xyz/learn_anything
Ер нь тэгээд алба ч биш дээ. Шинэ юм сурмааргүй санагдаад залхуу хүрээд байгаа бол ядаж ДОТА сайн тоглож сур даа. Зугаатай, цаг хурдан барна, бас ажил амьдралд хэрэгтэй олон зан чанарыг сургаж өгдөг тоглоом. Ингэсэн нь ядаж л энд тэндхийн партины хаалга долоо хоног бүр элээж, янз бүрийн сүрхий сүрдэм нэртэй сүрлэг хурал цуглаан уулзалтад очиж алгаа хорстол ташиж худлаа инээж сууснаас л дээр.
Тэгээд энэ зуныг хийж өнгөрөөх үү, хийрхэж үрэх үү?
Д.Төмөртогтох
2017.06.19
Cover image: Sheknows.com