Prepárese para obtener más respuestas de las que esperaba …
Para ampliar un poco lo que Piotr mencionó, estas son algunas de las razones por las que elegimos la tecnología que tenemos hoy, algunos de los pros y los contras con los que nos hemos encontrado en el camino, e incluso un poco sobre dónde podría llevar el futuro nuestra pila tecnológica
Google App Engine para el back-end
La escalabilidad de App Engine ha sido un gran beneficio para nuestro equipo. Somos un equipo de ingeniería relativamente pequeño, y aunque App Engine tiene sus peculiaridades (consistencia eventual y latencia aleatoria, ¿alguien?) El hecho de que no tenemos que dedicar mucho tiempo al mantenimiento de los servidores o la escalabilidad / confiabilidad de El hardware nos da una ventaja fantástica.
- ¿Cuál es el mejor software de gestión de proyectos colectivos en la actualidad? Asana, do.trello, prodoctiv, clarizen, etc.
- ¿Cómo funciona make?
- ¿Qué software usan los autores publicados para escribir sus libros?
- ¿Cómo hago una aplicación en la nube en ASP.NET con Windows Azure?
- ¿Cuáles son las principales aplicaciones de Android que ayudan a invertir?
Usamos la variante Python de GAE porque Python es un lenguaje encantador que es fácil de codificar y leer 🙂
Si estás interesado en aprender más sobre el motor de aplicaciones, ¡aquí tienes un descarado complemento de Udacity! Curso de desarrollo web en línea: cómo crear un blog enseña los fundamentos de desarrollo web, incluidos algunos sobre el uso de App Engine bajo el capó.
MongoDB para recopilar análisis
La velocidad. Oh hombre. La velocidad. (Por lo que estamos haciendo con él).
Volcamos una gran cantidad de datos de actividad en nuestra base de datos Mongo, desde eventos de registro hasta resultados de cuestionarios y acciones de Twitter. Con todos ustedes trabajando en nuestro servidor (¡nos encanta!), Los datos llegan.
Almacenar y extraer nuestros datos de Mongo es, para nosotros, todo sobre rendimiento y flexibilidad. Sí, en algún momento destacaremos lo que podemos hacer en este ámbito, pero desde que hicimos el salto a fines de enero, trabajar con datos a mayor escala ha sido muy fácil.
¿Ejemplos de lo que estamos haciendo? Todo, desde las pruebas A / B del contenido del sitio web (¿animar a los estudiantes a compartir su progreso en Facebook les ayuda a llegar al final del curso?) A buscar contenido de prueba roto o involuntariamente difícil (“Solo el 5% de nuestros estudiantes finalmente lo hizo bien ? Hmm … “)
Uno de los enormes beneficios de los MOOC es la capacidad de utilizar datos a gran escala para mejorar la forma en que entregamos material educativo, y MongoDB realmente nos ha permitido llegar a ese punto sin una inversión de tiempo irrazonable en el rendimiento y mantenimiento de la base de datos.
AWS para la ejecución de código
Para las asignaciones de programación, necesitamos poder ejecutar su código en un entorno completo, y nuestro sistema de clasificación de espacio aislado en AWS hace exactamente eso. Este es otro lugar donde la escala y la confiabilidad del hardware se eliminan de la gran lista de cosas por las que debemos preocuparnos, y estamos de acuerdo con eso.
Todo, desde su primer programa Python, hasta su código CUDA enormemente corpulento, se ejecuta en este entorno y nos permite ofrecer una gama mucho más amplia de lenguajes / entornos de programación desde el navegador de lo que de otra manera sería posible.
Al igual que con cualquier configuración de “Make A talk to B”, a veces recibimos interrupciones del servicio (¡muy pocas veces! ¡Gracias, Google y Amazon!), Pero el hecho de que un estudiante puede aprender a codificar en Python desde una computadora de biblioteca compartida sin tener que instalar algo? Eso es genial 🙂
AngularJS para JavaScript
Angular. Es. Asombroso.
Hemos intentado todo, desde Ember.js (V1 del sitio web de Udacity, que se retiró este enero, era todo Ember), Backbone.js, Knockout y, al final, Angular fue la solución adecuada para nosotros (aunque aumentamos con Underscore.js para obtener la bondad completa de JS).
Los servicios inyectables, las pruebas como ciudadano de primera clase, la comunidad increíble y solidaria … es sinceramente un placer trabajar con ellos. Una vez que te preparas, desarrollar con Angular es un ejercicio de increíble reutilización y “¡Hey, sí! Así es como debería funcionar esto.
Me gustaría mencionar explícitamente que Angular se tomó un poco de tiempo cuando era joven para descubrir qué, exactamente fue … Unos viajes por Europa, un romance vertiginoso con MVC y la orientación de algunos buenos amigos más tarde, es un marco verdaderamente estelar. La documentación / tutoriales en algún momento aún muestran artefactos de su fase de autodescubrimiento, así que echa un vistazo a los Grupos de Meetup de AngularJS para obtener lo último y lo mejor.
Por último, Angular 1.2 está a punto de salir y todo nuestro equipo de front-end está extremadamente emocionado de ver esa caída. Están agregando muchas características nuevas, solucionando algunas peculiaridades menores y mayores, y generalmente mejorando todo aún más.
Bootstrap y MENOS para peinar
La decisión aquí fue mucho menos clara que el lado Javascript de la ciudad.
En primer lugar, quiero decir que Bootstrap es bastante fantástico para las startups. El uso de bootstrap le dará un diseño sólido, si es decididamente bootstrap, y sacará a su MVP de la puerta en una fracción del tiempo que le tomaría solo manejar la compatibilidad con IE. (Aunque, para ser justos, IE11 está llegando allí, debería quemarme en la hoguera por reconocer eso. Lo sé).
Ahora, por lo menos divertido: cuando llega el momento de dejar la relativa comodidad de Bootstrap y entrar en el mundo de “¿Qué pasa si quiero hacer algo que Bootstrap no hace?” Las cosas se ponen difíciles. Y hinchado. Y un poco doloroso.
Incluso compilando nuestra propia versión extremadamente ajustada y ajustada de Bootstrap (en lugar de simplemente cargar bootstrap de vainilla y luego poner en cascada nuestras propias reglas), les enviamos MUCHOS CSS. No es ideal, pero en el mundo de obtener sus clases y características de manera oportuna, cumple su propósito.
En una versión futura del sitio, comenzaremos a eliminar gradualmente nuestros trozos de bootstrap menos utilizados en favor de nuestro propio marco de trabajo propio.
En el frente de cosecha propia: nuestro estilo general coincide bastante con las ideas detrás de SMACS (por el increíble Jonathan Snook), y toma un poco de las fantásticas ideas de Nicole Sullivan de Nicole Sullivan sobre OOCSS. Intentamos crear módulos y reglas CSS reutilizables y extensibles que nos ayuden a usar nuestro CSS una y otra vez. ¡Imagina eso!
Finalmente, “¿Por qué MENOS? ¿Por qué no SASS? ”Debido a que Bootstrap está escrito en MENOS, y si crees que quiero ir cambiando entre sobrescribir Bootstrap en MENOS y Udacity en SASS, tienes otra cosa por venir … 🙂
Y he terminado
Ahí lo tienes, de abajo hacia arriba, cómo funciona Udacity. Como mencionó Piotr, esta es la instantánea tecnológica de hoy ; Una de las cosas fantásticas de trabajar en un proyecto en evolución como Udacity, es la capacidad de usar tecnología nueva y mejor a medida que esté disponible.