Kế hoạch tự học để trở thành một nhà phát triển định lượng

Tác giả:Tốt, Tạo: 2019-02-12 09:08:19, Cập nhật:

Tôi gần đây đã nhận được nhiều email từ những cá nhân muốn thay đổi nghề nghiệp từ kỹ thuật, học thuật và CNTT. Tài chính định lượng đã trở thành một lĩnh vực đặc biệt hấp dẫn gần đây do thách thức trí tuệ và lương cao. Một câu hỏi liên tục xuất hiện trong các email này là tôi cần học để thuyết phục một người phỏng vấn đưa cho tôi một công việc?. Đây là phần đầu tiên trong một loạt ba phần sẽ thảo luận về cách hình thành một kế hoạch tự học để có được một công việc trong ngành tài chính định lượng. Bài đăng này sẽ thảo luận về cách tự học để trở thành một nhà phát triển định lượng. Hai phần còn lại sẽ tập trung vào các nhà phân tích định lượng và các nhà giao dịch định lượng.

Bất kỳ sự nghiệp nào trong tài chính định lượng đều đòi hỏi một mức độ khái quát hóa hơn là chuyên môn hóa rộng rãi. Các nhà phát triển định lượng cũng không khác. Họ phải phù hợp với một nhóm các nhà giao dịch, kỹ sư tài chính và hỗ trợ CNTT để giúp các ngân hàng đầu tư định giá và bán các sản phẩm đầu tư có cấu trúc mới hoặc giúp các quỹ phát triển cơ sở hạ tầng giao dịch và hệ thống quản lý danh mục đầu tư.

Máy tính khoa học

Cách phổ biến nhất để phát triển định lượng là thông qua một nền tảng học thuật trong máy tính khoa học. Điều này là bởi vì các kỹ năng cốt lõi cần thiết cho một quant dev là các kỹ năng lập trình tiên tiến và thực hiện thuật toán số. Những kỹ năng này được phát triển như một vấn đề tự nhiên trong một môi trường nghiên cứu đại học cho các khoa học vật lý hoặc kỹ thuật. Nếu đây là nền tảng của bạn thì nhiệm vụ của bạn sẽ là nắm bắt các sản phẩm cụ thể và thuật toán số được sử dụng trong tài chính định lượng, vì việc thực hiện và kỹ năng lập trình chung của bạn có thể được phát triển đầy đủ.

Tuy nhiên, nếu nền tảng của bạn không phải là máy tính khoa học, vẫn còn nhiều cơ hội để trở thành một nhà phát triển định lượng tận dụng nền tảng lập trình.

Kỹ năng lập trình

Đầu tiên và quan trọng nhất, một nhà phát triển định lượng là một nhà phát triển phần mềm. Do đó, vai trò này sẽ gần như hoàn toàn dựa trên lập trình 100%. Bạn sẽ thấy mình tối ưu hóa các nguyên mẫu giao dịch hoặc phát triển cơ sở hạ tầng giao dịch từ đầu. Nếu bạn nhắm mục tiêu các vai trò ngân hàng, thì có thể bạn sẽ cần phải sử dụng C ++, Java hoặc C # trong môi trường Microsoft / Windows. Nếu bạn nhắm mục tiêu các quỹ phòng hộ, thì có thể bạn sẽ dịch MatLab hoặc R sang C ++ và / hoặc Python. Các quỹ có xu hướng sử dụng Java và C # ít hơn, vì chúng thường ở trong môi trường UNIX nơi C ++ và Python có ý nghĩa hơn. Nếu bạn có nền tảng trong một trong hai môi trường lập trình này, có ý nghĩa để xác định điểm mạnh của bạn và gắn bó với phần mềm bạn biết rõ. Vì vậy, nếu bạn biết Java, ví dụ, sẽ khôn ngoan nếu bạn nhắm mục tiêu các vai trò ngân hàng đầu tư. Tôi đã viết một bài báo về các ngôn ngữ lập trình định lượng nếu bạn muốn chi tiết hơn.

Giả sử bạn là một lập trình viên có năng lực và hạnh phúc thay đổi sang phần mềm được sử dụng rộng rãi nhất trong ngành tài chính, thì tôi sẽ đề nghị học C ++ và Python cực kỳ tốt, vì điều đó mang lại cho bạn khả năng cắt ngang nhất trên các lĩnh vực khác nhau của ngành công nghiệp.

Đọc toàn bộ Accelerated C++ của Andrew Koenig. Cuốn sách này sẽ giúp bạn bắt đầu từ đầu về cú pháp C++ và, đặc biệt, sẽ đi sâu vào chi tiết về trỏ và quản lý bộ nhớ. Đây là một lĩnh vực mà nhiều lập trình viên (bao gồm cả những người có nền tảng Java và C#) sẽ không quen thuộc. Tốt nhất là đọc qua trong khi thực hiện các ví dụ, hoặc với Microsoft Visual Studio hoặc trình biên dịch GCC trên Linux / UNIX, để thực hành cú pháp, thay vì chỉ đọc nó! Đọc qua (nhiều lần!) toàn bộ hiệu quả C ++ của Scott Meyers. Tôi đã lặp lại lời khuyên này liên tục trên toàn trang web, nhưng nó vẫn phải nói lại. Cuốn sách này sẽ đưa bạn từ một lập trình viên C ++ mới bắt đầu đến một lập trình viên trung gian đã sẵn sàng cho cuộc phỏng vấn. Cuốn sách này thực sự khó thực hành trước thiết bị đầu cuối, vì Meyers thiết lập một số ví dụ phức tạp. Một cách để chạy qua cuốn sách này là xác định nơi trong các dự án của riêng bạn bạn có thể áp dụng các mẫu. Nếu bạn đang nộp đơn trực tiếp cho các công việc C ++, bạn có thể muốn vượt ra ngoài hai công việc này. Scott Meyers cũng đã viết More Effective C ++ và Effective STL. Sau đó bạn sẽ cần phải xem xét thư viện Boost, lập trình đa luồng và các nguyên tắc cơ bản của hệ điều hành Linux để trở thành một chuyên gia thực sự. Tương tự với Python:

Nếu bạn đã là một lập trình viên C ++ / Java / C # có kỹ năng, thì hãy đọc qua một số phần của Học Python của Mark Lutz. Đặc biệt, hãy xem qua các chương 4-9, thảo luận về Python được xây dựng trong các loại. Các chương 10-13 thảo luận về cú pháp Python cho nhánh và vòng lặp, vì vậy chúng cũng có thể được đọc nhẹ để xác định cú pháp. Tuy nhiên, bạn nên dành thời gian đáng kể cho các chương 14-20, vì chúng thảo luận về các tính năng cụ thể của Python như lặp lại / hiểu biết và sử dụng chức năng nâng cao. Phần V và VI bao gồm không gian tên và lập trình hướng đối tượng, và cách các khái niệm này khác nhau trong Python so với một ngôn ngữ như C ++ / Java. Nếu bạn muốn trở thành một lập trình viên Python trung gian tốt, thì bạn cũng nên xem xét các chương còn lại trong cuốn sách. Cuốn sách thứ hai của Mark Lutz, Programming Python, là về việc thực sự xây dựng các ứng dụng trong Python. Điều này sẽ lấy tất cả kiến thức cú pháp thu được trong cuốn đầu tiên và cho phép bạn bắt đầu xây dựng các ứng dụng mạnh mẽ. Điều này sẽ giúp bạn trở thành một kỹ sư phần mềm Python tốt hơn nhiều. Đối với những người chắc chắn quan tâm đến khía cạnh giao dịch định lượng của ngành công nghiệp, sẽ cần phải học cách thực hiện phân tích dữ liệu trong Python. Đây là một kỹ năng thường được chọn trong khi học đại học, nhưng Python cho phân tích dữ liệu của Wes McKinney bao gồm một số thư viện mới có sẵn như SciPy và panda. Tuy nhiên, để củng cố kỹ năng phát triển của bạn, bạn cần phải nhận thức được một số đổi mới gần đây trong kỹ thuật phần mềm, mà chỉ có xu hướng được tìm ra trên công việc, nhưng chắc chắn có thể được nghiên cứu và thực hành ở nhà trong thời gian rảnh rỗi của bạn.

Kỹ thuật phần mềm

Để trở thành một ứng viên phỏng vấn tốt cho vị trí nhà phát triển lượng tử đòi hỏi bạn phải trở thành một lập trình viên tốt và một nhà phát triển phần mềm tốt. Nhiều người có thể học cái đầu tiên từ sách giáo khoa và thực hành. Tuy nhiên, cái sau chỉ có thể được học từ việc làm việc trên các dự án phần mềm lớn hơn, thường là với các nhà phát triển khác. Tuy nhiên, điều này không có nghĩa là nó không thể được kết hợp vào một chương trình học tập tại nhà! Ví dụ, bây giờ rất dễ dàng đóng góp vào các dự án phần mềm nguồn mở thông qua internet.

QuantLib

Đọc qua (một số) mã nguồn cho dự án này sẽ cho bạn một ý tưởng tốt về cách viết các dự án phần mềm C ++ quy mô lớn.

Để trở thành một nhà phát triển phần mềm tốt, bạn cần phải hiểu làm thế nào để tạo ra các dự án phần mềm quy mô lớn. Đối với phát triển phần mềm hiện đại, điều này đòi hỏi sử dụng kiểm soát phiên bản, tích hợp liên tục và các thực tiễn nhanh nhẹn khác. Dưới đây là một kế hoạch nghiên cứu để giúp bạn nắm bắt các khái niệm này:

Đọc qua cả Steve McConnell's Code Complete và Robert Martin's Clean Code. Cả hai cuốn sách này sẽ khiến bạn phải suy nghĩ lại nghiêm túc về cách bạn thiết kế phần mềm, từ các nguyên tắc ban đầu. Ví dụ - bạn dành bao nhiêu thời gian để thiết kế phần mềm trước khi chạm vào bàn phím? Cả hai cuốn sách này sẽ giúp bạn tiết kiệm nhiều giờ phát triển mã lãng phí. Tôi khuyên bạn nên áp dụng càng nhiều mẹo trong các cuốn sách này cho các dự án của mình càng sớm càng tốt để loại bỏ bất kỳ thói quen xấu nào. Chúng cũng rất tốt để thảo luận tại cuộc phỏng vấn, vì bạn sẽ luôn được yêu cầu viết một số mã. Một cuộc thảo luận về kỹ thuật phần mềm tốt sẽ không hoàn chỉnh nếu không đề cập đến Design Patterns, còn được gọi là cuốn sách Gang Of Four. Cuốn sách này rất phù hợp với một ngôn ngữ như C++, mặc dù ít hơn đối với một ngôn ngữ kịch bản như Python. Bạn có thể nhận thấy rằng bạn đang sử dụng các thiết kế tương tự trong mã của mình. Cuốn sách này giúp bạn xác định khi nào và ở đâu chúng nên được áp dụng. Một lợi ích là các nhà phát triển tốt khác sẽ nhận thức được chúng - làm cho bạn trở nên phổ biến hơn trong nhóm đồng nghiệp phát triển của bạn. Khi làm việc trên các dự án phần mềm quy mô lớn với nhiều thành viên trong nhóm, việc sử dụng phần mềm kiểm soát phiên bản là một điều cần thiết tuyệt đối. Việc sửa đổi tự động, khôi phục, phân nhánh / hợp nhất và khả năng kiểm tra tốt hơn có nghĩa là kiểm soát phiên bản phổ biến ở hầu hết các tổ chức phần mềm (tốt). Hai đối thủ lớn là Git và Subversion (SVN). Tôi khuyên bạn nên chỉ làm quen với Git vì SVN tương tự (nếu sử dụng khó hơn một chút!) và hầu hết các tổ chức đang thay thế kho lưu trữ SVN của họ bằng các tương đương Git. Có một cuốn sách điện tử miễn phí về việc học Git, Git Pro, mà tôi khuyên bạn nên làm việc theo cách của mình. Nó sẽ giúp bạn tiết kiệm nhiều giờ thời gian phát triển lãng phí! Một số ngành công nghiệp hiện đang chuyển sang thực tiễn tích hợp liên tục, khuyến khích kiểm tra liên tục và triển khai mã thông qua một hệ thống kiểm tra và triển khai hoàn toàn tự động. Tương tác cơ sở dữ liệu

Mặc dù trở thành một lập trình viên xuất sắc và một nhà phát triển phần mềm xuất sắc là những điều kiện tiên quyết để có được một vị trí phỏng vấn, bạn cũng sẽ được hỏi các vấn đề liên quan đến lưu trữ và phân tích dữ liệu. Một trong những thành phần quan trọng trong cuộc sống hàng ngày của một nhà phát triển lượng tử là tương tác với cơ sở dữ liệu. Do đó, một mức độ trưởng thành nhất định với việc xử lý cơ sở dữ liệu được mong đợi. Nếu bạn chưa bao giờ sử dụng một hệ thống lưu trữ dữ liệu, thì cách tốt nhất để bắt đầu là bắt đầu hiểu Hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS) và ngôn ngữ của họ - Ngôn ngữ truy vấn cấu trúc (SQL).

Cách tốt nhất để bắt đầu tìm hiểu về RDBMS là cài đặt một phiên bản nguồn mở (vì bạn có thể tải xuống miễn phí!) và làm theo danh sách đọc bên dưới. Nó vượt ra ngoài phạm vi của bài viết này để dạy bạn cách cài đặt RDBMS, nhưng bạn có thể thử MySQL, vì đây là một cơ sở dữ liệu rất phổ biến trong các quỹ phòng hộ. SQL Server và Oracle có nhiều khả năng phổ biến trong ngân hàng. Một khi bạn đã cài đặt một cơ sở dữ liệu như MySQL, hãy sử dụng các hướng dẫn sau đây để giúp bạn hiểu lưu trữ và truy cập dữ liệu:

Nếu bạn không quen thuộc với SQL thì cuốn sách OReilly Learning SQL của Alan Beaulieu là một khởi đầu tuyệt vời. Nó bao gồm tất cả các SQL mới bắt đầu và trung gian mà bạn sẽ cần phải biết để lưu trữ, truy cập và cung cấp báo cáo cho dữ liệu. Nó cũng sẽ thảo luận về tối ưu hóa cơ sở dữ liệu một cách ngắn gọn. Hãy chắc chắn rằng bạn đọc toàn bộ cuốn sách vì tất cả các tài liệu đều có liên quan đến các nhiệm vụ cơ sở dữ liệu lượng hàng ngày. Đối với các nhiệm vụ cơ sở dữ liệu cụ thể, bạn sẽ muốn xem OReilly SQL Cookbook. Tôi thấy cuốn sách này vô cùng hữu ích khi tôi là một dev, vì tôi liên tục kéo nó ra khỏi kệ để tìm kiếm một ngày / thời gian hoặc truy vấn báo cáo nhất định! Mặc dù các nhà phát triển lượng không thường là quản trị viên cơ sở dữ liệu, nhưng nếu bạn muốn tìm hiểu thêm về tối ưu hóa MySQL tiên tiến, thì hai cuốn sách sau đây, mặc dù chắc chắn không cần thiết, rất hữu ích nếu bạn gặp vấn đề cơ sở dữ liệu: MySQL hiệu suất cao và MySQL khả dụng cao. Tài chính và thuật toán số

