El instinto principal del codificador es eliminar soluciones ineficaces de todas partes.



Adaptación de un extracto del libro Codificadores de Clive Thompson : Creando una nueva tribu y recreando el mundo

Shelley Chen trabajó como analista de negocios en una empresa de informática, cuando en 2010 conoció a Jason Ho a través de amigos en común. Ho era muy alto, bien formado y tenía una sonrisa astuta, e inmediatamente encontraron un lenguaje común. Ho era programador y tenía su propia compañía en San Francisco. También le encantaba viajar. Menos de un mes después de conocerse, Ho sorprendió a Chen al comprar un boleto de avión para reunirse con ella en Taiwán, donde se mudó temporalmente. Pronto, ya estaban discutiendo un viaje conjunto a Japón durante cuatro semanas. Chen estaba un poco preocupado ya que no eran tan familiares. Sin embargo, ella decidió probar suerte.

Resultó que Ho tenía un plan de ruta muy duro y extraño. Le gustaban mucho los fideos ramen , y para probar todas las opciones posibles mientras visitaba Tokio, compiló una lista de todas las ciudades de fideos y las mostró en los mapas de Google. Luego escribió un programa especial que clasifica los restaurantes para que la pareja pueda visitar los mejores restaurantes mientras visitan las atracciones. Dijo que era una tarea "bastante tradicional" para algoritmos, un tipo de lo que la gente aprende en la universidad. Ho le mostró a Chen la tarjeta en su teléfono. Dijo que planeaba tomar notas, señalando en detalle la calidad de cada plato. Wow, pensó con admiración, aunque un poco sospechoso. "Y el tipo es un poco de eso".

Pero Ho también fue ingenioso, bien leído y divertido, y el viaje fue un éxito. Comieron fideos, bebieron cerveza en un partido de sumo, visitaron el Palacio del Emperador, se alojaron en un hotel donde filmaron "Dificultades de traducción". Este fue el comienzo de una relación de siete años.

Ho ha estado haciendo cosas extrañas como la optimización de fideos durante muchos años. Cuando era niño, vivía en Macon (Georgia), y tenía una calculadora TI-89, como me dijo. Una vez que hojeó las instrucciones y descubrió que era posible escribir programas en una de las variantes BÁSICAS de la calculadora. Como resultado, aprendió a programar y recreó The Legend of Zelda en una calculadora. Aprendió Java en una computadora y después de la escuela fue al Instituto de Tecnología de Georgia para estudiar ciencias de la computación. En principio, estaba interesado en conceptos abstractos de algoritmos, pero sobre todo le gustaba usar una computadora para no hacer cosas rutinarias repetitivas. "Cada vez que tenía que repetir algo, me aburría", me dijo.

En su último año de universidad, Ho fundó una compañía que creó foros donde los estudiantes que estudiaban los mismos cursos en diferentes universidades podían consultar entre ellos. La compañía no reclutó un número suficiente de usuarios y la cerró. Fue invitado a entrevistar a compañías como Google y Microsoft, pero no estaba interesado allí. No quería trabajar para su tío. Le pareció que como empleado no crearía algo lo suficientemente valioso. Sí, por supuesto, en ese lugar te pagan. Pero la mayor parte del costo de la mano de obra va a los creadores de la empresa, sus dueños. Tenía suficientes habilidades para crear su producto desde cero. Simplemente no sabía qué crear exactamente para él.

Unos meses después, tuvo una idea cuando estaba de visita con sus padres en Macon. Él y su padre, un pediatra que tenía su propia práctica, fueron al supermercado. El padre necesitaba comprar dos registradores de la hora de llegada y salida de los empleados, tales autos anticuados donde los empleados insertan tarjetas para que la máquina registre el comienzo y el final de su jornada laboral. En la tienda, este auto se vendió por $ 300 cada uno.

Ho estaba asombrado: ¿no ha cambiado la tecnología de los registradores desde la Edad de Piedra? No puedo creer que tales cosas todavía existan, pensó. Se dio cuenta de que podía destruir rápidamente un sitio que realizaba la misma tarea, solo que mejor. Los trabajadores pueden registrarse usando su teléfono, y el sitio resumirá sus horas automáticamente. "No compre un registrador", le dijo a su padre. "Lo programaré para ti". Tres días después, presentó el prototipo. El personal comenzó a usarlo y, para deleite de Ho, estaban encantados. Este sistema resultó ser mucho más efectivo que el registrador que trabaja con trozos de papel.

Subió el sitio web, lo llamó Clockspot, y cuatro meses después tenía un nuevo cliente, un bufete de abogados. Después de recibir el primer pago, Ho, que trabajaba en la biblioteca del instituto, casi saltó de su silla. ¡Recibió dinero por su software! Nueve meses después, Ho ganaba alrededor de $ 10,000 al mes de compañías de limpieza, proveedores de atención médica a domicilio y la administración de Birmingham (Alabama). Durante dos años trabajó sin interrupción, mejorando y depurando el código. Como resultado, lo depuró tan bien que Clockspot funcionó en piloto automático. Además de sí mismo, Ho solo necesitaba un agente de atención al cliente que no trabajara a tiempo completo. Recibió un buen ingreso y tuvo mucho tiempo para viajar y otros intereses. Optimizó la efectividad de su vida.


Jason Ho, fundador de Clockspot, está tratando de optimizar sus acciones con código

Como cualquier persona inteligente, debería haber notado cómo el software absorbe el mundo, según la conocida frase del inversor Mark Andrissen. Viste cómo Facebook se tragó la esfera social, Uber absorbió el tráfico urbano, Instagram le dio un fuerte impulso a la cultura de las selfies y Amazon entregó las compras en 24 horas. Por lo general, los innovadores tecnológicos se jactan de que sus servicios están cambiando el mundo o haciendo que la vida sea más conveniente, pero en el fondo de todo esto está la velocidad. Todo lo que hacía antes: buscar un taxi, cotillear con un amigo, comprar pasta de dientes, ahora es más rápido. El principio de Silicon Valley es tomar la acción de una persona y desenroscar su metabolismo al máximo. ¿Y quizás te estabas preguntando por qué esto funciona de esa manera? ¿Por qué los técnicos insisten en acelerar todo, torcerlo hasta el límite y optimizarlo?

Hay una razón obvia para esto: lo hacen de acuerdo con los requisitos del mercado. El capitalismo recompensa generosamente a cualquier persona que pueda mejorar el proceso y obtener un pequeño margen. Pero hay otro proceso con el software. Para los codificadores, la eficiencia no es solo una herramienta para los negocios. Este es un estado existencial y alimento emocional.

Los programadores pueden tener diferentes experiencias de vida y puntos de vista políticos, pero casi todas las personas con las que hablé se complacen emocionalmente al tomar algo ineficaz, incluso un poco más lento de lo necesario, y ajustarlo ligeramente. Eliminar la fricción del sistema es un placer estético; los ojos de los programadores arden cuando discuten cómo acelerar las cosas o cómo lograron eliminar las molestas acciones humanas del proceso.

No solo los desarrolladores de software se ven afectados por esta unidad de eficiencia. Los ingenieros e inventores han experimentado durante mucho tiempo una motivación similar. En los primeros años de la industrialización, los ingenieros aumentaron la automatización de las tareas cotidianas, elevando la moral. El ingeniero era "el liberador de la humanidad del trabajo monótono desesperado y del trabajo pesado", como escribió el ingeniero Charles Hermany en 1904. Frederick Winslow Taylor, el inventor del " taylorismo " , que ayudó a fundar las líneas de producción, luchó ferozmente con "movimientos humanos torpes, ineficaces o incorrectos". Frank Bunker Gilbreth estaba molesto por movimientos innecesarios en todo, desde poner ladrillos hasta abrocharse un chaleco, y su compañera de producción y esposa, Lillian Evelyn Gilbreth, diseñaron las cocinas para que la cantidad de pasos necesarios para hacer un pastel de capas con fresas se redujera " 281 a 45 ", como escribió con entusiasmo en The Better Homes Manual en 1931.

