Bakit ang pag-upgrade lamang ng iyong coding ay hindi gagawing mas mahusay kang developer

Bakit ang pag-upgrade lamang ng iyong coding ay hindi gagawing mas mahusay kang developer

Techlead Skyeng Kirill Rogovoy (flashhhh) ay nagbibigay ng isang pagtatanghal sa mga kumperensya kung saan pinag-uusapan niya ang mga kasanayan na dapat paunlarin ng bawat mahusay na developer upang maging pinakamahusay. I asked him to share this story with Habra readers, I give the floor to Kirill.

Ang alamat tungkol sa isang mahusay na developer ay siya:

  1. Sumulat ng malinis na code
  2. Alam ng maraming teknolohiya
  3. Mas mabilis ang mga gawain sa pag-coding
  4. Alam ang isang grupo ng mga algorithm at mga pattern ng disenyo
  5. Maaaring i-refactor ang anumang code gamit ang Clean Code
  6. Hindi nag-aaksaya ng oras sa mga gawaing hindi nakaprograma
  7. 100% master ng iyong paboritong teknolohiya

Ito ay kung paano nakikita ng HR ang mga ideal na kandidato, at ang mga bakante, nang naaayon, ay ganito rin ang hitsura.

Ngunit ang aking karanasan ay nagsasabi na ito ay hindi masyadong totoo.

Una, dalawang mahalagang disclaimer:
1) ang aking karanasan ay mga pangkat ng produkto, ibig sabihin. mga kumpanyang may sariling produkto, hindi outsourcing; sa outsourcing lahat ay maaaring ibang-iba;
2) kung ikaw ay isang junior, hindi lahat ng payo ay magagamit, at kung ako sa iyo, magko-concentrate ako sa programming sa ngayon.

Magandang developer: katotohanan

1: Mas mahusay kaysa sa average na code

Ang isang mahusay na developer ay alam kung paano lumikha ng cool na arkitektura, magsulat ng cool na code, at hindi gumawa ng masyadong maraming mga bug; Sa pangkalahatan, mas mahusay siya kaysa sa karaniwan, ngunit wala siya sa nangungunang 1% ng mga espesyalista. Karamihan sa mga pinaka-cool na developer na kilala ko ay hindi ganoon kahusay na mga coder: mahusay sila sa kanilang ginagawa, ngunit wala silang magagawa na super-extraordinary.

2: Nilulutas ang mga problema sa halip na lumikha ng mga ito

Isipin natin na kailangan nating isama ang isang panlabas na serbisyo sa proyekto. Natanggap namin ang mga teknikal na pagtutukoy, tingnan ang dokumentasyon, tingnan na may isang bagay na hindi na napapanahon doon, maunawaan na kailangan naming magpasa ng mga karagdagang parameter, gumawa ng ilang mga pagsasaayos, subukang ipatupad ang lahat ng ito kahit papaano at gumawa ng ilang baluktot na pamamaraan na gumana nang tama, sa wakas, pagkatapos ng ilang ng mga araw na naiintindihan namin na hindi kami maaaring magpatuloy sa ganito. Ang karaniwang pag-uugali ng isang developer sa sitwasyong ito ay ang bumalik sa negosyo at sabihing: β€œGinawa ko ito at iyon, ang isang ito ay hindi gumagana sa ganoong paraan, at ang isang iyon ay hindi talaga gumagana, kaya alamin mo ito sa iyong sarili. ” May problema ang isang negosyo: kailangan mong suriin kung ano ang nangyari, makipag-usap sa isang tao, at subukang lutasin ito kahit papaano. Nagsimula ang sirang telepono: "sabihin mo sa kanya, ite-text ko siya, tingnan kung ano ang sinagot nila."

Ang isang mahusay na developer, na nahaharap sa ganoong sitwasyon, ay makakahanap ng mga contact sa kanyang sarili, makipag-ugnay sa kanya sa telepono, talakayin ang problema, at kung walang magawa, magtitipon siya ng mga tamang tao, ipaliwanag ang lahat at mag-alok ng mga alternatibo (malamang, may isa pa. panlabas na serbisyo na may mas mahusay na suporta). Nakikita ng naturang developer ang isang problema sa negosyo at nilulutas ito. Ang kanyang gawain ay sarado kapag nalutas niya ang isang problema sa negosyo, at hindi kapag siya ay nakatagpo ng isang bagay.

