У каждой профессии есть свои недостатки, но зачастую об этом узнают лишь спустя какое-то время. Давайте посмотрим, к каким недостаткам профессии программиста стоит быть готовым новичку.
Высокий порог входа и сложность самой профессии
На первый взгляд, кажется, что все просто – научись языку программирования и будешь грести деньги лопатой, по крайней мере, так часто думают начинающие разработчики. Однако по мере погружения оказывается, что все совсем не так. Чем сложнее и запутаннее код, тем непредсказуемее он себя ведет, компиляторы выдают ошибки, на ровном месте вылетают исключения, нужно держать в голове огромное количество мелких деталей, чтобы ничего не упустить. В какой-то момент начинает казаться, что компилятор/интерпретатор живут каким-то своим разумом и отчаянно сопротивляются. А с точки зрения теории информации не существует хоть сколько-нибудь сложных программ совсем без ошибок. С этим сложно смириться.
С другой стороны, ни с чем не сравнимо чувство удовлетворения, когда проблема все же побеждена и код начинает отрабатывать так, как и было задумано. Оказывается, компилятор/интерпретатор все же просто выполняли данные программистом инструкции, сухо и бездумно.
Чтобы облегчить вход в профессию, нужно много читать о лучших практиках, желательно на английском языке, стараться работать в команде с профессионалами и постоянно учиться, учиться и учиться – и в теории, и на практике.
Стоимость ошибки
Мало кто осознает, что стоимость ошибки разработчика может исчисляться огромными суммами. Представьте себе потери интернет-магазина, в котором нельзя ничего заказать, или какой убыток принесет вышедшее из строя программное обеспечение фондовой биржи.
Чувство ответственности давит на разработчиков, хотя они и не несут, как правило, прямого риска наказания. Здесь можно порекомендовать использовать лучшие практики CI/CD (continuous integration / continuous deployment) с автоматизированным тестированием, практики парного программирования и проверки кода (code review), которые позволят минимизировать такие риски и обрести со временем чувство уверенности и покоя.
Отсутствие обратной связи, либо чрезмерно активная обратная связь
Так получается, что в профессию программиста обычно идут ярко выраженные интроверты – люди с максимальным уровнем самопогружения и высокими способностями к анализу. И поначалу жизнь в этом смысле, кажется прекрасной – взаимодействовать приходится только с тимлидом или в крайнем случае менеджером, а остальных программист не видит и не слышит. Но далее начинают проявляться недостатки этой ситуации. Задачи приходят странными, их приходится переделывать по несколько раз и программист начинает мечтать получать более детализированные задачи, слышать прямую обратную связь от клиентов и пользователей. Но в жизни все не так просто.
По мере роста в тимлида или менеджера, на плечи программиста начинают сваливаться излишне активные коммуникации и бывший разработчик постепенно начинает понимать причины той сумбурности, от которой страдал раньше, только теперь мечтает, чтобы его оставили в покое.
Эти недостатки можно только понять и принять, сделать свой выбор на каком уровне работать с заказчиками/клиентами и работать в таких компаниях, где для разработчиков поддерживается именно такой уровень.
Реалии бизнеса/рынка
Здесь есть две проблемы.
Каждый код рано или поздно требует рефакторинга – переписывания таким образом, чтобы код был красивым и стройным, ошибок было минимум и поддерживать такой код было бы максимально легко. Но есть проблема – чем больше кода, тем дольше времени занимает рефакторинг вплоть до того, что сильно запущенный код быстрее и дешевле полностью переписать, чем пытаться оптимизировать.
И тут все это вступает в противоречение с реалиями бизнеса, для которого рефакторинг – это просто дополнительные затраты, которые не приносят ничего ценного. Бизнес всячески оттягивает или прямым образом запрещает это делать, одновременно не соглашаясь на то, что ошибки будут возникать чаще и их последствия будут серьезнее.
Это требует хорошей командной работы, в которой разработчики честно подсвечивают только по-настоящему необходимые оптимизации кода, а менеджер тем или иным образом продает их бизнесу.
Вторая проблема заключается в том, что рынок зачастую не терпит отстающих. И это выливается в постоянную гонку, в которую невольно втягивают разработчиков. Кажется правильной практикой не делать выкладок кода в пятницу вечером, но что делать, если саму задачу поставили в четверг, а в выходные все должно уже работать? При этом задача пришла описанной лишь поверхностно, потому что бизнес тоже в постоянной гонке и не всегда есть время и/или специалисты в штате, чтобы детально продумать все экраны и их взаимодействие.
Решить эту проблему можно только выбирая работу в такой отрасли, где бизнес меняется не слишком динамично и есть возможность делать все неспешно и по-правильному.
Специализация
Рано или поздно многие разработчики начинают сталкиваться с выбором: быть ускоспециализованным в конкретной технологии или знать много разных технологий, но более поверхностно.
Разные люди делают разный выбор: кто-то пытается охватить максимум всего, постепенно становясь «фулстек» разработчиком, кто-то с самого начала отказывается от изучения дополнительных технологий и растет только в своем стеке. И у того и у другого подхода есть свои плюсы и минусы.
«Люди-оркестры» могут помочь коллегам со многими задачами, что подсвечивает их в глазах руководителей, им, теоретически, проще найти работу, продавая только те навыки, которые нужно работодателю, они легче и быстрее вырастают в менеджеров. С другой стороны им тяжелее делать по-настоящему качественный код в отдельном стеке и сложнее говорить на одном языке с профессиональными разработчиками по мере роста в менеджеры.
Узкоспециализированные специалисты лучше и профессиональнее выполняют свои непосредственные обязанности, могут устроиться в крутые компании и больше зарабатывать в своем стеке, так как профессионалы высоко ценятся. С другой стороны, гораздо выше риск оказаться на обочине, если технология устареет, что приводит нас к следующему недостатку профессии.
Скорость развития отрасли
Это, на мой взгляд, ключевой недостаток, который люди начинают по-настоящему осознавать и принимать лишь с возрастом, хотя поначалу гонка возбуждает и захватывает дух – постоянно гремят новые интересные технологии, они расширяются и улучшаются, одновременно упрощаются и усложняются.
Поначалу угнаться не так сложно: можно читать многочисленные статьи, выбирать работодателей, которые либо используют передовые технологии, либо не ограничивают их выбор, самому писать статьи и участвовать в продвинутых комьюнити разработках.
С годами же все больше хочется пользоваться накопленными обширными знаниями, а не продолжать учиться без остановки, но это практически невозможно себе позволить. Рано или поздно любой разработчик встает перед выбором: либо расти горизонтально, «закостенеть» в каком-то конкретном наборе технологий и нести риск их постепенного устаревания и исчезновения, либо расти вертикально – в какой-то степени переучиваться и уходить в менеджмент, где навыки гораздо медленнее устаревают с годами, а некоторые не устаревают вообще, такие как, управление людьми, переговоры и многие другие.
Итого
У профессии разработчика, как ни странно, есть свои недостатки, однако у нее есть и множество серьезных достоинств, которые хоть и не освещены данной статьей, тем не менее, точно стоят того, чтобы пойти в эту профессию и преодолеть все описанные преграды.
Опубликовано на tproger.ru