Muchos de los programadores de hoy experimentaron un destello de inspiración cuando eran adolescentes, descubriendo que la vida está llena de acciones increíblemente tontas y repetitivas, y que las computadoras les va muy bien. (La tarea de matemáticas con su larga lista de ejercicios aburridos inspiró a muchos programadores con los que hablé). Larry Wall, quien inventó el lenguaje de programación Perl, y varios de sus coautores escribieron que una de las virtudes clave de un programador es la pereza, ese tipo de pereza que hace que su falta de voluntad para hacer un trabajo mecánico lo inspire a automatizarlo.

Y al final, este enfoque en la eficiencia puede ser difícil de desactivar. "La mayoría de los ingenieros que conozco en todas partes ven la ineficiencia", dijo Krista Maby, un programador de San Francisco. - Ineficiencia para abordar un avión, bien o en cualquier lugar. Simplemente están enfurecidos con cosas ociosas ". Ella misma, caminando por la calle, sueña que todos los peatones usan más efectivamente las aceras y los pasos de peatones. Janet Wing, profesora de ciencias de la computación, directora del Instituto de Ciencia de Datos de la Universidad de Columbia, ha popularizado la frase "pensamiento computacional", que describe de qué habla Maby. Incluye el arte de ver sistemas invisibles en el mundo que nos rodea, un conjunto de reglas y decisiones constructivas que rigen nuestras vidas.

Jason Ho tenía talento para ver esto y tratar de llevar estos sistemas invisibles al ideal. Conocí a Ho y Chen en, por supuesto, un restaurante de ramen en San Francisco hace unos años. Ho manejó el proyecto Clockspot, aunque él mismo estaba funcionando tan bien para ese entonces que Ho tuvo que trabajar en él varias horas a la semana. "Dice que trabaja 20 horas al mes, pero me parece que no lo he visto trabajar tanto", dijo Chen. (Desde entonces, la pareja se separó, pero permanecen en una buena relación). Ho pasó mucho tiempo viajando. Una vez incluso reparó el Clockspot, estando en el campamento base del Everest.

Pero su trabajo en optimización y programación no se detiene. Cuando quiso comprar una casa, escribió un software que podía alimentar información sobre casas en el mercado (ubicación, precios, estadísticas ambientales) y calcularía el valor de los bienes inmuebles a largo plazo. En primer lugar, el programa puso el condominio Nob Hill. El lo compró. Odia ir de compras, por lo que compró docenas de camisetas y pantalones de color caqui idénticos, una estrategia clásica de codificación que elimina la fricción al decidir las opciones de ropa.

Hace unos años, Ho decidió hacer culturismo, y se lanzó a un desafío de optimización particularmente loco: ¿cuánto puede balancearse? Llevaba pequeñas escalas con él a los restaurantes y pesaba porciones de comida. "Rastreó absolutamente todo lo que come en una enorme hoja de cálculo", dijo Chen. Ho tímidamente me mostró una mesa en el teléfono, un enorme monstruo donde se marcaban todos los ingredientes nutricionales para el gimnasio, a 3500 calorías por día. Fue al gimnasio e inventó formas de hacer ejercicio en condiciones normales. Si pasó una tubería de metal, se levantó. Si pasaba un contenedor de basura, lo levantaba por el borde.

Después de dos años de entrenamiento, terminó segundo en la competencia de culturista aficionado. Rebuscó en el teléfono para mostrarme una foto de ese período. En una fotografía, está aceitado y posa en calzoncillos frente a una ventana bañada por el sol. Parece una estatua griega. "Reduje el porcentaje de grasa corporal a 7", dijo. Él dice que fue agradable estar tan entusiasmado, pero en principio solo estaba interesado en ver si era posible.

Ho me mostró otra mesa. Fue una especie de instrucción sobre cómo vivir, una forma de optimizar no solo el cuerpo, sino cada segundo del tiempo. Decidió que quería hacer solo aquellas cosas en las que cada esfuerzo realizado produciría el máximo resultado. Hizo 16 líneas con encabezados que indicaban sus actividades. Hubo espíritu empresarial, programación, guitarra, StarCraft, compras y "chatear con amigos y familiares".

Y en las columnas estableció varios criterios: por ejemplo, si esta actividad es significativa, es solo un medio para un fin (importancia vital), es posible dominarla perfectamente, afecta varios aspectos de la vida a la vez. En las líneas "programación" y "emprendimiento", Ho señaló todas las casillas. En cuanto a la acción social, como "hablar con amigos y familiares", señaló que la marca de verificación "afecta varios aspectos de la vida". En la celda "amo perfectamente", escribió "tal vez".

Mucha gente encuentra esto loco. La idea de la posibilidad de sistematizar los componentes emocionales de la vida, o de considerar la actividad social como una fuente de ineficiencia, será desagradable para muchos. Ho es sociable y amigable, pero para algunos programadores, las personas con sus incesantes demandas pueden parecer un dolor de cabeza, y la comunicación social es otro problema que debe arreglarse. En los albores de las computadoras, los técnicos consideraron este problema con cierta preocupación. Konrad Zuse, un ingeniero civil alemán, creador de la primera computadora programable que realmente funciona, dijo una vez: "El peligro de convertir las computadoras en personas no es tan terrible como el peligro de convertir a las personas en computadoras".

Una tarde, pensé en este tema, sumergiéndome en un hilo de discusión sobre Quora, en el que docenas de programadores compartieron historias sobre la automatización de los matices de la vida cotidiana. También hubo algunas historias inquietantes, aunque interesantes, sobre la transformación de la comunicación social en tareas del tipo "sintonizado y olvidado". "Recibí quejas de familiares y amigos sobre el hecho de que" nunca nos escribes ", escribió un programador que creó un programa que enviaba al azar todos los textos generados automáticamente a todos. El texto comenzó con la frase apropiada "Buenos días / tarde / noche. Hola, {nombre}, quería llamarte ", y luego se agregó el final" Espero que estés bien / estaré en casa a fines del próximo mes, te amo / Hablemos la próxima semana cuando estarás libre ".

En un hackathon en San Francisco, un programador de mediana edad me mostró con entusiasmo una aplicación que creó que enviaba mensajes románticos automáticos a un compañero. "Cuando no tienes tiempo suficiente para pensar en ella", sí, sugirió que la pareja experimentará una deficiencia emocional, "el programa hará todo por ti". Tales intentos de aumentar la efectividad de la socialización se encuentran en todas partes, hasta la mayor empresa tecnológica. Gmail tiene una función de autocompletar que nos anima a acelerar su escritura utilizando un algoritmo que compone nuestras respuestas por nosotros.

Los lingüistas y psicólogos han notado durante mucho tiempo el valor de los actos fatales de comunicación : varias declaraciones emocionales utilizadas por las personas en la vida cotidiana para que otros se relajen o comiencen a escucharlas: "¿Cómo estás?", "Tiempo terrible, no es cierto", "¿Qué estás haciendo en la noche?". Y cuanto más hablaba con los programadores, más me encontraba con historias sobre personas que pensaban que no era peor que la arena en un mecanismo.

Christopher Thorpe, un veterano con más de media docena de compañías tecnológicas detrás, me contó sobre el "ingeniero increíblemente talentoso" con el que trabajó una vez que se ajusta a esa definición. “Estaba muy molesto cuando bromeábamos en las reuniones, porque era una pérdida de tiempo. “¿Por qué pasamos cinco minutos bromeando con 20 empleados de oficina? Esto es horas de trabajo ". Todos se ríen, pero él cree que es una pérdida de tiempo valioso ". ¡Una broma tomó el tiempo de 20 personas! Este tipo inmediatamente comenzó a quejarse con sus matemáticas: "Cinco minutos, 20 veces, resulta que pasaste media hora hombre bromeando".

