No Country for Old Software Engineers
Прошлую свою статью я написал по наитию и не думал, что она найдет столько откликов; считал, что её даже не пропустят из песочницы.
Два вопроса, которые, исходя из обсуждений, хочу раскрыть: что такое хороший программист и актуальны ли сегодня хакерские навыки и стиль мышления, или же хакер стал проблемой для бизнеса и токсичным «элементом».
Для начала, мысленно обращаясь к аксакалам, предлагаю вспомнить, что нас вообще привлекло в программировании? Когда мы с красными глазами сидели ночами за компьютерами, даже не понимая, как на этом можно заработать. Никто тогда не знал таких волшебных слов, как FAANG, синьор, бесплатный сок и скрам-митинг.
Думаю, не ошибусь, если скажу, что многих вдохновляла идея о том, что компьютер — это универсальное средство для избавления от рутины. Фактически, программист по определению — это человек, который стремится избегать рутины в своей жизни. Следовательно, качества хорошего программиста — это умение срезать углы, решать сложные задачи в условиях неопределенности и находить решение там, где другие следуют стандартным схемам. Программист — это, по сути, мета-инженер, инженер инженеров, голубая мечта которого — оставить в своей жизни только чистое творчество, передав всю рутину машинам.
Некоторые ехидно возражали мне, мол, спектрум-бейсик остался в прошлом, и такие задачи уже не актуальны. На собеседованиях у меня часто спрашивают, какими проектами я горжусь. Конечно, я всегда отвечаю, что горжусь вовремя выполненными задачами в Jira, но на самом деле могу привести пару других примеров.
Первый — это когда мне понадобилось получить справочные данные для проекта, которые были зашифрованы в стороннем проекте. Не обладая большим опытом в дизассемблировании, я все же через WinDbg и HexRays выяснил, что для дешифровки используется ключ из соседней колонки, но ни один из массовых алгоритмов дешифрования не подходил. После пары дней раздумий я написал сканер бинарного кода, который выделял последовательности констант, и, найдя её через поисковик, обнаружил алгоритм в заброшенной ветке GitHub. Это была победа — тот самый элемент творчества, о котором «войтивайтишники» не слышали.
Второй пример — падение посещаемости через поисковики на мой собственный проект. Изучив сайты схожей тематики, я понял, что один из владельцев активно пиарит информацию, которая мне казалась незначительной. Проанализировав структуру его сайта, я увидел, что он содержит огромное дерево ссылок, ведущих к этим данным. «Хм, видимо, это не случайно», — подумал я. Попросил GPT написать сканер данных, используя определенные теги, натравил на сайт… Доступ запрещен. Хорошо, GPT, предложи решения для обхода защиты. Теперь напиши скрипт, определяющий структуру таблиц и формат данных… Теперь создай маппинг, репозиторий и контроллер. На Angular напиши сервис и таблицу для отображения данных. Применив современные стили, сделал так, чтобы таблица выглядела стильно и современно. Результат — два вечера работы, и особая гордость: почти не заглядывая в код, я перенес функционал конкурента, на разработку которого у него, похоже, ушли месяцы и команда людей. Для меня — плюс 500 целевых заходов в сутки.
Очевидно, что такие хард- и софт-скиллы сейчас оцениваются работодателем как токсичные. Бизнесу нужно совсем другое. Продукт создаёт бизнес, а программист поддерживает код. Задача программиста (точнее, кодера) — не убирать рутину из жизни, а наоборот, стать частью чужого рутинного процесса. Работодателя интересует не то, как вы виртуозно срезаете углы, а то, насколько вы безотказны, надёжны и взаимозаменяемы.