Рубрика:
Программирование /
Жизнь. Карьера
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
ЕВГЕНИЙ СОКОЛОВ, веб-разработчик компании Wapstart, стремящийся оставаться востребованным, любящий смотреть на звезды
Прыжки в высоту, или Как стать программистом
Поначалу меня ожидало жестокое разочарование в попытках забраться на вершину совершенного кода. Но я не сделал вывод, что «мне не дано», а решил, что просто мало опыта
Per aspera ad astra (лат.) – Через тернии к звездам
Развитие программиста можно сравнить с прыжками в высоту. Поначалу приходится тренироваться на малой высоте, в основном оттачивая технику прыжка. Затем начинаются первые серьезные соревнования, планка устремляется вверх, и каждый последующий личный рекорд приближает спортсмена к олимпийской медали.
Часть 1. Выбор дисциплины
Данную историю, вероятно, стоит начинать с рассказа о школе, когда ближе к выпускному классу на вопрос, кем ты хочешь стать, я начал отвечать: «Программистом».
Почему появился такой ответ, тайна даже для меня. Возможно, пример старшего брата, который что-то там разрабатывал и показывал мне какие-то приложения, которые что-то там делали, возможно, желание приобщиться к «умным» профессиям, где надо работать головой. Возможно, причина заключалась в нашем учителе информатики, который отправил меня на олимпиаду по программированию. Я не знаю. В то время я активно играл в игры на компьютере, мог сделать сортировку пузырьком и провалить две олимпиады по программированию (кстати, я не уверен, что некоторые задачи этих олимпиад с ходу решу даже сейчас). Вершиной моего мастерства была программа, которую условно можно назвать «Калькулятор-Таблица умножения», а использование Visual Basic позволяло блеснуть красивыми интерфейсами.
В моем окружении не было никого, кто программировал бы на профессиональном уровне и зарабатывал себе этим на жизнь, собственно, все указывало на то, что мне предстоит жесткое разочарование в попытках забраться на вершины совершенного кода. Но... слава богу, тогда мне этого никто не сказал, а сам я не додумался.
После выпуска из школы я с большим скрипом поступил в институт, наивно полагая, что там из меня слепят программиста. Мою наивность подкрепили красивым рекламным буклетом с указанием множества красивых технологий, которые я должен был узнать в процессе обучения. Возможно, если бы я очень-очень сильно старался, питался святым духом и летом читал книжки – так бы и было. Но, как говорится, «лучше синий диплом и красная рожа, чем наоборот».
Так как денег не хватало, я начал подрабатывать печатанием дипломов и настройкой компьютеров. Часто заказчики просили в довесок нарисовать какой-нибудь рисунок. Так я впервые узнал, чем отличается растровая графика от векторной, и в мой арсенал добавились Photoshop и Corel Draw. Вот здесь, мне кажется, и можно начинать отсчет времени, когда я действительно встал на путь профессиональной веб-разработки.
Часть 2. Экипировка
Спустя какое-то время я достаточно хорошо освоил графические редакторы, выполнил удачный заказ полностью по векторной графике, и, как следствие, появилась идея рисовать рекламные баннеры и дизайны к сайтам. При этом я поставил себе задачу не заработать много денег, а получить как можно больше реального опыта, который в идеале должен был дать качество, за которое можно было бы уже просить адекватное вознаграждение. Если говорить проще, мне нужно было портфолио.
Для начала я поучаствовал в паре конкурсов на логотипы, баннеры и дизайны сайтов. Занятное было время, когда я выдавал один за другим шедевры, но побеждали почему-то другие. Я усиленно поддерживал вместе с остальными проигравшими теорию мирового заговора, согласно которой итоги конкурса были предопределены заранее, и решил, что мой талант не стоит растрачивать на заведомо проигрышные мероприятия, даже на финише которых светила астрономическая сумма в 1000$. Я не сделал вывод, что «мне не дано», и решил, что у меня мало опыта. Упрямство для развития – очень полезная штука. Когда, будучи начинающим программистом, я сталкивался с какой-либо проблемой и не видел ее решения, я копал и искал причину «до потери пульса». Правда, зачастую это заканчивалось тремя часами сна и возгласом «Эврика!» поутру. Сейчас я более опытен и ценю свое время, поэтому стараюсь переключиться на другую задачу или отвлечься для «размыливания» взгляда. Но вернемся к юношеским годам. Параллельно я рисовал свой первый сайт, на котором, собственно, и собирался публиковать будущее портфолио и другую информацию.
Для меня сайт моей «дизайн-студии» стал на несколько лет полигоном, поначалу восполнявшим отсутствие реальных заказов. Кстати, если уж речь зашла о реальных заказах, часто на вопрос «как стать программистом?» отвечают – напишите гостевую книгу или так называемый «Hello world». Признаюсь честно, я бы так не смог, я видел много примеров, когда карьера человека заканчивалась на этом совете. Почему так важен реальный заказ? Прежде всего – это мотивация. Вы делаете что-то нужное, полезное, за что вам хоть что-то, но заплатят. Пусть даже 10 рублей, но они дадут вам почувствовать: этим можно зарабатывать, и в конце выполнения задачи есть пряник. Вы приучаете себя не бросать дело на полпути, а ставить цель и достигать ее. Приучаете себя к чувству ответственности за результат и соблюдение сроков. Данное себе слово нарушить еще можно, а договоренность с другим человеком надо соблюдать неукоснительно. Если же вы для создания эфемерной гостевой книги можете себя замотивировать по самое «не балуйся» – вам повезло, и у вас большие шансы обосноваться в мире программирования. Итак, параллельно я делал свою «сайт-студию». Дизайн рисовать я уже умел, а вот версткой практически не владел.
Что мы делаем в школе, когда не знаем, что написать на контрольной? Правильно, списываем. Но закоренелый хорошист отличается от двоечника тем, что не списывает, а делает по аналогии. Так и я узнал, где находится магическая кнопка View HTML Source и погрузился в мир HTML, CSS и JavaScript. Искал похожую структуру верстки и пытался ее воспроизвести для своего сайта. Слова «погуглить» я тогда не знал, а так как простые вопросы на форумах не задавал – никто меня «гуглить» не посылал. Метод аналогии работал очень хорошо, и многие базовые знания HTML, CSS и прочего я получил именно благодаря этому методу, копаясь в чужих сайтах.
Когда дизайн был готов и сверстан, я подкопил денег, купил доменное имя с подходящим названием и простейший тарифный план. В это время я уже знал пару сайтов, где заказчики искали исполнителей. Теперь я мог показать заказчику пример своей работы (свой полигон), а в портфолио у меня лежали наработки с конкурсов.
Часть 3. Тренировка
Так как деньги для меня были не главное, поначалу я готов был рисовать бесплатно либо за символическую плату. В этот период я старался получить клиентов, которые скорее были намерены потратить на меня свое время, а не деньги, и опять же нужны были реальные заказы.
Все получилось так, как и задумывалось. Достаточно скоро у меня появились клиенты, благодаря которым я расширил свое портфолио. Вместе с портфолио рос и мой опыт, и таким образом я начал более качественно выполнять свою работу. Клиенты стали обращаться повторно, даже начали появляться заказчики по рекомендациям, предлагая оплату хоть и гораздо ниже рынка, но на еду уже хватало.
Однако на такой заработок уходило очень много времени. Придумать баннер, нарисовать, если клиенту не понравилось – перерисовывать. Расчет часовой ставки можно было даже не проводить, она стремилась к нулю либо была даже в глубоком минусе. К счастью, время у меня было, я был молод, у меня не было жены, и для меня не было проблемой работать 20 часов в сутки.
Чего у меня не было тогда, это реального заказа по дизайну сайта, и я решил восполнить пробел, ибо денег это сулило больше. Всего за 5$ я готов был сделать дизайн и верстку сайта, и клиент не заставил себя долго ждать. Я до сих пор помню этот заказ, потому что во многом он определил мою дальнейшую специализацию.
Сайт заказчика представлял собой площадку для продажи софта к телефонам, не интернет-магазин, а просто сайт-каталог с контактной информацией. Я сделал дизайн, который вполне понравился заказчику, и сверстал две страницы, главную и второстепенную. Заказчик выслал контент для наполнения, и в итоге я получил 5$, а заказчик около пятидесяти html-страниц, все остались довольны, а мое портфолио стало чуть толще, если не сказать распухло.
Шло время, и информация на сайте заказчика требовала изменения. Часто приходилось менять все 50 страниц, монотонно и нудно вставляя новый пункт меню либо удаляя старый. Здесь я сделал «финт ушами» и разделил страницу на блоки, написал простенькую программку на Visual Basic, которая выделяла эти блоки из файла и массово обновляла их в других файлах. Стало полегче, но когда блоки стали персонализироваться, использовать эту программу стало труднее, и пришло понимание, что должен быть более простой способ.
Я начал искать, каким же образом можно собрать множество файлов в одну html-страницу. Первое, что мне попалось – SSI, но тогда мало кто поддерживал эту технологию, вроде как нужен был модуль Apache (тогда для меня это были страшные слова), и я решил попробовать что-то другое. Так произошло мое первое знакомство с PHP, на тот момент третьей версии, если не ошибаюсь. Собственно все, что мне требовалось тогда, это include.
Полученный результат превзошел все мои ожидания, теперь, чтобы поменять навигацию, достаточно было изменить ее в одном файле, и обновление сайта стало довольно простым занятием.
Дальше заказчик сайта решил ввести форму обратной связи, что, в принципе, я сделал достаточно быстро на том же PHP, благо статей по отправке e-mail из PHP-скрипта было много. А вот следующая задача уже была посложнее: клиент решил ввести регистрацию с подтверждением e-mail и рассылку новостей.
Упорство и труд все перетрут, сказал я себе и начал разбирать задачу на подзадачи. Для программиста это очень важно – дробить одну большую задачу, ход выполнения которой не совсем очевиден, на подзадачи. Для начала я создал интерфейс регистрации, затем встал вопрос, где хранить пользователей, и далее, далее, далее... По завершению работ я уже имел опыт работы с MySQL, познакомился с PHP более детально, прошел через много проблем, с которыми сталкиваются новички в программировании.
Наверное, здесь заканчивается первый этап моего пути к профессии веб-разработчика. Я начал четко понимать, что хочу именно программировать.
Рисование баннеров требовало много времени, и не всегда можно было добиться нужного результата. Заказчик мог сказать, что этот баннер ему не нравится, и время было потрачено впустую. В программировании же задача и ее решение были определены достаточно строго, для решения задач можно применять предыдущие наработки и использовать накопленный опыт. На этом этапе я покупал опыт, оплачивая его своим временем. Я в той или иной мере знал большой стек технологий, используемый при разработке сайта. У меня было какое-никакое представление о том, как работает сайт, что такое клиент-серверное приложение и много-много других знаний, которые появились в результате набивания шишек на реальных задачах.
Через пару месяцев я увидел на местном городском форуме объявление об удаленной работе и пошел туда на собеседование.
Часть 4. Разбег перед планкой
Я учился на третьем курсе института, и работать удаленно, изредка появляясь в офисе для согласований, представлялось заманчивой перспективой. Так как я уже четко определил, что хочу именно программировать сайты, а опыта было в этом деле мало, я решил поставить перед собой такую же цель, как на первом этапе: главное для меня – опыт.
Когда я пришел на собеседование, мне задавали вполне простые вопросы, которые сейчас, наверное, даже юниорам не задают: как создать таблицу MySQL, за сколько времени ты ее создашь, как отправить e-mail из PHP и т.п. Большинство ответов я смог дать, исходя из реального опыта – спасибо первому сайту. В итоге меня приняли на работу, правда, работать, как оказалось, надо было в офисе, в свободное от учебы время. У меня получалось выделять 20 часов в неделю и, по сути, я работал на полставки. Несмотря на то что я шел за опытом, мне платили неплохую зарплату.
Я начал сам оплачивать свое обучение в университете, и оставалось еще на карманные расходы. Именно тут я понял, что сделал правильный выбор, и что программированием можно зарабатывать очень хорошие деньги. Мотивация зашкаливала.
Фирма, в которую я пришел работать, ставила перед собой достаточно серьезные задачи. Мы делали каталог, с поиском и всеми сопутствующими задачами. Регистрация, обширная клиентская часть на JavaScript, большое количество записей в базе данных, серьезные запросы к БД. Наверное, мне повезло, я не попал в какую-нибудь региональную студию, где клепали сайты на конвейере, а может, я и там бы вырос до серьезного программиста. Все сложилось, как сложилось и дальше все пошло по накатанной колее. У меня был заказчик – фирма, где я работал. Были реальные задачи. Но была и одна особенность. У меня был коллега, который знал больше меня, умел больше, чем я, сделал больше, чем я. И зарабатывал больше, чем я. Мотивация зашкаливала, а когда к ней прибавился еще соревновательный момент – получился отменный коктейль. К задаче получения опыта работы прибавилась задача перенять все знания и умения более опытного коллеги, и как минимум дорасти до его уровня.
Так я и работал до окончания университета, впитывая, как губка, знания более опытных программистов. На место коллеги, который проводил собеседование, пришел другой программист, более сильный, что благоприятно сказалось на моей мотивации, ибо через два года работы большинство задач превратились в рутину, а сам проект, в котором мы работали, превратился в безнадежный. Инвестор еще деньги выделял, но момент был упущен, уже появились конкуренты с серьезным подходом и хорошими инвестициями. Я перешел работать на полную ставку, мне подняли зарплату в два раза, но стало ясно, что надо двигаться дальше.
Часть 5. Прыжок выше головы
И в один прекрасный день я увидел вакансию PHP-программиста в компанию, разрабатывающую софт для управления базами данных. У компании имелся сайт, который являлся типичной площадкой для продаж программного обеспечения. Собственно, поддерживать и развивать этот сайт и требовалось. Недолго думая я написал резюме, где перечислил основные навыки, и отправил его по указанному адресу. Через некоторое время мне позвонили, и было назначен день для моего второго за всю жизнь собеседования.
Само собеседование мало чем отличалось от первого, разве что вопросы были уже посерьезнее. Я не стеснялся признаваться, что с чем-то я не сталкивался, что-то я знаю в общих чертах. Вкратце рассказал про задачи, которые приходилось решать. Если бы я тогда узнал, какого уровня требуется программист, я бы назвал такую смену работы прыжком выше головы.
Через неделю я попрощался со своим предыдущим работодателем. Увольнение по собственному желанию – это вообще отдельная тема для разговора. И в этом случае, и в последующих случаях я старался придерживаться нескольких правил: не ставить работодателя перед фактом смены работы, если нет замены. Грубо говоря, если после вашего увольнения фирма окажется в положении «всех расстреляли, вновь прибывшие ничего не смогут разобрать», то ваша репутация явно не улучшится, а профессиональный ИТ-рынок труда, как большая деревня, рано или поздно все друг друга узнают. Поэтому если вы объявляете, что готовы отработать две недели и уйдете при любых обстоятельствах – рядом должен находиться коллега, готовый поднять упавшее знамя. Вообще уходить надо, не сжигая все мосты за собой, если вам что-то не нравилось во время работы, и вы боялись об этом говорить, не надо это все вываливать при прощании. Опять же репутация – вещь хрупкая. Вполне уместно при передаче дел указать проблемы «на вырост», с которыми может столкнуться фирма.
Но вернемся к моему прыжку выше головы. Следующие полгода работы можно назвать кромешным адом. В фирме была своя самописная система, с очень сложной архитектурой, и лишь через год я начал плавать в ней как рыба в воде.
В отделе веб-разработки было всего лишь два человека, я и мой начальник, который по традиции стал объектом по копированию знаний и умений. Здесь я окончательно понял, насколько быстро растешь, когда рядом есть человек, умеющий делиться своим опытом. При этом, как ни парадоксально, ему не требовалось нудно отвечать на мои вопросы. Нет. Наоборот, он часто отправлял меня «думать дальше».
Зарплата потихоньку росла, никто нас особо не торопил и не нагружал, и постепенно я стал решать все более и более сложные задачи. Через год работы для меня не было каких-то нерешаемых задач, с которыми я не мог бы справиться сам, мне казалось, что я выполняю большую часть работы, и мотивация постепенно начала падать. Стало ясно, что долго так продолжаться не может, но и какого-то плана на будущее не было. Мне подняли зарплату, теперь я получал выше среднего по городу, и это в какой-то мере меня мотивировало. Я начал программировать для души в свободное время, пытаясь написать свою идеальную систему, прототипом которой стала самописная система на работе. Я уже чувствовал, как она сопротивлялась изменениям, поначалу казавшийся мне хорошим ООП-код вызывал все больше критики. Прошло еще полгода, и в один прекрасный момент меня позвали в кабинет директора, где сидел мой начальник со счастливой улыбкой. Интуиция меня не подвела, под окном его ждал заведенный трактор, на котором он вскоре пересек границу нашей необъятной...
Я остался один, мне подняли зарплату еще больше и параллельно начали искать второго программиста. Я совсем заскучал, и к тому же через месяц наступило затишье по серьезным задачам, коктейль получился удручающим. Я начал протирать штаны.
Немного повеселее стало, когда появился второй программист. То ли он был очень умный (в этом я не сомневаюсь, Yandex дураков на работу не берет), то ли знания системы ему помогли, через два месяца он вполне влился и показывал хорошие результаты. Я стал делегировать ему все более серьезные задачи, сам старался развиваться, изучать что-то новое, в основном стараясь делать упор на ООП. В общем, долго поиграть в поучающего наставника у меня не получалось, да и не особо хотелось, я боялся «заболеть» звездной болезнью и всячески взращивал в себе скромность.
Когда потихоньку стала закрадываться мысль, что скоро меня сбросят с пьедестала «начальника», одним прекрасным утром я увидел вакансию удаленной работы. В требованиях были знания какого-то неизвестного фреймворка, было тестовое задание эфемерной гостевой (видимо, это мне за первые годы и нежелание заниматься эфемерными гостевыми) на этом фреймворке. Причем был пример гостевой с объяснениями, надо было лишь внести кое-какие изменения, например, иерархические комментарии.
Часть 6. Прыжок... еще прыжок...
Придя домой, я установил фреймворк, взял пример гостевой, попробовал «поднять» на своей локальной машине.
Настроил все, попробовал запустить и столкнулся с первой проблемой. Почему-то страничка гостевой ничего не показывала, а все время перегружалась. Конечно, проблему я нашел, но она вызвала у меня вопрос, который очень захотелось задать автору гостевой (он же являлся и автором вакансии). Решив эту проблему, я столкнулся со следующей, которую уже решить не удалось из-за плохого знания фреймворка, документации на фреймворк найти не удалось, и примеров его использования было крайне мало.
Я собрал все вопросы воедино, после каждого вопроса написал, как я пробовал их решить. Приложил к этому безобразию резюме и попросил ответить на вопросы.
Мне ответили, я начал опять делать тестовое задание, и опять полился поток вопросов, попутно я не стеснялся обсуждать какие-то моменты, которые мне казались необоснованными и странными. Через некоторое время мне позвонили и назначили техническое интервью по телефону. Так я снова прыгнул выше головы.
По характеру вопросов, да и по информации о компании стало понятно, что здесь речь идет уже о работе с высокими нагрузками, иными словами – следующий этап развития. Я ответил на вопросы, опять же не стесняясь говорить о том, чего не знаю. Так как риски были достаточно велики, а мое нынешнее место работы было теплое и уютное, я заложил эти риски в желаемый уровень оплаты моего труда. Можно сказать, это была дерзость с моей стороны, так как только недавно я начал встречать вакансии на удаленную работу с той зарплатой, которую запросил. Я рисковал, но рисковал осознанно, с параллельно разработанным планом Б, на случай провала испытательного срока или сюрпризов от фирмы.
Мы опять же остались в хороших отношениях с предыдущим работодателем, да и руководство начало понимать, что держать двух программистов смысла особого нет, столько задач на тот момент не было.
Испытательный срок я не провалил. Вообще в этот раз все было очень похоже на предыдущую смену работы. Те же полгода каши в голове, более сильные коллеги рядом. Очень помогало обилие качественного кода, метод аналогии поначалу я применял массово. Также именно здесь я понял, насколько важна критика кода со стороны более сильного разработчика. Было весело, когда я комитил код, и чуть ли не на каждую строчку кода мой наставник вставлял «wtf?». Но это очень, очень действенный способ. Конечно, уровень оказался несравнимо выше – как организации процессов, управления, качества кода, решаемых задач, так и всего-всего другого.
Итак, представьте, что вы проработали год в такой компании и, так сказать, закрепились в основе. Поздравляю, вы востребованный программист. Вам есть куда расти, есть еще более профессиональные программисты, существуют задачи, которые вы не сможете решить, но по большей части вы уже состоялись.
Конечно, такой способ развития, как и все на свете, имеет свои недостатки. Возможно, некоторые недостатки будут связаны с конкретным человеком и возникнут независимо от способа его развития. Если знать, что это за недостатки и в какой момент их надо устранять, то особых неудобств они не доставят. Я, пожалуй, расскажу об основном недостатке, с которым я столкнулся.
Главный из недостатков, который, наверное, почувствуют все – вы будете знать только то, с чем сталкивались. Поэтому теории на более поздних этапах необходимо начинать уделять внимания все больше и больше. Старайтесь читать умные статьи, интересоваться, что происходит в профессиональных сообществах, участвуйте в конференциях, если встречаете интересные необычные задачи – будет полезно их решить в факультативном режиме. Не лишними будут и книги, и документация по технологиям, которые вы используете. Не беда, если многое из того, что написано в этих книгах, вам уже известно, можете пропустить, но неизвестную информацию вы теперь сможете понять достаточно легко, и для вас это не станет очередной «занудной» книжкой.
***
В заключение хотелось бы сказать, что такой способ стать специалистом – не единственный и, возможно, не самый удачный в плане затрат времени и необходимости на ранних этапах довольствоваться малым. Но этот путь прост, как пробка, и даже человек, которому довелось испытать жестокое разочарование в попытках забраться на вершины совершенного кода, способен ставить планку ближе и ближе к этой вершине.
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|