Mantenerse enfocado durante los procesos automáticos, "Está compilando"

Recientemente me encontré con una situación bastante irónica. Después de cambiar una pequeña parte en un código y decirle a mi computadora que comenzara a compilar, cambié a un sitio web y me encontré con esto:

La excusa número 1 del programador para holgazanear legítimamente: mi código se está compilando.  De xkcd 303 por Randall Munroe por https://creativecommons.org/licenses/by-nc/2.5/

[xkcd cómic 303 por Randall Munroe]

En mi empresa eligen trabajar con una herramienta que es notoriamente lenta en la compilación de programas. Se elige por la facilidad de implementar programas, están acostumbrados a trabajar con este lenguaje.

A menudo me encuentro presionando el botón de compilación y esperando unos 30 segundos o distrayéndome. Después de esos 30 segundos, vuelvo al trabajo, solo para descubrir que cometí un pequeño error y tengo que presionar compilar nuevamente en dos minutos.

Esperar 30 segundos una vez no es demasiado terrible, pero tener que hacerlo unas 15 veces por hora es tedioso. Volver al trabajo después de esos 30 segundos se vuelve más difícil cada día.

¿Cómo puedo mantenerme productivo?

Editar:

Aparentemente, el tipo de errores con los que me encuentro no estaba claro. No estoy hablando de errores detectados por el compilador. En su mayoría son errores que solo detecto una vez que el programa se está ejecutando, para lo cual necesita compilarse. Por ejemplo, intercambiar dos identificaciones (mal documentadas). Los errores son difíciles de ver en el código, pero fáciles de notar en el comportamiento.

Actualizar:

Tomé muchas de las respuestas sugeridas, y ninguna de ellas es "la correcta", ya que todas ofrecen ideas y opiniones diferentes. Algunas son excelentes formas de acelerar la compilación, pero desafortunadamente ninguna de ellas se aplica a mí. Trabajo en un sistema rápido con 2 ssd, pero el cuello de botella es que estoy trabajando en Android, que tiene que cargar a través de un USB. Entonces, como la compilación no se puede acelerar, tendré que mantener mi flujo de trabajo funcionando de manera diferente.

La respuesta de @Coteyr es excelente, pero desafortunadamente este es prácticamente mi único proyecto. Eso me permite concentrarme mejor en este proyecto, pero como no tengo mucho trabajo que hacer aparte de esto, no podré aplicarme esta respuesta. Aunque espero que otros lo encuentren útil.

Dennis y Иво Недев me ayudaron mucho. Comencé a revisar mi código mientras se compila y agregué comentarios cuando fue necesario. Sin embargo, es difícil comenzar, ya que la idea "meh, cualquiera que lea eso debería saber lo que significa". Pretender que las personas que leen mi código serán estúpidas ayudó mucho a agregar la documentación adecuada.

Sin embargo, lo que creo que tuvo el mayor cambio es algo que no se menciona en este hilo, ya que no proporcioné los detalles específicos para que surja una respuesta como esta. Mientras recorría mi proceso nuevamente y cronometraba el tiempo de compilación (resulta ser 1 minuto 15), me di cuenta de que el mayor problema era que en realidad no podía hacer nada mientras se compilaba. Visual Studio tiene la mala costumbre de bloquear sus archivos... Así que gracias a https://stackoverflow.com/questions/3123624/visual-studio-locking-files-while-debugging logré cambiar eso, y puedo decir, ayuda mucho poder tocar su código mientras se está ejecutando.

Un gran agradecimiento a todos los que respondieron, se volvió mucho más fácil para mí mantener mi concentración durante 8 horas al día.

(Por favor, si tiene otras sugerencias, no dude en agregarlas como respuestas, podrían ser muy útiles para los futuros transeúntes)

