Зошто само надградбата на вашето кодирање нема да ве направи подобар развивач

Зошто само надградбата на вашето кодирање нема да ве направи подобар развивач

Techlead Skyeng Кирил Роговој (flashhhh) дава презентација на конференции во кои зборува за вештините што треба да ги развие секој добар програмер за да стане најдобар. Го замолив да ја сподели оваа приказна со читателите на Хабра, му давам збор на Кирил.

Митот за добар програмер е дека тој:

  1. Пишува чист код
  2. Знае многу технологии
  3. Задачите за кодирање побрзо
  4. Знае еден куп алгоритми и модели на дизајн
  5. Може да рефакторира кој било код користејќи Clean Code
  6. Не троши време на непрограмски задачи
  7. 100% господар на вашата омилена технологија

Вака HR ги гледа идеалните кандидати, а слободните работни места, соодветно, изгледаат и вака.

Но, моето искуство вели дека тоа не е многу точно.

Прво, две важни одрекувања:
1) моето искуство е тимови за производи, т.е. компании со сопствен производ, а не со аутсорсинг; во аутсорсинг сè може да биде многу различно;
2) ако си помлад, тогаш нема да бидат применливи сите совети, а јас да сум на твое место, засега би се концентрирал на програмирање.

Добар развивач: реалност

1: Подобро од просечниот код

Добриот програмер знае како да создаде кул архитектура, да напише кул код и да не прави премногу грешки; Во принцип, тој работи подобро од просекот, но не е во првите 1% специјалисти. Повеќето од најкул програмерите што ги познавам не се толку одлични кодери: тие се одлични во она што го прават, но не можат да направат ништо супер-извонредно.

2: Решава проблеми наместо да ги создава

Да замислиме дека треба да интегрираме надворешна услуга во проектот. Ги добиваме техничките спецификации, ја гледаме документацијата, гледаме дека таму нешто е застарено, разбираме дека треба да поминеме дополнителни параметри, да направиме некои прилагодувања, да се обидеме сето тоа некако да го спроведеме и некој крив метод да работи правилно, конечно, по неколку со денови разбираме дека не можеме да продолжиме вака. Стандардно однесување на програмерите во оваа ситуација е да се врати на бизнисот и да каже: „Јас направив ова и она, овој не работи така, а тој воопшто не функционира, па одете сами да го сфатите. ” Бизнисот има проблем: треба да навлезете во она што се случило, да комуницирате со некого и да се обидете некако да го решите. Почнува расипаниот телефон: „Кажи му, ќе ѝ пишам, види што одговорија“.

Еден добар програмер, соочен со таква ситуација, самиот ќе најде контакти, ќе го контактира на телефон, ќе разговара за проблемот и ако ништо не успее, ќе ги собере вистинските луѓе, ќе објасни сè и ќе понуди алтернативи (најверојатно, има друга надворешна услуга со подобра поддршка). Таквиот развивач гледа деловен проблем и го решава. Неговата задача е затворена кога решава деловен проблем, а не кога ќе наиде на нешто.

3: Се обидува да потроши минимален напор за да постигне максимални резултати, дури и ако тоа значи пишување патерици

Развојот на софтвер во производните компании е скоро секогаш најголемата ставка за трошоци: програмерите се скапи. И добар програмер разбира дека бизнисот сака да го добие максималниот износ на пари со трошење на минимум. За да му помогне, добар развивач сака да го потроши минималниот износ од своето скапо време за да добие максимален профит за работодавецот.

Тука има две крајности. Едната е дека генерално можеш да ги решиш сите проблеми со патерица, без да се замараш со архитектура, без рефакторирање итн. Сите знаеме како ова обично завршува: ништо не функционира, ние го препишуваме проектот од нула. Друго е кога едно лице се обидува да дојде до идеална архитектура за секое копче, поминувајќи еден час на задачата и четири на рефакторирање. Резултатот од таквата работа изгледа одлично, но проблемот е што на деловната страна потребни се десет часа за да се заврши едно копче, и во првиот и во вториот случај, едноставно од различни причини.

Добриот развивач знае како да балансира помеѓу овие крајности. Тој го разбира контекстот и ја донесува оптималната одлука: во овој проблем ќе пресечам патерица, бидејќи ова е код што се допира еднаш на секои шест месеци. Но, во оваа, ќе се мачам и ќе направам сè што е можно поправилно, бидејќи сто нови функции што допрва треба да се развијат ќе зависат од тоа што ќе успеам.

