Bahay Pag-unlad Mabilis na tugon: pag-debug ng database at pag-profile sa pagsagip

Mabilis na tugon: pag-debug ng database at pag-profile sa pagsagip

Anonim

Sa pamamagitan ng Techopedia Staff, Marso 15, 2017

Takeaway: Tinalakay ni Host Eric Kavanagh ang pag-debug ng database at pag-profile kay Dr. Robin Bloor, Dez Blanchfield at ID Scanzo ni IDERA.

Kasalukuyan kang hindi naka-log in. Mangyaring mag-log in o mag-sign up upang makita ang video.

Eric Kavanagh: Okay, mga kababaihan at mga ginoo, ito ay 4:00 Eastern time sa isang Miyerkules, at syempre nangangahulugan iyon.

Robin Bloor: Hindi ka makakarinig, Eric.

Eric Kavanagh: Nakarating ako noong mga araw na nakalipas, kaya hindi ka nag-iisa. Ngunit kaya ang paksa ngayon ay talagang kawili-wiling bagay. Ito ang uri ng bagay na nais mong tiyakin na nangyayari sa background sa iyong kumpanya, maliban kung ikaw ang taong gumagawa nito, kung saan nais mong tiyakin na ginagawa mo ito nang maayos. Dahil pinag-uusapan natin ang pag-debug. Walang sinuman ang nagnanais ng mga bug, walang sinuman ang nagnanais kapag ang software ay tumigil sa pagtatrabaho - ang mga tao ay nagagalit, ang mga gumagamit ay nagkakaibigan. Hindi maganda iyon. Kaya, pag-uusapan natin ang tungkol sa "Rapid Response: Database Debugging and Profiling to the Rescue."

Mayroong isang lugar tungkol sa iyo ng tunay, pindutin ako sa Twitter, @eric_kavanagh siyempre.

Mainit ang taong ito. At ang pag-debug ay magiging mainit, kahit na ano. Ito ay talagang magiging isa sa mga problemang ito na hindi mawawala, kahit gaano kagaling makuha natin ang mga bagay na ito, palaging may mga isyu, kaya ang susi ay paano ka makakarating sa kung saan maaari mong malutas ang mga isyung iyon nang mabilis? Sa isip, mayroon kang mahusay na mga programmer, mahusay na mga kapaligiran, kung saan hindi masyadong maraming nagkakamali, ngunit habang ang lumang kasabihan ay nangyayari, "Ang mga aksidente ay nangyayari sa pinakamahusay na mga pamilya." At ang parehong ay totoo para sa mga samahan. Kaya, nangyari ang mga bagay na ito, mangyayari, ang tanong ay kung ano ang magiging solusyon mo sa pagharap nito at paglutas ng mga problemang iyon?

Naririnig namin mula kay Dr. Robin Bloor, kung gayon ang aming sariling Dez Blanchfield mula sa ilalim, at siyempre, ang aming mabuting kaibigan, si Bert Scalzo, mula sa IDERA. At sa katunayan, ihahatid ko ang mga susi kay Robin Bloor, ilayo ito. Ang sahig ay iyo.

Robin Bloor: OK. Ito ay isang kawili-wiling paksa. Naisip ko dahil malamang na magpapatuloy si Dez tungkol sa mga aktwal na pamamaraan at kwento tungkol sa digmaan tungkol sa pag-debug, naisip ko na gumawa lang ako ng isang talakayan sa background upang makakuha kami ng isang buong bilog na larawan ng kung ano ang nangyayari. Ginawa ko ito ng mahabang panahon, at dati akong naging isang coder, kaya tulad nito, at halos tinukso ako sa presentasyong ito upang simulan ang pag-usbong ng liriko tungkol sa ideya ng bukas na mapagkukunan ngunit naisip kong iiwan ko iyon sa ibang tao.

Narito ang isang listahan ng mga sikat na bug, at karamihan sa mga ito ay pumapasok sa tuktok na listahan ng sinuman, talaga, lahat maliban sa huling dalawang gastos ng hindi bababa sa $ 100 milyon. Ang una ay ang Mars Climate Orbiter, nawala sa espasyo at ito ay dahil sa isang problema sa coding, kung saan nalilito ang mga tao na mga yunit ng metric na may (mga tawa) na mga paa at pulgada. Ang Ariane Limang Paglipad 501 ay may isang pagkakamali sa pagitan ng isang makina na inilagay at ang mga computer na dapat na tumatakbo sa rocket nang ilunsad ito. Maramihang mga pagkabigo sa computer, pagsabog ng rocket, balita sa headline. Ang pipeline ng gas ng Sobyet noong 1982, ay sinabi na ang pinakamalaking pagsabog sa kasaysayan ng planeta; Hindi ako sigurado kung ito ay. Nakawin ng mga Ruso ang ilang awtomatikong software na kontrol, at natanto ng CIA na gagawin nila iyon at maglagay ng mga bug dito, at ipinatupad ito ng mga Sobyet nang walang pagsubok. Kaya, pumutok ang isang pipeline, naisip na nakakatawa.

Ang Morris worm ay isang eksperimento sa pag-coding, na biglang naging isang malulupit na uod na umikot sa lahat - tila ito ay sanhi ng pinsala sa $ 100 milyon; estima yan syempre. Gumawa ang Intel ng isang sikat na error sa isang matematika ng matematika - isang pagtuturo sa matematika sa Pentium chip noong 1993 - na dapat ay nagkakahalaga ng higit sa $ 100 milyon. Ang programa ng Mga Mapa ng Apple ay marahil ang pinakamasama at pinaka nakapipinsalang paglulunsad ng anumang nagawa ng Apple. Ang mga taong sinubukan ang paggamit nito, ay, ibig sabihin, may isang taong nagmamaneho kasama ang 101, at natuklasan na sinabi ng Apple Map na nasa gitna sila ng San Francisco Bay. Kaya, sinimulan ng mga tao na sumangguni sa Apple Maps app bilang iLost. Ang - ang aming pinakamahabang pag-agaw sa 1990 - kagiliw-giliw lamang mula sa isang punto ng view ng gastos ng isang bagay na tulad nito - Ang AT&T ay lumabas nang halos siyam na oras at nagkakahalaga ng mga $ 60 milyon sa mga tawag na pangmatagalan.

At ako ay nasa isang kumpanya ng seguro sa UK, at ang database, nagpatupad sila ng isang bagong bersyon ng database at sinimulan nito ang pagpahid ng data. At naalala ko na napakahusay, dahil tinawag ako pagkatapos na makilahok sa ilang uri ng pagpili ng database dahil doon. At ito ay napaka-kagiliw-giliw na kumuha sila ng isang bagong bersyon ng database, at mayroon silang isang baterya ng mga pagsubok na ginawa nila para sa mga bagong bersyon ng database na pinasa nito ang lahat ng mga pagsubok. Natagpuan nito ang isang tunay na malabo na paraan upang punasan ang data.

Kaya, pa rin, iyon na. Akala ko sasabihin ko ang tungkol sa impedance mismatch at inisyu ng SQL. Ito ay kagiliw-giliw na ang mga pamanggit na database na nakaimbak ng data sa mga talahanayan at ang mga coder ay may posibilidad na manipulahin ang data sa mga istruktura ng object na talagang hindi mag-mapa ng mabuti sa mga talahanayan. At dahil doon, nakukuha mo ang tinatawag na impedance mismatch, at ang isang tao ay kailangang harapin ito sa ilang paraan o iba pa. Ngunit kung ano ang talagang nangyayari, dahil ang isang modelo, modelo ng coder at database ng isa pang modelo, ay hindi partikular na nakahanay. Nakakakuha ka ng mga bug na hindi mangyayari kung ang industriya ay nagtayo ng mga bagay na nagtutulungan, na sa palagay ko ay masayang-maingay. Kaya, talaga, sa panig ng mga coders, kapag nakakakuha ka ng hierarchies maaari itong maging mga uri, maaari itong magresulta ng mga set, maaari itong maging hindi magandang kakayahan sa API, maaari itong maging maraming mga bagay na itatapon lamang ang mga bagay sa pakikipag-ugnay sa database. Ngunit ang bagay na pinaka para sa akin, talagang kawili-wili; palaging namangha ako na mayroon kang hadlang na SQL na ito ay isang uri din ng impedance sa isang paraan na ang mga coder at database ay nagtatrabaho sa bawat isa. Kaya, ang SQL ay may pagkilala sa data, na kung saan ay maayos at mayroon itong DML para sa piling, proyekto at sumali, na kung saan ay maayos. Maaari kang magtapon ng maraming kakayahan sa mga tuntunin ng pagkuha ng data sa database kasama nito. Ngunit napakakaunting wika ng matematika para sa paggawa ng mga bagay. Ito ay may isang maliit na ito at iyon, at mayroon itong napakaliit na mga bagay na batay sa oras. At dahil doon, ang SQL ay isang hindi sakdal, kung gusto mo, ay nangangahulugan ng pagkuha ng data. Kaya, ang mga database ng guys ay nagtayo ng naka-imbak na mga pamamaraan upang mabuhay sa database at ang dahilan para sa naka-imbak na mga pamamaraan na naninirahan doon ay hindi mo talaga nais na itapon ang data pabalik-balik sa isang programa.

Para sa ilan sa mga pag-andar ay lubos na tiyak na data, kaya hindi lamang ito ang sanggunian at pagtanggal ng mga pagtanggal at mga bagay tulad nito, ang database ay nag-aalaga sa lahat ng biglaang inilalagay mo ang pag-andar sa isang database, na nangangahulugang syempre na ang pag-andar para sa isang application ay maaaring nahati sa pagitan ng coder at ang database mismo. At iyon ang gumawa ng trabaho sa pagpapatupad ng ilang mga uri ng mga pag-andar na talagang mahirap at samakatuwid ay mas madaling kapitan ng pagkakamali. Kaya, iyon ang isang bahagi ng laro ng database, dahil nangangahulugan ito na nakuha mo ang maraming pagpapatupad halimbawa, na nasangkot ako sa mga liblib na database mayroong talagang isang kakila-kilabot na code ng nakaupo sa naka-imbak na mga pamamaraan na hawakan hiwalay mula sa code na nakaupo sa mga aplikasyon. At parang isang kakaibang bagay na dapat gawin, dapat na maging matalino sa paggawa ng iba't ibang mga bagay.

