Читать книгу Путь в ИТ - Елена Правдина - Страница 5
Design
С чего начать
ОглавлениеИнформатика мне нравилась всегда, впрочем, как и математика, биология и английский: я выделяла ее в числе любимчиков, однако никаких особых планов вокруг не строила. Школа значилась как лицейская, с веяниями современных подходов, и по ряду предметов полагались факультативы: некие кружки с углубленным изучением отдельных аспектов предмета. Так, среди прочих дополнительных занятий по математике и английскому, я записалась на курсы программирования. То событие и послужило мощным толчком моего дальнейшего пути. Да, мы, программисты, любим быть на шаг впереди. А любые дополнительные курсы как нельзя лучше этому осознанию способствуют.
В самой программе тех школьных факультативов не содержалось ничего примечательного. По правде сказать, я не могу вспомнить никаких занятий, кроме двух: на одном мы программировали знаменитую черепашку ЛОГО, на других мы осваивали всемирную сеть и возможности коммуникаций в WWW. Но именно подобное чувство причастности к неизвестному многим, коллекционирование десятков мелких кусочков знаний подогревали интерес, заставляли больше смотреть, читать, впитывать и вне часов курсов. Каждый нюанс, каждое новое знание дает незаменимую фору, и кто знает, как она пригодится вам спустя многие годы. Пусть даже и в ничтожных бытовых мелочах. Почтовый сервис mail.ru предлагает сейчас скидки от партнеров, процент по которым вычисляется по формуле, учитывающей стаж регистрации в почте. Максимальной скидкой ныне я обладаю исключительно благодаря тому, что на одном из тех школьных факультативов мы регистрировали почтовый ящик именно на этом самом, тогда относительно недавно появившемся сервисе.
Посещайте факультативы. Записывайтесь в онлайн-школы. Ходите на мастер-классы. Смотрите видеоуроки – самое популярное и легкодоступное образование для самых первых шагов. Действенная, с быстрой обратной связью методика наполнения себя новыми знаниями. Сами разработчики крупных фирм, опытные профессионалы ищут своим детям курсы, отдают их на занятия в ИТ-школы. Почему, если знают больше многих преподавателей? Один из моих коллег-тимлидов, водивший сына на занятия по Ардуино и робототехнике, объяснял это так: «Нет времени придумывать, как увлечь». В школах же – готовые проработанные программы, отточенные на сотнях учеников. Специальные материалы, красочная атрибутика, наборы тех же конструкторов и наглядные схемы, плюс дух соперничества с равными, который не воспроизвести – ребенком ты подсознательно понимаешь: твой проигрыш отцу-профессионалу простителен. Да и преподавательский талант есть не у каждого разработчика.
С другой стороны, на волне популярности появляется масса некачественного контента, видеоуроков, онлайн-школ, находятся нечестные и непрофессиональные организаторы курсов офлайн. В Яндексе есть отличная возможность узнать у огромного числа коллег совет по волнующей тебя проблеме – не только рабочей. И одним из поднимаемых жизненных вопросов, которые мне доводилось застать, был поиск достойных подростковых курсов по программированию. Нет ничего удивительного в том, что и умудренные разработчики задаются подобными вопросами: важно развить и подогреть интерес школьника, без сухой теории и с грамотными лекторами. Даже если подросток уже сам пытается изучать и пробовать языки.
Читайте новости. Начните с лежащих на виду популярных источников, используемых ежедневно профессионалами с любым стажем. Пусть даже вы не можете понять пока почти ни слова. Зачем? Чтобы держать руку на пульсе, понимать, в какие области стоит углубиться именно вам. Вдохновляться разработками других, препарировать работу «черных ящиков»: отдельных методов, браузеров, баз данных и фреймворков. Читайте иностранные, англоязычные сайты. Блоги известных разработчиков, авторов фреймворков (например, Дена Абрамова), авторов топовых ИТ-шных книг, евангелистов профильного мира и энтузиастов (Лия Веру, Сара Суадан…), причастных к разработке браузеров (Вадим Макеев), создателей языков (Дуглас Крокфорд из мира JS, Страуструп из века С++, легендарный Сэнди Метц и др.).
Изучайте чужой код. GitHub, Bitbucket, примеры в статьях авторитетных авторов, выдержки из документаций. Как маленькие дети, еще не понимая всей глубины отдельного слова и составляющих его букв, слагают из них свою речь, так и вам стоит принять авторитетные фрагменты кода как слова, из которых сформируется код всей программы. Пусть понимание отдельных нюансов придет чуть позже – окружайте себя готовыми классическими решениями и используйте их в своих работах. Старайтесь не копировать, а перенабрать фрагмент – так стандартные решения быстрее отложатся в голове, подкрепившись моторной памятью. И в следующий раз, при написании своего кода с чистого листа, рука сама потянется добавить content: «» для псевдоэлемента или проверить на undefined переменную перед обращением к свойству.
Учите основы. Да, пусть это скучно, но необходимо. Без них вы никогда не станете уважаемым профессионалом. Представьте, к вам подходит подопечный джуниор-разработчик с вопросом: почему «2» + 2 = 22? А вы не можете ответить, потому что не знаете про механизм приведения типов и наличие toString() у прототипа объекта Number. Сложно представить? Правильно, потому что у таких программистов подопечных не бывает. Более того, сейчас всё стремительнее сменяются фреймворки и дополняются возможности языка. Без понимания, что там «под капотом», практически невозможно быстро переключаться над высокоуровневыми реализациями. Угнаться за темпом ИТ не получится, запоминая только методы популярного на текущий момент фреймворка: завтра он сменится другим и ваши познания превратятся в тыкву, а цена на рынке как специалиста уйдет в -1. Все крупнейшие ИТ-компании уже давно просят кандидата на собеседовании написать алгоритмический код часто даже без привязки к языку, а если и спрашивают конкретику, то исключительно на подводные камни, языковые тонкости и их комбинации, требующие глубокого понимания того, «как работает мотор».
Старайтесь понять. Думаю, предыдущего упоминания процессов отбора на работу ИТ-корпорациями достаточно, чтобы отказаться от сладостной мысли выучить/запомнить и попытать свое счастье в отрасли. Часы университетских лабораторных или стоящих курсов призваны заставить попробовать написать самому, наткнуться на проблемы, задуматься, почему так, понять и исправить, при необходимости – повторить. Но, увы, никак не «скопипастить» готовый код, как принято наивно полагать у многих не слишком прилежных студентов. Любой успешный разработчик проводил порой десятки минут, раздумывая над логикой создателей языка, причинными связями, устройством браузера, взаимозависимостями нового материала и уже известных ему фрагментов знаний. Только понимание, как происходит рендеринг страницы, как влияют на него заданные вами СSS-свойства, помогут исправить «тормозящий» интерфейс. Без глубокого осознания нет качества, нет надежности, а часто и нет самого результата – столкнувшийся с неизвестным разработчик не в силах предпринять что-либо, так как малейший шаг по диагонали делает его совершенно беспомощным в мире, законы которого он так и не осознал.
Впитывайте best practices. Как известно – devil in details. То, как написан код, насколько он читаем другими разработчиками и расширяем по мере жизни и развития продукта, – главные отличительные черты новичка от профессионала. Чтобы преодолеть этот путь быстрее, лучше взять велосипед, собранный по годами проверенным чертежам и с опытом отшлифованными конструкциями деталей, нежели начать выяснять, овальное или круглое колесо лучше зарекомендует себя для комфортных путешествий. Знакомство с Бандой Четырех, принципами DRY, SOLID, классикой вроде «Рефакторинга» Мартина Фаулера, Стива Макконнелла с его «Совершенным кодом», Робертом Мартином и «Чистым кодом» – ваш необходимый чеклист по данному пункту.
Не замалчивайте возникшие вопросы. Непонятно – гуглите, ищите в Яндексе, добирайтесь до сути. Такие знания – базовый каркас, ваш алфавит, не освоите – никогда не сможете заговорить.
Смотрите конференции. Сейчас их число неизменно растет, а уровень спикеров из-за конкуренции в сфере проведения подобных мероприятий повышается. Highload, HolyJS, Dev Conf – нет смысла перечислять конкретные названия, они изменяются, дополняются каждый год. Да, большинство стоят немалых средств, но видео спустя несколько месяцев, как правило, выкладываются в открытый доступ. Для вас как абсолютного новичка подобная задержка не играет ключевой роли, поскольку объем другого, еще неизвестного материала остается достаточно велик.
Интересуйтесь научно-популярными источниками, изучайте прикладные отрасли. Любые книги по созданию лекарств или поиску вирусов. Сфера автоматизации рутины уже пройдена, на первый план выходят биоинформатика, исследования на стыке ИТ и химии, физики – все, где фундаментальные науки и высокоинтеллектуальные сферы могут вобрать в себя информационный прогресс. Очень мало математиков, биологов и медиков, способных двигать развитие робототехники, исследований ИИ, мало тех, кто обладает научными знаниями и кому по силам скрестить их с миром программирования. Найдите смежную область, станьте экспертом – еще есть шансы создания революционных разработок, идей и алгоритмов, способных перевернуть мир.
Изучайте биографии, автобиографии и труды авторства великих людей как из мира ИТ, так и из иных знаковых исторических и научных сфер. Стив Джобс, Марк Цукерберг, Павел Дуров, Илон Маск, Айзек Азимов, Никола Тесла, Луи Пастер, Крис Хэдфилд, Ричард Фейнман, Стивен Хокинг. Ход мыслей, ситуационные решения, масштаб целей, организация их достижения – всё полезное на примере их жизней, что готовы разглядеть именно вы. Только не обольщайтесь – еще ни один, прочитавший биографию создателя Apple, не стал вторым. Таких как Джобс – единица. Но десятки и тысячи крутых профессионалов в сотнях значимых для каждого человека компаний ежедневно вносят решающие вклады в то, каким вы встретите новое утро. Глупо рассчитывать повторить личность. Еще одним Билом Гейтсом не стать, но можно стать вторым и третьим крутым разработчиком в вашей области. И я очень надеюсь, пусть подчас и кажущиеся явными, собранные здесь советы – не единичного, но предстоящего большинству пути, – помогут вам куда гарантированнее сделать мир лучше.
Учитесь общаться. ИТ – коллективная работа. Крупнейшие компании индустрии при оценке своих сотрудников учитывают отзывы коллег. Яндекс, Google, Avito проводят регулярные ревью уровня разработчиков. Один из первых этапов процесса и конечная составляющая успеха – фидбеки от менеджера или product owner’a, тестировщиков, коллег, с которыми вам хоть сколько-нибудь приходилось взаимодействовать. Увы или к счастью, психология межличностных отношений такова, что ваша уникальность и высокий профессионализм мало помогут услышать восторженные отзывы коллег, если ежедневно вы, не проронив приветствия, гордо размещаетесь в своем рабочем углу, последовательно воздерживаясь от участия в общих дискуссиях, ходите обособленно обедать в другое кафе и не утруждаетесь поздравлением коллег со знаменательными событиями.
Будьте звездой и учитесь приглушать свет. Я видела много талантливых программистов. Победители олимпиад, создатели стартапов, покупаемых за миллионы долларов ключевыми игроками индустрии, технические лидеры огромных корпораций. В крупных компаниях с сотнями и тысячами сотрудников, не знакомых друг с другом, вы можете пообщаться с любым случайным человеком в компании. Подписываясь под этой активностью, раз в некий промежуток времени вы отправляетесь с коллегой из другой части компании выпить чашечку чая, стакан кофе или создать себе иную вольно-рабочую атмосферу, чтобы поговорить. Вашим оппонентом может оказаться другой разработчик, либо же сотрудник абсолютно отличной сферы, смотрящий на компанию с другого ракурса. Обмен опытом, расширение понимания, что происходит вокруг, да и, в конце концов, завязывание дружеских и не только отношений между сотрудниками – цели ясны.
На очередной из таких встреч мне довелось пообщаться с разработчиком одной из ключевых частей продукта – поисковой выдачи. Недавно пришедший в компанию молодой сотрудник, довольно скромный и приятный в общении, – легкое недоумение «почему он» быстро сменилось угрызениями совести за свою предвзятость. Так, в ходе разговора зашла речь о соревнованиях по программированию, в том числе чемпионатах мира. Случайно всплыло имя общего знакомого, и выяснилось, что мой собеседник – также участник и финалист международной олимпиады ICPC (читай: программист с логическими способностями и алгоритмическими знаниями выше среднего). И вне стен текущего места был частью создания сложнейших систем, обеспечивающих безопасность в нашей повседневной жизни. При этом располагающий и простой для коммуникаций человек. Именно такой – подкованный и сливающийся с командой – ценен каждой престижной ИТ-компании, стремящейся изменить мир и перестроить процессы будущего. В таких корпорациях зачастую мечтают работать профильные студенты и начинающие свой путь в отрасли. Позволить своим мечтам сбыться вы сможете, научившись быть органичной частью целого. Подчас вам придется в счет собственного квалифицированного эго менять линию поведения на приносящую продукту в целом максимальный успех. Знайте многое, показывайте по необходимости.
Продолжайте непрерывно. Выбрав ИТ, нужно отдать себе отчет в стремительности изменений данной сферы. Даже просто поддержание своего уровня профессионализма потребует ежедневных затрат. Выходят новые версии языков и фреймворков, появляются более эффективные инструменты, библиотеки, редакторы кода, формируются полезные практики, проходят конференции, крупные компании делятся своими решениями. Все знакомые мне успешные разработчики регулярно тратят время на приведение себя в ИТ-форму. Полчаса на обеде, час вечером, полдня на выходных, видео между делом, обсуждение нового стандарта с друзьями-программистами, чтение списка новых фич фреймворка вечером – ваша будущая регулярная плата за членство в увлекательном мире ИТ.
Воспитывайте самоорганизованность. Вы должны уметь встроить в свой ежедневный рацион час чтения новостей, изучения новой технологии, уметь выбирать верные объекты освоения вне основной работы. На рабочем месте, в свою очередь, уметь спланировать свой день и неделю так, чтобы все требуемые фичи были реализованы в срок. Современные методологии разработки (Agile, Scrum), используемые в серьезных ИТ-компаниях, требуют адекватной оценки, планирования и обеспечения выполнения в оговоренный срок самим разработчиком. И если раньше менеджеры несли вину за срывы сроков, сейчас всё больше культура компаний ведет к тому, что ответственность за оценку времени и их соблюдение перекладывается на программиста. Если же вы, выбирая ИТ, грезите фрилансом, удаленной работой – самоорганизация понадобится вам вдвойне. Начните с малого – плана на день, и научитесь полностью выполнять его. Честно отвечайте себе, почему не смогли. Были недостаточно быстры? Оттачивайте мастерство, используйте вспомогательные инструменты. Запланировали слишком много? Отделите желаемое от действительного, учтите предыдущий опыт выполнения подобных дел для понимания требуемого времени. Нашлись более срочные дела? Оцените важность всех задач и выберите меньше, но из самых нужных.
Привыкайте брать ответственность и проявлять инициативу. Тренируйтесь на других сферах – подумайте, как оптимальнее пройти от дома до работы или университета, как передернуть привычный шаблон поведения в стандартной ситуации, как сократить время сбора утром. Попробуйте мыслить нестандартно, взяться организовать расстановку книг в домашней библиотеке или проведение небольшого митапа в известной вам области. Зачем? Затем, что, смотря наперед, – это те важные софт-скилс, к желанию видеть которые в своих сотрудниках сейчас приходит индустрия ПО. Методологии построения рабочего процесса, равно как и критерии оценки сотрудников (быть может, сами того не осознавая) исходят из наличия у топовых сотрудников способности предлагать улучшения, внедрять их в команде и… отвечать головой, если твой «улучшающий код» внезапно отправил сервера прилечь на пару часов на незаслуженный отдых. Подход управления разработкой Scrum поощряет участников команды, склонных брать на себя дополнительные роли (например, роль scrum-мастера). Подход с наличием начальника-надзирателя, увы, устарел. Сейчас до разработчика спускается задача, детали реализации которой, ожидается, предложит он сам. Более того, всё больше распространяется презентация результата заказчику напрямую самим разработчиком. А это значит, что вы должны уметь собрать информацию о проделанной работе со всей команды и красиво ее подать, общаться и выступать перед людьми, держаться уверенно, ориентироваться в моменте и быть немного политиком, отвечая на неудобные вопросы заказчика. Выступления на конференциях, написание статей, предложения по организации процессов учитываются наравне с ответственным и качественным программированием нужной фичи – прямыми обязанностями разработчика. Проникнитесь, насколько нужные здесь качества далеки от стандартных базовых черт хорошего разработчика. По моему опыту, компании склонны нанимать «человека, умеющего говорить», чем подчас более глубокомысленного и вдумчивого специалиста с яркими чертами интроверта. Как по мне – уход не на ту тропинку с главной дороги, но реалии таковы, и вы должны быть к этому готовы.
Обозначьте верные приоритеты. Сейчас жизнь ИТ бурлит и кипит, отнимая у наиболее увлеченных кадров всё свободное время, занимая их молодые умы. Я видела многих, кто сгорал на работе. ИТ-успех – удел молодых, амбициозных и азартных. Регулярно сидеть и день и ночь, дописывая захватывающую фичу, доделывая нестандартный проект – сродни зависимости. Образ небритого и немытого, физически мало развитого молодого человека равно органично примеряется и на паренька-геймера и на талантливого программиста. Потому что грань отчасти стирается. ИТ может поглотить, увлечь и завладеть вашим разумом гораздо больше чем на рабочие 8 часов в сутки.
Если в вашей системе ценностей важнее семья, дети, если вы хотите жарить котлеты, гармонично сочетать в своей жизни и другие сферы, любимые хобби – пожалуйста, смиритесь, что вероятность сделать что-то революционное в сфере ИТ низка, ибо всегда найдется более поглощенный и азартный, на грани нормы и безумия. Пока вы будете сплавляться с друзьями на байдарке, он придумает, как оптимизировать архитектуру подключения серверов или как изменить алгоритм, чтобы качественнее обучить нейросеть. Посему сразу установите себе верхний «keep balance» – соотношение времени и важности между ИТ и семьей, спортом, увлечениями. Иначе, поставив всё на красное, вы рискуете остаться у разбитого корыта, если (что не редкость) наступит разочарование в работе программистом или ваша карьера не сложится профессионально.
Советы в конце подраздела
Поймите, интересна ли вам эта сфера. Да. Раз вы читаете эту книгу.
Убедитесь, что можете. Трезво оцените силы и способности.
Подумайте, обладаете ли нужными софт-скилс. Готовы ли развивать их в себе.
Вникайте, переосмысливайте стандартные школьные/университетские материалы.
Ходите на курсы. Пробуйте. Давайте второй шанс. Бросайте, если нет искры.