Какие знания и качества требуются от программиста в сфере финансов

Участники биржевой торговли все больше используют компьютеры для автоматизации своей деятельности. Этот процесс необратим. Возврат к торговле вручную уже невозможен. А это значит спрос на квалифицированных IT-специалистов в этой области будет расти даже в периоды экономического спада.

Но давайте обсудим скиллы и знания, на которые делается особый акцент.

Технологические компетенции

Технологические компетенции очень сильно зависят от отдела, в котором работает программист, разработчик, тех.специалист. От программистов в сфере финансов вообще требуются все те же знания, что и в других областях программирования: язык или языки программирования, знакомство с БД, основными принципами разработки ПО. Конкретные же знания всегда перечислены в описании конкретной вакансии. Здесь я лишь упомяну общие технические скиллы, которые очень сильно пригодятся в работе помимо знания определенного языка программирования, технологии, инструментов, фреймворков, и всего того, что нужно для выполнения конкретной работы. Эти требования встречаются в описании любой технологической вакансии.

Стек сетевых технологий

Торговая система в целом это сложная система взаимосвязанных систем (system of systems), которые общаются друг с другом через сеть. Поэтому знание того, как работают локальные сети просто обязательно. Требование к глубине этих знаний зависит от конкретной вакансии.

  • TCP/IP и UDP/IP;
  • Ethernet;
  • базовые сетевые утилиты Linux.

Протоколы уровня приложения

Базы данных

  • SQL основы и какая-нибудь реляционная база данных, Oracle требуется чаще всего. Все базы данных в банке обслуживаются специальной командой администраторов DBA (DBA team), так что, если вы не претендуете на роль администратора БД, вам просто надо быть знакомым с тем, как работают реляционные базы данных вообще и как с ними программно общаться;
  • работа с базами данных через интерфейс конкретного языка: Java (JDBC), C++/C# (ODBC).

Инструменты

  • инструменты командной строки Linux / UNIX (если вам вдруг придется работать с OS Solaris, что вряд ли). Нужны для того, чтобы на QA или PROD быстро найти самостоятельно нужную информацию в случае аварии или ошибки. Все PROD системы в банках обслуживаются отдельными командами. Вам же, как разработчику, не надо будет лично обновлять ПО, ставить патчи или перезагружать сервера, да вам и не даст никто это делать. Но вы должны быть способны по логам и поведению системы определить причины ошибки на PROD;
  • все инструменты цикла разработки программ: JIRA, Jenkins/TeamCity, Wiki/Confluence, BitBucket;
  • системы управления исходным кодом: Git, уже реже требуется SVN, и уж совсем нигде — CVS;
  • IDE: Eclipse, Visual Studio, IntelliJ;
  • системы сборки и управления зависимостями: Maven, Gradle. Ant уже вообще не используется, но очень-очень редко встречается в legacy-проектах.

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

Внимание к деталям

«Attention to details» требование особенно важное в финансовой сфере. Невнимательное и «абыкаковое» отношение может привести любой банк к катастрофическим последствиям. Внимательность требуется, например:

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

Знание предметной области

Когда брокер нанимает программиста со стороны, скорей всего всегда известно заранее в какой команде открыта вакансия и каким классом ценных бумаг он будет заниматься. Следовательно, понятно и какие бизнес-знания требуются от кандидата. Тот, кто владеет предметной областью, имеет преимущества перед другими кандидатами. Тот, кто владеет знаниями именно о данном конкретном виде ценных бумаг, имеет еще большие преимущества перед другими кандидатами.

Благодаря internal mobility программисты могут переходить из отдела в отдел и развивать свои знания, получая более широкое представления обо всех рынках, которые обслуживает данный банк/брокер.

Опыт работы

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

Порог вхождения в профессию очень высок. Не получится так, что сегодня вы программируете алгоритмический движок, а завтра вы будете клепать CRUD формы для какого-то магазина. Время затраченное на овладение предметной областью настолько велико, что знания эти выбрасывать очень жалко, и получается что все, кто вошел в область программирования в финансах уже остаются в ней надолго и только переходят из одного банка в другой, а обращаются к другой деятельности только как к выходу на пенсию.

Предыдущий опыт работы ценится высоко, ведь проще нанять специалиста, уже разбирающегося в области финансов, чем обучать человека с нуля, доверяя ему код, в котором он не понимает многих особенностей бизнеса. Цена ошибки очень высока и измеряется конкретными суммами убытков, а может быть даже и штрафов. Это примерно как в «1С:Бухгалтерии». Нужен не просто программист, а программист, разбирающийся в бухгалтерии и всех налоговых закорючках. Для которого «дебет», «кредит», «баланс счетов», «выписка» и «авизо» — не просто слова, а понимание.

Способность к переключению между задачами

Это то, что называется «Multi-tasking«. Исследования показывают на деградацию продуктивности программиста, если его постоянно отвлекают или ему нужно быстро переключаться между задачами. Но характер работы в сфере финансов неизбежно сам по себе требует этого. Если вы работаете на передней линии бизнеса (front office), у вас редко будет возможность целый день провести без того, чтобы вас не отвлекли на «летучку», или на срочное решение какой-то проблемы, возникшей у трейдеров, или у других команд, с которыми взаимодействует ваша система. Конечно, большую часть проблем решает специальная команда — First Line Support, но бывают ситуации, где Support без помощи разработчика обойтись не может, просто в силу того, что разработчик лучше знает поведение системы.

Часто вы будете обнаруживать себя в ситуации, когда вам приходится работать над несколькими задачами одновременно: фиксить баг, отвечать на емейл, чатиться с support-ом и с коллегами, читать какой-то документ-спецификацию, делать ревью изменений.

Коммуникативные качества

В банках очень чувствительно относятся к общению — в банках не так свободно с тоном и эмоциями, как в стартапах или мелких компаниях. Общаться приходится очень много, с людьми разного склада ума, характера, мотивации, мнения о себе, культуры, расы и степени владения английским языком. Короче на высоте должны быть Soft skills. Очень ценится умение:

  • Работать в команде
  • Не робеть перед людьми
  • Не стесняться задавать вопросы и докапываться до сути
  • Понимать иерархию организации и ориентироваться в ней
  • Знать, когда и к кому обратиться за помощью в случае возникновения затруднений в решении какой-то задачи или возникновения проблемы

Устойчивость к стрессам

Люди теряют голову, особенно когда теряют деньги. Трудно не потерять голову, если по твоей ошибке в коде клиент банка понес убыток или банку регулятор выкатил штраф.

Особый стресс — PROD issues, когда все на нервах ищут причину падения системы или ошибки в исполнении ордера. В этой ситуации помогают очень крепкие нервы и ясная голова, методичный подход исключения возможных причин и последовательный поиск реальной причины, четкое понимание всех составляющих системы и их поведения в разной ситуации, так называемая situational awareness.

Ситуация может быть повторением уже старой ситуации. Тут помогает опыт и память, было ли что-то подобное ранее и как тогда решили проблему. Как и в любом программном проекте PROD вылезают Heisenbug-и, которые не отловить на QA или в разработке. Случается всё, поэтому и готовым надо быть ко всем. Собранность, устойчивость к стрессам, трезвый ум и спокойствие в критических ситуациях неоценимы.

Самообучаться и делиться знаниями

Очень ценится в банке умение мыслить и работать самостоятельно без ежедневного указания, т.е. Self-management. Эти навыки самостоятельности появляются со временем, с накоплением опыта работы с проектом. Наступает определенный момент, когда вы уже начинаете сами без дополнительных подсказок понимать, что надо делать в каком порядке, и кто и как должен быть поставлен в известность, если требуется помощь.

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

Ссылки

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s