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

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

(Tác giả: Mike – Nguồn: vfpress.vn)

224-ke-hoach-tu-hoc-de-tro-thanh-nha-phat-trien-dinh-luong-1

Tôi đã nhận được nhiều email từ những người làm việc trong các lãnh vực kỹ thuật, học thuật và CNTT muốn thay đổi công việc của mình. Tài chính định lượng đang trở thành một lãnh vực đặc biệt hấp dẫn do môi trường trí tuệ đầy thách thức và mức thu nhập cao. Một câu hỏi luôn được đặt ra trong các email là “tôi cần phải học những gì để có thể nhận được một công việc như vậy?”. Bài này là bài đầu tiên trong chuỗi ba bài viết về cách xây dựng một kế hoạch tự học để có thể nhận được một công việc trong ngành tài chính định lượng. Riêng về bài này sẽ đưa ra cách tự học để có thể trở thành một nhà phát triển định lượng. Hai phần còn lại sẽ viết về các vị trí nhà phân tích định lượng và nhà giao dịch định lượng.

Bất cứ một công việc nào trong lãnh vực tài chính định lượng đều đòi hỏi kiến thức rộng rãi, bao quát hơn là sự chuyên môn hóa. Vị trí phát triển định lượng cũng vậy. Ở một mức độ nào đó, họ phải biết thật nhiều kiến thức để phù hợp với một đội gồm các nhà giao dịch, các kỹ sư tài chính cũng như các chuyên viên hỗ trợ CNTT nhằm giúp các ngân hàng đầu tư định giá và bán các sản phẩm đầu tư cấu trúc hay giúp các quỹ phát triển cơ sở hạ tầng và các hệ thống quản lý danh mục đầu tư.

Tính toán khoa học (Scientific Computing)
Con đường phổ biến nhất để trở thành một nhà phát triển định lượng là dựa vào kiến thức nền tảng về tính toán khoa học. Bởi vì những kỹ năng tất yếu của một nhà phát triển định lượng là các kỹ năng về lập trình nâng cao và cài đặt các phương pháp tính toán số (numerical algorithm). Những kỹ năng này là nội dung học trong môi trường nghiên cứu sau đại học trong các ngành như Khoa học vật lý hay Kỹ thuật. Nếu đó đã là nền tảng của bạn rồi thì nhiệm vụ của bạn là nắm được về các sản phẩm riêng biệt và các thuật toán số sử dụng trong tài chính định lượng, đồng thời, phát triển các kỹ năng cài đặt và lập trình một cách đầy đủ.

Tuy nhiên, nếu nền tảng của bạn không phải là về tính toán khoa học, bạn vẫn có nhiều cơ hội để trở thành một nhà phát triển định lượng dựa vào nền tảng về lập trình. Ở phần sau tôi sẽ bàn về lập trình các thuật toán.

Các kỹ năng lập trình
Trước 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 đó, công việc của họ gần như 100% là dựa trên nền tảng lập trình. Bạn phải tối ưu các mã nguyên mẫu về giao dịch (trading prototype) hoặc xây dựng từ đầu cơ sở hạ tầng cho việc giao dịch. Nếu bạn muốn có một công việc trong ngân hàng, bạn cần phải sử dụng C++, Java hay C# trong môi trường Microsoft Windows. Nếu bạn muốn làm việc trong các quỹ đầu tư, bạn cần phải biết cách chuyển từ MatLab hay R sang C++ hay Python. Các quỹ có khuynh hướng ít sử dụng Java và C# vì họ thường làm việc trong môi trường UNIX vốn dùng nhiều C++ và Python. Nếu bạn có nền tảng ở một trong những môi trường lập trình trên, bạn nên phát triển kỹ năng của mình và gắn bó với những ngôn ngữ mình nắm vững. Do đó, nếu bạn biết dùng Java, bạn nên nhắm đến một công việc trong ngân hàng đầu tư. Tôi đã viết một bài về việc chọn các ngôn ngữ lập trình cho công việc phát triển định lượng, bạn có thể tham khảo thêm tại đây.

Giả sử bạn là một lập trình viên có năng lực và sẵn sang chuyển sang lập trình các ngôn ngữ được dùng nhiều nhất trong ngành tài chính, C++ và Python là 2 ngôn ngữ thích hợp nhất vì chúng mang đến cho bạn khả năng tiêu biểu qua các vị trí khác nhau trong ngành công nghiệp tài chính.Đây là kế hoạch tự học tôi nghĩ bạn nên theo để có thể trở thành một nhà lập trình C++ giỏi:

  • Đọc hết quyển Accelerated C++ của Andrew Koenig. Nó sẽ cho bạn một cái nhìn về cú pháp C++ và đi sâu vào chi tiết của con trỏ cũng như việc quản lý dữ liệu. Đây là một phần mà nhiều nhà lập trình (cả với Java lẫn C#) không nắm vững. Tốt nhất là vừa đọc vừa thực hành bằng Microsoft Visual Studio hay GCC trên Linux/UNIX để có thể rèn luyện cách sử dụng cú pháp, hơn là khi bạn chỉ đọc sách.
  • Đọc nhiều lần quyển sách Effective C++ của Scott Meyers. Đây là điều tôi luôn muốn nhắc. Quyển sách này sẽ biến bạn từ một lập trình viên C++ non tay thành một lập trình viên trung cấp, sẵn sàng cho buổi phỏng vấn phỏng vấn. Với quyển sách này, bạn sẽ khó thực hành hơn một chút vì nó chứa những ví dụ phức tạp của Meyers. Bạn có thể thông suốt quyển sách bằng cách xác định phần nào trong dự án của bạn có thể áp dụng các mẫu hướng đối tượng trong quyển sách.
  • Nếu bạn muốn tìm một công việc C++, gần như chắc chắn bạn sẽ phải đọc thêm nữa. Bạn có thể đọc 2 quyển sách khác của Scott Meyers là More Effective C++ và Effective STL. Bạn cần nghiên cứu thư viện Boost, lập trình đa luồng và kiến thức nền tảng về hệ điều hành Linux để có thể trở thành một chuyên gia thật thụ.

Tương tự với Python:
224-ke-hoach-tu-hoc-de-tro-thanh-nha-phat-trien-dinh-luong-2

  • Nếu bạn là một lập trình viên có kiến thức về C++/Java/C#, hãy xem qua vài phần trong quyển Learning Python của Mark Lutz. Nói rõ hơn, bạn nên đọc lướt qua các chương 4-9, vốn nói về các kiểu mẫu nội tại của Python. Các chương 10-13, vốn giới thiệu cú pháp của Python về câu điều kiện rẽ nhánh và vòng lặp, cũng nên được đọc sơ qua. Tuy nhiên, bạn nên dành nhiều thời gian cho các chương 14-20, vốn nói về các đặc trưng của Python như Iteration/Comprehension cũng như cách sử dụng hàm nâng cao. Phần V và VI sẽ đề cập đến namespacing, lập trình hướng đối tượng cũng như sự khác biệt của các khái niệm này trong Python với các ngôn ngữ như C++/Java. Nếu bạn muốn trở thánh một lập trình viên Python cấp trung lành nghề, bạn cũng nên xem các chương còn lại. Hãy nhớ rằng quyển sách này dày hơn 1000 trang nên bạn cần phải chọn ra những phần thích hợp với mình.
  • Quyển sách thứ 2 của Mark Lutz, Programming Python, hướng dẫn cách xây dựng ứng dụng bằng Python. Lúc này, bạn sẽ cần đến kiến thức về cú pháp trong quyển sách thứ nhất, chúng sẽ giúp bạn xây dựng các ứng dụng mạnh. Việc này sẽ giúp bạn trở thành một kỹ sư lập trình Python tốt hơn nhiều.
  • Với những ai xác định cho mình con đường giao dịch định lượng, việc biết cách phân tích dữ liệu trên Python là rất cần thiết. Đây lá một kỹ năng thường được giảng dạy ở bậc sau đại học, quyển sách Python for Data Analysis của McKinney chứa đựng một số thư viện mới như SciPy và pandas.

Nếu bảo đảm theo sát kế hoạch như trên, bạn sẽ có cơ hội rất tốt ở bất cứ buổi phỏng vấn C++/Python nào. Tuy nhiên, để phát triển các kỹ năng lập trình của mình, bạn nên tìm hiểu các tiến bộ gần đây trong kỹ thuật lập trình, vốn được xem là chỉ có thể học được trong quá trình làm việc, nhưng thật ra có thể được học và thực hành tại nhà vào lúc rãnh rỗi.

Kỹ thuật lập trình
Để có thể trở thành một ứng cử viên tốt cho vị trí phát triển định lượng, bạn phải vừa là một lập trình viên giỏi, vừa là một nhà phát triển phần mềm giỏi. Với vế đầu, bạn có học từ sách vở và thực hành. Còn vế sau chỉ có thể được học khi làm trong các dự án phần mềm lớn với các nhà phát triển khác. Tuy nhiên, điều này không có nghĩa là ta không thể đưa kỹ năng trên vào một qua trình tự học! Hiện tại, không khó để có thể tham gia vào các dự án phần mềm mã nguồn mở trên internet. Một trong những dự án tài chính định lượng là dự án QuantLib. Việc đọc qua một số mã nguồn của dự án này sẽ cho bạn thấy cách mà các dự án C++ lớn được viết.

Để trở thành một nhà phát triển phần mềm giỏi, bạn cần phải hiểu được cách thực hiện các dự án cỡ lớn. Với việc phát triển phần mềm ngày nay, điều này đòi hỏi việc sử dụng chức năng kiểm soát phiên bản, sự tích hợp liên tục và các chức năng linh hoạt khác.Đây là kế hoạch tự học để bạn có thể nắm được các vấn đề trên:

  • Đọc cả 2 quyển Code Complete của Steve McConnell và Clean Code của Robert Martin. Cả 2 quyển sách này đều sẽ khiến cho bạn xem xét lại một cách nghiêm túc về vấn đề thiết kế phần mềm, từ những thứ cơ bản nhất. Ví dụ, bạn dành bao nhiêu thời gian để thiết kế phần mềm trước khi bắt tay vào gõ những dòng lệnh đầu tiên? 2 quyển sách này sẽ giúp bạn tiết kiệm thời gian trong quá trình phát triển phần mềm. Bạn nên áp dụng thật nhiều thủ thuật trong quyển sách càng sớm càng tốt để tránh các thói quen xấu. Đây cũng là một lợi thế trong quá trình phỏng vấn, vốn lúc nào cũng đòi hỏi bạn phải viết một vài đoạn mã lệnh.
  • Kế hoạch học tập của bạn sẽ không hoàn chỉnh nếu không đề cập đến mẫu thiết kế hướng đối tượng (Design Patterns), cũng được biết với tên “Gang Of Four”. Quyển sách này rất thích hợp với các ngôn ngữ như C++,hơn là với các ngôn ngữ kịch bản như Python. Có thể bạn sẽ nhận ra mình đang sử dụng các thiết kế tương tự cho mã lệnh của mình. Quyển sách này sẽ giúp bạn xác định khi nào thì nên sử dụng các thiết kế cũng như sử dụng chúng ở đâu. Các nhà phát triển khác sẽ nhận ra các thiết kế này – điều này rất có lợi vì nó khiến các thiết kế của bạn trở phổ biến hơn trong nhóm phát triển. Sẽ rất khó cho những người tự học, do đó, hãy xem xét kỹ 2-3 thiết kế trong quyển sách như Factory, Decorator hay Singleton, đây là những thiết kế được sử dụng thường xuyên nhất.
  • Khi bạn làm việc trong những dự án phần mềm cỡ lớn với nhiều thành viên, việc sử dụng phần mềm kiểm soát phiên bản là cực kỳ quan trọng. Khả năng rà soát tự động, hủy bỏ, rẻ nhánh/kết hợp cũng như khả năng kiểm tra cao khiến cho việc kiểm soát phiên bản có ở khắp nơi trong hầu hết các công ty phần mềm tốt. 2 công cụ lớn có thể kể đến làGit và Subversion (SVN). Làm quen với Git hay SVN cũng tương tự nhau, hầu hết các công ty đều thay thế SVN bằng Git tương ứng. Có một ebook học Git miễn phí tên là Pro Git, bạn nên xem qua quyển sách này, nó sẽ giúp bạn tiết kiệm rất nhiều thời gian.
  • Hiện nay, một số tập đoàn đang chuyển qua quá trình tích hợp liên tục, vốn khuyến khích việc kiểm tra liên tục và việc triển khai code thông qua một hệ thống triển khai, kiểm tra tự động. Mặc dù bạn có thể nắm được cách hoạt động của một hệ thống CI thông qua quá trình làm việc, bạn vẫn có thể tạo ấn tượng trong buổi phỏng vấn bằng cách thể hiện kiến thức của mình về chủ đề này nhờ một quyển sách của Paul Duvall tên là Continous Integration.

Sự tương tác dữ liệu
Mặc dù việc là một lập trình viên, một nhà phát triển phần mềm xuất sắc là tiền đề quan trọng để vượt qua buổi phỏng vấn, bạn cũng cần tìm hiểu thêm về việc lưu trữ, phân tích dữ liệu. Mộ phần quan trọng trong công việc của một nhà phát triển định lượng ngày nay là tương tác với cơ sở dữ liệu. Do đó, sở hữu khả năng xử lý cơ sở dữ liệu là việc cần thiết. Nếu bạn chưa bao giờ sử dụng một hệ lưu trữ dữ liệu, thứ đầu tiên bạn nên tìm hiểu là Các Hệ Quản Lý Cơ Sở Dữ Liệu Quan Hệ (RDBMS) và ngôn ngữ của chúng – Ngôn Ngữ Truy Vấn (SQL). RDBMS thông dụng bao gồm Microsoft SQL Server, Oracle và MySQL. Các loại hệ lưu trữ dữ liệu khác thì có những hệ NoSQL, bao gồm MongoDB và Cassandra.

224-ke-hoach-tu-hoc-de-tro-thanh-nha-phat-trien-dinh-luong-3

Cách tốt nhất để bắt đầu học RDBMS là cài đặt một phiên bản mã nguồn mở (bạn có thể tải về miễn phí) và đọc các quyển sách phía dưới. Việc hướng dẫn cách cài đặt một RDBMS nằm ngoài phạm vi của bài này, nhưng bạn có thể thử dùng MySQL, một cơ sở dữ liệu rất phổ biến trong các quỹ đầu tư. SQL Server và Oracle thì thịnh hành trong các ngân hàng. Sau khi bạn cài đặt một hệ cơ sở dữ liệu như MySQL, hãy đọc những quyển sách sau để hiểu được sự lưu trữ và truy cập dữ liệu:

  • Nếu bạn không quen thuộc với SQL, quyển O’Reilly Learning SQL của Alan Beaulieu sẽ rất thích hợp. Nó bao gồm các kiến thức của SQL sơ cấp và trung cấp mà bạn cần để lưu trữ, truy cập cũng như cung cấp báo cáo về dữ liệu. Nó cũng có một phần ngắn gọn về việc tối ưu hóa cơ sở dữ liệu. Hãy đọc hết quyển sách này cũng như các tài liệu liên quan. Với một số công việc cụ thể về cơ sở dữ liệu, bạn nên xem quyển O’Reilly SQL Cookbook. Tôi nhận thấy quyển sách này rất hữu dụng từ những ngày còn làm công việc phát triển định lượng, tôi đã phải dùng đến nó rất nhiều. Bạn không cần đọc toàn bộ quyển sách, hãy xem qua mục lục để tìm những phần nào cần thiết cho mình nhất.
  • Dù các nhà phát triển định lượng thường không phải là nhà quản trị dữ liệu nhưng nếu bạn muốn tìm hiểu thêm về việc tối ưu hóa MySQL nâng cao, hãy đọc 2 quyển sách sau đây, dù không thật sự cần thiết nhưng chúng sẽ tỏ ra hữu dụng nếu bạn gặp phải các vấn đề về cơ sở dữ liệu: High Performance MySQL và MySQL High Availability.

Tài chính và các thuật toán số 
Bởi vì những nhà phát triển định lượng làm việc trong các thị trường tài chính, việc hiểu các sản phẩm mà ngân hàng đưa ra cũng như các công cụ được giao dịch ở các quỹ đầu tư là cần thiết. Do đó, bạn cần phải tìm hiểu về các thị trường vốn, thị trường ngoại hối, thị trường công cụ nợ thu nhập cố định (fixed income), thị trường hàng hóa và các thị trường phái sinh liên quan. Cụ thể hơn, bạn phải hiểu được cách dữ liệu được biểu diễn, lưu trữ và truy cập vì một phần quan trọng trong công việc của một nhà phát triển định lượng là cung cấp chức năng lưu trữ và truy cập dữ liệu tài chính. Khi đã là một nhà phát triển định lượng, bạn gần như chỉ tập trung sâu vào một lãnh vực riêng biệt nào đó, vậy hãy chắc rằng kiến thức ban đầu của mình đủ rộng để có thể thích nghi với điều đó.

Quan trọng hơn là các thuật toán được sử dụng trong tài chính định lượng trong cả việc định giá công cụ tài chính và giao dịch bằng thuật toán. Những ngân hàng đầu tư đưa ra các kỹ thuật định giá hầu như đều tập trung vào các phương pháp Monte Carlo và Sai Phân Hữu Hạn, cả 2 đều dựa trên kiến thức về xác suất, thống kê, giải tích số và phương trình đạo hàm riêng. Đây đều là những kiến thức học viên cao học có thể nắm vững, nhưng với những người chuyển qua từ ngành khác, việc tìm hiểu những phương pháp này là rất cần thiết nếu họ mong muốn trở thành một nhà phát triển định lượng chuyên định giá các quyền chọn trong ngân hàng.
224-ke-hoach-tu-hoc-de-tro-thanh-nha-phat-trien-dinh-luong-4

Mô phỏng Monte Carlo

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

Ứng tuyển vào vài công việc
Mặc dù danh sách trên có vẻ như là một danh sách bao quát nhưng thật ra đó là dành cho những người hoàn toàn mới trong lãnh vực lập trình. Vị trí phát triển định lượng có vẻ như không thích hợp cho một người như vậy. Tôi giả sử nền tảng thật sự của bạn là lập trình hoặc khoa học vật lý. Hãy chỉ đọc những phần nào thật sự phù hợp với hoàn cảnh của bạn, nếu không bạn sẽ phải dành vài năm để học hết những thứ trên!
Một khi bạn tin rằng mình đã sẵn sàng cho buổi phỏng vấn, hãy bắt đầu liên hệ với các nhà tuyển dụng. Có một số công ty đặc biệt chuyên tuyển dụng cho các ngân hàng đầu tư và quỹ đầu tư. Nếu bạn muốn có một cái tên cụ thể, hãy gửi thư cho tôi vào địa chỉ mike@quantstart.com , tôi sẵn sàng hướng dẫn bạn.

Những nhà tuyển dụng giỏi sẽ xem xét kiến thức của bạn rất kỹ bởi vì khi tiến cử bạn đến những buổi phỏng vấn, họ đã đặt uy tín công ty mình vào đó. Có thể họ không có kiến thức chuyên sâu về các vấn đề kỹ thuật định lượng, và họ cũng không cần phải có, nhưng điều đó có nghĩa là việc ra quyết định của họ sẽ dựa trên quá trình lọc CV nhiều hơn. Hãy chắc rằng nếu bạn giỏi về C++, hãy ghi vào “Kỹ năng C++ – tốt” và chỉ ra STL, Boost cũng như bất cứ dự án C++ nào bạn đã từng tham gia. Đừng tỏ ra khiêm tốn nhưng cũng đừng quá phóng đại khả năng của mình. Nếu bạn viết gì vào CV của mình, khả năng rất cao là bạn sẽ phải chứng minh trong buổi phỏng vấn!

Vì thị trường việc làm hiện này (2013) chưa đạt trình trạng tốt nhất, đặc biệt là với nhân viên mới, có thể sẽ mất một khoản thời gian bạn mới có thể có được công việc mình muốn. Thủ thuật ở đây là hãy tham gia mọi cuộc phỏng vấn bạn được gọi, qua đó bạn sẽ biết thêm được nhiều về những thứ mà các nhà tuyển dụng và người phỏng vấn tìm kiếm, từ đó bạn có thể định hướng kế hoạch học tập của mình cho phù hợp.
Nếu bạn có bất cứ câu hỏi nào về việc trở thành một nhà phát triển định lượng, bạn có thể xem qua kinh nghiệm của tôi khi còn là một nhà phát triển định lượng hoặc gửi thư cho tôi vào địa chỉ mike@quantstart.com

Nguồn: QuantStart, dịch bởi VnQuantsTác giả: Mike

——————–&&——————–

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: