Mine üle audioraamatule
Учитесь общаться. IT – коллективная работа. Крупнейшие компании индустрии при оценке своих сотрудников учитывают отзывы коллег. Яндекс, Google, Avito проводят регулярные ревью уровня разработчиков. Один из первых этапов процесса и конечная составляющая успеха – фидбеки от менеджера или product owner’a, тестировщиков и коллег, с которыми вам хоть сколько-нибудь приходилось взаимодействовать. К сожалению или к счастью, психология межличностных отношений такова, что ваша уникальность и высокий профессионализм вряд ли помогут услышать восторженные отзывы коллег, если ежедневно вы, не проронив приветствия, гордо размещаетесь в своем рабочем углу, последовательно воздерживаясь от участия в общих дискуссиях, ходите обособленно обедать в другое кафе и не утруждаетесь поздравлением коллег со знаменательными событиями.
Будьте звездой и учитесь приглушать свет. Я видела много талантливых программистов. Победители олимпиад, создатели стартапов, покупаемых за миллионы долларов ключевыми игроками индустрии, технические лидеры огромных корпораций. В крупных компаниях с сотнями и тысячами сотрудников, не знакомых друг с другом, вы можете пообщаться с любым случайным человеком в компании. Подписываясь под этой активностью, раз в некий промежуток времени вы отправляетесь с коллегой из другой части компании выпить чашечку чая, стакан кофе или создать себе иную вольно-рабочую атмосферу, чтобы поговорить. Вашим оппонентом может оказаться другой разработчик, либо же сотрудник абсолютно отличной сферы, смотрящий на компанию с другого ракурса. Обмен опытом, расширение понимания, что происходит вокруг, да и, в конце концов, завязывание дружеских и не только отношений между сотрудниками – цели ясны.
На очередной из таких встреч мне довелось пообщаться с разработчиком одной из ключевых частей продукта – поисковой выдачи. Приятный внешне парень с располагающей улыбкой и добрым приветливым взглядом. Краткость и содержательность отличали его речь от многих других моих оппонентов, ничуть не вредя при этом теплоте и глубине беседы – с ним хотелось говорить. Он выглядел довольно скромным молодым сотрудником, недавно пришедшим в компанию. Легкое недоумение, «почему именно он» составляет ядро сложного продукта, быстро сменилось угрызениями совести за свою предвзятость. Так, в ходе разговора речь зашла о соревнованиях по программированию, в том числе чемпионатах мира. Случайно всплыло имя общего знакомого, и выяснилось, что мой собеседник – также участник и финалист международной олимпиады ICPC – читай: программист с логическими способностями и алгоритмическими знаниями выше среднего. И вне стен текущего места был частью создания сложнейших систем, обеспечивающих безопасность в нашей повседневной жизни. При этом располагающий и простой для коммуникаций человек. Именно такой – подкованный и сливающийся с командой – ценен каждой престижной IT-компании, стремящейся изменить мир и перестроить процессы будущего. В таких корпорациях зачастую мечтают работать профильные студенты и начинающие свой путь в отрасли. Позволить своим мечтам сбыться вы сможете, научившись быть органичной частью целого. Подчас вам придется менять линию поведения на приносящую продукту максимальный успех в счет собственного квалифицированного эго. Знайте многое, показывайте по необходимости.
Продолжайте непрерывно. Выбрав IT, нужно отдавать себе отчет в стремительности изменений данной сферы. Даже простое поддержание уровня своего профессионализма потребует ежедневных затрат. Выходят новые версии языков и фреймворков, появляются более эффективные инструменты, библиотеки, редакторы кода, формируются полезные практики, проходят конференции, крупные компании делятся своими решениями. Все знакомые мне успешные разработчики регулярно тратят время на приведение себя в IT-форму. Полчаса на обеде, час вечером, полдня на выходных, видео между делом, обсуждение нового стандарта с друзьями-программистами, чтение списка новых фич фреймворка вечером – ваша будущая регулярная плата за членство в увлекательном мире IT.
Воспитывайте самоорганизованность. Вы должны уметь встроить в свой ежедневный рацион час чтения новостей, изучения новой технологии, выбирать верные объекты освоения вне основной работы. На рабочем месте, в свою очередь, уметь спланировать свой день и неделю так, чтобы все требуемые фичи были реализованы в срок. Например, я начинаю свой рабочий день с анализа панели задач таск-трекера. Затем просматриваю почту и мессенджеры. Это позволяет не пропустить срочные вопросы, пришедшие поздно вечером, ночью или рано утром, и скорректировать план на день. Быстрое и важное сначала, крупное и плановое – «в рабочем порядке». Каждый срочный запрос предварительно переосмысливается и фильтруется – действительно ли здесь «горит» для пользователей и продукта, не имеет ли место наносной человеческий фактор? В точках взаимодействия с коллегами придерживаюсь принципа максимально оперативных «спрашивать и отвечать». Если вы точно знаете, что под конец разработки фичи вам понадобится дополнительное железо или дизайн новой иконки – запросите сразу. Распараллельтесь, узнайте о рисках раньше, чем возникнет неожиданная задержка от смены процесса выдачи квот или внезапная болезнь дизайнера. Со своей стороны, быстро выданная вами информация помогает не тормозить работу других команд и не навлечь справедливый негатив их ненароком сорванными сроками.
Современные методологии разработки, используемые в серьезных IT-компаниях, такие как Agile или Scrum, требуют адекватной оценки, планирования и обеспечения выполнения в оговоренный срок самим разработчиком. И если раньше менеджеры несли вину за срывы сроков, сейчас всё больше культура компаний ведет к тому, что ответственность за оценку времени и их соблюдение перекладывается на программиста. Если же вы, выбирая IT, грезите фрилансом и удаленной работой – самоорганизация понадобится вам вдвойне. Например, во фрилансе вы сами себе и менеджер, и руководство – необходимо верно рассчитать свою нагрузку и сдавать вовремя без лишних мотиваторов. А трудясь удаленно, без рабочей атмосферы офиса и темпа, задаваемого вашими коллегами бок о бок, приходится противостоять соблазнам и раздражителям, переключающим ваше внимание.
Начните с малого – плана на день. Научитесь полностью выполнять его. Честно отвечайте себе, почему не смогли. Были недостаточно быстры? Оттачивайте мастерство, используйте вспомогательные инструменты. Запланировали слишком много? Отделите желаемое от действительного, учтите предыдущий опыт выполнения подобных дел для понимания требуемого времени. Нашлись более срочные дела? Оцените важность всех задач и выберите меньше, но из самых нужных.
Привыкайте брать ответственность и проявлять инициативу. Тренируйтесь на других сферах – подумайте, как оптимальнее пройти от дома до работы или университета, как передернуть привычный шаблон поведения в стандартной ситуации, как сократить время сбора утром. Попробуйте мыслить нестандартно, организовать расстановку книг в домашней библиотеке или провести небольшой митап в известной вам области. Зачем? Затем, что это именно те важные софт-скилс, которые все чаще желает видеть в своих сотрудниках индустрия ПО. Методологии построения рабочего процесса, равно как и критерии оценки сотрудников, – быть может, сами того не осознавая, – исходят из наличия у топовых сотрудников способности предлагать улучшения, внедрять их в команде и… отвечать головой, если твой «улучшающий код» внезапно отправил сервера прилечь на пару часов на незаслуженный отдых. Подход управления разработкой Scrum поощряет участников команды, склонных брать на себя дополнительные роли, например, роль scrum-мастера. Подход с наличием начальника-надзирателя, увы, устарел. Сейчас до разработчика спускается задача, детали реализации которой, ожидается, предложит он сам. Более того, всё больше распространяется презентация результата заказчику напрямую самим разработчиком. А это значит, что вы должны уметь собрать информацию о проделанной работе со всей команды и красиво ее подать, общаться и выступать перед людьми, держаться уверенно, ориентироваться в моменте и немного быть политиком, отвечая на неудобные вопросы заказчика. Выступления на конференциях, написание статей, предложения по организации процессов учитываются наравне с ответственным и качественным программированием нужной фичи – прямой обязанностью разработчика. Проникнитесь, насколько нужные здесь качества далеки от стандартных базовых черт хорошего разработчика. По моему опыту, компании склонны нанимать «человека, умеющего говорить», чем подчас более глубокомысленного и вдумчивого специалиста с яркими чертами интроверта. Как по мне – уход не на ту тропинку с главной дороги, но реалии таковы, и вы должны быть к этому готовы.
Обозначьте верные приоритеты. Сейчас жизнь IT бурлит и кипит, отнимая у наиболее увлеченных кадров всё свободное время, занимая их молодые умы. Я видела многих, кто сгорал на работе. IT-успех – удел молодых, амбициозных и азартных. Регулярно сидеть, день и ночь дописывая захватывающую фичу, доделывая нестандартный проект, – сродни зависимости. Образ небритого и немытого, физически мало развитого молодого человека органично примеряется и на паренька-геймера, и на талантливого программиста, потому что грань отчасти стирается. IT может поглотить, увлечь и завладеть вашим разумом гораздо больше, чем на рабочие 8 часов в сутки.
Если в вашей системе ценностей важнее семья и дети, если вы хотите жарить котлеты, гармонично сочетать в своей жизни другие сферы и любимые хобби – пожалуйста, смиритесь, что вероятность сделать что-то революционное в сфере IT низка, ибо всегда найдется более поглощенный и азартный, на грани нормы и безумия. Пока вы будете сплавляться с друзьями на байдарке, он придумает, как оптимизировать архитектуру подключения серверов или как изменить алгоритм, чтобы качественнее обучить нейросеть. Посему сразу установите себе верхний «keep balance» – соотношение времени и важности между IT и семьей, спортом, увлечениями. Иначе, поставив всё на красное, вы рискуете остаться у разбитого корыта, если, что не редкость, наступит разочарование в работе программистом или ваша карьера не сложится профессионально.
Советы в конце подраздела
–› Поймите, интересна ли вам эта сфера. Да. Раз вы читаете эту книгу.
–› Убедитесь, что можете. Трезво оцените силы и способности.
–› Подумайте, обладаете ли нужными софт-скилс и готовы ли развивать их в себе.
–› Вникайте, переосмысливайте стандартные школьные/университетские материалы.
–› Ходите на курсы. Пробуйте. Давайте второй шанс. Бросайте, если нет искры.
Меня всегда раздражали онлайн-уроки, выложенные неизвестно кем на YouTube, книги вида «Осваиваем PHP за неделю» и прочие сочные источники, своими заголовками больше напоминающие новостные статьи желтой прессы. Всегда возникал вопрос: зачем вы тратите время на многочасовые просмотры сомнительных видео и чтение подобных книг? Просто пойдите и сделайте. Смотреть 60 минут урок, где пишут 1 строчку кода – что может быть менее эффективным! Соберитесь, почитайте документацию, напрягите мозг. Вы же не развлекаться сюда пришли и смотреть видео с котиками. Займитесь делом. И если после этого заявления вы всё еще здесь – отлично. Сойдемся на том, что кому-то такой подход ближе и, смотря затянутые часовые ролики про вывод «Hello, world!» от эникейщика, вы вдохновляетесь и верите, что способны перерасти в высококлассного специалиста, – что ж, «на войне все средства…». Но для серьезного подхода нужны качественные, профессиональные и глубокие источники.
Скучная теория? Увы, она важна. Форму над содержанием можно несколько скрасить, но суть останется неизменной – вы должны впитать, осознать, выстроить в своем сознании базис.
Если вы начинаете с нуля и самостоятельно, найдите фундаментальные источники:
• программы мировых университетов. Массачусетский технологический институт, Калифорнийский университет, Стенфордский, Кембриджский и Оксфордский, университеты, Национальный университет Сингапура, Австралийский национальный университет, Мельбурнский университет и другие признанные мировым сообществом учебные заведения. Посмотрите актуальный рейтинг IT-вузов и интересующих вас специальностей, зайдите на их сайты и сообщества, найдите план обучения, списки источников и рекомендуемые материалы;
• списки книг по базовым дисциплинам, признанных лучшими интернет-сообществом. По теории языков программирования, в т. ч. актуальные учебники для вузов; по алгоритмам – хотя бы знаменитый Кнут и его серия «Искусство программирования»; по машинному обучению и искусственному интеллекту – например, «Машинное обучение» Хенрика Бринка, Джозефа Ричардса и «Верховный алгоритм» Педро Домингоса, труды по информационной безопасности, сетевым технологиям, web-программированию в контексте интересующих вас языков;
• курсы на Coursera – достаточно древние, с хорошими рейтингами, от уважаемых лекторов;
• в конце концов, школьные учебники по информатике!
Если вы студент профильной специальности, данный шаг можно опустить – система сделает основное за вас. Однако студентам бывшего СНГ и не-западных стран стоит дополнительно проделать всё вышеописанное с программами вузов США, Европы, Израиля – скорее всего, там вы найдете более современные источники, что поможет проще адаптироваться к реальным практическим условиям впоследствии.
Если вы начинаете с минус одного и самостоятельно – тогда, так и быть, позвольте себе посмотреть несколько вышеупомянутых поверхностных и легких лекций или онлайн-уроков: по IT-сфере в целом и отдельно по перечисленным выше базовым направлениям. После чего вернитесь к пункту ноль и обратите свое внимание на менее развлекательные на вид, но жизненно необходимые фундаментальные данные. Ряд современных методик эффективного чтения советуют сначала внимательно изучить оглавление, вдумчиво прочитать название каждого раздела и подраздела, затем бегло пролистать книгу. Такие действия направлены на создание в мозге некоего базового структурного каркаса, который будет расширяться деталями и наполнять ранее подготовленные ячейки памяти более подробными материалами. Аналогично просмотр «поверхностных лекций» выполнит функцию формирования скелета материала, который впоследствии потребуется обернуть в релевантные ткани. Тогда к следующему этапу вы уже что-то осознаете, и знания будут наслаиваться, встраиваться в уже осмысленные аналогии.
Для школьников и, в первую очередь, для будущих абитуриентов профильных вузов существует еще один разумный источник – репетиторство. Зачастую программа учебников информатики пока еще сильно расходится с базовыми дисциплинами первых лет. Понять, та ли эта сфера, работать в которой вы действительно хотите, заглянуть чуть дальше в специальность могут помочь преподаватели вузов, занимающиеся подготовкой поступающих. Аналогичную роль играют подготовительные курсы, поддерживаемые сейчас во многих вузах. Не стоит упускать такую возможность. Так, когда в моей жизни встал вопрос поступления, именно мощь репетиторства я решила привлечь на свою сторону. Благо моя тетя была тем самым преподавателем вуза, и большое ей спасибо за заложенные тогда знания. Кстати, теперь небезызвестная вам и ставшая вызовом мне фраза про котлеты – была озвучена ею на тех судьбоносных занятиях.
Старайтесь понять концепты вглубь, осознавайте, представляйте в голове. Перечитайте несколько раз, поставьте на паузу и пересмотрите. Запоминайте по правилам когнитивных искажений: делая нелепые аналогии, создавая неприличные связи. Рисуйте образы на бумаге. Остановитесь и найдите взаимоотношения нового с известным. Не продолжайте, пока не поймете. Способы обучения не тема книги – но всё вышеперечисленное срабатывало лично для меня, и я считаю нечестным не обратить на них ваше внимание.
Поскольку сфера IT меняется с космической скоростью, книги как источник информации почти всегда не имеет смысла выбирать для операционных детальных знаний – для этого существуют документации, о чем поговорим позже. А вот как раз для базовых знаний и осмысления концептов: искусственного интеллекта, теории языков, истории IT, – наиболее уместным источником информации являются книги легенд IT, создателей языков программирования, базовые пособия по теории, например, по организации сети, ПК, ядра Linux и т. п.
Выбирайте в качестве авторов успешных программистов, основателей всемирно известных IT-компаний, уважаемых профессоров университетов, создателей популярных open-source решений, признанных лекторов и простых близких вам по духу разработчиков – всех, кто добился многого сам, всех, кто вас мотивирует и кто способен правильно разложить костер, который вам останется зажечь своим усердием, острым умом и мечтой.
Когда основы заложены – нужна надстройка из более практичных знаний. На данном этапе не так важно кристальное качество каждого источника, как их количество. Находите больше источников одного порядка, пусть одноплановых и похожих, поглощайте все.
Рутинный труд. Одинаковые кирпичи.
Например, вы изучили основы языков программирования, алгоритмы и веб-устройство. Вы хотите обучиться фронтенду. Тогда найдите все известные достойные книги по Javascript и CSS. Прочитайте их. Найдите сайты – обучающие порталы по теме вроде learn.javascript.ru и изучите их, найдите менее известные и более узкие книги по «лучшим практикам JS», с решением повседневных задач CSS, старомодные, но небесполезные для нулевых знаний книги, уроки, сайты по JQuery. Чем дальше, тем сложнее находить новое в материалах. 90 % информации будут похожи – они дадут вам то самое повторение, а 10 % будут новой крупицей, только у этого автора, этого источника. И продвинут вас вперед среди прочих. Нельзя прочитать только одну книгу по теме. Возьмите вторую, третью, четвертую, отсейте субъективизм автора, твердо запомните общее.
Стройте параллельно – задействуйте альтернативные каналы: помимо классических книг и фундаментальных лекций подключите к своим источникам статьи, книги «среднего звена» и те самые курсы. Но вот последние в современном мире отбирайте тщательно.
К сожалению, из-за стремления не слишком порядочных людей получать легкие деньги в наши жизни сегодня прочно вошел инфобизнес. Красивая оболочка, громкие слова – минимальный выхлоп. В каких-то обстоятельствах это может быть приемлемо. Например, детские кружки Arduino способны заинтересовать отраслью, пробудить азарт и интерес ребенка к более серьезному программированию. В этом случае допустимо собирать зрелищного робота-манипулятора, совершенно не понимая, что означают разноцветные полосочки на втыкаемом в плату резисторе.
Но не для профессионального становления. Учение не игра, не сборка машинки. Иначе – это поддержание инфобизнеса и средства заработка предприимчивых любителей быстрого дохода. Да, и от таких курсов/лекций/семинаров для вас может быть польза, отличная от нуля. Только если хотите идти по такому пути – сначала копайте глубже. Заложите тот самый фундамент. Это позволит построить базис, по которому вы сами сможете делать выводы и строить новое. Данный факт можно использовать в качестве самопроверки. Дают или дадут ли вам нужные знания, не пытаются ли сделать заложником? Не придется ли за любым советом обращаться на отдельных условиях и продолжать дальше только у них? Хорошая система должна уметь учить. Закладывать основу, поднимать на уровень выше, или, как принято в IT – на мета-уровень, – уровень более высокий, чем вам нужно для решения демо-задачи. Вы должны понимать, что за этим стоит.
Вот вам мой случай с тем же Arduino, но для взрослых. Для меня с детства радиоэлектроника была чем-то таинственным, страстно желанным и по стечению моды того времени прошедшим мимо меня. Признаться, уже в университете мне впервые довелось взять паяльник в руки и смастерить под чутким надзором примитивнейшую схему из резистора, лампочки и батарейки. Моему восторгу не было предела, но тогда дело на том и закончилось. Несколько позже я даже пыталась честно освоить советские книги по радиоэлектронике. А потом настал бум плат Arduino, Raspberry Pi и готовых наборов. Я с огромным воодушевлением стала обладательницей одного из них и занялась поиском в сети уроков для новичка. Нашлось много платных, а из бесплатных первым попался курс, где к каждому уроку прилагалась волшебная бумажка. Ее следовало наложить на плату и проколоть в обозначенных точках контактами деталей, закрепив их таким образом в нужных местах. Но зачем?! Моему возмущению выбранной методикой не было предела. Чтобы, наигравшись, заказать еще бумажек? Это плохой пример. А вот хороший. Объяснить, как построена панель и как проходят дорожки – где земля, где питание. Научить, как самому понять, в какие разъемы крепить деталь. Рассказать, как кодируются резисторы – да-да, это те самые разноцветные полосы на корпусе. Каждая из них – один разряд, третья – количество нулей. Именно такой способ верен, а не «возьмите коричневый цилиндрик из проданного нами набора».
Точно так же очень многие онлайн- и офлайн-IT-курсы сейчас страдают вырванностью из контекста и состоят из задач, которые зрелищны и интересны, но дают лишь быстрый «вау-эффект». Это неплохо. Чтобы заинтересовать. Но вы уже и так заинтересованы! Сделайте волевое усилие, перейдите на новый уровень. Не играйтесь, учите. Подводная часть айсберга намного больше видимого завораживающего верха. Не стоит забывать про нее.
Еще один плохой пример. Курс по CSS, построенный так, что уже уроке на третьем, после самых азов синтаксиса и имеющихся свойств, обучаемому предлагаются анимации. Да, это красиво. Но если дело заканчивается на выполнении бездумно скопированного кода, максимум с возможностью поиграться с параметрами продолжительности и направления, – это малополезно. А какой же вариант хороший? Тот, где объяснят, как работают анимации, как используют ресурсы, чтобы вы не затормозили интерфейс для пользователя и не оказали ему медвежью услугу. Где расскажут, какие существуют альтернативные решения, например, анимация на JS, научат структурировать и повторно использовать CSS-правила и приведут примеры в конце.
Хочется призвать относиться серьезнее к обучению в IT и к выбору источников в частности. Плоды деятельности разработчиков ПО нам приходится всё чаще пожинать в повседневной деятельности. И пока нас спасает то, что массовость разработки сосредоточена по большей части в развлекательных сферах жизни. Исследовательская деятельность, высокоточные разработки в сфере хирургии и роботостроение пока еще сосредоточены в очень узком кругу высококлассных разработчиков. Страшно представить, что жизненно важные строки кода будут написаны выпускниками вот таких курсов, где нужные последовательности символов для занесения в редактор, может, и были названы, но не оставили ни малейшего понимания о последствиях их выбора.
Представьте, что так бы учили врачей. Вырежем-ка аппендицит – это зрелищно и наглядно. А все названия на латыни спасительных лекарств, размещение задеваемых сосудов и обозначения хирургических инструментов – это скучная рутина, такой курс никто не купит, а посему подобную информацию мы опустим.
Во времена программирования на ассемблере или базовых версиях языка С разработчики жили в условиях почти «блокадного Ленинграда». Каждый кусочек памяти, каждый байт и принятое решение – тщательно выверялись и продумывались. Можно было смело запускать спутник с загруженной программой, перезалить которую годами не было возможности, и она продолжала работать как часы, без переполнения памяти и критических ошибок, в течение долгих месяцев. ПО такого качества вы вряд ли найдете теперь даже в весьма критичных сферах безопасности и медицины. Да, время снимает свои жесткие ограничения, но однажды такой кредит доверия может обернуться серьезными последствиями. Будьте ответственны, не гонитесь за модой, а если взялись – выбирайте такие источники и учитесь так глубоко, будто ваш код станет частью системы управления космического корабля, уносящего ваших детей во имя спасения человечества.