¿Cómo puede un Right-Brainer lidiar con el código masivo Left-Brainer? [cerrado]

11

Soy un artista, principalmente, aunque me describo como artista / físico. Si bien puedo hacer matemáticas, lidiar con palabras y las cosas "lógicas" consideradas cerebro izquierdo, es un esfuerzo y cometo errores, mientras que me va bien y la mayoría de las veces pienso en términos de las cosas asociadas con el cerebro derecho pensamiento: relaciones espaciales, contexto holístico de panorama general, etc. Por supuesto, todo eso es confuso, ya que la teoría del cerebro derecha-izquierda está demasiado simplificada y ninguna actividad mental es tan simple. Sin embargo, tengo la sensación de que encajo bien con artistas, directores de video, chefs y otros tipos creativos de pensamiento no verbal, mientras que la mayoría de las personas en "TI" o ingenieros de software hardcore tienen mentes que funcionan de manera diferente, con atención al detalle, manteniendo muchos detalles en mente al mismo tiempo, y fuertes capacidades racionales y verbales.

Así que aquí estoy en un trabajo que me pagan para corregir errores molestos y oscuros en un enjambre masivo de software C ++, muy pesado en OO, y cualquier línea de código no tiene sentido a menos que tenga en mente otros veinte nombres de clases y métodos, relaciones entre ellos, el flujo de ejecución (muy parecido al espagueti) y otros detalles.

Además de eso, también estoy bastante en contra de gran parte de los estilos contemporáneos de C ++ y OO. Aquellos que escribieron este código realmente bebieron el profundo OO y Modern C ++ kool-ade. Creo que en realidad hace que el código sea mucho más difícil de seguir, mucho más difícil decidir dónde arreglar o cambiar algo. No sé si esto es parte de la diferencia izquierda / derecha (o como quiera llamarlo) o no.

Pero debo trabajar en C ++: la gente depende de mí para mis ingresos. ¿Cuáles son los consejos y técnicas para hacer frente a esta situación, para ser lo más eficaz posible para mi empleador?

DarenW
fuente
99
No es una diferencia entre el cerebro izquierdo y el derecho: nadie puede comprender o modificar ese tipo de código C ++ sin un esfuerzo masivo, aparte de la persona que lo escribió (a menudo, ni siquiera ellos). Solo asegúrate de que cuando te pidan una estimación de cuánto tiempo tomará algo, que lo protejas unos pocos cientos por ciento para lidiar con el diseño "contemporáneo".
Carson63000
8
No te sientas tan frustrado. El C ++ es un lenguaje muy extraño, donde el objetivo del diseño no era la usabilidad (para los humanos) ni la compibilidad, claridad, corrección (para los compiladores). El único objetivo de diseño de C ++ era hacer que cada permutación léxica posible significara algo, incluso si era completamente poco práctico.
1
@Rocket: Lo explotaste :-) pero estoy de acuerdo en pedazos.
Geek
@mojuba: sí, utilizamos una forma extra avanzada de C ++: D
DarenW el
2
Esto se llama "Código heredado", y el problema no es solo para usted. Consulte en.wikipedia.org/wiki/Legacy_code para obtener un enlace al libro de Michael Feathers sobre cómo domar a una bestia de este tipo.

Respuestas:

2

Intentar profundizar en el lado del diseño de cosas en las que sentirse cómodo con la confusión es una fortaleza, sería mi sugerencia en términos de progreso profesional. Como alguien a quien le gusta ser creativo, trabajar en el mantenimiento puede no ser una buena opción, mientras que trabajar en cosas nuevas puede ser mejor si eso es posible.

Si bien no hay nada de malo en querer enorgullecerse del trabajo de uno, querer no atascarse en los detalles puede ser algo que deba encontrar un nuevo enfoque para mejorar. En lugar de verlo como deprimido y sucio, puede haber otra perspectiva que podría hacerlo divertido de alguna manera.


Es probable que el soporte y el mantenimiento tengan sus ventiladores, ya que algunas personas preferirían modificar los sistemas existentes que instalar un sistema nuevo. Sé que tiendo a funcionar mejor con un sistema existente que estoy cambiando en lugar de tratar de sacar algo del éter.

Lo que puede intentar hacer es observar cuándo las personas quieren ideas para lidiar con varios puntos problemáticos y soluciones de lluvia de ideas, ya que esto es parte de lo que le gusta. No se trata de saber qué líneas de código cambiar, sino de decirle a alguien: "¿Miró en ese objeto y vio si está haciendo más de lo que dice?" Tipo de cosa.

Otro punto es saber lo que desea crear: ¿Gráficos, aplicaciones, sitios web, procesos o sistemas? Todas estas son cosas ligeramente diferentes que al querer crear, se le podría preguntar "¿Crear qué?"

