Подошло время искать мне новую работу, но прокрастинация никак не отпускает. Хабр, Ютубчик, Твич, Пикабу, Харстоун, Хотс, новости, электронная книжка, вот это всё по кругу и много раз за день. Я понимаю тленность такого времяпрепровождения, и решил попытаться осмыслить, в чём же дело? Я ведь люблю программирование, а если за это ещё и деньги платят, приятнее вдвойне. Почему я прямо сейчас не иду верстать обновлённое резюме, о чём думаю каждое утро, и рассылать во все концы, а пишу эту заметку?
Вероятно, часть проблемы в подсознательных страхах. Страхи — это неудачный опыт. Страхи заставляют избегать ситуаций, которые принесут дискомфорт. Этакий природный механизм против ходьбы по одним и тем же граблям. Если два раза засунуть пальцы в розетку, то, конечно, током ударит оба раза. Но с жизненными ситуациям это не всегда работает в силу их сложности и вариативности. Можно замечтаться, забыть дописать «WHERE …» в SQL-запрос на удаление и очистить таблицу на боевом сервере (true story), но это не повод целиком уйти в ORM и заречься не писать больше никогда «сырых» запросов.
То есть в некоторых случаях механизм откровенно вредный.
Как предлагают некоторые психологические техники, следует страхи обрисовать, зафиксировать и в дальнейшем подавлять их. Даже не усилием воли, а чётким пониманием, что страхи эти в основном беспочвенные. Либо провести работу над собой и избавиться от причины страха. Рейден рассказывает про страхи.Итак, что же меня тревожит в отношении работы?
№1: страх показаться некомпетентным¶
Собеседование предваряет устройство на любую работу. На собеседовании надо показать себя с лучшей стороны. Неудачные собеседования больно бьют по самооценке и прочно оседают в подсознании, невольно проецируясь на все последующие разы.Рептиль вот не побоялся, да был побит.Не могу припомнить откровенно дебильных собеседований, а их у меня было не два и не три за без малого десять лет офисной работы, кроме, пожалуй, одного. Я ходил в местную контору среднего пошиба на позицию Python/Django-разработчика. О чём стоит спросить рядового кандидата в веб-разработчики? Ну, об устройстве протокола HTTP, об авторизации, сессиях, кэшировании. О базах данных, о ключах-индексах. Может быть, о компонентах конкретного фреймворка, если работа заточена на него. Короче, про фундаментальные штуки, без понимания которых сделать оптимально не получится.
А вот примерно такие вопросы задавал мне тамошний парнишка (что удалось вспомнить):
- Что делает функция zip? Это сейчас я знаю, потому что она мне частенько потом пригождалась в решении головоломок на CheckiO. Тогда вот не знал, ибо за три года веб-программирования она была нужна мне ровно ноль раз. Серьёзно, если вам надо попарно перебирать N списков, заботиться при этом о сортировке и правильном порядке элементов, может, это слишком хрупко, и у вас проблема со структурой данных? Даже не могу с ходу придумать, где бы мне это пригодилось в production-коде.
- Как получить все возможные комбинации длиной N элементов списка? Нет-нет, свой код писать не надо, есть же функция в стандартной библиотеке. Как, не знаете? Ну это же itertools.permutations! По правде сказать, на предшествующей этому собеседованию работе мы её и впрямь использовали не помню уже для чего (букмекерское). Но всё-таки это очень специфичная и явно не повседневная вещица, чтоб знать о ней наизусть.
- Как обновить queryset? Да, метод update. А параметры у него какие? А удалить? А там какие параметры?
Парнишка к концу опросника сидел с сочувствующим видом, мол, и на половину вопросов ответить не могу. На моё искреннее изумление, что соответствующие мануалы гуглятся за три минуты, мне ответили, что эти три минуты иной раз слишком ценны, чтобы их так потратить. Это было удивительно, ведь время скомпилированных в .chm справочников давно прошло, а в интернет не надо выходить по модему с поминутной оплатой. Сейчас ведь все справочники и типовые проблемы находятся в первых ссылках поисковой выдачи.
В общем, после небольшого совещания мне посоветовали «почитать книжек» и приходить как-нибудь в другой раз. Конечно, туда я больше не ходил.
Рядом с этим страхом идёт синдром самозванца. Это когда ты вроде хорош, но никак не можешь взять в толк, как это так образовалось, сваливаешь всё на везение, и совсем-совсем не веришь, что сложный путь прошёл благодаря только своим силам. Как следствие, например, — боязнь запросить высокую зарплату. Однажды меня с каверзой спросил один коллега: «А ты вот можешь свою зарплату обосновать? денежки-то неплохие». Нет, не могу, хочу такую и всё, и рынок мне помощник, а какой-никакой опыт за плечами — адвокат.
Далее, страх подпитывают статьи на Хабре, где разные жители программерского Олимпа описывают, как они круто выступили на очередной конференции, внедрили enterprise-технологию на тысячу серверов и написали сортировку пузырьком с завязанными за спиной руками. Глядя на них, явственно ощущаешь бренность собственного бытия, всей этой возни с мелочёвкой на сотню-другую пользователей. И не читать нельзя — упустишь тренд. Остаётся успокаивать себя, что таких спецов не так уж и много, что путь их был тернист, и не всем под силу его преодолеть. Ну и мудрости от них набираться, конечно.
Как же бороться с этим страхом? Тупо находить вакансии со списком знакомых ключевых слов и смело идти собеседоваться. Ключевое слово здесь — «ключевых». Однажды меня позвали стать Java-разработчиком (!), и, после того как я в течение часа объяснял пяти человекам, что я вообще-то не сварщикбольше по Python’у, и в резюме об этом чёрным по белому написано, отпустили меня восвояси с обещанием позвонить. Не позвонили, конечно, даром что контора масштаба страны.
Если бы мне сейчас попалась на глаза вакансия с моей предыдущей работы, я бы абсолютно точно засомневался, осилил бы я все эти библиотеки. Однако осилил, и как-то оно там даже крутилось. Не стыдно не знать тонкостей, всё же несколько лет работы с одними и теми же инструментами не проходят даром. Рядовое веб-программирование — это не космические технологии. Набраться смелости — и вперёд.
№2: страх оказаться некомпетентным¶
Веб-разработка нынче — бурно кипящий океан. Золотые стандарты постоянно меняются с эволюцией возможностей и техник. Несовершенство и примитивизм базовых технологий породило целую кучу разных надстроек и костылей: CSS-препроцессоров, новых языков с собственным синтаксисом, конвертируемых в JS, транспайлеров, систем сборки, тестовых окружений, да тысячи их. Изменились и сами базовые стандарты: HTML получил кучу новых тегов, CSS — новые механики, JS — новый синтаксис и встроенные инструменты.Джонни Кейдж тоже боялся не справиться.Когда я устраивался на первую работу, Prototype соперничал с jQuery. Года через три концепция сместилась от ручного управления DOM к автоматически вычисляемым свойствам, мы пользовались Knockout.js. Ещё через три или четыре опять всё перевернулось, и я уже что-то пробовал писать на React, оборачивать в модули для RequireJS и собирать через Gulp. А прямо сейчас это опять неактуально (ну, кроме React), и я даже затрудняюсь сказать, чем пользуются нынче серьёзные фронтендеры.
По ощущениям, правда, прогресс в настоящее время притормозился. На Хабре уже не появляются каждый месяц анонсы новых клёвых библиотек. Сложилось впечатление, что в последние пару лет React и Angular вытеснили остальное и стали мейнстримом надолго. На Python-бекенде тоже вроде как тишь да благодать. Tornado вот стал legacy, команда Django продолжает выпускать релизы без излишне революционных идей.
Такое буйство технологий накладывает долг постоянно следить за ними. Чуть-чуть зазевался, и оказался за бортом. Оно же и создаёт страх выбрать неудачную технологию или банально собирать свой велосипед, оказавшись не в теме.
Технология (язык, библиотека) может оказаться бесперспективной, либо недостаточно подходящей, либо переусложнённой. То есть такой, вместо которой следовало бы взять другую подобную, но намного лучше. Выбор всегда мучителен. Даже если у тебя есть на примете хорошо знакомый инструмент, ты не можешь быть уверен, что уже не сделали какой-нибудь более клёвый, которым все пользуются и нахваливают.
Например, когда-то на одном проекте мы взяли для шаблонизаторства jQuery Templates. И — прогадали, плагин оказался полным шлаком, авторы его разработку свернули, и распространения он не получил. Зато надёжно прописался в наших шаблонах, и выковырять его оттуда означало перелопатить кучу кода. К счастью, тот проект, похоже, почил в бозе, и можно больше не мучаться угрызениями совести.
Короче, страх №2 — он опять про неуверенность в себе. Якобы ты что-то не знаешь, не умеешь, сомневаешься в выборе. Как лечить? Пользоваться проверенными временем инструментами. Не тащить в production самые свежие технологии, выждать полгода-год, пока они устаканятся или уйдут из моды прямиком в небытие. Щупать свежачок на pet-проектах или во второстепенных разработках. Не гнаться за модой, но и не увязать в болоте. Ну или успокоиться в своём незнании и фигачить одно и то же годы подряд. Таких ребят я тоже знавал.
№3: страх быть бесполезным¶
То ли такова специфика веб-разработки, то ли это тенденция нашей эпохи, то ли просто мне так везло, но из семи или восьми проектов, в которых мне довелось участвовать, ныне хоть в каком-то виде существуют всего два. Проекты были в своё время перспективные, вполне серьёзные. А сколько других крупных сайтов остались только как упоминание в archive.org?
Вероятно, в других направлениях продукты живут дольше, будь то бухгалтерская конфигурация 1С или компьютерная игра. Хотя где сейчас та бездна игр на Flash?…Здоровяк Горо в итоге оказался бесполезным.Бесполезность бывает как минимум двух видов: а) когда проектом не пользуется вообще никто и б) когда проектом не пользуешься именно ты. У приложения для Android, что я писал в последний раз, было порядка одной установки из маркета в месяц. Без малого два года я над ним проработал, получил кучу денег, а в итоге оно оказалось почти никому не нужным. На месте заказчика я бы лучше нанял второго разработчика под iOS, где дела шли повеселей. Ну, это дело хозяйское.
Проекты второго типа бесполезности для меня — это всякие маркетинговые сайтики-зазывалы, банальные каталоги недвижимости или товаров, писать которые — сплошная скука. В них нет оригинальности, они пытаются дублировать веб-мастодонтов, а иной раз ещё и воровать у них контент. Парсеры чужих сайтов мне тоже доводилось писать, и это, пожалуй, нелицеприятная страница моего резюме.
А совсем бесполезных проектов не бывает, конечно. Даже самый дурацкий лендинг с одним-единственным полем ввода для электронной почты даёт заказчику возможность прощупать аудиторию, порекламироваться, собрать базу для спама в конце концов. Кто-то должен запрограммировать и такое.
На встрече, посвящённой десятилетию нашего школьного выпуска, мы завели тетрадку, куда все желающие могли записать, чего бы они хотели достичь в следующие десять лет. «Поучаствовать в проекте для миллиона человек», вот что я тогда пожелал. Сейчас думаю, фиг с ним, с миллионом, можно делать вещи много более приземлённые и вместе с тем интересные. Так, приложение для отслеживания на карте местных автобусов и троллейбусов до сих пор свою актуальность не потеряло за четыре-то года, и пользуются им ежедневно 400-500 человек.
Как бороться с этим страхом? Смириться. Понять, что есть профессий несметно, продукты которых живут ещё короче, будь то выпечка булочек или вождение маршрутки. От этого они не становятся менее нужными. Ну а если хочется творить на года, надо идти в мебельщики или строители, а то и в скульпторы. Активная разработка подразумевает обязательный рефакторинг: требования меняются, архитектура пересматривается под нагрузками, написанные вчера куски кода безжалостно выкидываются. Рутина никуда не денется. В качестве компенсации, к счастью, есть возможность выбирать себе сферу такую, чтоб не портить далее карму. Без скама, спама, воровства контента.
№4: страх попасть в неволю¶
Восьмичасовой рабочий день от звонка до звонка — страшная штука. Добавить ещё дорогу туда-обратно, обеденный перерыв с едой фактически «на бегу» в малокомфортной обстановке, последующую борьбу со сном с полным желудком. Не знаю, как у других программистов, но мне сохранять истинную работоспособность все восемь часов подряд действительно трудно. Самые продуктивные часы — с утра, пока голова свежая. В напряжённые дни к вечеру в голову как будто напихивают вату, накатывает отупение, и уже опасно что-либо писать новое, чтоб на следующий день не изумляться себе же. А если ещё и нерабочая обстановка враждебная… но об этом будет отдельный пост.Соня Блейд всё-таки попалась.Пять дней в неделю ты фактически не принадлежишь себе. Час-второй в конце рабочего дня — отсидка, свежие мысли уже не идут. Редкий случай, когда попадается и не отпускает интересная задачка, и вы с коллегами её мозгуете. Дома по вечерам голова слишком тяжёлая, чтобы заняться своим pet-проектом. Остаётся только поужинать и лечь на диван, смотреть очередной сериал. Слишком праздно.
В течение дня частенько возникает нужда сходить в банк, больницу, спортзал, специализированный магазин, на вождение в автошколу и на доставку мебели в квартиру. Да мало ли организаций, работающих всё по тому же расписанию. В этом смысле очень здорово, что многие конторы позволяют своим программистам выбрать график самостоятельно в разумных пределах и отлучаться в течение дня. Чёткие рамки дисциплинируют и помогают не разболтаться в моменты рутины.
Сейчас, когда я целый день нахожусь дома, мне очень комфортно. Можно слушать музыку, можно ходить от окна к окну, можно рассуждать вслух, можно перекусить или вздремнуть полчаса. Можно выйти на прогулку в магазин. Можно оборудовать себе уютное рабочее местечко с хорошим освещением и оборудованием.
Что для меня некомфортно, так это отпрашиваться с работы. Внутренний голос постоянно говорит мне в такие моменты: «А не охренел ли ты? ребята вот работают, а ты свинтить решил». Я его слушаюсь и смущаюсь. Это очень неудобно — кого-то просить. Но почему вообще просить надо? Если работа сделана, дедлайны не подстерегают, почему бы и не взять перерыв. И я наблюдал таких смелых ребят, что с расслабленной улыбкой просто брали и ехали по своим делам. Но мне почему-то это действительно сложно.
Как бороться с этим страхом? Заведомо искать удалённую работу, например. Что бы изменилось, проработай я последние два года из дома? Ну, одичал бы слегка. В обсуждение архитектурных решений меня всё равно не приглашали, просто ставили перед фактом, как надо сделать. Парного программирования, опять же, не практиковали — у каждого была своя область разработки.
В удалённой работе есть большой минус — одиночество. Разговор с коллегами по Скайпу или в Слаке не заменит живое общение с глазу на глаз. Не поможет оперативно быть в курсе проблем или нововведений. Человек — существо социальное, и против естества не попрёшь. Опять же проще сохранять фокус на работе, когда вокруг все так же сидят и фигачат код. Но, впрочем, длительного опыта удалённой работы у меня пока нет, могу только предполагать.
Также можно искать работу в офисе, но хотя бы поближе к дому, чтобы не кататься по утренним и вечерним часам пик в заполненных до отказа маршрутках. Но это всё-таки надо очень удачно угадать с коллективом и условиями. И это — материал для следующей заметки в цикле.
Такие вот страхи, значит. Написал, и вроде в голове уложил мысли, попроще стало. Может, кто-то здесь своё найдёт. Это очень интересно, у одного ли у меня только такое, или это обычное дело в профессии? А есть ещё совсем маленький страх, что я просто перегорел быть программистом. На Хабре недавно была статья в тему, симптомы схожие. Точно утверждать пока рано, надо сперва найти всё же работёнку :о).
В следующей заметке буду рассуждать про рабочую обстановку. Что круче — опенспейс или кабинет? Какие идеальные условия? Как к ним приблизиться?