¿Cómo mantiene el enfoque cuando un aspecto particular de la programación tarda más de 10 segundos en completarse? [cerrado]

141

Me cuesta mucho concentrarme en lo que estoy haciendo (en cuanto a la programación) cuando algo (compilación, tiempo de inicio, etc.) lleva más de unos pocos segundos. Como anécdota, parece que el umbral es de unos 10 segundos (y recuerdo haber leído sobre un estudio que decía lo mismo, aunque no puedo encontrarlo ahora). Entonces, lo que generalmente sucede es que hago un cambio y luego ejecuto el programa para probarlo. Eso toma alrededor de 30 segundos, así que empiezo a leer otra cosa, y antes de darme cuenta, han pasado 20 minutos, y luego toma (¡si tengo suerte!) Otros 10 minutos más para lidiar con el cambio de contexto para volver a la programación .

No es una exageración decir que algunas cosas que deberían llevarme minutos, literalmente, tardan horas en completarse.

Tengo mucha curiosidad sobre lo que hacen otros programadores para combatir esta tendencia (¿o si soy único y no tienen esta tendencia?). Las sugerencias de cualquier tipo son bienvenidas: desde "siéntese en sus manos después de presionar el botón de compilación", hasta trucos mentales, hasta "si tarda 30 segundos en iniciar algo para probar un cambio, entonces algo está mal con su proceso de desarrollo ! "

Jer
fuente
24
Tengo un problema similar (de ahí este comentario :)). Descubrí que lo que realmente ayuda es menos café por la mañana, o ninguno en absoluto. También trato de trabajar por la mañana y programar reuniones por la tarde. Espero que ayude ... oh, mira un gatito.
DevSolo
77
Se trata de una forma de procrastinación: el enemigo de los trabajadores del conocimiento de todo el universo.
Aditya MP
130
Arrrg !! Lo estoy haciendo ahora, gracias por el recordatorio, de vuelta al trabajo.
mjhm
8
Normalmente paso este tiempo en sitios de SE, leyendo preguntas, respondiendo lo que puedo para ayudar a otros desarrolladores y aprendiendo algo nuevo en el proceso.
Bernard
66
Debería comenzar a desarrollar para SharePoint b / c allí en realidad tiene que esperar 20 minutos :)
kev

Respuestas:

117

Escribí una pequeña utilidad de línea de comandos llamada 'alerta' que hará que el ordenador emita un sonido / reproducir un sonido / etc Entonces, cuando tengo una larga comando para ejecutar tales como make, corro make; alert. Donde pueda, también haré que tome una discusión para que haga un sonido diferente dependiendo de la discusión. Por lo tanto, puedo hacer make; alert $?y sabré a) que la compilación está terminada yb) pasó o falló. No tienes que ser tan elegante con eso; Solo un echo -e "\a"puede ser suficiente.

Si desea ser realmente elegante / molesto, use un paquete de texto a voz y active una ventana emergente de diálogo.

La idea principal aquí es interrumpir su distracción tan pronto como se complete la tarea relacionada con el trabajo.

retroceder
fuente
66
Ejemplo rápido:MSG="back to work" && xmessage -buttons ok -default ok -nearmouse "${MSG}" 2> /dev/null
sakisk
66
@faif En ese caso, desea usar en ;lugar de &&. Su segundo ejemplo solo se ejecutará show_messagesi tiene makeéxito, que no es exactamente lo que desea. Para ser claros: me gusta el ejemplo que diste, solo soy exigente con los detalles de implementación. ;)
retroceder el
2
Escribí un programa de línea de comando rápido que me envía un correo electrónico cuando una determinada tarea está terminada, así que si salgo de la habitación para hacer algunas cosas de TI en mi tiempo de espera, mi teléfono me emitirá un pitido para decirme que regrese a mi oficina y termine lo que estaba haciendo.
Phil
77
+1 por distraerte de la distracción: ¡lucha contra el fuego con fuego! ¡De esa manera no te despiden!
corsiKa
1
Ubuntu tiene una buena configuración de alias de alerta en .bashrc. Depende de libnotify, pero si está instalado, puede hacerlo command; alerty le dará una alerta de escritorio cuando termine, especificando qué comando fue el que terminó. Realmente útil para largas compilaciones o pruebas.
Leo
104

