Orshil
Ta program (code), programmer (coder) gedeg ugiin utgyg her sain medeh we?
Program bol biyelegdeh eelj daraallaa huleej bui
command-uudyn daraalal yum. Ene daraalal her zambaargui baina. Ter chineegeer
program-n chanar muu baih bolno.
Programchlah gedeg bol ter daraallyg hamgiin
onowchtoi daraalald oruulah ajillagaa. Tiimees programmer-n etssiin zorilgo bol
tawigdsan shaardlaga, nuhtsuld niitseh hamgiin onowchtoi daraallyg uusgeh,
shiidliig oloh yawdal bilee.
Program zohioh ni ter chigeeree tuluwluh process
(buruu ugugdul oruulsan tohioldold yaah we, aldaa garsan tohioldol rollback hiih
uu, ... geh met) buguud herhen zuw tuluwlusnuus tuunii chanar iheehen hamaarna.
Program bol tany uridchilan beldsen tuluwluguunii daguu ajilladag ed gedgiig
buu mart!
Tehnikiin daalgawraas hamaaran programd olon
yanziin shaardlaga tawigddag.
Niitleg bh yostoi chanaryg jagsaawal:
・Program bol aldaa madaggui, zuw ajillah yostoi(naad zahyn shaardlaga)
・Program bol naidwartai, urgelj neg heweer ajillah
yostoi.
・Program bol tesltegdeh bolomjtoi baih yostoi!
・Program bol hyalbar oilgomjtoi baih yostoi.
Uuruur
helbel zaswar hiihed amar bh yostoi.
・Program bol hurdtai ajillah yostoi.
・Program bol awsaarhan baih yostoi
(zuwhun sanah oi baga ezleh gsen sanaa bish shuu).
・Portable baih yostoi
geh met. Edgeerees hamgiin chuhal 2 shinjiig ontsolmoor bna!
1. Program
bol testdlegdeh bolomjtoi baih yostoi!
Ene ni "Program
bol aldaa madaggui, zuw ajillah yostoi" gedgees urgaj garch bui
yum. Ugtaa
bol program aldaa madaggui, zuw ajillah yostoi gedeg ni testdlegdeh
bolomjtoi
baih yostoi gesen ug. Test bol chanaryn shaardlaga hangaj baigaa gesen
batlagaag
gargah tsor gants arga!
*Turshlagaasaa huwaaltsahad barag testleh bolomjgui
programtai tsuungui
tohioldoj
baisanaa nuuh yun.
2. Program hyalbar oilgomjtoi baih
yostoi!.
Hyalbar
programd uurchlult oruulahad bas hyalbar baidag.
Hyalbar
program hurdtai, naidwartai ajillah magadlal undur baidag!
Hyalbar program-g teslehed hyalbar baidag.
*Performance(huchin chadlyn)-n talaar ehnii eeljind sanaa zowoh hereggui yum. Hamgiin gol ni hyalbar oilgomjtoi baih! Huchin chadlyg refactoring, sowftware artitecure-g zasaj saijruulah zamaar hiij boloh bolowch, server-n instance-n toog nemeh, server-n tohirgoog uurchluh geh meteer hunii huchin zuilees hamaaralguigeer hiih bolomjtoi. Program hugjuuleltiin hamgiin gol asuudal hunii huchin zuilees hamaaran bainga dawtagddag aldaa dutagdal gedegt anhaarlaa handuulna uu!
*Performance(huchin chadlyn)-n talaar ehnii eeljind sanaa zowoh hereggui yum. Hamgiin gol ni hyalbar oilgomjtoi baih! Huchin chadlyg refactoring, sowftware artitecure-g zasaj saijruulah zamaar hiij boloh bolowch, server-n instance-n toog nemeh, server-n tohirgoog uurchluh geh meteer hunii huchin zuilees hamaaralguigeer hiih bolomjtoi. Program hugjuuleltiin hamgiin gol asuudal hunii huchin zuilees hamaaran bainga dawtagddag aldaa dutagdal gedegt anhaarlaa handuulna uu!
Dugneed helbel ali boloh hyalbar program bich geh
gsen yum!
Gehdee hyalbar program bichih ni tiim ch amar bus.
:)
Herhen hyalbar
program bichih we?
Program hyalbar baih yostoi yum bol tuuniig yaaj
hyalbarhan bolgoh yostoi yum be?
Program bol programmer-uudyn hoorond soliltsdog negen
turliin document. Iimees tuunig busdad oilgomjtoi, tsegtstei bichij surah
heregtei! Gurwan zuun mur (300 mur shuu! Bur
500 murtei tom function-g neg bus udaa harsan. Oi gutmaar!) damnasan
・unshij oilgohod berh
・zaswar oruulahad hetsuu
・testleh bolomjgui
function bichih uu?
・hyalbarhan oilgogdoh
・zaswar oruulahad hyalbar
・hyamdhan testleh bolomjtoi
・awsaar jijighen
function bichih uu?
Coder-uud hoorondoo hel soyol, shashin shutlegees
ul hamaaran tuwugguihen oilgoltsoh bolomjtoi tsor gants zuil bol ali neg programchlalyn
helen deer bichigdsen programyn code yum.
Program, negent document bolohoor busad turliin
documenttai adilaar orshil, urnul tugsgultei. Sain nom unshih tusam engiinees
nariin tuwugtei ruu shiljih hernee tuwugguihen oilgogdno. Uuntei adilaar
program ch gesen neg module, class, method dotor zambaraagui shambaaralduulan
bichilgui achaalal bolon uurgiig jigdhen huwaarilj, bogino hugatsaand guilgen
unshij bolohuitsaar bichih yostoi yum. Delgerengui medeelel heregtei bol
duudagdaj bui module, class, method-n dotorhiig harahad l hangalttai bui za.
End durdaad bgaa bogino hugatsaand guilgej unshaad,
yurunhii oilgolt-g awchdag, oilgomjtoi code bichih-n tuld ta OOA (encapsulation,
inheritance, polymorphysm, delegation etc.), design pattern, functional
(modularity, immutable, thread safe, stateless etc.) programchlal-g sain meddeg,
garguud ashigladag baih yostoi bolow uu. Tsaash ni olon zuil (AOP, EIP etc.) yarij
boloh bolowch ingeshiigeed orhiyo. Hojim delgeruuleh bolno.
Za, odoo document vs program code-n talaarh yariag jaahan
delgerengui bichiye. Nomyn butets aguulgyg bogino hugatsaand harah bolomjiig
garchig olgodog. Uuntei tustei zuil bol program-g architecture-n huwid model,
view, controller-t huwaah ch yum uu, login module, security module, log module,
utility, configuration, core geh met bureldehuun hesegt huwaadag. Ingesneer
program-n butets, haana yu bgaag hyalbarhan oilgoh bolomjtoi bolno. Bas hariltsan
hamaaralgui, dawhardsan uureggui module-uudad huwaasnaar zeregtsee hugjuulelt
hiih, hyalbarhan zaswar oruulah bolomjtoi.
Nomyn orshil bulegt hojim delgerengui durdah busad
buleg (module, class, method)-n talaar yurunhiilun durdsan bdag. Delgerengui medeelliig
ter bulgiin ene hesgiin teddugeer nuuriin teddugeer murnuus harna uu gej
bichsen baihtai ta olontaa taarsan biz ee. Ene ni undsen program dotor busad
module, class, function-g duudaj buitai agaar neg yum.
Iinhuu program-g dawhstalgui, hariltsan biyenees ul
hamaarah, tus tusyn uureg buhii hesguuded huwaaj busdad oilgomjtoigoor bichih
ni programmer tany erhem uureg mun. Busdad oilgomjtoi gesnees, programmer
bolgon uurin gsen bichlegiin hew mayagtai. Tuuniig negen hewend oruulahgui bol oilgomjgui
baidal uusne. Tiimees coding standard-g gargaj, barimtlah heregtei.
Enehuu coding standard ni daraah zuiluuded anhaarlaa
handuuldag:
・Class bolood function, huwisagchiig zarlah, nerleh zarchim
・for, while geh metiin dawtalttai cycle-g yaaj bichih we?
・indent-g tab-r hiih uu?, space-r hiih uu?
・mur hoorondyn zai, heseg buleg code-g hoorond ni herhen zaaglaj bichih
uu
geh met.
Oilgomjtoi code-g bichih hamgiin anhny alham bol
class bolood function, huwisagchiin neriig zuw uguh yawdal. Tsaashilbal
・Huwisagch bur uuriin amidrah nas, scope-tai. Nas scope-s hamarna. Ter scope
(local, global, class, instanse)-g zuw zaaj
uguh yostoi yum
・Class bolood function, huwisagchiin uurgiig dawhtsuulalgui zuw
huwaarilah.
Huwisagch,
function-g zuwhun gants zorilgoor ashiglah. Olon dawhardsan uuregtei
huwisagch, function (god code, god object
gej sonsson baih) bol hamag zowlongiin eh!
・Oilgomjtoi code bichih hamgiin sain arguugyn neg bol uye uye busdaar
hyanuulah
・Bugdiig dawtan hiih (reinvent the wheel) bus hen negnii onowchtoi
shiidel baih
awaas
shuud awch ashiglah ni tsag hugatsaa, huch hudulmur hemnehees gadna
program-g
tsomhon oilgomjtoi bolgodog.
*Module, class, method-n neriig herhen songoh
talaar byatshan zuwluguu ugye. Module, class-n huwid tuhain module, class-n uureg
chadwaryg buren ilerhiileh ner ugeer (ReportBuilder, ConnectionCreator etc.),
method-n huwid uil ugeer, hen negend tushaal ugch bui meteer nerleh ni zuitei
(ReportBuilder#buildReport, ConnectionCreator#createConnection).
Etsest ni helehed sain program zohiogch hiih gsen
zuilee tsuuhun murd bagtaaj sursan baih agaad sain zohiolch uguuleh gesen
sanaagaa tsuun ugeer, towch buguud todorhoi ilerhiilj chaddag baina.
Muu
code-g tanih shinj temdguud:
1. if, else, switch olon bwal tany bichsen program
tanias uur hen ch oilgoh bolomjgui, tesltehed
hetsuu, zaswar oruulahad buur ch hetsuu bolson baih magadlal undur!
before refactoring: | after refactoring: | |
if (result == 1) { return true; } else { return false; } |
return result == 1; |
Etses tugsgulgui olon if else-g polymorphism,
array, delegation, encapsulation gsen oilgoltuudaar hyalbarhan shiidej bolno. Daraah
code baisan gej bodyo. result ni 0~2 hoorond utga awah buguud tuunii utgaas
hamaaraad hariltsan adilgui utga butsaadag baig:
} else if (result == 1) {
return
"B";
} else if (result == 2) {
return
"K";
}
Program-d daraah uurchlult-g oruulah shaardlagatai
boljee: 3 bol "3", 4 bol "C"-g
butsaah. Umnuhtei adilhanaar zasaj boloh bolowch result-n awah utga
olshroh tusam program-n urt ihesch, oilgohod berh bolj ehelne.
Za, odoo iluu nariin tuwugtei jishee awch uzye.
Oroltyn utgaas hamaaraad hariltsan adilgui uildel hiideg baig. Umnuhtei
adilhanaar setgewel input-n tulwiin too nemj hasagdah bolgond program-n ene
hesgiig zasch uurchluh bolno. Uuruur helbel ene hesgiin code-n urt input-n
tulwiin tootoi shugaman hamaaraltai.
before refactoring: | after refactoring: | |
if (input == 1) { doSomething1(); } else if (input == 2) { doSomething2(); } else if (input == 3) { doSomething2(); } |
Implementor implementor=implementorFactory.createImplementor(input); implementor.doSomething(); |
Herhen togtmol urttai bolgoh we? Strategy pattern ashiglawal amarhan shiideh bolomjtoi yum. Deerh jisheend Strategy pattern ashiglaad program-n nariin tuwugtei hesgiig daldlan (encapsulation) oilgohod hyalbar bolgojee. Strategy pattern bol polymorphism (neg turliin object-n olon yalgaatai helber)-n dawuu talyg ashiglasan design pattern yum.
Iluu delgerenguig endees uzne uu!
public class UsingStrategyPattern {
public static void main(String[] args) {
ImpementorFactory impementorFactory =
ImpementorFactory.INSTANCE;
for (int i = 1; i <= 3; i++) {
Implementor impementor =
impementorFactory.createImplementor(i);
impementor.doSomething();
}
}
}
public enum ImpementorFactory {
INSTANCE; // implemenation of Singleton pattern
private Map<Integer, Implementor> implementors = new HashMap<>();
private ImpementorFactory() {
implementors.put(1, new Impementor1());
implementors.put(2, new Impementor2());
implementors.put(3, new Impementor3());
}
public Implementor createImplementor(int implementationType) {
return implementors.get(implementationType);
}
}
public static interface Implementor {
// hiding different and complicated
// implementation using polymorphism
void doSomething();
}
public static class Impementor1 implements
Implementor {
public void doSomething() {
System.out.println("doSomething1");
};
}
public static class Impementor2 implements
Implementor {
public void doSomething() {
System.out.println("doSomething2");
};
}
public static class Impementor3 implements
Implementor {
public void doSomething() {
System.out.println("doSomething3");
};
}
End gants ch if orooguigeer barahgui implementationType-n utga yaaj ch uurchlugdsun main function-n urt uurchlugduhgui bolohyg
anzaarsan bui za. Bas ImplementorFactory class-g tootsohgui bol odoo bgaa
code-g ogt hundulguigeer program-g hyalbarhan zasch bolj baina. ImplementorFactory-g
hundluu gehed baiguulagch function-g l zasah yum!
2. Module, class, function, huwisagchiin ner
aguulgatai niitsehgui baih.
3. Tany bichsen function-g unshihyn tuld scroll
hiih shaardlagatai bgaa bol.
Haramsaltai
ni ihenhi code tiim bdag.:( Function het urt uchraas function-n tugsgul
hawid
irehed function-n ehen hesgiin code martagdan bain bain scrol hiihees
argagui
boldog. :(
4. Hyalbarhan test code bichij bolohgui bgaa bol
geh met.
Program
bichihed anhaarah zuils:
1. Module, Class, function, huwisagchiin neriig
onowchtoi ugsun eseh.
2. Function name aguulgataigaa taarch bgaa eseh.
Taarahgui bgaa bol ter hesgiin
code-g
gadagsh ni gargaj shine function uusgeh.
3. Function het urt boloh. Ogt hamaaralgui code ih
bichigdsen baih magadlaltai. Ter
tohioldold
function-g jijig function-uudad huwaaj hemjeeg bagasgah.
Function-n
urt max-daa text editor deer neegeed harahad baruun zuun, deesh doosh scroll
hiilguigeer harah bolomjtoi baih yostoi. Bolj ugwul delgetsiin 1/4-g ezleheer
baih yostoi yum. Yaagaad gewel IDE ashiglah uyed delgetsend program-n code-noos
gadna uur busad zuiliig haruulah zai heregtei bdag bilee.
4. 1-10 mur bicheed bichsen code-oo ergej neg haran , uye uye refactoring
hiij baih.
5. Program-n zarim neg hesgiig herhen bichihee
medehgui eswel uurtuu itgelgui bgaa uyed zuwhun ter hesgiig turshih test code
bichih.
6. Tomoohon uurchlult hiihees umnu test code bichij
hewsh. Program-g zassany daraa zuw zasagdsan eseh, eswel program-n busad hesegt
nuluu oroogui bolohyg shalgahad amar baih bolno.
7. Refactoring, TDD (Test driven development) geh met
ner tomyog saitar oilgoj, chadmag ashigladag boloh.
8. YAGNI, KISS, DRY, Write once, only once! gedeg
ugiig urgelj sanan program bichih zanshiltai boloh.
9. Neg
dor neg turliin uildel hii. Olon zuil ruu samgardahgui sain tuwlurch chaddag.
10. Zaswar
uurchlultiig alham alhamaar hii. Neg dor olon uurchlult hiiwel testlehed
hetsuu!
11. TDD
ulamjlalt argyg hosluulj heregleh: Yu hiih yostoigoo tusuulj chadaj bgaa bol
ehleed test code bich! TDD bish yum gehed neg function bicheed teriigee
shalgadag test code bicheed, dor bur ni hiisen uurchlultuu batlagaajuulaad
yawbal buteemj undur boldog.
12.
Zarimdaa haana aldaa hiisenee olohgui udah uye bii. Tiim uyed hen negniig
duudaj tuslamj awah heregtei. Hen negend tailbarlah yawtsdaa haana aldsanaa
oilgoh yawdal bii.
30-60 min uuruu oroldood (google-deh geh met)
bolohgui bol turshlagatai negnees zuwluguu awah.
Eswel argaa uurchluh heregtei. Gehdee tsag
bhgui bol shuud l hen negnees asuuh heregtei.
13. Busdyn
hiisen program-g ushij oilgoh shaardlaga gardag. Nuser tom program-n huwid
hyalbarhan oilgogdohgui bh tal bii. Ter uyed Class Diagram, Activity Diagram,
Screen Flow Diagram, State Machine Diagram geh metiin diagram zurj uzwel (reverse
engineering) system-n talaar tsegtstei oilgolttoi boldog.
*Source code-noos edgeer diagram-g automataar
zurdag programuud bii.
14.
Hetsuu nariin tuwugtei asuudaltai tulgarah uyed Decision Table, Why Tree, How
Tree zurj uzwel bodol sanaa tsegtsreed yaaj shiideh arga haragdaj ehledeg.
15. OOP (Design Pattern), Functional programming,
tsaashilbal AOP (Aspect Oriented Programming), event driven programming, behavior driven development, rdb vs noSQL db, non blocking io geh metiin talaarh oilgoltoo gunzgiiruulj
chadwal ta bur super coder boloh bolno.
Tugsuld
ni
Program bol command-uudyn buugnurul, tiimees
tuuniig herhen tsegtstei buugnuruuleh ni tany ur chadwar, medleg turshlagaas hamaarna!
Program gesenees test-n talaar durdalgui ungurch
bolohgui! Program-g testleegui bgaa tohioldold duussan gej uzej bolohgui. Testlegdsen
program testlegdeegui program 2n hoorond ald delmiin zuruu bii.
Testlegdeegui program bol program bish, zugeer l zuw
ajillahgui baih magadlalaar duuren command-n tsugluulga! Harin testlegdsen
program bol ogt dogoldolgui gej helj chadahgui ch todorhoi hemjeend naidwartai
zuw ajilladag, yamar dogoltoi we gedgiig meddeg, tuuniig yaaj zasah we gedgiig heleh
bolomjtoi program yum.
Iimd progam bichij duusaad zaawal testleh yostoi.
Test-g bolj ugwul test code bichij shalgah ni zuitei. Uchir ni neg ijil test-g
olon zuun udaa hiih tohioldol bishgui bh ba hunii huchin zuilees hamaaraad
bogino hugatsaand aldaa madaggui, hyamd urtugteigeer hiih ni tuilyn hetsuu yum.
Yalanguya olon dahin dawtan hiih uyed zalhuurah, eswel zarim neg zailshgui hiih
yostoi uildliig martah, anduurah yawdal bishgui bdag. Uunees bolood ajlyn
buteemj buurdag muu taltai.
Test hiih ni deer durdsanaas gadna heden heden
dawuu taltaig durdahgui baij bolohgui bolow uu?
1. Test bichij ehleh uyed test hiih talaar surah
hugatsaa shaardlagatai bolowch bagiin gishuud iluu uurtuu itgeltei, ajlyn buteemj undur boldog. Yaagaad gewel
yamar negen uurchlult hiih uyed progam-n busad hesegt nuluu oroh wii, buruu
code zaschih bolow uu gsen shaardlagagui aidas, stress-ees chuluulugddug. Shine
zaswart zoriulsan test code, zaswar hiihees umnuh code-nd zoriulsan test code
bgaa uchraas ergelzeh yumgui gol asuudaldaa anhaarlaa handuulj chaddag yum.
2. Test code bichij ehlesneer programmer testlehed
hyalbar program bichih talaar oilgolttoi bolj daraa daraagiin zaswar uurchlult-g
iluu hyalbaraar guitsetgeh, testlehed hyalbar program bichih dadal turshlagatai
boldog. Uuruur helbel programmer-n chadwar ter hemjeegeer usdug.
3. TDD ashiglan program bichih zurshiltai bolwol
testlehed hyalbar code bichih chadwar suuhaas gadna turuulj test code bichij
bui tul yu hiih gej bgaagaa saitar oilgosny daraa code bichih heregtei bolno.
Ingesneer iluu chanartai, test coverage saitai program bichigdne.
4. Test hiih uyed shaardlagatai ugugdliig beltgeh,
bainga dawtagdah uildliig automatjuulahyn tuld yanz buriin bagaj (tool program)
heregtei boldog. Zarim-g ni belen tool awch ashiglah bolowch, zarim uyed
uursduu tool zohioh shaardlaga gardag.
Ene ni bas programmer-n skill-g ahiulah bas neg saihan
zawshaan yum.
5. Test code bichseneer uursdiin buteej bui system-n
talaarh medleg ulam gunzgiirder.
6. Test-g automatjuulj (test code bichih) chadwal*
bug-g ert ilruulj chadna.
*Continues Integration: Jenkins, Integrity, geh
met-g ashiglawal bur sain!
End bichigdsen ner tomyog* saitar oilgoj,
heregjuulj chadwal ta haana ch ochson gologdohoorgui top coder bolno gedgiig
amlaya!
*End
garsan ner tomyonuud-g tailbarlahyg urital bolgosongui. Hoishid surch medej
awah yostoi gej uzsenii uudnees durdlaa. Awch uzej baigaa asuudlyn hureenees
halihyn hamt, ene zuwlumj oilgohod berh boloh tul delgerengui durdsangui.
0 件のコメント:
コメントを投稿