Тяжело ли учиться на программиста?

Почему вам не стоит становиться программистом — эксперты рассказывают о недостатках профессии

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

Высокий порог входа и сложность самой профессии

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

С другой стороны, ни с чем не сравнимо чувство удовлетворения, когда проблема всё же побеждена и код начинает отрабатывать так, как и было задумано. Оказывается, компилятор/интерпретатор всё же просто выполняли данные программистом инструкции, сухо и бездумно.

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

Стоимость ошибки

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

Чувство ответственности давит на разработчиков, хотя они и не несут, как правило, прямого риска наказания. Здесь можно порекомендовать использовать лучшие практики CI/CD (continuous integration / continuous deployment) с автоматизированным тестированием, практики парного программирования и проверки кода (code review), которые позволят минимизировать такие риски и обрести со временем чувство уверенности и покоя.

Отсутствие обратной связи, либо чрезмерно активная обратная связь

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

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

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

Реалии бизнеса/рынка

Здесь есть две проблемы.

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

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

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

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

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

Специализация

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

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

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

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

Скорость развития отрасли

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

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

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

Сегодня программист считается модной и престижной профессией. Работа в сфере IT окружена ореолом романтики, опутана легендами об успешных стартапах и больших деньгах. А многочисленные онлайн-курсы предлагают получить знания и начать зарабатывать буквально через 2-3 месяца. Все это привлекает в профессию множество случайных людей. Как итог – разочарование, психологическое выгорание и огромное количество невостребованных кадров низкой квалификации. А все потому, что вся эта романтическая «шелуха» — не более, чем красивая обертка.

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

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

Миф первый: научиться можно быстро

Первое, что нужно понимать, программированию невозможно научиться за пару месяцев. За это время можно выучить основы какого-то языка и базовые понятия. Любые курсы и вебинары с подобными обещаниями нужно обходить десятой дорогой.

В реальности есть два пути:

  • Самообразование. В том числе с использованием различных тематических курсов. Обучение обычно занимает около 2-3 лет. При этом максимум внимания нужно уделять практике. Создавайте программы, сайты, различные «приблуды» для себя и друзей. Практикуйтесь – только при наличии портфолио с интересными проектами вы сможете претендовать хотя бы на уровень джуниора.
  • Обучение в ВУЗе. Диплом – дело хорошее. Но и здесь придется дополнительно учиться самому. В процессе учебы вы получите глубокие знания в области математики, алгоритмизации и т.д. В вопросах языков программирования и программных систем даже лучшие ВУЗы безнадежно отстают от жизни.

А дальше нужно морально готовиться к постоянному повышению квалификации. Сфера IT развивается стремительно. Появляются новые языки программирования и модернизируются существующие, постоянно выходят новые версии программных инструментов.

Будьте готовы регулярно тратить время на изучение новых систем, которые будут устаревать раньше, чем вы сумеете в них всерьез разобраться.

Миф второй: программировать может каждый

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

Настоящий программист должен совмещать в себе:

  • Творческую натуру. Что бы там ни говорили, программирование – это творчество. Вам ставят задачу с точки зрения пользователя, т.е. описывают желаемый результат. А как это реализовать максимально эффективно, с использованием минимума ресурсов, еще и совместить все это с существующими системами и «хотелками» заказчика – решать вам. Порой приходится совмещать несовместимое. И здесь нужен творческий подход.
  • Аналитический склад ума. Программа – это всегда логика. От программиста потребуется умение структурировать информацию, создавать сложные алгоритмы, прорабатывать кластеризацию и многое другое. Тут важны четкая последовательность, внимательность к мелочам, возможно, даже некоторое занудство. Любая небрежность в коде может привести к критическим ошибкам в будущем.
  • Стрессоустойчивость и умение работать в команде. Время одиночек-интровертов в программировании ушло. Сейчас важно находить общий язык с заказчиками, руководителем проекта, коллегами. И хорошо, если ваш проект-менеджер – специалист в сфере IT, вы хотя бы будете говорить на одном языке. А если он из числа управленцев, то придется по многу раз пояснять очевидные для вас вещи из серии «почему это невозможно» или «почему тут только так, а не иначе».

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

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

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

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