Akala ko sasabihin ko rin ang tungkol sa pagganap ng database dahil ang mga error sa pagganap ay madalas na itinuturing na mga bug, ngunit karaniwang maaari kang magkaroon ng isang bottleneck sa CPU, sa memorya, sa disk, sa network at maaari kang magkaroon ng mga isyu sa pagganap dahil sa pag-lock . Ang ideya ay na ang coder ay hindi talagang kailangang mag-alala tungkol sa pagganap at ang database ay talagang aktwal na gumanap nang maayos. Ito ay dapat na dinisenyo upang ang coder ay hindi kailangang malaman. Gayunpaman, nakakakuha ka ng masamang disenyo ng database, nakakakuha ka ng masamang disenyo ng programa, nakakakuha ka ng pagkakatugma sa paghahalo ng workload, na maaari ring humantong sa mga isyu sa pagganap. Nakakakuha ka ng pagbabalanse ng pagkarga, nakakakuha ka ng pagpaplano ng kapasidad, paglaki ng data - na maaaring maging sanhi ng paghinto lamang ng isang database, o pabagalin. Ito ay isang kagiliw-giliw na bagay, kapag ang mga database ay nakakakuha ng halos puno, bumagal sila. At maaari kang magkaroon ng isyu sa mga layer ng data sa mga tuntunin ng pagtitiklop at ang pangangailangan upang magtiklop at ang kailangang gawin backup at pagbawi. Pa rin, iyon ang pangkalahatang pangkalahatang-ideya.

Ang tanging bagay na nais kong sabihin ay ang pag-debug ng database ay maaaring maging tulad lamang sa napakabigat at hindi walang kabuluhan - at sinasabi ko na dahil nagawa ko ito ng maraming - at madalas mong matutuklasan ito tulad ng lahat ng mga sitwasyon sa pag-debug na ako kailanman naranasan ay, ay ang unang bagay na nakita mo ay isang gulo. At kailangan mong subukan at pumunta mula sa gulo upang gumana kung paano naganap ang gulo. At madalas kapag tinitingnan mo ang isang isyu sa database na tinitingnan mo ay sira ang data at iniisip mo, "Paano nangyari ang impiyerno?"

Pa rin, ipapasa ko kay Dez, na marahil ay magsasabi ng mas maraming mga salita ng karunungan kaysa sa lumabas ako. Hindi ko alam kung paano ipasa sa iyo ang bola, Dez.

Eric Kavanagh: Ipapasa ko ito, tumayo, hawakan.

Awtomatikong tinig: naka- mute ang mga linya ng kalahok.

Eric Kavanagh: Sige, hang sa isang segundo, hayaan mo akong bigyan si Dez ng bola.

Dez Blanchfield: Salamat, Eric. Oo, Dr Robin Bloor, talagang totoo ka: ito ay isang paksa, isang habang buhay na bugbear kung papatawarin mo ang pun, pasensya na hindi ko mapigilan ang sarili ko sa isang iyon. Sana makita mo ang aking unang screen doon, ang aking paghingi ng tawad para sa problema sa laki ng font sa tuktok. Ang paksa ng mga bug ay isang daylong lecture, sa maraming kaso sa aking karanasan. Ito ay tulad ng isang malawak at malawak na paksa, kaya pupuntahan ko ang pokus sa dalawang pangunahing mga lugar, partikular ang konsepto ng kung ano ang itinuturing nating isang bug, ngunit isang isyu sa programming. Sa palagay ko ang mga araw na ito ay nagpapakilala ng isang bug per se sa pangkalahatan ay makakakuha ng mga pinagsama-samang kapaligiran sa pag-unlad, bagaman maaaring sila ay mga pangmatagalang bug. Ngunit madalas na ito ay isang kaso ng isang profiling code at posible na magsulat ng code na gumana, dapat itong maging isang bug. Kaya, ang aking pamagat slide dito, ako ay talagang nagkaroon ng isang kopya nito sa napakataas na resolusyon A3, ngunit sa kasamaang palad nasira ito sa isang paglipat ng bahay. Ngunit ito ay isang sulat-kamay na tala sa isang programming sheet mula circa 1945, kung saan ang ilang mga tao sa Harvard University sa USA, ang kanilang pangalawang pagtatayo ng isang makina na tinatawag na Mark II. Ipinagpaubaya nila ang ilang isyu, sa karaniwang wika, ngunit sinusubukan nilang makahanap ng isang pagkakamali, at lumiliko na ang isang bagay na bahagyang naiiba sa kung ano ang isang hardware at isang parang software na isyu ay sumama.

Kaya, ang alamat ng lunsod ay tungkol sa ika- 9 ng Setyembre 1945, ang isang koponan sa Harvard University ay naghihila ng isang makina, natagpuan nila ang isang bagay na tinawag nilang "relay pitumpu" - sa mga araw na iyon ay nagawa ang pagprograma sa isang pisikal na kahulugan, nasugatan mo ang code sa paligid ng isang board, at iyon ay kung paano mo epektibong na-program ang makina - at natagpuan nila ang relay number na pitumpu mayroong isang mali sa ito, at lumiliko ang aktwal na term na "bug" na nangyari dahil medyo literal na isang uod - parang doon ay isang uod na ikinasal sa pagitan ng ilang piraso ng wire na tanso na pupunta mula sa isang lugar patungo sa isa pa. At ang kuwento ay napunta sa ang maalamat na Grace Hopper bilang caption na ito, para sa aking pamagat slide, "unang aktwal na kaso ng isang bug na natagpuan" quote unquote.

Ngunit tulad ng pag-highlight ni Robin nang mas maaga sa kanyang unang slide, ang konsepto ng isang bug ay napunta sa malayo hangga't maaari nating isipin ang mga tao na gumagawa ng compute, mga konsepto tulad ng isang patch. Ang salitang "patch" ay nagmula sa isang aktwal na piraso ng tape na na-tap sa isang butas sa isang suntok card. Ngunit ang buong punto nito, ay ang salitang "debugging" ay lumabas sa konseptong ito ng paghahanap ng isang bug sa isang pisikal na makina. At mula pa noon, ginamit namin ang terminolohiya na iyon sa pagsisikap na harapin ang mga isyu, alinman sa hindi tulad ng mga isyu sa pag-cod sa isang programa na hindi pinagsama-sama, ngunit bilang isang programa na hindi tatakbo nang maayos. At partikular na hindi nai-profile na makahanap lamang ng mga bagay tulad ng mga walang katapusang mga loop na pupunta kahit saan.

Ngunit mayroon din kaming isang senaryo, at naisip kong maglagay ng ilang nakakatawang mga slide bago ako makakuha ng mas detalyado. Narito ang klasikong cartoon, na tinatawag na XKCD sa web, at ang cartoonist ay may ilang mga nakakatawang nakakatawang pananaw sa mundo. At ang tungkol sa isang bata na tinawag na "Little Bobby Tables" at inaakalang ang kanyang mga magulang ay pinangalanan nitong batang batang si Robert '); GUSTO NG MAG-AARAL NG MAG-AARAL; - at tinawag ito, at uri ng "Kumusta, ito ang paaralan ng iyong anak na nagkakaroon ng problema sa computer, " at sumagot ang magulang, "Oh mahal, may sinira ba siya?" At sinabi ng guro, "Well, sa isang paraan, "at nagtanong ang guro, " Talaga bang pinangalanan mo ang iyong anak na si Robert '); MAG-AARAL NG MAG-AARAL NG MAG-AARAL; -? "At sinabi ng magulang, " O, maliit na Bobby Tables na tinawag natin sa kanya. "Pa rin, sinasabi nila na nawala na nila ang mga tala ng mag-aaral sa taon, inaasahan kong masaya ka. At ang sagot ay, "Well, dapat mong linisin at i-sanitize ang iyong mga input ng database." At ginagamit ko na maraming beses upang pag-usapan ang tungkol sa ilan sa mga problema na mayroon kami sa paghahanap ng mga bagay sa code, na madalas ang code ay hindi tumingin sa data din.

Ang isa pang nakakatawa, hindi ko alam kung ito ay totoo o hindi - sa palagay ko ito ay isang bula - ngunit muli, nahipo din nito ang aking nakakatawang buto. Isang tao na nagpapalit ng plaka ng lisensya sa harap ng kanilang sasakyan, sa isang katulad na pahayag na nagiging sanhi ng pagbagsak ng mga database ng mga bilis ng camera at iba pa na kumukuha ng mga plaka ng lisensya ng mga kotse. At lagi kong tinutukoy ito na nagdududa ako sa anumang programista na inaasahan ang isang hit at pagpapatakbo ng kanilang code sa pamamagitan ng isang aktwal na sasakyan ng motor, ngunit hindi kailanman maliitin iyon - kapangyarihan ng isang galit na geek.

(Tawa)

Ngunit ito ay humahantong sa akin sa aking pangunahing punto, sa palagay ko, at iyon ay sa sandaling oras, maaari nating i-debug at profile code bilang mga mortal lamang. Ngunit napakalaki ng pananaw ko na ang oras na iyon ay lumipas, at anecdotally sa aking karanasan, ang una ko - at ito ang magiging edad sa akin ng kakilakilabot, sigurado ako; Robin tinatanggap mong masayang masaya ako para dito - ngunit sa kasaysayan ay nagmula ako sa isang background sa edad na 14 na gumala sa dulo ng bayan, at kumatok sa pintuan ng isang data center na tinatawag na "Data Com" sa Bagong New Zealand at nagtanong kung makakakuha ako ng pera sa bulsa sa paaralan sa pamamagitan ng pagkuha ng huli na bus sa bahay, mga 25 km ng isang commute araw-araw, sa pamamagitan ng paglalagay ng papel sa mga printer, at mga teyp sa tape drive, at pagiging isang pangkalahatang admin. At kakaiba ang ibinigay nila sa akin ng isang trabaho. Ngunit sa paglipas ng panahon, pinamamahalaang ko ang aking sarili sa staffing at hanapin ang mga programmer at natanto kong mahal ko ang pag-cod at dumaan sa proseso ng pagpapatakbo ng mga script at mga trabaho sa batch, na sa pagtatapos ng araw ay code pa rin. Kailangan mong sumulat ng mga script at mga trabaho sa batch na mukhang mga mini program at pagkatapos ay dumaan sa buong proseso ng pag-upo sa isang 3270 terminal code sa pagsulat sa pamamagitan ng kamay.

Sa katunayan, ang una kong karanasan ay nasa isang teletype terminal, na talagang 132-haligi na pisikal na printer. Mahalaga, isipin tulad ng isang napaka matandang makinilya na may papel na naka-scroll sa pamamagitan nito, 'dahil wala silang isang CRT tube. At ang pag-debug ng code sa iyon ay isang napaka-walang kabuluhan na isyu, kaya't nais mong isulat ang lahat ng iyong code sa pamamagitan ng kamay, at pagkatapos ay kumilos tulad ng isang typist, na ginagawa ang iyong makakaya na hindi makakuha ng mga pagkakamali upang mag-sneak sa, sapagkat labis na nakakabigo na kailangang sabihin ang isang editor ng linya upang pumunta sa isang tiyak na linya at pagkatapos ay i-print ang linya at pagkatapos ay i-type ito muli. Ngunit sa isang beses, iyon ay kung paano namin isinulat ang code at iyon kung paano namin nag-debug, at nakuha namin, napakahusay dito. At sa katunayan, pinilit namin ito na magkaroon ng napakahusay na mga diskarte sa pagprograma, dahil ito ay isang tunay na abala upang ayusin ito. Ngunit ang paglalakbay pagkatapos ay dumaan - at pamilyar kaming lahat - ito ay nagmula sa 3270 na karanasan sa terminal sa aking mundo, sa Digital Equipment VT220 kung saan makakakita ka ng mga bagay sa screen, ngunit muli, ginagawa mo lang ang parehong bagay ginawa mo sa uri ng papel tape ng naka-print na format na nasa isang CRT lamang, ngunit mas madali mong tinanggal ang pag-alis at wala kang tunog na "dit dit dit".

