Олег Макаренко (olegmakarenko.ru) wrote,
Олег Макаренко
olegmakarenko.ru

Category:

Как стать программистом. F.A.Q.



Я удачно угадал со своим ликбезом: коронавирусные каникулы растянули на весь апрель, так что у желающих будет целый месяц, чтобы освоить профессию программиста. Вот ответы на главные вопросы, которые могут появиться у новичков.


В.: Кому, вообще, может прийти в голову переучиваться на программиста?

О.: Сейчас в мировой экономике дисбаланс. При прочих равных средний программист будет зарабатывать в разы больше, чем специалист той же квалификации, работающий инженером, менеджером, врачом или журналистом.

Это как если бы на одной улице стояли несколько домов, и в одном доме квартиры продавались бы вдвое дешевле, чем в других — безо всякой объективной причины. Понятно, что разумно было бы покупать квартиру именно в таком доме.

Возможно, через 10 лет ситуация изменится, но пока что программисты выигрывают в плане зарплаты у других профессий, причём с каждым годом отрыв становится всё весомее.


В.: Но есть же, наверное, какие-то подводные камни?

О.: Да, их два. Во-первых, нельзя научиться программировать за один день. Чтобы стать специалистом, которому платят минимально разумные деньги, потребуется около года, возможно, больше. Вкладывать год жизни в обучение и стажировку в ситуации, когда ты уже взрослый, и надо параллельно ещё с учёбой и как-то зарабатывать себе на жизнь, готовы не все.

Во-вторых, на протяжении этого года придётся напрягать мозг. Начинающий программист не может сказать «ой, тут что-то непонятное, я не хочу в этом разбираться». Если начинающий программист не будет грызть науку на совесть, добиваясь реальных результатов, он просто не сможет устроиться на работу.


В.: Есть ли требования к будущему программисту?

О.: Или хорошие мозги, позволяющие ухватывать новое на лету, или сила воли, достаточная, чтобы заставить себя учиться. Всё остальное не так существенно.

Программистов дефицит, так что ограничений по возрасту нет. Гендерная и расовая дискриминация в России практически отсутствует: девушек-программистов полно, негры встречаются не реже, чем в других профессиях.

Место жительства в эпоху интернета не имеет решающего значения. Хорошее образование — плюс, однако не настолько важный, чтобы давать какие-то особенные преимущества. Английский — тоже плюс, и плюс весомый, но если вы владеете только русским, то и этого тоже будет вполне достаточно.


В.: Знаете ли вы людей, которые переучились на программистов во взрослом уже возрасте?

О.: Да, причём многих. Не далее, как в декабре, мы с вами обсуждали историю успеха, которой с нами любезно поделилась zorraestelar. Процитирую ещё раз её письмо:

https://olegmakarenko.ru/1730825.html

Итак, я с октября 2017 года училась на курсах переквалификации, сначала выбрала диплом на Java, это было мобильное приложение, написала, поскольку до защиты оставалось еще четыре месяца, решила поменять тему и написать ещё один. У меня как-то не очень пошел Python и поэтому решила писать диплом на нём.

Совершенно случайно в это же время мне предложили работу в госконторе с символическим вознаграждением, но тема была интересной – создание информационной системы для работы с их запасами геопространственных данных. Python (как идеальное средство для работы с научными данными), PostgreSQL – по требованию работодателя, Django (ну раз Python) + nginx. Диплом я благополучно написала, защитила, в конторе я решила задержаться, чтоб доработать и расширить проект, кроме того надо было дождаться, что бы там наконец-то купили сервер для разворачивания этого всего. Было много проблем с организацией работы, с предоставлением мне данных, это долго описывать.

В августе мне предложили работу программистом в одном крупном российском концерне, меня рекомендовал сотрудник, который учился вместе со мной на курсах. Я не могу назвать ни где я работаю, ни сколько получаю, потому что подписала соответствующее соглашение. Я работаю там с октября, на прежней работе я перевелась на полставки, чтобы не бросать проект (ни один программист в своем уме туда на такие зарплаты не пойдет, и, если я всё брошу, проект прекратит свое существование). На новой работе зарплата значительно больше (хотя и меньше, чем сумма, на которую обычно претендуют программисты), работать тяжело, но интересно, решаю задачи, с которыми раньше не сталкивалась, набираюсь опыта. В прошлую пятницу у меня благополучно закончился испытательный срок, и я решила написать вам, как обстоят дела.



В.: Должен ли программист быть «технарём», хорошо разбираться в высшей математике и тому подобных материях?

О.: Подавляющее большинство программистов не выходит в своей работе за рамки школьной математики. Знаний восьмиклассника вполне достаточно, если только речь не идёт о каких-то специальных, узких областях.