Tengo el mismo problema, y ​​la solución para mí ha sido pasar el tiempo haciendo algo que no te dejará atrapar. Para mí, esto generalmente es (1) llenar una botella de agua o (2) pararse y dar un paseo de 30 segundos por la oficina para estirar las piernas, que de todos modos necesitan el movimiento. Puede perderse navegando en Internet; rara vez te pierdes caminando por tu propio cubículo.

eykanal
fuente
37
+1 para dar un paseo / estiramiento rápido. Es algo que todos deberíamos hacer con más frecuencia.
Jon Purdy
2
Esto funciona bien en combinación con mi respuesta ... configure sus altavoces lo suficientemente alto como para escucharlos al otro lado de la habitación en su caminata para que pueda acortarlo. (. Tales como que build 10 minutos que termina después de 30 segundos debido a un error de sintaxis)
retracile
1
+1, haz algo que no tome más de 10 segundos. Bebida. Agarra un chicle. Mira por la ventana, si tienes suerte, algo podría estar sucediendo afuera. Si estás escuchando música, revisa lo que viene en tu lista de reproducción o agrega algunas pistas.
Laurent Couvidou
2
También agregaré, use el baño :) A menudo, cuando me levanto por primera vez después de una larga sesión de codificación, encuentro que realmente necesito usar la tubería, como dicen, como dicen. Use estos descansos para cuidarse.
eykanal
44
Hasta que hables con el desarrollador en el próximo asiento / cubo ... ahora es un chat de 20 minutos en lugar de 20 minutos de navegación.
Steven Evers
29

Haz algo por tu salud:

Póngase de pie, aléjese de su computadora y haga algunos ejercicios de estiramiento de manos y brazos. Esto llevará de 2 a 5 minutos como máximo. Tu futuro yo no sufriendo de RSI te lo agradecerá.

Además, con respecto al descanso de 2-5 minutos, lea la técnica de Pomodoro . Esto se basa en la idea de tener breves descansos frecuentes para distraerse de su tarea actual y dejar que las cosas se hundan un poco. Es un descanso lo suficientemente corto como para no perder su línea de pensamiento por completo, pero lo suficiente para darle un respiro a su cerebro.

ZweiBlumen
fuente
10
Y ni siquiera tiene que levantarse; solo cerrar los ojos para descansarlos durante 30 segundos ayudará a mantenerlos húmedos y menos cansados.
JBRWilkinson
1
Esta es una gran respuesta (ayuda a quemar la energía nerviosa) y la técnica de pomodoro puede funcionar si eres lo suficientemente disciplinado.
DevSolo
1
+1. Tener un escritorio de altura ajustable también ayuda. He descubierto que cuando estoy de pie soy mucho más productivo ya que durante esas pausas cortas (compilación, etc.) paso un poco pensando en lo que estoy trabajando y tan pronto como la tarea está completa, voy De vuelta al trabajo. Tal vez solo soy yo, pero me gusta moverme mucho cuando pienso y el ritmo ayuda.
Paperjam
1
Nunca he oído hablar de Pomorodo, pero siempre he apoyado la idea de que necesita tomar descansos ocasionales para que su mente más consciente descanse y permita que sus quemadores de espalda resuelvan algunas cosas por un tiempo. Hay una razón por la que pasan muchos momentos a-ha en la ducha y el baño.
Erik Reppen
25

El desarrollo es un proceso creativo. No puede ser constantemente productivo, especialmente si hay muchas distracciones en su oficina. Es por eso que la prueba de Joel sugiere condiciones de trabajo silenciosas.

Joel Spolsky también explica lo que significa "no estar en la zona" . Cada vez que algo te impide hacer tu trabajo, tienes que pasar diez minutos, a menudo más para volver a la zona y volver a ser productivo.

Hay muchas distracciones:

  • Una llamada telefónica de tu esposa,
  • Una llamada telefónica a la persona de negocios en el espacio de oficina cercano al suyo,
  • Un colega que te pide ayuda,
  • Al tener hambre,
  • Tener problemas personales
  • Tener que trabajar en código heredado escrito por un desarrollador sin experiencia hace diez años y nunca refactorizado,
  • Tener una PC lenta o una conexión a Internet lenta,
  • Tener un largo proceso de compilación,
  • etc.

No hay nada que ver con eso. Lo único que puedes hacer es eliminar las distracciones:

  • No hay teléfonos en tu oficina,
  • Condiciones de trabajo tranquilas.
  • Computadora rápida y acceso a Internet,
  • Proceso de compilación rápido
  • etc.

En su caso, si es el compilador lo que lo distrae, intente reducir el tiempo de compilación:

  • Reducir el tamaño de su programa (algunos IDE, por ejemplo, le permiten descargar algunos proyectos de una solución, lo que reduce considerablemente el tiempo de compilación),
  • Usando compilaciones nocturnas y compilando menos durante su trabajo,
  • Comprar una máquina más rápida (si no hay nada más que hacer),
  • etc.
MainMa
fuente
9

Creo que seré yo quien lo diga, pero deberías sentarte allí y esperar a que termine.

Necesita volver a entrenarse para no sentir la necesidad de estar constantemente y hacer cosas activamente. Este es un problema muy perjudicial que afecta no solo a los desarrolladores sino a todas las personas. La sociedad se ha obsesionado con la necesidad de una estimulación constante (visual, audio, mental). Parece que nadie puede estar inactivo durante más de 30 segundos sin sacar su teléfono y enviar mensajes de texto, navegar por la web, revisar Facebook, etc.

Si presiona compilar y le tomará un minuto más o menos, considere que es una gran oportunidad para sentarse y dejar que su cerebro se relaje. Resista el impulso de hacer algo estimulante y simplemente disfrute de un momento de inactividad.

Con el tiempo será más fácil y descubrirá que tendrá una experiencia laboral mucho mejor cuando deje de intentar mantener su cerebro encendido al 100% durante todo el día.

Alan Barber
fuente
Tengo que preguntarme si el odio a la multitarea está realmente justificado, o si es quizás un malentendido generacional. Claro, los estudios han encontrado una pérdida de productividad cuando se realizan múltiples tareas, pero tal vez es simplemente una habilidad que algunas personas han desarrollado. Para cualquier nueva tecnología o proceso, estoy seguro de que hubo estudios que los encontraron terribles para la productividad, antes de que la gente realmente aprendiera cómo usarlos de manera efectiva
@JonofAllTrades No se trata de la tecnología o el aprendizaje, es un hecho conocido de que el cerebro humano no está biológicamente diseñado para permitirnos realizar múltiples tareas de forma continua en múltiples flujos de pensamiento de conciencia. Podemos hacer malabarismos con un par de pensamientos desconectados durante cortos períodos de tiempo, pero más allá de eso, todo el acto de equilibrio se desmorona. No es saludable ya que te desgastarás mental y físicamente. ¿Alguna vez se preguntó por qué tantos están enfermos y cansados? Todos trabajamos muy duro.
Alan Barber
Ah, pero concentrarse en una cosa también es agotador, y nuestra atención se desvía rápidamente. Como siempre, hay un medio feliz. Sospecho que una vez puede aprender a realizar múltiples tareas mejor, y que el flujo de trabajo ideal para, por ejemplo, un 40 años nacido en 1950 es diferente de un 40 años nacido en 1990. No compro que somos cualquier más enfermo y cansado ahora que hace 100 años; en todo caso, ¡podemos permitirnos el lujo de ser conscientes de ello!
8

Estoy de acuerdo con lo que sugiere @retracile, pero tenga en cuenta que de acuerdo con las reglas de programación de Zen , debe centrarse en una sola tarea a la vez. Responder a las llamadas telefónicas, navegar por la Web, las redes sociales o incluso realizar múltiples tareas probablemente disminuirá su productividad. Use la breve demora de espera para pensar en la tarea / solución existente y qué puede hacer para mejorarla.

sakisk
fuente
8

Tengo un bar pegado a la jamba de la puerta.

ingrese la descripción de la imagen aquí

Solo puedo hacer 5 dominadas, por lo que me lleva menos de un minuto. O hago una taza de té.

Lukasz Madon
fuente
cuántos programadores en la tierra pueden hacer pull up, me pregunto de verdad ahora
kommradHomer
2
Más podría hacer, si al menos intentaran hacer un pull up en cada compilación.
Esko Luontola
3
Entonces, si su IDE es menos inteligente, se pone en mejor forma. Conclusiones interesantes a las que esto puede llevar.
Me volví bastante aficionado usando una Mac antigua con una placa base que se sobrecalentaba constantemente. Me ejercité mientras esperaba que se enfriara.
¡Me encanta esto! Cuanto más beneficio tenga el desarrollador, más! @ # $ Nivel serán sus herramientas.
Erik Reppen
6

Para mí, la forma de mantener mi enfoque es ser implacable con respecto a mantener un espacio de trabajo limpio, cualquiera que sea ese espacio de trabajo. Cualquier cosa que no sea parte de mi proyecto actual es ruido en la relación señal / ruido sagrada. Una parte vital de mantener el enfoque es mantener alta la relación señal / ruido.

Cuando estoy codificando, esto significa cerrar programas que no he usado recientemente, podar regularmente las pestañas de mi navegador y mantener mi escritorio libre de elementos que no son inmediatamente relevantes para mis proyectos actuales. Utilizo los retrasos de diez segundos para "hacer rondas", por así decirlo: cerrar pestañas, cerrar programas, eliminar archivos temporales y archivar lo que se necesita archivar, etc.

Tener el hábito de "hacer las rondas" también ayuda a prevenir los rastros de conejos, porque me obliga a evaluar continuamente y recordar todas las tareas actuales.

Hay que pagar un pequeño precio cuando tiene que volver a abrir una pestaña que ya ha abierto 5 veces hoy o volver a iniciar un símbolo del sistema con privilegios elevados por decimoquinta vez, pero aprovechar los aceleradores como los atajos de teclado puede reducir esto a un precio muy pequeño de hecho.

Caleb
fuente
1
El problema con el cierre de las pestañas del navegador (o programas, etc.) es que es demasiado fácil distraerse con ellas cuando las cierra. Como volver a una pregunta de Stackoverflow después de implementar la respuesta, ver un enlace interesante en la barra lateral y hacer clic en él ...
Bobson
6

Me parece útil hacer un seguimiento del tiempo real que paso sin trabajar

Puedes usar cualquier cantidad de cosas para esto. Sé que hay muchas aplicaciones gratuitas que puedes descargar para hacer esto por ti (no puedo pensar en ninguna fuera de mi cabeza en este momento, pero si alguien me da alguna, las agregaré a esta respuesta), o Es muy fácil crear uno propio. Usualmente uso uno que creé, que es una pequeña ventana en la esquina de mi pantalla con botones para Working/ NotWorking, y solo hago clic en el que esté cada vez que cambio el foco.

Un reloj de ajedrez también funciona.

El solo hecho de rastrear tu tiempo te hace más consciente de cuánto tiempo estás desperdiciando que deberías dedicar a trabajar, y creo que me hace más productivo porque me obligaré a dejar esa pregunta o blog súper interesante de stackoverflow artículo y volver a trabajar

Rachel
fuente
5

Para mantener mi atención, uso garabatos. Siempre tengo un bolígrafo y un bloc de notas detrás de mi teclado y garabateo. No es más que garabatear en un trozo de papel sin ningún significado, pero mantiene mi atención lo suficiente y no me distrae para poder volver a lo que estaba trabajando.

Hice esto toda mi vida inconscientemente, pero recientemente encontré un wiki sobre él: http://en.wikipedia.org/wiki/Doodle

Pieter B
fuente
4

Hagas lo que hagas , no vayas a ninguno de los sitios de StackExchange. Te chuparán :)

Más en serio, navegar por la web mientras espera que algo termine no es bueno para la productividad (a menos que esté investigando algo relacionado con la tarea actual).

Por lo general, hago algunas tareas menores que no tomarán más de 1-2 minutos. (limpiar algo, escribir comentarios, notas).

Christian P
fuente
1

En su caso, levántese y camine un poco. Si es difícil volver a "la zona" probablemente sea porque estás demasiado lejos. Hacer cosas en la web es solo otra zona y es fácil perder la noción del tiempo. Dale a tu cerebro el descanso que claramente quiere y salga a caminar, asista, idealmente en un baño, o hable con un compañero de trabajo al azar. Hacemos muchas cosas detrás de escena en piloto automático. Los descansos no son malos para la codificación, son buenos, pero la idea es dejar de disparar en todos los cilindros por un tiempo y ver qué se les ocurre a los quemadores traseros mientras la parte más consciente de su mente le da un descanso. Los buenos desarrolladores no son calculadoras humanas. Deje que las partes de su cerebro que hacen todas las cosas intuitivas y de coincidencia de patrones en el piloto automático hagan su trabajo por un tiempo.

Si esto no es solo un problema de codificación, es posible que desee considerar AGREGAR.

Erik Reppen
fuente
1

Las sugerencias para levantarse y caminar, etc., son buenas si sus ciclos son largos (aproximadamente una hora). Pero cuando los tiempos de ciclo se acortan, y me encuentro apareciendo entre vim y haciendo cada pocos minutos, entonces me quedo en la zona permaneciendo en la tubería: mientras el paquete de compilación o prueba está funcionando, tiendo a retroceder y revise el código, luego comience a trabajar en el próximo fragmento que estaría haciendo de todos modos si la compilación o las pruebas tienen éxito.

stevegt
fuente
1

Haga un plan al comienzo de cada día sobre cómo usar este "tiempo libre". Puede implicar

  • ponerse al día con algunas tareas de documentación,
  • resolviendo casos de prueba de unidad para la clase que vas a escribir a continuación,
  • estudiando alguna nueva pieza de tecnología que has querido aprender,
  • escribiendo una carta a tu tía favorita,

o casi cualquier cosa realmente.

Tenga esta tarea secundaria siempre abierta en una ventana en algún lugar de su escritorio. Tan pronto como presione el botón "compilar" (o lo que sea que le tome más de 30 segundos), cambie a la tarea secundaria y dedique el tiempo suficiente para avanzar, lo que podría ser un par de minutos, o podría ser menos

Mientras realiza la tarea secundaria, tenga en cuenta que esto no es en lo que debe centrarse su cerebro. Sigue pensando en la programación. Esto no es facil; aún sufrirá el cambio de contexto la mayoría de las veces.

Si hace esto, incluso si pierde el contexto muchas veces, su tiempo perdido no es realmente una pérdida de tiempo, y tiene algo que mostrar al final del día. Pero lo más importante es planificar, al comienzo del día, cuál será la tarea secundaria del día.

Dawood ibn Kareem
fuente
1

Supongo que podemos usar el tiempo de compilación para documentar el código, limpiar el código, alinear el código correctamente, para que no nos alejemos de nuestro IDE y sigamos mejorando la calidad del código.

saiy2k
fuente
1

Por lo general, solo intento buscar errores, errores tipográficos o formas de mejorar el estilo del código mientras tanto. Eso me mantiene mirando el código, pero no (siempre) me distraigo con algo interesante. Además, esto !

Sansón
fuente
1

Es concebible que tengas un poco de TDAH. Mucha gente lo hace. Los mecanismos de afrontamiento son los que se dan en las otras respuestas (o posiblemente la medicación).

Mike Dunlavey
fuente
1

Durante esos 10-30 segundos ve y haz algo:

  • eso no requiere mucha actividad mental
  • abra el código que está compilando y verifíquelo nuevamente (puede encontrar algo incorrecto o una forma de mejorarlo)

Durante ese tiempo, no haga cosas que sabe que le llevarán mucho tiempo (a menos que pueda permitirse el lujo de pasar algún tiempo) como:

  • empezando a leer un libro
  • lee correos electrónicos si sabes que te puede llevar mucho tiempo
  • etc.

Además, no instale alguna alarma de audio para indicar el final de la compilación. Tus colegas lo apreciarán.

revs BЈовић
fuente
12
Personalmente, revisar el correo electrónico es una idea terrible. Como puede ver, puede convertirse en un succionador de tiempo que sus 30 segundos pueden convertirse fácilmente en 30 minutos.
Adrian
Revisar el correo electrónico al principio y al final del día es uno de esos consejos que a muchos ejecutivos les gusta dar. Depende de cuán grande sea su empresa, supongo.
Erik Reppen
Si le toma 30 minutos revisar su correo electrónico, no lo haga. No voy a una oficina de correos para buscar mis correos electrónicos, por lo tanto, para mí es de 30 segundos a 3 minutos de operación.
Bћовић
1
@ ErikReppen, si hiciera eso, no tendría un trabajo.
HLGEM
0

Para la distracción de Internet durante el trabajo en general, sugiero The Pomodoro Plugin si está utilizando Google Chrome

¡Personalmente creo que no puedes ser productivo durante todo tu tiempo de trabajo! dado que está compilando, significa que hizo los esfuerzos suficientes para respirar ... para no abusar o salir del contexto, siga pensando en el siguiente paso si la compilación no genera errores ... O limpie su trabajo área: Escritorio, Pestañas, Explorador ...

M3HD1
fuente
0

Lo que estás describiendo es perfectamente normal.

Cuando estábamos haciendo estudios de usabilidad, observamos los retrasos por orden de magnitud. Cuando un usuario hace clic en un botón, ¿cuánto tiempo tienen que esperar?

  • 0.1 seg: sin retraso percibido
  • 1 seg: sin cambio de enfoque
  • 10 segundos: atención perdida
  • 1 min: el usuario cambia a otra tarea
  • 10 min: el usuario se levantará y se irá

Hay muchas excepciones, como operaciones compuestas, como escribir.

Cuando hacíamos trabajo de rendimiento, a menudo nos hacíamos la pregunta "¿qué tan rápido debería ser la operación X?" La respuesta es, mientras el usuario pueda percibir un retraso, más rápido sería mejor.

En su caso, está alcanzando ese umbral de 10 segundos y su atención se desvía. Lo mejor que puede hacer es reducir el retraso. Cuanto más corto sea el retraso, mayor será su productividad. Imagine que tiene el código en el lado izquierdo de su pantalla y la aplicación en ejecución a la derecha. A medida que edita el código, la aplicación cambia en tiempo real. Hasta que estés allí, tienes espacio para mejorar.

Consulte también la reciente publicación de blog de Jeff (las toneladas de buen contenido que lleva): http://www.codinghorror.com/blog/2012/03/visualizing-code-to-fail-faster.html

Si va a cambiar a otra cosa, elija algo que no involucre a su cerebro de la misma manera que el trabajo que estaba haciendo. Limpia tu escritorio, medita, estira, flexiones, arte, mira por la ventana.

Jay Bazuzi
fuente
0

Cuando hago trabajo ad-hoc en SAS, encuentro la siguiente línea muy útil:

dm log 'postmessage "Code finished"' continue;

Esto produce un cuadro de diálogo emergente una vez que todo el código anterior ha terminado de ejecutarse. Estoy seguro de que hay equivalentes en otros idiomas. Hubiera publicado esto como un comentario para retractar la respuesta, pero no tengo suficiente reputación.

usuario46745
fuente