At pagkatapos ay alam mo, ang mga terminal ng Wyse - tulad ng Wyse 150, marahil ang aking paboritong interface sa isang computer kailanman - at pagkatapos ay ang PC at pagkatapos ang Mac, at pagkatapos ng mga araw na ito ang mga modernong GIT at ID na nakabase sa web. At isang hanay ng mga programa sa pamamagitan ng na, programming sa isa at magtipon at PILOT at Logo at Lisp at at Fortran at Pascal at mga wika na maaaring gumawa ng mga tao. Ngunit ito ay mga wika na nagpilit sa iyo na magsulat ng magandang code; hindi ka nila hinayaan na lumayo sa mga masasamang kasanayan. C, C ++, Java, Ruby, Python - at lalo nating makuha ang yugto ng programming, nakakakuha kami ng mas maraming script, tulad ng mas malapit kami sa Structured Query Language at mga wika tulad ng PHP na aktwal na ginagamit upang maanyayahan ang SQL. Ang punto ng pagsasabi sa iyo na, nagmula sa aking background, nagturo ako sa sarili sa maraming paraan at yaong nakatulong sa akin na matuto, nagturo sa akin ng napakahusay na mga kasanayan sa pagprograma at napakahusay na kasanayan sa paligid ng disenyo at mga proseso upang matiyak na hindi ko ipakilala ang code ng surot.

Mga paraan ng pag-Programming sa mga araw na ito, mga bagay tulad ng, halimbawa, Structured Query Language, SQL, ito ay isang napakalakas, simpleng wika ng query. Ngunit ginawa namin ito sa isang wika ng programming at hindi ako naniniwala na ang SQL ay kailanman idinisenyo upang maging isang modernong wika ng programming, ngunit sinubukan namin ito upang maging iyon. At ipinakikilala nito ang isang buong bungkos ng mga isyu, 'sanhi kapag iniisip natin ang tungkol sa dalawang punto ng view: mula sa coding point of view at mula sa DBA point of view. Napakadaling sumabay at ipakilala ang mga bug para sa mga bagay tulad ng mga mahihirap na pamamaraan sa pagprograma, tamad na pagsisikap sa pagsusulat ng code, kakulangan ng karanasan, ang klasikong alagang hayop ng alaga na mayroon ako halimbawa sa mga taong SQL na tumatalon sa Google at naghahanap ng isang bagay at paghahanap ng isang website na Nakakuha ng isang halimbawa at paggawa ng isang kopya at i-paste ang umiiral na code. At pagkatapos ay pagtutuon ng isang masamang pag-coding, pag-iwas at paglalagay nito sa paggawa, sapagkat nangyayari lamang ito upang mabigyan sila ng mga resulta na gusto nila. Mayroon kang iba pang mga hamon, halimbawa, sa mga araw na ito lahat kami ay nagmamadali patungo dito, na tinatawag nating lahi sa zero: sinusubukan na gawin ang lahat ng sobrang mura at napakabilis, na mayroon kaming isang sitwasyon kung saan hindi namin ginagamit ang mas mababa -pagbabayad kawani. At hindi ko ibig sabihin na sa isang hindi kanais-nais na paraan, ngunit hindi kami umupa ng mga eksperto para sa bawat posibleng trabaho. Minsan sa anumang bagay na gagawin sa mga computer ay rocket science; ito ay kasangkot sa mga bagay na napupunta at napakalakas, o napunta sa puwang o mga inhinyero ay mabibigat na karapat-dapat na mga kalalakihan at kababaihan na gumawa ng mga degree at may mahigpit na mga edukasyon na nagpigil sa kanila sa paggawa ng mga mabaliw na bagay.

Sa mga araw na ito, maraming mga tao ang nagsisimula sa pag-unlad at disenyo at database na hindi nagkaroon ng mga taon ng karanasan, ay hindi kinakailangan ng parehong pagsasanay o suporta. At sa gayon nagtatapos ka sa isang senaryo ng lamang tradisyonal na amateur kumpara sa dalubhasa. At mayroong isang sikat na linya, hindi ko talaga maalala kung sino ang lumikha ng quote, ang linya ay napupunta, "Kung sa palagay mo ay mahal ang pag-upa ng isang dalubhasa na gumawa ng trabaho, maghintay hanggang umarkila ka ng ilang mga amateurs na lumikha ng isang problema at ikaw kailangang linisin ito. "At sa gayon ang SQL ay may isyu na iyon, at napakadali nitong malaman, napakadaling gamitin. Ngunit hindi ito, sa aking pananaw, isang perpektong wika sa programming. Napakadaling gawin ang mga bagay tulad ng isang napiling bituin mula saanman at hilahin ang lahat na sa isang programming language na mas komportable ka tulad ng PHP at Ruby o Python, at gamitin ang programming language na katutubong pamilyar ka, gawin ang pagmamanipula ng data, sa halip na gawin ang isang mas kumplikadong query sa SQL. At nakikita namin ito ng maraming, at pagkatapos ay nagtataka ang mga tao kung bakit ang database ay tumatakbo nang mabagal; ito ay dahil sa isang milyong mga tao na sinusubukan upang bumili ng isang form ng tiket ng isang online na sistema ng tiket, kung saan ginagawa nito ang isang piling bituin mula saanman.

Ngayon, iyon ay isang talagang matinding halimbawa, ngunit nakuha mo ang punto sa lahat ng iyon. Kaya, para lamang masuntok ang puntong iyon sa bahay, narito ang isang halimbawa na marami akong dinadala. Ako ay isang malaking tagahanga ng matematika, mahilig ako sa chaos theory, mahal ko ang mga set ng Mandelbrot. Sa kanang bahagi ay mayroong isang ruta ng Mandelbrot set, na sigurado akong pamilyar tayo. At sa kaliwa mayroong isang piraso ng SQL na aktwal na nag-render na. Ngayon, sa tuwing inilalagay ko ito sa isang screen sa isang lugar, naririnig ko ang "Oh diyos ko, may nag-render sa Mandelbrot series kasama ang SQL, seryoso ka ba? Hindi masiraan ng loob! ”Buweno, ang buong punto ng iyon ay upang ilarawan kung ano ang naipalabas ko roon, at iyon ay oo, sa katunayan maaari mo na ngayong iprograma ang halos anumang bagay sa SQL; ito ay isang napaka mabigat na binuo, malakas, modernong programming language. Kapag orihinal na ito ay isang wika ng query, dinisenyo ito upang makakuha lamang ng data. Kaya, ngayon nakakuha kami ng napaka kumplikadong mga konstruksyon at nakatipid kami ng mga pamamaraan, nakuha namin ang pamamaraan ng programming na inilalapat sa isang wika at sa gayon napakadali para sa mahirap na kasanayan sa pagprograma, kakulangan ng karanasan, cut-and-paste code, ang mga kawani na may mababang suweldo na nagsisikap na maging kawani na may mataas na bayad, ang mga taong nagpapanggap na alam nila, ngunit kailangan nilang matuto sa trabaho.

Ang isang buong hanay ng mga bagay kung saan ang code profiling at kung ano ang tinutukoy namin bilang pag-debug, na hindi gaanong paghahanap ng mga bug na huminto sa mga programa mula sa pagtatrabaho, ngunit ang mga bug na nasasaktan lamang ang system at hindi maganda ang nakabalangkas na code. Kapag tiningnan mo ang screen na ito ngayon, at sa palagay mo, makatarungan, ito ay uri ng cute at sa palagay mo, "Wow, kung ano ang isang mahusay na graphic, gusto kong patakbuhin iyon." Ngunit isipin mo na ang pagpapatakbo sa ilang piraso ng lohika ng negosyo . Mukhang malinis ito, ngunit nagsasalita ito ng isang matematika na graphically na ginawang gulo ng chaos theory, ngunit kapag iniisip mo ang tungkol sa kung ano ito ay maaaring magamit para sa isang lohika sa negosyo, makuha mo ang larawan nang napakabilis. At upang talagang ilarawan iyon - at nalulungkot ako na ang mga kulay ay nabaligtad, dapat itong maging isang itim na background at berdeng teksto upang maging isang berdeng screen, ngunit maaari mo pa ring basahin iyon.

Nagpunta ako at nagkaroon ng isang mabilis na pagtingin sa isang halimbawa ng kung ano ang maaari mong gawin kung talagang mabaliw ka at walang karanasan kahit ano at nagmula sa ibang background ng pag-programming at inilapat ang mga gusto ng C ++ sa SQL, upang mailarawan ang aking punto, bago Iniabot ko ang aming natutunan na panauhin mula sa IDERA. Ito ay isang nakaayos na query na nakasulat tulad ng C ++, ngunit naka-code ito sa SQL. At ito ay aktwal na isinasagawa, ngunit nagpapatupad ito ng halos tatlo hanggang limang minuto na tagal. At ito ay kumukuha ng pabalik na isang linya ng data ng maraming mga database, maraming mga sumali.

Muli, ang buong punto ng ito ay kung wala kang tamang mga tool, kung wala kang tamang mga platform at kapaligiran upang mahuli ang mga bagay na ito, at makukuha sila sa paggawa, at pagkatapos ay mayroon kang 100, 000 tao paghagupit ng isang sistema araw-araw, o oras, o minuto, sa lalong madaling panahon magtapos ka sa isang karanasan sa Chernobyl kung saan nagsisimula ang pagkatunaw ng malaking bakal at inilibing ang sarili sa core ng planeta, dahil ang piraso ng code ay hindi kailanman dapat makakuha sa paggawa. Ang iyong mga system at iyong mga tool, humingi ng paumanhin, ay dapat pumili na bago ito mapunta sa kahit saan malapit sa - kahit na sa pamamagitan ng proseso ng pagsubok, kahit sa pamamagitan ng UAT at pagsasama ng mga sistema, ang piraso ng code ay dapat kunin at i-highlight at may dapat isama at na nagsasabing, "Tingnan, talagang talagang code, ngunit kumuha tayo ng isang DBA upang matulungan kang mabuo nang maayos ang nakabalangkas na query, dahil lantaran, iyon ay bastos lamang." At ang URL ay nariyan, maaari kang pumunta at magkaroon ng isang hitsura - tinukoy ito bilang pinaka kumplikadong query sa SQL na iyong sinulat. 'Dahil sa paniwalaan mo ako, na talagang nagtitipon, tumatakbo ito. At kung gupitin mo at i-paste iyon at pakutitin lamang ang database, medyo bagay na dapat itong panoorin; kung nakuha mo ang mga tool upang panoorin ang database subukan lamang at matunaw sa loob ng isang tatlo hanggang limang minuto na panahon, upang balikan kung ano ang isang linya ng teksto.

