Я не знаю як це зробити! Чесно-чесно

Це стаття про простому прийомі мотивації молодого спеціаліста. Якщо коротко: сильний фахівець зізнається, що не знає як вирішити завдання, що б мотивувати новачка. Про пару випадків з життя під катом.

Сам я на цю вудку попався випадково і без усякого умислу колеги.

Я прийшов працювати perl-програмістом в одну відому мережеву гру. Хоча до цього працював системним аналітиком, в т. ч. за высоконагруженным систем. Але системні аналітики в геймдеве історично не затребувані. А мені хотілося подивитись на гру, в якій я сам зависав, «зсередини».

Мої професійні дані на співбесіді обговорювалися суто формально. Я був знайомий з провідним програмістом і головним локомотивом проекту. Назвемо його «М».

В тому числі, ми з ним часто спілкувалися на професійні теми. Тому на співбесіді М., в основному, розповідав які здобувачі приходили до мене, та як вони талановито фейлили тести. На єдине питання заданий мені по темі, я сказав, що складні регэкспы зло, а люди, що надають їх на співбесіді, провокатори. Ця ж завдання вирішується двома сплитами з простими регэкспами. М. це цілком влаштувало.

Ось розмова з керівництвом затягнувся. Велику частину часу мене лякали, який складний людина М. і як мені важко буде з ним працювати. Я дипломатично кивав і усміхався (згадував історії розказані М., вони дійсно були кумедні). Пояснювати ж очевидні для мене (для М.) речі людям, які не розуміються в програмістських тарганів, було не зовсім етично.

Таргани у М. були дуже великі, але для мене безпечні. Просто М. терпіти не міг два типи людей: тих хто заважав йому працювати і людей некомпетентних. Притому друге сильніше: вони фізично викликали у нього таку ж реакцію, як у мене звук пінопласту по склу.

І було чому: М. був (і, я впевнений, залишився) реально крут. Я можу згадати тільки одну людину, з ним можна порівняти. А по швидкості мислення і обсягом контрольованого коду М. досі мій top-1. Його працездатності можна було дивуватися. Але найголовніше, що мене захоплювало – його відношення до поставленого завдання.

У цьому він нагадував легендарного кота мого знайомого. Легендарність котом була завойована у відношенні до Їжі. Він ніколи не грав з Їжею, не ходив навколо Їжі з загадковим виглядом, не відносив Їжу в зручне місце. Він просто підбігав до Їжі по найкоротшій траєкторії і починав їсти з найближчого до неї краю. При цьому якщо Їжа була живою, то алгоритм не змінювався. Їжу їли з того місця за яку зловили, не заморочуючись, що Їжа пищить і виривається. Якщо всю Їжу за один раз з'їсти не виходило, то кіт просто засинав з Їжею в роті і, прокинувшись, негайно продовжував їсти з того ж місця.

М. працював саме так. Він міг відволіктися недовго перед роботою, а далі… Ну, ви зрозуміли.

Іграшка, над якою ми працювали, була відома не тільки захмарними цінами на донат і величезним дружним комюніті. Але і пекельними лагами. Запитай посеред ночі будь-якого гравця: з чим у нього асоціюється число 503 – відповідь буде передбачуваний: Service Unavailable. Я як спец по навантаженим систем, звісно, поцікавився, чи немає якогось відомого вузького місця. На мій подив воно було.

Від попереднього розробника залишилася система шаблонів, побудована з runtime-парсером на RegExp. Як вона гальмувала можна собі уявити. Як вона гальмувала у FCGI можна собі уявити, розуміючи як працює FCGI (або інша асинхронна система).

Ось тоді я і почув фразу: «я не знаю, що тут можна зробити». Від М…

Мене це завело. Але завдання передбачено не вирішувалася в лоб. Формат шаблонів помітно відрізнявся від гототовых бібліотек і просто написати конвертер на тих же регэкспах, не виходило. А шаблонів було під дві сотні. І всі їх перебивати руками сумно. У підсумку, вирішили прикрутити Template Toolkit до найбільш уразливому місцю — сторінці інфи про персонажа. Мала пекельний шаблон і кушавшей 25% ресурсів серверів. А надалі перепиляти шаблони по ходу п'єси.

