Я начал программировать в 2006 году с вводного класса, который был частью учебной программы по вычислительной лингвистике, моей линии
изучения. Во время учебы я не много программировал, но с тех пор (с 2012 года) я программировал для своей работы на регулярной основе,
хотя я не всегда работал программистом. За это время я научился использовать модульные тесты, принципы чистого кода и многое другое
об инструментах, используемых в корпоративной Java (Maven, Spring, Java EE, Git, SVN, Jenkins, …). Я работал исследователем, создававшим прототипы,
некоторое время занимался программированием веб-сервисов в отрасли и стажером в прикладных исследованиях новой функции для производственной системы. Несмотря на
все это, общей константой моей работы было то, что мне требовалось создавать работающий код. И совсем недавно я спросил себя: что
самое важное я мог бы сказать новичку? Какой самый важный принцип в программировании?

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

Все вышеперечисленное важно, но для меня нет ни одного из них. Для меня это просто: осознавайте, что вы делаете.

Ну, это звучит просто, не так ли? Я имею в виду, что я точно сосредотачиваюсь, когда программирую, так как же я могу не осознавать, что делаю? На самом деле, это
довольно просто. Вы видите функцию с определенным именем и думаете: «Отлично, это именно то, что мне нужно!» потому что название кажется подходящим.
И вы в конечном итоге отлаживаете свой код, потому что не понимаете, что функция имеет побочный эффект, который не соответствует тому, для чего она вам нужна.
И вы могли бы знать что если бы вы нашли время, чтобы прочитать документацию по функции, но имя показалось вам настолько подходящим, что
вы этого не сделали, и вот оно. Или вы видите кнопку, обозначенную в графическом интерфейсе, и думаете: «Да, это звучит примерно так», и нажимаете,
предварительно не изучив, что делает эта кнопка. Или вы искали решение проблемы и нашли в stackoverflow код, который должен
решить вашу проблему, поэтому вы просто копируете и вставляете его, не полностью понимая, что делает код. Потому что речь идет о скорости, верно?

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

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

Потому что помните: время выхода на рынок важно. Но дерьмо на рынке полностью убивает сделку.