В наших кругах телевизоры – не самая модная отрасль, потому, когда успешно поборовшим задание на разработку приложения Smart TV стал пусть и непрофильный кандидат, я была безгранично довольна. Те, кто застал времена зарождения части «smart» в составе TV в не такие уж далекие 2010-е, возможно, помнят настоящий коэффициент IQ тех девайсов. Под капотом «умные» приложения содержали в себе обычный веб-браузер – казалось бы, что может быть проще. Но нет: видимо, опасаясь восстания машин, производители того времени прилагали значительные усилия по созданию всевозможных препятствий к торжеству ТВ-интеллекта. Документации и гайды по разработке тщательно запрятывались от незнакомцев, индусская поддержка брала недельные паузы на медитации, а сборка приложения и его тестирование на реальном телевизоре представляли собой путь из 9 кругов ада. Сюрпризы оказывались в самых неожиданных местах. Фокусы не ставились на элементы, стандартный HTML-ный select отказывался назначать выбранный элемент через JS, свойства CSS выделывали трюки уровня старых IE, а встроенные медиаплееры с их непредсказуемыми обработками сиков и сдвигов live-трансляций позволяли разработчикам медленно, но неотвратимо постигать дзен. Особенно отличался Philips, не желавший перезапрашивать и отрисовывать даже несколько небольших тумбнейлов на странице за небольшой промежуток времени и благополучно «вешавшийся» на этом так, что не срабатывала даже перезагрузка.
SDK, ОС платформ и их версии, системы сборки и тестирования на ТВ постоянно менялись. В каждом аппруве в стор оказывались какие-нибудь новые удивительные требования. Появлялись то лишние десятки полей, то дополнительные чек-листы, которые надо было заполнить. А еще требовалось подготовить 2 презентации в PowerPoint с картинками каждого экрана, таблицами элементов на нем, их подробным описанием на уровне «что должна делать каждая кнопка и каждый компонент приложения». Прошедшее все муки разработки – порядка нескольких месяцев! – приложение попадало в руки прилежных корейских или индийских тестировщиков. Спустя пару недель оно неминуемо возвращалось с замечанием вроде «ваша текущая выбранная кнопка недостаточно заметно обозначает фокус на себе с расстояния нескольких метров». После чего под крупные слезы дизайнеров рамка становилась еще жирнее и краснее. Продукт заново отправлялся на очередной цикл тестирования. Кстати, хочется снять кепку перед специалистами тестирования Индии и Кореи – как они проверяли функционал приложения на русском языке во времена отсутствия Google Translate по фото – для меня до сих пор остается загадкой.
Чтобы сражаться и побеждать, в этой сфере нужен был человек, разбирающийся не только в наборе качественного кода в редакторе, но и в сетевой и аппаратной частях устройств, необходимых для подключения/настройки ТВ под отладку. И он нашелся…
…среди выпускников кафедры машиностроения. До прихода к нам Игорь уже поработал несколько лет во фронтенде. Живость ума и самообучение позволили освоить верстку и JavaScript на профессиональном уровне, сохранив при этом совершенно не похожую на разработчика индивидуальность. Уникальный юмор, порой излишняя прямота, молодость и подчас пугающий менеджеров оптимизм выделяли его среди «типичных программистов». Широта принятия и познания в других слоях жизни отлично вписали его в коллектив, очертив ореолом легкости и позитивного мышления. А еще – нередко несли нам спасительную перезарядку.
Именно Игорь справился с гибридной, аппаратно-фронтендерской, спецификой Smart TV успешнее многих. Сначала выполнил тестовое задание по написанию несложного ТВ-приложения, с нуля разобравшись со всей платформенной инфраструктурой. Затем практически единолично разработал для нашего крупного заказчика проект с не самым тривиальным интерфейсом, платежными сервисами, VoD и live-видео.
И хотя позднее, перейдя фронтенд-разработчиком в одну из крупнейших российских IT-компаний – «Рамблер», – он зарекся никогда не иметь дело с «теликами», заслуженного места в историях успехов непрофильных кандидатов ему уже не изменить.
Смена работы выглядит волнительной вдвойне, если сопряжена с переездом в другой город и выходом в одну из самых желанных компаний нашего IT-рынка. На деле же все гораздо комфортнее. Крупные корпорации несут в себе отлаженный процесс. Меня ждали теплая встреча, экскурсия по атмосферному, живому и бесконечно уютному офису. Место с видом, заставляющим хотеть покорить мир: на Неву, Литейный, полный историй и духа побед-центр. И уже подготовленный с учетом пожеланий персональный ноутбук. А главное – уникальные люди, такие, каким оказался Рома – мой будущий напарник.
Молодой, со стильной прической и холеным внешним видом – немецкие корни удивительным образом переплелись с сибирским происхождением. Его выделяла открытость, а желание поделиться знаниями полезных утилит и важными тонкостями проекта захватило меня с головой на весь оставшийся день.
Здесь, в Яндексе, больше всего меня поразило умение разработчиков молниеносно ориентироваться в любом инструментарии. Быстро пробовать, настраивать – не важно, насколько полна документация. И это-то при всеобщей редкости подобных навыков для типичного фронтендера. Казалось бы, нужно сочетать в себе познания DevOps, где-то становиться немного админом и бэкенд-специалистом, чтобы умело манипулировать системами выкатки и развертыванием на серверах. Среднестатистический, порой даже опытный, мидл-фронтенд-разработчик зачастую стремится избегать подобной деятельности, не чувствуя себя в ней как рыба в воде и, пожалуй, слегка побаиваясь.
Мой напарник писал скрипты склеивания файлов и настройки конфигов будто бы между делом. Всё это получалось так же легко, как центрирование какой-нибудь банальной фронтендерской кнопки, выполняемое не первый год. Самые современные полезные инструменты были подключены к проекту по инициативе одного только Ромы. Не успевали плавно распространиться по проекту одни из них, как в свободное время, пробуя, изучая, осознавая преимущества, он выбирал новый оптимальный для решения некой задачи вариант и встраивал его в код.
Лучше всех знакомый с проектом, Рома был назначен мне ментором. Как руководитель в прошлом, я сразу оценила верный педагогический подход: преподнесение информации, немаловажный начальный ввод в курс дела, пояснения по каждой из первых задач, экскурсии по кодовой базе и полезным внутренним инструментам. Присутствовали и необходимые рассказы на вечную тему: «Почему именно в этом месте “так исторически сложилось”». Хотя на тот момент я работала фронтенд-разработчиком дольше него и считала себя опытнее в плане обучения сотрудников – с легкой долей зависти про себя пришлось отметить профессионализм его преподавательских действий.
Поначалу мне виделось что-то непривычное в суждениях Ромы для порой типовых фронтендерских задач. Однако поток новой информации, обрушившийся на меня в тогда еще чуждой компании, и лояльность к окружающим не оставляли времени и весомых оснований для развития своих мыслей на этот счет.
Пока разработчики других отделов десятками решали, какие средства для тестирования выбрать, с чего начать, как вообще подойти к написанию кейсов, мой напарник успевал не только определиться, но и настроить, написать и вдобавок по собственной инициативе – интегрировать в процесс Continuous Integration. При следующей встрече не полениться набросать презентацию, демонстрирующую ключевые моменты его решения коллегам. Стоит ли упоминать, что у человека, который так горел глазами на работе и успевал так много, были и внеурочные проекты, где он не пытался зарабатывать старыми знаниями, а пробовал новинки IT-шной сферы, держал нос по ветру и стремился улучшить свои программистские подходы.
Когда в одной из задач потребовалось динамически менять заголовки страниц, он подсказал мне релевантную React-библиотеку.
– Посмотри Helmet, – нетрадиционно для привыкших к чатам разработчиков вслух произнес напарник. Максимальное время живого общения голосом было любопытной деталью нашего взаимодействия. Десятки фич и сотни строк рефакторинга доехали до пользователей в разы быстрее благодаря такому незамысловатому подходу.
– Как-как? – переспросила я, не зная подобного слова и, как следствие, не найдя аналогий с решаемой задачей.
– Как шлем по-английски, – доходчиво пояснил мой ментор.
Английским я занималась то параллельно, то последовательно всю сознательную взрослую жизнь: вместо, пыталась читать оригиналы, смотреть фильмы, использовать для общения в поездках за границей. Да, асом не была, но всё же. Та ситуация со шлемом меня задела. Неужели всё зря, и для всех, но только не меня, очевидно, как будет шлем по-английски?
Впрочем, по этой части чуть позже я позволила себе успокоиться – когда однажды за обедом я узнала от своего наставника, что он дипломированный преподаватель английского языка и даже проработал несколько лет в школах.
Его история еще одно яркое доказательство: университетская профессия и время старта не так важны, как желание, природная гибкость ума и огонь в глазах.
Не все истории смены своей текущей специализации на работу в IT успешны. Не все долговечны.
На моей памяти было резюме кандидата, где строки о работе в должности фронтенд-разработчика в равных пропорциях чередовались со строками вида «повар-технолог» и «главный суши-мастер». Подтверждая примеры выше, с тестовым заданием он справился вполне прилично – хотя и для уровня джуниора, а не искомого мидла. Мы решили не нанимать. Всё же в здании офиса недавно нашим же гендиректором был открыт стильный ресторан, куда мы все ежедневно ходили обедать. И очень уж не хотелось быстро потерять ценный найденный IT-шный кадр.
Минуточку, скажете вы, там, парой страниц выше, было нечто такое, что зацепило меня, резко выбилось из общего вполне себе политкорректного контекста. Что-то такое, не очень приятное на глаз и слух. Ах да, «программисты-аутисты»… Позвольте, звучит как оскорбление! К чему же это?
Компания, в которой я провела самые яркие карьерные годы, была выстроена не то чтобы с нуля, а скорее даже с минуса. Малоприбыльный регион – Орловская область, недостаток высокопрофессиональных кадров. Первый офис в подвале, где ведрами приходилось вычерпывать воду. А сейчас «Инвентос» – известные каждому клиенты, серьезные решения в своей нише, команда глубоких и мыслящих профессионалов и собственное здание компании.
Большинство выпускников-программистов начала 2000-х с радостью погружались в дебри отрешенного от мира кодирования только-только набирающей обороты отрасли. Но, к счастью, случались редкие и поворотные исключения. Наш генеральный директор и основатель компании обладал решающим для IT тех лет талантом – умел объединять людей. Профильное образование, нежелание «кодить» и поразительное чутье в вопросах того, за что стоит браться и что выстрелит в перспективе, привели к созданию многих прорывных продуктов. Одним из них стал будущий Rutube, проданный впоследствии холдингу «Газпром-медиа».
Прямота, требовательность к сотрудникам и легкость прощания с теми, кто не болел душой «за дело», позволили построить не только успешный IT-бизнес, но и собственный ресторан, и даже радиостанцию.
Когда я впервые услышала то сравнение – «программисты-аутисты» – из уст «отца», моему возмущению не было предела. Разве можно относиться так к своим сотрудникам, тем, кто отдает большую часть своей ежедневной жизни на благо бизнеса? Масштаб эмоций усилился атмосферой: знаменитая фраза прозвучала на ежегодном выступлении в канун новогодних каникул перед всеми трудившимися в компании разработчиками. Только позже я смогла понять, насколько жизненно и справедливо то сравнение и насколько дальновидным было его озвучить.
Признание проблемы – половина решения. Услышав подобное, мне захотелось не быть тем ограниченным человеком, не умеющим общаться с внешним миром. Да, задачи требуют концентрации, но для великих продуктов всегда приходится выходить из зоны комфорта. Выбираться за рамки, чтобы было куда расти. Достроить карту за дверцей дома и не упасть в пропасть. Важно мыслить нестандартно, комбинируя знания и опыт. А к человеку, открывшему после запуска IT-компании не менее успешный ресторан, свою радиостанцию, отстроившему современный офис и спроектировавшему научный городок, – стоит как минимум прислушаться.
«Так когда начать?» – спрашиваете вы. Будучи родителем и беспокоясь за будущее своих детей, думая, что сделанный ими или настоятельно рекомендованный вами выбор в пользу IT вечен, как набитая подростком татуировка, – вздохните и расслабьтесь. Надеюсь, приведенных примеров силы последующей и осознанной смены специальности достаточно. Если же вы школьник или представитель иной профессии, сомневающийся в сроках начала, то у меня для вас, как читателей этой книги, хорошие новости. Вы уже начали.
Советы в конце подраздела
–› Определитесь как можно раньше.
–› Срок вторичен, сбалансированное развитие первично. Ставьте на первое место кругозор, не жертвуйте всем ради одного.
–› Не беспокойтесь о четкой точке старта. Постепенно окружайте себя связанными источниками. Уже сейчас.
С чего начать
Создать вокруг себя правильную атмосферу так важно и так непросто поначалу. Попасть в хорошие руки. Сформировать победное чутье.
Переделать – почти всегда значит устранить последствия, вернуться в начальную точку и сделать заново. Чем ближе к началу было совершено неверное ветвление, тем больше ресурсов потребует нормализация ситуации до желаемой. Только ли вы задумываетесь о поступлении на IT-специальность, ищите ли первый источник материалов о программировании, или же выбираете стек посовременнее для нового крупного проекта – отнеситесь к первым шагам втройне внимательнее. Но и не тяните. Если время идет, а видение не приходит – возможно, у вас просто недостаточно операционных данных. Сделайте любой интуитивно перспективный первый шаг и со временем дорога возникнет.
Вспоминая себя в школьные годы, могу сказать, что информатика и математика мне нравились всегда. Я выделяла их в числе любимчиков, однако никаких особых планов вокруг не строила. Школа значилась как лицейская, с веяниями современных подходов, и по ряду предметов полагались факультативы: некие кружки с углубленным изучением отдельных аспектов. Так, среди прочих дополнительных занятий по математике и английскому, я записалась на курсы программирования. То событие и послужило мощным толчком моего дальнейшего пути. Да, мы, программисты, любим быть впереди. А любые дополнительные курсы как нельзя лучше этому осознанию способствуют.
В самой программе тех школьных факультативов не содержалось ничего примечательного. По правде сказать, я не могу вспомнить никаких занятий, кроме двух: на одном мы программировали знаменитую черепашку ЛОГО, на других – осваивали Всемирную сеть и возможности коммуникаций в WWW. Но именно подобное чувство причастности к неизвестному многим, коллекционирование десятков мелких кусочков знаний подогревали интерес, заставляли больше смотреть, читать, впитывать и вне часов курсов. Каждый нюанс, каждый новый навык дает незаменимую фору, и кто знает, как она пригодится вам спустя многие годы. Пусть даже и в ничтожных бытовых мелочах. Почтовый сервис Mail.ru предлагает сейчас скидки от партнеров, процент по которым вычисляется по формуле, учитывающей стаж регистрации в почте. Максимальной скидкой ныне я обладаю исключительно благодаря тому, что на одном из тех школьных факультативов мы регистрировали почтовый ящик именно на этом самом, тогда относительно недавно появившемся сервисе.
Для всех, кто только мечтает кодить или уже работает и ищет точки роста, можно выделить основные формы деятельности и рекомендации, способствующие погружению в правильную и сильную атмосферу. Они могут сформировать надежную основу, если вы новичок, а если заказчики и релизы уже успели помотать ваши нервы – посмотрите на него как на чеклист профессионализма и дальнейшего развития. Виды занятий и принципы поведения во многом схожи на разных этапах пути, их же наполнение выбирайте исходя из своего текущего уровня.
С другой стороны, на волне популярности появляется масса некачественного контента, видеоуроков, онлайн-школ, находятся нечестные и непрофессиональные организаторы курсов офлайн. В Яндексе есть отличная возможность узнать у огромного числа коллег совет по волнующей тебя проблеме – не только рабочей. И одним из поднимаемых жизненных вопросов, которые мне доводилось застать, был поиск достойных подростковых курсов по программированию. Нет ничего удивительного в том, что и умудренные разработчики задаются подобными вопросами: важно развить и подогреть интерес школьника, без сухой теории и с грамотными лекторами. Даже если подросток уже сам пытается изучать и пробовать языки.
Интересуйтесь научно-популярными источниками,
На очередной из таких встреч мне довелось пообщаться с разработчиком одной из ключевых частей продукта – поисковой выдачи. Приятный внешне парень с располагающей улыбкой и добрым приветливым взглядом. Краткость и содержательность отличали его речь от многих других моих оппонентов, ничуть не вредя при этом теплоте и глубине беседы – с ним хотелось говорить. Он выглядел довольно скромным молодым сотрудником, недавно пришедшим в компанию. Легкое недоумение, «почему именно он» составляет ядро сложного продукта, быстро сменилось угрызениями совести за свою предвзятость. Так, в ходе разговора речь зашла о соревнованиях по программированию, в том числе чемпионатах мира. Случайно всплыло имя общего знакомого, и выяснилось, что мой собеседник – также участник и финалист международной олимпиады ICPC – читай: программист с логическими способностями и алгоритмическими знаниями выше среднего. И вне стен текущего места был частью создания сложнейших систем, обеспечивающих безопасность в нашей повседневной жизни. При этом располагающий и простой для коммуникаций человек. Именно такой – подкованный и сливающийся с командой – ценен каждой престижной IT-компании, стремящейся изменить мир и перестроить процессы будущего. В таких корпорациях зачастую мечтают работать профильные студенты и начинающие свой путь в отрасли. Позволить своим мечтам сбыться вы сможете, научившись быть органичной частью целого. Подчас вам придется менять линию поведения на приносящую продукту максимальный успех в счет собственного квалифицированного эго. Знайте многое, показывайте по необходимости.
Современные методологии разработки, используемые в серьезных IT-компаниях, такие как Agile или Scrum, требуют адекватной оценки, планирования и обеспечения выполнения в оговоренный срок самим разработчиком. И если раньше менеджеры несли вину за срывы сроков, сейчас всё больше культура компаний ведет к тому, что ответственность за оценку времени и их соблюдение перекладывается на программиста. Если же вы, выбирая IT, грезите фрилансом и удаленной работой – самоорганизация понадобится вам вдвойне. Например, во фрилансе вы сами себе и менеджер, и руководство – необходимо верно рассчитать свою нагрузку и сдавать вовремя без лишних мотиваторов. А трудясь удаленно, без рабочей атмосферы офиса и темпа, задаваемого вашими коллегами бок о бок, приходится противостоять соблазнам и раздражителям, переключающим ваше внимание.
Начните с малого – плана на день. Научитесь полностью выполнять его. Честно отвечайте себе, почему не смогли. Были недостаточно быстры? Оттачивайте мастерство, используйте вспомогательные инструменты. Запланировали слишком много? Отделите желаемое от действительного, учтите предыдущий опыт выполнения подобных дел для понимания требуемого времени. Нашлись более срочные дела? Оцените важность всех задач и выберите меньше, но из самых нужных.
Привыкайте
Обозначьте
Если в вашей системе ценностей важнее семья и дети, если вы хотите жарить котлеты, гармонично сочетать в своей жизни другие сферы и любимые хобби – пожалуйста, смиритесь, что вероятность сделать что-то революционное в сфере 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 и к выбору источников в частности. Плоды деятельности разработчиков ПО нам приходится всё чаще пожинать в повседневной деятельности. И пока нас спасает то, что массовость разработки сосредоточена по большей части в развлекательных сферах жизни. Исследовательская деятельность, высокоточные разработки в сфере хирургии и роботостроение пока еще сосредоточены в очень узком кругу высококлассных разработчиков. Страшно представить, что жизненно важные строки кода будут написаны выпускниками вот таких курсов, где нужные последовательности символов для занесения в редактор, может, и были названы, но не оставили ни малейшего понимания о последствиях их выбора.
Представьте, что так бы учили врачей. Вырежем-ка аппендицит – это зрелищно и наглядно. А все названия на латыни спасительных лекарств, размещение задеваемых сосудов и обозначения хирургических инструментов – это скучная рутина, такой курс никто не купит, а посему подобную информацию мы опустим.
Во времена программирования на ассемблере или базовых версиях языка С разработчики жили в условиях почти «блокадного Ленинграда». Каждый кусочек памяти, каждый байт и принятое решение – тщательно выверялись и продумывались. Можно было смело запускать спутник с загруженной программой, перезалить которую годами не было возможности, и она продолжала работать как часы, без переполнения памяти и критических ошибок, в течение долгих месяцев. ПО такого качества вы вряд ли найдете теперь даже в весьма критичных сферах безопасности и медицины. Да, время снимает свои жесткие ограничения, но однажды такой кредит доверия может обернуться серьезными последствиями. Будьте ответственны, не гонитесь за модой, а если взялись – выбирайте такие источники и учитесь так глубоко, будто ваш код станет частью системы управления космического корабля, уносящего ваших детей во имя спасения человечества.
Настелим крышу
Практика. То, что ветшает быстрее всего и чаще прочих требует замены. Огромный пласт нужной информации вы сможете получить, только каждый день применяя и поддерживая полученные знания. Подсказки линтеров и редакторов, ошибки в консоли браузера, названия пунктов для дебага в инструментах разработчика, сочетания горячих клавиш – всё, что почти бесполезно искать в книгах, статьях и курсах. Ваши наработанные практики, выбор правильного решения из десятков изученных источников, умение применять абстрактные паттерны проектирования – самая неудобная, уникальная работа, которую каждый обязан проделать для себя.
На любом собеседовании вас сейчас с большой вероятностью попросят написать код, исправить ошибки в некоем фрагменте или хотя бы сделать ревью, то есть продемонстрировать свои практические навыки. Более того, если ранее основной упор шел на фундаментальные знания – что, с одной стороны, необходимо, а с другой – может быть заучено без понимания, – то сейчас в большинстве крупных компаний вас могут даже не спросить ни про один паттерн проектирования. По крайней мере, так показал нынешний опыт общения с рядом крупных компаний, включая текущее место работы.
Писать каждый день, пробовать на практике вычитанное решение, применять потенциально полезный инструмент, заменять устаревшие фрагменты знаний новыми и латать замеченные дыры – постоянный труд, без которого всё вышеперечисленное – бесполезная и безжизненная заготовка. Помню, однажды мы проводили собеседование с тогдашним техническим директором в поисках нового фронтенд-кандидата. Однажды он задал тогда показавшийся мне неожиданным вопрос: а когда вы прочитали некую статью, скажем, как сверстать кнопку новым способом, – как вы поступаете в дальнейшем? И наиболее успешный кандидат был склонен давать ответы вроде: “Пробую сделать, поиграться, сразу же набрав в редакторе/консоли”. Менее успешные: “Запоминаю, беру на заметку на некое будущее”. Почему последнее не работает – потому что поток информации огромен, и мало кто способен действительно воспроизвести увиденное в дальнейшем – а часто даже не способен вспомнить или найти первоисточник! И потраченное на чтение время превращается в тыкву. Практика склонна увеличить шансы на воспроизводство полученной информации в дальнейшем, связав ее с моторикой.
В этой связи мне весьма импонирует одна исходно древнекитайская мудрая мысль. И когда меня однажды попросили предстать с просвещающим докладом для начинающих фронтенд-разработчиков, а также тех, кто только подумывает ими стать, – именно ей я закончила свое выступление. «Скажи мне – и я забуду, покажи мне – и я запомню, дай мне сделать – и я пойму». А посему – пробуйте!
Добавим деталей
Что отличает мастера? Знание 1000 и 1 нюанса, способных в корне изменить результат. Когда 90 % золота добыто из рудников, очень сложно выискивать 10 % крупиц, рассредоточенных в десятках кусков породы. Так и с мелкими секретами IT.
Подписывайтесь на блоги известных разработчиков, евангелистов, лекторов. Имена будут меняться, суть их важности – нет. Благодаря им вы узнаете, как лучшим образом выровнять текст или скруглить уголки при определенном стечении условий. Читайте новостные сайты, в первую очередь зарубежные. Не забывайте знаменитый Хабр. Читайте в соцсетях «разработчиков-предпринимателей»: Илона Маска, Марка Цукерберга, Билла Гейтса… Именно там может встретиться та самая крупица, которая дополнит ваш багаж и позволит создать лучшее, профессиональное решение.