3: Sinusubukang gumastos ng kaunting pagsisikap upang makakuha ng pinakamataas na resulta, kahit na nangangahulugan ito ng pagsulat ng saklay

Ang pagbuo ng software sa mga kumpanya ng produkto ay halos palaging ang pinakamalaking item sa gastos: mahal ang mga developer. At nauunawaan ng isang mahusay na developer na gustong makuha ng isang negosyo ang pinakamataas na halaga ng pera sa pamamagitan ng paggastos ng pinakamababa. Upang matulungan siya, nais ng isang mahusay na developer na gumastos ng pinakamababang halaga ng kanyang mahal na oras upang makuha ang pinakamataas na kita para sa employer.

Mayroong dalawang sukdulan dito. Ang isa ay sa pangkalahatan ay maaari mong malutas ang lahat ng mga problema sa isang saklay, nang hindi naaabala sa arkitektura, nang walang refactoring, atbp. Alam nating lahat kung paano ito karaniwang nagtatapos: walang gumagana, muling isinulat namin ang proyekto mula sa simula. Ang isa pa ay kapag sinubukan ng isang tao na magkaroon ng perpektong arkitektura para sa bawat button, gumugugol ng isang oras sa gawain at apat sa refactoring. Ang resulta ng naturang trabaho ay mukhang mahusay, ngunit ang problema ay na sa panig ng negosyo ay tumatagal ng sampung oras upang makumpleto ang isang pindutan, sa una at pangalawang mga kaso, para lamang sa iba't ibang mga kadahilanan.

Ang isang mahusay na developer ay alam kung paano balansehin ang pagitan ng mga sukdulang ito. Nauunawaan niya ang konteksto at gumagawa ng pinakamainam na desisyon: sa problemang ito ay puputulin ko ang isang saklay, dahil ito ay code na hinawakan isang beses bawat anim na buwan. Ngunit sa isang ito, aabalahin ko at gagawin ang lahat nang tama hangga't maaari, dahil ang isang daang bagong feature na hindi pa nabubuo ay depende sa kung ano ang aking magtagumpay.

4. May sariling sistema ng pamamahala ng negosyo at nagagawa ang mga proyekto ng anumang kumplikado dito.

Paggawa sa mga prinsipyo Pagkuha ng mga Bagay Tapos na – kapag isinulat mo ang lahat ng iyong mga gawain sa ilang uri ng sistema ng teksto, huwag kalimutan ang anumang mga kasunduan, itulak ang lahat, magpakita sa lahat ng dako sa oras, alam kung ano ang mahalaga at kung ano ang hindi mahalaga sa ngayon, hindi ka mawawalan ng mga gawain. Ang pangkalahatang katangian ng gayong mga tao ay kapag sumang-ayon ka sa isang bagay sa kanila, hindi ka mag-aalala na makakalimutan nila; at alam mo rin na isusulat nila ang lahat at hindi na magtatanong ng isang libong tanong, ang mga sagot na napag-usapan na.

5. Mga tanong at nililinaw ang anumang kundisyon at pagpapakilala

Dito rin mayroong dalawang sukdulan. Sa isang banda, maaari kang mag-alinlangan tungkol sa lahat ng panimulang impormasyon. Ang mga taong nauna sa iyo ay nakaisip ng ilang mga solusyon, ngunit sa tingin mo ay maaari kang gumawa ng mas mahusay at magsimulang muling talakayin ang lahat ng nauna sa iyo: disenyo, mga solusyon sa negosyo, arkitektura, atbp. Nag-aaksaya ito ng maraming oras para sa developer at sa mga nakapaligid sa kanya, at may negatibong epekto sa tiwala sa loob ng kumpanya: ayaw ng ibang tao na magdesisyon dahil alam nilang babalik ang taong iyon at sisirain ang lahat. Ang isa pang sukdulan ay kapag ang isang developer ay napagtanto ang anumang panimulang, teknikal na mga detalye at mga kagustuhan sa negosyo bilang isang bagay na inukit sa bato, at kapag nahaharap lamang sa isang hindi malulutas na problema ay nagsisimula siyang mag-isip tungkol sa kung ginagawa niya ang kanyang ginagawa sa lahat. Ang isang mahusay na developer ay nakakahanap din ng gitnang lupa dito: sinusubukan niyang maunawaan ang mga desisyon na ginawa bago o wala siya, bago ang gawain ay napupunta sa pag-unlad. Ano ang gusto ng negosyo? Solusyonan ba natin ang mga problema niya? Nakaisip ng solusyon ang taga-disenyo ng produkto, ngunit naiintindihan ko ba kung bakit gagana ang solusyon? Bakit ang pinuno ng koponan ay nakabuo ng partikular na arkitektura? Kung may hindi malinaw, kailangan mong magtanong. Sa proseso ng paglilinaw na ito, maaaring makakita ang isang mahusay na developer ng alternatibong solusyon na hindi pa nangyari sa sinuman noon.

