{"id":8,"date":"2015-09-07T15:54:49","date_gmt":"2015-09-07T15:54:49","guid":{"rendered":"http:\/\/test01.georgebaciu.pro\/?p=8"},"modified":"2015-09-09T11:03:50","modified_gmt":"2015-09-09T11:03:50","slug":"cum-am-devenit-programator","status":"publish","type":"post","link":"https:\/\/blog.georgebaciu.pro\/?p=8","title":{"rendered":"Cum am devenit programator"},"content":{"rendered":"<p>Pe vremuri se spunea c\u0103 era deajuns s\u0103 fi citit cartea \u201eThe Peter Norton Programmer&#8217;s Guide to the IBM PC\u201d s\u0103 te nume\u0219ti programator. Se \u00een\u0219elau, cum se \u00een\u0219eal\u0103 \u0219i azi cei care te \u00eentreab\u0103 \u201e\u0218tii Java?\u00a0 \u0218tii dotnet?\u201d. Da, nu ajunge s\u0103 cite\u0219ti o carte sau s\u0103 cuno\u0219ti un framework s\u0103 te nume\u0219ti programator. Sau s\u0103 fii \u00een stare s\u0103 enumeri multe acronime de trei litere. Cunosc persoane care azi \u00eenv\u00eerteau Perlu, iar peste o s\u0103pt\u0103m\u00een\u0103 erau profi \u00een Modula 2, dar nu erau programatori. Nu pot s\u0103 uit r\u0103spunsul unui prieten \u00eentrebat \u00een ce programeaz\u0103: \u201e\u00cen Word.\u201d Dac\u0103 a\u021bi z\u00eembit la citirea acestui r\u0103spuns atunci e timpul s\u0103 v\u0103 c\u0103uta\u021bi o meserie \u00een afara celor numite software development.<\/p>\n<p>Cum am devenit programator? Primul lucru de spus e c\u0103 am avut cel mai prost profesor \u2013 pe mine \u00eensumi.<\/p>\n<p>Am pornit cu aplica\u021bii pe un computer cu procesor Z80 la 1MHz \u0219i cu 64KB memorie (din care 18KB erau ocupa\u021bi de SO, plus 25KB memoria video). A\u0219a am \u00eenv\u0103\u021bat s\u0103 lucrez modular pentru c\u0103 aplica\u021biile nu \u00eenc\u0103peau \u00een memorie. Pentru c\u0103 viteza formulelor trigonometrice era mic\u0103 am \u201einventat\u201d tabelele cu valori precalculate. Tot din cauza vitezei sc\u0103zute a limbajului interpretat am fost nevoit s\u0103 scriu c\u00eeteva rutine \u00een limbaj ma\u0219in\u0103.<\/p>\n<p>Apoi am trecut pe PC-XT cu procesor Intel 8086. \u00cen prima sear\u0103 c\u00eend l-au adus mai c\u0103 nu am dansat ritualic \u00een jurul lui. Am pierdut simplitatea memoriei video de 25KB, dar mi-am revizuit tehnicile gre\u0219ite. Am \u00een\u021beles c\u0103 aplica\u021bia trebuie s\u0103 fie independent\u0103 de hardware-ul pe care rula \u2013 la \u00eenceput numai pentru video, dar mai \u00eencolo mi-am dat seama c\u0103 e o idee bun\u0103 pentru orice fel de aplica\u021bie. Au ap\u0103rut oportunit\u0103\u021bi pentru aplica\u021bii mai complexe \u2013 baze de date. Am f\u0103cut-o la nivel de fi\u0219iere, dar cur\u00eend s-a dovedit c\u0103 nu f\u0103ceau fa\u021b\u0103 cerin\u021belor de performan\u021b\u0103. Am c\u0103utat algoritmi de sortare mai performan\u021bi, dar am fost nevoit s\u0103 descop\u0103r c\u0103 teoria lui Codd face o bun\u0103 abstractizare \u0219i c\u0103 aplica\u021biile mele nu mai depindeau de baza de date aleas\u0103, c\u0103 puteam s\u0103 le mut dac\u0103 nu mai performau c\u00eend cre\u0219tea num\u0103rul userilor. Tot c\u0103ut\u00eend l-am descoperit pe Knut \u0219i \u201eThe Art of Computer Programming\u201d.<\/p>\n<p>A venit Windows-ul cu interfa\u021ba grafic\u0103 \u0219i programarea orientat\u0103 pe mesaje. \u0218i rutinele call-back. \u0218i Windows API cu framework-urile OWL \u0219i MFC. Plus problemele de accesare a stringurilor. Win32 \u0219i backward compatibility. Apoi WinNT \u0219i problemele de compatibilitate cu Win9x. \u0218ti\u021bi de ce Copy\/Paste func\u021bioneaz\u0103 at\u00eet de bine peste Windows, iar \u00een Linux le-a luat un milion de ani s\u0103 le aduc\u0103? OLE Automation e r\u0103spunsul.<\/p>\n<p>Alte vremuri cu ale lor client\/server side development. Explozia internetului \u0219i ActiveX, DOM, IE object model \u2013 pe toate le-am m\u00eencat pe p\u00eeine la sf\u00eer\u0219itul anilor 9x.<\/p>\n<p>Design patterns le-am \u00eenv\u0103\u021bat de la Bruce Eckel \u0219i nu de la <em>gang of four<\/em>. <a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/ff921345.aspx\" target=\"_blank\">Patterns &amp; practices<\/a>\u00a0de pe MSDN este locul de unde am furat mult\u0103 meserie. OOP, TDD, FDD, SOM, KISS, YAGNI nu sunt doar acronime, ci tehnici cunoscute.<\/p>\n<p>Ce ar mai trebui s\u0103 cunoasc\u0103 un programator? Ceva legat de UI, de securitate, de deployment \u0219i\u00a0 instrumentation. Un fleac. Modelare, ce e aia?!<\/p>\n<p>Dup\u0103 cum vede\u021bi am scris o pagin\u0103 f\u0103r\u0103 s\u0103 m\u0103 refer la limbajul \u00een care am programat. De fapt, nici nu e at\u00eet de important!<\/p>\n<p>G.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pe vremuri se spunea c\u0103 era deajuns s\u0103 fi citit cartea \u201eThe Peter Norton Programmer&#8217;s Guide to the IBM PC\u201d s\u0103 te nume\u0219ti programator. Se \u00een\u0219elau, cum se \u00een\u0219eal\u0103 \u0219i azi cei care te \u00eentreab\u0103 \u201e\u0218tii Java?\u00a0 \u0218tii dotnet?\u201d. Da, nu ajunge s\u0103 cite\u0219ti o carte sau s\u0103 cuno\u0219ti un framework s\u0103 te nume\u0219ti programator. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.georgebaciu.pro\/index.php?rest_route=\/wp\/v2\/posts\/8"}],"collection":[{"href":"https:\/\/blog.georgebaciu.pro\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.georgebaciu.pro\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.georgebaciu.pro\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.georgebaciu.pro\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8"}],"version-history":[{"count":1,"href":"https:\/\/blog.georgebaciu.pro\/index.php?rest_route=\/wp\/v2\/posts\/8\/revisions"}],"predecessor-version":[{"id":9,"href":"https:\/\/blog.georgebaciu.pro\/index.php?rest_route=\/wp\/v2\/posts\/8\/revisions\/9"}],"wp:attachment":[{"href":"https:\/\/blog.georgebaciu.pro\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.georgebaciu.pro\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.georgebaciu.pro\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}