En principio, simpatizo con el deseo de los codificadores de optimizar la vida cotidiana, ya que yo mismo lo disfruté. Hace tres años comencé a trabajar en un libro sobre la psicología de los programadores, por lo que decidí reanudar mis clases de programación, en algún momento de la década de 1980, incursioné en el Commodore VIC-20, y profundizar en lenguajes de programación modernos como Python y JavaScript. Y cuanto más jugaba con los programas, más comencé a notar ineficiencias en mi rutina diaria. Por ejemplo, mientras escribía un libro, noté que a menudo recurro a diccionarios en línea. Eran útiles, pero tan lentos que después de cada búsqueda, los resultados se cargaron durante dos segundos. Decidí escribir mi diccionario para la línea de comandos usando un sitio que ofrecía una API para diccionarios. Después de jugar con Python en la mañana, compilé un script. Ingresé la palabra en la línea de comando, y con la velocidad del rayo recibí sinónimos y antónimos. Todo estaba sin barnizar, más o menos, verde sobre negro. Pero qué tan rápido funcionó: no es necesario esperar a que el navegador cargue todo este lío de secuencias de comandos de seguimiento y cookies que obstruyen mi disco duro.

Por supuesto, esto no me ahorró una cantidad de tiempo increíble. Si, por ejemplo, busqué sinónimos en promedio un par de veces por hora, y suponiendo (bastante generosamente) que mi creación me ahorró dos segundos por búsqueda, entonces probablemente ahorré alrededor de una hora al año de expectativas molestas. Apenas valió la pena. Sin embargo, esta velocidad me calentó el alma. Cada vez que buscaba un sinónimo, los resultados instantáneos me daban placer.Inyecté una droga de eficiencia en mi vena, y fue agradable.

Antes de que pudiera mirar hacia atrás, me volví adicto a escribir código para pequeñas tareas rutinarias. Hice un programa para borrar los subtítulos descargados de YouTube; otro para evitar y archivar enlaces que publiqué en Twitter; uno que revisó el sitio web de la escuela donde mi hijo está estudiando, y le envió un mensaje de texto cuando su maestro presentó su tarea allí (estaba cansado de actualizar constantemente la página).

Muchos de mis programas estaban mal escritos y apenas funcionaban; Elegí las formas más simples y el método de fuerza bruta. Al estudiar el código de programadores realmente experimentados, me sorprendió su elegancia. Podría escribir una función enorme y fea para filtrar datos, y luego ver cómo un programador experimentado trataría con un par de líneas de código (más rápido). Los periodistas a veces admiran la enorme base de código de Google - 2 mil millones de líneas - considerando esto como un reflejo de su poder. Pero no sorprenderás a los programadores con volúmenes. A veces, los programadores más productivos son aquellos que reducen el tamaño del código, lo compactan y lo acortan. Después de pasar tres años en Facebook, el programador Jinghao Yan agradeció su contribución a la base del código de la compañía y descubrió que era negativa. "Agregué 391,973 líneas y eliminé 509,793 del repositorio principal", escribió en uno de los hilos de discusión de Quora.(Resulta que muchos programadores están sentados en Quora). "Entonces, si programé 1000 horas al año, ¡resulta que eliminé 39 líneas por hora!"

La programación se asemeja a la poesía, donde la brevedad del texto le da fuerza. "En un poema bien hecho, cada palabra tiene un significado y un propósito", escribió el programador y escritor Matt Ward en un ensayo para la revista Smashing. "El poeta puede pasar horas buscando la palabra correcta o dejando a un lado el poema durante unos días, y luego echarle un nuevo vistazo". Entre los famosos poemas de los modernistas, inspirados por la brevedad del antiguo método de versificación, el haiku, hay una obra "En la estación de metro" de Ezra Pound :
La aparición de estos rostros en la multitud;
Pétalos sobre una rama húmeda y negra.

[De repente, la aparición en la multitud de estos rostros;
Pétalos en una rama negra por la humedad.]
"En dos líneas y catorce palabras", dice Ward, "Pound pinta una imagen vívida, llena de significado, y solicita la discusión de científicos y críticos. Esto es eficiencia ".