JB King
fuente
Esta idea es casi directa de la reunión con mi jefe ayer. Me pregunto: ¿no es la creación de cosas siempre más deseable para todos, y el mantenimiento siempre es como limpiar inodoros? Si alguien dice "¡Prefiero CREAR cosas!" serían tomados en serio?
DarenW
44
Me gusta el mantenimiento del código. Sin embargo, se parece más a la cirugía que a la limpieza de inodoros: debe reparar parte de un sistema que funciona, sin romperlo.
Frank Shearar
"sacar algo del éter": me recuerda a un sueño en el que sacaba rosquillas de limón del aire para impresionar a una chica: D Pero en serio, ese es un punto clave para mí: siempre tengo ganas de pensar creando cosas nuevas.
DarenW
3
@FrankShearar A veces es como una cirugía realizada en el baño; (
mlvljr
16

No suena (al menos para mí) como si su código estuviera particularmente orientado a objetos, o particularmente similar a "Modern C ++". Por el contrario, uno de los elementos clave de una buena orientación a los objetos es la encapsulación, cuyo objetivo principal es reducir la cantidad de cosas que necesita realizar un seguimiento en un momento dado. Del mismo modo, "un flujo de ejecución muy parecido a un espagueti ... no suena orientado a objetos ni moderno (nada).

Ahora, supongo que si mirara el código que está manteniendo, podría verlo de manera diferente, y / o podría ver mi código como similar a lo que está manteniendo en este momento, eso es un poco difícil de adivinar. Es cierto que si tratas de rastrear cada detalle de cómo funciona mi código, supongo que podrías verlo como un flujo de control bastante similar a un espagueti.

Solo por ejemplo, soy mucho más aficionado (o al menos tolerante) a bastantes conversiones implícitas que muchos programadores: utilizo bastante las cosas como clases proxy. Esto significa que podría haber fácilmente tres o cuatro objetos temporales de diferentes tipos creados en el curso de llamar a una sola función (y tenga en cuenta que no estoy hablando de ejecutar la función, solo llamarla ). Por supuesto, todos esos objetos temporales serán destruidos nuevamente al final de la expresión que contiene la llamada a la función. Si lo cuenta, podría tener fácilmente media docena o más funciones separadas invocadas al llamar / regresar desde una función que se llama "visiblemente" en el código.

El objetivo de hacer las cosas de esa manera, sin embargo, es hacer que sea fácil ignorar la mayoría de las curiosidades involucradas en (por ejemplo) tratar detalles como cómo se representa un objeto en particular, y concentrarse únicamente en lo que realmente es . Solo necesitaría lidiar con la mayor parte de ese código si vio un error en esa parte en particular. Sin embargo, trato de evitar mucho de eso creando clases tan pequeñas y sencillas que hacen tan poco, que se necesita apenas más que una mirada para darse cuenta de que es obviamente correcto, por lo que es fácil ignorarlo a partir de ese momento.

Jerry Coffin
fuente
Ugh! ¡Ese tipo de cosas me da escalofríos! Tal vez mi estilo de pensamiento es de muy bajo nivel, es decir, "programación orientada al código de operación", para estar cómodo con esto.
DarenW
2
En cuanto a "hacer que sea fácil ignorar la mayoría de las curiosidades", el estilo de codificación parece ser un glorificador de curiosidades. Al tratar de arreglar una pequeña cosa esta semana, hubo cantidades increíbles de detalles que realmente no hacen nada.
DarenW
"... creando clases tan pequeñas y simples, que hacen tan poco, que se necesita apenas más que una mirada ..." ¿Hay algún buen ejemplo de código abierto de esto?
DarenW
2
@darrenw seguro, smalltalk 80
Tim Williscroft
10

Advertencia : esta respuesta es muy larga y tiene mucho psicópata (que trato de explicar, pero aún así). ¿Qué puedo decir? La psicología es una de mis asignaturas favoritas fuera de la programación.

Soy un artista, principalmente, aunque me describo como artista / físico. Si bien puedo hacer matemáticas, lidiar con palabras y las cosas "lógicas" consideradas cerebro izquierdo, es un esfuerzo y cometo errores, mientras que me va bien y la mayoría de las veces pienso en términos de las cosas asociadas con el cerebro derecho pensamiento: relaciones espaciales, contexto holístico de panorama general, etc. Por supuesto, todo eso es confuso, ya que la teoría del cerebro derecha-izquierda está demasiado simplificada y ninguna actividad mental es tan simple. Sin embargo, tengo la sensación de que encajo bien con artistas, directores de video, chefs y otros tipos creativos de pensamiento no verbal, mientras que la mayoría de las personas en "TI" o ingenieros de software hardcore tienen mentes que funcionan de manera diferente, con atención al detalle, manteniendo muchos detalles en mente al mismo tiempo, y fuertes capacidades racionales y verbales.

En realidad, esto se basa en una visión algo anticuada de la neurociencia. En un momento dado, los científicos creían que el cerebro izquierdo solo era responsable de la lógica y los datos sensoriales en bruto, mientras que el cerebro derecho era el único responsable de la intuición y el sentimiento. Como resultado, el cerebro izquierdo es realmente capaz de todo lo que es el cerebro derecho y viceversa. Como alguien que es extremadamente inteligente pero lógico, terrible con direcciones y orientación espacial, y completamente desprovisto de la creatividad artística que tradicionalmente se asocia con el cerebro derecho, puedo dar fe de esto.

La mejor manera de pensar en la diferencia entre el cerebro izquierdo y derecho es pensar en ellos como imágenes especulares entre sí. Para comprender esto, necesita algunos datos de fondo. A un psicólogo llamado Carl Jung se le ocurrió una teoría de la personalidad en los años 20 que dividió la personalidad en un par de dimensiones. Probablemente hayas oído hablar de uno de ellos: introversión vs extraversión. He escrito un par de publicaciones de blog sobre este tema, pero básicamente se reduce a esto: la introversión se diferencia de los demás, mientras que la extraversión se centra en cómo puede conectarse con los demás. Esto se conoce como una "actitud".

Entonces tienes cuatro funciones cognitivas diferentes: pensamiento, sentimiento, sensación e intuición. En aras de la simplicidad, digamos que dos de estas funciones se consideran funciones de "juzgar" (pensar y sentir), mientras que las otras dos son funciones de "percepción". Las funciones de juzgar toman decisiones. Cuando estás en una mentalidad de juzgar, estás tratando de evitar sorpresas. Desea haber tomado todas las decisiones correctas de antemano para no tener que adaptarse cuando surgen sorpresas. Debido a que ha planificado tanto de antemano, puede tener una tendencia a volverse rígido e inflexible una vez que se ha tomado una decisión. Por otro lado, una mentalidad perceptiva tiende a preferir volar por el asiento de sus pantalones y rodar con los golpes.

En general, combina la función y una actitud para crear una función-actitud (nombre creativo) (pensamiento introvertido, sentimiento extravertido, etc.). Las personalidades conscientes de las personas se definen principalmente por una actitud-función dominante y una actitud-función auxiliar. Finalmente, los psicólogos llegaron a un consenso de que existen dos tipos de personas: personas cuyas dos funciones principales consisten en una función de juicio introvertida y una función de percepción extravertida, o personas cuyas dos funciones principales consisten en una función de juicio extravertida y una función de percepción introvertida . Si alguna vez ha realizado la prueba de personalidad MBTI o similar, la última carta le indica en qué categoría pertenece. Si eres un P, significa que eres un juez introvertido / perceptor extravertido y J es al revés.

Todavía conmigo hasta ahora? Aquí es donde llego a lo que quise decir con los dos lados como imágenes especulares entre sí. Nadie se dio cuenta en ese momento, pero esencialmente estaban construyendo un bosquejo de dónde reside la funcionalidad en el cerebro. De hecho, cada una de las actitudes funcionales de Jung se ha mapeado en una ubicación aproximada en el cerebro. Como resultado, todas las funciones P (juicio introvertido y percepción extravertida) están en el lado derecho del cerebro y las funciones J están en el lado izquierdo del cerebro.

Cada vez que dices que las personas con cerebro izquierdo son buenas en los detalles y que las personas con cerebro derecho son buenas en el "panorama general" (aunque yo diría que "el panorama completo" sería más preciso), te estás enfocando en el lado extravertido de las cosas . Si una persona con cerebro izquierdo maneja a una persona con cerebro derecho, el zurdo querrá conocer todos los detalles sobre cómo el derecho hará su trabajo por adelantado y de antemano. Quieren los requisitos establecidos en piedra y plazos estrictos decididos de antemano. El derecho solo quiere una idea muy amplia de lo que deben hacer para poder completar los detalles más adelante.

Sin embargo, tenga en cuenta que esto no parece ser lo que está experimentando. Parece que el código de los zurdos probablemente no fue muy bien pensado de antemano y tiene algunos problemas que podrían haberse evitado por alguna previsión. Esto es porque cuando construyes modelos abstractos de cosas como el código en tu cabeza, estás usando tu función introvertida , que funciona al revés. El derecho quiere construir ese modelo de antemano y hacerlo de tal manera que complete todos los detalles necesarios o pueda completar fácilmente todos los detalles. Además, pueden volverse rígidos en términos del mejor enfoque a tomar (tenga en cuenta que está tomando una línea dura sobre cómo se siente acerca de las características más avanzadas de C ++). El modelo de los zurdos será más ad hoc y se completará a medida que avanzan.

Mi experiencia es que debido a esto, los zurdos acusarán a los diestros de sobre-diseñar todo mientras que los derechistas acusarán a los zurdos de ser demasiado rápidos y sucios. Ambas partes tienen un grano de verdad para ellos, pero solo cuando ese enfoque se lleva al extremo. Sin embargo, esto es lo divertido: están adoptando enfoques opuestos para lograr el mismo objetivo (es decir, hacer las cosas). Los derechistas quieren que su modelo se decida por adelantado para que puedan dedicar menos tiempo a implementarlo y, por lo tanto, realizar todo el proyecto antes. Los zurdos quieren dedicar menos tiempo a la arquitectura para poder hacer las cosas antes.

Por cierto, estas dos actitudes se invierten cuando se trata de cosas de tipo de gestión de proyectos (determinación de plazos, elaboración de requisitos, etc.). Esto puede conducir a una situación realmente confusa en la que un lado acusa al otro de ser demasiado rígido, mientras que el otro afirma que el otro lado no está planeando con suficiente anticipación, y luego el siguiente argumento hace que ambos lados tomen la postura exactamente opuesta.

¿Qué puedes hacer con todo esto? Nada más que ser consciente de estas diferencias y tratar de acomodar la opinión del otro lado tanto como sea posible. Sin embargo, el problema es que esto va en ambos sentidos. Puede comprender y complacer a los zurdos tanto como sea posible, pero eso no hará mucha diferencia a menos que estén tratando de devolver el favor. Este es siempre el desafío. No porque los zurdos sean imbéciles y quieran hacerles la vida imposible, sino porque los zurdos están acostumbrados a ser dominantes en el campo de la programación. Si su forma de pensar se hizo eco de casi todos los demás, estaría bastante convencido de que también tiene razón.

Jason Baker
fuente
Muy bien, y lo suficiente como para leer para posponer el trabajo real por un tiempo!
DarenW
66
Cosas muy interesantes ¿Tienes alguna fuente?
Mason Wheeler
4

Confia en tu intuicion. Si usted es un buen profesional, significa, independientemente de su "capacidad mental", izquierda o derecha, cosas que los cerebros de la izquierda hacen conscientemente, que puede hacer intuitivamente. Al final es lo mismo. Desafortunadamente no controlamos nuestra subconsciencia, pero hace el trabajo más rápido que nuestra conciencia, si es que lo hace. Estas ideas intuitivas que salen de la nada son exactamente el resultado de cálculos subconscientes.

Ah, y puede fallar, es demasiado poco confiable. Pero ya que preguntaste ...;)

mojuba
fuente
2

Pienso visualmente también y los detalles de la tipografía me aturden.

Términos de Google: sitio británico de dislexia también Estilos de aprendizaje: pensamiento espacial visual, aprendizaje total o parcial.

Conceptos Primero, Consejos Después

  1. Las personas con cerebro derecho imaginan todo en su 'mente'.
  2. Cuando su visualización se corresponde bien con la realidad, el trabajo es fácil
  3. Los pensadores con cerebro derecho que no lo hacen El pensamiento con cerebro izquierdo debe confiar en la visualización
  4. Los estudiantes con cerebro derecho aprenden todo de una vez "¡Ajá!" luego ajusta los detalles en la construcción mental. Necesitan primero la descripción general, luego los detalles.
  5. Sin una descripción general del contexto, los detalles flotan en el vacío, desconectados en el ojo de la mente, por lo que se debe utilizar la memorización de la fuerza bruta. Muy difícil para el cerebro derecho.

CONSEJOS que me ayudaron:

  • 1 Use Color para distinguir partes de sintaxis
    1. escriba el pseudocódigo del código que está depurando: esto hace esto, luego vaya aquí y etiquete las secciones de código para que coincidan
    2. si los objetos fueran, digamos, animales reales, tendrían hábitos y comportamientos esperados. Esta es una forma más fácil de visualizar la codificación.
    3. Me imagino el código como una historia con pseudicode como mis notas y luego sigo el proceso.

  • ¿Qué sección arreglar después?

  • Mi flujo de trabajo

  • ¿Quien vive allí? (proceso, conexiones, datos, etc.)

  • que necesitan hacer (función) OK

    Okay

  • codificarlo en algún lugar puede ser sintaxis / corrector ortográfico OK copiar y pegar

  • Prueba

    Resultado -> funciona? Sí, sigue adelante

    ¿No? Los personajes deben estar representando a Hamlet donde todos mueren.

  • Regreso al medio ambiente

  • ¿dejó algo fuera ?, errores de sintaxis
  • necesita una conexión
  • necesita datos
  • código de error tiene significado?
  • Funciona en otra parte del código?
  • Problema de versión?
  • se supone que funciona
usuario87105
fuente