Zašto samo nadogradnjom kodiranja nećete postati bolji programer

Zašto samo nadogradnjom kodiranja nećete postati bolji programer

Tehnički voditelj Skyeng Kirill Rogovoy (bljesakhhh) na konferencijama drži prezentaciju u kojoj govori o vještinama koje svaki dobar programer treba razviti kako bi postao najbolji. Zamolio sam ga da ovu priču podijeli s čitateljima Habra, dajem riječ Kirilu.

Mit o dobrom programeru je da on:

  1. Piše čisti kod
  2. Poznaje puno tehnologija
  3. Zadaci kodiranja brže
  4. Poznaje hrpu algoritama i dizajn obrazaca
  5. Može refaktorirati bilo koji kod koristeći Clean Code
  6. Ne gubi vrijeme na neprogramske zadatke
  7. 100% majstor vaše omiljene tehnologije

Tako HR vidi idealne kandidate, a prema tome i natječaji izgledaju ovako.

Ali moje iskustvo govori da to baš i nije točno.

Prvo, dva važna odricanja od odgovornosti:
1) moje iskustvo su timovi proizvoda, tj. tvrtke s vlastitim proizvodom, a ne outsourcing; u outsourcingu sve može biti vrlo različito;
2) ako ste junior, onda neće svi savjeti biti primjenjivi, a da sam na vašem mjestu, koncentrirao bih se na programiranje za sada.

Dobar programer: stvarnost

1: Kod bolji od prosjeka

Dobar programer zna kako stvoriti cool arhitekturu, napisati cool kod i ne praviti previše grešaka; Općenito, radi bolje od prosjeka, ali nije u prvih 1% specijalista. Većina najboljih programera koje poznajem nisu tako sjajni koderi: izvrsni su u onome što rade, ali ne mogu učiniti ništa super-izvanredno.

2: Rješava probleme umjesto da ih stvara

Zamislimo da trebamo integrirati vanjsku uslugu u projekt. Dobivamo tehničke specifikacije, pogledamo dokumentaciju, vidimo da je tu nešto zastarjelo, shvatimo da trebamo proći dodatne parametre, napraviti neke prilagodbe, pokušati sve to nekako implementirati i učiniti da neka kriva metoda radi ispravno, konačno, nakon par dana shvaćamo da ne možemo nastaviti ovako. Standardno ponašanje programera u ovoj situaciji je da se vrati poslu i kaže: “Napravio sam to i to, ovaj ne radi tako, a onaj nikako, pa idite sami shvatite. ” Posao ima problem: treba se udubiti u ono što se dogodilo, komunicirati s nekim i pokušati to nekako riješiti. Pokvareni telefon počinje: "ti mu reci, ja ću joj poslati poruku, vidi što su odgovorili."

Dobar programer, suočen s takvom situacijom, sam će pronaći kontakte, kontaktirati ga telefonom, porazgovarati o problemu, a ako ništa ne uspije, okupit će prave ljude, objasniti im sve i ponuditi alternative (najvjerojatnije postoji neka druga vanjski servis s boljom podrškom). Takav programer vidi poslovni problem i riješi ga. Njegov zadatak je zatvoren kada riješi poslovni problem, a ne kada naleti na nešto.

3: Pokušava uložiti minimalan napor kako bi postigao maksimalne rezultate, čak i ako to znači pisanje štakama

Razvoj softvera u proizvodnim tvrtkama gotovo je uvijek najveća stavka troškova: programeri su skupi. A dobar programer razumije da tvrtka želi dobiti maksimalni iznos novca trošeći minimum. Kako bi mu pomogao, dobar programer želi potrošiti minimalnu količinu svog skupog vremena kako bi postigao maksimalni profit za poslodavca.

Ovdje postoje dvije krajnosti. Jedan je da općenito sve probleme možete riješiti uz pomoć štake, bez mučenja s arhitekturom, bez refaktoriranja itd. Svi znamo kako to obično završi: ništa ne radi, prepravljamo projekt ispočetka. Drugi je kada osoba pokušava osmisliti idealnu arhitekturu za svaki gumb, trošeći sat vremena na zadatak i četiri na refaktoriranje. Rezultat takvog rada izgleda sjajno, no problem je što s poslovne strane za dovršavanje gumba treba deset sati, i u prvom i u drugom slučaju, jednostavno iz različitih razloga.

