Источник: Nuances of Programming
Как только вы сдали на права и начали постоянно передвигаться на автомобиле, вы учитесь им управлять. Но знание теории и безаварийная езда не делает вас опытным водителем. Необходимо ориентироваться во всех ситуациях, которые могут произойти, а также не забывать о безумцах на дороге.
Работа программистом и создание софта — это как водить машину, но в тысячу раз сложнее и безумцев здесь в два раза больше.
В процессе создания компьютерной программы разработчик получает навыки, опыт и знания. Создание качественного софта и реализация программным проектов — это навыки разработки ПО.
Выполнять работу и создавать софт — это хорошо, но, чтобы продвинуться по карьерной лестнице, необходимо изучать основы разработки программного обеспечения.
Процесс обучения программистов — это нечто большее, чем написание кода. Технические навыки, которыми вы обладаете сейчас, не являются прочным фундаментом для карьеры, потому что через 5–10 лет понадобятся совершенно другие знания.
Вы создаете софт, необходимый для проекта, потому что это именно то, за что вам платит заказчик и компания, на которую вы работаете. Ценность разработчика заключается в его навыках, знаниях и опыте, которые нужно постоянно улучшать, чтобы совершенствоваться в данной профессии.
В идеале, вы будете делать все одновременно, что не всегда возможно, поэтому следить за этим нужно самостоятельно.
Как только вы начинаете чувствовать себя слишком комфортно в качестве разработчика, пора задуматься о переходе на что-то новое.
Овладение профессией
Вы будете совершенствовать навыки программирования всю свою жизнь.
Разработчики ПО находятся в процессе постоянного изучения своей профессии и, как только они начинают зазнаваться, сразу получают оплеуху. Хороший программист ведет себя скромно, потому что чрезмерная уверенность приводит к нелепым ошибкам.
Ошибки, проблемы и аварии неизбежны — примите это как должное и вместе с командой приложите максимум усилий для их поиска и исправления.
Когда вы начинаете свой путь в качестве разработчика, вы фокусируетесь на создании кода, отвечающего требованиям. Когда-то и я думал, что быть программистом — это просто писать код.
В разработке программного обеспечения существует много других аспектов: от проектирования, архитектуры и модульного тестирования до DevOps и ALM.
Существует множество лучших практик, таких как принципы SOLID, DRY (не повторяйся), KISS и другие. Они, как и фундаментальные навыки, обеспечивают преимущества, как правило, в перспективе. Это усложняет их понимание начинающими разработчиками, так как отсутствует сиюминутная польза.
Грамотно проименованный код, спроектированный с учетом простоты тестирования, сильно отличается от чернового варианта. Он не просто работает, а создан для того, чтобы его было легко читать, понимать и изменять.
Я работал над легаси-кодом с помощью метода 2000 строк. Он действовал, как машина состояний и контролировал статус процессов. Это было просто кошмарно, потому что изменение одной строки могло поломать весь последующий код и было практически невозможно его протестировать.
Отдельно взятая часть кода имела ужасное обозначение и использовала переменную, которая была тринадцатым месяцем. Читая код, я никак не мог понять, что это за месяц.
Мне пришлось выяснить, что тринадцатый месяц — это переменная, которая хранила значения, передаваемые между первым и вторым годом эксплуатации автомобиля, для целей технического обслуживания.
Опыт — ценный ресурс, потому что работа с плохим кодом и наблюдение за проблемами, которые он вызывает, мотивирует не совершать таких ошибок в будущем.
Крепкая основа
Каждый программный проект создает уникальное ПО по уникальным требованиям. Оно строится на основах программной инженерии. Качественная разработка ведется с помощью хороших процессов, лучших практик, DevOps и анализа кода.
Со временем будут появляться новые инструменты, ПО и технологии, поэтому нужно следить, чтобы наработанные методики не устаревали, и вовремя их обновлять.
Ведущим разработчикам необходимо иметь представление, как должен протекать каждый аспект разработки программного обеспечения. Вы должны быть открыты для обновления процессов разработки.
Основные навыки программирования
Технологии меняются, но разработка ПО остается прежней.
Технологии развиваются с появлением новых языков программирования, сервисов, инструментов и лучших практик.
Но есть основные навыки программирования, которые нужно освоить разработчикам, и которые будут применимы в работе вне зависимости от технологий.
- Присвоение имен (недооцененный навык, который является ключом к простому и читаемому коду).
- Проектирование кода (простой дизайн, не комплексный).
- Шаблоны проектирования.
- Модульное тестированиеэ
- DevOps (системная инженерия).
- Коммуникативные навыки.
- Документирование.
- Разработка лучших практик.
- Гибкая методология разработки.
- Исправление ошибок.
Эти ключевые навыки — основа разработки программного обеспечения. Вы не сможете написать хороший код, если у вас нет знания и понимания того, как он должен выглядеть. С другой стороны, вы должны знать, как выглядит плохой код, и понимать причины, по которым это произошло.
Младшие разработчики будут постоянно писать некачественные программы, если их не научили, или они сами не разобрались, как определять проблемный код, который работает сейчас, но создаст проблемы в будущем. Невозможно избежать ошибку, пока вы ее не осознаете.
А если не знать лучших практик разработки ПО, то и не получится их применять.
На имеющемся опыте далеко не уедешь
Работа над программным проектом с использованием знаний и навыков, которыми вы уже обладаете, — это как заниматься на беговой дорожке. Вы прилагаете много усилий, но остаетесь на месте.
Получение опыта по уже имеющимся навыкам имеет ограниченную ценность, поскольку добавляет больше времени к этому навыку в резюме.
Нестандартные ситуации, дающие новые знания и опыт, который можно задействовать в новых проектах, — вот настоящая ценность.
Будьте любопытны
Понимание процесса разработки, а не просто создание софта — навык, которым обладают опытные разработчики. Он поможет писать новые программы в будущем, избегать проблем, а также дает представление о принципах работы программиста.
В разработке программного обеспечения многие задачи требуют умения работать с людьми. Поэтому изучение другой области, помимо разработки ПО, — лучшее вложение, которое можно сделать для себя и своего образования.
“Проводите каждый день, пытаясь быть чуточку мудрее, чем вы были, когда проснулись. Выполняйте обязанности добросовестно и хорошо. Вы будете постепенно продвигаться вперед, но не обязательно быстрым темпом. Тем не менее, готовясь в большим рывкам, вы укрепляете дисциплину. Медленно преодолевайте свой путь шаг за шагом, и в конце концов, если проживете достаточно долго, то, как и многие люди, получите должное”, — американский адвокат и инвестор Чарльз Мангер.
Будучи программистом, следует изо дня в день становиться лучше, допускать меньше ошибок и заменять плохой код хорошим. Нужно стремиться непрерывно совершенствовать навыки, знания и опыт.
Коммуникативные навыки
Разработка программного обеспечения — командная игра. Чем эффективнее люди могут общаться друг с другом и работать, тем лучше.
Все проблемы, возникающие при создании софта, вызваны людьми, которые и будут их решать.
Умение общаться, убеждать и сотрудничать — ключевые навыки, в которые следует вложиться.
Раньше я представлял демоверсии и прогресс от команды, в которой был скрам-мастером. Мы отлично работали и добились больших успехов, но заказчик не был в нас уверен.
Обратную связь я получил от менеджера, который объяснил, что я начинаю с багов и негативной информации, оставляя положительные моменты на потом. Как будто я кричал плохие новости в мегафон, а хорошие произносил шепотом.
С тех пор я много работал над презентацией и взаимодействием с людьми. Общению уделяется не много времени, поэтому важно делать это продуктивно.
Все проекты, рекламные кампании и другие важные решения принимаются людьми. Поэтому нужно выстраивать взаимоотношения и влиять на них.
Заключение
В конце дня перед сном нужно знать о разработке ПО больше, чем вы знали с утра. Совершенствование — это вовсе не гигантские скачки, а постоянное улучшение и непрерывное обучение. Другие разработчики — это огромный источник знаний, поэтому учитесь у них, копируя успех и избегая совершенных ими ошибок.
Читайте также:
Перевод статьи Ben “The Hosk” Hosking: Writing Code Is One Thing, Learning to Be a Software Engineer Is Another