Тут я як раз підхопив жорстку ангіну, не встигнувши толком увійти в тему. Валяючись будинку, я взяв старий парсер і відламавши від нього хвіст, приробив новий. Тепер він не збирав сторінку, а перетворював її в синтаксичне дерево. Природно, це забезпечувало повну сумісність. Тепер при старті FCGI або першому зверненні до шаблону ми отримували дерево. А для необхідності рендера, згодовували дерево і дані процедурою, яка працювала в 7 разів швидше початкової катавасії (на середньому шаблоні). Подальшим кроком було написання компілятора дерева в perl-код, що дало продуктивність ще в 6 разів більшу. Процес обслуговуючий багатостраждальний info.pl загубився у другому десятку top'а.

Якщо поставити запитання: чи міг М. вирішити цю задачу сам? Думаю так. Просто його більше цікавила боївка гри. І «я не знаю, що можна зробити» було виправданням небажання розбиратися в нудних для нього речі. В принципі, завдання чисто інженерна, а я як аналітик просто знав, як її вирішити. Коли М. був би змушений відволіктися від обмірковування глобальної переробки магії в грі та вгружаться в нудні шаблони. Було ще кілька інженерних задач, де я висловлював ідею, а М. реалізовував їх буквально за час поки я ходив покурити і обміркувати більш детальну реалізацію.

У будь-якому випадку мені було приємно вирішити «нереальну» завдання, а М. від того, що в команді з'явився хороший програміст (і що йому не треба вирішувати «допоміжні завдання»).

На цьому можна було закінчити історію. Якщо б не «В».

Ст. сидів поруч з М. і заважав дивитися у вікно. Тому, що якщо М. повертав до вікна голову, то при цьому він бачив… А це невимовно псувало М. настрій. Не можна сказати, що В. був жахливо некомпетентний. Чого в нього не можна було відняти, так це бажання зробити роботу добре.

З-за цього він працював дуже повільно, заморочуючись на дрібних деталях і незрівнянно лажая в головному. Зазвичай Ст. доручали роботу, яку керівництво вважало потрібної, а М. непотрібною чи шкідливою. В. не знав поразок. Він знаходив прості, надійні і водночас несподівані способи впустити сервер, або організувати глобальну дірку у безпеці. В крайньому випадку, просто зробити що-то майже стабільно працююче на тестовому сервері і стабільно не працює на продакшені.

Ситуацію ускладнювало те, що В. був флегматик. Очі у нього майже ніколи не горіли. Працювати він починав тільки після пари перекурів і декількох вольових спроб приречено зібратися з думками. Також він покірно зносив як знущальні рознесення М., так і мої спроби дохідливо пояснити йому косяки.

Але, в один прекрасний день, пояснюючи йому просте (для мене) можливе рішення поставленої задачі, я подивився в початківці мутніти очі і вирішив схулиганить. Заявивши: так, ось такий є алгоритм, алея не уявляю, як його тут можна застосувати.

Спрацювало. Хоча Ст. звично пішов курити і збиратися з думками, але хода його була твердою. Повернувся він раніше звичайного і працював більш цілеспрямовано. А головне, на глузування М. ( слідували майже кожен раз коли М. випадково повертався до вікна) Ст. лише загадково посміхався.

Тим часом, у мене почалися розбіжності з власниками компанії не пов'язані з програмуванням. У підсумку я звільнився.

Через деякий час ми знову працювали з М. в одній компанії. І якось розмова зайшла про В. Про який, М. відгукнувся з реальним повагою, мовляв, взявся за розум і взагалі молодець. Хоча те, що В. молодець я вже знав і сам. Ст. витягнув проект, яким займався (околоигровая блогосфера) на досить пристойний рівень. Хоча і М. і я вважали це проект мертвонародженим.

Не знаю, чи вплинуло на Ст. моє «визнання». Або просто «прийшов час» розкритися. Але я пам'ятаю свої відчуття від фрази «я не знаю, як це зробити». І нехай я хвалько, але мені здається, що це спрацювала саме моя хитрість.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.