En 2016, me reuní con Ryan Olson, un programador líder de Instagram. Su equipo acaba de implementar la función Historia. Fue una actualización masiva. Olson me dijo que estaba conduciendo por San Francisco completamente exhausto unas horas después de lanzar la actualización, y vio cómo la gente ya había comenzado a usarla. "Fue una sensación realmente genial", dijo. - Anoche estaba en el gimnasio, miré a mi alrededor y vi a alguien usando este producto. No sé si hubo otra forma en la historia de llegar a tanta gente ", o cuando" tan poca gente determinó las sensaciones de tanta gente ".

Una cosa es optimizar tu vida. Pero para muchos programadores, la verdadera droga está cambiando la vida del mundo entero. La escala misma trae alegría; Es fascinante cómo su nuevo código de repente gana popularidad explosiva, de dos personas a cuatro, de cuatro a ocho, y de ellos a toda la población de la Tierra. Has acelerado algunos aspectos de la vida, como intercambiamos mensajes, pagamos facturas o compartimos noticias, y ves cómo las olas divergen cada vez más.

A menudo, así es como se hacen las fortunas en el mundo del software, por lo que esto va acompañado de nerviosismo de poder y riqueza. Los capitalistas de riesgo invierten en proyectos que, en su opinión, crecerán como malezas, y los mercados los recompensan. Y esta interconexión de motivaciones da a los programadores de Silicon Valley que aman la eficiencia no solo el placer a gran escala, sino también un deseo obsesivo de lograrlo.

La élite de Silicon Valley a menudo desprecia las cosas que no se pueden escalar. Las pequeñas cosas pueden parecer débiles. Varias veces en conversaciones con los principales técnicos, mencioné la compañía de Jason Ho, explicando que me parecía una empresa inteligente y encantadora, un gran ejemplo de un empresario que se encontró con un problema sin resolver. Pero ellos fruncieron el ceño. Para ellos, Clockspot era un "negocio relacionado con el estilo de vida": en su jerga significa una idea que nunca volará lo suficientemente alto. Dicen que este es un buen producto, pero Google puede copiarlo y quitarle su negocio en un segundo.

Obviamente, obtenemos nuestras ventajas del deseo nervioso e instintivo de los programadores de acelerar todo y crear abundancia. Pero el deseo implacable simultáneo de lograr eficiencia a escala tiene efectos secundarios. El servicio de noticias de Facebook acelera no solo la visualización de fotos por parte de amigos, sino también la difusión de información errónea. Uber optimiza la búsqueda de taxis para pasajeros, pero cambia la economía de los taxistas. Amazon está preparando la entrega electrónica de aviones no tripulados que vuelan por las calles, sin tiendas.

Quizás nosotros, las personas cuyas vidas están mejorando tan implacablemente, finalmente estamos comenzando a notar estas consecuencias. Nos estamos quejando cada vez más de las "grandes compañías tecnológicas", nos damos cuenta de cómo eluden los problemas civiles, cómo son fascinantes y furiosos. No sabemos qué hacer con él; nos gusta la conveniencia, la forma en que el software constantemente afirma que podemos hacer más invirtiendo menos. Pero las dudas se acumulan gradualmente.

Quizás sea desagradable para nosotros porque en nuestra vida cotidiana también absorbemos el romance de la hiperoptimización. Mire las calles de las ciudades: los empleados escuchan podcasts a una velocidad y media, corriendo al trabajo, asegurándose con la ayuda de Apple Watches de que dan sus 10,000 pasos al día, mirando el correo de trabajo debajo de la mesa en el café. Nosotros mismos nos hemos convertido en codificadores, ajustando cada engranaje de nuestras vidas para eliminar la fricción. Como cualquier buen programador, podemos acelerar increíblemente las máquinas de nuestras vidas, aunque no está claro si seremos más felices con esto.

Source: https://habr.com/ru/post/446680/


All Articles