4. Има сопствен систем за управување со бизнисот и е способен да работи на проекти од секаква сложеност во него.

Работа по принципи Добивање на работите – кога ги запишувате сите ваши задачи во некој вид текстуален систем, не заборавате на никакви договори, туркајте ги сите, појавувајте се насекаде на време, знаете што е важно, а што не е важно во моментот, никогаш не губите задачи. Општа карактеристика на таквите луѓе е дека кога ќе се договорите за нешто со нив, никогаш не се грижите дека ќе заборават; а вие исто така знаете дека тие запишуваат сè и нема да поставуваат илјада прашања, чии одговори веќе се дискутирани.

5. Испрашува и појаснува какви било услови и воведи

И овде има две крајности. Од една страна, можете да бидете скептични за сите воведни информации. Луѓето пред да смислите некои решенија, но мислите дека можете подобро и да започнете повторно да разговарате за сето она што ви било пред вас: дизајн, деловни решенија, архитектура итн. Ова губи многу време и за инвеститорот и за оние околу него и има негативно влијание врз довербата во компанијата: другите луѓе не сакаат да донесуваат одлуки бидејќи знаат дека тој човек ќе се врати и ќе скрши сè. Другата крајност е кога инвеститорот ги доживува сите воведни, технички спецификации и деловни желби како нешто врежано во камен и дури кога ќе се соочи со нерешлив проблем, тој почнува да размислува дали воопшто го прави тоа што го прави. Добриот програмер наоѓа и средина тука: тој се обидува да ги разбере одлуките донесени пред или без него, пред задачата да премине во развој. Што сака бизнисот? Дали му ги решаваме проблемите? Дизајнерот на производи излезе со решение, но дали разбирам зошто решението ќе функционира? Зошто раководителот на тимот ја смисли оваа конкретна архитектура? Ако нешто не е јасно, тогаш треба да одите да прашате. Во процесот на ова појаснување, добар програмер може да види алтернативно решение што едноставно никому претходно не му паднало на памет.

6. Ги подобрува процесите и луѓето околу вас

Има многу процеси што се случуваат околу нас - дневни состаноци, состаноци, претреси, технолошки прегледи, прегледи на кодови итн. Еден добар програмер ќе стане и ќе рече: погледнете, ние се собираме и разговараме за истото секоја недела, не разбирам зошто, можеби ќе го поминеме овој час на Contra. Или: трета задача по ред не можам да навлезам во кодот, ништо не е јасно, архитектурата е полна со дупки; Можеби нашиот код за преглед е куц и треба да го рефакторираме, ајде да го рефакторираме состанокот на секои две недели. Или за време на прегледот на кодот, едно лице гледа дека еден од неговите колеги не користи одредена алатка доволно ефективно, што значи дека треба да излезе подоцна и да даде совет. Добриот развивач го има овој инстинкт; тој ги прави таквите работи автоматски.

7. Одличен во управувањето со другите, дури и ако не е менаџер

Оваа вештина добро се поврзува со темата „решавање наместо создавање проблеми“. Честопати, во текстот на конкурсот за кој аплицираме, ништо не пишува за менаџментот, но потоа, кога ќе се соочите со проблем надвор од ваша контрола, сепак треба да управувате со другите на овој или оној начин, да постигнете нешто од нив, доколку заборави - туркајте, бидете сигурни дека тие разбрале сè. Еден добар програмер знае кој што го интересира, може да свика состанок со овие луѓе, да запише договори, да ги прати на опуштеност, да ги потсети на вистинскиот ден, да се увери дека сè е подготвено, дури и ако тој лично не е директно одговорен за оваа задача, но неговиот резултат зависи од нејзината имплементација.

8. Не го доживува своето знаење како догма, постојано е отворен за критики

Секој може да се сети на колега од претходната работа кој не може да направи компромиси со својата технологија и вреска дека сите ќе изгорат во пеколот поради некои погрешни мутации. Добриот развивач, ако работи 5, 10, 20 години во индустријата, разбира дека половина од знаењето му е скапано, а во преостанатата половина не знае десет пати повеќе отколку што знае. И секогаш кога некој не се согласува со него и нуди алтернатива, тоа не е напад на неговото его, туку можност да научи нешто. Ова му овозможува да расте многу побрзо од оние околу него.

