¿Vale la pena aprender C ++ en profundidad SOLO para una carrera en el comercio de baja latencia? [cerrado]

7

Estoy interesado en el comercio de frecuencias ultra altas y Java es el lenguaje que mejor conozco.

Siempre tuve la impresión de que tendría que perfeccionar mis habilidades en C ++ para poder trabajar dentro del dominio de frecuencia ultra alta (sin intención de juego de palabras) porque muchas especificaciones de trabajo parecían pedir esto.

En otras partes de Internet, he visto a personas que comentan que Java es realmente preferido porque puedes encontrar a los desarrolladores de Java mucho más fáciles. Sin embargo, pensé que este es un mal argumento porque, en términos de frecuencia ultra alta, necesita tomar un pedido lo antes posible y diseñar su sistema basado en la facilidad de encontrar programadores no va a lograr lo que necesita en términos de latencia .

Entonces, ¿diría que sería mejor concentrarme en Java, o es inevitable especializarse en C ++ para entrar en esta carrera?

    
pregunta user997112 02.01.2012 - 20:50

6 respuestas

13

Hay sistemas de baja latencia integrados en Java (por ejemplo, el Disruptor ), pero C ++ todavía es un problema común. Idioma utilizado en este espacio. Personalmente, aprendería ambos y cómo comunicarme entre los dos (por ejemplo, JNI o similar).

Probablemente, también es una buena idea observar los anuncios de empleo existentes en esta área.

    
respondido por el Martijn Verburg 02.01.2012 - 21:29
11

Para prólogo de mi respuesta, diré que he trabajado en la industria financiera, así que comenzaré con una pequeña lección de historia antes de explicar por qué debería aprender C ++.

Antes del lanzamiento de Java, C ++ era el lenguaje utilizado principalmente para aplicaciones bancarias, especialmente cuando se trataba de situaciones de baja latencia, como HFT. Cuando Java se volvió lo suficientemente estable al entregar el eslogan "escribe uno, corre en cualquier parte", los bancos comenzaron a adoptarlo como el nuevo idioma predeterminado para aplicaciones más pequeñas y, cuando mejoró el rendimiento, comenzaron a usarlo para las más grandes.

Teniendo esto en cuenta, también debes saber que los bancos tienen la costumbre de escribir todo lo que hay por defecto (con algunas excepciones) y no reescribirlo si solo sirve para hacerles dinero; Usted ve muchas aplicaciones heredadas que requieren versiones antiguas de JVM o cierta cantidad de magia para comenzar a trabajar, pero están agregando valor comercial. Las versiones más antiguas de JVM tenían un rendimiento desagradable en comparación con C ++ en ese momento y, de hecho, las máquinas virtuales de la generación actual, por lo que no se consideraba que el sistema de tiempo real de baja latencia fuera particularmente viable desde el punto de vista del rendimiento.

En otras palabras, es probable que mantengas una plataforma existente que probablemente se escribió cuando C ++ era el idioma de tu elección. Al final del día, ya sea Java o C ++, es posible que se tope con alguna C o incluso con el ensamblaje (poco probable). Además, incluso si la aplicación es Java, podría llamar a través de JNI a C ++ para hacer el trabajo pesado para que aprendiera C ++ hasta el punto en el que pueda hacer algo útil.

En términos de dominar C ++ sobre Java o viceversa: aprenda tanto hasta el punto en que puede pasar una entrevista, habrá plataformas que tengan Java, el dominio vendrá con el uso.

    
respondido por el ahjmorton 03.01.2012 - 00:46
6

Usted hace que parezca que no hay trabajos fuera de la industria de comercio de alta frecuencia en C ++. Eso no es cierto, C ++ es un excelente lenguaje para aprender y dominar por muchas otras razones.

    
respondido por el DeadMG 02.01.2012 - 21:36
6

El hardware se está volviendo más rápido, pero la demanda de poder de cómputo por parte de las grandes instituciones financieras está creciendo aún más rápido. Conozco a alguien (no tan bien) que escribe sistemas de comercio de baja latencia en C ++. Esos no son sistemas de propósito general. Compran el mejor hardware que existe, maximizan la memoria RAM y estudian cada vez los detalles de la arquitectura particular. Si tuviera que trabajar más rápido, tendrían que hacerlo como un FPGA especializado. Por lo tanto, el comercio de latencia ultra baja lo obligará a aprender nuevo hardware todo el tiempo, lo que es un conocimiento transitorio de la OMI. ¿Buscar posiciones de Java tal vez? Aún necesitarás conocer C ++.

    
respondido por el Job 03.01.2012 - 17:24
3

Respuesta corta: No , tienes oportunidades en el mundo HFT con tus habilidades de Java.

Advertencia: aprender un nuevo idioma te obligará a pensar / codificar / comunicarte de nuevas maneras, esto suele ser algo bueno.

Experiencia personal: cuando trabajé en bulge-bracket IB me entrevisté para un rol de Java en un grupo HFT. No sabía C ++ pero esto no disuadió a mis entrevistadores, su equipo escribió Java para la mayoría de los precios y el comercio, C / C ++ para optimizar la red y la E / S del disco. Mi experiencia con Java me "confinaría" en el espacio de precios / comercio, que es un espacio muy, muy grande en el que estar limitado.

Cómo termina la historia / consejos para OP: no acepté el trabajo, opté por probar la escena de la pequeña empresa. Era la mejor opción para mí en ese momento, pero si hubiera querido permanecer en IB, HFT hubiera sido desafiante y esclarecedor. Tome sus habilidades de Java y aplique a posiciones de HFT / baja latencia. Hay mucho que hacer y trabajará junto con algunos increíbles desarrolladores de C ++.

    
respondido por el Matt Stephenson 03.01.2012 - 23:16
2

Java es ciertamente un buen uso en el comercio de alta frecuencia. Existen bibliotecas como Javolution , por ejemplo, para codificación de latencia muy baja (lograda, por ejemplo, mediante estructuras de datos especiales que evitan la asignación de pilas) o Disruptor que apuntala la plataforma de operaciones LMAX.

C / C ++ aún le da un control más directo sobre la máquina, lo que puede darle la ventaja en algunas situaciones extremadamente sensibles a la latencia. Y por estas razones, probablemente sea la opción "tradicional" para aplicaciones de frecuencia ultraalta.

Pero en general, la mayoría del código en las plataformas comerciales no es tan sensible a la latencia que realmente necesita C / C ++. Por ejemplo, piense en todas las herramientas de análisis: la latencia simplemente no es un problema y la productividad que obtiene al estar en la JVM superará claramente cualquier pequeña ventaja de rendimiento de C / C ++. Además, diría que Java (junto con otros lenguajes JVM como Scala y Clojure) es mucho más adecuado para manejar los problemas de big data altamente concurrentes y distribuidos que probablemente sean un importante motor para futuros desarrollos.

Te daré el siguiente consejo:

  • De todos modos, solicite trabajos, no espere a dominar C / C ++ primero. Si es un programador de Java lo suficientemente bueno, debería poder obtener trabajos en el tipo correcto de compañías y hacer la transición a C / C ++ más adelante si es necesario.
  • Empieza a aprender C / C ++ de todos modos. Te hará un mejor programador en general para tener un lenguaje de sistemas de bajo nivel en tu haber (incluso si Java está trayendo el dinero la mayor parte del tiempo). Algunos conocimientos básicos de C / C ++ también pueden ayudarlo en las entrevistas, puede posicionarse como un experto en Java pero con un interés / aptitud para C ++.
respondido por el mikera 03.01.2012 - 02:00

Lea otras preguntas en las etiquetas