Сам я на эту удочку попался случайно и безо всякого умысла коллеги.
Я пришел работать perl-программистом в одну известную сетевую игру. Хотя до этого работал системным аналитиком, в т.ч. по высоконагруженным системам. Но системные аналитики в геймдеве исторически не востребованы. А мне хотелось посмотреть на игру, в которой я сам зависал, «изнутри».
Мои профессиональные данные на собеседовании обсуждались чисто формально. Я был знаком с ведущим программистом и главным локомотивом проекта. Назовём его «М».
В том числе, мы с ним часто общались на профессиональные темы. Поэтому на собеседовании М., в основном, рассказывал какие соискатели приходили до меня, и как они талантливо фейлили тесты. На единственный вопрос заданный мне по теме, я сказал, что сложные регэкспы зло, а люди, дающие их на собеседовании, провокаторы. Эта же задача решается двумя сплитами с простыми регэкспами. М. это вполне устроило.
Вот разговор с руководством затянулся. Большую часть времени меня пугали, какой сложный человек М. и как мне тяжело будет с ним работать. Я дипломатично кивал и улыбался (вспоминал истории рассказанные М., они действительно были забавны). Объяснять же очевидные для меня и (для М.) вещи людям, не разбирающимся в программистских тараканах, было не совсем этично.
Тараканы у М. были очень крупные, но для меня безопасные. Просто М. терпеть не мог два типа людей: тех кто мешал ему работать и людей некомпетентных. Притом вторых сильнее: они физически вызвали у него такую же реакцию, как у меня звук пенопласта по стеклу.
И было почему: М. был (и, я уверен, остался) реально крут. Я могу вспомнить только одного человека, с ним сравнимого. А по скорости мышления и объёму контролируемого кода М. до сих пор мой top-1. Его работоспособности можно было удивляться. Но самое главное, что меня восхищало – его отношение к поставленной задаче.
В этом он напоминал легендарного кота моего знакомого. Легендарность котом была завоевана в отношении к Еде. Он никогда не играл с Едой, не ходил вокруг Еды с загадочным видом, не относил Еду в удобное место. Он просто подбегал к Еде по кратчайшей траектории и начинал есть с ближайшего к нему краю. При этом если Еда была живой, то алгоритм не менялся. Еду ели с того места за которое поймали, не заморачиваясь, что Еда пищит и вырывается. Если всю Еду за один раз съесть не получалось, то кот просто засыпал с Едой во рту и, проснувшись, незамедлительно продолжал есть с того же места.
М. работал именно так. Он мог отвлечься недолго перед работой, но дальше… Ну, вы поняли.
Игрушка, над которой мы работали, была известна не только заоблачными ценами на донат и огромным дружным комюнити. Но и адскими лагами. Спроси посреди ночи любого игрока: с чем у него ассоциируется число 503 – ответ будет предсказуем: Service Unavailable. Я как спец по нагруженным системам, ессно, поинтересовался, нет ли какого известного узкого места. К моему удивлению оно было.
От предыдущего разработчика осталась система шаблонов, построенная с runtime-парсером на RegExp. Как она тормозила можно себе представить. Как она тормозила в FCGI, можно себе представить, понимая как работает FCGI (или другая асинхронная система).
Вот тогда я и услышал фразу: и «я не знаю, что тут можно сделать». От М..
Меня это завело. Но задача предсказуемо не решалась в лоб. Формат шаблонов заметно отличался от гототовых библиотек и просто написать конвертер на тех же регэкспах, не прокатывало. А шаблонов было под две сотни. И все их перебивать руками грустно. В итоге, решили прикрутить Template Toolkit к наиболее уязвимому месту — странице инфы об персонаже. Имевшей адский шаблон и кушавшей 25% ресурсов серверов. А в дальнейшем перепилить шаблоны по ходу пьесы.
Тут я как раз подхватил жесткую ангину, не успев толком войти в тему. Валяясь дома, я взял старый парсер и отломав от него хвост, приделал новый. Теперь он не собирал страницу, а превращал её в синтаксическое дерево. Естественно, это обеспечивало полную совместимость. Теперь при старте FCGI или первом обращении к шаблону мы получали дерево. А для необходимости рендера, скармливали дерево и данные процедуре, которая работала в 7 раз быстрее изначальной катавасии (на среднем шаблоне). Дальнейшим шагом было написание компилятора дерева в perl-код, что дало производительность ещё в 6 раз большую. Процесс обслуживающий многострадальный inf.pl затерялся во втором десятке top'а.
Если задать вопрос: мог ли М. решить эту задачу сам? Думаю да. Просто его больше интересовала боёвка игры. И «я не знаю, что можно сделать» было оправданием нежелания разбираться в скучных для него вещах. В принципе, задача чисто инженерная, а я как аналитик просто знал, как ее решить. Когда М. был бы вынужден отвлечься от обдумывания глобальной переделки магии в игре и вгружаться в скучные шаблоны. Было еще несколько инженерных задач, где я высказывал идею, а М. реализовывал их буквально за время пока я ходил покурить и обдумать более детальную реализацию.
В любом случае мне было приятно решить «нереальную» задачу, а М. оттого, что в команде появился хороший программист (и что ему не надо решать «вспомогательные задачи»).
На этом можно было закончить историю. Если бы не «В».
В. сидел рядом с М. и мешал смотреть в окно. Потому, что если М. поворачивал к окну голову, то при этом он видел В… А это несказанно портило М. настроение. Нельзя сказать, что В. был ужасающе некомпетентен. Чего у него нельзя было отнять, так это желание сделать работу хорошо.
Из-за этого он работал крайне медленно, заморачиваясь на мелких деталях и бесподобно лажая в главном. Обычно В. поручали работу, которую руководство считало нужной, а М. бесполезной или вредной. В. не знал осечек. Он находил простые, надежные и в тоже время неожиданные способы уронить сервер, или организовать глобальную дыру в безопасности. В крайнем случае, просто сделать что-то почти стабильно работающее на тестовом сервере и стабильно не работающее на продакшене.
Ситуацию усугубляло то, что В. был флегматик. Глаза у него почти никогда не горели. Работать он начинал только после пары перекуров и нескольких волевых попыток обреченно собраться с мыслями. Также он безропотно сносил как издевательские разносы М., так и мои попытки доходчиво объяснить ему косяки.
Но, в один прекрасный день, объясняя ему простое (для меня) возможное решение поставленной задачи, я посмотрел в начинающие мутнеть глаза и решил схулиганить. Заявив: да, вот такой есть алгоритм, но я не представляю, как его тут можно применить.
Сработало. Хотя В. привычно ушел курить и собираться с мыслями, но поступь его была твердой. Вернулся он раньше обычного и работал более целеустремленно. А главное, на насмешки М. ( следовавшие почти каждый раз когда М. случайно поворачивался к окну) В. лишь загадочно улыбался.
Тем временем, у меня начались разногласия с владельцами компании не связанные с программированием. В итоге я уволился.
Через некоторое время мы снова работали с М. в одной компании. И как-то разговор зашёл про В… О котором, М. отозвался с реальным уважением, мол, взялся за ум и вообще молодец. Хотя то, что В. молодец я уже знал и сам. В. вытащил проект, которым занимался (околоигровая блогосфера) на весьма приличный уровень. Хотя и М. и я считали это проект мертворождённым.
Не знаю, повлияло ли на В. мое «признание». Или просто «пришло время» раскрыться. Но я помню свои ощущения от фразы «я не знаю, как это сделать». И пусть я хвастун, но мне кажется, что это сработала именно моя уловка.
Комментарии (32)
bsisoft
15.04.2016 07:34+3Спасибо за статью! К сожалению прием работает не всегда, иногда попадаются крепкие ребята
inf2k
15.04.2016 08:21+14Просто программист В. мешал работать вам, а сам он начал работать когда ушли те кто мешал работать ему.
Ogi
15.04.2016 11:06+2Если называть вещи своими именами, вы применили к В. психологическую манипуляцию и испытали от этого чувство власти над другим человеком и большое удовлетворение. Непонятно только, зачем нужно было писать об этом на Хабр. Предлагаете руководителям в сфере IT взять на вооружение подобные манипулятивные приёмы?
alekseyefremov
15.04.2016 11:39+11Вы открыли для себя применение типичной женской уловки в новой сфере! Имхо.
Neuronix
15.04.2016 18:06-3Поставил под x64 win7, запустил — закрывается без слов :) Запуск под админом — на секунду появляется синее окошко и так же без слов исчезает. В трее тоже.
Frimko
15.04.2016 19:17+5Да там один гадюшник был однако. Статейный А. просто не может терпеть людей больше знающих чем он сам. И переводил качество в кол-во. Ну и автор просто симпатизирует А., отрицая мнение с другой стороны. Тему психологического анализа автора, можно описывать и дальше, исходя из его статьи. Ведь большинству надо, чтобы их погладили по головке и похвалили.
Статья однобока и не раскрыта, вообще не понятно, что она на хабре забыла, ей лучше в гигтаймсе.mclander
15.04.2016 22:27Знаете, топик не о том, где был гадюшник и клоунадство.
Кстати, А. в истории нет. Есть я, В. и М… Там были ещё персонажи, но на эту историю они не влияли. Хотя были свидетелями некоторых моментов. Кстати, один из них отписался в комментариях.
Опять же. Не скрываю, что данная история моя и только моя интерпретация некоторых событий, которые могли иметь место в определённом времени/пространстве. Насколько она верная — не знаю, два случая — не достаточны для статистически достоверной выборки;) Поэтому статья носит не научный, а скорее развлекательный характер.
Кстати, что меня больше всего удивляет — где комментарий: «О! Так у меня же такой же кот!»?
silencer
16.04.2016 02:27+1многострадальный info.pl
inf.pl же, без оmclander
16.04.2016 17:31Вы нашли пасхалку:) При финальной вычитке обнаружил очепятку (статью набирал на телефоне в метро, а прогнозирование такое прогнозирование).
Но решил не трогать, для непосвящённых — более понятно, а посвященные… был интерес, догадаются ли)
Поправил текст)
Seboreia
19.04.2016 14:53+1На самом деле почти всем людям, которые так говорят, просто лень этим заниматься. И благих помыслов «обучить» коллег у них нет
pewpew
Знаем мы этот проект.
А статья шикарная. Читал на одном дыхании.
aphonin
«как решить задачу, что бы мотивировать новичка.» «чтобы» пишется слитно!
mclander
fixed