Миф три: элитарность профессии

Особое, иногда даже восторженное отношение к айтишнкам – удел обывателей, начитавшихся тех самых «историй успеха». Возможно, вами будет очень гордиться мама. Будут смотреть «снизу вверх» менее успешные друзья. Очень может быть, что вы начнете намного быстрее ровесников, занятых в других сферах, получать приличный доход. А когда вы достигнете уровня senior, вам будут завидовать коллеги в профессиональных сообществах. На этом, собственно, вся «элитарность» заканчивается.

Разговоры о «новой нации» или «особой касте избранных», столь любимые на тусовках программистов, в реальности – не более, чем самолюбование.

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

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

Например, в космическую программу никогда не возьмут «просто программиста». Здесь нужны знания в ракетостроении. Аналогично в любой другой инновационной сфере. Если ваши амбиции простираются в таком направлении, получайте образование, изучайте дополнительные дисциплины, становитесь не просто программистом, но программистом-химиком или программистом-физиком и т.д. Иначе вы будете всю жизнь заниматься реализацией программных решений в коммерческой сфере, ковыряться в чужом коде и писать километры форм.

Вас привлекает такая перспектива? Вы готовы тратить месяцы и годы на реализацию очередной ERP или CRM системы просто потому, что сам процесс доставляет удовольствие? Что ж. Вы – действительно настоящий программист. А это, как говорят, больше диагноз, чем профессия.

6 причин не быть программистом

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

1. Вы не любите творчество

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

2. Вы работаете из-под палки

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

Если вы просыпаетесь утром и не чувствуете жгучего желания сразу же начать кодить, то, возможно, программирование не для вас.

3. Вы не любите решать головоломки

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

4. Вы не можете сидеть долго на одном месте

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

5. Вы цените нормированный рабочий день

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

6. Вы хотите быстро разбогатеть

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

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

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

Ну что, ещё не передумали идти в программисты?

Образование

Евгений Кучерявый, автор блога онлайн-университета SkillBox, рассказал, чем занимаются веб-разработчики и какие языки им непременно нужно знать.

Frontend-программист

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

1. Обучение HTML

В первую очередь начинающий frontend-разработчик должен освоить HTML — язык гипертекстовой разметки. Это базовый инструмент, который позволяет вынести на страницу все основные элементы, будь то фотографии, таблицы или текст.

2. Обучение CSS

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

3. Обучение JavaScript

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

Вчерашняя техника уже завтра: могут ли устареть языки программирования

Backend-программист

Красивая оболочка сайта не имеет смысла без начинки: видеоролики, гиперссылки и картинки должны быть связаны с сервером, базой данных, с другими интернет-сайтами. Программно-аппаратную работу сервиса берут на себя backend-разработчики. Они же отвечают за информационную безопасность (защиту от хакеров) и следят за нагрузкой на сервер (чтобы страница не «висла» из-за наплыва посетителей).

1. Обучение PHP

Базовый инструмент backend-разработчика — язык программирования PHP. Он нужен, чтобы связать видимую пользователю страницу с сервером, где хранятся какие-либо данные. Например, чтобы не выкладывать на веб-сайт по одной фотографии при помощи HTML, можно запустить скрипт, автоматически подгружающий туда условную галерею, лежащую на сервере. Язык PHP настолько сильно упрощает работу по созданию сайта, что изучать его SkillBox рекомендует и frontend-разработчикам.

2. Обучение SQL

Аббревиатура SQL расшифровывается как «структурированный язык запросов». В отличие с PHP, который нужен для связи сайта с сервером, языки SQL позволяют управлять уже самими базами данных. Сейчас существует множество подобных языков, самые распространенные из которых — это MySQL, MSSQL, PostgreSQL и прочие.

Разработчики «полного цикла» в совершенстве владеют языками, необходимыми как для frontend-, так и для backend-программирования. Они являются универсальными специалистами, хотя, очевидно, глубина их погруженности в какую-то конкретно область веб-разработки уступает осведомленности узких специалистов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *