"Hi, Amigo!"

"Hi, Bilaabo!"

"Ngayon sasabihin ko sa iyo ang tungkol sa kung paano karaniwang binuo ang mga programa."

"Noong ika-20 siglo, noong ang modernong IT ay nasa simula pa lamang, tila iniisip ng lahat na ang programming ay parang construction o manufacturing."

"Karaniwang ganito ang mga bagay:"

" Ipapaliwanag ng customer ang uri ng programa na kailangan niya — kung ano ang dapat nitong gawin at kung paano ito dapat gawin."

" Ang mga analyst ng negosyo ay makikinig sa kanya at gagawa ng kumpletong listahan ng mga kinakailangan sa programa batay sa kanyang sinabi."

"Pagkatapos ay hahatiin ng mga tagapamahala ng proyekto ang mga kinakailangang ito sa mga gawain, at tutukuyin din kung aling programmer ang gagawa kung anong gawain at sa anong pagkakasunud-sunod."

"Pagkatapos ay magtatrabaho ang mga programmer . Minsan magtatrabaho sila ng ilang taon(!)."

"Nang matapos sila, ibinigay ang programa sa mga tester."

"Ang mga tagasubok ay dadaan sa bawat isa sa mga kinakailangan ng programa upang i-verify na sila ay ipinatupad at ang programa ay gumana ayon sa nararapat."

"Kung may nangyaring mali, itatala ng mga tagasubok ang mga bug at ipapadala ang mga ito sa mga programmer."

"Pagkatapos ay aayusin ng mga programmer ang mga bug at ipapadala ang nakapirming programa pabalik sa mga tester. At mauulit ang cycle."

"Kapag ang mga pangunahing bug ay naayos, ang programa ay ibinigay sa customer."

"Ganyan talaga ang nangyari?"

"Well, siyempre, marami akong pinasimple, ngunit iyon ay medyo malapit sa kung paano ginawa ang mga bagay."

"At ang isang proyekto ay maaaring tumagal ng isang taon at kalahati hanggang dalawang taon upang makumpleto?"

"Minsan kung talagang mahaba ang pag-develop ng isang proyekto, hahati-hatiin nila ito sa magkakahiwalay na release. Bawat 3-6 na buwan, kailangang gumawa ang mga developer ng isang partikular na bahagi ng functionality ng program, subukan ito, ayusin ang lahat ng mga bug nito, at ipakita ito sa customer."

"Una, para maibahagi niya ang kanyang mga impression. At pangalawa, at higit sa lahat, para patuloy siyang magbayad para sa pagpapaunlad ng programa."

"Ituloy ang pagbabayad?"

"Noon, madalas na tumatagal ng 2-3 times more than planned ang development. At dahil oras-oras na binabayaran ang mga programmer, naging 2-3 times na mas mahal ang program. Isa pa, nabawasan din ang benefits. Kung ano ang gusto ng customer ngayon. para sa $100,000 ay maaaring hindi kailanganin sa loob ng 3 taon — lalo na sa tatlong beses ng presyo."

"Madalas bang tumanggi ang mga customer na magbayad?"

"Oo. Nang maglaon ay nagsimula silang magdagdag ng mga parusa sa kontrata, ngunit hindi nito napabuti ang sitwasyon. Ang pag-develop ng software ay nag-drag nang paulit-ulit. At walang sinuman ang maaaring gumawa ng anuman tungkol dito kahit na gusto nila."

"Pero bakit?"

"Well, una, masyadong maliit ang nalalaman sa yugto ng pagpaplano. Mas madalas kaysa sa hindi, sa simula, walang sinuman ang maaaring mahulaan ang mga problema na kakaharapin ng mga programmer."

"Ngunit ang mga nakaranasang programmer ay dapat na mahulaan ang lahat, tama ba?"

"Nakikita mo ba na ang programming ay isang natatanging propesyon."

"Ang isang ordinaryong manggagawa ay madalas na gumaganap ng parehong trabaho nang paulit-ulit. Ang mga gumagawa ng relo ay gumagawa ng mga relo, nagluluto, nagtuturo ng mga guro, nagpapagamot ng mga doktor, atbp."

"Ang bawat isa sa mga propesyonal na ito ay karaniwang gumagawa ng parehong bagay araw-araw. Bilang resulta, nagsisimula silang maging mas mahusay at mas mahusay sa kanilang mga trabaho."

"Sa programming, iba ang diskarte. Sa sandaling ang isang programmer ay nahaharap sa parehong gawain araw-araw, nagsusulat siya ng isang function, module, o program upang maisagawa ito, at hindi na babalik dito muli."

"Karaniwang nilulutas ng bawat programmer ang bawat gawain nang isang beses sa kanyang buhay."

"Isang bagay tulad ng mga siyentipiko o mga inhinyero ng disenyo na nag-imbento ng mga bagay."

"Ah. Well, ano ang pinakamahalagang papel sa isang proyekto?"

"Hmm, paano ko sasagutin 'yan. Madaling sabihin kung alin ang pinakamahalaga, pero ang pagkilala sa hindi gaanong mahalaga ay mahirap."

" Ang pangunahing trabaho ng isang tester ( Q uality  A ssurance, QA )  ay ang subaybayan ang status ng isang program at agad na mag-ulat ng mga bug. Habang mas at mas maaga ang isang tester ay nakakahanap ng mga bug, mas marami ang maaaring ayusin.  Ang isang mahusay na tester ay nakakaimpluwensya sa kalidad ng produkto kaysa sa ginagawa ng isang mahusay na programmer ."

"Bakit hindi maaaring subukan ng programmer ang kanilang sariling mga programa. Pagkatapos ng lahat, hindi ba nila mas alam kaysa sa mga tagasubok kung ano ang gumagana at hindi gumagana?"

"Ang isang magaling na programmer ay sadyang walang kakayahang maging isang mahusay na tagasubok. Alam ng isang programmer kung paano gumagana nang maayos ang program, kaya palagi niya itong ginagamit sa isang tiyak na paraan. Kumpara sa mga ordinaryong user na gumagamit ng program gayunpaman gusto nila. "

"Bukod dito, hindi sinusubok ng mga tester kung ano ang hindi pa gumagana. Sinusubok ng tester ang functionality o mga bahagi ng program na sinasabi ng programmer na halos gumagana na."

"At kapag nakahanap ang tester ng napakaraming mga bug sa functionality na iyon, at inayos ng programmer ang mga ito, ang produkto ay talagang nagiging mas malapit sa pagiging perpekto."

" Ang pangunahing gawain ng isang programmer ( S oftware  D eveloper  E ngineer,  D eveloperSDE ) ay ang magpatupad ng bagong functionality. O, sa mas simple, upang maisagawa ang mga gawaing itinalaga sa kanya. Kapag ang mga programmer ay naatasan ng mga gawain na may mga bagong feature , ginagawa nila ang mga ito. Kapag na-assign sa kanila ang mga bug, inaayos nila ang mga bug."

"Ngunit kung minsan ay may mas mapanghamong mga gawain, halimbawa, makabuo ng arkitektura para sa programa o mga bahagi nito. Kung mas mahusay ang iminungkahing arkitektura, mas madali itong magawa sa hinaharap."

"Ang problema ay ang arkitektura ay kailangang mapili sa pinakadulo simula, ngunit ito ay hindi hanggang sa ikaw ay nasa gitna ng pag-unlad na ito ay malinaw kung pinili mo ang tamang arkitektura."

"Bukod pa rito, kung ang arkitektura ay matagumpay at ang programa ay naging mahusay, kung gayon ang customer ay malamang na nais na gamitin ito bilang batayan para sa mga bagong bersyon ng programa."

"Eto ang pinupuntahan ko."

"Anumang arkitektura ang pipiliin mo, palaging magkakaroon ng grupo ng mga pagbabago, pagdaragdag, at mga bagong feature na hindi isinasaalang-alang ng arkitektura."

"Narito ang isang magandang halimbawa."

"Hinihiling sa iyo ng isang customer na magtayo ng isang 5 palapag na gusali, kaya magdisenyo ka ng isang arkitektura at magtayo ng bahay."

"Pagkatapos ay humiling ang customer na magdagdag ng isa pang kuwento, at pagkatapos ay isa pa, at iba pa."

"Ngunit ang mga dingding ng unang palapag ay hindi idinisenyo para sa ganoong kalaking bigat, at gayundin ang pundasyon. Kaya ang lahat ay kailangang muling ayusin."

"Ngunit pagkatapos ng 5-palapag na gusali, paano kung ang customer ay agad na magdesisyon na gusto niya ng isang 50-palapag na gusali?"

"Mas madaling gibain ang umiiral na istraktura at muling itayo ang lahat mula sa simula..."

"Ngunit mayroon akong isang piraso ng payo para sa iyo tungkol sa arkitektura."

"Ang arkitektura ng isang application ay dapat, una sa lahat, ay flexible, na nangangahulugang hindi mo na kailangang magsimula sa simula kung magpasya kang gawing muli ang kalahati ng application. Ang ganitong uri ng arkitektura ay karaniwang tinatawag na flexible at modular . "

" Ang pangunahing gawain ng tagapamahala ng proyekto ay ang gumawa ng mga desisyon. Ang tagapamahala ng proyekto ay ang isa na nakikita ang malaking larawan at gumagawa ng mga desisyon batay sa pananaw na iyon."

"Ipagpalagay na sa panahon ng pag-unlad ay nagiging malinaw na ang isang partikular na gawain ay hindi makukumpleto gaya ng binalak. Ang project manager ay maaaring:"

" a)  subukang makipag-ayos sa customer upang baguhin ang gawain"

" b)  maglaan ng mas maraming oras sa gawain"

" c)  magdala ng mas maraming karanasang programmer mula sa iba pang mga proyekto."

"At marami pang ibang posibilidad."

"Ang bawat opsyon ay nangangailangan sa iyo na magsakripisyo ng isang bagay, at ang trabaho ng manager ay upang mabawasan ang kabuuang pagkalugi mula sa mga sakripisyong ito. "

"Halimbawa, ipagpalagay na ang mga kakumpitensya ay nakawin ang nangungunang programmer sa pamamagitan ng pag-aalok sa kanya ng dalawang beses ng mas maraming pera."

"Ang tagapamahala ng proyekto ay maaaring:"

" a)  walang gagawin. Aalis ang programmer, at malamang na mahuhuli ang proyekto at magkakaroon ng mga parusa."

" b)  doblehin ang kanyang suweldo. Kung gayon ang lahat ng iba sa koponan ay gugustuhin din na magtaas. Kung bibigyan mo silang lahat ng mas maraming pera, kung gayon ang mga gastos ng proyekto ay tataas at maaari itong maging hindi kumikita."

" c)  ilang iba pang opsyon na iniisip mo."

"Nakita ko."

"Sa isang masamang tagapamahala ng proyekto, ang isang mahusay na koponan ay karaniwang nagpapahaba ng isang proyekto, ngunit hindi palaging."

"Ang isang mahusay na tagapamahala na may isang pangkat ng mga karaniwang programmer ay halos palaging makukumpleto ang isang proyekto nang mas mabilis kaysa sa isang masamang tagapamahala na may isang pangkat ng mga mahuhusay na programmer."

"Nakita ko."

"Okay, let's take a short break, and then we'll continue."