Kaya, upang mai-summarize, na nasa isip, ang aking buong background sa coding ay nagturo sa akin na maaari mong bigyan ang mga tao ng baril at kung hindi sila mag-ingat ay kukunan nila ang kanilang sarili sa paa; ang trick ay upang ipakita sa kanila kung nasaan ang mekanismo ng kaligtasan. Gamit ang mga tamang tool at tamang software sa iyong mga daliri, pagkatapos mong magawa ang coding, maaari mong suriin ang iyong code, maaari kang makahanap ng mga isyu sa pamamagitan ng pag-file ng code, maaari mong makita ang mabisang hindi sinasadyang mga bug na mga isyu sa pagganap, at tulad ng sinabi ko mas maaga pa, minsan, magagawa mo itong tumingin sa isang berdeng screen. Hindi mo na kaya; may mga daan-daang libong mga linya ng code, may mga sampu-sampung libong mga app na na-deploy, mayroong milyun-milyong mga database sa ilang mga pagkakataon, at kahit na ang mga super tao ay hindi na maaaring gawin ito sa pamamagitan ng kamay. Talagang literal na kailangan mo ang tamang software at mga tamang kasangkapan sa iyong mga daliri at kailangan mo ang koponan na gagamitin ang mga tool na iyon, upang maaari mong mahanap ang mga isyung ito at matugunan ang mga ito nang napakabilis, bago ka makarating sa puntong iyon, samantalang kay Dr. Binigyang diin ni Robin Bloor, ang mga bagay ay maaaring maging kapinsalaan, at ang mga bagay ay sumabog, o mas karaniwan, nagsisimula lamang silang magastos sa iyo ng maraming dolyar at maraming oras at pagsisikap at pagsira sa moral at mga bagay-bagay, kapag hindi nila magawa ang mga bagay isang mahabang oras upang tumakbo.

At sa pag-iisip nito, ihahatid ko ang aming panauhin at inaasahan kong marinig kung paano nila malutas ang isyung ito. At lalo na ang demo na sa palagay ko ay malapit na kaming matanggap. Eric, ipapasa ko ulit.

Eric Kavanagh: OK, Bert, ilabas mo ito.

Bert Scalzo: OK, salamat. Si Bert Scalzo dito mula sa IDERA, ako ang manager ng produkto para sa aming mga tool sa database. At sasabihin ko ang tungkol sa pag-debug. Sa palagay ko ang isa sa mga pinakamahalagang bagay na sinabi kanina ni Robin - at tunay na totoo na ang debugging ay napakabigat at hindi walang kabuluhan, at kapag nagpunta ka sa pag-debug ng database ito ay isang order ng magnitude kahit na mas malala at hindi walang kabuluhan - kaya, iyon ay isang mahalagang quote.

OK. Nais kong magsimula sa kasaysayan ng pagprograma, dahil maraming beses na nakikita ko ang mga taong hindi debugging, hindi sila gumagamit ng isang debugger, program lamang nila ang anumang wika na ginagamit nila, at maraming beses sasabihin nila sa akin, "Well, ang mga debugger na bagay ay bago, at hindi pa namin sinimulan ang paggamit ng mga iyon." At kung ano ang gagawin ko ay ipinapakita ko sa kanila ang timeline chart na ito, uri ng paunang kasaysayan, ang katandaan, ang gitnang edad, ito ay mabait sabihin kung nasaan tayo sa mga tuntunin ng mga wika sa programming. At mayroon kaming mga matandang wika na nagsisimula noong 1951 na may code ng pagpupulong, at ang Lisp at FACT at COBOL. Pagkatapos ay makarating kami sa susunod na grupo, ang mga Pascals at Cs at pagkatapos ay ang susunod na grupo, ang C ++ s, at tignan kung saan ang tanda ng tanong na iyon - ang marka ng tanong ay humigit-kumulang sa paligid ng 1978 hanggang marahil 1980. Kahit saan sa saklaw na iyon magagamit ng sa amin ang mga debugger, at sa gayon, "Uy, hindi ako gumagamit ng isang debugger, 'dahil iyan ang isa sa mga bagong bagay na iyon, " pagkatapos ay dapat mong sinimulan ang pagprograma, alam mo, noong mga dekada ng 1950, ' kaya't iyon ang lamang ang paraan na makakalayo ka sa pag-angkin na iyon.

Ngayon ang iba pang bagay na nakakatawa tungkol sa tsart na ito ay gumawa lamang ng komento si Dez tungkol sa Grace Hopper, alam ko talaga si Grace, kaya't nakakatawa ito. At pagkatapos ay ang iba pang bagay na pinagtawanan ko ay pinag-uusapan niya ang tungkol sa mga teletype at nakaupo ako doon na pupunta, "Tao, iyon ang pinakadakilang paglukso na mayroon tayo sa pagiging produktibo, kapag nagpunta kami mula sa mga kard sa teletypes, iyon ang pinakamalaking pagtalon. "Kaya't, at na-program ko na ang lahat ng mga wika dito, kasama ang SNOBOL, na hindi nakarinig ng una, ito ay isang CDC, Control Data Corporation, kaya't sa palagay ko nakakakuha ako ng kaunting matanda para sa industriya na ito .

Dez Blanchfield: Sasabihin ko, napakapang -edad mo na kami doon.

Bert Scalzo: Oo, sinasabi ko sa iyo, pakiramdam ko tulad ni Lolo Simpson. Kaya't tumingin ako sa pag-debug at mayroong iba't ibang mga paraan ng paggawa ng pag-debug. Maaari mong pag-usapan ang tungkol sa kung ano ang naiisip nating lahat bilang tradisyonal na pagkuha sa isang debugger at pagtapak sa code. Ngunit gayunpaman, ang mga tao ay gagamitan ng kanilang code; na kung saan idikit mo ang mga pahayag sa iyong code at marahil gumawa ka ng isang output file, isang trace file o isang bagay, at sa gayon ay utos mo ang iyong code. Inaasahan kong bilang bilang pag-debug, medyo mahirap, isang paraan ng paggawa nito, ngunit binibilang ito. Ngunit din, nakuha namin ang sikat na pahayag ng pag-print: pinapanood mo at ang mga tao ay talagang naglalagay ng mga pahayag sa pag-print at aktwal na nakakita ako ng isang tool kung saan - at ito ay isang tool sa database - kung hindi mo alam kung paano gumamit ng isang debugger, itulak mo ang isang pindutan at pipikitin nito ang mga pahayag sa pag-print sa buong iyong code para sa iyo at pagkatapos ay matapos na mong itulak ang isa pang pindutan at pinalabas ito. Sapagkat ganyan kung gaano kalaking tao ang nag-debug.

At ang dahilan ng pag-debug namin ay dalawa: una sa lahat, kailangan nating makahanap ng mga bagay na hindi epektibo ang aming code. Sa madaling salita, karaniwang nangangahulugang mayroong isang pagkakamali sa lohika o napalampas namin ang isang kinakailangan sa negosyo, ngunit kung ano ito, ay hindi epektibo ang code; hindi nito ginagawa ang inaasahan nating gawin. Sa ibang oras na pupunta tayo at gumawa kami ng pag-debug, ito ay para sa kahusayan at maaaring maging isang pagkakamali ng lohika, ngunit kung ano ito, ay ginawa ko ang tamang bagay, hindi lamang ito bumalik nang sapat nang mabilis. Ngayon, ginagawa ko ang puntong iyon dahil marahil ay mas mahusay sa isang pangalawang senaryo at pag-uusapan natin ang tungkol sa kapwa debugger at mga profile. Bilang karagdagan, mayroong konsepto ng remote na pag-debug; mahalaga ito dahil maraming beses kung nakaupo ka sa iyong personal na computer, at gumagamit ka ng isang debugger, na tumama sa isang database kung saan ang code ay aktwal na naisakatuparan sa database, ginagawa mo talaga ang tinatawag na liblib na pag-debug. Maaaring hindi mo ito napagtanto, ngunit iyon ang nangyayari. At pagkatapos, napaka-pangkaraniwan sa mga debugger na ito na magkaroon ng mga puntos ng break, mga puntos ng panonood, hakbang-hakbang at pag-atensyon at ilang iba pang mga karaniwang bagay, na ipapakita ko ang mga nasa isang snapshot ng screen sa isang sandali.

Ngayon, profiling: maaari kang gumawa ng profiling sa isang iba't ibang mga paraan. Sasabihin ng ilang mga tao na ang pagkuha ng workload at i-replay kung saan kinukuha ang lahat, na ang bilang ay profiling. Ang aking karanasan ay naging mas mabuti kung ito ay tapos na sampling. Walang dahilan upang mahuli ang bawat solong pahayag, dahil ang ilang mga pahayag ay maaaring tumakbo lamang nang mabilis na hindi mo pakialam, kung ano ang talagang sinusubukan mong makita ay, well, na kung saan ay ang patuloy na nagpapakita ng paulit-ulit, dahil matagal na silang tumatakbo. Kaya, kung minsan ang profiling ay maaaring nangangahulugang sampling kaysa sa pagpapatakbo ng buong bagay. At karaniwang, makakakuha ka ng ilang uri ng output na maaari mong gamitin, ngayon ay maaaring maging visual sa loob ng isang kapaligiran ng pag-unlad ng IDE, kung saan maaari itong bigyan ka tulad ng isang histogram ng pagganap ng iba't ibang mga linya ng code, ngunit maaari pa rin maging ito ay gumagawa ng isang trace file.

