Olvidé quién lo dijo, pero creo que “lo contrario de cada gran idea también es una gran idea”. Siempre que un grupo, como los desarrolladores de software, lleguen a un consenso incuestionable sobre algo, es una buena apuesta que hacer lo contrario podría tener beneficios . Aquí está mi lista de opiniones impopulares:
Un visionario de arriba hacia abajo es mejor que un equipo empoderado: la tendencia actual es reunir a un grupo de personas súper talentosas y dejarlos correr libremente. Déles algunos requisitos generales y permítales usar su creatividad para encontrar la solución correcta. Tengo totalmente este deseo. Me encantaría trabajar en un grupo así, siempre que otra persona pagara mi salario.
Desafortunadamente, el problema es que a veces terminas con un producto que satisface las necesidades del equipo, no del cliente. Los desarrolladores del equipo querrán crear la arquitectura perfecta y más extensible; los evaluadores querrán pasar el mayor tiempo posible construyendo un marco de automatización; y los diseñadores presionarán para incorporar diseños de interfaz innovadores (pero no probados).
- ¿Qué compañía es mejor para una más fresca: SAP Labs o Amazon?
- ¿La decisión de Sony de retirarse de DRM está alejando a los desarrolladores y editores externos?
- Si uno ya tiene un empleo remunerado como desarrollador de software, ¿volver a la escuela para obtener un título de CompSci resultaría en una ganancia financiera neta?
- ¿Qué actividades extracurriculares puede hacer un desarrollador de software para aumentar su currículum y aumentar el valor de mercado?
- Cómo encontrar la lista de desarrolladores de productos de software en los EE. UU.
El enfoque visionario de arriba hacia abajo concentra las decisiones del producto en una sola persona (o, a veces, en un grupo pequeño). Una persona es responsable del diseño del producto, creando así un diseño coherente y útil. Además, el visionario de arriba hacia abajo puede realizar las compensaciones necesarias: por ejemplo, a veces es necesario sacrificar la pureza arquitectónica para llegar al mercado a tiempo. Tales compensaciones son mucho más difíciles en un grupo de pares empoderados.
El principal problema con los visionarios de arriba hacia abajo, por supuesto, es que el 90% de las personas que afirman ser visionarios o tienen fama de ser visionarios se engañan a sí mismos o tienen un éxito afortunado. Pero si puedes encontrar uno genuino, es el camino a seguir.
Reinventa la rueda, si puedes: Casi todas las historias exitosas de startups involucran a alguien que reinventa la rueda. Antes de Gmail y Hotmail, el correo electrónico era un problema resuelto. Ejecutó Outlook o Eudora o Notes y recibió su correo electrónico. Fue fácil. ¿Por qué gastarías miles de horas de desarrollador y millones de dólares recreando la experiencia del correo electrónico, excepto en un navegador lento? Y, sin embargo, al reinventar la rueda de correo electrónico, obtuvimos muchas ventajas que ahora damos por sentado.
La holgura es otro ejemplo. ¡Es solo un sistema de chat! Los sistemas de chat han existido desde la invención de la red, ¿por qué iban a reinventarla? Una vez más, sin embargo, al reinventar la rueda, pudieron volver a hacer ciertas suposiciones y terminar con nuevas características y nuevas capacidades.
La gente le dice que no vuelva a inventar la rueda porque terminará exactamente con lo mismo (y perderá tiempo haciéndolo) o terminará haciéndolo mal (porque la rueda original ya es óptima). Pero la rueda original nunca es globalmente óptima. Puede ser óptimo para un conjunto específico de escenarios o un ecosistema tecnológico específico. Pero todo cambia y a veces puedes tener éxito reinventando algo con nuevas suposiciones.
Las arquitecturas monolíticas son buenas: la tendencia actual, especialmente con el código abierto, es armar un gran sistema a partir de un conjunto de componentes independientes. Use MySQL plus Node.js, coloque una capa de motor de datos en la parte superior, mezcle algunos marcos JS y listo: ¡tiene un sitio web! De nuevo, entiendo totalmente esto. ¿Por qué querrías reescribir todo ese código?
Pero hay dos problemas con los sistemas Frankenstein unidos: primero, si es fácil de hacer, todos lo harán, lo que significa que no tienes ninguna ventaja competitiva. En segundo lugar, en muchos casos, terminará con un sistema en el que las costuras se muestran hasta el usuario.
El otro día estaba usando Google Now. Le dije: “OK, Google, juega a Ella Fitzgerald. Inmediatamente, comenzó una lista de reproducción de Pandora con Ella Fitzgerald. ¡La IA es increíble! Luego dije: “OK, Google, juega Rage Against the Machine “. No pasó nada. Lo intenté de nuevo. Nada. Sin mensaje de error, sin respuesta, sin nada.
¿Por qué? Hay una unión entre Google Now y Pandora. Google Now instruyó a la aplicación Pandora para que jugara, pero algo salió mal y Google Now no sabía cómo manejarlo, por lo que no hizo nada. Google no controla la aplicación Pandora y Pandora no controla las API de Google Now. De hecho, Pandora está diseñado para ser llamado por varios clientes (también funciona con Alexa) y Google Now está diseñado para funcionar con múltiples aplicaciones (maneja Spotify).
Ese es el tipo de complejidad con la que terminas si unes varios servicios. Y solo empeorará a medida que Google acelere su API y aplicaciones específicas optimicen su uso de la API para su propio beneficio.
Escriba su propio código de seguridad: la única regla inviolable en los círculos de seguridad es nunca escribir su propio código de seguridad . Lo entiendo por completo. La seguridad es compleja, los ataques son sutiles, y si no eres un experto en seguridad, cometerás errores. En cambio, le dicen que use un código bien probado. Yo, como la mayoría de las personas, uso OpenSSL. Creo que sabes a dónde va esto.
¡El problema con el uso de algo como OpenSSL es que todavía tiene errores! No sabemos cuántos errores tiene todavía. Y si encuentra un error en OpenSSL, ¡podrá explotar literalmente millones de sitios web porque todos usan OpenSSL! Por lo tanto, hay un gran incentivo para encontrar tales errores. Perversamente, mientras más personas usen OpenSSL, mayores serán las posibilidades de que se encuentre un exploit (porque el incentivo es mayor).
Imagina si hicieras lo contrario. Imagínese si contrata a un profesional de seguridad decente para que le escriba un sistema de seguridad personalizado. Por supuesto que tendría errores. Pero esos errores solo se encontrarían (y explotarían) si alguien te atacara específicamente. Y el incentivo para atacarlo es menor, ya que descifrar su seguridad no ayudaría a descifrar a todos los demás.
Mi sueño es poder escribir la pila ssh más simple posible. Tan simple que obviamente no tiene errores. Por supuesto, no sería tan flexible como OpenSSL. Tal vez solo funcionaría con mi sistema particular. Si todo el mundo hiciera eso, tal vez habría suficiente diversidad que los errores de seguridad no condenarían a todo Internet.