Сложности самообучения программированию и как их преодолеть
Перед вами перевод статьи Xiang Zhou, опубликованной на сайте freeCodeCamp. Если вы разработчик-самоучка и хотите преодолеть все преграды на пути к цели, добро пожаловать под кат!
«Белая книга на коричневом деревянном столе», фото Alexander Michl на Unsplash
В последние годы многие загорелись желанием освоить программирование. Кто-то делает это с помощью онлайн-курсов, кто-то ходит на семинары, а кто-то просто учится методом проб и ошибок.
Такие веб-сайты, как Code.org, Codecademy и freeCodeCamp набирают все большую популярность, а в сети появилось огромное количество курсов, в том числе и на YouTube.
Однако программирование — это не так просто. Есть определенные трудности, с которыми все мы сталкиваемся, когда учимся писать код.
1. Сколько времени нужно уделять программированию каждый день
Если вы учитесь писать код самостоятельно, скорее всего, в вашей жизни есть и прочие обязанности. Одни работают на полставки или целый день, другие сидят дома с детьми. Так или иначе, у всех свои заботы.
Как же при этом ежедневно находить время на программирование?
Кто-то скажет: «Было бы желание, а время найдется». Все верно, спорить не буду. Но возникает другой вопрос: сколько именно нужно уделять программированию каждый день? Если мой максимум — полчаса, это считается?
Ответить можете только вы сами. Очень сложно определить время, необходимое для обучения. Некоторые полагают, что лучше меньше, но качественнее и 15 минут вполне достаточно.
С другой стороны, я слышал о людях, которые получили работу в сфере девелопмента примерно через год после начала обучения, потому что писали код по 9–10 часов в день. Если вам нужна мотивация, можете взглянуть на этот тред.
Итак, все сводится к одному: только вы сами знаете, сколько часов в день сможете заниматься программированием так, чтобы это вошло в привычку, но не выматывало. Последнее особенно важно. Основатель freeCodeCamp Квинси Ларсон однажды сказал в своем твите:
В видеоролике ниже ведущий программист, не один десяток лет проработавший в сфере информационных технологий, расскажет, сколько времени ежедневно занимает написание кода у разработчиков.
Конечно, это не универсальный рецепт, но вы получите общее представление о том, как подойти к планированию времени на изучение с умом и, что немаловажно, без фанатизма.
2. Как найти золотую середину между «почти не сдвинулся с места» и «сгорел на работе»
Лично я с этим намучился. Бывало, я не мог понять ни единого кусочка кода, ни единой идеи из книги, которую читал, — мой мозг отказывался усваивать информацию. Я выматывался так, что выходил на балкон подышать и успокоиться.
С того момента я стал напоминать себе, что не стоит истощаться и доходить до точки невозврата.
Программирование не самая простая работа. Оно требует концентрации, особенно когда изучаешь что-то новое. Это тяжелый умственный труд: иногда ты даже не понимаешь, почему твой код не работает или, наоборот, почему заработал.

