2013年10月8日火曜日

About coding

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 yostoinaad 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!

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
 Class, function, huwisagchiig zuw gazar zarlah
 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!
Class bolood function, huwisagchid hiij bui uildel tuund ugsun nertei zohitsoj baih.
 Oilgomjtoi code bichih hamgiin sain arguugyn neg bol uye uye busdaar hyanuulah  
   (source code review), eswel hosoor programchlah (pair programming) arga yum.
 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:

if  (result == 0) {
  return "2";
} 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.

before refactoring: after refactoring:
if (result == 0) {
  return "2";
} else if (result == 1) {
  return "B";
} else if (result == 2) {
  return "K";
} else if (result == 3) {
  return "3";
} else if (result == 4) {
  return "C";
}
String[] values = {"2", "B", "K", "3", "C"};
return values[result];
// yurduu l 2 mur bolloo.

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 件のコメント:

コメントを投稿