Dobar programer zna kako balansirati između ovih krajnosti. On razumije kontekst i donosi optimalnu odluku: u ovom problemu ću rezati štaku, jer to je kod koji se dira jednom u šest mjeseci. Ali u ovom ću se potruditi i sve napraviti maksimalno korektno, jer o tome što uspijem ovisi stotinjak novih mogućnosti koje tek treba razviti.

4. Ima vlastiti sustav upravljanja poslovanjem iu njemu je sposoban raditi na projektima bilo koje složenosti.

Rad na principima Obavljati stvari – kada sve svoje zadatke zapisujete u nekakav tekstualni sustav, ne zaboravite na dogovore, gurate sve, dolazite svugdje na vrijeme, znate što je važno, a što nevažno u ovom trenutku, nikad ne gubite zadatke. Opća karakteristika takvih ljudi je da kada se s njima nešto dogovorite, nikada se ne brinete da će zaboraviti; a znaš i da oni sve zapišu i neće onda postavljati tisuću pitanja o čijim je odgovorima već bilo riječi.

5. Postavlja pitanja i pojašnjava sve uvjete i uvode

I ovdje postoje dvije krajnosti. S jedne strane, možete biti skeptični prema svim uvodnim informacijama. Ljudi prije vas su dolazili s nekim rješenjima, ali vi mislite da možete bolje i počnete ponovno raspravljati o svemu što je bilo prije vas: dizajn, poslovna rješenja, arhitektura itd. Time se gubi puno vremena i za programera i za one oko njega, a negativno utječe na povjerenje unutar tvrtke: drugi ljudi ne žele donositi odluke jer znaju da će se taj tip vratiti i sve pokvariti. Druga je krajnost kada developer bilo kakve uvodne, tehničke specifikacije i poslovne želje doživljava kao nešto uklesano u kamen i tek kada se suoči s nerješivim problemom počne razmišljati o tome radi li uopće to što radi. Dobar programer i ovdje nalazi zlatnu sredinu: pokušava razumjeti odluke donesene prije ili bez njega, prije nego što zadatak krene u razvoj. Što posao želi? Rješavamo li njegove probleme? Dizajner proizvoda smislio je rješenje, no razumijem li zašto će rješenje funkcionirati? Zašto je vođa tima smislio baš ovu arhitekturu? Ako nešto nije jasno, onda morate otići pitati. U procesu ovog pojašnjenja, dobar programer može vidjeti alternativno rješenje koje jednostavno nikome prije nije palo na pamet.

6. Poboljšava procese i ljude oko vas

Mnogo je procesa koji se odvijaju oko nas - dnevni sastanci, susreti, scrumovi, tehnički pregledi, pregledi kodova itd. Dobar programer će ustati i reći: gle, mi se okupljamo i raspravljamo o istoj stvari svaki tjedan, ne razumijem zašto, mogli bismo i ovaj sat provesti na Contri. Ili: za treći zadatak zaredom ne mogu ući u kod, ništa nije jasno, arhitektura je puna rupa; Možda je naš kod za recenziju jadan i trebamo refaktorirati, refaktorirajmo susret svaka dva tjedna. Ili tijekom pregleda koda, osoba vidi da netko od njegovih kolega ne koristi dovoljno učinkovito određeni alat, što znači da mora doći kasnije i dati savjet. Dobar programer ima taj instinkt; on takve stvari radi automatski.

7. Izvrstan u upravljanju drugima, čak i ako nije menadžer

Ova se vještina dobro povezuje s temom "rješavanje, a ne stvaranje problema". Često u tekstu natječaja na koji se prijavljujemo ne piše ništa o menadžmentu, ali onda, kad se suočite s problemom na koji ne možete utjecati, ipak morate upravljati drugima na ovaj ili onaj način, postići nešto od njih, ako zaboravio - guraj, provjeri jesu li sve razumjeli. Dobar programer zna koga zanima što, može sazvati sastanak s tim ljudima, zapisati dogovore, poslati ih u slack, podsjetiti ih na pravi dan, pobrinuti se da sve bude spremno, čak i ako nije osobno direktno odgovoran za ovaj zadatak, ali njegov rezultat ovisi o njegovoj provedbi.

8. Svoje znanje ne doživljava kao dogmu, stalno je otvoren kritici

Svatko se može sjetiti kolege s prethodnog posla koji ne može napraviti kompromis oko svoje tehnologije i vrišti da će svi gorjeti u paklu zbog nekih krivih mutacija. Dobar programer, ako radi 5, 10, 20 godina u industriji, shvaća da mu je pola znanja pokvareno, a u preostaloj polovici ne zna deset puta više nego što zna. I svaki put kad se netko s njim ne slaže i ponudi alternativu, to nije napad na njegov ego, već prilika da nešto nauči. To mu omogućuje da raste mnogo brže od onih oko njega.