Хоть программирование и преподают в технических вузах, однако по сути это гуманитарная дисциплина, изучение языков. Освоить иностранный язык и освоить язык программирования — похожие задачи, так что, например, переводчики и журналисты уже имеют хороший задел, чтобы стать программистами. Тот, кто может внятно излагать свои мысли на русском, не испытывает обычно проблем с тем, чтобы изложить их и на понятном компьютеру языке.


В.: Какой язык программирования выбрать?

О.: Зависит от ваших целей. В общем случае разумно открыть сайт поиска работы, — «Хедхантер», к примеру, — и посмотреть, кто нужен работодателям. Подробно об особенностях разных языков я рассказывал вчера:

https://olegmakarenko.ru/1824955.html


В.: Как лучше учить выбранный язык?

О.: Конечно, на курсах. Очных или заочных — вопрос вкуса, однако важно, чтобы это были именно курсы. Все альтернативные способы, — «клепая собственный учебный проект», «по бумажному самоучителю», «по видео на ЮТубе», — значительно хуже.

Лично я рекомендую сайт «Юдеми». Цены там иногда кажутся высокими, однако это просто рекламная политика сайта — если нужный вам курс стоит 10 тысяч, нужно просто подождать недельку, и он будет продаваться со скидкой в 90%, за 1 тысячу рублей.

Если вы знаете английский или, скажем, французский, настоятельно рекомендую искать иностранных лекторов. Русскоязычные авторы, к сожалению, ощутимо слабее. Звучит не слишком патриотично, но это проблема, которую я не могу отрицать — почти все хорошие курсы или иностранные, или переведены на русский с иностранного языка. Как мы до такого дошли, и почему ситуация исправляется так медленно — тема для отдельного серьёзного разговора.

Если вы английский не знаете, это не критично. Русскоязычные курсы хоть и хуже, однако всё равно достаточно эффективны.

Когда будете выбирать из нескольких курсов, смотрите на количество тестов и задач. Хороший вариант: куча видео по 5-10 минут, после каждого третьего видео идёт тест или задача. Плохой вариант: несколько видео по одному часу, один-единственный тест в самом конце.


В.: А что насчёт геймификации: сайтов, где программированию учат в виде игры?

О.: Все «игровые» сайты, которые я видел, имеют критичную проблему — на них новичку не объясняют, почему у него не работает код. Из-за этого игровые задания там делятся на две категории: или слишком лёгкие, которые ученик решает сходу, или непонятные, которые ученик в принципе не может решить. Подробнее я писал про это вот здесь:

https://olegmakarenko.ru/1675372.html

Сама концепция игрового обучения хороша, и я уверен, что, когда обучающие сайты вылечат свои детские болезни, они станут значительно эффективнее других форм обучения. К сожалению, до этого светлого будущего надо ещё дожить. Пока что мы находимся в 2020 году, и потому я рекомендую обучаться традиционным способом, при помощи курсов.


В.: Зачем же привязываться к родному городу? Программисты могут работать удалённо. Сидеть где-нибудь на пляже в Таиланде и писать код для клиента из Нью-Йорка.

О.: Во-первых, нет ничего глупее, чем программировать на пляже. Солнце бьёт в глаза и слепит монитор, шея затекает от неудобной позы, вокруг отвлекающая суета. Идеальное место для программирования — отдельная комната, могильная тишина и отключённые мессенджеры.

Фрилансеры часто сыпятся на этом. И в офисе-то сложно работать, когда тебя постоянно дёргают за рукав, а уж на удалёнке, когда вокруг полно отвлекающих факторов, это особенно тяжёлая задача. Хорошо, если вы Лев Толстой, если у вас дома есть уютный кабинет, в котором вы можете наглухо запереться от родственников и домашних животных. Если такого тихого места нет, производительность труда будет ниже, иногда в разы.

Следующая проблема — сила воли. Чтобы не вдаваться сейчас в психологию, скажу сразу практический вывод — работать дома, самостоятельно, без начальника, могут далеко не все, тут нужен определённый уровень самодисциплины, на который без долгих тренировок не запрыгнуть. Если вы обычный человек, дома вы будете успевать в разы меньше, чем за то же время в офисе.

Наконец, фрилансеру нужно быть немного бизнесменом. Нужно копить клиентскую базу, управлять ценами, нарабатывать репутацию и щепетильно соблюдать деловые договорённости. Такие навыки также есть далеко не у всех.

В итоге обычно получается парадоксальная для стороннего наблюдателя ситуация. На «Апворке» программист мог бы получать 1500 рублей в час, то есть 240 тысяч рублей в месяц, но программист предпочитает работать в офисе, получая там на руки впятеро меньшую сумму.

