Последнее время часто слышу мнение, что для современного программиста нужно лишь знание библиотек, да софтскилы — быть не токсичным и не говорить матом. Что касается алгоритмов или понимания как работает операционная система, или прости господи математики — это лишь преграды от старперов-гейткиперов на пути к вожделенной «пилюли от бедности».
Работа программиста в принципе очень простая, всяко проще работы экономиста или юриста. Интеллект и знания нужны минимальные.
Скажу честно, меня такие рассуждения немало задели, поэтому решил написать отдельный пост про рутинную работу программиста на примере своего биржевого проекта.
По современным меркам это обычный пет-проект, который, впрочем, мало кого заинтересует на собеседовании. Что же нужно было знать, что бы его создать.
Во-первых на счет «ненужной математики» — для визуализации применяется линейная алгебра, а именно все те же кватернионы, матрицы, вектора. Нужно понимать что такое матрица, как работает обратная матрица и афинные преобразования. Библиотека для работы с матрицами под js нашлась, но ее тоже пришлось править, т.к. там нашлись ошибки. Далее — для расчета моделей опционов нужны базовые знания статистики (к ней естественно идет диф. исчисление), так пригодилась математика для того, что бы сделать рассчеты оптимального портфеля Марковица.
«Бесполезные алгоритмы» — нужно в реальном времени просчитывать кучу статистики и внезапно потребовались и деревья и хеш-таблицы. Все пришлось рассчитывать в несколько потоков для скорости — а там нужны и примитивы синхронизации вроде спинлока.
Для ускорения отдельный расчётов пришлось делать автогенерацию и компиляцию кода на лету. Источник поставляет данные в древнем DDE — посему пришлось доставать с полки пыльный winapi. Для сбора других данных пришлось написать windows service.
Далее — часть запросов обрабатывалась в памяти, но большая часть на БД. Скорость тут очень важна. А поэтому куча оптимизаций — нужно понимать почему Distinct работает медленней group by, merge — быстрее insert & update, что такое триггеры, секционирование, изоляция транзакций, какие нужны индексы и как оптимизировать хранимые функции.
С другой стороны, для сервисных функций нужно знание ORM и миграций.
Архитектура микросервисная, так что тут понятное дело надо поднять Кафку, но тут все как у всех. Там так же нужен биллинг, взаимодействие с сервисами юмани.
На стороне фронта все по большей части рутинно — кастомные чарты, управление жестами, роутинг, кеширование, мобильная и десктопная версия, в общем стандартный арсенал ангуляра, единственно что — ангуляр не знал и никогда не писал на нем. А надо было фронтэнд переписать с asp.net pages быстро — за пару месяцев. По итогу вышло где то 600 килобайт кода. Т.е. за это время и Ангуляр выучить и код портировать.
Прошу заметить — я никогда не позиционировал себя как крутого программиста. Я — средний, которого не отрывают с руками и который ищет работу на $3000 неделями, пройдя пару десятков собеседований.
Тем не менее, я вообще не уверен, что средний «менеджер по продажам за 30» способен получить тот набор знаний и навыков, что и я. И что работа юриста или экономиста сложнее.
ссылка на оригинал статьи https://habr.com/ru/articles/858338/
Добавить комментарий