План самостоятельного изучения, чтобы стать количественным разработчиком

Автор:Доброта, Создано: 2019-02-12 09:08:19, Обновлено:

Я недавно получил много электронных писем от людей, желающих сменить карьеру из инженерии, научных кругов и ИТ. Количественные финансы стали особенно привлекательной областью в последнее время из-за интеллектуальной проблемы и высокого вознаграждения. Вопрос, который постоянно возникает в этих электронных письмах, заключается в том, что мне нужно изучать, чтобы убедить интервьюера дать мне работу?. Это первый из трех частей серии, в которой будет обсуждаться, как сформировать план самостоятельного изучения, чтобы получить работу в индустрии количественных финансов. Этот пост будет обсуждать, как самостоятельно изучать, чтобы стать количественным разработчиком. Остальные два сосредоточатся на количественных аналитиках и количественных трейдерах.

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

Научные вычисления

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

Тем не менее, если вы не имеете опыта в области научных вычислений, все еще есть много возможностей стать количественным разработчиком, используя опыт программирования.

Навыки программирования

В первую очередь количественный разработчик - это разработчик программного обеспечения. Таким образом, роль будет почти исключительно основана на 100% программировании. Вы обнаружите, что оптимизируете торговые прототипы или разрабатываете торговую инфраструктуру с нуля. Если вы нацелены на банковские роли, то вам, вероятно, нужно будет использовать C ++, Java или C # в среде Microsoft / Windows. Если вы нацелены на хедж-фонды, то вы, вероятно, переведете MatLab или R на C ++ и / или Python. Фонды, как правило, используют Java и C # меньше, поскольку они часто находятся в среде UNIX, где C ++ и Python имеют больше смысла. Если у вас есть опыт в любой из этих программных сред, имеет смысл оценить свои сильные стороны и придерживаться программного обеспечения, которое вы хорошо знаете. Таким образом, если вы знаете Java, например, было бы разумно нацелиться на инвестиционные банковские роли.

Предполагая, что вы компетентный программист и счастливы перейти на программное обеспечение, наиболее широко используемое в финансовой отрасли, тогда я бы предложил изучить C ++ и Python чрезвычайно хорошо, так как это дает вам наиболее сквозные возможности в разных секторах отрасли.

