Вы замечали, что не только окружающие, но и мы сами часто делим задачи и инструменты на «настоящие» — сложные, требующие реально большого объема знаний и работы. И «ненастоящие» — простые, для которых достаточно пары строк кода или 15 минут работы.
Я долгое время совершал эту ошибку и считал ниже своего достоинства делать что-нибудь серьезное на PHP, допустим. Или в десктопе: WinForms — фи. По той же причине всегда пытался быть «на острие» современных технологий, раз за разом переделывая свои продукты на новые фреймворки/технологии.
Помню, когда на одной из последних работ я встретил человека, сделавшего SCADA-систему на Delphi. Я тогда программировал на Visual C++ и посчитал, что это — не серьезно. Вот если бы на C++… При этом его система была реально запущена в продакшен, а моя… ну, вы поняли.
Пишу это для того, чтобы уберечь кого-то от подобной ошибки. После нескольких лет опыта приходишь к тому, что лучше выбрать наиболее простой инструмент из тех, которыми можешь решить текущую задачу.
Оттачивая свои скилы в использовании простых решений, чаще получаешь красивые и эффективные решения, нежели «прыгая» по новым технологиям.
И еще: обратите внимание, что чем проще использованный инструмент/технология, тем более живучим оказывается в итоге проект. Я уже давно не касался старого сложного кода на C++, в то время как PHP-код и какие-то мелкие решения использую раз за разом.
Обвешивание кода кучей библиотек, из которых используется максимум пара функций, на моей памяти не приводило ни к чему хорошему: тебе приходилось «тянуть» за собой всю библиотеку из проекта в проект, в то время как можно было просто скопипастить кусок кода.
Выделение часто используемого своего кода в универсальные библиотеки — тоже не панацея. Заканчивается одинаково: проблемами с поддержанием актуальной версии библиотек между проектами. В итоге пришел к простой копипасте кода между проектами. Даже если там и будут баги, по затратам времени и конечному результату все равно получается более легкий в поддержании и стабильный код.
Переход на новые версии чужих библиотек в 30-50% случаев заканчивался неработоспособностью основного функционала, причем незаметного на первый взгляд. Особенно неприятно, когда это всплывает через несколько дней или даже недель, когда ты уже забыл об обновлении и не понимаешь, в чем дело.
Максимально простые решения, мелкие проекты, минимум зависимостей в коде реально упрощают жизнь. Сложные системы проще делать комбинацией простых, нежели концентрировать сложные решения в одном проекте.
Мне кажется, себя как программиста стоит оценивать по результату, а не по процессу.
Есть продукт? В срок? Хороший специалист.
Нет? Никакие оправдания не помогут, в том числе и отсылки к уникальности применяемых решений.
Автор: MaxPastukhov