Не все смогут стать программистами

Чтобы программировать – нужно иметь чугунную задницу. Как говорил мой преподаватель по программированию. Что он имел ввиду, а так же другие навыки необходимые для программиста – в этой статье.

Первый навык – умение следовать инструкциям.

В программировании мы постоянно работаем с документацией. Программы постоянно падают с ошибками. В системе управления проектами задачи описаны в виде историй. Тестовые сценарии – в виде набора шагов. 

Я встречал людей, которые патологически не могли следовать инструкциям. Они читали документацию по-диагонали, а чаще не читали вообще. Они в упор не видели прямого указания на дефект в сообщении об ошибке. Они делали задачу наполовину, а потом спорили, что сделали все целиком. Ну а тестовые сценарии они не могли воспроизвести пошагово вообще. Что уж говорить про устные инструкции от руководства. Устные инструкции просто игнорировались.

В программировании мы редко работаем в вакууме. Чаще мы работаем в команде. Вокруг нас очень много различных инструкций, которые надо уметь читать и которым надо уметь следовать. Про умение читать у меня есть отдельное видео. Ссылка будет как в карточке сверху, так и в описании.

Умение следовать инструкциям – это базовый навык, без которого в программировании просто нечего делать.

Второй навык – умение следовать чужому ходу мысли. Потому что инструкции не редко бывают неполными. Нужно додумывать, что хотел сказать человек. Но не только это.

В программировании мы постоянно работаем с чужим кодом. Это может быть код наших коллег, программистов, которые писали систему до нас, так и сообщество open source. Чтобы разобраться в чужом коде нужно уметь залезть в голову тому, кто его написал. Проследовать логику и найти ответ.

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

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

Третий навык – обучаемость. Этот навык вытекает из двух первых. Если вы не умеете следовать инструкциям и чужому ходу мысли, то вы скорее всего не умеете учиться. Либо учитесь не эффективно. Здесь я могу порекомендовать бесплатный курс “Учись учиться” от Барбары Окли.

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

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

В этом иногда помогают знания алгоритмов и структур данных. Причем не на уровне умения реализации, а на уровне применимости к задаче. Если вы знаете, что фильтр Блума очень компактен, но при этом может гарантировать, что элемента нет в выборке – вы можете погуглить реализацию. Это именно те самые базовые вещи, о которых я говорил в пункте про обучаемость. Соер недавно снял видео о книгах про алгоритмы. А еще в том видео первая в истории Соера интеграция – бегом смотреть!

Еще один полезный навык для тех, кто думает, что программирование это творческая профессия – способность выносить рутину. Много рутины. Программирование это НЕ творческая профессия. На 5% времени затраченного на поиск элегантного решения вы потратите 95% на написание кода, тестов и отладку. Именно поэтому я говорю, что изобретать нужно лишь иногда. Все остальное время нужно поддерживать CI сервер зеленым.

Самый интересный навык – умение откладывать вознаграждение, и переживать фрустрацию от недостижения цели.

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

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

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

Нужно уметь стойко каждый день делать свою работу, находить какие-то маленькие радости и победы.

Здесь есть хороший тест. Вы любите головоломки? Те самые согнутые гвозди или что-нибудь покруче. Одна из моих любимых – Equa. Если вы можете сидеть и спокойно разбирать головоломки, то наверняка и программирование вас не будет вымораживать. Я с детства не разрезаю узлы, а развязываю. Рыболовные снасти, шнурки, полиэтиленовые пакеты. Самое запутанное мясо, давайте сюда. Я распутаю. 

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

Решение головоломок – это просто пример навыка. Если вы в принципе умеете сидеть с проблемой, то в программировании это вам очень пригодится.

Понятное дело – это видео не научный факт, а просто мои наблюдения. Если вы с чем-то несогласны – держите свое мнение при себе. Шутка.