6. Nagpapabuti ng mga proseso at mga tao sa paligid mo

Maraming proseso ang nangyayari sa ating paligid - mga pang-araw-araw na pagpupulong, pagkikita-kita, scrum, tech review, code review, atbp. Ang isang mahusay na developer ay tatayo at sasabihin: tingnan mo, nagsasama-sama tayo at tinatalakay ang parehong bagay bawat linggo, hindi ko maintindihan kung bakit, maaari rin nating gugulin ang oras na ito sa Contra. O: para sa pangatlong gawain sa isang hilera hindi ako makakapasok sa code, walang malinaw, ang arkitektura ay puno ng mga butas; Baka ang review code natin ay lame at kailangan nating i-refactor, let's refactor the meetup every two weeks. O, sa panahon ng pagsusuri ng code, nakikita ng isang tao na ang isa sa kanyang mga kasamahan ay hindi gumagamit ng isang partikular na tool nang epektibo, na nangangahulugang kailangan niyang lumabas sa ibang pagkakataon at magbigay ng ilang payo. Ang isang mahusay na developer ay may ganitong instinct; awtomatiko niyang ginagawa ang mga bagay na iyon.

7. Mahusay sa pamamahala ng iba, kahit na hindi isang manager

Ang kasanayang ito ay mahusay na nauugnay sa tema ng "paglutas sa halip na lumikha ng mga problema." Kadalasan, sa teksto ng bakante kung saan kami nag-aaplay, walang nakasulat tungkol sa pamamahala, ngunit pagkatapos, kapag nahaharap sa isang problema na lampas sa iyong kontrol, kailangan mo pa ring pamahalaan ang iba sa isang paraan o iba pa, makamit ang isang bagay mula sa kanila, kung ikaw ay nakalimutan - itulak, siguraduhin na naiintindihan nila ang lahat. Ang isang mahusay na developer ay nakakaalam kung sino ang interesado sa kung ano, maaaring tumawag ng isang pulong sa mga taong ito, magsulat ng mga kasunduan, ipadala ang mga ito sa malubay, paalalahanan sila sa tamang araw, siguraduhin na ang lahat ay handa, kahit na siya ay hindi personal na direktang responsable para sa gawaing ito, ngunit ang kanyang resulta ay nakasalalay sa pagpapatupad nito.

8. Hindi nakikita ang kanyang kaalaman bilang dogma, ay patuloy na bukas sa pagpuna

Naaalala ng lahat ang isang kasamahan mula sa isang nakaraang trabaho na hindi kayang ikompromiso ang kanyang teknolohiya at sumisigaw na ang lahat ay masusunog sa impiyerno para sa ilang mga maling mutasyon. Ang isang mahusay na developer, kung siya ay nagtatrabaho para sa 5, 10, 20 taon sa industriya, nauunawaan na ang kalahati ng kanyang kaalaman ay bulok, at sa natitirang kalahati ay hindi niya alam ng sampung beses na higit pa kaysa sa kanyang alam. At sa tuwing may hindi sumasang-ayon sa kanya at nag-aalok ng alternatibo, ito ay hindi isang pag-atake sa kanyang ego, ngunit isang pagkakataon upang matuto ng isang bagay. Ito ay nagpapahintulot sa kanya na lumago nang mas mabilis kaysa sa mga nakapaligid sa kanya.

Ihambing natin ang aking ideya ng isang perpektong developer sa karaniwang tinatanggap:

Bakit ang pag-upgrade lamang ng iyong coding ay hindi gagawing mas mahusay kang developer

Ipinapakita ng larawang ito kung ilan sa mga puntong inilarawan sa itaas ang nauugnay sa code, at ilan ang hindi. Ang pag-unlad sa isang kumpanya ng produkto ay isang ikatlong programming lamang, ang natitirang 2/3 ay walang gaanong kinalaman sa code. At kahit na sumusulat kami ng maraming code, ang aming pagiging epektibo ay lubos na nakasalalay sa mga "walang-katuturang" dalawang-katlo.

Espesyalisasyon, pangkalahatan at ang 80-20 na tuntunin

Kapag ang isang tao ay natutong lutasin ang ilang makitid na problema, nag-aaral nang matagal at mahirap, ngunit pagkatapos ay malulutas ang mga ito nang madali at simple, ngunit walang kadalubhasaan sa mga kaugnay na larangan, ito ay espesyalisasyon. Ang generalism ay kapag ang kalahati ng oras ng pagsasanay ay namuhunan sa lugar ng sariling kakayahan, at isa pang kalahati sa mga kaugnay na lugar. Alinsunod dito, sa unang kaso, ginagawa ko ang isang bagay nang perpekto at ang iba ay hindi maganda, at sa pangalawa, ginagawa ko ang lahat nang higit pa o hindi gaanong maayos.

Sinasabi sa atin ng panuntunang 80-20 na 80% ng resulta ay nagmumula sa 20% ng pagsisikap. 80% ng kita ay mula sa 20% ng mga customer, 80% ng kita ay mula sa 20% ng mga empleyado, at iba pa. Sa pagtuturo, nangangahulugan ito na 80% ng kaalaman ang nakukuha natin sa unang 20% ​​ng oras na ginugol.

Mayroong isang ideya: ang mga coder ay dapat lamang mag-code, ang mga taga-disenyo ay dapat lamang magdisenyo, ang mga analyst ay dapat magsuri, at ang mga tagapamahala ay dapat lamang na mamahala. Sa aking opinyon, ang ideyang ito ay nakakalason at hindi gumagana nang maayos. Ito ay hindi tungkol sa lahat ng kailangang maging isang unibersal na sundalo, ito ay tungkol sa pag-save ng mga mapagkukunan. Kung naiintindihan ng isang developer ang kahit kaunting tungkol sa pamamahala, disenyo at analytics, magagawa niyang lutasin ang maraming problema nang hindi kinasasangkutan ng ibang tao. Kung kailangan mong gumawa ng ilang uri ng feature at pagkatapos ay suriin kung paano gumagana ang mga user dito sa isang partikular na konteksto, na mangangailangan ng dalawang query sa SQL, kung gayon, napakagandang hindi makagambala sa analyst dito. Kung kailangan mong mag-embed ng isang pindutan sa pamamagitan ng pagkakatulad sa mga umiiral na, at naiintindihan mo ang mga pangkalahatang prinsipyo, magagawa mo ito nang hindi kinasasangkutan ng isang taga-disenyo, at ang kumpanya ay magpapasalamat sa iyo para dito.

Kabuuan: maaari mong gastusin ang 100% ng iyong oras sa pag-aaral ng isang kasanayan hanggang sa limitasyon, o maaari kang gumugol ng parehong oras sa limang lugar, na nag-level up ng hanggang 80% sa bawat isa. Kasunod ng walang muwang na matematika na ito, maaari tayong makakuha ng apat na beses na mas maraming kasanayan sa parehong tagal ng oras. Ito ay isang pagmamalabis, ngunit ito ay naglalarawan ng ideya.

Ang mga kaugnay na kasanayan ay maaaring sanayin hindi ng 80%, ngunit sa pamamagitan ng 30-50%. Matapos gumugol ng 10-20 oras, kapansin-pansing mapapabuti mo ang mga kaugnay na lugar, makakuha ng maraming pag-unawa sa mga prosesong nagaganap sa mga ito at magiging mas autonomous.

Sa IT ecosystem ngayon, mas mabuting magkaroon ng maraming kakayahan hangga't maaari at huwag maging eksperto sa alinman sa mga ito. Dahil, una, lahat ng mga kasanayang ito ay mabilis na kumukupas, lalo na pagdating sa programming, at pangalawa, dahil 99% ng oras na ginagamit namin hindi lamang basic, ngunit tiyak na hindi ang pinaka-sopistikadong mga kasanayan, at ito ay sapat na kahit na sa coding, kahit na sa mga cool na kumpanya.

At panghuli, ang pagsasanay ay isang pamumuhunan, at ang pagkakaiba-iba ay mahalaga sa mga pamumuhunan.

Ano ang ituturo

Kaya ano ang ituturo at paano? Ang isang karaniwang developer sa isang malakas na kumpanya ay regular na gumagamit ng:

  • komunikasyon
  • sariling organisasyon
  • pagpaplano
  • disenyo (karaniwang code)
  • at kung minsan ay pamamahala, pamumuno, pagsusuri ng datos, pagsulat, pangangalap, paggabay at marami pang ibang kasanayan

At halos wala sa mga kasanayang ito ang bumalandra sa anumang paraan sa mismong code. Kailangan silang ituro at i-upgrade nang hiwalay, at kung hindi ito gagawin, mananatili sila sa napakababang antas, na hindi nagpapahintulot sa kanila na magamit nang epektibo.

Anong mga lugar ang nagkakahalaga ng pagpapaunlad?

  1. Ang mga malambot na kasanayan ay lahat ng bagay na walang kinalaman sa pagpindot sa mga pindutan sa editor. Ganito kami sumulat ng mga mensahe, kung paano kami kumikilos sa mga pagpupulong, kung paano kami nakikipag-usap sa mga kasamahan. Ang lahat ng ito ay tila malinaw na mga bagay, ngunit kadalasan ang mga ito ay minamaliit.

  2. Sistema ng sariling organisasyon. Para sa akin personal, ito ay naging isang napaka-importanteng paksa sa nakaraang taon. Sa lahat ng mga cool na IT worker na kilala ko, ito ang isa sa mga pinaka-develop na kasanayan: super-organized sila, palagi nilang ginagawa ang sinasabi nila, alam nila kung ano mismo ang gagawin nila bukas, sa isang linggo, sa isang buwan. Ito ay kinakailangan upang bumuo ng isang sistema sa paligid ng iyong sarili kung saan ang lahat ng mga bagay at lahat ng mga katanungan ay naitala; ito ay lubos na nagpapadali sa gawain mismo at lubos na nakakatulong upang makipag-ugnayan sa ibang mga tao. Nararamdaman ko na sa nakalipas na taon, ang pag-unlad sa direksyong ito ay nagpabuti sa akin nang higit pa kaysa sa pagpapabuti ng aking mga teknikal na kasanayan; Nagsimula akong gumawa ng mas makabuluhang trabaho sa bawat yunit ng oras.

  3. Aktibo, bukas-isip at pagpaplano. Ang mga paksa ay napaka pangkalahatan at mahalaga, hindi natatangi sa IT, at lahat ay dapat bumuo ng mga ito. Ang pagiging maagap ay nangangahulugan ng hindi paghihintay ng hudyat para kumilos. Ikaw ang pinagmulan ng mga pangyayari, hindi mga reaksyon sa kanila. Ang bukas na pag-iisip ay ang kakayahang tratuhin ang anumang bagong impormasyon nang may layunin, upang suriin ang sitwasyon nang hiwalay mula sa sariling pananaw sa mundo at mga lumang gawi. Ang pagpaplano ay isang malinaw na pananaw kung paano nilulutas ng gawain ngayon ang problema para sa linggo, buwan, taon. Kung nakikita mo ang hinaharap na lampas sa isang tiyak na gawain, mas madaling gawin ang kailangan mo, at huwag matakot pagkatapos ng oras na mapagtanto na ito ay nasayang. Ang kasanayang ito ay lalong mahalaga para sa isang karera: maaari mong matagumpay na makamit ang mga resulta sa loob ng maraming taon, ngunit sa maling lugar, at kalaunan ay mawawala ang lahat ng naipon na bagahe kapag naging malinaw na ikaw ay lumilipat sa maling direksyon.

  4. Lahat ng mga kaugnay na lugar sa pangunahing antas. Ang bawat tao'y may kanya-kanyang partikular na mga lugar, ngunit mahalagang maunawaan na sa pamamagitan ng paggugol ng 10-20 oras ng oras sa pag-level up ng ilang "banyagang" kasanayan, maaari kang tumuklas ng maraming mga bagong pagkakataon at punto ng pakikipag-ugnayan sa iyong pang-araw-araw na trabaho, at ang mga oras na ito ay maaaring maging sapat hanggang sa katapusan ng karera.

