Николас Закас (Nicholas C. Zakas) – известный front-end-консультант, автор многочисленных книг и статей, почетный гость конференций и, разумеется, блоггер. Почти 5 лет проработал в Yahoo, где был руководителем технического отдела разработки внешнего интерфейса главной страницы, а также внес вклад в библиотеку YUI. Специализируется на JavaScript, HTML5 и CSS3, повсеместно ратует за большую производительность, масштабируемость, доступность и удобство сопровождения окружающего нас «веба». Сегодня мы знакомимся с его мнением по вопросу, который актуален и в белорусском ИТ-сообществе, – что такое веб-разработчик и почему он тоже программист?
Когда я поступил в колледж, мне очень хотелось работать с компьютерами, но я не мог сказать точно, чем именно собираюсь заниматься. Я с первого взгляда влюбился в «мультимедийный» (так это тогда называлось) компьютер Packard Bell, оснащенный процесcором Pentium и (просто невероятно!) CD-дисководом. Днями сидел за этим компьютером, не делая ничего конкретного, просто неустанно мастерил разные мелкие программки и отлаживал систему. Вот и все, чем я хотел бы заниматься, но я был уверен, что именно это мне и нужно.
В колледже я записался на обязательные курсы. В первом и втором семестре у нас был предмет «Информатика», где преподавали Pascal. Затем UNIX вместе с C. Затем – C++, Smalltalk, Prolog, ассемблер. Структура данных, алгоритмы. Базы данных. Все эти предметы изучаются так: сидишь перед терминалом и бешено стучишь по клавиатуре, лишь бы хоть что-нибудь получилось. Мне такой труд быстро наскучил. Я по натуре визуал, и, просиживая долгие занятия, в ходе которых видел только потоки текстовой информации, просто на стенку лез. Именно тогда я и начал экспериментировать с «вебом».
С этого момента и начинается моя история, а точнее – с 1996 года, когда я написал свою первую веб-страницу, которая находилась на сервере AOL. Сделал я ее, в основном, для того, чтобы оставаться на связи с однокашниками – но через некоторое время с удивлением обнаружил, что все дольше задерживаюсь на моем маленьком сайте, постоянно его обновляю, чего-то там настраиваю, добавляю еще функциональности. Позанимавшись этим несколько месяцев, я придумал, как превратить это хобби в работу. Но в расписании моего колледжа, к сожалению, не нашлось ни единого курса по веб-разработке. Слишком молода была эта область. Поэтому я постигал это искусство в основном самостоятельно. Наконец, мои искания привели меня на практику в один стартап, где занимались веб-разработкой.
С тех пор прошло уже более 15 лет. Бизнес постепенно осваивал «всемирную паутину», поэтому потребность в веб-разработчиках постоянно возрастала. Но меня удивляет то, что одно обстоятельство с тех пор совершенно не изменилось – я имею в виду отношение ко всей касте веб-разработчиков.
В большинстве компаний, больших и малых, веб-разработка часто трактуется как некая адская смесь дизайна и инженерии. Нередко видишь, как веб-разработчики оказываются в довольно своеобразном рабочем окружении. Иногда они сидят в отделе дизайна, порой – в продакт-менеджменте, случается, что их как бы и вовсе нет. Я не раз беседовал с веб-разработчиками, которых просто убивало такое отношение. Представьте себе, как они сами относятся к фирмам, которые заставляют их работать в таком режиме. А ведь проблема начинается уже с организации как таковой.
Моим последним местом работы в Массачусетсе была компания VistaPrint. Признаться честно, я ходил туда на работу с радостью, поскольку команда там была просто волшебная. Там у меня появилось несколько по-настоящему хороших друзей, так что я всегда старался не отрываться от коллектива. Но вот что мне в этой организации не нравилось – так это факт, что меня там считали обычным «программистом». А слово «программист» автоматически означало «многостаночник». То есть мне приходилось писать и запросы для базы данных, и код для серверных приложений, и работать с HTML, CSS и JavaScript. Никого не интересовало, как вы справляетесь с этими задачами – так или иначе, вы занимались всем подряд. Я несколько раз пытался подчеркнуть, что программист программисту – рознь, что есть и такие программисты, которым неплохо бы сосредоточиться на проблемах там, где их видит клиент, – но все напрасно. Вот так я и сидел, вынужденный наблюдать, как создаются и идут в работу уродливые шаблоны – а сам был вечно занят написанием SQL-скриптов и всякими сопутствующими делами. На самом деле мне совершенно не нравится такой подход, поскольку это насаждает определенную ментальность: утка, как известно, и плавает, и летает, и ходит... и все это делает плохо.
Одна из причин, по которым я попал в Yahoo, заключалась в том, что здесь мне могли предложить работу, связанную исключительно с HTML, CSS и JavaScript. Мне хотелось оставить всю серверную работу тем, кого она привлекает, а самому сосредоточиться на любимом деле. Действительно, Yahoo была одной из первых компаний, которая стала взращивать искусство веб-разработки. Именно у них впервые обозначилась новая профессия «веб-разработчик», и на появившиеся вакансии пришла блестящая плеяда специалистов, которые очень скоро повели приютившую их компанию в славное будущее. Среди этих первопроходцев были Томас Ша, Эрик Миралья, Нейт Кэшли, Майк Ли и многие другие., Это была настоящая команда-мечта, целиком и полностью, и именно она окончательно и бесповоротно убедила Yahoo всерьез заняться веб-разработкой.
Вскоре после этого компания Yahoo, движимая этим первым коллективом веб-разработчиков, пришла к выводу, что все эти талантливые личности, в сущности, являются программистами. Сегодня человек был «веб-мастером», а завтра становился «инженером внешних интерфейсов». Они заняли свое законное место среди программистов – место, которое заслужили уже очень давно. За этим последовало развитие величайшего front-end-сообщества – на мой взгляд, совершенно неповторимого. Это было еще до зарождения Google и задолго до того, как в умах программистов возникли Facebook и Twitter. Многие незаменимые методы, которыми мы пользуемся сегодня – особенно такие, которые связаны с быстродействием, прогрессивным улучшением (progressive enhancement), открытыми API и обеспечением доступности – являются плодом той работы, которой занялась компания Yahoo в те незапамятные времена. Когда я поступил на работу в Yahoo – а было это в 2006 году – сообщество front-end-разработчиков было полным жизни и активным, эти люди неустанно превращали Yahoo в ту самую компанию, которая затем сформировала неповторимый пользовательский опыт в интернете и заслуженно гордилась этим. Мне выпала честь стать частью этого сообщества и поработать со всеми упомянутыми выше людьми.
Некоторые великолепные мастера, вышедшие из первого поколения веб-разработчиков, достигли выдающихся новых высот. Томас Ша создал фреймворк YUI и заручился поддержкой, благодаря которой этот проект смог достичь зрелости. Эрик Миралья стал вице-президентом по продукции в компании Meebo, которая только что была приобретена Google. Нейт Кэшли снискал международный авторитет в CSS и front-end-разработке. Майк Ли продолжил творить и основал еще несколько стартапов. Дуглас Крокфорд формализовал нотацию JSON и стал всемирно признанным авторитетом по JavaScript, а также весьма успешным писателем. Стив Содерс стал экспертом мирового класса в области производительности, опубликовал первые данные о производительности в большой компании, создал YSlow, написал две книги и стал сооснователем конференции Velocity. Благодаря Биллу Скотту, занимавшему посты вице-президента по UI-разработке в Netflix и старшего директора по UI-разработке в PayPal, в этих компаниях также появились свои сообщества front-end-разработчиков. Николь Салливан получила всемирное признание в области CSS благодаря предложенному ей подходу OOCSS, а также стала крайне востребованным консультантом по повышению производительности систем. Стоян Стефанов продолжил дело Стива по разработке YSlow, стал признанным авторитетом в области производительности и написал несколько книг. Исаак Шлютер создал npm и возглавил Node.js. Крис Хайлманн стал всемирно известным разработчиком-евангелистом. Скотт Шиллер зарекомендовал себя как специалист мирового уровня в области сетевого аудио, реализовав свой проект SoundManager 2. Я мог бы продолжить этот список – рассказ обо всех разработчиках, вышедших из Yahoo и сделавших важнейший вклад в дело веб-разработки, занял бы несколько страниц. Достаточно сказать, что такое большое front-end-сообщество не могло не привлечь выдающихся людей. Многие разработчики внешних интерфейсов, вышедшие из Yahoo, обосновались в больших и малых компаниях по всему миру, задав там планку профессионализма.
Но на свете по-прежнему немало компаний, в которых веб-разработка не пользуется должным уважением. Часто веб-разработчиков даже не считают программистами, а иные «настоящие программеры» их просто чураются. Но я уверен – и это убеждение сформировалось у меня в ходе работы в Yahoo – что мы занимаемся важным делом. Я окончательно в этом убедился, пройдя обязательный курс Нейта Кэшли «Как стать front-end-разработчиком в компании Yahoo» – эти занятия я посещал, когда начинал там работать. Возможно, наши знания и навыки не идентичны знаниям и умениям классических программистов, но мы, тем не менее, – самые настоящие программисты. Если вы пишете код – значит, вы программируете. И это действительно значит, что вы – программист. Суть этой профессии именно в том, что программист создает код, который потом используют заказчики. Если ваш код написан не на Java или С++ – вы не становитесь от этого «менее программистом», чем ваши коллеги, использующие эти языки каждый день.
(Примечание: я намеренно игнорирую кажущееся очевидным различие между «разработчиком» и «инженером». Я убежден, что эти слова означают одно и то же).
Да, мы можем не знать всех алгоритмов сортировки и не всегда умеем программировать связный список, но это и не требуется нам в нашем повседневном труде. На собеседованиях я всегда предупреждаю потенциального работодателя, что, если он ищет специалиста по алгоритмам – то я не тот человек, который ему нужен. Я человек, который умеет писать по-настоящему красивые, работоспособные, доступные веб-интерфейсы, с которыми создаваемый продукт будет более удобен и приятен в работе. Я – программист, моя специализация – веб-интерфейсы. Другие программисты специализируются на базах данных и серверном программировании. Но они и я – просто разные программисты.
Ключевой аспект, из-за которого к веб-разработчикам сохраняется такое отношение, заключается в стиле нашей деятельности. Не допускайте даже намека на то, что вы – не программист. Как это сделать? А нужно всего лишь конкретнее называть то, чем вы занимаетесь. Мне хотелось бы, чтобы в интернете становилось меньше вакансий «Требуется веб-мастер», а им на смену приходили вакансии «Ищем front-end-разработчика» или «Разыскивается разработчик пользовательских интерфейсов». И, пожалуйста, избегайте таких выражений, как «веб-звезда» или «веб-ниндзя». Из такой формулировки вовсе не следует, чем именно вы можете быть полезны, да и выглядит она глупо. О титулах можно спорить, поскольку для кого-то они просто ничего не значат. Важно назвать себя таким образом, чтобы из этого следовала ваша ценность для работодателя.
Второй момент немного сложнее. Front-end-разработчики должны вписываться в состав всего ИТ-отдела – точка. Все мы программисты, мы работаем вместе с другими программистами и совершенствуем наше мастерство, как и все прочие. Все программисты заслуживают того, чтобы к ним относились одинаково, и их место должно соответствовать их навыкам. Тот факт, что программисты специализируются в разных областях, не означает, что кто-то – хуже, а кто-то лучше. Если в компании есть архитектор баз данных или сетевой архитектор, то почему бы не быть и архитектору внешних интерфейсов? Такая характеристика означает определенный уровень профессионализма, надежность и наличие каких-то достижений. Эти качества достаточно равномерно распределяются среди представителей любой специализации.
Вот как обычно трактуются уровни профессионализма программистов.
Младший разработчик (junior engineer) – начинающий, возможно, недавний выпускник. Нуждается в обучении и помощи наставника. Ему можно доверять небольшие задачи под надзором старшего коллеги Разработчик среднего уровня (mid-level engineer) – несколько лет опыта. Может работать без контроля, способен самостоятельно решать задачи среднего объема и сложности. Скорее всего, с большинством задач он справится хорошо. Старший разработчик (senior engineer) – опытный специалист, демонстрирующий лидерские качества в командной работе. Может целиком брать на себя крупные задачи и отлично справляется с ними самостоятельно. Готов за все отвечать, а другие члены команды могут обращаться к нему за советом и критикой. Главный инженер (principal engineer) – очень опытный специалист, чья способность руководить превосходит масштабы одной команды. Способен браться за выполнение сложных задач, а также распределять обязанности и управлять людьми. Обладает непоколебимыми навыками общения, благодаря чему может определять развитие работы как внутри своей команды, так и за ее пределами. Архитектор (architect) – исключительно опытный специалист, способный руководить множеством команд. Организован, умеет общаться, хорошо разбирается в системах. Может и сам решать любые задачи, но большую часть времени тратит на проектирование и постановку задач для других, контроль над их выполнением в командах, а также на консультирование коллег. Незаменимый человек для решения непростых вопросов.
Как видите, все эти должности определяются личностными качествами, а не техническими навыками. Все эти условия должны выполняться независимо от специализации программиста и области его интересов. Старший инженер по разработке пользовательских интерфейсов обладает тем же уровнем профессионализма, что и старший инженер по серверным приложениям или по базам данных. Такие вещи, как соглашения при написании кода, оптимальные методы работы и строение систем, изучаются на практике, а не в университете, и в них в равной мере должны разбираться любые инженеры. При справедливой иерархии становится очевидным равноправие front-end-разработчиков и других программистов, которые работают в компании.
Если в вашей компании все по-другому, вам следует серьезно задуматься. Веб-разработчики не менее важны, чем любые другие разработччики. Ошеломительный успех в области разработки внешних интерфейсов, достигнутый в Yahoo, следует взять на заметку всем компаниям: работая правильно, можно привлечь невообразимое количество талантливых людей и добиться выдающихся успехов. Недавние пертурбации Yahoo никак не связаны с front-end-сообществом; кроме того, как упоминалось выше, многие специалисты, успевшие поработать в Yahoo, сейчас выстраивают хорошие front-end-отделы в других компаниях.
Практически все «топовые» компании, которые можно приспомнить навскидку, обязаны своим процветанием именно front-end-разработчикам. И по-прежнему не утихает «гонка вооружений», которую ведут Google, Facebook и Twitter, стремящиеся завербовать в свои ряды все больше и больше разработчиков интерфейсов. , Это наша эпоха – даже не сомневайтесь. Поэтому, когда в следующий раз вас кто-нибудь спросит: «Кем вы работаете?» – просто отвечайте: «Я программист». А потом уже можете добавить, что специализируетесь на разработке веб-приложений.