Ајде да ја споредиме мојата идеја за идеален развивач со општо прифатениот:

Зошто само надградбата на вашето кодирање нема да ве направи подобар развивач

Оваа слика покажува колку од точките опишани погоре се поврзани со кодот, а колку не се. Развојот во производна компанија е само една третина програмирање, останатите 2/3 имаат малку врска со кодот. И иако пишуваме многу кодови, нашата ефикасност во голема мера зависи од овие „неважни“ две третини.

Специјализација, генерализам и правилото 80-20

Кога човек учи да решава некои тесни проблеми, студира долго и напорно, но потоа ги решава лесно и едноставно, но нема експертиза во сродни области, тоа е специјализација. Генерализам е кога половина од времето за обука се инвестира во областа на сопствената компетентност, а друга половина во сродни области. Според тоа, во првиот случај, едното го правам совршено, а другото лошо, а во вториот, сè правам горе-долу добро.

Правилото 80-20 ни кажува дека 80% од резултатот доаѓа од 20% од напорот. 80% од приходите доаѓаат од 20% од клиентите, 80% од профитот доаѓаат од 20% од вработените итн. Во наставата, тоа значи дека 80% од знаењето го стекнуваме во првите 20% од времето поминато.

Постои идеја: кодерите треба само да кодираат, дизајнерите треба само да дизајнираат, аналитичарите треба да анализираат, а менаџерите треба само да управуваат. Според мое мислење, оваа идеја е токсична и не функционира многу добро. Не станува збор за тоа дека секој мора да биде универзален војник, туку за заштеда на ресурси. Ако развивачот разбира барем малку за управување, дизајн и аналитика, тој ќе може да реши многу проблеми без да вклучува други луѓе. Ако треба да направите некаква функција и потоа да проверите како корисниците работат со неа во одреден контекст, за што ќе бидат потребни две SQL прашања, тогаш е одлично да можете да не го одвлекувате вниманието на аналитичарот со ова. Ако треба да вградите копче по аналогија со постоечките, и ги разбирате општите принципи, можете да го направите тоа без да вклучите дизајнер, а компанијата ќе ви се заблагодари за тоа.

Вкупно: можете да потрошите 100% од вашето време проучувајќи вештина до крај, или истото време можете да го поминете на пет области, израмнувајќи до 80% во секоја. Следејќи ја оваа наивна математика, можеме да стекнеме четири пати повеќе вештини во исто време. Ова е претерување, но ја илустрира идејата.

Сродните вештини може да се обучат не за 80%, туку за 30-50%. Откако ќе поминете 10-20 часа, значително ќе се подобрите во сродни области, ќе стекнете многу разбирање за процесите што се случуваат во нив и ќе станете многу поавтономни.

Во денешниот ИТ екосистем, подобро е да имате што повеќе вештини и да не бидете експерт за ниту една од нив. Затоа што, прво, сите овие вештини брзо бледнеат, особено кога станува збор за програмирање, и второ, затоа што 99% од времето ги користиме не само основните, но секако не и најсофистицираните вештини, а тоа е доволно дури и во кодирањето, дури и во кул компании.

И конечно, обуката е инвестиција, а диверзификацијата е важна во инвестициите.

Што да се научи

Значи, што да се научи и како? Типичен програмер во силна компанија редовно користи:

  • комуникација
  • самоорганизација
  • планирање
  • дизајн (обично код)
  • а понекогаш и менаџмент, лидерство, анализа на податоци, пишување, регрутирање, менторство и многу други вештини

И практично ниту една од овие вештини не се вкрстува со самиот код. Тие треба да се подучуваат и да се надградуваат посебно, а доколку тоа не се направи, тие ќе останат на многу ниско ниво, што не дозволува ефективно да се користат.

Во кои области вреди да се развивате?

  1. Меки вештини се сè што не се однесува на притискање на копчињата во уредникот. Така пишуваме пораки, како се однесуваме на состаноците, како комуницираме со колегите. Сето ова се чини дека се очигледни работи, но многу често се потценети.

  2. Систем за самоорганизација. За мене лично ова стана суперважна тема изминатава година. Меѓу сите кул ИТ работници што ги познавам, ова е една од најразвиените вештини: тие се суперорганизирани, секогаш го прават она што го кажуваат, точно знаат што ќе прават утре, за една недела, за еден месец. Неопходно е да изградите систем околу себе во кој се евидентираат сите работи и сите прашања; ова во голема мера ја олеснува самата работа и многу помага да комуницирате со другите луѓе. Чувствувам дека во текот на изминатата година, развојот во оваа насока ме подобри многу повеќе отколку подобрувањето на моите технички вештини; почнав да работам значително повеќе работа по единица време.

  3. Проактивни, со отворен ум и планирање. Темите се многу општи и витални, не се единствени само за ИТ и секој треба да ги развива. Проактивноста значи да не се чека сигнал за да се преземе акција. Вие сте извор на настани, а не реакции на нив. Отвореноста е способност објективно да се третираат сите нови информации, да се процени ситуацијата изолирано од сопствениот светоглед и старите навики. Планирањето е јасна визија за тоа како денешната задача го решава проблемот за неделата, месецот, годината. Ако ја гледате иднината надвор од одредена задача, многу е полесно да го направите она што ви треба, а не да се плашите после време да сфатите дека е потрошено. Оваа вештина е особено важна за кариера: можете успешно да постигнувате резултати со години, но на погрешно место и на крајот да го изгубите целиот акумулиран багаж кога ќе ви стане јасно дека се движите во погрешна насока.

  4. Сите сродни области до основното ниво. Секој има свои специфични области, но важно е да се разбере дека со трошење 10-20 часа време на израмнување на некоја „странска“ вештина, можете да откриете многу нови можности и точки на контакт во вашата секојдневна работа, а овие часови може да биде доволно до крајот на кариерата.

Што да прочитате

Има многу книги за самоорганизирање; тоа е цела индустрија каде што некои чудни момци пишуваат збирки совети и собираат обуки. Во исто време, нејасно е што тие самите постигнале во животот. Затоа, важно е да се стават филтри на авторите, да се погледне кои се тие и што имаат зад себе. На мојот развој и гледиште најмногу влијаеја четири книги, сите на еден или друг начин поврзани со подобрување на вештините опишани погоре.

Зошто само надградбата на вашето кодирање нема да ве направи подобар развивач1. Дејл Карнеги „Како да стекнете пријатели и да влијаете врз луѓето“. Култна книга за меки вештини, ако не знаете од каде да започнете, изборот на неа е опција за победа-победа. Изграден е на примери, лесен е за читање, не бара многу труд за да се разбере она што го читате, а стекнатите вештини може веднаш да се применат. Генерално, книгата ја опфаќа темата за комуникација со луѓето.

Зошто само надградбата на вашето кодирање нема да ве направи подобар развивач2. Стивен Р. Кови „7 навики на високо ефективни луѓе“. Мешавина од различни вештини, од проактивност до меки вештини, со акцент на постигнување синергија кога треба да претворите мал тим во огромна сила. Лесно е и за читање.

Зошто само надградбата на вашето кодирање нема да ве направи подобар развивач3. Реј Далио „Принципи“. Открива теми за слободоумност и проактивност, врз основа на историјата на компанијата што авторот ја изградил, со која управувал 40 години. Многу тешко добиени примери од животот покажуваат колку човекот може да биде предрасуден и зависен и како да се ослободи од тоа.

Зошто само надградбата на вашето кодирање нема да ве направи подобар развивач4. Дејвид Ален, „Завршување на работите“. Задолжително читање за учење самоорганизирање. Не е толку лесен за читање, но обезбедува сеопфатен сет на алатки за организирање на животот и работите, детално ги испитува сите аспекти и ви помага да одлучите што точно ви треба. Со нејзина помош изградив сопствен систем кој ми овозможува секогаш да ги правам најважните работи без да заборавам на останатите.

Мора да разберете дека само читањето не е доволно. Можете да голтате барем една книга неделно, но ефектот ќе трае неколку дена, а потоа сè ќе се врати на своето место. Книгите треба да се користат како извор на совет кој веднаш се тестира во пракса. Ако не го направите ова, тогаш сè што ќе дадат е некакво проширување на вашите хоризонти.

Извор: www.habr.com

Додадете коментар