Ano ang dapat basahin

Napakaraming libro tungkol sa self-organization; isa itong buong industriya kung saan ang ilang kakaibang lalaki ay nagsusulat ng mga koleksyon ng payo at nangongolekta ng mga pagsasanay. Kasabay nito, hindi malinaw kung ano ang kanilang naabot sa buhay. Samakatuwid, mahalagang maglagay ng mga filter sa mga may-akda, tingnan kung sino sila at kung ano ang nasa likod nila. Ang aking pag-unlad at pananaw ay higit na naimpluwensyahan ng apat na aklat, lahat ng mga ito sa isang paraan o iba pang nauugnay sa pagpapabuti ng mga kasanayang inilarawan sa itaas.

Bakit ang pag-upgrade lamang ng iyong coding ay hindi gagawing mas mahusay kang developer1. Dale Carnegie "Paano Manalo ng Mga Kaibigan at Impluwensya ang mga Tao". Isang kulto na libro tungkol sa malambot na mga kasanayan, kung hindi mo alam kung saan magsisimula, ang pagpili nito ay isang pagpipilian na manalo-manalo. Ito ay binuo sa mga halimbawa, madaling basahin, hindi nangangailangan ng maraming pagsisikap upang maunawaan kung ano ang iyong nabasa, at ang mga nakuhang kasanayan ay maaaring magamit kaagad. Sa pangkalahatan, sinasaklaw ng aklat ang paksa ng pakikipag-usap sa mga tao.

Bakit ang pag-upgrade lamang ng iyong coding ay hindi gagawing mas mahusay kang developer2. Stephen R. Covey "7 gawi ng mga Highly Effective na Tao". Isang halo ng iba't ibang mga kasanayan, mula sa pagiging maagap hanggang sa malambot na mga kasanayan, na may diin sa pagkamit ng synergy kapag kailangan mong gawing isang malaking puwersa ang isang maliit na koponan. Madali din itong basahin.

Bakit ang pag-upgrade lamang ng iyong coding ay hindi gagawing mas mahusay kang developer3. Ray Dalio "Mga Prinsipyo". Nagpapakita ng mga tema ng pagiging bukas-isip at pagiging maagap, batay sa kasaysayan ng kumpanyang itinayo ng may-akda, na pinamahalaan niya sa loob ng 40 taon. Maraming mga pinaghirapang halimbawa mula sa buhay ang nagpapakita kung gaano ang pagkiling at pag-asa ng isang tao, at kung paano ito aalisin.

Bakit ang pag-upgrade lamang ng iyong coding ay hindi gagawing mas mahusay kang developer4. David Allen, "Paggawa ng mga Bagay". Ang ipinag-uutos na pagbabasa upang malaman ang pagsasaayos ng sarili. Hindi ito napakadaling basahin, ngunit nagbibigay ito ng komprehensibong hanay ng mga tool para sa pag-aayos ng buhay at mga gawain, sinusuri ang lahat ng aspeto nang detalyado, at tinutulungan kang magpasya kung ano ang eksaktong kailangan mo. Sa tulong niya, bumuo ako ng sarili kong sistema na nagpapahintulot sa akin na palaging gawin ang pinakamahahalagang bagay nang hindi nakakalimutan ang iba pa.

Dapat mong maunawaan na ang pagbabasa lamang ay hindi sapat. Maaari kang lumunok ng hindi bababa sa isang libro sa isang linggo, ngunit ang epekto ay tatagal ng ilang araw, at pagkatapos ay babalik ang lahat sa lugar nito. Ang mga libro ay dapat gamitin bilang isang mapagkukunan ng payo na agad na nasubok sa pagsasanay. Kung hindi mo ito gagawin, ang ibibigay lang nila ay ilang pagpapalawak ng iyong mga abot-tanaw.

Pinagmulan: www.habr.com

Magdagdag ng komento