¿Cuáles son algunos buenos hábitos de la vida real que la programación le da a la gente?

Persistencia para resolver problemas ajenos a las personas : cuando algo sale mal, es porque algunas X han causado el comportamiento incorrecto. Puede probar subsistemas para reducir el posible espacio de X, hasta que finalmente encuentre la causa raíz. Los programadores no confían en el milagro o la suerte para que algo se arregle solo.

Pensamiento lógico : este viejo chiste tiene algo que todavía suena cierto para los programadores: un accidente y un ingeniero, gerente y programador
Las computadoras usan una lógica estricta, y no hay forma de “engañar” a una computadora para que haga algo. Tienes que hacer lo que probablemente hace que la computadora haga eso. Los programadores están acostumbrados a pensar de manera muy estrictamente lógica y siempre probarán que X realmente causa Y en el contexto de C, para la mayoría de las situaciones. No es fácil para los medios de comunicación engañar o lavar el cerebro de un programador.

Capacidad de abstracción : los programadores, o más bien los informáticos, están acostumbrados a pensar en abstracciones. La economía es un sistema de múltiples agentes. El lenguaje humano es un protocolo de comunicación. Leer es extraer semántica de literales. Escribir es representar la semántica en literales. Encontrar dónde está mi clave es un problema de búsqueda (muchos algos y heurísticas para resolver esto de manera eficiente). Organizar elementos en mi habitación es un problema de estructura de datos. El trabajo en equipo es un sistema de igual a igual (no es un sistema maestro-esclavo). Al pensar de esta manera, podemos aplicar marcos de solución comunes a tipos de problemas comunes.

Optimización de la vida : a partir de la experiencia con los sistemas y el rendimiento, siempre veremos formas de optimizar las cosas en la vida, como:
– Nombrar y reordenar nuestros artículos reales en su habitación o nuestros artículos digitales para una inserción y búsqueda más eficientes
– Medir el rendimiento (no la longitud) de las colas de comestibles para un tiempo de espera mínimo y optimizar la ruta para las compras de comestibles durante un tiempo mínimo
– Reorganizar tareas para que coincidan con el nivel de energía del día para maximizar la producción
etc.
Probablemente solo los programadores con cierta personalidad hacen esto.

Apreciación por la tecnología que funciona : es la forma más difícil de crear tecnología que parece funcionar y que las personas dan por sentado. Los más notables son aquellos con errores de usabilidad, por lo que las personas erróneamente “sienten” que el sistema es complejo. Al trabajar en tecnología, podemos apreciar cuán difícil (y gratificante y subestimado) es hacer algo tan transparente que las personas ignoren por completo lo que lo hace funcionar (como la red eléctrica, Internet, comunicación inalámbrica, etc.).

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 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

PEREZA !!!

Ahora, esto no necesita limitarse solo a tareas relacionadas con la computadora. Con el uso de Arduino / Raspberry Pi, etc., es fácil automatizar muchas tareas a su alrededor, lo que le permite concentrarse en cosas que realmente importan, como la familia y los amigos.

Si está dispuesto a dar el salto, aquí hay un tutorial realmente bueno: Cómo construir un sistema de automatización del hogar con Raspberry Pi y Arduino

Búsqueda binaria de árboles.

Al igual que un programa usa la búsqueda binaria en un árbol que acelera la búsqueda de cosas, uno puede seguir mentalmente este paradigma en la toma de decisiones. En lugar de pensar secuencialmente, uno aprende a dividir y conquistar. El cerebro funciona como un procesador paralelo, después de todo.

Aquí está mi pequeño ejemplo. Tuve la costumbre de romper mi código cuando tuve que dejarlo.

Por ejemplo, al salir del trabajo, simplemente escribiría un breve comentario, pero no un comentario de programación real, en el código en el que estaba trabajando. Quiero decir, escribiría algo como ‘iniciar la implementación de kdtree’ pero sin el ‘//’. Luego, cuando volví al proyecto, incluso después de mucho tiempo, intentaba compilar y el IDE me llevaba directamente al error y recordaba dónde estaba y qué estaba haciendo.

De todos modos, comencé a usar la técnica en la vida diaria. No estoy muy distraído, por lo que haría cosas como poner mis llaves en mis zapatos para no olvidarlas (mis llaves, no mis zapatos), voltear mi reloj para recordarme recordar algo, colocar apresuradamente notas garabateadas en mi teclado, etc.

– Espera siempre lo inesperado. Hay innumerables cosas que simplemente podrían pasar desapercibidas.

– Asegúrate de ver las cosas como son y no como crees o quieres que sean.

– Cuando encuentre problemas para tomar decisiones en la vida, tome un papel y un bolígrafo y anote los hechos. Piensa solo en términos de esos hechos y no dejes que las emociones intervengan. Funciona la mayor parte del tiempo.

– La confusión se produce cuando una situación no se entiende correctamente. El truco de lápiz y papel mencionado anteriormente funciona siempre.

– Siempre tiendes a pensar un poco profundo. Ves cosas que tus amigos no pueden. Incluso se te ocurren buenas suposiciones sobre por qué las cosas son como son.

– Piensas dos veces antes de tomar una decisión y te vuelves realmente bueno analizando la situación.

– Sabes lo que es importante y lo que no.

– Sabes que siempre es mejor hacer una pausa y pensar antes de saltar directamente a algo.

– Nunca prometas algo que no entiendas.

– Después de todo, las cosas rotas en la vida no son tan difíciles de arreglar. No siempre es tan complejo y difícil como parece.

– Al final del día, es la sensación de logro y no el sueldo lo que te hace feliz.

Y aquí está el más importante de todos.

Te vuelves realmente bueno para reconocer la mierda y las personas que lo hacen.

Lectura entre líneas : la documentación a menudo es incompleta, apurada por alguien que odiaba escribir y desinfectada para ocultar cualquier desacuerdo en el grupo. Las especificaciones son sobre lo que las personas pensaban que querían cuando hablaban de ello, procesadas a través de un intermediario y desinfectadas de cualquier cosa despectiva que se pudiera decir sobre un producto de la competencia o un cliente potencial. El código rara vez explica por qué está allí, solo lo que hace. Para sobrevivir, aprende a mirar lo que no se dice y lo que, por lo tanto, debe cuestionarse.

Inspirado en Rob Pike,

  • A veces no toma más que unas pocas oraciones, seguidas de un avergonzado “No importa, veo lo que está mal. Lamento molestarte”.
  • Tal es la informática moderna: todo lo simple se vuelve demasiado complicado porque es fácil de jugar; todo lo complicado sigue siendo complicado porque es difícil de arreglar.
  • Menos es exponencialmente más.
  • Romper la función. Usa el lenguaje. No luches contra eso.
  • Hay demasiada configuración. Hay demasiado estado Hay demasiadas opciones Hay demasiados archivos de puntos. Las cosas deberían funcionar.

Para mí, mantendrá las cosas de manera eficiente y donde más se espera que estén.
Y también saber que solo porque algo está funcionando no significa que sea eficiente.

La gente piensa que los programadores son geeks, pero el hecho es que tienen un buen dominio de un campo que la mayoría de los estudiantes considera complicado. Ser bueno en la programación asegura que nunca se quedará sin trabajo porque este es uno de los campos de carrera más buscados en estos días. Además, los programadores aprenden algunos buenos hábitos que son bastante difíciles de adoptar para la gente común. Algunos de ellos se dan a continuación, ¡lee y obtén información sobre lo mismo!

No dependen de nadie

Lo que han aprendido en su carrera es que si algo no funciona como debería, se debe a su error. Tampoco culpan a Dios ni confían en la suerte. Creen en resolver sus problemas ellos mismos.

Pensamiento lógico

No hay forma de engañar a las computadoras para que realicen una tarea específica, por lo tanto, los profesionales que pasan la mayor parte del tiempo con estas máquinas tampoco pueden ser engañados. Son pensadores lógicos, y nadie puede lavarles el cerebro.

Capacidad para conectar todo

Sea un problema matemático o una situación de la vida real, si le pide a un programador una solución, conocerá la salida que tiene una perspectiva totalmente diferente. Incluso son bastante eficientes para desglosar las tareas y completarlas con perfección, de la misma manera que proceden a ejecutar los módulos de sus códigos.

Mejoramiento

Desde tratar con máquinas hasta interactuar con humanos, realizan de manera similar todas las tareas. Proceden de manera específica para completar cada tarea. Por ejemplo, si les pide que compren comestibles, primero planearán la ruta completa de la misma manera que planean sus códigos.

Apreciación por la tecnología.

Ya sea un pequeño circuito o un gran transformador; ellos aprecian a cada uno de ellos por igual. Al estar en una profesión donde los errores minúsculos pueden arruinar todo el software, se dan cuenta con mayor frecuencia de cuánto esfuerzo se necesita para crear incluso un instrumento pequeño. Por lo tanto, están más inclinados hacia la tecnología.

Más abierto a los desafíos.

Si le dice a un programador que algo es imposible de lograr, entonces se asegurará de que cambie su percepción. Están más abiertos a los desafíos que otros porque es su profesión presentar algo inesperado a las personas.

Tienen una velocidad de escritura excelente y conocimientos de teclas de acceso directo

Como pasan la mayor parte de su tiempo con sus queridas máquinas, son conscientes de cada tecla de acceso directo y su escritura es increíblemente rápida.

Y, la mejor parte es que se vuelven realmente buenos para identificar a las personas que son buenas en nada más que crear un desastre. ¡Así que puedes aprender muchas cosas de los programadores, pero no puedes meterte con ellos!

No sé si ya se ha dicho, pero desde que entré en la codificación en general me he convertido en un mejor mecanógrafo. Antes de aprender a codificar la escritura era bastante tedioso. Siempre tenía que mirar el teclado para escribir algo.

Ahora puedo escribir mirando directamente a la pantalla y, a veces, mirando a otro lado. No es un rendimiento perfecto, pero es mejor que lo que estaba haciendo antes.

Paciencia. Nunca te enojes ni te enfades, todos tratamos de gritarle a los insectos pero nunca desaparecen solo porque estás enojado. Domina tu temperamento y te calma con el tiempo.

Nunca, nunca te rindas. Nunca. Incluso si no lo haces bien la primera vez. No te detengas Sin embargo, odiarás tu código anterior (generalmente es bueno).

Se tenaz. O, en las palabras inmortales de Apollo Creed, necesitas “El ojo del tigre”.

Cuando compro un nuevo lápiz / cuaderno, instalo un nuevo software de texto o cliente de chat, lo primero que escribo / escribo es casi siempre, ¡Hola , mundo!
(Solo un hábito, nada bueno en realidad).

– Si tiene claro que es posible, no deje de seguir trabajando duro
– Todo lo que se haga hoy siempre se puede optimizar más tarde.
– Resuelva el problema primero y luego encuentre la mejor solución después

Sea paciente, va a funcionar.


Comunicaciones

Si quieres que alguien haga exactamente lo que piensas, debes
1) aprender su gramática en primer lugar,
2) transforma tu requerimiento a instrucciones en su idioma,
3) si su salida es incorrecta, primero verifique su programa.

Programación = pensamiento ^ 2

Al igual que cualquier medio creativo, le brinda el marco, y más importante, el coraje, para convertir las cosas en su cabeza en cosas que realmente puede ver y usar.

Y luego, rehacer esas cosas, ya que vuelve a influir en su pensamiento.

La programación te ayuda a estructurar circuitos de retroalimentación mental positiva.

Le permite tener una dialéctica productiva y organizada en su propio inicio.

Como yo mismo soy programador y desarrollador. Podría decir que se desarrolla …

El pensamiento lógico, la resolución de problemas, el análisis, etc., son los básicos que todos conocen como se explicó anteriormente. Pero contaré algunas cualidades más profundamente conectadas con tu vida. No sé si les sucede a todos los programadores, pero me pasó a mí y en parte a mis coprogramadores.

Hace una práctica: sabemos la programación se preocupa mucho por los algoritmos. Los algoritmos tienen solo dos decisiones verdaderas o falsas. Es muy opuesto a la vida real. En la vida real, tenemos muchos resultados para una condición como sí, si es levemente sí, si es razonable, si es malo, así. La programación me hizo pensar como verdadero o falso. tan práctico

Hace que uno sea simple e inteligente, ser honesto, ser siempre atrevido y muchas características.

Christopher Reiss hizo un gran resumen. Me gustaría agregar otro.

  • El tiempo es dinero. Algo que funciona ahora es mucho mejor que algo “perfecto” el próximo año. Siempre puedes mejorar o mejorar más tarde.