Kasalahan anu paling ngerakeun dina karir programming kuring (sajauh ieu)

Kasalahan anu paling ngerakeun dina karir programming kuring (sajauh ieu)
Sakumaha aranjeunna nyarios, upami anjeun henteu isin kodeu lami anjeun, maka anjeun henteu tumbuh salaku programmer - sareng kuring satuju sareng pendapat ieu. Kuring ngamimitian programming for senang leuwih 40 sababaraha taun ka pengker, sarta professionally 30 sababaraha taun ka pengker, jadi kuring boga loba kasalahan. seueur. Salaku profésor élmu komputer, kuring ngajar murid-murid kuring diajar tina kasalahan-salahna, kuring, sareng anu sanésna. Panginten waktosna kanggo nyarioskeun kasalahan kuring supados henteu kaleungitan kasederhanaan kuring. Kuring miharep maranéhna bakal mangpaat ka batur.

Tempat katilu - kompiler Microsoft C

Guru sakola kuring percaya yén Romeo jeung Juliet teu bisa dianggap tragedi sabab karakter teu boga kasalahan tragis - aranjeunna ngan behaved stupidly, sakumaha rumaja kedah. Kuring teu satuju sareng anjeunna lajeng, tapi ayeuna kuring ningali hiji sisikian rationality dina pamadegan na, utamana dina sambungan kalawan programming.

Nalika kuring réngsé taun sophomore kuring di MIT, kuring ngora sareng teu ngalaman, boh dina kahirupan sareng program. Dina usum panas, abdi interned di Microsoft, dina tim kompiler C. Mimitina mah ngalakukeun hal rutin kawas rojongan profil, lajeng abdi ieu dipercayakeun ku gawé dina bagian paling fun compiler nu (sakumaha Teu sangka) - backend optimization . Khususna, kuring kedah ningkatkeun kode x86 pikeun pernyataan cabang.

Ditangtukeun nulis kode mesin optimal pikeun unggal hal mungkin, Kuring threw sorangan kana headlong kolam renang. Upami dénsitas distribusi nilaina luhur, kuring ngalebetkeunana méja transisi. Upami aranjeunna gaduh divisor umum, kuring dianggo pikeun ngajantenkeun méja langkung ketat (tapi ngan upami ngabagi tiasa dilakukeun nganggo bit shift). Nalika sadaya nilai éta kakuatan dua, kuring ngalakukeun optimasi anu sanés. Upami sakumpulan nilai henteu nyugemakeun kaayaan kuring, kuring ngabagi kana sababaraha kasus anu tiasa dioptimalkeun sareng nganggo kode anu parantos dioptimalkeun.

Ieu ngimpina a. Mangtaun-taun ti harita kuring dibéjakeun yén programer anu diwariskeun kodeu kuring hated ka kuring.

Kasalahan anu paling ngerakeun dina karir programming kuring (sajauh ieu)

Pangajaran diajar

Nalika David Patterson sareng John Hennessy nyerat dina Arsitéktur Komputer sareng Desain Sistem Komputer, salah sahiji prinsip utama arsitéktur sareng desain nyaéta sacara umum ngajantenkeun hal-hal gancang-gancang.

Ngagancangkeun kasus umum bakal ningkatkeun kinerja langkung efektif tibatan ngaoptimalkeun kasus anu jarang. Ironisna, kasus umum sering langkung saderhana tibatan anu jarang. Naséhat logis ieu nganggap yén anjeun terang kasus mana anu dianggap umum - sareng ieu ngan ukur tiasa dilakukeun ngaliwatan prosés uji sareng pangukuran anu ati-ati.

Dina pertahanan abdi, abdi nyobian angka kaluar naon pernyataan cabang kasampak kawas dina prakna (kayaning sabaraha cabang aya na kumaha konstanta disebarkeun), tapi dina 1988 informasi ieu teu sadia. Nanging, kuring henteu kedah nambihan kasus khusus nalika kompiler ayeuna henteu tiasa ngahasilkeun kode anu optimal pikeun conto buatan anu kuring datang.

Kuring kedah nyauran pamekar anu berpengalaman sareng, sareng anjeunna, pikirkeun naon kasus anu umum sareng nganyahokeunana sacara khusus. Kuring bakal nulis kode kirang, tapi éta hiji hal anu alus. Salaku pangadeg Stack Overflow Jeff Atwood wrote, musuh awon programmer nyaéta programmer sorangan:

Kuring terang anjeun gaduh niat anu pangsaéna, sapertos urang sadayana. Urang nyieun program jeung cinta nulis kode. Éta kumaha urang dijieun. Kami nyangka yén masalah naon waé tiasa direngsekeun ku pita saluran, kruk homemade sareng ciwit kode. Sakumaha nyeri coders ngaku éta, kode anu pangsaéna nyaéta kode anu henteu aya. Unggal garis anyar peryogi debugging sareng dukungan, éta kedah kahartos. Lamun anjeun tambahkeun kode anyar, Anjeun kedah ngalakukeun kitu kalawan horéam jeung geuleuh sabab sagala pilihan séjén geus exhausted. Seueur programer nyerat seueur teuing kode, ngajantenkeun éta musuh urang.

Upami kuring nyerat kode anu langkung saderhana anu nutupan kasus umum, éta bakal langkung gampang pikeun ngapdet upami diperyogikeun. Kuring ninggalkeun tukangeun mess nu taya sahijieun hayang nungkulan.

Kasalahan anu paling ngerakeun dina karir programming kuring (sajauh ieu)

Tempat kadua: iklan dina jaringan sosial

Nalika kuring damel di Google dina iklan média sosial (émut Myspace?), Kuring nyerat sapertos kieu dina C ++:

for (int i = 0; i < user->interests->length(); i++) {
  for (int j = 0; j < user->interests(i)->keywords.length(); j++) {
      keywords->add(user->interests(i)->keywords(i)) {
  }
}

Programer bisa langsung ningali kasalahan: argumen panungtungan kudu j, moal i. Uji coba unit henteu ngungkabkeun kasalahan, sareng ogé pamariksaan kuring. Peluncuran dilaksanakeun, sareng hiji wengi kode kuring angkat ka server sareng nabrak sadaya komputer di pusat data.

Euweuh kajadian goréng. Henteu aya anu rusak pikeun saha waé, sabab sateuacan peluncuran global kodeu diuji dina hiji pusat data. Iwal insinyur SRE dieureunkeun maén biliar bari jeung ngalakukeun hiji rollback saeutik. Isuk-isuk kuring nampi email sareng dump kacilakaan, ngabenerkeun kode sareng nambihan tés unit anu bakal nangkep kasalahan. Kusabab kuring nuturkeun protokol - disebutkeun kode kuring ngan saukur bakal gagal ngajalankeun - euweuh masalah séjén.

Kasalahan anu paling ngerakeun dina karir programming kuring (sajauh ieu)

Pangajaran diajar

Seueur anu yakin yén kasalahan utama sapertos kitu pasti bakal ngarugikeun PHK palaku, tapi henteu kitu: kahiji, sadaya programer ngalakukeun kasalahan, sareng kadua, aranjeunna jarang ngalakukeun kasalahan anu sami dua kali.

Kanyataanna, kuring boga sobat programmer anu éta insinyur cemerlang sarta dipecat pikeun nyieun kasalahan tunggal. Sanggeus éta, anjeunna hired di Google (jeung geura-giru diwanohkeun) - anjeunna jujur ​​spoke ngeunaan kasalahan manehna nyieun dina wawancara, sarta eta teu dianggap fatal.

Éta naon ngabejaan ngeunaan Thomas Watson, kapala legendaris IBM:

Pesenan pamaréntahan bernilai sakitar sajuta dolar diumumkeun. IBM Corporation - atawa rada, Thomas Watson Sr.. pribadi - bener hayang meunang eta. Hanjakal, wawakil jualan éta teu bisa ngalakukeun ieu sarta IBM leungit nawar teh. Isukna, pagawe ieu asup ka kantor Pak Watson jeung neundeun amplop dina mejana. Pak Watson teu kendat-kendat neuteup-neuteupna - ngadagoan pagawe tur terang yen eta surat pengunduran diri.

Watson naroskeun naon anu salah.

Perwakilan penjualan nyarios sacara rinci ngeunaan kamajuan tender. Anjeunna namina kasalahan anu dilakukeun anu tiasa dihindari. Tungtungna, anjeunna nyarios, "Pak Watson, hatur nuhun parantos ngantepkeun kuring ngajelaskeun. Kuring nyaho sabaraha urang diperlukeun urutan ieu. Kuring terang kumaha pentingna anjeunna, ”sareng siap-siap angkat.

Watson ngadeukeutan anjeunna di panto, neuteup anjeunna dina panon sareng ngabalikeun amplop kalayan kecap-kecap: "Kumaha carana kuring ngantepkeun anjeun? Kuring ngan investasi sajuta dolar dina pendidikan anjeun.

Abdi gaduh kaos oblong anu nyarios: "Upami anjeun leres-leres diajar tina kasalahan, maka kuring parantos master." Kanyataanna, lamun datang ka kasalahan, abdi dokter elmu.

Tempat munggaran: App Inventor API

Kasalahan anu parah pisan mangaruhan sajumlah ageung pangguna, janten kanyaho umum, peryogi waktos anu lami pikeun ngabenerkeun, sareng dilakukeun ku anu henteu tiasa ngadamelana. Kasalahan pangbadagna kuring pas sadayana kriteria ieu.

Nu goréng beuki hadé

Abdi maca karangan Richard Gabriel ngeunaan pendekatan ieu dina nineties salaku mahasiswa pascasarjana, sarta kuring resep eta jadi loba nu kuring nanya ka murid kuring. Upami anjeun henteu émut ogé, refresh memori anjeun, éta leutik. Karangan ieu kontras kahayang pikeun "ngabenerkeun" sareng pendekatan "parah langkung saé" ku sababaraha cara, kalebet kesederhanaan.

Kumaha kedahna: desain kedah saderhana dina palaksanaan sareng antarmuka. Kesederhanaan antarmuka langkung penting tibatan kesederhanaan palaksanaan.

Anu parah, langkung saé: desain kedah saderhana dina palaksanaan sareng antarmuka. Kesederhanaan palaksanaan langkung penting tibatan kesederhanaan antarmuka.

Hayu urang poho ngeunaan éta pikeun menit. Hanjakal, kuring poho ngeunaan eta salila sababaraha taun.

Panemu App

Nalika damel di Google, kuring mangrupikeun bagian tina tim Panemu App, lingkungan ngembangkeun online sered-sareng-serelek pikeun aspiring pamekar Android. Ieu 2009, sarta kami buru-buru ngaleupaskeun versi alfa dina jangka waktu nu ku kituna dina usum panas urang bisa ngayakeun kelas master pikeun guru anu bisa ngagunakeun lingkungan nalika ngajar di gugur. Kuring volunteered pikeun nerapkeun sprites, nostalgia pikeun kumaha kuring dipaké pikeun nulis kaulinan dina TI-99/4. Pikeun anu henteu terang, sprite mangrupikeun objek grafis dua diménsi anu tiasa ngalih sareng berinteraksi sareng elemen parangkat lunak anu sanés. Conto sprite diantarana kapal angkasa, astéroid, marmer, sareng rakét.

Kami nerapkeun App Inventor berorientasi obyék di Java, janten ngan ukur sakumpulan objék di dinya. Kusabab bal sareng sprites kalakuanana sami, kuring nyiptakeun kelas sprite abstrak kalayan sipat (widang) X, Y, Speed ​​​​(speed) sareng Heading (arah). Aranjeunna gaduh metodeu anu sami pikeun ngadeteksi tabrakan, mumbul dina ujung layar, jsb.

Beda utama antara bal sareng sprite nyaéta naon anu digambar - bunderan anu dieusian atanapi raster. Kusabab kuring dilaksanakeun sprites munggaran, éta logis pikeun nangtukeun x- jeung y-koordinat tina belah kénca juru luhur dimana gambar ieu lokasina.

Kasalahan anu paling ngerakeun dina karir programming kuring (sajauh ieu)
Sakali sprites digawé, Kuring mutuskeun yén kuring bisa nerapkeun objék bal kalawan kode pisan saeutik. Hijina masalah éta kuring nyokot jalur pangbasajanna (ti sudut pandang tina implementer nu), nunjukkeun x- jeung y-koordinat tina belah kénca juru luhur kontur framing bal.

Kasalahan anu paling ngerakeun dina karir programming kuring (sajauh ieu)
Kanyataanna, ieu diperlukeun pikeun nunjukkeun x- jeung y-koordinat puseur bunderan, sakumaha diajarkeun dina sagala buku ajar matematika jeung sumber sejenna nu nyebutkeun bunderan.

Kasalahan anu paling ngerakeun dina karir programming kuring (sajauh ieu)
Beda sareng kasalahan kuring anu kapungkur, ieu henteu ngan ukur mangaruhan kolega kuring, tapi ogé jutaan pangguna App Inventor. Loba di antarana éta barudak atawa sagemblengna anyar pikeun programming. Aranjeunna kedah ngalakukeun seueur léngkah anu teu dipikabutuh nalika damel dina unggal aplikasi dimana balna aya. Upami kuring émut kasalahan kuring anu sanés kalayan seuri, maka anu ieu ngajantenkeun kuring ngesang bahkan ayeuna.

Kuring tungtungna patched bug ieu ngan anyar, sapuluh taun engké. "Patched", teu "dibereskeun", sabab sakumaha Joshua Bloch nyebutkeun, API anu langgeng. Teu bisa nyieun parobahan anu bakal mangaruhan program aya, urang ditambahkeun OriginAtCenter sipat kalawan nilai palsu dina program heubeul tur leres dina sakabéh hareup. Pamaké tiasa naroskeun patarosan logis: saha waé anu panginten nempatkeun titik awal di tempat sanés ti pusat. Kanggo? Pikeun hiji programmer anu teuing puguh a nyieun API normal sapuluh taun ka pengker.

Pangajaran Diajar

Nalika ngerjakeun API (anu ampir unggal programer kedah laksanakeun kadang-kadang), anjeun kedah nuturkeun naséhat pangsaéna anu digariskeun dina pidéo Joshua Bloch "Kumaha carana ngadamel API anu saé sareng naha éta penting pisan"atanapi dina daptar pondok ieu:

  • API tiasa masihan anjeun kauntungan anu ageung sareng cilaka anu ageung.. A API alus nyiptakeun konsumén ulang. Anu goréng janten ngimpina langgeng anjeun.
  • API umum, kawas inten, langgeng salawasna. Masihan sadayana anjeun: moal aya deui kasempetan pikeun ngalakukeun sadayana leres.
  • outlines API kedah ringkes - hiji halaman sareng kelas sareng metode tandatangan sareng déskripsi, nyandak henteu langkung ti hiji garis. Ieu bakal ngidinan Anjeun pikeun gampang nyusun ulang API lamun teu tétéla sampurna kahiji kalina.
  • Nerangkeun kasus pamakéansaméméh nerapkeun API atawa malah dipake dina spésifikasi na. Ku cara ieu anjeun bakal ngahindarkeun ngalaksanakeun sareng netepkeun API anu henteu fungsional.

Upami kuring parantos nyerat sinopsis pondok sareng naskah buatan, sigana mah kuring bakal ngaidentipikasi kasalahan sareng ngabenerkeunana. Upami henteu, maka salah sahiji kolega kuring pasti bakal ngalakukeun éta. Kaputusan naon waé anu ngagaduhan akibat anu ageung kedah dipikirkeun sahenteuna sahenteuna sadinten (ieu henteu ngan ukur pikeun program).

Judul karangan Richard Jibril, "Lebih parah langkung saé," nujul kana kauntungan anu janten pangheulana ka pasar-sanaos sareng produk anu teu sampurna-samentawis batur nyéépkeun kalanggengan ngudag anu sampurna. Reflecting on kode Sprite, Kuring nyadar yén kuring malah teu kudu nulis leuwih kode pikeun meunangkeun eta katuhu. Naon waé anu dicarioskeun, kuring salah pisan.

kacindekan

Programer ngalakukeun kasalahan unggal dinten, naha éta nyerat kode buggy atanapi henteu hoyong nyobian hal anu bakal ningkatkeun kaahlian sareng produktivitasna. Tangtosna, anjeun tiasa janten programmer tanpa ngalakukeun kasalahan anu serius sapertos kuring. Tapi mustahil janten programmer anu saé tanpa ngakuan kasalahan anjeun sareng diajar ti aranjeunna.

Kuring terus-terusan sapatemon murid anu ngarasa ngalakukeun loba teuing kasalahan sahingga teu dipotong kaluar pikeun programming. Kuring terang kumaha umum sindrom impostor dina IT. Abdi ngarepkeun anjeun bakal diajar pelajaran anu kuring parantos didaptarkeun - tapi émut anu utama: masing-masing urang ngalakukeun kasalahan - ngerakeun, lucu, pikasieuneun. Kuring bakal reuwas sareng kesel upami ka hareup kuring henteu gaduh bahan anu cekap pikeun neraskeun tulisan.

sumber: www.habr.com

Tambahkeun komentar