Una nang lumitaw ang mga profile noong 1979. Kaya, ang mga matagal nang nasa paligid din. Mahusay para sa paghahanap ng pagkonsumo ng mapagkukunan, o mga isyu sa pagganap, sa ibang salita na kahusayan na bagay. Sa pangkalahatan, hiwalay ito at naiiba sa debugger, kahit na nakatrabaho ko ang mga debugger na parehong ginagawa sa parehong oras. At habang ang mga profileer sa palagay ko ay mas kawili-wili sa dalawang mga tool, kung sa palagay ko na hindi sapat ang mga debug ng mga tao, pagkatapos ay tiyak na hindi sapat ang profile ng mga tao, dahil ang isa sa sampung debugger ay magiging profile, tila. At iyon ay isang kahihiyan, dahil ang pag-profile ay maaaring gumawa talaga ng malaking pagkakaiba. Ngayon, ang mga wika sa database, tulad ng napag-usapan namin kanina, nakuha mo na ang SQL - at pinilit namin ang pag-ikot ng peg sa square hole dito at pinilit itong maging isang programming language - at Oracle. Iyon ang PL / SQL - iyon ang wika na pamamaraan ng SQL - at SQL Server, ito ay Transact-SQL, ito ay SQL-99, ito ay SQL / PSM - para sa, sa palagay ko, ito ay Pamamaraan na Naka-istilong Module. Binibigyan ito ng mga postgres ng isa pang pangalan, DB2 pa ang isa pang pangalan, Informix, ngunit ang punto ay pinilit ng lahat ang mga 3GL-type na mga konstruksyon; sa madaling salita, PARA sa mga loop, sa variable na mga pagpapahayag at lahat ng iba pang mga bagay-bagay na dayuhan sa SQL ay bahagi na ngayon ng SQL sa mga wikang iyon. At sa gayon, kailangan mong mag-debug ng isang PL / SQL o isang Transact-SQL tulad ng nais mong isang Visual Basic na programa.

Ngayon, ang mga object database, ito ay mahalaga dahil sasabihin ng mga tao, "Well, anong mga bagay ang kailangan kong i-debug sa isang database?" At ang sagot ay, mabuti, anuman ang maaari mong maiimbak sa database bilang code - kung ginagawa ko T-SQL, o PL / SQL - at nag-iimbak ako ng mga bagay sa database, marahil ito ay naka-imbak na pamamaraan o naka-imbak na function. Ngunit mayroon ding mga nag-trigger: ang isang trigger ay uri ng tulad ng isang naka-imbak na pamamaraan, ngunit nagpapaputok ito sa ilang uri ng kaganapan. Ngayon, ang ilang mga tao sa kanilang mga nag-trigger ay maglagay ng isang linya ng code at tatawag ng isang naka-imbak na pamamaraan upang mapanatili nila ang lahat ng kanilang mga nakaimbak na code at mga pamamaraan, ngunit ito ay ang parehong konsepto: ito pa rin ang nag-trigger ay maaaring kung ano ang nagpasimula ng buong bagay. At pagkatapos bilang Oracle, mayroon silang isang bagay na tinatawag na isang package, na kung saan ay uri ng tulad ng isang library kung gugustuhin mo. Inilagay mo ang 50 o 100 na naka-imbak na mga pamamaraan sa isang pagpangkat, na tinatawag na isang package, kaya uri ito tulad ng isang library. Kaya, narito ang debugger ang dating daan; ito ay talagang isang tool na talagang pupunta at idikit ang lahat ng mga pahayag na ito ng debug sa iyong code para sa iyo. Kaya, kung saan saan mo nakikita ang debug block, huwag alisin, ang awtomatikong pag-debugger ay nagsisimula at bakas, ang lahat ay natigil ng ilang tool. At ang mga linya sa labas ng iyon, na kung saan ay ang minorya ng code, mabuti, iyon ang hindi mano-manong pamamaraan ng pag-debug.

At ang dahilan kung bakit ko ito isinasagawa, kung sinusubukan mong gawin ito sa pamamagitan ng kamay, talagang mag-type ka ng higit pang debugging code upang mailagay ang lahat ng mga pahayag na ito kaysa sa kasama mo ang code. Kaya, habang ito ay maaaring gumana, at habang ito ay mas mahusay kaysa sa wala, ito ay isang napakahirap na paraan upang i-debug, lalo na mula pa, paano kung kukuha ng 10 oras para sa bagay na ito upang tumakbo, at kung saan mayroon itong problema sa linya ng tatlo? Kung gumagawa ako ng isang interactive na sesyon ng pag-debug, malalaman ko na sa linya ng tatlo - limang minuto sa loob nito - hey, may problema dito, maaari akong huminto. Ngunit kasama nito, kailangan kong hintayin itong tumakbo, sa lahat ng paraan upang makumpleto at pagkatapos ay kailangan kong tumingin sa ilang mga trace file na marahil ay mayroong lahat ng mga pahayag na ito sa loob nito, at subukan at hanapin ang karayom ​​sa haystack. Muli, ito ay mas mahusay kaysa sa wala, ngunit hindi ito ang pinakamahusay na paraan upang gumana. Ngayon, ito ang magiging hitsura ng file na iyon mula sa naunang slide; sa madaling salita, pinatakbo ko ang programa, at ito ay nakuha lamang ng isang grupo ng mga pahayag na naka-print sa trace file na ito at maaari kong o hindi maaaring maghigop sa pamamagitan nito at hanapin kung ano ang kailangan kong hanapin. Kaya, muli, hindi ako sigurado na ito ang paraang nais mong gumana.

Ngayon, ang mga interactive na debugger - at kung nagamit mo ang tulad ng Visual Studio upang magsulat ng mga programa, o Eclipse, mayroon kang mga debugger at ginamit mo ito sa iyong iba pang mga wika - hindi mo naisip na gamitin ang mga ito dito sa iyong database. At mayroong mga tool sa labas, tulad ng aming DB Artisan at aming Rapid SQL, ito ay Rapid SQL dito, na mayroong debugger, at maaari mong makita sa kaliwang bahagi, mayroon akong isang naka-imbak na pamamaraan na tinatawag na "suriin para sa mga duplicate." Karaniwan, pupunta lang ito at tingnan at tingnan kung mayroon akong maraming mga hilera sa talahanayan na may parehong pamagat ng pelikula. Kaya, ang database ay para sa mga pelikula. At maaari mong makita sa kanang bahagi, sa itaas na pangatlo, nakuha ko ang aking source code sa gitna, nakuha ko na ang tinatawag na mga variable ng relo ko at ang aking mga tray ng stack ng tawag, at pagkatapos ay nasa ilalim ako Nakakuha ka ng ilang mga mensahe ng output. At ang mahalaga dito, kung titingnan mo ang unang pulang arrow, kung mouse ako sa isang variable, nakikita ko talaga kung anong halaga sa variable na iyon sa oras na iyon, habang sinusunod ko ang code. At talagang kapaki-pakinabang ito, at pagkatapos ay maaari kong hakbangin ang isang linya sa isang pagkakataon sa pamamagitan ng code, hindi ko na kailangang isagawa ang pagpatay, masasabi kong hakbang ang isang linya, hahanapin ko kung ano ang nangyari, hakbangin ang isa pang linya, hayaan mo akong makita kung ano ang nangyari, at ginagawa ko ito sa database. At kahit na nakaupo ako sa Rapid SQL sa aking PC at ang aking database ay nasa ulap, magagawa ko pa rin ang malayong debugging na ito at makita ito at makontrol ito mula dito, at gawin ang pag-debug tulad ng nais ko sa ibang wika.

Ngayon, ang susunod na arrow doon - makikita mo ang maliit na tulad ng arrow na tumuturo sa kanan, patungo sa output ng DBMS, na kung saan ang aking cursor ay sa sandaling ito - kaya sa madaling salita, ako ay humakbang at doon na ako nasa sa sandaling ito. Kaya, kung sasabihin ko, "Hakbang muli, " Pupunta ako sa susunod na linya. Ngayon lamang sa ibaba na makikita mo ang pulang tuldok. Kaya, iyon ay isang takbo, na nagsasabing "Uy, ayokong mag-hakbang sa mga linya na ito." Kung nais ko lang na tumalon sa lahat at makarating sa kung saan ang pulang tuldok, maaari kong pindutin ang pindutan ng pagtakbo at tatakbo ito mula dito alinman hanggang sa wakas, o sa isang lugar ng pagtatakda, kung mayroong anumang mga setting ng breakpoints, at pagkatapos ay titigil ito at hayaan kong gawin ulit ang hakbang. At ang dahilan na lahat ito ay mahalaga at makapangyarihan ay, dahil kapag ginagawa ko ang lahat ng ito, kung ano ang nangyayari sa gitna at maging sa ilalim - ngunit ang pinakamahalaga sa gitna - ay magbabago at makikita ko ang mga halaga mula sa aking mga variable, Nakikita ko ang aking bakas ng tawag sa stack, alam mo, at sa gayon ang lahat ng impormasyong iyon ay ipinapakita doon habang ako ay dumadaan sa code, kaya aktwal na nakikita at naramdaman at nakakakuha ako ng pag-unawa sa kung ano ang nangyayari at kung paano ang aktwal na code nagtatrabaho sa oras ng pagpapatupad. At karaniwang makakahanap ako ng problema, kung mayroong isa, o kung sapat na ako upang mahuli ito.

OK, ngayon ay pag-uusapan ko ang tungkol sa isang profiler, at sa kasong ito, ito ay isang profiler na maaari kong makita sa pamamagitan ng isang debugger. Tandaan kong sinabi kung minsan ay hiwalay sila at kung minsan maaari silang magkasama? Sa kasong ito, at muli, nasa Rapid SQL ako, at nakikita kong mayroong isang margin, sa kaliwang bahagi, sa tabi ng mga numero ng linya. At kung ano iyon, iyon ang bilang ng mga segundo o microsecond na kinuha upang maisagawa ang bawat linya ng code, at nakikita ko nang malinaw, ang lahat ng aking oras ay ginugol sa isang ito para sa kung saan pinili ko ang lahat mula sa isang talahanayan . At kung gayon, anuman ang nangyayari sa loob ng PARA sa loop marahil ay isang bagay na kailangan kong tignan, at kung mas mapapaganda ko ito, magbabayad ito ng mga dividend. Hindi ako makakakuha ng anumang mga pagpapabuti sa pamamagitan ng pagtatrabaho sa mga linya na tulad ng 0.90 o 0.86; hindi gaanong oras ang ginugol doon. Ngayon, sa kasong ito, at muli, nasa Rapid SQL ako, nakikita mo kung paano ko magagawa ang profiling magkasama sa aking pag-debug. Ngayon, ang maganda ay pinapayagan ka rin ng Rapid SQL na gawin mo ito sa ibang paraan. Pinapayagan ka ng Rapid SQL na sabihin, "Alam mo kung ano? Hindi ko nais na maging debugger, nais kong patakbuhin ito at pagkatapos ay nais kong tingnan ang graphic o biswal na parehong uri ng impormasyon. "

At makikita mo na wala na ako sa debugger at pinapatakbo nito ang programa at pagkatapos na maisagawa ang pagpapatupad, binibigyan ako ng mga tsart upang sabihin sa akin ang mga bagay upang makita ko na nakakuha ako ng isang pahayag na mukhang tumatagal karamihan sa pie chart at kung titingnan ko, nakikita ko sa grid na iyon sa ilalim, linya 23, nariyan muli ang FOR loop: siya ay tumatagal ng pinakamaraming oras, siya ay sa katunayan na ang madilim na pulang ngumunguya ang lahat ng tsart ng pie. At sa gayon, ito ay isa pang paraan para sa paggawa ng profiling. Nangyayari kaming tawaging "Code Analyst" sa aming tool. Ngunit ito talaga ay isang profiler na hiwalay sa isang debugger. Ang ilang mga tao ay nais na gawin ito sa unang paraan, ang ilang mga tao ay nais na gawin ito sa pangalawang paraan.

