Ruby es un muy buen lenguaje de propósito general. Es razonablemente poderoso, tiene una gran comunidad, hay muchas bibliotecas mantenidas activamente y está lo suficientemente implementado como para que sea poco probable que encuentre problemas grandes e inesperados. Cuando empezábamos, John y yo ya lo sabíamos bastante bien. Lo elegimos porque era un defecto sensato.
Elegir Python probablemente habría funcionado de manera equivalente. Entre Ruby y Python, cada uno es un poco mejor en algunas áreas, pero las diferencias entre ellos son bastante leves.
Hay muchos idiomas menos utilizados que podrían haber sido buenas opciones: Clojure, Scala, Haskell, Go, Smalltalk y Julia saltan a la mente. Aunque elegir uno de ellos para cualquier proyecto importante conlleva cierto riesgo (tal vez el idioma disminuye significativamente en su popularidad ya limitada; tal vez empiece a perder el esfuerzo invirtiendo en el idioma en sí (como Jane Street ha tenido que hacerlo con OCaml); tal vez usted tiene que escribir muchas bibliotecas; tal vez se ralentiza porque la gente tiene que pasar el tiempo actualizando el idioma; tal vez encuentre errores importantes), creo que las nuevas empresas tienden a subestimar los beneficios potenciales de elegir pilas de tecnología atípicas: aprender cosas nuevas es un poderoso motivador para los ingenieros, de manera desproporcionada, entre los que es más probable que desee contratar, y tener una pila de tecnología interesante y reflexiva puede ayudar mucho en el reclutamiento. (Casos en cuestión: Prismático (Clojure), Cuadrangular (Scala).)
Utilizamos Smalltalk para casi todo en nuestra empresa anterior (Auctomatic), anteriormente había escrito mucho de Lisp, y algunos de los primeros ingenieros de Stripe construyeron nuevas empresas en Objective-J, por lo que no éramos ajenos a este fenómeno.
- ¿Por qué imponemos reglas que no seguimos a los niños?
- ¿Cuáles son las diez cosas principales que todo nuevo padre debe saber antes de que nazca su primer hijo?
- ¿Tener un hijo es un atajo para la realización y el sentido de la vida?
- ¿Cuáles son los mejores sitios de redes sociales para las mamás que intentan organizar fechas de juego y eventos?
- ¿Por qué mi papá es tan molesto?
Desde el principio, hemos tenido una base de código algo modular, y el producto Stripe está compuesto por muchos servicios independientes. Con el tiempo, espero que diverjan un poco en su implementación, ya que las prioridades y requisitos para cada uno se vuelven más claros. (Ya, la mayor parte de nuestra interfaz web está escrita en CoffeeScript, no en Ruby).
Construir Stripe de esta manera hace que la elección inicial del idioma sea menos importante. Al contratar fuertes ingenieros generalistas y mantener la flexibilidad para implementar varios componentes de diferentes maneras, hemos mantenido la opción de usar otros idiomas en el futuro. Hasta cierto punto, usar Ruby fue una elección conservadora, hecha con el objetivo de maximizar la posibilidad de que construyamos una base lo suficientemente estable que luego podamos ir y experimentar, con un mayor margen de error, con otras tecnologías y marcos en el futuro.
Visto de esta manera, creo que la elección ha funcionado bastante bien hasta ahora.