Vì một nhà phát triển định lượng làm việc trong thị trường tài chính, nó hữu ích để có một sự hiểu biết tương đối tốt về các sản phẩm mà các ngân hàng sản xuất hoặc các công cụ mà các quỹ sẽ được giao dịch. Do đó, bạn sẽ cần phải làm quen với chính mình (khá rộng) với chứng khoán, ngoại hối, thu nhập cố định, hàng hóa và các thị trường phái sinh liên quan. Đặc biệt, bạn muốn liên tục suy nghĩ về cách dữ liệu này được đại diện, lưu trữ và truy cập như một phần lớn công việc của một nhà phát triển định lượng là cung cấp lưu trữ và truy cập dữ liệu tài chính. Một khi vào công việc, bạn gần như chắc chắn sẽ tập trung vào một lĩnh vực cụ thể sâu sắc, vì vậy hãy đảm bảo nghiên cứu ban đầu của bạn khá rộng.

Có liên quan hơn là các thuật toán được sử dụng trong tài chính định lượng để thực hiện cả định giá công cụ và giao dịch thuật toán. Các kỹ thuật định giá phái sinh ngân hàng đầu tư gần như chắc chắn sẽ tập trung vào Phương pháp Monte Carlo và Phương pháp khác biệt hữu hạn, cả hai đều dựa trên kiến thức về xác suất, thống kê, phân tích số và phương trình vi phân.

Đối với quỹ phòng hộ, bạn có thể sẽ thực hiện cơ sở hạ tầng giao dịch - tần suất thấp hoặc cao. Điều này sẽ liên quan đến việc lấy một thuật toán đã được mã hóa trong MatLab, R hoặc Python (hoặc thậm chí C ++) và sau đó tối ưu hóa nó bằng ngôn ngữ nhanh hơn, chẳng hạn như C ++, cũng như kết nối thuật toán này với giao diện lập trình ứng dụng môi giới chính (API) và thực hiện giao dịch. Các kỹ năng cần thiết ở đây khá khác nhau. Bạn sẽ cần có thể thu thập dữ liệu từ các nguồn khác nhau, đưa nó vào ngữ cảnh chính xác, lặp lại nhanh chóng và sau đó tạo báo cáo theo yêu cầu hoặc ở định dạng cố định (PDF), qua web hoặc như một API. Những kỹ năng này khó học trực tiếp từ sách và đòi hỏi một vài năm kinh nghiệm phát triển phần mềm trong ngành công nghệ.

Để đọc thêm về các chủ đề này, vui lòng xem các bài viết về triển khai C ++, bài viết về triển khai Python và Danh sách đọc Tài chính định lượng.

Đơn xin việc làm

Mặc dù danh sách trên có vẻ như là một lượng lớn tài liệu để nghiên cứu, nhưng điều này sẽ chỉ xảy ra với một người hoàn toàn mới về lập trình. Không có khả năng vị trí nhà phát triển định lượng sẽ phù hợp với một cá nhân như vậy và tôi giả định rằng nền tảng của bạn sẽ là lập trình hoặc khoa học vật lý. Hãy chắc chắn đọc chỉ những phần bạn cho là có liên quan đến tình huống của riêng bạn, vì nếu không bạn có thể dễ dàng dành một vài năm thời gian rảnh của mình để học tài liệu trên!

Một khi bạn tin rằng bạn đã sẵn sàng cho cuộc phỏng vấn thì bạn sẽ cần phải bắt đầu quá trình liên hệ với các nhà tuyển dụng định lượng. Có các công ty chuyên về các ngân hàng đầu tư và quỹ phòng hộ. Nếu bạn cần tên cụ thể, thì hãy tự do gửi email cho tôi tạimike@quantstart.comvà tôi sẽ vui vẻ chỉ cho bạn đúng hướng.

Bất kỳ nhà tuyển dụng tốt nào cũng sẽ thảo luận về nền tảng của bạn với mức độ chi tiết hợp lý vì họ đang đặt danh tiếng của họ vào cuộc chơi khi họ đề xuất bạn cho một cuộc phỏng vấn. Các nhà tuyển dụng thường không rất quen thuộc với các chi tiết kỹ thuật của công nghệ định lượng và cũng không cần phải. Tuy nhiên, điều này có nghĩa là họ phải dựa nhiều hơn vào sự phù hợp từ khóa cho việc lọc CV / sơ yếu lý lịch của riêng họ. Hãy chắc chắn nếu bạn mạnh mẽ với C ++ rằng bạn nêu kỹ năng C ++ - mạnh mẽ và tham khảo STL, Boost và bất kỳ dự án C ++ nào bạn đã làm việc, ví dụ. Đừng khiêm tốn về kỹ năng của bạn, nhưng cũng đừng phóng đại chúng. Nếu bạn viết bất cứ điều gì trên CV / sơ yếu lý lịch của mình, nó là một trò chơi công bằng để được hỏi về nó trong một cuộc phỏng vấn kỹ thuật!

Vì thị trường việc làm (năm 2013) không phải là tốt nhất (đặc biệt là ở cấp độ bắt đầu) ngay bây giờ, bạn có thể thấy sẽ mất một thời gian để có được công việc bạn đang tìm kiếm.


Thêm nữa