Фриланс — вполне рабочая тема, однако вытягивают его далеко не все. Если у вас ещё нет успешного опыта фриланса, лучше рассчитывайте изначально или на очную работу в родном городе, или на очную работу в том российском городе, куда вы планируете переехать.


В.: В какую фирму устраиваться?

О.: В ту, которая согласится взять на работу новичка без опыта программирования. Платить в такой фирме будут мало, атмосфера в коллективе и отношение начальства там также будут наверняка плохими. Однако, продержавшись полгода, вы получите опыт и сможете перейти на работу в место классом повыше.

Если вы будете хорошо работать и усердно учиться, то через два-три года вы сможете претендовать на нормальные вакансии: с хорошей зарплатой и с трепетным отношением к ценным сотрудникам.


В.: Возьмут ли меня на работу без опыта?

О.: Если вы выучите востребованный язык, то возьмут. Тут есть несколько хитростей.

Во-первых, делайте тестовые задания. Матёрые программисты воротят от них нос, поэтому выбор у кадровиков невелик: они вынуждены внимательно рассматривать каждого, кто хоть как-то с тестовым заданием справится. Вполне может оказаться, что вы будете единственным за год соискателем, решившим дома выданную на собеседовании задачу.

Тестовые задания — это ситуация «выигрыш-выигрыш». Если вы сделаете задание хорошо, вас примут на работу. Сделаете плохо — получите ценный опыт программирования и, возможно, рецензию на ваш код от тех, кто будет тестовое задание оценивать.

Во-вторых, проводите после собеседований работу над ошибками. Сразу, как услышите «мы вам перезвоним», выходите за дверь и записывайте в блокнотик технические вопросы, которые вам задавали. Дома тщательно проработайте темы, в которых плавали: с большой долей вероятности на следующем собеседовании вы услышите похожие вопросы.

В-третьих, ищите работу по восемь часов в день, а не так, как это делает молодёжь: разослали три резюме и легли на диван ждать ответа. Всё рабочее время должно быть занято или рассылкой резюме, или поездками на собеседования, или учёбой, или работой на фрилансе. Разумеется, начинающий программист на фрилансе не заработает ничего, кроме геморроидальных шишек, однако приобретённый опыт здорово пригодится во время беседы с будущим работодателем.


Что нужно выучить кроме выбранного языка программирования?

О.: Я рекомендую освоить самые основы четырёх направлений:

— регулярные выражения;
— SQL;
— командную строку;
— git.

Глубоко влезать в эти темы на первых порах не стоит, но потратить по одному полному дню на каждую из них будет весьма разумно. Это окупится почти сразу.


В.: Какие книги вы посоветуете для программиста?

О.: К стыду своему, я читаю мало книг по программированию. Из тех немногих книг, которые я всё же прочёл, я выделю две — «Совершенный код» Стива Макконнелла и «Регулярные выражения» Джеффри Фридла.

Вторую книгу, про регулярные выражения, стоит читать через год-другой после начала учёбы, а вот первую книгу я настоятельно рекомендую открыть сразу же, как только вы закончите курсы по выбранному вами языку. Там автор рассказывает, как делать не просто рабочий, но и красивый, правильный код.


В.: Нужен ли мне свой аккаунт на «Гитхабе»?

О.: Нужен, только никому его не показывайте.

Нужен, так как вам в любом случае надо освоить гит: про это будут спрашивать на собеседованиях, и вы будете пользоваться чем-нибудь подобным в реальной работе. Никому не показывайте, так как первые годы вы будете выдавать плохой код, и ваш код будет свидетельствовать против вас.


В.: Какие ещё есть сайты для программистов?

В.: Назову два. На первый из них, Стэковерфлоу, вы наткнётесь и без меня, как только начнёте искать решение текущих проблем в поисковике. Большая часть вопросов и ответов там на английском, но уяснить суть предлагаемых решений сможет даже не владеющий английским программист.

Про второй сайт, — Литкоуд (leetcode.com), — многие не знают. Если коротко, это сборник из полутора тысяч задачек повышенной сложности из числа тех, которые задают программистам на собеседованиях в условный «Гугл» или «Яндекс». После освоения языка очень хорошей идеей будет зарегистрироваться на Литкоуд, чтобы решать там задачи одну за другой, начиная, разумеется, с лёгкого уровня. Вначале будет идти обескураживающе туго, но постепенно, изучая чужие решения и тренируясь, вы освоите достаточно приёмов и алгоритмов, чтобы спокойно справляться с новыми задачами.


В.: Почему на форумах народ такой злой?

О.: Речь, вероятно, про русскоязычные форумы. У наших программистов есть две проблемы.

Во-первых, айтишники и в России, и во всём остальном мире, считают себя интеллектуальной элитой, которая по умолчанию умнее и высокоморальнее других людей. Это сказывается на манере общения не самым лучшим образом, особенно когда у айтишника есть повод показать своё интеллектуальное превосходство над «задающим вопросы ламером».