Я осознал, что наибольшей продуктивности мне удавалось достичь, фокусируясь на текущей работе, но при этом не напрягаясь, а наслаждаясь процессом.
Это происходило, когда я:
- находил проблему, которая требовала решения;
- находил решение на форумах в сети;
- пробовал выйти из затруднения несколькими способами, проверяя, какой из них сработает;
- решал проблему.
Я трачу 50% времени на сложные задачи — изучение основ, концептов, алгоритмов и прочего. Остальные 50% остаются на мои собственные проекты, которыми я занимаюсь с удовольствием. Так я добиваюсь гармонии в своем ежедневном расписании.
Проще говоря, нужно любить то, что делаешь. И этот вывод позволяет нам плавно перейти к следующему пункту.
3. Единственный способ преодолеть препятствия — любить свою работу
Банально, но верно. Если вам по душе выбранный путь, если нравится ваша работа и направление, в котором вы двигаетесь, — одобрение окружающих не нужно. Чувство удовлетворенности такого рода невозможно взять взаймы, заменить или, того хуже, симулировать.
4. Всегда возвращайтесь к программированию, когда заканчиваете с другими делами
Реальность самообучения такова: вас никак не могут оставить в покое, наедине с вашими справочниками.
В жизни у всех нас немало других обязанностей. Возможно, вы чей-то супруг или родитель и вам нужно заботиться о своей семье. Может быть, у вас постоянная работа или вы студент, который пишет диплом или получает ученую степень. Когда есть столько дел, как найти время на программирование?
Честно говоря, иногда это попросту невозможно. Случалось, что я подолгу не занимался написанием кода — однажды даже целых два месяца.
Впрочем, после этого перерыва я немедленно вернулся к программированию и тут же понял, что многое забыл. Очень неприятно, открывая книгу, не знать, с какого момента продолжить обучение. Господи, неужели мне придется перечитывать все главы и делать все задания заново?
Это тот самый момент, когда нужно продержаться, выстоять. Необходимо сказать себе: «Так, первый час обучения, кажется, идет медленно и совершенно непродуктивно. Но ничего страшного, я наверстаю упущенное, выучив больше завтра».
Эту пилюлю не подсластить никак иначе — только продолжая работу, несмотря ни на что. Зайдите на форум кодеров в твиттере и пожалуйтесь, но после этого непременно возвращайтесь к программированию.
5. Мотивируйте себя любым способом
Самообучение сильно отличается от занятий в университете или в школе. Пока вы работаете над кодом, вокруг вас нет ни одноклассников, ни общения, а в конце туннеля не ждет пафосная церемонии вручения дипломов. Почти всегда вы предоставлены себе и делаете все самостоятельно. Именно поэтому так важно найти мотивацию, чтобы продолжать двигаться вперед.
Я часто читаю этот подфорум на reddit, так как многие его пользователи — разработчики. При создании софта они все используют самое мощное железо. Что может быть лучшей наградой для программиста?
Вы тоже заведите привычку вознаграждать себя. Это может быть большое или маленькое поощрение — горячий душ в конце дня, прохладительный напиток, похвала самому себе (часто в процессе обучения это необходимо). Повесьте на стену перед собой такое фото. Нужно верить, что однажды ваше рабочее место будет выглядеть так.

6. Не поддавайтесь искушению учиться ради учебы — ходите на собеседования и встречи, рассылайте резюме
Иногда в процессе обучения можно отклониться от намеченного курса. Мне знакомо желание полениться. Но не в том смысле, что не хочется учиться, а в том, что появляется тайная надежда, просиживая дни за монитором, избежать реального испытания — работы в качестве девелопера.
Не поддавайтесь искушению рассуждать: «Я ведь учусь — этого достаточно. Я задумаюсь о поиске работы потом, когда буду готов».
Откровенно говоря, мне самому не мешало бы чаще искать потенциальных клиентов. Даже если речь о бесплатной разработке веб-сайта для родственников и друзей. В таком случае в следующий раз, когда я приду на собеседование, у меня будет материал, который добавит веса резюме. Первый шаг — самый трудный, но его необходимо сделать во что бы то ни стало.
Все перечисленные преграды вырастут на вашем пути к карьере девелопера. Встречайте их с правильным настроем: они сделают вас только сильнее и лучше.
И наконец, приятного программирования! Наслаждайтесь тем, что создаете, — будь то ваш проект или ваше будущее.
Учебный день начинающего программиста
В этой статье поговорим о том, как эффективно обучаться программированию. Программирование — это сложная профессия и надо грамотно выстроить обучение, чтобы с одной стороны, достичь цели, а с другой стороны не отчаяться и не бросить учебу.
1. Пишите код каждый день
Это железное правило и нужно строго ему следовать. Только учтите, что имеется в виду — каждый рабочий день. Про выходные чуть позже.
Программирование — это особый вид деятельности. Здесь нельзя работать «левой ногой». Если вы начинаете программировать, то это подразумевает полное погружение в задачу.
Вы должны жить этим. Причина в том, что компьютер «думает» иначе, чем человек. Для того, чтобы писать программы у человека должно работать так называемое «алгоритмическое мышление». Оно непривычно для человека и быстро забывается. Чтобы развить в себе навыки алгоритмического мышления как раз и нужно ежедневное программирование.
При этом важно, что в зачет идет только чистое кодирование. Не чтение книжек, не разбирательство в чужом коде, не сидение на форумах, а именно написание своего работающего кода.
Еще одно важное замечание. Обстоятельства, где вы пишите программу, не имеют никакого значения. Поэтому можете кодить даже на работе в обеденный перерыв. Потому что как только вы станете программистом, то вам придется кодить в любых условиях. Например, при сдаче программы заказчику ошибка может вылететь в любой момент, поэтому надо будет прямо у заказчика на коленке в коридоре эту ошибку исправить. Именно поэтому я сделал сборки «Си-экспресс» и «PHP-экспресс» автономными. Их можно носить с собой на флэшке (или скачать этого сайта). В любой момент вы продолжаете работу.
2. Выходные — время полного отдыха
Программирование — это трудная для мозга деятельность. Поэтому старайтесь в выходные полностью отдохнуть от компьютера. Занимайтесь чем угодно: бегайте, плавайте, играйте в футбол. Главное, полностью очистить мозг от компьютерной деятельности. Тогда в понедельник вы готовы со свежей головой опять окунуться в программирование.
3. Концентрация на одной задаче
Меня часто спрашивают: «А можно ли одновременно изучать Си, PHP, HTML и т.д.?» Нет, нельзя. В каждый момент времени вы фокусируетесь на одной задаче. То есть, вы выбираете один курс или один учебник. И идете по этому курсу от начала и до конца. По одному уроку в день.
Поэтому как только вы сели за компьютер и готовы начать заниматься, то у вас должна быть четкая цель — сегодня изучить один урок.
Но важный момент, напомню, в зачет идет только кодинг. Поэтому прослушивание урока — это только начало. А вот дальше вы должны сами попробовать разные варианты программ. Это сделать легко. Если в уроке идет подсчет суммы, то посчитайте среднее значение. Если в уроке рассмотрено работа двух кнопок, то сделайте десять кнопок и т.д.
Ваша задача — настолько овладеть материалом, чтобы у вас не осталось белых пятен. Каждая строчка в программе должна быть вам понятна. Убедиться в этом легко: внесите изменение в каждую строчку и убедитесь, что поведение программы меняется именно так, как вы и задумали.
4. Изучение рабочей среды
Инструменты программиста — это очень важное дело. Если в обычной жизни тупым ножом много не работаешь, так и в программировании, если инструмент не очень удобен, то много не накодишь. Поэтому отдельное время уделите настройке вашей рабочей среды. Например, CodeBlocks хорошо тем, что его можно настроить как угодно. Настроек сотни.
Но для того, чтобы настроить инструмент как следует, его надо знать. Поэтому каждый день уделите время знакомству с одной настройкой. Попробуйте поменять и посмотрите, стало удобнее или нет. В статье «10 настроек CodeBlocks…» я описал основные настройки, но, конечно же, это капля в море.
5. Не пасуйте перед трудностями
В самом начале в тупик ставят даже примитивные вещи. И это нормально. В программировании мелочей не бывает. Любая непонятная мелочь может заблокировать движение вперед.
Если так случилось, то не паникуйте, а задавайте вопросы. Лучше всего это сделать на сайте stackoverflow.com — это сайт, где программисты помогают друг другу. Кстати, если вы задали вопрос, но нашли ответ самостоятельно, то напишите этот ответ. Этим вы поможете другим.
Помните, что вы не один с такой проблемой. Уже тысячи программистов до вас проходили этим путем и как-то нашли ответ. Поэтому не останавливайтесь, ищите ответы.
6. Смотрите чужой код
Любую новую тему очень тяжело сразу воспринять в полном объеме. Как правило, описание функций и классов включают множество второстепенных деталей, в которых можно надолго закопаться. Поэтому как только вы видите, что становится тяжело воспринимать материал, то поищите готовый код.
Когда вы видите работающий пример, то многое проясняется. Как только вы начинаете изменять этот пример, то наглядно видите, как все устроено. При этом старайтесь выделить главное.
Например, на сайте есть статья «Минимальная программа Cairo«. Я специально ее написал, чтобы новичок как можно быстрее получил готовый результат. Потому что библиотека Cairo хотя в целом и проста, но имеет массу деталей. Можно долго читать документация, но упустить важную деталь и ничего не получится. Но как только есть готовый пример, то все встает на свои места. Поэтому ищите готовые примеры.
7. Заканчивайте урок только после получения готовой программы
Есть важный психологический момент. Когда вы изучаете программирование, то не привязывайтесь ко времени. То есть у вас не должно быть цели: «Сегодня я занимаюсь один час».
Гораздо лучше привязываться к результату. То есть цель должна быть, например, такая: «Сегодня я пройду один урок и выполню домашнее задание». Сколько это займет времени — неважно. Поэтому даже если у вас ничего не получается — сидите, пока не получится. Хоть до часу ночи!
Для этого есть две причины.
Причина первая. Программисты именно так и работают. Если близятся сроки сдачи проекта, то программисты работают днями и ночами. Вы стразу привыкаете к этой стороне программирования.
Причина вторая. Если вы все сделали и у вас все получилось, то у вас появляется радость и желание на следующий день опять двигаться вперед.
Самый же эффективный метод изучения программирования (но он не для всех) описан здесь.
«Никто не пишет код восемь часов подряд». Правда ли, что программисты на самом деле мало работают
Вопрос о том, насколько много и усердно работают в IT-сфере, всплывает часто. В этом можно винить уже обросший мемами образ айтишника из twitter, постоянные треды или высокую зарплату в IT. Действительно ли айтишники мало работают, много получают, а большую часть рабочего дня ничего не делают?
Еще несколько лет назад образ айтишника был другой — замученный кранчами человек, который сидит на Red Bull, питается снеками и спит по три часа в день. Огромное количество материалов на разных языках были посвящены выгоранию айтишников и тому, как компаниям его предотвращать: только на английском поиск в Google выдает больше 15 миллионов ссылок, на русском — больше 200 тысяч (по ключевым словам «programmers burnout» и «выгорание программистов»). Что же изменилось?
В англоязычном пространстве не очень многое. Периодически в нем бывают неожиданные обсуждения: например, в январе этого года анонимный реддитор поделился, что после перехода на удаленку автоматизировал процессы и теперь работает по десять минут в день. В оставшееся время он играет в видеоигры и работает над личным проектом. В реплаях на Reddit в основном поддержка и уважение к написавшему за следованиям принципам «антиработы»:
«Думай о своей зарплате как о подписке на твою программу автоматизации, лол. Корпорации обожают подписки», — пишет BlobTheBuilderz.
«Легенда. Это настоящая антиработа. Ты предоставляешь именно те услуги, которые требуются, а они платят тебе за них. Молодец, аплодирую», — пишет precsenz.
Комментарии под постом в этом случае могут быть не репрезентативны — текст опубликован в сабреддите anti-work, где люди максимально поддерживают любую инициативу, при которой человек мало (или вообще не) работает и при этом получает деньги.

При чём тут twitter
Русскоязычный twitter повлиял на изменение образа девелопера. Для многих айтишников именно эта социальная сеть стала местом, где можно расширить свои контакты, а иногда даже намного быстрее получить джоб-оффер. Так как тут появились ироничные мемы и карикатурные образы? Если коротко — из-за тредов.
В какой-то момент айтишники стали посвящать их не только профессиональным вопросам («как зайти в IT», «что должен знать джун» и прочее), но и обычным жизненным проблемам и историям. А иногда и правилам жизни. У людей, работающих в других сферах это начало вызывать раздражение — особенно, когда треды случайно появлялись в ленте. Все еще больше усложнялось, если в твитах были «хот тэйки» или «непопулярные мнения». С вирусными и противоречивыми тредами появилась и идея: их так много, потому что айтишникам скучно и нечего делать — они мало работают, при этом много получают.
Опрос: на написание кода девелоперы тратят 10 часов в неделю
В январе 2022 года компания по разработке ПО Retool провела опрос среди 600 программистов разных уровней. Основной задачей она поставила изучение того, чем вообще айтишники занимаются на рабочем месте. Оказалось, что в среднем программисты тратят десять часов в неделю на «глубокую работу» — то есть непосредственно на написание кода. Сеньоры отметили, что им хотелось бы тратить меньше времени на подбор и собеседования с потенциальными сотрудниками. Джуны — на ручное тестирование и вообще на написание тестов.
Стандартная рабочая неделя — это 40 часов в неделю. Чисто математически, даже если мы добавим к десяти дополнительное время, которое айтишники тратят на административные вопросы и созвоны, до сорока вряд ли дотянет.
Какая ситуация в других профессиях
Восьмичасовой рабочий день — концепция, которую в последние годы критикуют за то, что она изжила себя. Ещё в 2016 году британская компания Vouchercloud провела исследование на основе ответов 2 000 офисных работников. Оно показало, что люди пусть и проводят за рабочим столом все восемь часов, но довольно большую часть времени тратят на чтение новостей и социальных сетей, общение с коллегами и даже поиск новых вакансий. В итоге среднее количество рабочего времени для офисного сотрудника — это 2 часа 53 минуты.
Во многих профессиях работает закон Паркинсона, старое анекдотичное правило, которое вывел писатель и журналист Сирил Норткот Паркинсон в своём сатирическом эссе для журнала The Economist: «Работа расширяется, чтобы заполнить время, отведенное на её завершение». Что это значит? Если у вас есть дедлайн, то вы постараетесь максимально растянуть процесс выполнения задачи — даже если на самом деле всё это займет не больше двадцати минут.

Некоторые смогут принять волевое решение и выполнить всё максимально быстро. Возможно, они даже отправят результаты заранее. Но тогда навалится ещё больше задач. Так что проще либо растянуть все, либо спокойно отдыхать в освободившееся время и отправлять все в последние минуты до дедлайна. При этом компания не страдает — вы выполняете свои обязанности качественно.
Что говорят сами айтишники
Backend Tech Lead Дмитрий Курлов говорит, что в его случае все зависело от ситуации и места. Когда он работал в продуктовой компании, то оказался единственным бэкендером на три проекта. Поэтому приходилось работать по 9+ часов, а иногда захватывать и выходные — это и стало причиной ухода.
На текущем же месте у программиста есть недели, когда можно спокойно расслабиться и отдохнуть, рассказывает он. При этом по ночам иногда работать нужно. С мифом о халтурящих айтишниках Дмитрий частично согласен.
— Все в целом упирается в конкретный проект. Иногда там правда мало работы. Особенно, если это поддержка — сначала все старались и делали, а теперь нужны лишь мелкие правки и внедрение небольшого и легкого функционала. Но это работу тоже нужно делать, — говорит он.

По словам Курлова, компании проще оставить у себя человека, которого изначально брали на тяжелые задачи и большие деньги, чем нанимать кого-то нового и тратить время на его обучение и погружение в проект.
— Иногда и правда может оказаться так, что сотрудник работает 2-3 часа в день, а платят ему так, как договаривались изначально — то есть за больший объем задач, — говорит программист.
Дмитрий также ставит под сомнение то, что мы вообще считаем работой: если брать только время, проведённое за написанием кода, то айтишники и правда работают мало — но это не значит, что они ничего не делают.

SRE Алексей из «Тинькофф» последние пять лет работает в компаниях с круглосуточным режимом. Так что дежурства, овертаймы и внезапная загрузка авариями стали нормой. При этом и спокойные дни тоже бывают. Алексей считает: миф о том, что айтишники симулируют деятельность, возникает из-за непонимания процессов в IT и осознания того, как вообще строятся проекты в overstaffed командах и компаниях.

Senior Data Engineer Артем также говорит, что ситуация с уровнем нагрузки на работе — это максимально субъективный опыт, который зависит от компании и проекта. На текущем месте он большую часть дней проводит в расслабленном режиме.
— Получается быстро выполнять все, что от меня требуется. Настолько быстро, что приходится самому искать задачи, за которые я могу бы взяться. И во всем этом не помогает семичасовая разница во времени с основной командой, — говорит он.
«Чтобы стать программистом, нужно тратить 30 минут в день»: 11 мифов про обучение, которые я разрушил

В своей прошлой статье я рассказал о популярных мифах, которыми окружена профессия программиста. В этом материале я хочу коснуться тонкого вопроса обучения.
Давайте вместе разберемся, где же прячется правда.
Обучение заканчивается после прохождения курсов
Учеба не заканчивается после освоения языка. К тому же, выучить базовый синтаксис языка не так сложно — сложно научиться применять его на практике.
Обучение никогда не останавливается: если вы прекратите учиться, то через некоторое время вы потеряете полученный навык.
Чтобы не допустить этого, знания изученного материала полезно подкреплять практическими занятиями. Как и при изучении иностранных языков, долгие перерывы в обучении могут также негативно сказаться на результате.
Чтобы стать программистом, нужно закончить университет или техникум
Чтобы стать программистом, необязательно идти в университет. Необходимая информация есть в интернете. Онлайн-курсы, книги, форумы, тематические сайты — все это позволит вам иметь багаж знаний, сопоставимый с уровнем знаний выпускников вузов. Вам даже не нужно выходить из дома. Конечно, сторонники старой школы скажут, что вуз лучше объясняет базовые концепции и математику, но как мы выяснили ранее, в программировании вовсе не нужно вычислять интегралы.
С другой стороны, хорошие преподаватели ускорят ваше понимание теории и сложных концепций, но необязательно тратить на это пять лет в вузе.
Вы можете просто найти преподавателя и позаниматься с ним индивидуально. Хотя многие работодатели и желают видеть в коллективе дипломированного специалиста, мало кто из них откажет в трудоустройстве человека без диплома, но со знанием дела, опытом и хорошим портфолио.
Сначала нужно выучить весь синтаксис
Синтаксис языка программирования — это правила, по которым разработчики пишут программы. Конечно, знание синтаксиса позволяет полностью использовать возможности языка для решения задачи, но знание это не обязано быть доскональным. Базовых конструкций языка достаточно, чтобы писать простые программы. При необходимости вы всегда сможете расширить свои знания об используемом языке.