Badral's personal blog
Интернет миний ертөнцийг хардаг цонх …

February, 2013Archive for

The small principles of Pan Mongolia

Thursday, February 28th, 2013

Дараах бичлэг миний нооргийн хавтаснаас олдов. Хэзээ бичиж байгаад нийтлэхээ мартсан юм бүү мэд. Одоо хуучирсан биз устгачъя гэж бодсоноо нэг гүйлгэж харлаа. Тэгээд нөхөн сэргээгдэх (зөв ашиглабал дуусахгүй), олон жил олон хүн, амьтан тэжээх боломжтой байгаль, өвс ургамал бүхий үнэт хөрс нутгаа сэндийчэн устгаж, оронд нь нөхөн сэргээгдэх боломжгүй хэдэн халтар цаас болгож, болгохдоо ердөө 34%-аа ч авч чадахгүй дээрээ тулж байгаа хөөрхий монголоо бодоод нийтлэх дээр нь дарчихлаа. Гэхдээ байгалийн баялагтай холбоогүй шүү.

Түрүүн цахим өртөөний Сайнбаяр даргын имэйлийг авч дараах хаягт тавигдсан нийтлэлийг уншиж гэрийн даалгавараа биелүүллээ. 🙂 http://www.tsahimurtuu.mn/24tsag/2011/01/14/1936
За тэгээд бодогдсон зүйлээ бичмээр санагдав. Нам, бүлэг, хөдөлгөөн, байгууллага за тэгээд янз бүрийн хувь хүн бүгд л нэг өөр өөрийн тунхагтай байх юм даа. Байх ч ёстой биз. Тэгээд яагаад биелдэггүй юм бол доо гэж бодлоо. Миний гаргасан хариугаар тэд арай л хийсвэр тодорхойлоод байх шиг. Информатикийн нэр томьёогоор бол Abstract Class. Төр гэж юу юм, хувь хүн гэж хэн юм, ялгаж салгамаар. Түүхч, философичид нь мундаг мундаг хэл орооцолдоод утгыг нь ойлгох аргагүй урт юм хэлэх биз.
Миний бодлоор монгол улсыг сэргээн тогтооё л гэвэл хувь хүний хувьд хүн бүр ердөө дараах 3 маш хялбар зарчмыг л барихад болох мэт.
1. Хувь хүн бүр цагаа барих, ялангуяа ажил эхлэх биш ажил тарах цагаа манайхан анзаараад үзээсэй. Ядаж хичээе л дээ.
Яагаад гэвэл түүхэндээ энэ зүйл бол төрийг хүчирхэг барих эм байсан. Үе үеийн хүчирхэгжсэн улсуудыг харъя. Их монгол улсын үед Чингис хааны цэргүүд яаж цаг барьдаг байхдаа хүчирхэгжиж байснаас эхлээд ром, франц, герман, япон, өнөөгийн америк яаж цаг барьж байна? Монголд 1 сая хүн ажил хийдэг гэж бодоод тэдгээр хүмүүс бүгд 1 минутын өмнө 1 удаа ажлаасаа гарлаа гэж бодъё. (үнэндээ төрийн албаныхан ялангуяа 15 цагаас хойш ажилладаг юм уу? Их хурлын гишүүд нь хүртэл ажилдаа ирдэг юм уу?) Тэгэхэд 1000000 минутын ажил алдагдана. Энэ нь ажлын 8 цагаар бодоход 2083 өдрийн ажил монголын нийгмээс алдагдаж байнаа л гэсэн үг. Сонирхолтой байгаа биз?
2. Үр бүтээлтэй ажиллах Энэ нь хүн бүр чаддаг, чаддаг ажлаа л хийе. Чадахгүй юмаа хийх нэртэй цаг болон үр дүн алдуулахгүй, тэгээд л чадчих гээд хор хутгаад гүйхгүй л байя гэсэн үг. Дор бүрнээ үр бүтээлтэй цагаа бариад ажиллахад чадахгүй, бүтээхгүй зүйл үгүй мэт. Энд нөгөө дээд боловсролтой хүний цалин дунд боловсролтой хүнийхээс илүү байх биш, ажлаа 10 хуруу шигээ мэддэг чаддаг хүний цалин чадахгүй байгаа хүнийхээс хэд дахин илүү байдаг болгомоор байна. Өөрөөр хэлбэл алтан гартай засварчин, механикч, бүртийх тоос үлдээдэггүй цэвэрлэгч, тооцоо алддгүй нярав, толгой өвддгүй эдийн засагч, орсон хэргийнхээ араас хоосон гарч ирдэггүй мөрдөгч бүгд тун зөрүү багатай цалинтай баймаар байна.
3. Мухар сүсгээ хаях. Энэ нь шашин шүтэхгүй бай гэсэн үг биш шүү. Шарын шашин шүтдэг бол бурханаа шүт, төвд хэлээ сур. Харин ном уншуулах, улаан утас, будаа, хар цайны хойноос битгий гүйлд л дээ. Далай лам монголчуудад хандаж өөрөө тэгж 2 удаа айлдаж байсан удаатай шүү дээ. Христ шүтдэг бол их эзэн минь ирээд миний хүслийг биелүүлнэ гэж бүү хар. Өөрөө зүтгэ, өөртөө болон ядууст тусал. Түүнээс сахалтай бавгар хүн тэнгэрээс бууж ирээд таньд туслахгүй.
Төрийн хувьд бодлогын чанартай дараах хэдэн асуудал байна.
1. Татварын хяналтыг сайжруулах. Нэмэх бус, гүйцэтгэл болон хяналтыг төгс болтол сайжруулах. Төр иргэнээс 1 төгрөг 1 мөнгө илүү ч дутуу ч авч болохгүй.
Ер нь тэгээд миний бодлоор 5 ямаатай айл татварт 2 ямаагаа сэтгэл харамгүй төлдөг болох тийм сэтгэлгээнд очиход монгол улс дэлхийн хамгийн хүчирхэг улс болно гэдэгт бүрэн итгэж байна. Харин тэр хүн тэгж чаддаг болохын тулд яах вэ? 5 ямаанаас 2-г нь өгөөд 3 ямаатай амьдарч чадах уу? Төр монгол улсын тусын тулд татвараа зарцуулж чадахгүй байсаар байвал иргэн хүн татвараа харамгүй төлж чадах уу??? Гарц мэдээж бий. Дараагийн 2 зарчим хариулна.
2. Төр татсан татвараа ард түмэнд буцааж зөв цацдаг болох ёстой. Одоогийнх шиг их хурлын гишүүд нь нэг нэг сая доллар өөртөө төсөвлөөд л тэрийгээ тойрогтоо зарж байна гээд л эмнэлэг сургуульд машин унаа авч өгсөн гээд л, сагсны талбай байгуулсан гээд л, иргэдэд эх орны хишиг гэж 21 000 төгрөг тараагаад л үрэн таран хийж суусаар байх уу? Энэ зөв үү? Уг нь бол 1 дэх зарчмын гарах арга зам энд оршиж байгаа юм. 5 ямаатай айл татварт малаа үнэнчээр тоолуулаад 2 ямаагаа харамгүй татварт төлдөг бол тэдний малын тоо толгойг 12 хүртэл нь 3 ямаа буцааж олгох ч гэдэг юм уу тийм зохицуулалт байх ёстой.
3. Авилгалын байж болох хамгийн бага хэмжээнд аваачих. Мэдээж бүрэн устгаж чадахгүй. Аль болох тунгалаг байж чадна төр нь бат, улс нь хүчирхэг оршихын баталгаа.
4. Чөлөөт эдийн засаг гэсэн тэнэг зарчмаас нэн даруй татгалзаж зохицуулгат эдийн засаг руу шилжих. Үүгээр тэр нийгэмд үр бүтээлтэй ажил хийхгүй мөртлөө, цаг наргүй ажиллаж монголын гол хөрөнгө буюу мах, гурил, хүнсийг үйлдвэрлэж буй малчид, жижиг дунд үйлдвэрлэл эрхлэгчид, тариаланчид эсвэл татвараа төлөөд ажиллаж буй иргэдийн хөлс хүчийг сорж байгаа ченж гэсэн давхаргыг зайлуулах юм. Тэд татвараа төлөөд логистик байгууллага болоод үйл ажиллагаагаа явуулах ёстой бус уу? Төсвийн байгууллагынхны цалин 5000-р нэмэгдэх сургаар дамын наймаачид, бинзен импортлогчидын нэгж үнээ 100 төгрөгөөр (үнэн хэрэгтээ 500-5000 байгаа) нэмээд байхаар хэнд ашигтай вэ? Энэ бол төрийн бодлогыг хэрэгжүүлэхэд саад болж буй гол чөдөр тушаа. Одоогийн байгаа байдлаас харахад нэг бол манай түшээдийн билгийн мэлмий нь хаагдаад хэдэн наймаачдын тоглоом зугаа болж буй эсвэл тэд өөрсдөө томоохон импортлогчид, наймаачдын ард суучихаад төсвийн ажилчдын цалинг нэмэх нэрээр өөрсдөдөө асар их ашиг унагаж байгаа соронзонгууд л гэж харагдаж байна.

Scrum vs. Waterfall

Tuesday, February 26th, 2013

Сүүлийн үед төслийн удирдлагын талаар бие дааж жаахан судалж байна. Туршиж үзэх боломж хомс ч янз бүрийн аргуудыг нэлээд уншиж байна даа. За энэ гарчигт дурдсан 2 мэдээллийн системийн төслийн удирдлагын системийг дараах байдлаар харьцуулж болж байна. Шатар!
Шатарын хөлөг нь технологи, биетүүд нь төслийн хөгжүүлэгчид, нүүдэл нь төслийн нэгж шийдэл, хожих нь төслийн зорилго болог.
Та хэдэн нүүдлийн дараа хожих вэ гэсэн асуултанд та юу гэж хариулах вэ? Тогтсон хариулт хэлж чадах уу? Магад та шатрын их мастер бол 10-15 нүүдлийн дараа мад тавина гэдгээ тооцоолж болох л юм. Гэхдээ та анхны нүүдлийн төлөвлөгөөгөө өөрчлөхгүйгээр тийм амархан мад тавьж чадах болов уу? Маш нарийн тооцоолсон байх ёстой болно. Энэ бол Хүрхрээ загварын жишээ. Гэхдээ л тухайн өрсөлдөгчөөс хамаараад бодлоо өөрчлөх тохиолдол гарах нь элбэг. Тиймээс энэ арга нь төгс эзэмшсэн хүнийг ч эрсдэлд оруулах магадлал өндөр байгаа биз?
Харин ихэнх хүмүүс 1, 2 нүүдлийн цаадахыг харж чаддаг. Өрсөлдөгч яаж нүүснээс нь хамааруулаад дор дор нь 2 нүүдлийн цаадахаа хараад нүүгээд явчихдаг. Гэхдээ тухайн 2 нүүдлээ хийхэд чамгүй бодох нь мэдээж. Энэ бол Скрам загварын жишээ.
Манай улсад ихэнх нь уламжлалт хүрхрээ загвараа барьж харагдсан. Яагаад скрамыг хэрэглэхгүй байгааг судлахад монголд тулгарч байгаа хамгийн том нэг асуудал нь Product owner юм шиг байгаам. Ийм дүрийн хүн нь олдох хэцүү. Мөн энэ тэндэхийн төсөл, тендер эхлээд баахан утгагүй бичиг баримт, төлөвлөгөө шаарддаг болохоор тийм ажлыг скрамаар хийх боломж олдохгүй юм шиг байна. Хариуцдаг хүмүүс нь ч “Бүтээгдэхүүний эзэн” (product owner) болж чадахгүй. Скрамын хамгийн гол хүн бол бүтээгдэхүүний эзэн болно. (Scrum team ч Scrum master ч биш)
Гэсэн ч амьдрал дээр туршиж үзэх хүсэл их л төрж байна. Гэхдээ одоо камбан аргыг сайн судалж үзээд шийдэх бодолтой байна.
Төслийн удирдлагын загварууд нь төслийг хөгжүүлэх загваруудаас эрс ялгаатайг зарим хүмүүс анхаарах хэрэгтэй. Төслийг хөгжүүлэх TDD (Test driven development), BDD, AOP гэх зэрэг аргачлуудыг аль ч төслийн удирдлагаар явсан хэрэглэж болох бөгөөд энэ загварууд нь програмлчлал руу нарийвчлан орсон доод төвшний хэрэгслүүд. Харин Waterfall, V, Spirial, Scrum, Kanban зэрэг нь дээд төвшний илүү ерөнхий хэрэгслүүд юм. Эдгээр нь заавал МТ гэлтгүй бусад төрлийн төслүүд дээр ч хэрэглэгддэг.
Тиймээс энэ хоёр нь өөр өөр 2 төвшинд хэрэглэгддэг аргачлалууд гэсэн үг.

Telescoping constructor pattern

Sunday, February 24th, 2013

Энэ нэрийг хараад зарим хүмүүс огт сонсоогүй байж болно. Нэрийг нь мэдэхгүй ч бүх программистуудын өдөр тутамдаа хэрэглэдэг паттерн.
Доорх кодыг харна уу.

Ger(int hana) { … }
Ger(int hana, int burees) { … }
Ger(int hana, int burees, boolean shallasan) { … }
Ger(int hana, int burees, boolean shallasan, boolean ereelsen) { … }

Үүнд Гэр гэсэн объектыг үүсгэж байна. Гэр барихад хэдэн ханатай байх нь эхлээд зайлшгүй тогтоосон байх ёстой зүйл. Та бидний өдөр тутам хэрэглэдэг гэрүүд 5 ханатай байдаг тул hana параметерын өгөгдмөл буюу Default утгыг 5 гэж авч болно.
Гэрийн дээвэр нь ихэнхдээ 2 давхар бүрээстэй байдаг ч 1-с эхлээд хэдэн ч давхар бүрээстэй байж болно. Гэр шалтай ч байж болно, шалгүй ч байж болно. Зуны гэр шалгүй байх нь элбэг. Тиймээс шалласан(shallasan) эсэх параметрийг бүүлийн төрөлтэй авав. Ereelsen гэсэн параметер нь гэрийг эрээлсэн эсэхийг заана. (Гэрийн тооно, унь, хана нь дотроо баахан хээ угалз болоод явчихсан ч бий. Дан будагтай эсвэл огт будаггүй ч бий.)
Энэ мэт янз бүрийн обьект үүсгэхэд бид дээрх маягаар параметерүүдийг нь өгөөд үүсгээд явдаг. Үүнийг л програм хангамжийн архитектурчид Telescoping constructor pattern гэж нэрлэдэг.
Гэхдээ тухайн обьект хэр төвөгтэйгээс хамаараад дамжуулах параметерүүд нь бүр ихсээд 10, 20 болоод явчих нь ч бий. Тэр үед программист та хэд дэх дээр нь ямар параметер дамжуулж байгаагаа мартаж санаад ирнэ. Энэ үед Builder pattern жинхэнэ тохирно. Энэ л асуудлыг шийдэх гэж угаасаа Builder паттерн үүссэн билээ. ПХА (Програм Хангамжийн Архитектур) хичээл дээр суусан хүүхдүүд бүгд мэдэж байх ёстой.

public class Ger{
private int hana;
private int burees;
private boolean shallasan;
private boolean ereelsen;

public static class Builder {
//required
private final int hana;
//optional
private int burees = false;
private boolean shallasan = false;
private boolean ereelsen = false;

public Builder(int hana) {
this.hana = hana;
}

public Builder burees(int value) {
burees = value;
return this;
}

public Builder shallasan(boolean value) {
shallasan = value;
return this;
}

public Builder ereelsen(boolean value) {
ereelsen = value;
return this;
}

public Ger build() {
return new Ger(this);
}
}

private Ger(Builder builder) {
hana = builder.hana;
burees = builder.burees;
shallasan = builder.shallasan;
ereelsen = builder.ereelsen;
}
}

Дээрх конструкторыг дараах байдлаар гинжин хэлбэрээр дуудах боломжтой. Учир нь setter метод бүр builder обьектыг буцаах тул.

Ger ger = new Ger.Builder(5).burees(2).shallasan(true).ereelsen(true).build();

Java Standard API болох StringBuilder класс ба Effective Java, 2nd Edition by Josh Bloch номоос санаа авав.