Bakit tayo gumagawa ng debugging at profiling? Hindi ito dahil nais naming isulat ang pinakadakilang code sa mundo at makakuha ng isang pagtaas ng bayarin - maaaring iyon ang dahilan namin, ngunit hindi iyon ang tunay na dahilan na ginagawa mo ito - nangako ka sa negosyo na gagawin mo nang tama, na magiging epektibo ang iyong programa. Iyon ang gagamitin mo sa debugger. Bilang karagdagan, ang mga gumagamit ng pagtatapos ng negosyo; hindi sila masyadong matiyaga: nais nila ang mga resulta kahit na bago nila pinindot ang susi. Dapat nating basahin ang kanilang isip at gawin ang lahat agad. Sa madaling salita, kailangang maging mahusay. At kung gayon, iyon ang gagamitin namin sa profiler. Ngayon, nang walang mga tool na ito, naniniwala ako na ikaw ang taong ito sa suit ng negosyo na may bow at arrow at ikaw ay bumaril sa target at ikaw ay nabulag. Sapagkat paano ka makakahanap ng kung paano naglalabas ang isang programa sa pamamagitan lamang ng pagtingin sa static code at paano mo malalaman kung aling linya ang kung saan ito ay talagang gugugol ng oras sa pagpapatupad, muli, sa pamamagitan lamang ng pagtingin sa static code? Ang isang pagsusuri sa code ay maaaring o hindi maaaring i-up ang ilan sa mga bagay na ito, ngunit walang garantiya na makikita ng lahat ang pagsusuri sa code. Gamit ang isang debugger at profiler dapat mong mahanap ang lahat ng mga bug.

OK, gagawa lang ako ng isang totoong mabilis na demo dito. Hindi ko intensyon na itulak ang produkto, nais kong ipakita sa iyo kung ano ang hitsura ng isang debugger na 'sanhi ng maraming beses sasabihin ng mga tao, "Hindi ko pa nakita ang isa sa mga ito." At medyo maganda ito sa mga snap slide ng screen, ngunit ano ang hitsura kung ito ay sa paggalaw? Kaya, narito sa aking screen ako ay nagpapatakbo ng aming produkto ng DB Artisan; mayroon din kaming debugger doon. Ang DB Artisan ay nangangahulugang higit pa para sa mga DBA, ang Rapid SQL ay higit pa para sa mga nag-develop, ngunit nakita ko ang mga developer na gumagamit ng DB Artisan, at nakita ko ang mga DBA na gumagamit ng Rapid. Kaya, huwag mahuli sa produkto. At narito, may pagpipilian akong gawin ang isang debug, ngunit bago ko ilunsad ang debug, kukuha ako ng kunin ang code na ito upang makita mo kung ano ang hitsura ng code bago ko simulan ang pagpapatakbo nito. Kaya, narito ang eksaktong parehong code na nasa snapshot ng screen, ito ang aking tseke para sa mga duplicate. At nais kong i-debug ito, kaya pinindot ko ang debug. At ngayon, tumatagal ng ilang sandali at sasabihin mo, "Well, bakit tumatagal ng ilang sandali?" Alalahanin ang malayong pag-debug: ang debugging ay talagang nangyayari sa aking server ng database, hindi sa aking PC. Kaya, kailangan itong tumawid at lumikha ng isang session doon, lumikha ng isang malayuang bagay na pag-debug, ikabit ang aking session sa liblib na sesyon ng pag-debug at mag-set up ng isang channel ng komunikasyon.

Kaya, ngayon, narito ang aking arrow, nasa itaas ito, sa pamamagitan ng linya ng isa, na kung saan ako nasa code. At kung pipindotin ko ang pangatlong icon doon, na kung saan ay isang hakbang, makikita mo na lumipat ang arrow, at kung patuloy kong pipilitin, makikita mo itong patuloy na gumagalaw. Ngayon, kung nais kong pumunta sa lahat ng ito upang PUMUNTA, dahil alam ko na kung saan ang problema, maaari akong magtakda ng isang takbo. Akala ko itinakda ko iyon. Oh shoot, nagkaroon ako ng isa sa aking mga susi sa pagkuha ng screen na naka-mapa sa parehong key tulad ng debugger, iyon ang sanhi ng pagkalito. OK, kaya mano-mano lamang akong nagtakda ng isang breakpoint doon, kaya ngayon sa halip na gumawa ng isang hakbang, hakbang, hakbang, hakbang hanggang sa makarating ako, talagang masasabi ko lang, "Sige at patakbuhin ang bagay na ito, " at titigil ito. Pansinin itong inilipat ako sa lahat ng dako hanggang sa kung saan ang break point, kaya't ako ay nasa konteksto ng pagpapatakbo ng loop na ito, nakikita ko kung ano ang itinakda ng lahat ng aking mga variable, na hindi isang sorpresa, 'dahil sinimulan ko silang lahat sa zero. At ngayon, makakapasok ako sa loop na ito at magsimulang tingnan kung ano ang nangyayari sa loob ng loop na ito.

Kaya, ngayon ay gagawa ng isang piling bilang mula sa aking mga upa at maaari kong mag-mouse sa ibabaw ng taong iyon at tingnan, siya ay dalawa, dalawa ang mas malaki kaysa sa isa, kaya marahil ay gagawin nito ang susunod na piraso ng code na ito. Sa madaling salita, may nakita itong isang bagay. Mauuna na lang ako at hayaan mo na itong tumakbo. Hindi ko nais na dumaan sa lahat ng bagay dito; ang nais kong ipakita sa iyo ay kapag tapos na ang isang debugger, natatapos ito tulad ng isang normal na programa. Nakuha ko na ang set ng breakpoint, kaya noong sinabi kong tumakbo, bumalik na lang ito sa susunod na breakpoint. Pinahihintulutan ko itong tumakbo hanggang sa wakas, 'sanhi kung ano ang nais kong makita mo na ang isang debugger ay hindi nagbabago sa pag-uugali ng programa: kapag tapos na itong tumakbo, dapat kong makuha ang eksaktong parehong mga resulta kung hindi ko ito pinatakbo sa loob ng isang debugger.

At kasama nito, isuspinde ko ang demo at bumalik 'dahilan na nais nating tiyakin na mayroon tayong oras para sa mga katanungan at sagot. At sa gayon, bubuksan ko ito para sa mga katanungan at sagot.

Eric Kavanagh: Sige, Robin, marahil isang tanong mula sa iyo at pagkatapos ay mula sa Dez?

Robin Bloor: Oo, sigurado, nahanap ko ang kaakit-akit na ito, siyempre. Nagtrabaho ako sa mga bagay na tulad nito, ngunit hindi ko kailanman nagtrabaho sa anumang bagay na katulad nito sa database. Maaari mo bang bigyan ako ng ilang ideya kung ano ang ginagamit ng mga tao sa profiler? Dahil ito ay, tinitingnan ba nila - 'dahilan kung bakit ipinapalagay ko ang mga ito - tinitingnan nila ang mga isyu sa pagganap, makakatulong ba ito na makilala ka sa pagitan ng oras na ang isang database ay tumatagal ng oras at kapag ang isang code ay tumatagal ng oras?

Bert Scalzo: Alam mo, iyon ang kamangha-manghang tanong. Sabihin nating nagtatrabaho ako sa Visual Basic, at ako, sa loob ng aking Visual Basic tatawag ako ng isang Transact-SQL o isang PL / SQL. Hayaan akong gawin ang PL / SQL, dahil ang Oracle ay hindi mahusay na naglalaro ng maayos sa mga tool ng Microsoft. Maaaring isama ko ang aking Visual Basic code, at maaaring sabihin ng profile na, "Uy, tinawag ko ang naka-imbak na pamamaraan na ito at matagal na." Ngunit pagkatapos ay makakapunta ako sa naka-imbak na pamamaraan at magagawa ko ang isang profile ng database sa naka-imbak pamamaraan at sabihin, "OK, sa 100 na mga pahayag na narito, narito ang lima na sanhi ng problema." At kaya, kailangan mong gumawa ng isang tag ng koponan, kung saan kailangan mong gumamit ng maraming mga profile.

Ang ideya ay kung sakaling masabihan mo ang problema sa pagganap ay nasa iyong database, ang isang profile sa database ay maaaring makatulong sa iyo na makahanap ng karayom ​​sa haystack kung saan ang mga pahayag ay talagang ang kung saan mayroon kang isang problema. Sasabihin ko sa iyo ang isa pang bagay na naka-profile sa: kung mayroon kang isang piraso ng code na tatawag ng isang milyong beses, ngunit tumatagal lamang ito ng isang microsecond bawat isa sa milyong beses, ngunit tinawag itong isang milyong beses, kung ano ang ipapakita ng profiler, ang bagay na iyon ay tumakbo para sa maraming mga yunit ng oras. At sa gayon habang ang code ay maaaring maging mahusay, maaari mong tingnan at sabihin, "Ooh, madalas naming ginagawa ang tawag na ito sa bahaging ito ng paraan ng code. Marahil ay dapat nating tawagan ito tuwing madalas, sa halip na sa bawat oras na pinoproseso namin ang isang talaan, ”o isang bagay. At sa gayon maaari mong aktwal na mahanap kung saan may mahusay na code na tinawag na madalas, at iyon talaga ang isang problema sa pagganap.

Robin Bloor: Oo, kamangha-manghang iyon. Hindi ko pa ito nagawa. Nakikita mo, siyempre, kapag mayroon akong mga problema sa database na tulad ko ay sa isang paraan o sa alinman sa alinman sa pakikitungo sa database o pakikitungo sa code; Hindi ako kailanman makitungo sa kanilang dalawa sa parehong oras. Ngunit doon, muli, hindi ako gumawa ng isang - Hindi ko talaga nasangkot sa pagbuo ng mga aplikasyon kung saan naka-imbak kami ng mga pamamaraan, kaya sa palagay ko ay hindi talaga ako tumatakbo sa mga problema na ginamit upang himukin ako ng ligaw, ang ideya na ikaw i-split ang code sa pagitan ng isang database at isang programa. Ngunit gayon, gawin mo ang lahat - Inaasahan kong magiging oo, ngunit ito ay bahagi ng isang aktibidad ng pag-unlad ng koponan, kapag nasa isang paraan o ibang sinusubukan mong ayusin ang isang bagay na nasira, o baka sinusubukan mong magdala ng bago magkasama. Ngunit naaayon ba ito sa lahat ng iba pang mga sangkap na nais kong asahan sa kapaligiran? Maaari ba akong asahan na maaari kong i-clip ito kasama ang lahat ng aking mga pack pack at lahat ng iba pang mga bagay na gagawin ko at kasama ang aking mga bagay sa pamamahala ng proyekto, ito ba ay kung paano ang lahat ng mga clip na ito magkasama?