Во-вторых, у наших айтишников исторически сформировался очень болезненный профессиональный идеал. Если на Западе крутого айтишника представляют в виде эдакого улыбчивого капитана бейсбольной команды, только в очках и с умным лицом, то в России идеальный айтишник — сварливая и дурно пахнущая сволочь, которую все ненавидят, но которую не могут уволить, так как её технические навыки абсолютно незаменимы.

Относитесь к этому спокойно. Когда на форуме вас называют безграмотным тупицей, задающим глупые вопросы, тут нет ничего личного: это просто стиль общения, который принят в этой среде, и который вам совершенно необязательно перенимать.


В.: Как оборудовать рабочее место?

О.: Программирование — умственный труд. Это значит, что ваше рабочее место должно быть тихим. Выключите телефон, выйдите из скайпа, вотсапа, телеграма, вайбера и всего остального. Запретите стиму и электронной почте выводить уведомления на рабочий стол. Злобно рычите на домашних, которые отвлекают вас во время программирования, кидайтесь пепельницами.

Учёные много раз проводили примерно такой опыт. Одному программисту давали работать спокойно, а другого каждые 15 минут тыкали острой палочкой. В конце дня неизменно выяснялось, что первый сделал в разы больше, чем второй. За подробностями отправляю любопытных к книге «Человеческий фактор» Тома ДеМарко и Листера Тимоти.

В офисе, к сожалению, огородиться от коллег не так-то просто, особенно если вы сидите в богомерзком оупенспейсе. Вместе с тем выключить мессенджеры, надеть строительные наушники и поставить табличку «все вопросы по электронной почте» вы можете и на работе.


В.: Какой предельный возраст для программиста?

О.: Значительная доля работодателей вообще не смотрит на возраст, им нужен результат. Я много раз встречал программистов под семьдесят.

Более важен не возраст, а способность переносить то особенное состояние подвешенности, которое возникает, во время решения сложной головоломки. Когда вы копаете канаву, всё понятно — вот лопата, вот земля, вот палочка, чтобы измерять глубину. С программированием не так, особенно когда речь идёт про начинающих программистов.

Вам надо вывести на экран квадрат. Вы пишете код, жмёте «выполнить», и ничего не происходит. Вы тщетно пытаетесь найти ошибку. Через полчаса вы вводите описание проблемы в поисковике, и читаете решение, но не понимаете, как оно работает. Вы копируете решение к себе в код, снова нажимаете «выполнить» и получаете слово «Array» в том месте, где ожидали увидеть на экране этот квадрат …

Способность выдерживать давление неопределённости, когда вы не знаете, сколько ещё будете страдать, пока не нащупаете решение проблемы, критична для начинающего программиста: в том числе и потому, что начинающий программист 5% времени пишет код и 95% времени мучительно ищет ошибки в своём коде.

Дальше становится легче. Опытные программисты имеют богатый арсенал инструментов (привет, принтф), которые позволяют им находить ошибки быстро. В хорошие периоды бывает так, что опытный программист сталкивается с непонятной ему проблемой в коде всего лишь два или три раза за день.


В.: Сколько времени пройдёт от начала учёбы до устройства на работу?

О.: Я бы рассчитывал примерно на год. Два месяца, чтобы освоить язык, потом четыре месяца, чтобы что-нибудь написать на этом языке, потом ещё полгода на поиск работы.

Это, пожалуй, пессимистичная оценка, бывает значительно быстрее. Так, например, в 1С иногда берут на работу программистов «с улицы» и обучают их прямо по ходу дела, платя зарплату стажёрам. Напротив, ленивый ученик, занимаясь по три часа в неделю, может искать работу десятилетиями.


В.: Нужны ли России новые программисты?

О.: Поставлю вопрос иначе. А в кто нужен России, в перспективах какой профессии мы с вами можем быть уверены? Наш мир меняется, и мы не знаем, что будет через 10 лет. На общем фоне профессия программиста выглядит неплохо — конкретно сейчас программисты нужны, причём так нужны, что им платят значительно выше среднего по стране.

Более того, сейчас программисты всё чаще начинают работать удалённо, и карантин ещё сильнее ускорит этот неизбежный переход. Многие удалённые от офиса сотрудники решат, что раз они всё равно сидят дома, так лучше работать сразу на заграницу, где за ту же работу платят в разы больше. Виртуальная эмиграция этих программистов окажет давление на рынок труда, и зарплаты всех прочих программистов в России также поползут вверх.

Возможно, мои расчёты ошибочны. Если так — укажите мне более перспективную сегодня профессию, на которую обычный человек может быстро переучиться. Я с радостью прочту ваши комментарии.

Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 240 comments
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →