En Quora usamos principalmente Python para nuestro desarrollo. Python es un excelente lenguaje de programación por muchas razones (vea la respuesta de Adam D’Angelo a ¿Por qué Quora eligió Python para su desarrollo? ¿Qué desafíos tecnológicos enfrentaron los fundadores antes de decidirse por Python en lugar de PHP?). Hay muchas herramientas de código abierto en el ecosistema de Python, y utilizamos varias de ellas. Cuando las herramientas existentes no proporcionan lo que necesitamos, implementamos las nuestras y, en algunos casos, también intentamos abrirlas a la comunidad (consulte Programación asincrónica en Python).
Además de Python, usamos C ++. Quizás el único inconveniente de Python es que, dado que es un lenguaje interpretado, es difícil obtener la eficiencia que puede obtener con lenguajes como C ++. Entonces, en Quora usamos este lenguaje cuando necesitamos exprimir al máximo nuestras CPU. Un claro ejemplo es cuando implementamos algunos algoritmos de aprendizaje automático (consulte QMF de código abierto para la factorización matricial).
Finalmente, también usamos Javascript para el front-end y, por supuesto, tenemos que usar algunos Objective C para iOS y Java para el desarrollo nativo de Android.
- ¿Cuál es la diferencia entre el misil Aster 30 Block 1 NT (nueva tecnología) y el misil Aster 30 Block II?
- ¿Los teléfonos inteligentes alguna vez dejarán de sobrecalentarse?
- ¿Puede una 'máquina' ir más rápido que un esquiador profesional en una pista de la Copa Mundial?
- ¿Cuáles son las recompensas financieras de hablar u organizar una conferencia de tecnología?
- ¿Cuál es el mayor problema en Internet?
En cuanto a las bases de datos, usamos MySQL como nuestra base de datos de uso general. Sin embargo, cada vez más, hemos trasladado muchos de nuestros casos de uso a soluciones que no son SQL, principalmente HBase. En casos muy específicos, hemos tenido que usar bases de datos en memoria como rocksdb. También usamos Memcache para el almacenamiento en caché con mucha frecuencia.
En la capa de gestión de datos y flujos, utilizamos Scribe para el procesamiento de registros (consulte Registro y agregación en Quora), Kafka para flujos de datos y Spark para administrar grandes datos en general. En el pasado utilizamos Hadoop Map Reduce, pero ahora hemos movido casi todos los casos de uso a Spark.
Desarrollamos todo en la nube y más específicamente en AWS (aunque tenemos algunos casos de uso más pequeños en Google Cloud). De hecho, no hay un solo escritorio o estación de trabajo en Quora. Todos los desarrolladores tienen una “máquina” remota en la nube donde desarrollan su trabajo utilizando una computadora portátil como interfaz.
En cuanto a las herramientas de trabajo en equipo, utilizamos herramientas estándar como Git para el control de origen. Utilizamos tanto Phabricator como Asana para la gestión de tareas, pero el primero está más cerca de nuestro proceso de implementación continua (consulte Implementación continua en Quora). Para otras cosas, como la gestión de pruebas unitarias, hemos desarrollado nuestras propias herramientas internas.
Podría estar dejando algo fuera, pero esto le dará una visión bastante buena de nuestra “pila de tecnología”.