Selbststudiumsplan, um ein Quantitativer Entwickler zu werden

Schriftsteller:Gutes, Erstellt: 2019-02-12 09:08:19, aktualisiert:

Ich habe vor kurzem viele E-Mails von Personen erhalten, die Karriere wechseln möchten von Ingenieurwesen, Wissenschaft und IT. Quantitative Finanzen sind aufgrund der intellektuellen Herausforderung und der hohen Vergütung in letzter Zeit zu einem besonders attraktiven Bereich geworden. Eine Frage, die sich ständig in diesen E-Mails stellt, ist: "Was muss ich studieren, um einen Interviewer davon zu überzeugen, mir einen Job zu geben?" Dies ist der erste in einer dreiteiligen Serie, in der diskutiert wird, wie man einen Selbststudiumsplan erstellt, um einen Job in der quantitativen Finanzbranche zu bekommen. Dieser Beitrag wird diskutieren, wie man sich selbst studiert, um ein quantitativer Entwickler zu werden. Die anderen beiden konzentrieren sich auf quantitative Analysten und quantitative Trader.

Jede Karriere im Bereich der quantitativen Finanzen erfordert eher ein gewisses Maß an Verallgemeinerung als eine umfangreiche Spezialisierung. Quantitative Entwickler sind nicht anders. Sie müssen in ein Team aus Händlern, Finanzingenieuren und IT-Unterstützung passen, um Investmentbanken bei der Bewertung und dem Verkauf neuer strukturierter Anlageprodukte zu unterstützen oder Fonds bei der Entwicklung von Handelsinfrastrukturen und Portfoliomanagementsystemen zu unterstützen.

Wissenschaftliche Computer

Der häufigste Weg in die quantitative Entwicklung ist über einen akademischen Hintergrund in der wissenschaftlichen Informatik. Dies liegt daran, dass die für eine quant dev notwendigen Kernfähigkeiten erweiterte Programmierfähigkeiten und die Implementierung numerischer Algorithmen sind. Diese Fähigkeiten werden als Selbstverständlichkeit in einer Graduiertenschule für Physik oder Ingenieurwissenschaften entwickelt. Wenn dies Ihr Hintergrund ist, besteht Ihre Aufgabe darin, sich mit den spezifischen Produkten und numerischen Algorithmen vertraut zu machen, die in der quantitativen Finanzierung verwendet werden, da Ihre allgemeinen Implementierungs- und Programmierfähigkeiten wahrscheinlich ausreichend entwickelt sind.

Wenn Sie jedoch keinen Hintergrund in der wissenschaftlichen Informatik haben, gibt es immer noch viele Möglichkeiten, ein quantitativer Entwickler zu werden, der einen Hintergrund in der Programmierung nutzt.

Programmierkenntnisse

In erster Linie ist ein quantitativer Entwickler ein Softwareentwickler. Die Rolle wird daher fast ausschließlich auf 100% Programmierung basieren. Sie werden feststellen, dass Sie Handelsprototypen optimieren oder eine Handelsinfrastruktur von Grund auf entwickeln. Wenn Sie Bankrollen anstreben, müssen Sie wahrscheinlich C ++, Java oder C # in einer Microsoft / Windows-Umgebung verwenden. Wenn Sie Hedgefonds anstreben, dann werden Sie wahrscheinlich MatLab oder R in C ++ und / oder Python übersetzen. Fonds neigen dazu, Java und C # weniger zu verwenden, da sie oft in einer UNIX-Umgebung, in der C ++ und Python sinnvoller sind. Wenn Sie einen Hintergrund in einer dieser Programmierumgebungen haben, ist es sinnvoll, Ihre Stärken zu erkennen und an der Software zu bleiben, die Sie gut kennen. Wenn Sie Java zum Beispiel kennen, wäre es ratsam, Investment Banking-Rollen zu zielen.

