私は超高周波取引に興味があり、Javaは私が最もよく知っている言語です。
多くの仕事の仕様でこれを要求しているようだったので、私は常に超高周波領域(しゃれは意図されていません)で作業するためにC++スキルを完成させなければならないだろうという印象を受けました。
インターネットの他の場所で、Javaの方が実際に推奨されるため、Java開発者がはるかに簡単に見つけることができるので、人々のコメントを目にしました。超高周波の観点からは、できるだけ早く注文を取得する必要があり、プログラマーの見つけやすさに基づいてシステムを設計しても、待ち時間の点で必要なものを達成することはできません。
それで、私はJavaに集中するのがベストだと思いますか、またはこのキャリアに入るにはC++に特化することが避けられないのでしょうか?
Java(例 The Disruptor )など)の低レイテンシシステムが組み込まれていますが、C++はこの分野で依然として一般的に使用されている言語です。また、2つの間の通信方法(JNIなど)。
この分野の既存の求人広告を見るのも、おそらく良い考えです。
私の回答の前置きとして、私は金融業界で働いた経験があると言います。そのため、なぜC++を学ぶべきかについて説明する前に、少し歴史のレッスンから始めます。
Javaのリリース前は、C++は主に銀行業務アプリケーションに使用されていた言語であり、特にHFTなどの低レイテンシの状況に対処する場合はそうでした。 Javaが「書き、どこでも実行」というスローガンを提供することで十分に安定したとき、銀行はそれを小規模なアプリケーションの新しいデフォルト言語として採用し始め、パフォーマンスが向上すると、それを大規模なアプリケーションに使用し始めました。もの。
これを念頭に置いて、銀行はデフォルトですべての独自のものを(いくつかの例外を除いて)書き込むことと、お金を稼ぐのに機能する場合は書き直さないことの両方を理解する必要があります。旧バージョンのJVMまたはある程度の魔法を必要とするレガシーアプリケーションがたくさんありますが、ビジネス価値を高めています。以前のバージョンのJVMは、当時のC++と比較してパフォーマンスが悪かったため、実際に現在の世代のVMであったため、低レイテンシのリアルタイムシステムを作成することは、パフォーマンスの観点から特に実行可能であるとは考えられませんでした。
言い換えると、おそらくC++が選択された言語であったときにおそらく作成された既存のプラットフォームを維持している可能性があります。結局のところ、それはJavaまたはC++のいずれかであり、Cまたはアセンブリ(偶然)に出くわす可能性があります。さらに、アプリケーションがJavaである場合でも、JNIを介してC++を呼び出して重い作業を行うことができるので、C++を習得して、そこで何か便利なことができるようになります。
Javaまたはその逆でC++を習得するという点では、面接に合格するまでの両方を学習します。Javaを使用できるプラットフォームが世の中に出てきます。習得は使用に伴います。
C++では、高頻度取引業界以外に仕事がないかのように聞こえます。それは真実ではありません。C++は、他の多くの理由で学び、習得するのに優れた言語です。
ハードウェアは高速化していますが、大手金融機関によるコンピューティングパワーの需要はさらに急速に高まっています。 C++で低レイテンシのトレーディングシステムを書いている人(そうでもない)を知っています。これらは汎用システムではありません。彼らはそこにある最高のハードウェアを購入し、最大RAMで、毎回特定のアーキテクチャの詳細を研究します。それがより速く動作する必要がある場合、専門のFPGAとして実行する必要があります。したがって、超低レイテンシトレーディングでは、常に新しいハードウェアを学習する必要があります。これは、一時的な知識IMOです。Java=ポジションを探しますか?C++を知る必要があります。
短い答え:いいえ、あなたはHFTの世界でJavaのスキルを持つ機会があります。
警告:新しい言語を学ぶと、新しい方法で考えたり、コーディングしたり、コミュニケーションしたりする必要が生じます。これは通常、良いことです。
個人的な経験:バルジブラケットIBで働いたとき、HFTグループのJavaの役割について面接を行いました。私はC++を知りませんでしたが、インタビュアーを抑止するものではありませんでした。彼らのチームは、ほとんどの価格設定と取引、ネットワークとディスクIOを最適化するためのC/C++についてJavaを書きました。私のJavaの経験では、価格設定/取引スペースに「制限」されます。これは、非常に非常に大きなスペースであり、監禁される。
ストーリーの終わり方/ OPへのアドバイス:私は仕事に就かず、代わりに小さな会社のシーンを試すことにしました。当時は私にとって最良の選択でしたが、IBに留まりたいと思っていた場合、HFTは挑戦的で啓蒙的でした。 Javaのスキルを活用して、HFT /低レイテンシのポジションに応募してください。やるべきことはたくさんあり、すばらしいC++開発者と一緒に作業することもできます。
Javaは確かに高周波取引でよく使用されています。 Javolution のようなライブラリがあります。たとえば、非常に低いレイテンシコーディング(たとえば、ヒープ割り当てを回避する特別なデータ構造によって実現されます)、またはLMAX取引プラットフォームを支える Disruptor などです。
C/C++では、マシンをより直接制御できるため、非常に遅延に敏感な状況でEdgeを使用できます。そしてこれらの理由から、それはおそらく超高周波アプリケーションのための「伝統的な」選択です。
しかし全体として、トレーディングプラットフォームのコードのmostはレイテンシにそれほど敏感ではないため、本当にC/C++が必要です。たとえば、すべての分析ツールについて考えてみてください。レイテンシは問題ではありません。JVMでの生産性は、C/C++の小さなパフォーマンス上の利点を明らかに上回ります。さらに、Java(ScalaおよびClojureのような他のJVM言語と一緒に)は、高度な並行分散処理に非常に適しています。将来の開発の主要な推進力になる可能性が高いビッグデータの問題。
私はあなたに次のアドバイスをします: