Espero que las personas que hayan leído esto antes me perdonen por volver a publicarlo. No lo escribí, pero resuena profundamente con lo que creo sobre un importante beneficio cognitivo de la programación:
Ya no considero pensar que estoy en lo cierto con respecto a algo en realidad.
Ahora es muy fácil para mí entretener la idea de que puedo estar equivocado, incluso cuando siento que estoy en lo cierto. Incluso si he sido bastante contundente sobre algo que creo, puedo dar marcha atrás muy rápidamente ante la evidencia contradictoria. No me avergüenza admitir que me equivoqué con algo.
Todo eso provino de décadas de trabajar en una disciplina que demuestra sin piedad que te equivocas una docena de veces al día, pero que también requiere que creas que tienes razón si vas a hacer algún progreso.
– ¿Qué buenos hábitos de la vida real te ha dado la programación?
Para mí, la cita anterior encaja perfectamente con esto: la respuesta de Marcus Geduld a ¿Por qué nos frustramos al aprender algo?
La programación también me ha enseñado a examinar cada parte de un sistema en busca de fallas, y he notado que este hábito se filtró en mi vida sin codificación. Me ha hecho sospechar mucho de ciertos tipos de suposiciones, ya que mis suposiciones a menudo se prueban falsas cuando estoy depurando. (¡A veces me sorprende el hecho de que muchas personas no se enfrentan constantemente, todos los días, con sus errores!)
Por ejemplo, mi esposa (que no es una programadora extremadamente inteligente) a menudo me pide que la ayude a encontrar algo que extravió:
ESPOSA: ¡He buscado por todas partes , pero no puedo encontrarlo!
ME: ¿Revisaste en el vestíbulo?
ESPOSA: Si.
ME: ¿Te registraste en el baño?
ESPOSA: Si.
ME: ¿Te registraste en la habitación?
ESPOSA: No, pero sé que no lo dejé allí.
En ese momento reviso el dormitorio y, a veces, encuentro lo que sea que esté buscando.
No es que sea más inteligente que mi esposa. Es que he aprendido a desconfiar de esa profunda sensación de conocimiento . Muy a menudo, he “sabido” que una función en particular no tiene errores, pero luego resulta ser defectuosa.
Estoy muy, muy acostumbrado a dividir un problema en subproblemas más pequeños y luego dividirlos en problemas aún más pequeños. Y mi objetivo, al hacer esto, es hacer que los pequeños “módulos” funcionen perfectamente para que pueda olvidarlos.
En general, soy adicto a la resolución de problemas. Raramente pienso: “No es gran cosa. Simplemente lo toleraré”. Por ejemplo, en el edificio donde trabajo, hay seis ascensores, y cualquiera de ellos podría ser el que termine tomando para llegar al quinto piso, que es donde trabajo.
Curiosamente, los botones se colocan arbitrariamente en cada elevador. En el elevador 1 están a la izquierda; en Elevator 2, están a la derecha, etc.
A medida que cada persona entra, él o ella tiende a detenerse en la puerta por un momento mientras busca los botones, y eso conduce a la congestión. Hay poco que pueda hacer sobre el problema general (¡mal, mal diseño de la interfaz de usuario!), Pero es totalmente inaceptable que tenga que hacer una pausa en la puerta.
(No es inaceptable porque es una experiencia horrible. Es inaceptable porque es un problema solucionable, por lo que debe resolverse. En otras palabras, la programación me ha inculcado un cierto tipo de estética sobre la vida).
Entonces, con el tiempo, hice una pequeña tabla de dónde se colocaron los botones en cada elevador y pasé algún tiempo memorizando la tabla.
Este tipo de resolución continua de problemas es una segunda naturaleza para mí, y creo que proviene principalmente de mi experiencia como programador.
No tengo miedo de sumergirme en sistemas que no entiendo, ya que tengo que hacerlo constantemente en el trabajo. A menudo me dicen que arregle el código que no escribí y que nunca he visto, y podría tener miles de líneas de largo. Así que me he acostumbrado a estudiarlo lenta y patentemente, a probarlo, etc.
También me he acostumbrado a que mi cerebro se sobrecargue. Llego a un punto donde hay demasiadas cosas que estoy tratando de comprender mentalmente, y tengo que tomar un descanso. He aprendido cómo hacer esto de manera eficiente: es mejor si hago algo físico, como dar un paseo rápido por la oficina.
Y he aprendido a hacer “descargas cerebrales”. Es común para mí tomar papel o una pizarra blanca, hacer una lista, hacer un dibujo, garabatear un cuadro, hacer círculos, tachar, dibujar flechas que señalen cosas. Y ahora hago esto tan a menudo en la vida civil como lo hago cuando estoy codificando. Si estoy a punto de irme de vacaciones, inevitablemente compondré varias listas de lo que traeré conmigo, lo que necesito hacer antes de irme, los lugares que quiero visitar, etc.
Finalmente, aprendí de la programación a ser un comunicador exhaustivamente detallado. Las computadoras lo toman al 100% literalmente, por lo que cada suposición que haga sobre lo que sabe puede arruinarlo. Si una computadora fuera una persona y le dijera: “Por favor, ponga un poco de mantequilla en el pan”, podría poner una enorme barra de mantequilla sin derretir en medio de una rebanada. Para obtener los resultados que quería, tendría que decir: “Por favor, unta la mantequilla de manera uniforme en un lado del pan …”
Esto, de nuevo, es una segunda naturaleza para mí, y he notado que afecta la forma en que me comunico con las personas, especialmente en la escritura. Aquí, por ejemplo, es cómo un no programador podría enviarme un correo electrónico sobre una reunión.
TRABAJADOR: Recuerda las 3 en punto.
Lo siento. ¿A qué te refieres?
TRABAJADOR: ¡Tenemos esa cosa a las 3!
YO: Esa cosa?
TRABAJADOR: Esa reunión. Sobre la planificación del proyecto.
YO: ¿Qué proyecto?
TRABAJADOR: El de diciembre.
YO: Oh, está bien. Gotcha ¿Dónde está la reunión?
TRABAJADOR: El mismo lugar de siempre.
Yo: No estoy seguro de lo que quieres decir. Tenemos muchas reuniones en muchos lugares.
TRABAJADOR: Me refiero a las reuniones habituales de los lunes …
Así es como tiendo a comunicar este tipo de cosas:
Yo: hola Esto es solo para recordarle la reunión de 3 pm a 4:30 pm hoy (lunes 23 de septiembre) en la sala 405, a la izquierda de la escalera, junto al enfriador de agua. Discutiremos el proyecto de diciembre. Antes de venir, revise el documento adjunto, prestando especial atención al elemento 5 en la página 17 …
Ver también la invitación a la fiesta de Marcus Geduld en Aspie’s Delight.
Debo señalar que todos estos hábitos tienen inconvenientes. Asumir que siempre puede tener un error lo ralentiza; asumir que su instinto de que no dejó su billetera en el dormitorio es correcto lo acelera, y a menudo tiene razón; resolver cada pequeño problema requiere energía y puede dificultarle soportar problemas irresolubles; y ser demasiado detallado en las comunicaciones puede abrumar e irritar a las personas. Intento ser consciente de todas esas trampas, pero a veces fallo. Y cuando fallo, lo anoto en mi diario de fallos: Fallos: en cosas que hice mal