Bert Scalzo: Oo, maaari itong maging bahagi ng anumang nakabalangkas na proseso upang gawin ang iyong mga pagsisikap sa pag-unlad o pag-unlad. At nakakatawa, noong nakaraang linggo ay mayroon akong isang customer na nagtatayo ng isang web application, at ang kanilang database ay maliit, kasaysayan, at sa gayon ang katotohanan na hindi sila napakahusay na programmer ay hindi saktan sila. Buweno, ang kanilang database ay lumago sa mga nakaraang taon, at ngayon ay tumatagal ng 20 segundo sa isang web page, sa pagitan ng sinabi mo, "Mag-log in ako at bigyan ako ng ilang data upang makita" at kapag ang screen ay talagang bumangon, at kaya ngayon isang problema sa pagganap. At alam nila na ang problema ay wala sa alinman sa kanilang Java o alinman sa iba pang mga lugar. Ngunit mayroon silang libu-libong mga naka-imbak na pamamaraan at sa gayon ay dapat nilang simulan ang pag-profile ng mga naka-imbak na pamamaraan upang malaman kung bakit ang web page na ito ay tumatagal ng 20 segundo na darating? At natagpuan talaga namin na sila ay sumali sa Cartesian sa isa sa kanilang mga piling pahayag at hindi alam ito.

Robin Bloor: Wow.

Bert Scalzo: Ngunit isang tao ang nagsabi sa akin ng isang beses, "Well paano sila makakasali sa isang Cartesian at hindi alam ito?" At maririnig talaga ito; kung minsan ang isang programista na hindi masyadong komportable sa SQL ay gagawa ng isang bagay tulad ng bigyan ako ng isang Cartesian na sumali, ngunit pagkatapos ay ibalik lamang sa akin ang unang tala, kaya alam kong nakakakuha ako ng isang bagay, at kailangan ko lamang ang una. At sa gayon, hindi nila napagtanto na ibabalik lamang nila ang isang bilyong talaan o tinitingnan nila ang isang bilyong talaan, dahil nakuha nila ang isa na interesado sila.

Robin Bloor: Wow, alam ko, iyan ang tinatawag na - mabuti, iyon ang nangyayari kay Dez, sa mga tuntunin ng mga tao na hindi eksaktong kasanayan na marahil dapat, alam mo. Kung ikaw ay isang programmer, dapat mong malaman kung ano ang mga implikasyon ng paglabas ng anumang utos. Ibig kong sabihin, talaga, walang dahilan sa antas ng katangahan. Ipinapalagay ko rin na ikaw, sa isang paraan o sa iba pa, wika ng agnostiko tungkol sa mga ito, dahil lahat ito ay nakatuon sa gilid ng database. Tama ba ako diyan? Pareho lang ito, anuman ang ginagamit mo sa coding side?

Bert Scalzo: Ganap, magagawa mo ito sa Fortran o C o C ++. Sa katunayan, sa ilang mga Unixes maaari mo ring gawin ito para sa kanilang mga wika ng script; talagang nagbibigay sila ng parehong mga tool. At pagkatapos ay nais kong bumalik ng isang segundo para sa iyong sinabi nang walang dahilan. Bibigyan ko ng isang break ang mga programmer, 'hindi ko gusto ang pagkahagis ng mga programmer sa ilalim ng bus. Ngunit ang problema ay ang pang-akademikong kapaligiran dahil kapag pupunta ka upang malaman kung paano maging isang programmer, tinuruan ka ng pag-iisip ng record-at-a-time. Hindi ka tinuruan na itinakda ang pag-iisip, at iyon ang kung ano ang Structured Query Language, o gumagana ang SQL; na ang dahilan kung bakit mayroon tayong unyon, intersect at ang minus operator. At napakahirap minsan para sa isang tao na hindi kailanman naisip sa mga tuntunin ng mga set, na huminto, pakawalan ang pag-proseso ng tala sa oras at pagtrabaho sa mga set.

Robin Bloor: Oo, kasama kita sa iyon. Ibig kong sabihin, nakukuha ko ngayon, iyon ay isang isyu sa edukasyon; Sa palagay ko ito ay ganap na isang isyu sa edukasyon, sa palagay ko ay natural para sa mga programmer na mag-isip nang maayos. At ang SQL ay hindi pamamaraan, ito ay pagpapahayag. Sinasabi mo lang talaga, "Ito ang gusto ko at hindi ako nagmamalasakit kung paano mo ito ginagawa, " alam mo? Sapagkat may mga wika sa pagprograma na madalas mong nakulong ang iyong mga manggas at bumaba ka sa minutiae kahit na pinamamahalaan ang mga bilang, habang gumagawa ka ng isang loop. Ihahatid ko sa-

Bert Scalzo: Hindi . OK, magpatuloy.

Oo, sasabihin ko na nagdala ka ng isa pang halimbawa na ang isang profiler ay magiging mahusay na nakahuli sa, uri ng pagpunta sa pagproseso ng record-at-a-time na ito. Minsan, ang isang programmer na magaling sa isang tala-sa-isang-oras na lohika, ay hindi maaaring malaman kung paano gawin ang SQL program. Kaya, sabihin nating gumawa siya ng dalawang PARA sa mga loop at talaga ay sumali, ngunit ginagawa niya ito sa panig ng kliyente. Kaya, ginagawa niya ang parehong epekto bilang isang pagsali, ngunit ginagawa niya ito sa kanyang sarili, at mahuhuli ito ng isang profile, dahil marahil ay gugugulin mo ang mas maraming oras sa paggawa ng manu-manong kumpara kaysa ipaalam sa database server na gawin ito para sa iyo.

Robin Bloor: Oo, magiging kapahamakan iyon. Ibig kong sabihin, sasabog ka lang. Palagi nalang masama.

Pa rin, ipapasa ko kay Dez; Sigurado akong nakakuha siya ng ilang mga kagiliw-giliw na katanungan.

Dez Blanchfield: Salamat, oo, gagawin ko. Sasamahan kita sa hindi pagtapon ng mga programmer sa ilalim ng bus. Ibig kong sabihin, maraming taon na akong ginugol sa buhay ko na maging isang coder sa aking sarili, sa bawat antas, alam mo, alinman sa sinabi mo, nakaupo sa command line ng Unix machine, at sa ilang mga kaso, nasangkot din ako sa isang pares ng iba't ibang mga port ng Unix mula sa isang platform ng hardware papunta sa isa pa. At maiisip mo ang mga hamon na mayroon kami doon. Ngunit ang katotohanan ay narito ang kumuha-out-of-jail card para sa bawat coder at scripter sa mundo. Ito ay isang agham na rocket, na literal, upang magsulat ng talagang masikip sa bawat oras, sa lahat ng oras, ay isang agham na rocket. At ang mga kilalang kwento ng mga taong tulad nina Dennis Ritchie at Brian Kernahan na nagtatrabaho sa ilang piraso ng code nang nakapag-iisa at pagkatapos ay bumaling sa isang pagsusuri sa code ng chat sa isang kape at nalaman na naisulat nila nang eksakto ang parehong piraso ng code, sa eksaktong parehong programa, sa eksaktong paraan. At ginawa nila ito sa C. Ngunit ang purist na antas ng programming ay umiiral nang bihirang.

Ang katotohanan ay sa isang pang-araw-araw na batayan, mayroon lamang 24 na oras sa isang araw, pitong araw sa isang linggo, at kailangan na nating gawin. At kung gayon, pagdating sa hindi lamang tradisyunal na programmer, ang mga DBA, at mga coder, at mga script, at sysadmin, at mga admin ng network, at kawani ng seguridad, at lahat ng paraan hanggang sa data ng mamamayan sa mga araw na ito; naririnig namin, lahat ay sinusubukan lamang gawin ang kanilang trabaho. At sa palagay ko ang mahusay na pag-alis mula sa buong bagay na ito ay mahal ko ang iyong demo at mahal ko ang takeaway na iniwan mo kami doon, sandali lang, nakikipag-usap kay Robin tungkol sa katotohanan na mayroon itong isang partikular - marahil hindi masyadong isang angkop na lugar - ngunit isang malawak na puwang na nalalapat sa, tulad ng pag-aayos ng code at SQL at mga database. Ngunit nasasabik talaga ako nang marinig mong sabihin na maaari mong sundin ito sa isang script ng shell at makahanap ng ilang mga isyu, dahil alam mo, sa ngayon at edad na lagi kaming nagtatrabaho sa pinakamababang gastos sa lahat.

Ang dahilan na maaari kang bumili ng isang $ 6 na shirt sa isang lugar, ay dahil ang isang tao na nagtayo ng isang sistema ng murang sapat upang aktwal na gumawa at magpadala at mag logistically naghahatid at magbenta at tingi at kumuha ng online na pagbabayad upang makuha ang $ 6 na shirt. At hindi iyon mangyayari kung mayroon kang mga taong binayaran ng $ 400, 000 sa isang taon upang magsulat ng code sa perpektong paraan; buong development lang ito. Kaya, sa puntong iyon, hulaan ko ang isa sa mga tanong na talagang mahal kita na bigyan lang kami ng higit pang pananaw, ay kung ano ang lawak at pag-abot ng uri ng mga taong nakikita mo sa kasalukuyan na nagtataglay ng mga ganitong uri ng tool upang ma-profile isang code at hanapin ang mga isyu sa pagganap? Sa una, sa kasaysayan, saan sila nanggaling? Sila ba ang naging malaking bahay ng engineering? At pagkatapos, pasulong, ito ba ang kaso, tama ba ako sa pag-iisip na mas maraming mga kumpanya ang nagpapatupad ng tool na ito, o mga tool na ito, upang subukan at tulungan ang mga coder, na alam nila kung sino ang nagsisimula pa lamang gawin ang mga bagay upang matapos ang trabaho at mailabas ito sa pintuan? At kung minsan kailangan ba natin ng get-out-of-jail card? Tama ba ako sa pag-iisip na ang kasaysayan ay mayroon kaming isang mas pokus at pag-unlad sa engineering? Na ngayon, nakakakuha tayo ng mas kaunti, tulad ng sinabi ni Robin, diskarte sa akademiko, at ngayon itinuro sa sarili, o cut-and-paste code, o mabuo lamang ang mga bagay? At tumutugma ba ito sa uri ng mga taong kumukuha ng produkto ngayon?