Прочитайте всю книгу Accelerated C++ от Эндрю Кенига. Эта книга поможет вам начать с нуля с синтаксиса C++ и, в частности, подробно расскажет о указателях и управлении памятью. Это область, с которой многие программисты (включая тех, кто имеет опыт Java и C#) не знакомы. Лучше всего прочитать при реализации примеров, либо с Microsoft Visual Studio, либо с GCC компилятором на Linux/UNIX, чтобы практиковаться в синтаксисе, а не просто читать его! Прочитайте (неоднократно!) всю книгу Effective C++ от Скотта Майерса. Я повторял этот совет последовательно на сайте, но он все еще стоит повторить. Эта книга приведет вас от начинающего программиста C++ до промежуточного программиста, который готов к интервью. Эта книга труднее практиковать перед терминалом, поскольку Майерс устанавливает некоторые сложные примеры. Если вы подаете заявку на работу в C++, вы, вероятно, захотите выйти за рамки этих двух работ. Скотт Майерс также написал более эффективный C++ и эффективный STL. Вам нужно будет рассмотреть библиотеку Boost, многопоточное программирование и основы операционной системы Linux, чтобы стать настоящим экспертом. Аналогично для Python:

Если вы уже опытный программист C++/Java/C#, то прочитайте определенные разделы книги Марка Люца Learning Python. В частности, прочитайте главы 4-9, в которых обсуждается Pythons, встроенный в типы. В главах 10-13 обсуждается синтаксис Pythons для разветвления и петливания, поэтому их также можно легко прочитать, чтобы определить синтаксис. Однако стоит потратить значительное время на главы 14-20, поскольку они обсуждают специфические функции Python, такие как итерации/понимание и расширенное использование функций. Разделы V и VI охватывают пространство между именами и объектно-ориентированное программирование, и как эти концепции отличаются в Python от языка, такого как C++/Java. Если вы хотите быть хорошим промежуточным программистом Python, то вы также должны рассмотреть оставшиеся главы в книге. Вторая книга Марка Люца, Programming Python, посвящена созданию приложений в Python. Это позволит вам начать создавать надежные приложения. Это поможет вам стать гораздо лучшим инженером программного обеспечения Python. Для тех, кто определенно заинтересован в количественной стороне торговли в отрасли, необходимо будет узнать, как проводить анализ данных в Python.Это навык, который часто подбирается в аспирантуре, но Python for Data Analysis Уэса МакКинни хорошо охватывает некоторые из более новых доступных библиотек, таких как SciPy и панды. После выполнения вышеперечисленного плана у вас должны быть хорошие шансы на любое собеседование на C ++ или Python. Однако, чтобы укрепить свои навыки разработчика, необходимо знать о некоторых последних инновациях в области разработки программного обеспечения, которые, как правило, выясняются только на работе, но, безусловно, могут изучаться и практиковаться дома в свободное время.

Программная инженерия

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

QuantLib

Прочитав (некоторые из) исходного кода этого проекта, вы получите хорошее представление о том, как пишутся крупномасштабные программные проекты на C++.

Чтобы стать хорошим разработчиком программного обеспечения, необходимо понимать, как создавать крупномасштабные программные проекты.Для современной разработки программного обеспечения это требует использования контроля версий, непрерывной интеграции и других гибких практик.

Прочитайте как Код Стива Макконнелла, так и Чистый код Роберта Мартина. Обе эти книги заставят вас серьезно переосмыслить, как вы занимаетесь разработкой программного обеспечения, начиная с первых принципов. Например, сколько времени вы тратите на проектирование программного обеспечения перед тем, как прикоснуться к клавиатуре? Обе эти книги позволят вам сэкономить часы потраченного на разработку кода. Я бы предложил применить как можно больше советов в этих книгах к вашим проектам как можно скорее, чтобы устранить любые плохие привычки. Они также отлично подходят для обсуждения на собеседовании, так как вас неизменно попросят написать какой-то код. Дискуссия о хорошем мастерстве программного обеспечения не будет полной, если не упомянуть о дизайнерских моделях, также известных как книга Gang Of Four. Эта книга очень актуальна для языка, такого как C ++, хотя и менее актуальна для языка сценариев, такого как Python. Вы, вероятно, заметите, что вы используете аналогичные дизайны в своем коде. Эта книга поможет вам определить, когда и где их следует применять. Одно из преимуществ заключается в том, что другие хорошие разработчики будут знать о них - что сделает вас более популярным среди вашей группы сверстников в области разработки. При работе над крупномасштабными программными проектами с несколькими членами команды использование программного обеспечения для контроля версий является абсолютной необходимостью. Автоматическое пересмотр, отказ, разветвление / слияние и лучшие возможности тестирования означают, что контроль версий повсеместно распространен практически во всех (хороших) программных учреждениях. Двумя крупными конкурентами являются Git и Subversion (SVN). Я бы предложил познакомиться только с Git, поскольку SVN похож (если немного сложнее в использовании!) и большинство учреждений заменяют свои хранилища SVN эквивалентами Git. Есть бесплатная электронная книга по изучению Git, Git Pro, которую я предлагаю вам проработать. Некоторые отрасли в настоящее время обращаются к практикам непрерывной интеграции, которые поощряют непрерывное тестирование и развертывание кода через полностью автоматизированную систему тестирования и развертывания. Взаимодействие с базой данных

Несмотря на то, что стать отличным программистом и отличным разработчиком программного обеспечения является предпосылкой для получения должности на собеседовании, вам также будут задавать вопросы, связанные с хранением и анализом данных. Один из ключевых компонентов в повседневной жизни квантового разработчика - взаимодействие с базами данных. Таким образом, ожидается определенный уровень зрелости с обращением с базами данных. Если вы никогда не использовали систему хранения данных, то лучший способ начать - начать понимать системы управления реляционными базами данных (RDBMS) и их язык - Structured Query Language (SQL).

Лучший способ начать изучать RDBMS - это установить версию с открытым исходным кодом (поскольку вы можете скачать их бесплатно!) и следовать списку чтения ниже. Это выходит за рамки этой статьи, чтобы научить вас, как установить RDBMS, но вы можете попробовать MySQL, так как это очень распространенная база данных в рамках хедж-фондов. SQL Server и Oracle, скорее всего, распространены в банковском секторе. После установки базы данных, такой как MySQL, используйте следующие руководства, которые помогут вам понять хранение и доступ к данным:

Если вы не знакомы с SQL, то книга OReilly Learning SQL от Алана Болиу - отличное начало. Она охватывает все начинающие и промежуточные SQL, которые вам нужно знать для хранения, доступа и предоставления отчетов для данных. Она также кратко обсудит оптимизацию баз данных. Убедитесь, что вы прочитали всю книгу, так как весь материал имеет отношение к повседневным задачам квантовой разработки баз данных. Для конкретных задач баз данных вы захотите взглянуть на OReilly SQL Cookbook. Хотя квантовые разработчики не часто являются администраторами баз данных, если вы хотите узнать больше об усовершенствованной оптимизации MySQL, то следующие две книги, хотя и не обязательны, очень полезны, если вы сталкиваетесь с проблемами с базами данных: High Performance MySQL и MySQL High Availability. Финансы и цифровые алгоритмы

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

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

Для хедж-фондов вы, вероятно, будете реализовывать торговую инфраструктуру - либо с низкой, либо с высокой частотой. Это будет включать в себя принятие алгоритма, уже закодированного в MatLab, R или Python (или даже C++), а затем его оптимизацию на более быстром языке, таком как C ++, а также подключение этого алгоритма к первичному интерфейсу программирования брокерских приложений (API) и выполнение сделок. Необходимые навыки здесь довольно разные. Вам нужно будет уметь собирать данные из различных источников, помещать их в правильный контекст, быстро повторять их, а затем генерировать отчеты по требованию либо в фиксированном формате (PDF), через веб, либо в качестве самого API. Эти навыки трудно выучить непосредственно из книг и требуют нескольких лет опыта разработки программного обеспечения в индустрии технологий.

Чтобы узнать больше об этих темах, пожалуйста, ознакомьтесь с моими статьями по внедрению C ++, моими статьями по внедрению Python и списком чтений по количественным финансам.

Поиск работы

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

Как только вы считаете, что вы готовы к собеседованию, вам нужно будет начать процесс обращения к количественным рекрутерам. Есть специализированные фирмы, которые занимаются инвестиционными банками и хедж-фондами. Если вам нужны конкретные имена, не стесняйтесь отправлять мне электронную почту по адресу:mike@quantstart.comи я с радостью укажу вам в правильном направлении.

Любой хороший рекрутер будет обсуждать ваше прошлое с разумной степенью детализации, поскольку они ставят свою репутацию на карту, когда они рекомендуют вас на собеседование. Рекрутеры, как правило, не очень знакомы с техническими особенностями количественных технологий, и они не должны быть. Однако это означает, что им приходится больше полагаться на совпадение ключевых слов для фильтрации своего резюме / резюме. Убедитесь, что, если вы сильны с C ++, вы указываете навыки C + + - сильные и ссылки на STL, Boost и любые проекты C ++, над которыми вы работали, например. Не будьте скромны в отношении своих навыков, но также не преувеличивайте их. Если вы пишете что-либо в своем резюме / резюме, это справедливая игра, чтобы быть допрошенным об этом в техническом интервью!

Поскольку рынок труда (в 2013 году) в настоящее время не самый лучший (особенно на начальном уровне), вы можете обнаружить, что вам потребуется некоторое время, чтобы получить работу, которую вы ищете.


Больше