Usporedimo moju ideju idealnog programera s općeprihvaćenom:

Zašto samo nadogradnjom kodiranja nećete postati bolji programer

Ova slika pokazuje koliko je gore opisanih točaka povezano s kodom, a koliko nije. Razvoj u proizvodnoj tvrtki je samo jedna trećina programiranja, preostale 2/3 nema mnogo veze s kodom. I premda pišemo puno koda, naša učinkovitost uvelike ovisi o ove "nebitne" dvije trećine.

Specijalizacija, generalizam i pravilo 80-20

Kada osoba nauči rješavati neke uske probleme, dugo i naporno uči, ali ih onda rješava lako i jednostavno, ali nema stručnost u srodnim područjima, to je specijalizacija. Generalizam je kada se pola vremena obuke ulaže u područje vlastite kompetencije, a druga polovica u srodna područja. Sukladno tome, u prvom slučaju jednu stvar radim savršeno, a ostalo loše, au drugom sve radim više-manje dobro.

Pravilo 80-20 govori nam da 80% rezultata dolazi od 20% truda. 80% prihoda dolazi od 20% kupaca, 80% profita dolazi od 20% zaposlenika itd. U nastavi to znači da 80% znanja stječemo u prvih 20% provedenog vremena.

Postoji ideja: koderi trebaju samo kodirati, dizajneri samo dizajnirati, analitičari analizirati, a menadžeri samo upravljati. Po mom mišljenju, ova ideja je toksična i ne funkcionira baš najbolje. Ne radi se o tome da svatko mora biti univerzalni vojnik, radi se o štednji resursa. Ako se programer barem malo razumije u upravljanje, dizajn i analitiku, moći će riješiti mnoge probleme bez uključivanja drugih ljudi. Ako trebate napraviti neku značajku i zatim provjeriti kako korisnici rade s njom u određenom kontekstu, što će zahtijevati dva SQL upita, onda je sjajno što možete ne ometati analitičara s ovim. Ako trebate ugraditi gumb po analogiji s postojećim i razumijete opća načela, to možete učiniti bez uključivanja dizajnera, a tvrtka će vam zahvaliti na tome.

Ukupno: možete potrošiti 100% svog vremena proučavajući vještinu do krajnjih granica ili možete potrošiti isto vrijeme na pet područja, postižući razinu do 80% u svakom. Slijedeći ovu naivnu matematiku, možemo steći četiri puta više vještina u istom vremenu. Ovo je pretjerivanje, ali ilustrira ideju.

Povezane vještine mogu se trenirati ne za 80%, već za 30-50%. Nakon provedenih 10-20 sati, primjetno ćete napredovati u srodnim područjima, steći puno razumijevanja procesa koji se u njima odvijaju i postati puno autonomniji.

U današnjem IT ekosustavu bolje je imati što više vještina i ne biti stručnjak ni u jednoj od njih. Jer, kao prvo, sve te vještine brzo izblijede, pogotovo kada je u pitanju programiranje, i kao drugo, jer 99% vremena koristimo ne samo osnovne, ali svakako ne najsofisticiranije vještine, a to je dovoljno čak iu kodiranju, čak i u cool tvrtke.

I na kraju, obuka je investicija, a diverzifikacija je važna u investicijama.

Što poučavati

Dakle, što podučavati i kako? Tipičan programer u jakoj tvrtki redovito koristi:

  • komunikacija
  • samoorganizacija
  • planiranje
  • dizajn (obično kod)
  • a ponekad i upravljanje, vodstvo, analiza podataka, pisanje, regrutiranje, mentorstvo i mnoge druge vještine

I praktički nijedna od ovih vještina ni na koji se način ne presijeca sa samim kodom. Potrebno ih je posebno podučavati i nadograđivati, a ako se to ne učini, ostat će na vrlo niskoj razini, što ne dopušta njihovo učinkovito korištenje.

