«Возьмите бесплатно, буду делать, что скажете»: 7 советов тем, кто хочет программировать
* «Медуза» внесена Минюстом в реестр иноагентов
Иногда кажется, что все вокруг программисты. Но если задуматься о получении новой профессии в ИТ, не так легко понять, куда податься и с чего начать.
В этом отлично разбирается бывший технический директор «Медузы»* и «Букмейта» Самат Галимов, который поделился с читателями опытом и рекомендациями в формате AMA. Собрали в материале самые интересные вопросы и ответы: какие языки программирования учить, как выбрать курсы и где найти профессиональную поддержку.
Какой язык программирования изучить, чтобы стать ценным специалистом?
Когда-то давно навык уверенного пользователя ПК был одним из преимуществ при приеме на работу. Сейчас это необходимый скилл, без которого никуда не возьмут. Возможно, в будущем владение каким-нибудь языком программирования станет такой же необходимостью.
Какой язык программирования вы бы посоветовали изучить редактору? Не ради фана, а чтобы повысить свою ценность на рынке труда.
Мне не близок такой утилитарный подход к обучению, я бы отталкивался от того, что интереснее, что драйвит. Отвечу кратко на ваш вопрос, а потом расскажу, как бы я подходил к обучению.
Во-первых, можно верстать что-то по мелочи самому. Тогда — HTML и CSS, а потом JavaScript. Последний — самый настоящий язык программирования.
Во-вторых, можно научиться парсить и обрабатывать данные для исследовательских статей. Как минимум вам будет понятно, насколько сложно собрать данные, которые вам нужны, чтобы корректно поставить задачу программисту и чтобы он не водил вас за нос. Для этого круто подойдет Python с его библиотеками типа Scrapy.
А я бы учил тот язык, который по-настоящему захочется учить.
Если вам важны люди — отталкивайтесь от друзей, которые помогут. Если есть друг-программист, который поможет с Erlang, — начинайте с него, хотя это и немного экстремально. У Ruby есть дружелюбные слак- и телеграм-сообщества.
Если вам хочется попробовать сделать мобильное приложение и вы пользуетесь Айфоном и Макбуком — попробуйте Swift, там все как у «Эпла» — «красиво». Если Андроид — есть Kotlin.
При прочих равных я бы выбрал JavaScript и Python. По обоим языкам тонна бесплатных источников самого разного формата в интернете, начиная от полноценных учебных курсов на том же «Яндекс-практикуме» и заканчивая классными текстовыми туториалами и ютуб-лекциями.
Я думаю, что для входа в программирование важнее подходящий по вайбу, темпу и настроению учитель, пусть и на «Ютубе». А еще личный интерес — что-то, что даст положительную обратную связь — positive feedback loop — в начале обучения, а язык и конкретные технологии гораздо менее важны.
Где получить обратную связь и совет от других программистов?
Подскажите ресурсы — форумы, каналы, чаты, — где тусят опытные программисты, в частности С++, на суд которых можно выложить свой труд и получить объективную профессиональную оценку на предмет полезности/бесполезности?
Опытные плюсовики водятся в Nginx, PostgreSQL, Linux и прочих серьезных проектах. Я бы в их IRC-чатах или даже в dev-рассылках посмотрел и спросил.
Но «объективную профессиональную оценку» в публичном пространстве не получишь. Выскажутся не по делу люди, которые не секут в теме. Лучше идти точечно к человеку и задавать конкретные вопросы: «читабелен ли этот код» или «нормально ли вот тут модуль выделен».
А полезность или бесполезность определяет не программист, а конечный пользователь. Пользуются и решают свою проблему вашим кодом — значит, полезный код. Не пользуются и не решают — бесполезный. Хотя учебный код полезен тем, что вы его написали!
Должен ли программист быть разносторонним специалистом?
Нужно ли программисту разбираться в чем-то, кроме программирования, чтобы стать высокооплачиваемым специалистом?
Да, нужно уметь приносить пользу бизнесу, а не просто «прогать за деньги». Это умение состоит из многих компонентов: говорить человеческим языком с непрограммистами, понимать их боль, разбираться в бизнес-проблеме, уметь предлагать максимально простые решения, объяснять свое решение и потом его продвигать, по пути передоговорившись, потому что с ходу наверняка все придумали неправильно.
Это скилл, за который платят нереальные деньги. А все потому, что вы приносите пользу, а не просто «прогаете за деньги».
Где учиться на фронтенд-разработчика?
Как правильно учиться программированию? Например, я хочу стать фронтенд-разработчиком. Беру кредит и покупаю дорогой годовой курс. Так нормально или я просто потеряю год жизни?
Я бы пошел на «Яндекс-практикум». Самый безопасный и простой вариант — там не только знания, но и менторы адекватные. Аналогичные школы есть у «Мэйл-ру» и Сбера. Они готовят джунов и потом сразу берут их на работу — это классный вариант, если учите не просто для души, а для работы.
Если вы хорошо мотивированы, можно погуглить и пройти бесплатные онлайн-курсы, учиться по туториалам, но это сложнее. Классно, если сразу найдете ментора — нормального программиста, который будет подсказывать и помогать со сложностями, это очень важно.
Если вы в провинции, хотите человеческого контакта и любите рисковать, найдите нормальную ИТ-компанию поблизости — они обычно проводят всякие локальные митапы — и говорите им буквально: «Очень хочу работать программистом, возьмите меня бесплатно, буду делать, что скажете». Я знаю, что в Твери ребята так делают и реально учат с нуля.
Как увлечь детей программированием?
У меня двое сыновей-младшеклассников. Они посещают кружки и секции, чтобы попробовать себя в разных областях, — вдруг что-то так увлечет, что они захотят этим дальше заниматься на более серьезном уровне. И вот настал черед попробовать программирование.
Как к нему подступиться? Можно, конечно, отдать в кружок робототехники — их сейчас тысячи. Но подозреваю, что там просто собирают лего-роботов по инструкции, без понимания принципов, особенно не погружаясь в предмет. С чего начать? Как увлечь? Важна ли здесь системность, какой-то план? Курсы для детей? Сообщества? Может, написаны интересные книжки по теме?
Как отец троих, я опасаюсь давать советы про детей, тем более что моей старшей всего семь, она ходит в вальдорфскую школу и компа в глаза не видела. Тем не менее есть несколько крутых штук.
Из ресурсов и технологий: есть программирование под «Майнкрафт» — это чистый героин и при этом полезный. Там есть даже русская версия сайта, но в основном все на английском, конечно. Список книжек — на сайте Brightly. Насчет курсов — посмотрите, как препод говорит с ребенком, как мотивированы дети. То, что их научат делать что-то руками, даже не понимая принципов, — думаю, не суперстрашно. Я считаю, что главное, чтобы ребенку было интересно. Если он будет сам сидеть копаться — mission accomplished.
Что почитать будущему программисту?
Какие твои любимые книги о программировании и почему?
Я очень люблю FreeBSD Handbook и PostgreSQL Documentation. Это книги, которые помогают решать конкретные проблемы, но при этом объясняют базовые принципы. Академически выверены, но написаны простым и понятным языком. Правда, это скорее про сисадминство и SQL.
По программированию у меня хорошие воспоминания о Кормене — «Алгоритмы: построение и анализ», я в школе им зачитывался, когда участвовал в олимпиадах. Книга «Язык программирования Си» Кернигана и Ритчи классная, потому что короткая и понятная, и туториал по Go — чистое продолжение этой книги и один из немногих туториалов, который я честно прошел до конца (ну или почти до конца). Я пытался читать книжку Pragmatic Programmer по Ruby — она, кажется, хорошая, и вообще вся серия достойная.
Про менеджмент я в свое время без остановки прочитал «Deadline: роман об управлении проектами» и влюбился в эту книгу.
На каких курсах учить Java?
Какие курсы Java вы порекомендуете?
Я не назову с ходу, но уверен, что и Сбер, и «Мэйл-ру» в своих образовательных программах обучают Java. Оба варианта должны быть нестыдными. И онлайн-курсы на «Курсере», и Udemy от условного «Микрософта» должны быть ок, но они, скорее всего, совсем базовые.