Vale la pena di imparare C ++ in profondità SOLO per una carriera nel trading a bassa latenza? [chiuso]

7

Mi interessa il trading ad altissima frequenza e Java è la lingua che conosco meglio.

Avevo sempre l'impressione che avrei dovuto perfezionare le mie abilità in C ++ per lavorare all'interno del dominio delle frequenze ultra alte (nessun gioco di parole) perché molte specifiche di lavoro sembravano chiedere questo.

Altrove su Internet ho visto persone dire che Java è in realtà preferito perché è possibile trovare gli sviluppatori Java molto più facili. Tuttavia, ho pensato che fosse una brutta discussione perché in termini di frequenza ultra elevata, devi prendere un ordine il prima possibile e progettare il tuo sistema basandoti sulla facilità di trovare i programmatori non otterrai ciò che ti serve in termini di latenza .

Quindi, diresti che sarebbe meglio concentrarmi su Java, o è inevitabile specializzarsi in C ++ per entrare in questa carriera?

    
posta user997112 02.01.2012 - 20:50
fonte

6 risposte

13

Esistono sistemi a bassa latenza costruiti in Java (ad esempio il Disruptor ), ma il C ++ è ancora comunemente linguaggio usato in questo spazio. Imparerei personalmente entrambi e come comunicare tra i due (ad esempio JNI o simili).

Considerare gli annunci di lavoro esistenti in quest'area è probabilmente anche una buona idea.

    
risposta data 02.01.2012 - 21:29
fonte
11

Per prefigurare la mia risposta dirò che ho lavorato nel settore finanziario, quindi inizierò con una breve lezione di storia prima di approfondire il motivo per cui dovresti imparare il C ++.

Prima della versione di Java C ++ era la lingua utilizzata principalmente per le applicazioni bancarie, specialmente quando si trattava di situazioni a bassa latenza come HFT. Quando Java è diventato abbastanza stabile con lo slogan "scrivi uno, esegui ovunque" che le banche hanno iniziato ad adottare come nuova lingua predefinita per le applicazioni più piccole e, quando le prestazioni sono migliorate, hanno iniziato a usarlo per le più grandi.

Con questo in mente dovresti anche sapere che le banche hanno l'abitudine di scrivere entrambe le proprie cose di default (con alcune eccezioni) e non riscriverle se funziona solo a farle guadagnare; vedi molte applicazioni legacy che richiedono versioni antiche della JVM o una certa quantità di magia per funzionare, ma aggiungono valore per il business. Le versioni precedenti della JVM presentavano prestazioni allucinanti rispetto al C ++ al momento e, in effetti, le VM di generazione corrente, pertanto la scrittura di un sistema in tempo reale a bassa latenza non era probabilmente considerata particolarmente valida dal punto di vista delle prestazioni.

In altre parole, è probabile che manterrete una piattaforma esistente che probabilmente è stata scritta quando il C ++ era la lingua prescelta. Alla fine della giornata sarà Java o C ++, potresti incappare in qualche C o addirittura in un assemblaggio (improbabile). Inoltre, anche se l'applicazione è Java, è possibile richiamare JNI in C ++ per eseguire il sollevamento pesante, quindi imparerei il C ++ al punto in cui posso fare qualcosa di utile.

In termini di padronanza di C ++ su Java o viceversa: apprendi sia al punto che puoi passare un colloquio, ci saranno piattaforme là fuori che hanno Java, la padronanza verrà con l'uso.

    
risposta data 03.01.2012 - 00:46
fonte
6

Lo fai sembrare come se non ci fossero posti di lavoro al di fuori del settore del trading ad alta frequenza in C ++. Questo non è vero - il C ++ è un linguaggio eccellente per imparare e padroneggiare per molte altre ragioni.

    
risposta data 02.01.2012 - 21:36
fonte
6

L'hardware sta diventando più veloce, ma la domanda di potenza di calcolo da parte di una grande istituzione finanziaria sta crescendo ancora più velocemente. Conosco qualcuno (non così bene) che scrive sistemi di trading a bassa latenza in C ++. Quelli non sono sistemi generici. Comprano il miglior hardware che ci sia, massimo RAM e studiano i dettagli di ogni particolare architettura ogni volta. Se dovesse funzionare più velocemente, dovrebbero farlo come FPGA specializzato. Quindi, il trading a bassa latenza ti costringerà a imparare sempre il nuovo hardware, che è la conoscenza transitoria IMO. Cerca forse le posizioni Java? Avrai ancora bisogno di conoscere il C ++.

    
risposta data 03.01.2012 - 17:24
fonte
3

Risposta breve: No , hai opportunità nel mondo HFT con le tue competenze Java.

Avvertenza: l'apprendimento di qualsiasi nuova lingua ti costringerà a pensare / codificare / comunicare in modi nuovi, di solito è una buona cosa.

Esperienza personale: quando lavoravo in braccio obliquo ho intervistato per un ruolo di Java in un gruppo HFT. Non conoscevo il C ++, ma questo non ha scoraggiato i miei intervistatori, il loro team ha scritto Java per la maggior parte dei prezzi e del trading, C / C ++ per ottimizzare la rete e il disco IO. La mia esperienza in Java mi "confinerebbe" nello spazio di pricing / trading, che è uno spazio molto, molto grande in cui essere confinato.

Come finisce la storia / consigli per OP: non ho accettato il lavoro, optando invece per provare la scena della piccola azienda. Era la scelta migliore per me al momento, ma se avessi voluto rimanere in IB, HFT sarebbe stato stimolante e illuminante. Assumi le tue competenze Java e applicali alle posizioni HFT / a bassa latenza. C'è molto da fare per te, e lavorerai anche con alcuni fantastici sviluppatori C ++.

    
risposta data 03.01.2012 - 23:16
fonte
2

Java è sicuramente usato molto nel trading ad alta frequenza. Esistono librerie come Javolution ad esempio per la codifica a latenza molto bassa (ottenuta ad esempio da strutture dati speciali che evitano l'allocazione dell'heap), o Disruptor che è alla base della piattaforma di trading LMAX.

C / C ++ offre ancora un controllo più diretto sulla macchina, che può darti il vantaggio in situazioni estremamente sensibili alla latenza. E per questi motivi è ancora probabilmente la scelta "tradizionale" per le applicazioni ad altissima frequenza.

Ma nel complesso, la maggior parte del codice nelle piattaforme di trading non è così sensibile alla latenza che hai davvero bisogno di C / C ++. Pensa a tutti gli strumenti di analisi, ad esempio: la latenza semplicemente non è un problema e la produttività che si ottiene dall'essere sulla JVM supererà nettamente i vantaggi minori delle prestazioni di C / C ++. Inoltre, direi che Java (insieme ad altri linguaggi JVM come Scala e Clojure) è molto più adatto a gestire i problemi concomitanti, distribuiti e di grandi quantità di dati che potrebbero essere un importante motore per gli sviluppi futuri.

Ti darei il seguente consiglio:

  • Fai domanda per i lavori comunque, non aspettare per padroneggiare prima C / C ++. Se sei un buon codificatore Java dovresti essere in grado di trovare lavoro nel giusto tipo di aziende e passare successivamente a C / C ++ se ce n'è bisogno.
  • Inizia comunque ad imparare C / C ++. Ti farà diventare un programmatore migliore nel complesso per avere un linguaggio di sistema di basso livello sotto la cintura (anche se Java sta portando dentro i soldi il più delle volte). Alcune conoscenze di base in C / C ++ potrebbero aiutarti anche nelle interviste: puoi posizionarti come esperto di Java ma con un interesse / attitudine per C ++.
risposta data 03.01.2012 - 02:00
fonte

Leggi altre domande sui tag