U kojim područjima se isplati razvijati?

  1. Soft vještine su sve što se ne tiče pritiskanja gumba u editoru. Tako pišemo poruke, tako se ponašamo na sastancima, tako komuniciramo s kolegama. Čini se da su sve to očite stvari, ali se vrlo često podcjenjuju.

  2. Sustav samoorganizacije. Za mene osobno, ovo je postala super-važna tema u posljednjih godinu dana. Među svim cool IT radnicima koje poznajem, ovo je jedna od najrazvijenijih vještina: oni su super organizirani, uvijek rade ono što kažu, točno znaju što će raditi sutra, za tjedan, za mjesec dana. Oko sebe je potrebno izgraditi sustav u kojem se evidentiraju sve stvari i sva pitanja, što uvelike olakšava sam rad i uvelike pomaže u interakciji s drugim ljudima. Osjećam da me tijekom protekle godine razvoj u ovom smjeru poboljšao mnogo više od poboljšanja mojih tehničkih vještina; počeo sam raditi znatno više posla po jedinici vremena.

  3. Proaktivan, otvoren i planiran. Teme su vrlo općenite i vitalne, nisu jedinstvene za IT i svatko bi ih trebao razraditi. Proaktivnost znači ne čekati signal za djelovanje. Vi ste izvor događaja, a ne reakcija na njih. Otvorenost je sposobnost da se svaka nova informacija tretira objektivno, da se situacija ocijeni odvojeno od vlastitog svjetonazora i starih navika. Planiranje je jasna vizija kako današnji zadatak rješava problem za tjedan, mjesec, godinu. Ako budućnost vidite izvan određenog zadatka, puno je lakše učiniti ono što trebate, a ne bojati se nakon vremena shvatiti da je izgubljeno. Ova vještina posebno je važna za karijeru: možete godinama uspješno postizati rezultate, ali na krivom mjestu, a na kraju izgubiti svu nagomilanu prtljagu kada postane jasno da ste se kretali u krivom smjeru.

  4. Sva srodna područja do osnovne razine. Svatko ima svoja specifična područja, ali važno je razumjeti da utrošivši 10-20 sati vremena na podizanje neke "strane" vještine, možete otkriti mnoge nove prilike i dodirne točke u svom svakodnevnom radu, a ti sati mogu biti dovoljno do kraja karijere.

Što čitati

Ima jako puno knjiga o samoorganizaciji; to je cijela industrija u kojoj neki čudni tipovi pišu zbirke savjeta i skupljaju treninge. Pritom je nejasno što su oni sami postigli u životu. Stoga je važno staviti filtere na autore, pogledati tko su i što imaju iza sebe. Na moj razvoj i pogled najviše su utjecale četiri knjige, a sve su se na ovaj ili onaj način odnosile na usavršavanje gore opisanih vještina.

Zašto samo nadogradnjom kodiranja nećete postati bolji programer1. Dale Carnegie “Kako steći prijatelje i utjecati na ljude”. Kultna knjiga o mekim vještinama, ako ne znate odakle početi, njezin odabir je dobitna opcija. Građena je na primjerima, lako se čita, ne zahtijeva puno truda da se shvati pročitano, a stečene vještine mogu se odmah primijeniti. Općenito, knjiga pokriva temu komunikacije s ljudima.

Zašto samo nadogradnjom kodiranja nećete postati bolji programer2. Stephen R. Covey “7 navika vrlo učinkovitih ljudi”. Mješavina različitih vještina, od proaktivnosti do mekih vještina, s naglaskom na postizanje sinergije kada mali tim trebate pretvoriti u veliku snagu. Također se lako čita.

Zašto samo nadogradnjom kodiranja nećete postati bolji programer3. Ray Dalio "Principi". Otkriva teme otvorenog uma i proaktivnosti, temeljene na povijesti tvrtke koju je autor izgradio, a kojom je upravljao 40 godina. Brojni primjeri iz života pokazuju koliko čovjek može biti pun predrasuda i ovisan i kako ih se riješiti.

Zašto samo nadogradnjom kodiranja nećete postati bolji programer4. David Allen, “Getting Things Done”. Obavezna literatura za učenje samoorganizacije. Nije tako lako čitati, ali pruža opsežan skup alata za organiziranje života i poslova, detaljno ispituje sve aspekte i pomaže vam da odlučite što točno trebate. Uz njezinu pomoć izgradio sam vlastiti sustav koji mi omogućuje da uvijek obavim najvažnije stvari, a da ne zaboravim na ostalo.

Morate shvatiti da samo čitanje nije dovoljno. Možete progutati barem knjigu tjedno, ali učinak će trajati nekoliko dana, a onda će se sve vratiti na svoje mjesto. Knjige treba koristiti kao izvor savjeta koji se odmah provjerava u praksi. Ako to ne učinite, sve što će vam oni dati jest malo proširiti vaše horizonte.

Izvor: www.habr.com

Dodajte komentar