Достаточно ли библиотек для современного программиста?

b598a76a1ebd61129c23f6779b4ed89d

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

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

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

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

Во-первых на счет «ненужной математики» — для визуализации применяется линейная алгебра, а именно все те же кватернионы, матрицы, вектора. Нужно понимать что такое матрица, как работает обратная матрица и афинные преобразования. Библиотека для работы с матрицами под js нашлась, но ее тоже пришлось править, т.к. там нашлись ошибки. Далее — для рассчета моделей опционов нужны базовые знаниния статистики (к ней естественно идет диф. исчисление), так пригодилась математика для того, что бы сделать рассчеты оптимального портфеля Марковица.

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

Для ускорения отдельный рассчетов пришлось делать автогенерацию и компиляцию кода на лету. Источник поставляет данные в древнем DDE — посему пришлось доставать с полки пыльный winapi. Для сбора других данных пришлось написать windows service.

Далее — часть запросов обрабатывалась в памяти, но большая часть на БД. Скорость тут очень важна. А поэтому куча оптимизаций — нужно понимать почему Distinct работает медленней group by, merge — быстрее insert & update, что такое триггеры, секционирование, изоляция транзакций, какие нужны индексы и как оптимизировать хранимые функции.

С другой стороны, для сервисных функций нужно знание ORM и миграций.

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

На стороне фронта все по большей части рутинно — кастомные чарты, управление жестами, роутинг, кеширование, мобильная и декстопная версия, в общем стандартный арсенал ангуляра, единственно что — ангуляр не знал и никогда не писал на нем. А надо было фронтэнд переписать с asp.net pages быстро — за пару месяцев. По итогу вышло где то 600 килобайт кода. Т.е. за это время и Ангуляр выучить и код портировать.

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

Тем не менее, я вообще не уверен, что средний «менеджер по продажам за 30» способен получить тот набор знаний и навыков, что и я. И что работа юриста или экономиста сложнее.

© Habrahabr.ru