Bert Scalzo: Oo, eksakto. At bibigyan kita ng isang napaka tukoy na halimbawa, nais naming gawin ang trabaho, 'sanhi ng mga negosyante na hindi nais ang pagiging perpekto. Ito ay uri ng tulad ng isang computerized na laro ng chess: ang laro ng chess ay hindi naghahanap para sa perpektong sagot; naghahanap ito ng isang sagot na sapat na sapat sa isang makatwirang halaga ng oras, kaya ganyan ang programa namin. Ngunit ang nahanap ko ngayon ay, ang karamihan sa mga tao sa halip na sabihin na nais nila ang isang profiler bilang bahagi ng kanilang pagsubok sa yunit - na kung paano ko ito gagawin, 'dahil hindi ko ito nakikita bilang isang pag-aaksaya ng panahon - kung ano ang nangyayari ay ngayon na tapos na, kung minsan, sa panahon ng pagsasama sa pagsubok o pagsubok sa stress, kung swerte tayo. Ngunit sa karamihan ng mga oras na ito ay bahagi ng isang pagdaragdag, kung saan nawala ang isang bagay, tumakbo ito ng ilang sandali, marahil kahit na tumakbo nang maraming taon, at ngayon hindi ito tumakbo nang maayos, at ngayon ay i-profile namin ito. At iyon ay tila ang mas karaniwang senaryo ngayon.

Dez Blanchfield: Oo, at sa palagay ko ang salitang "teknikal na utang" ay marahil isa ka kaysa sa pamilyar ka; Alam kong si Robin at tiyak na ako. Sa palagay ko mga araw na ito, lalo na sa mga maliksi na pamamaraan sa pagbuo at pagbuo ng system, sa akin, ang konsepto ng mga teknikal na utang ngayon ay isang tunay na bagay, at aktwal nating ginagampanan ito sa mga proyekto. Alam ko, ang ibig kong sabihin, nakakuha kami ng aming sariling mga proyekto tulad ng Mga Lens ng Media at iba pa, kung saan nakakuha kami ng coding na nangyayari sa isang pang-araw-araw na batayan, at iba't ibang mga bagay sa buong Bloor Group. At sa tuwing nagtatayo kami ng isang bagay, uri kami ng pagtingin, tinitingnan ko ito, at palaging tinitingnan mula sa punto ng pananaw kung ano ang gugugol sa akin upang ayusin ito ngayon, kumpara maaari ko bang makuha ito sa maaari at makalabas doon, at pagkatapos ay panoorin at tingnan kung masisira ang bagay na ito. At magmana sa teknikal na utang na alam kong kakailanganin kong bilugan mamaya at ayusin.

At ang ibig kong sabihin, nagawa ko iyon sa huling pitong araw: Sumulat ako ng ilang mga tool at script, nakasulat ako ng ilang piraso ng wika ng Python, at inilagay ko ito sa dulo ng Mongo, na ginagawa sigurado maganda ito at malinis at ligtas, ngunit nakakakuha lamang ito ng query na kailangan kong gawin, alam na kailangan ko ang pagpapaandar na iyon upang magtrabaho, upang makarating sa mas malaking palaisipan; nandiyan na ang totoong sakit ko. At sa gayon ikaw ay nagkakaroon ng teknikal na utang na ito, at sa palagay ko ito ay hindi lamang isang paminsan-minsang bagay, sa palagay ko ito ay bahagi ng DNA ng pagbuo ngayon. Ang mga tao lang - hindi disingenuously - tinatanggap lamang nila ang mga teknikal na utang ay isang normal na uri ng isyu ng modus operandi, at kailangan lamang nila itong mabigyan. Narito kung saan nagkakaroon ka ng teknikal na utang. At sa palagay ko ang mahusay na bagay tungkol sa kung ano ang ipinakita mo sa amin sa demo ay maaari mong literal na mag-profile at panoorin kung gaano katagal ang isang bagay na tumatakbo. At marahil iyon ang isa sa aking mga paboritong bagay. Ibig kong sabihin, nagtayo ako ng mga tool sa profile - dati kaming nagtatayo ng mga tool sa Sed at Lex at Orc upang patakbuhin ang aming code at makita kung nasaan ang mga loop, bago magagamit ang mga tool - at kapag nakabuo ka ng code upang pumunta at suriin ang iyong sariling code, makakakuha ka ng napakabuti sa hindi kinakailangang suriin ang iyong sariling code. Ngunit hindi iyon ang kaso ngayon. Sa pag-iisip, mayroon bang isang partikular na segment ng merkado na tumatagal ng higit pa kaysa sa iba pa? Nakakakita ng isang misa-

Bert Scalzo: Oh oo, nakuha ko na - Gumuhit ako ng isang pagkakatulad para sa iyo, at ipakita sa iyo na ang mga hindi programmer ay ginagawa ito sa lahat ng oras. 'Sanhi kung nagtuturo ako ng isang debugger at klase ng profile o session, tatanungin ko ang mga tao, "OK, gaano karaming mga tao ang pumapasok sa Microsoft Word at hindi sinasadyang hindi gumagamit ng spell checker?" At walang sinumang naglalagay ng kanilang kamay, dahil sa pagsulat ng mga dokumento, alam nating lahat na maaari tayong magkamali ng mga pagkakamali sa Ingles, at sa gayon ginagamit ng lahat ang spell checker. At sinabi ko, "Well, paano darating kapag nagsusulat ka ng teksto sa iyong IDE tulad ng Visual Basic, hindi ka gumagamit ng debugger? Ito ay ang parehong bagay, ito ay tulad ng isang spell checker. "

Dez Blanchfield: Oo, talaga, isang mahusay na pagkakatulad. Hindi ko talaga inisip, kailangan kong aminin na talagang gumagawa ako ng isang katulad na isang pares ng mga tool na ginagamit ko. Sa katunayan, ang isa, ODF, ang paborito ko kasama ang Eclipse ay pinutol lamang at i-paste ang code doon at pumunta ng paghahanap ng mga bagay na ipinapakita lamang kaagad at napagtanto na gumawa ako ng isang typo sa ilang tawag sa klase. At, ngunit ito ay kagiliw-giliw na ngayon sa tool na tulad nito maaari mong gawin ito sa totoong oras kumpara sa pagbabalik at tiningnan ito sa ibang pagkakataon, na uri ng masarap na mahuli ito. Ngunit oo, iyon ay isang mahusay na pagkakatulad ng paglalagay ng teksto sa isang processor ng salita, 'sanhi ito ay isang kagiliw-giliw na tawag sa pagising na iyon, mapagtanto lamang na nakagawa ka ng ilang mga typo o kahit na isang error sa grammar, di ba?

Bert Scalzo: Eksakto.

Dez Blanchfield: Kaya, nakakakita ka ba ng isang pag-aalsa mula sa palagay ko, ang ibig kong sabihin, ang pangwakas na tanong mula sa akin, bago ko itapon sa aming Q&A marahil, para sa aming mga dadalo. Kung bibigyan ka ng ilang uri ng rekomendasyon sa paligid ng diskarte na gawin ito - Inaasahan kong ito ay retorika - ito ba ang kaso na maaga kang maipapatupad habang ikaw ay bubuo, bago ka pa umuunlad? O ito ay ang kaso na nakararami kang nakakakuha ng gusali, gumagalaw, magtayo ng isang bagay pagkatapos ay pasok at profile ito sa ibang pagkakataon? Akala ko ito ang kaso ng maaga at tiyakin na ang malinis na paitaas ng iyong code. O ito ba ay isang kaso na dapat nilang isaalang-alang ang bahaging ito ng kanilang post-deploy?

Bert Scalzo: Sa isip, gagawin nila ito nang paitaas, ngunit dahil lahat ng tao ay nasa pagmamadali, nagmamadali na mundo kung saan nagawa nilang gawin ito, malamang na hindi nila ito gagawin hanggang sa tumakbo sila sa isang problema sa pagganap na hindi nila malulutas ng pagdaragdag ng higit pang mga CPU at memorya sa isang virtual machine.

Dez Blanchfield: Oo. Kaya, talagang nabanggit mo ang isang bagay na kawili-wili, kung kaya kong mabilis? Nabanggit mo bago na maaari itong patakbuhin mula sa kahit saan, at maaaring makipag-usap sa database sa likuran. Kaya komportable ito sa uri ng konsepto ng bimodal na pinag-uusapan natin ngayon, ng on-premise / off-premise cloud, sa pamamagitan ng mga hitsura ng mga bagay pati na rin, sa pagtatapos ng araw, kung maaari itong makipag-usap sa likurang dulo at makita ang code, hindi ito nagmamalasakit, ito ba?

Bert Scalzo: Eksakto, oo, maaari mo itong patakbuhin sa ulap.

Dez Blanchfield: Magaling, 'dahil sa palagay ko ay uri iyon kung saan pupunta ang aming bagong matapang na mundo. Kaya, Eric. Ibabalik ko sa iyo ngayon at makita na mayroon kaming ilang mga katanungan dito at nais kong manatili pa rin ang aming mga dadalo, kahit na lumipas ang oras.

Eric Kavanagh: Oo, mayroong ilang mga tao sa labas, gagawa lang ako ng isang mabilis na komento: Bert, sa palagay ko na ang talinghaga, ang pagkakatulad na ibinigay mo sa paggamit ng spell check ay lantaran na napakatalino. Iyon ay karapat-dapat sa isang blog o dalawa, na lantaran, dahil ito ay isang mahusay na paraan upang i-frame ang konteksto ng kung ano ang ginagawa mo, at kung gaano kahalaga ito, at kung paano ito dapat maging isang pinakamahusay na kasanayan upang gumamit ng isang debugger sa regular na batayan, di ba? Pusta ko na nakakakuha ka ng ilang mga ulo ng pagtango kapag itinapon mo ang isang iyon, di ba?

Bert Scalzo: Ganap na, 'ang dahilan kung ano ang sinabi ko sa kanila ay, "Bakit ako nagpapatakbo ng spell check sa aking mga dokumento? Ayaw kong mapahiya sa mga hangal na pagkakamali sa pagbaybay. ”Well, ayaw nilang mapahiya sa mga hangal na pagkakamali sa pag-cod!

Eric Kavanagh: Tama. Oo, naman. Buweno, mga tao, sinunog namin ang isang oras at limang minuto dito, napakaraming salamat sa inyong lahat doon sa iyong oras at atensyon. Ginagawa namin ang pag-archive ng lahat ng mga web chat na ito, huwag mag-atubiling bumalik sa anumang oras at suriin ang mga ito. Pinakamahusay na lugar upang mahanap ang mga link na ito ay marahil sa techopedia.com, kaya idagdag namin ito sa listahang ito.

At kasama iyon, kami ay mag-bid sa iyo ng paalam, mga tao. Muli, mahusay na trabaho, Bert, salamat sa aming mga kaibigan mula sa IDERA. Makikipag-usap kami sa iyo sa susunod, makikipag-usap kami sa iyo sa susunod na linggo, sa katunayan. Ingat! Paalam.

Mabilis na tugon: pag-debug ng database at pag-profile sa pagsagip