Angenommen, Sie sind ein kompetenter Programmierer und sind glücklich, auf die in der Finanzindustrie am häufigsten verwendete Software zu wechseln, dann würde ich vorschlagen, C++ und Python extrem gut zu lernen, da dies Ihnen die meisten Querschnittsfähigkeiten in verschiedenen Bereichen der Industrie bietet.

Lesen Sie die gesamte Beschleunigte C++ von Andrew Koenig durch. Dieses Buch wird Sie auf die C++-Syntax auf den Grund bringen und insbesondere auf Zeiger und Speicherverwaltung eingehen. Dies ist ein Bereich, mit dem viele Programmierer (einschließlich von Java und C#) nicht so vertraut sind. Es ist am besten, die Beispiele entweder mit Microsoft Visual Studio oder dem GCC-Compiler auf Linux/UNIX zu lesen, um die Syntax zu üben, anstatt sie nur zu lesen! Lesen Sie (mehrmals!) das gesamte Buch Effective C++ von Scott Meyers durch. Ich habe diesen Rat konsequent auf der ganzen Website wiederholt, aber es lohnt sich immer noch zu sagen. Dieses Buch führt Sie von einem Anfänger C++-Programmierer zu einem mittleren Programmierer, der bereit für ein Interview ist. Dieses Buch ist schwieriger, tatsächlich vor dem Terminal zu üben, da Meyers einige komplizierte Beispiele aufstellt. Eine Möglichkeit, dieses Buch durchzuführen, wäre zu bestimmen, wo in Ihren eigenen Projekten Sie die Muster anwenden können. Wenn Sie sich direkt für C++-Jobs bewerben, möchten Sie wahrscheinlich über diese beiden Arbeiten hinausgehen. Scott Meyers hat auch mehr effektives C++ und effektives STL geschrieben. Das gleiche gilt für Python:

Wenn Sie bereits ein erfahrener C++/Java/C#-Programmierer sind, dann lesen Sie bestimmte Abschnitte von Learning Python von Mark Lutz durch. Insbesondere schauen Sie sich die Kapitel 4-9 an, in denen Pythons in Typen aufgebaut sind. In den Kapiteln 10-13 wird die Syntax von Pythons für Verzweigungen und Schleifen diskutiert, so dass sie auch leicht zu lesen sind, um die Syntax zu bestimmen. Es lohnt sich jedoch, viel Zeit in den Kapiteln 14-20 zu verbringen, da sie Python-spezifische Funktionen wie Iterationen/Verstehungen und erweiterte Funktionsnutzung diskutieren. Die Abschnitte V und VI behandeln Namespacing und objektorientiertes Programmieren und wie sich diese Konzepte in Python von einer Sprache wie C++/Java unterscheiden. Wenn Sie ein guter Python-Programmierer sein möchten, sollten Sie auch die verbleibenden Kapitel des Buches berücksichtigen. Mark Lutzs zweites Buch, Programming Python, befasst sich mit dem eigentlichen Erstellen von Anwendungen innerhalb von Python. Dies wird das gesamte Syntaxwissen, das Sie in dem ersten erworben haben, aufnehmen und Ihnen erlauben, robuste Anwendungen zu erstellen. Dies wird Ihnen helfen, ein viel besserer Python-Softwareingenieur zu werden. Für diejenigen, die sich definitiv für die quantitative Handelsseite der Branche interessieren, ist es notwendig zu lernen, wie man Datenanalysen in Python durchführt. Dies ist eine Fähigkeit, die oft in der Graduiertenschule aufgenommen wird, aber Python for Data Analysis von Wes McKinney deckt einige der neueren verfügbaren Bibliotheken wie SciPy und Pandas schön ab. Nachdem Sie den obigen Plan befolgt haben, sollten Sie bei jedem C ++ oder Python-Interview eine gute Chance haben. Um Ihre Entwicklerfähigkeiten zu festigen, müssen Sie sich jedoch einiger der jüngsten Innovationen im Software-Engineering bewusst sein, die nur auf dem Arbeitsplatz herausgefunden werden, aber sicherlich zu Hause in Ihrer Freizeit studiert und praktiziert werden können.

Softwareentwicklung

Um ein guter Interviewkandidat für eine Position als Quantentwickler zu sein, muss man sowohl ein guter Programmierer als auch ein guter Softwareentwickler werden. Viele können das erstere aus Lehrbüchern und Praxis lernen. Letzteres kann jedoch nur durch die Arbeit an größeren Softwareprojekten, in der Regel mit anderen Entwicklern, gelernt werden. Dies bedeutet jedoch nicht, dass es nicht in ein Heimstudium integriert werden kann! Zum Beispiel ist es jetzt einfach, über das Internet an Open Source-Softwareprojekten beizutragen.

QuantLib

Das Lesen (einiger) des Quellcodes dieses Projekts gibt Ihnen eine gute Vorstellung davon, wie groß angelegte C++-Softwareprojekte geschrieben werden.

Um ein guter Softwareentwickler zu werden, ist es notwendig, zu verstehen, wie man groß angelegte Softwareprojekte erstellt.Für die moderne Softwareentwicklung erfordert dies die Verwendung von Versionskontrolle, kontinuierlicher Integrationund anderer agiler Praktiken.Hier ist ein Studienplan, der Ihnen hilft, diese Konzepte zu verstehen:

Lesen Sie sowohl Steve McConnell's Code Complete als auch Robert Martin's Clean Code durch. Beide Bücher werden Sie dazu bringen, ernsthaft zu überdenken, wie Sie Software entwerfen, von den ersten Prinzipien aus. Zum Beispiel - wie viel Zeit verbringen Sie im Voraus mit der Gestaltung Ihrer Software, bevor Sie die Tastatur berühren? Beide Bücher werden Ihnen Stunden verschwendeter Codeentwicklung ersparen. Ich würde vorschlagen, so schnell wie möglich viele der Tipps in diesen Büchern auf Ihre Projekte anzuwenden, um schlechte Gewohnheiten zu beseitigen. Sie sind auch großartig, um bei einem Interview zu diskutieren, da Sie unweigerlich gebeten werden, etwas Code zu schreiben. Eine Diskussion über gutes Software-Handwerk wäre nicht vollständig, wenn wir Design Patterns, auch bekannt als das Gang Of Four Buch, nicht erwähnen würden. Dieses Buch ist für eine Sprache wie C++ sehr relevant, allerdings weniger für eine Skriptsprache wie Python. Sie werden wahrscheinlich feststellen, dass Sie ähnliche Designs in Ihrem Code verwenden. Dieses Buch hilft Ihnen festzustellen, wann und wo sie angewendet werden sollten. Ein Vorteil ist, dass andere gute Entwickler sich dessen bewusst sind - was Sie bei Ihrer Entwicklungsgemeinschaft beliebter macht. Bei der Arbeit an groß angelegten Softwareprojekten mit mehreren Teammitgliedern ist es eine absolute Notwendigkeit, Versionskontrollsoftware zu verwenden. Automatisches Revidieren, Rollback, Verzweigung / Verschmelzen und eine bessere Testfähigkeit bedeuten, dass Versionskontrollen in fast allen (guten) Software-Institutionen allgegenwärtig sind. Die beiden großen Konkurrenten sind Git und Subversion (SVN). Ich würde vorschlagen, nur mit Git vertraut zu werden, da SVN ähnlich ist (wenn auch etwas schwieriger zu verwenden!) und die meisten Institutionen ihre SVN-Repositories durch Git-Äquivalente ersetzen. Es gibt ein kostenloses eBook zum Erlernen von Git, Git Pro, das ich vorschlage, dass Sie sich durcharbeiten. Es spart Ihnen Stunden verschwendete Entwicklungszeit! Einige Branchen wenden sich nun an kontinuierliche Integrationspraktiken, die die kontinuierliche Prüfung und Bereitstellung von Code über ein vollautomatisiertes Test- und Bereitstellungssystem fördern. Datenbank-Interaktion

Obwohl ein hervorragender Programmierer und ein hervorragender Softwareentwickler zu werden, die Voraussetzungen für eine Interviewstellung sind, werden Sie auch Fragen in Bezug auf Datenspeicherung und Analyse gestellt. Eine der wichtigsten Komponenten im Alltag eines Quant-Entwicklers ist die Interaktion mit Datenbanken. Somit ist ein gewisses Maß an Reife bei der Datenbankverarbeitung zu erwarten. Wenn Sie noch nie ein Datenspeichersystem verwendet haben, dann ist der beste Weg, um zu beginnen, mit dem Verständnis von Relational Database Management Systems (RDBMS) und ihrer Sprache zu beginnen - Structured Query Language (SQL).

Der beste Weg, um über RDBMS zu lernen, besteht darin, eine Open-Source-Version zu installieren (da Sie sie kostenlos herunterladen können!) und der folgenden Leseliste zu folgen. Es ist außerhalb des Umfangs dieses Artikels, Ihnen beizubringen, wie Sie ein RDBMS installieren, aber Sie können MySQL ausprobieren, da dies eine sehr verbreitete Datenbank innerhalb von Hedgefonds ist. SQL Server und Oracle sind eher im Bankwesen verbreitet. Sobald Sie eine Datenbank wie MySQL installiert haben, verwenden Sie die folgenden Anleitungen, um Ihnen zu helfen, Speicherung und Zugriff auf Daten zu verstehen:

Wenn Sie nicht mit SQL vertraut sind, dann ist das OReilly Buch Learning SQL von Alan Beaulieu ein guter Anfang. Es deckt alle Anfänger- und Zwischen SQL ab, die Sie kennen müssen, um Daten zu speichern, aufzurufen und Berichte bereitzustellen. Es wird auch die Datenbankoptimierung kurz diskutieren. Stellen Sie sicher, dass Sie das gesamte Buch lesen, da das gesamte Material für alltägliche quant dev Datenbankpflichten relevant ist. Für spezifische Datenbank-Aufgaben möchten Sie sich das OReilly SQL Cookbook ansehen. Ich fand dieses Buch unglaublich nützlich, als ich ein Developer war, da ich es ständig vom Regal zog, um ein bestimmtes Datum/Zeit oder eine Berichterstattungsabfrage aufzusuchen! Obwohl Quant-Entwickler nicht oft Datenbank-Administratoren sind, wenn Sie mehr über die erweiterte MySQL-Optimierung erfahren möchten, dann sind die folgenden beiden Bücher, obwohl sicherlich nicht notwendig, sehr nützlich, wenn Sie Datenbankprobleme haben: High Performance MySQL und MySQL High Availability. Finanzen und numerische Algorithmen

Da ein quantitativer Entwickler in den Finanzmärkten arbeitet, ist es nützlich, ein relativ gutes Verständnis für die Produkte zu haben, die Banken produzieren oder die Instrumente, mit denen Fonds gehandelt werden. Daher ist es notwendig, sich (weit) mit den Aktien-, Devisen-, Anleihemärkten, Rohstoffen und verwandten Derivatemärkten vertraut zu machen.

Wichtiger sind die Algorithmen, die in der quantitativen Finanzwissenschaft zur Durchführung von Instrumentenpreisen und algorithmischem Handel verwendet werden. Die Preisgestaltungstechniken der Investmentbanken werden sich mit ziemlicher Sicherheit auf die Monte-Carlo-Methode und die Finite-Differenz-Methode konzentrieren, die beide auf Kenntnissen von Wahrscheinlichkeiten, Statistiken, numerischer Analyse und partiellen Differentialgleichungen beruhen.

Für Hedgefonds werden Sie wahrscheinlich eine Handelsinfrastruktur implementieren - entweder mit niedriger oder hoher Frequenz. Dies beinhaltet einen Algorithmus, der bereits in MatLab, R oder Python (oder sogar C++) codiert ist, und ihn dann in einer schnelleren Sprache wie C++ optimieren, sowie diesen Algorithmus an eine Prime-Brokerage-Anwendungsprogrammierschnittstelle (API) anschließen und Trades ausführen. Die hier erforderlichen Fähigkeiten sind ziemlich unterschiedlich. Sie müssen in der Lage sein, Daten aus verschiedenen Quellen zusammenzuziehen, in den richtigen Kontext zu bringen, schnell zu iterieren und dann On-Demand-Berichte entweder im festen Format (PDF), über das Web oder als API selbst zu generieren. Diese Fähigkeiten sind schwer aus Büchern direkt zu lernen und erfordern ein paar Jahre Erfahrung in der Softwareentwicklung.

Um mehr über diese Themen zu erfahren, lesen Sie bitte meine Artikel über C++ Implementierung, meine Artikel über Python Implementierung und die Quantitative Finance Reading List.

Bewerbungen für Jobs

Obwohl die obige Liste wie eine umfangreiche Menge an zu studierendem Material aussieht, ist dies nur für jemanden, der völlig neu in der Programmierung ist, der Fall. Es ist unwahrscheinlich, dass eine quantitative Entwicklerposition für eine solche Person geeignet wäre und ich nehme an, dass Ihr eigener Hintergrund in der Programmierung oder den Physikalischen Wissenschaften liegt. Achten Sie darauf, nur die Abschnitte zu lesen, die Sie für relevant halten Ihre eigene Situation, da Sie sonst leicht ein paar Jahre Ihrer Freizeit damit verbringen könnten, das oben genannte Material zu lernen!

Sobald Sie glauben, dass Sie für ein Interview bereit sind, müssen Sie mit der Kontaktaufnahme mit quantitativen Personalvermittlern beginnen. Es gibt spezialisierte Firmen, die sich mit Investmentbanken und Hedgefonds befassen. Wenn Sie spezifische Namen benötigen, dann können Sie mir per E-Mail anmike@quantstart.comUnd ich werde dich gerne in die richtige Richtung führen.

Jeder gute Personalvermittler wird Ihren Hintergrund in angemessenem Detail diskutieren, da er seinen Ruf aufs Spiel setzt, wenn er Sie für ein Interview empfiehlt. Personalvermittler sind im Allgemeinen nicht sehr vertraut mit den Techniken der quantitativen Technologie und müssen es auch nicht sein. Dies bedeutet jedoch, dass sie sich mehr auf Buzzword-Matching für ihr eigenes CV/Lebenslauf-Filtern verlassen müssen. Stellen Sie sicher, dass Sie, wenn Sie mit C++ stark sind, C++-Fähigkeiten angeben - strong und beziehen Sie sich beispielsweise auf STL, Boost und alle C++-Projekte, an denen Sie gearbeitet haben. Seien Sie nicht bescheiden über Ihre Fähigkeiten, aber übertreiben Sie sie auch nicht. Wenn Sie etwas auf Ihrem CV/Lebenslauf schreiben, ist es ein faires Spiel, in einem technischen Interview darüber gefragt zu werden!

Da der Arbeitsmarkt (im Jahr 2013) derzeit nicht der beste ist (insbesondere für Einsteiger), kann es für Sie eine Weile dauern, bis Sie den Job finden, den Sie suchen.Der Trick besteht darin, sich ständig zu bemühen, denn bei jedem Vorstellungsgespräch, an dem Sie teilnehmen, erhalten Sie mehr Wissen darüber, wonach die Personalvermittler und Interviewer suchen, und können so Ihr Studium darauf ausrichten.


Mehr