Los comentarios no son para una discusión extensa; esta conversación se ha movido a chat .
La pregunta se protegió, por lo que no puedo agregar una nueva respuesta, pero creo que hay una respuesta mejor que las ya dadas: hacer un mejor uso de las pruebas unitarias. Puede crear la clase y probar su comportamiento en pruebas unitarias que puede ejecutar en su IDE. Probablemente también le permitirá ejecutar una prueba de unidad específica para verificar si sus cambios lo han solucionado. De esta manera, deberá implementarlo con menos frecuencia.
Divertidamente, llegué aquí mientras se compilaba mi documento de látex...
...But the bottle neck is that I'm working on Android, which has to upload via an USB. So as the compiling can't be sped up...- Entonces su cuello de botella no es el paso de compilación. Es el paso de carga .

Respuestas (14)

Una compilación larga paraliza todo el proceso de desarrollo de software. No debe aceptar esto como un hecho de la vida sin antes tomar medidas para reducir el tiempo de construcción. Aquí hay algunas maneras en que puede hacer eso:

  1. Compra un SSD .
  2. Agregue más memoria RAM.
  3. Si está desarrollando una aplicación web: use browserify para recargar en caliente su código del lado del cliente.
  4. Durante el desarrollo, construya solo las partes del código base que están cambiando.
  5. Investigue el código de compilación y, en su máquina local, cortocircuite la compilación para que genere solo las partes del código base que están cambiando.
  6. Considere ejecutar pruebas unitarias automatizadas solo antes de los registros.
  7. Colabore con los miembros del equipo y los gerentes para reducir permanentemente el tiempo de construcción.

Más sobre #1 y #2: Estos son especialmente efectivos. Debe hacer esto incluso si necesita gastar dinero de su propio bolsillo porque aumentará su satisfacción general en el lugar de trabajo. Un buen carpintero no toleraría una sierra desafilada y usted no debería tolerar un disco duro lento o una estación de trabajo con RAM insuficiente. Quieres estar en casa por la noche, cenar con tu familia o ver Netflix. No querrás sufrir una miserable "muerte por mil cortes" esperando construcciones lentas.


EDITAR:

  1. Para aquellas personas que dijeron que no respondí la pregunta del OP: consideren esta Meta respuesta .
  2. Una construcción lenta puede paralizar el lugar de trabajo. Es muy importante explorar todas las opciones antes de aceptar el hecho de que la compilación es lenta.
Los comentarios no son para una discusión extensa; esta conversación se ha movido a chat .
También agregaría mirar otras herramientas. ¡Recuerdo tener que trabajar con Sharepoint y me tomó 15 minutos implementar y probar un cambio de JavaScript! Usé Fiddler al final para redirigir las llamadas a los archivos JS a los almacenados localmente que podía modificar rápidamente.
Puede confirmar. Tuve una plataforma vieja durante bastante tiempo y fue realmente irritante. Después de obtener uno con más RAM, el trabajo fue mucho mejor que antes.
También compare su verificador de virus y vea cuánto ralentiza la compilación. Cambie el antivirus si es necesario.
Solo para agregar al n. ° 1 y al n . lo enciende cada dos minutos en caso de pérdida de energía, apagado inesperado, etc. Yo mismo lo he usado con gran efecto, al poner todo mi entorno de desarrollo en él (instancia de Java, ant, eclipse, código fuente, etc.)

Una pelea de espadas es un gran ejercicio. úsalo

Para ser honesto, no hay mucho que puedas hacer con el código cuando se está compilando. Puede intentar reducir el tiempo de compilación, pero algunas veces eso no es posible. Puede intentar reducir la cantidad de compilaciones, pero nuevamente, a veces simplemente apesta.

SO..., para mejorar la productividad, solo necesitas ser mejor que una silla, una pelea de espadas. Yo sugeriría:

  • Responder correos electrónicos
  • Boletos de documentos
  • Solicitud de documentos
  • Comprométete con SCM si puedes
  • Tómate un descanso legítimo.
  • Manejar otras tareas de código no relacionadas
  • tener reuniones con los miembros del equipo
  • tomar una siesta

Honestamente, es una de las razones por las que me gustan los idiomas que me gustan. Sin tiempo de compilación. Si tiene un tiempo de compilación que es largo, simplemente tendrá que lidiar con él, suponiendo que no pueda abordarlo.

Por ejemplo, en .NET podría separar grandes porciones de lógica en archivos DLL. Entonces solo tiene que compilar secciones de código con frecuencia.

También puede mirar las opciones del compilador y elegir opciones que "aborten después del primer error".

Nota Acabo de notar que su tiempo de compilación es de 30 segundos. Eso no es un tiempo de construcción largo. Si quieres hacer algo en ese momento, haz ejercicios con los dedos o levántate y respira hondo. Los tiempos de construcción largos son de 10 minutos. o más.

Debería leer acerca de lo malo que es cambiar de tareas una y otra vez por productividad. Cosas como esta realmente no funcionan. Perderá aún más en productividad y se estresará más.
Bueno, cuando leí la pregunta por primera vez, asumí que 30 minutos a una hora era una construcción larga. Si tiene media hora para matar mientras espera el compilador, entonces es mejor llenarlo con al menos tareas semi-relacionadas. Si estás hablando de 30 segundos.... Bueno, es un momento tan bueno como cualquier otro para hacer algún tipo de ejercicio de tensión ocular o tensión en los dedos. Hay fácil y rápido, y EXTREMADAMENTE importante.
Bueno, estoy de acuerdo con eso entonces.
Considere agregar una viñeta: "Consulte la lista de preguntas de StackExchange Hot Network " ;-)
@DigitalTrauma Ese debe ser uno de los peores consejos de productividad;) Casi tan malo como "leer un artículo de wikipedia e intentar no seguir ningún enlace" (nunca funciona de esa manera).
Gracias a la sobrecarga del cambio de contexto y el espacio limitado en la pila mental de uno, tratar de atascar el trabajo no relacionado durante estas esperas es probablemente menos productivo que mirar al techo.
Los ejercicios de @NathanCooper Finger o los ejercicios de fatiga visual no requieren mucha facultad mental. Sobre todo si te acostumbras a hacerlos. "F5" 1-2-3-4-5 1-2-3-4-5 Verificar compilación. Código código código. "F5" 1-2-3-4-5 1-2-3-4-5 Verificar compilación. Y es mucho menos sobrecarga que la fatiga visual o RSI.
Estoy leyendo esto mientras se instalan las cosas, pero se terminaron hace minutos :)
Creo que un estudio de Microsoft reveló que responder correos electrónicos cuesta 30 minutos de productividad. Esta respuesta es un consejo activamente dañino, no sé por qué 14 personas votaron a favor del comentario que sugiere tanto pero no rechazaron la respuesta.
30 segundos está justo en el valle malo. Demasiado largo para mantener la concentración si tiene que construir con mucha frecuencia, pero demasiado corto para cambiar a otra cosa.
"¿Comprometerse con SCM si puede" antes de que finalice una compilación?
@StuperUser Tal vez, depende del idioma, SCM y sus ignorados. No verifica los objetos binarios, entonces, ¿por qué no comprometerse? Si estás en una rama de características y cometes todos los errores que quieres, algunas de las mejores ideas provienen de los errores. Se fusionará/aplastará antes de fusionarse con la rama maestra/principal, ¿verdad? El punto es que cada configuración es diferente. No hay razón por la que no pueda comprometerse mientras construye si se encuentra en un entorno que lo admite.

Algo de mi propia experiencia:

Intenta corregir varios errores a la vez.

Claro, es muy rápido intercambiar dos columnas, después de notar que están intercambiadas. Pero asegúrese de no dejar de verificar después de encontrar 1 falla.

Por ejemplo, podría reducir el número de ciclos comprobando otras cosas:

  • ¿Están las columnas al menos formateadas correctamente?
  • ¿Todas las demás columnas contienen lo que deberían?
  • ...

Esto es especialmente importante en los primeros 1 o 2 ciclos y podría ayudarlo a volver de 15 a 5 retrasos de 30 segundos (y probablemente también un mejor resultado).

Oh hombre, esto es tan crítico. Nos enfocamos mucho en reducir el tiempo de ciclo... Tiempo total = tiempo de ciclo * número de ciclos. ¡Reducir el número de ciclos es tan importante como reducir el tiempo de ciclo!
Creo que esto pasa por alto el costo de arreglar demasiadas cosas en un solo ciclo; esto hace que sea muy difícil aislar el impacto de los cambios individuales. Es por eso que hay tanto enfoque en el tiempo del ciclo: reducir la cantidad de ciclos genera otros efectos perjudiciales.
@Dancrumb No tiene por qué serlo si maneja qué arreglar, especialmente en la fase en la que todo está 'construido' y está probando. Durante la prueba, haga una buena lista de todos los problemas que debe solucionar. Trate de averiguar lo que tiene que arreglar, para que no necesite prueba y error más adelante. Pruebe la mayor cantidad posible de funciones nuevas o corregidas. Luego elimine el programa, ingrese a su IDE y corrija todo esto. Marca en la lista cuáles has arreglado. Luego haga su compilación y pruebe todas sus correcciones: tache cuando haya terminado. De esta forma, puede realizar fácilmente ciclos de 10 a 20 arreglos a la vez antes de tener que reconstruir.
Esto es lo que hago. Más específicamente, trato de trabajar en dos temas independientes a la vez. Trabajaré en la tarea n. ° 1, presionaré compilar, cambiaré a la tarea n. ° 2, que es correo electrónico o una base de código diferente. Luego vuelva a la tarea n.º 1, pruebe y repita.
En realidad, con un tiempo de construcción de 30 segundos, no es gran cosa. En el peor de los casos, comienzas a compilar y revisas el código mientras tanto, si no encontraste nada, te ahorraste 30 segundos. De todos modos, pensar demasiado en el código durante 30 segundos no vale la pena.
Siempre tendrás que probar lo que haces. De lo contrario, puede crear errores u otras fallas que podrían ser difíciles de solucionar porque no sabe qué de sus cambios creó ese error.
Perdí ese. No es tan bueno como reducir el tiempo de compilación, pero para aquellos que no tienen el poder de reducir el tiempo de compilación, es un excelente uso de las capacidades cognitivas de uno, ya que hace todo a la vez.
Perdí la cuenta de cuántos programadores he conocido que se apresuran a depurar y resolver solo el primer error que encuentran sin probar el resto de los cambios. Esta es una excelente respuesta.

Intente crear un script que haga lo que necesita que haga y luego haga un ruido audible y/o haga una ventana emergente. De esta manera, si desea desviar su atención, no tiene que preocuparse por distraerse por completo y olvidarse de comprobar si ha terminado. Para mí, está bien "distraerse" mirando otras cosas como otro código, pero el problema es cuando "va demasiado por el agujero del conejo" y se olvida de verificar si el proceso está completo.

No me molestaré en dar una sugerencia sobre cómo hacer esto, ya que variará según el sistema operativo, el método de compilación y otros factores. Simplemente buscaría en Google algo como "hacer sonido y aparecer en (insertar sistema operativo aquí) cuando se complete el comando" o algo por el estilo.


Actualización: como han señalado algunos de los comentarios, puede haber formas de hacer esto en ciertos programas con GUI, no solo desde la línea de comandos. Como antes, no me molestaré en dar sugerencias aquí porque variará ampliamente según el programa que sea y el tiempo que tarde.

Las integraciones de Slack o similares funcionan bien para esto
+1; se producen retrasos y, a menos que tenga suficiente espacio en el monitor para ver los resultados mientras realiza múltiples tareas, lo mejor que puede hacer es evitar el equivalente humano de "sondeo". También puede ser fácil ajustar el comando del compilador para que aparezca un mensaje emergente; Uso un notifyscript de shell muy corto que es, en resumen, "$@"; notify-send "$1 is done."( docs )
Relacionado tangencialmente con el tema de los procesos largos, si rutinariamente realiza consultas SQL de ejecución prolongada, algunos clientes SQL también pueden proporcionar un sonido al finalizar.

Mi respuesta depende del compilador, pero prueba esto:

Si el compilador le permite ver el código y se está compilando en segundo plano, entonces puede realizar su propia versión de RDD . Mientras el compilador está haciendo su trabajo, simplemente revise el código que acaba de escribir, compílelo en su cabeza, revíselo e intente encontrar cualquier error.

Vas a:

  1. No distraerse y perder el foco.
  2. Si hay algún error, no te llevará ni dos minutos arreglarlo y compilarlo de nuevo, pero mucho menos.

Por ejemplo, intercambiar dos identificaciones (mal documentadas).

He visto este problema en muchos programas que usan Into Stringpara cada ID individual; en este caso, es fácil pasar accidentalmente una identificación en lugar de otra y no notarlo... durante mucho tiempo.

Si puede pasar una identificación de pollo a la máquina de bebidas, su código tiene un problema (*).

El truco, entonces, es etiquetar las identificaciones. Dado que está hablando de largos tiempos de compilación, asumo que tiene un lenguaje tipificado estáticamente a su disposición, en cuyo caso debe aprovechar dichos tipos. ChickenIdNo es lo mismo A que DrinkIdA. DrinkIdNo es lo mismo A que FuelIdA.

Hágalos de diferentes tipos, y el compilador felizmente le señalará sus errores, lo que acelerará el ciclo Arreglar-Compilar-Prueba (cortando el paso de Prueba e interrumpiendo el de Compilar).

Esta es la versión estáticamente tipada del principio Fail Fast : no hay nada más rápido que tener el compilador (o incluso IDE si compila en segundo plano) señalándote los errores.

Como beneficio adicional, incluso puede introducir alguna validación en el mismo sistema. En mi parte del mundo, pocas identificaciones son negativas para ejemplos... o si eres una String, una identificación de 2 KB es sorprendente, por decir lo menos.

(*) A menos que beber sangre de pollo sea una práctica habitual en tu casa, qué sé yo...

Si bien es posible que no aborde directamente la pregunta del OP, este no es un mal consejo. Compare Hacer que el código incorrecto se vea mal en Joel en Software o ¿Cómo hacer que el código incorrecto se vea mal? ¿Qué patrones utiliza para evitar errores semánticos? en Desbordamiento de pila .
@MichaelKjörling: De hecho; no es una idea nueva :) También sigue el principio de Daniel J. Bernstein de tratar de erradicar las clases de errores en lugar de las ocurrencias de errores .
Entiendo el espíritu de esta respuesta, pero no veo cómo puedes aplicar eso a algo como una identificación. En primer lugar, solo hay tantos tipos estáticos para elegir, y muchos son sustituibles. Si creó una identificación long, por ejemplo, aún podría dar accidentalmente una int. Además, esto sería una locura en la práctica.
@ChrisPratt, algunos idiomas hacen que este tipo de cosas sea ridículamente fácil (F # y OCaml, por ejemplo). La idea es que, incluso si dos ID son del mismo tipo primitivo ( int, digamos), tienes un tipo intpara cada tipo de ID (ChickenID, DrinkID). Si bien tienen la misma funcionalidad, la semántica del sistema de tipos significa que no puede interpretarlos al revés. Cuando el código necesita realizar comparaciones y demás en el ID, los métodos apropiados pueden implementarse por tipo, o el código específico del tipo puede descomponerlos donde nada puede salir mal.
@ChrisPratt: para ampliar el comentario de VisualMelon, usar diferentes tipos integrados sería una idea terrible, ya que muchos idiomas tienen conversión implícita de todos modos, por lo que no se ganaría nada. En su lugar, para cada entidad comercial debe tener un tipo de negocio con la funcionalidad adecuada; Además de evitar confundir una entidad con otra, también evita invocar una funcionalidad sin sentido (incluso si una ID es numérica, 2+ID, 2*ID, etc... ¡simplemente no tiene sentido!).

La forma obvia de mitigar esto es dejar de cometer numerosos errores pequeños en primer lugar. Aquí es donde empezaría de todos modos.

Si el compilador tarda 30 segundos, entonces el compilador tarda 30 segundos. Todos cometemos errores, pero 15 veces por hora sería una bandera para mí para tener una metodología de verificación de errores más sólida.

Probablemente hay tantas formas de hacer esto como programación de personas. Lo que funcione para ti. Solucione el problema en su origen.

No soy un programador, así que necesito hacer un poco de juego para que las cosas funcionen a veces. La forma en que me mantengo productivo es mediante la multitarea, cuando no se puede trabajar en una cosa, trabajo en otra.

Los comentarios no son para una discusión extensa; esta conversación se ha movido a chat .

A menudo me encuentro presionando el botón de compilación y esperando unos 30 segundos o distrayéndome. Después de esos 30 segundos, vuelvo al trabajo, solo para descubrir que cometí un pequeño error y tengo que presionar compilar nuevamente en dos minutos.

Esperar 30 segundos una vez no es demasiado terrible, pero tener que hacerlo unas 15 veces por hora es tedioso.

Si tiene que recompilar 15 veces por hora porque cometió muchos errores pequeños, entonces claramente la distracción no es su problema, simplemente no está siendo lo suficientemente cuidadoso.

Y si está cometiendo pequeños errores que el compilador detecta, probablemente sea una señal de que también está cometiendo errores lógicos que no detecta.

Haga un esfuerzo por ser más consciente de su código antes de compilar.

Míralo, escribe algunos comentarios, míralo de nuevo. Luego compila.

Si te encuentras cometiendo el mismo tipo de pequeño error repetidamente, entonces quizás necesites dedicar más tiempo a entender tu lenguaje de programación. Una pequeña inversión en aprendizaje puede dar sus frutos a largo plazo.

Perdón por la falta de claridad, no estoy hablando de errores detectados por el compilador. En su mayoría son errores que solo detecto una vez que el programa se está ejecutando, para lo cual necesita compilarse. Por ejemplo, intercambiar dos identificaciones (mal documentadas). Los errores son difíciles de ver en el código, pero fáciles de notar en el comportamiento.
@DaniëlvandenBerg Si esta situación ocurre con frecuencia, también podría considerar incorporar TDD (desarrollo basado en pruebas).
@Brandin TDD se basa en gran medida en ciclos cortos y en la recompilación con mucha, mucha frecuencia. Si bien TDD es agradable, sin duda empeorará su problema .
Y TDD es una buena práctica. Es como que las cosas se harán. "Enfócate más y comete menos errores" es una ilusión de las personas que ignoran la naturaleza del trabajo. Como dijo el OP, es MUCHO MÁS esfuerzo (como diez veces o más) detectar un error en el código que en la ejecución. Y muchos errores que nunca verás de todos modos.
@nvoigt: No, porque volver a compilar con mucha frecuencia limitará el alcance de las posibles razones de la falla de compilación (y prueba automatizada en tiempo de compilación). Si está haciendo solo pequeños cambios entre compilaciones y aún encuentra que necesita 15 intentos para hacerlo bien, entonces (a pesar de los votos negativos) el programador simplemente está cometiendo demasiados errores (pero con suerte mejorará con el tiempo a medida que adquiera experiencia) . De cualquier manera, TDD limitará el daño causado.
@LightnessRacesinOrbit El "daño hecho" es el tiempo perdido porque la recompilación lleva mucho tiempo. Responder eso con TDD y "simplemente recompilar más a menudo" está más allá de mi comprensión. Si algo toma mucho tiempo y no puedo cambiar eso, necesito minimizar la necesidad de hacerlo. TDD hace muchas cosas, pero no minimiza la necesidad de recompilar. La recompilación en pasos pequeños y frecuentes es el corazón de TDD.
@nvoigt: si realiza 50 cambios sustanciales en el código antes de intentar una compilación, tendrá que corregir más y será necesario volver a compilar antes de alcanzar su objetivo. Cada corrección/cambio corre el riesgo de afectar los 49 cambios que realizó. Si, en cambio, realiza 1 cambio sustancial en el código, pruébelo de inmediato y descubre que falló, es probable que el daño causado por ese error sea mucho menos pronunciado. Aunque, para ser honesto, encuentro que todo esto es discutible, ya que el OP dice que la compilación solo toma 30 segundos, ¡lo cual no es nada! :D

Invierte el tiempo en ti mismo.

10 segundos gratis: Haz flexiones.
60 segundos gratis: Explore las preguntas de la red activa de Stack Exchange.
120 segundos gratis: Levántate y bebe un poco de agua.

Acabo de levantarme de hacer 20 flexiones mientras esperaba que un compañero de trabajo me respondiera en Slack. Cada vez que veo que tengo que10 < seconds < 120 esperar por algo, uso el tiempo para mejorar . Desde que comencé a hacer esto hace unas semanas, me siento más saludable, con más energía y menos cansada. Veo que mi productividad se ha disparado. Y me siento genial.

Sea más cuidadoso/Obtenga un mejor software

¿El problema real es que tiene que esperar a que finalice la compilación para saber si cometió un error, o que está dejando pasar suficientes errores pequeños que el tiempo de compilación muy corto (30 segundos) se convirtió en un problema?

No todos los problemas serán inmediatamente obvios; es por eso que programar por accidente es una idea horrible, y suena como lo que estás haciendo.

Su edición sugiere que está haciendo esto porque el software que está utilizando carece de documentación. Eso es un problema con el software y debe solucionarse. La documentación no es un buen extra, es una funcionalidad central. Si ha pasado suficiente tiempo adivinando sobre la API para hacer esta pregunta, probablemente sea el momento de discutir si ese software se ha convertido en una responsabilidad.

Usa el tiempo para pequeñas tareas puntuales

30 segundos parecen la cantidad perfecta de tiempo para hacer varias tareas pequeñas, que probablemente no te distraigan del todo. Los mejores ejemplos que se me ocurren son reproducir/cambiar una pista de música y consultar tu correo electrónico oficial. Si bien el segundo puede distraerlo, eso podría no ser algo malo inherentemente.

Tarea múltiple

Como decía mi comentario sobre la pregunta, estoy acostumbrado a compilaciones que tardan mucho más de 30 segundos. Si sus compilaciones comienzan a tomar más tiempo, es posible que desee asegurarse de tener siempre una segunda tarea a la que cambiar durante ellas.

Intento tener una tarea A y una tarea B: la tarea B no tiene nada que ver con los programas compilados, en los que puedo trabajar mientras la tarea A está construyendo y absorbiendo casi todo mi disco IO.

Este es un flujo normal para TDD, un poco de prueba, un poco de código. No programar por accidente. Programando por accidente no te importan tus pruebas

Implemente un servidor de integración/compilación continua y pruebas automatizadas.

Una vez que realice una confirmación, su servidor de compilación debería notarlo e iniciar una compilación automatizada. Esto lo libera inmediatamente para continuar trabajando.

Cuando finalice la compilación, su servidor debería ejecutar algunas pruebas automatizadas para detectar problemas comunes como los que describió (columnas mixtas, etc.). El servidor debe enviarle un correo electrónico si encuentra algún error de compilación y/o prueba.

Los beneficios de este flujo de trabajo es que nunca se pierde de vista. Continúa trabajando en su tarea actual y recibe comentarios de forma asincrónica sobre la compilación. Esto le permite completar un pensamiento y luego regresar para corregir los errores, no rebotar constantemente de un lado a otro, lo que provoca muchos cambios de contexto.

No utilice el servidor de compilación como su compilador. Tus compañeros de trabajo aprenderán rápidamente a odiarte.
Si bien este es un buen consejo, es incorrecto. Debe compilar y ejecutar pruebas unitarias localmente antes de comprometerse. Los servidores de CI solo te dan la garantía en el caso de compañeros de trabajo vagos o con menos experiencia que se comprometan sin hacer estas cosas. Además, su razonamiento es erróneo cuando dice que puede seguir trabajando en su tarea con este método, porque puede seguir trabajando en su tarea si también construye localmente.

(Esto es en respuesta a la edición de la pregunta original que indica que los errores en cuestión no son errores de compilación, sino aquellos que solo detecta una vez que el programa se está ejecutando).

El tiempo dedicado a problemas de comportamiento o tiempo de ejecución se puede reducir o eliminar drásticamente escribiendo pruebas unitarias. No solo ahorrará tiempo al no tener que ejecutar manualmente los mismos pasos después de cada iteración (deje que la máquina haga el trabajo secundario por usted), sino que el acto de escribir código para asegurarse de que puede probarlo en primer lugar lo ayudará a razonar. mejore su código y lo obligue a pensar en el flujo de datos y considerar los casos extremos.

Dado que los errores aquí no son una codificación deficiente sino una documentación deficiente, ¿es posible (1) capturar muchos ID en una ejecución de compilación, en lugar de corregirlos individualmente, entonces puede trabajar de manera más productiva dado su sistema de compilación o (2 ) mueva las ID con las que tiene un problema a un archivo de texto que se pueda leer en tiempo de ejecución. Luego compilará bien y luego pasará su tiempo en un ciclo de ejecución, edición y ejecución, que puede ser más rápido en su caso.

Mejor hardware

Antes de cambiar nada , ¿has intentado lanzar más/mejor hardware al problema? Tener una estación de trabajo actualizada no es solo algo agradable, sino que en realidad le ahorra dinero a la empresa. Cada vez que te distraes, la empresa pierde dinero (por el tiempo que dedicas a concentrarte de nuevo).

Mejor proceso de construcción

Si más/mejor hardware no resolvió el problema, analice la racionalización del proceso de compilación para que sea más rápido o incluso cambie la cadena de herramientas por una más rápida.

Mejor tú mismo

La razón por la que sugiero ambos enfoques primero es que esto reducirá el tiempo de distracción para todos los desarrolladores de su empresa, en lugar de solo para usted. Si ninguno de estos enfoques hace que el problema desaparezca, entonces, de hecho, solo queda una variable y esa es usted.

Cuando estoy trabajando en un problema, planifico cómo resolver algo en varios pasos. Un ejemplo sería implementar un botón de inicio de sesión. Este es un proceso de múltiples pasos.

- Find the appropriate button icon and place it in the index.html file.
- Make the button call something on the backend, usually an API
- Make the API call the appropriate service.
- Let the service call the appropriate DataAccess methods
- Create tests for valid and invalid logins (backend)
- Create tests for valid and invalid logins (integration)
- Add these tests to automated test repo
- Commit code
- proceed to next task

Tenga en cuenta que todas las tareas están en un orden lógico (al menos para mí), pero no son dependientes en el sentido de que el cambio en el código ocurriría en diferentes lugares. Esto me permite planificar mi próxima tarea mientras mi tarea actual está compilando y/o ejecutando pruebas.

Sin embargo, este enfoque exige que su capacidad para cambiar de contexto entre dos tareas esté a la altura. Si no es así, entonces este enfoque no es adecuado para usted. Otros enfoques (mencionados anteriormente) como estiramientos, ejercicios con los dedos también podrían funcionar.