Como pode um raciocinador de direita lidar com um código massivo de raciocínio de esquerda? [fechadas]

11

Sou artista, principalmente, apesar de me descrever como artista / físico. Embora eu possa fazer matemática, lidar com palavras e as coisas "lógicas" consideradas no lado esquerdo do cérebro, é um esforço e eu cometo erros, enquanto eu me saio bem e na maioria das vezes penso em termos daquelas coisas associadas ao lado direito do cérebro pensamento - relações espaciais, contexto holístico de quadro geral, etc. É claro que tudo isso é confuso, pois a teoria do cérebro direito-esquerdo é simplificada demais e nenhuma atividade mental é tão simples. No entanto, sinto que me encaixo bem com artistas, diretores de vídeo, chefs e outros tipos de pensamento não-verbal e criativo, enquanto a maioria das pessoas em "TI" ou engenheiros de software hardcore tem mentes que funcionam de maneira diferente, com atenção aos detalhes, mantendo muitos detalhes em mente ao mesmo tempo e fortes capacidades racionais e verbais.

Então, aqui estou eu, em um trabalho que está sendo pago para corrigir bugs exigentes e obscuros em um enorme enxame de software C ++, muito pesado em OO, e qualquer linha de código não faz sentido, a menos que eu tenha em mente outros vinte nomes de classes e métodos, relações entre eles, o fluxo de execução (muito parecido com espaguete) e outros detalhes.

Além disso, também sou bastante contra muitos dos estilos C ++ e OO contemporâneos. Quem escreveu esse código realmente bebeu o profundo OO e o Modern C ++ kool-ade. Acho que realmente torna o código muito mais difícil de seguir, muito mais difícil de decidir onde consertar ou alterar alguma coisa. Não sei se isso faz parte da diferença esquerda / direita (ou o que você quiser chamar) ou não.

Mas trabalho com C ++, eu preciso - as pessoas dependem de mim para receber minha renda. Quais são as dicas e técnicas para lidar com esta situação, para ser o mais eficaz possível para o meu empregador?

DarenW
fonte
9
Não é uma diferença entre o lado esquerdo e o lado direito - ninguém pode compreender ou modificar esse tipo de código C ++ sem grande esforço, além da pessoa que o escreveu (geralmente, nem mesmo eles). Apenas certifique-se de que, quando lhe for pedido uma estimativa de quanto tempo levará algo, você terá algumas centenas de por cento para lidar com o design "contemporâneo".
Carson63000
8
Não fique tão frustrado. O C ++ é uma linguagem muito estranha, onde o objetivo do design não era a usabilidade (para humanos) nem a compilabilidade, clareza, correção (para compiladores). O único objetivo de projeto do C ++ era fazer com que cada permutação lexical possível significasse algo, mesmo que fosse completamente impraticável.
1
@Rocket: Você estragou tudo :-) mas eu concordo em pedaços.
Geek
@mojuba - sim, usamos uma forma extra-avançada de C ++: D
DarenW:
2
Isso é chamado de "Código herdado" e o problema não é apenas para você. Veja en.wikipedia.org/wiki/Legacy_code para obter um link para o livro de Michael Feathers sobre como domar uma fera.

Respostas:

2

Tente se aprofundar no lado do design, em que estar confortável com a imprecisão é um ponto forte seria minha sugestão em termos de progressão na carreira. Como alguém que gosta de ser criativo, trabalhar na manutenção pode não ser uma boa opção, enquanto trabalhar em coisas novas pode ser melhor se isso for possível.

Embora não haja nada de errado em querer algum orgulho no trabalho, querer não se atolar nos detalhes pode ser algo que talvez você precise encontrar uma nova abordagem para melhorar. Em vez de encará-lo como algo desagradável, pode haver outra perspectiva que possa torná-lo divertido de alguma forma.


O suporte e a manutenção provavelmente têm seus fãs, pois algumas pessoas preferem ajustar os sistemas existentes do que instalar um novo sistema. Sei que costumo trabalhar melhor com um sistema existente que estou mudando, em vez de tentar extrair algo do éter.

O que você pode tentar fazer é observar quando as pessoas desejam idéias para lidar com vários pontos problemáticos e soluções de brainstorm, pois isso faz parte do que você gosta. Não se trata de saber quais linhas de código mudar, mas se você pode dizer a alguém: "Você olhou nesse objeto e viu se ele está fazendo mais do que afirma?" tipo de coisa.

Outro ponto é saber o que você deseja criar: Gráficos, aplicativos, sites, processos ou sistemas? Essas são coisas um pouco diferentes que, ao criar, você pode ser solicitado a "Criar o quê?"

JB King
fonte
Essa ideia está quase fora da reunião com meu chefe ontem. Eu me pergunto - não é criar coisas sempre mais desejáveis ​​para todos, e a manutenção sempre como limpar banheiros? Se alguém sai por aí dizendo "Prefiro CRIAR coisas!" eles seriam levados a sério?
darenw
4
Eu gosto de manutenção de código. É mais como cirurgia do que limpar banheiros: você precisa consertar parte de um sistema em funcionamento, sem quebrá-lo.
Frank Shearar
"retire algo do éter" - me lembra um sonho em que eu estava tirando rosquinhas de limão do ar para impressionar uma garota: D Mas, sério, esse é um ponto-chave para mim - estou sempre querendo, pensando, criando coisas novas.
darenw
3
@FrankShearar Às vezes é como cirurgia feita no banheiro; (
mlvljr
16

Não parece (pelo menos para mim) que seu código é particularmente orientado a objetos ou particularmente semelhante ao "Modern C ++". Pelo contrário, um dos elementos- chave da boa orientação a objetos é o encapsulamento, cuja principal intenção é reduzir o número de coisas que você precisa acompanhar a qualquer momento. Da mesma forma, "muito parecido com espaguete ... fluxo de execução" não soa orientado a objeto nem moderno (qualquer coisa).

Agora, suponho que se eu olhasse para o código que você está mantendo, talvez o veja de maneira diferente e / ou você veja meu código como sendo semelhante ao que está mantendo agora - é um pouco difícil de adivinhar. É verdade que, se você tentar rastrear todos os detalhes de como meu código funciona, suponho que você possa vê-lo como um fluxo de controle bastante parecido com espaguete.

Apenas por exemplo, gosto muito (ou pelo menos é tolerante) de algumas conversões implícitas do que muitos programadores - eu uso coisas como classes de proxy bastante. Isso significa que pode haver facilmente três ou quatro objetos temporários de tipos diferentes criados durante a chamada de uma única função (e observe que não estou falando de realmente executar a função, apenas chamá- la). Obviamente, todos esses objetos temporários serão destruídos novamente no final da expressão que contém a chamada de função. Se você contar, pode facilmente ter meia dúzia ou mais de funções separadas invocadas ao chamar / retornar de uma função que é "visivelmente" chamada no código.

O objetivo de fazer as coisas dessa maneira, no entanto, é tornar mais fácil ignorar a maioria das trivialidades envolvidas (por exemplo) em lidar com detalhes como a forma como um objeto específico é representado, e concentrar-se apenas no que realmente é . Você só precisaria lidar com a maior parte desse código se visse um bug nessa parte específica. Tento evitar muito disso, no entanto, criando classes tão pequenas e simples, que fazem tão pouco, que é preciso apenas um olhar para perceber que é obviamente correto, por isso é fácil ignorar a partir de então.

Jerry Coffin
fonte
Ugh! Esse tipo de coisa me faz estremecer! Talvez meu estilo de pensar seja de nível muito baixo, isto é, "programação orientada para código de operação", para me sentir confortável com isso.
darenw
2
Quanto a "tornar mais fácil ignorar a maioria das trivialidades" - o estilo de codificação parece ser um glorificador de trivialidades. Tentando consertar uma coisinha nesta semana, havia uma quantidade inacreditável de detalhes que realmente não fazem nada.
precisa saber é o seguinte
"... criando classes tão pequenas e simples, que fazem tão pouco, que são necessárias apenas uma olhada ..." Existem bons exemplos disso em código aberto?
DarenW
2
@darrenw sure, smalltalk 80
Tim Williscroft
10

Atenção : esta resposta é muito longa e tem muitas psicobabrações (o que tento explicar, mas ainda assim). O que posso dizer? A psicologia é um dos meus assuntos favoritos fora da programação.

Sou artista, principalmente, apesar de me descrever como artista / físico. Embora eu possa fazer matemática, lidar com palavras e as coisas "lógicas" consideradas no lado esquerdo do cérebro, é um esforço e eu cometo erros, enquanto eu me saio bem e na maioria das vezes penso em termos daquelas coisas associadas ao lado direito do cérebro pensamento - relações espaciais, contexto holístico de quadro geral, etc. É claro que tudo isso é confuso, pois a teoria do cérebro direito-esquerdo é simplificada demais e nenhuma atividade mental é tão simples. No entanto, sinto que me encaixo bem com artistas, diretores de vídeo, chefs e outros tipos de pensamento não-verbal e criativo, enquanto a maioria das pessoas em "TI" ou engenheiros de software hardcore tem mentes que funcionam de maneira diferente, com atenção aos detalhes, mantendo muitos detalhes em mente ao mesmo tempo e fortes capacidades racionais e verbais.

Na verdade, isso se baseia em uma visão um pouco ultrapassada da neurociência. A certa altura, os cientistas acreditavam que o cérebro esquerdo era responsável apenas pela lógica e pelos dados sensoriais brutos, enquanto o cérebro direito era o único responsável pela intuição e pelo sentimento. Como se vê, o cérebro esquerdo é realmente capaz de tudo o que é o cérebro direito e vice-versa. Como alguém extremamente inteligente, mas lógico, terrível com orientações e orientação espacial e completamente desprovido de qualquer criatividade artística tradicionalmente associada ao cérebro direito, posso atestar isso.

A melhor maneira de pensar na diferença entre o cérebro esquerdo e o direito é pensar nelas como imagens espelhadas uma da outra. Para entender isso, você precisa de alguns dados em segundo plano. Um psicólogo chamado Carl Jung criou uma teoria da personalidade nos anos 20 que dividia a personalidade em duas dimensões. Você provavelmente já ouviu falar de um deles: introversão vs extroversão. Eu escrevi alguns posts no blog sobre esse assunto, mas basicamente se resume a isso: a introversão se diferencia dos outros enquanto a extroversão se concentra em como ele pode se conectar aos outros. Isso é chamado de "atitude".

Então você tem quatro funções cognitivas diferentes: pensamento, sentimento, sensação e intuição. Por uma questão de simplicidade, digamos apenas que duas dessas funções são consideradas funções de "julgamento" (pensamento e sentimento), enquanto as outras duas são funções de "percepção". As funções de julgamento tomam decisões. Quando você está em uma mentalidade de julgamento, você está tentando evitar surpresas. Você deseja tomar todas as decisões corretas com antecedência, para não precisar se adaptar quando surgirem surpresas. Como você já fez tanto planejamento com antecedência, pode ter uma tendência a se tornar rígida e inflexível quando a decisão for tomada. Por outro lado, uma mentalidade de percepção tende a preferir voar pelo assento da calça e rolar com os socos.

Geralmente, você combina a função e uma atitude para criar uma (denominada de forma criativa) uma função-atitude (pensamento introvertido, sentimento extrovertido, etc.). As personalidades conscientes das pessoas são definidas principalmente por uma atitude funcional dominante e uma função funcional auxiliar. Eventualmente, os psicólogos chegaram a um consenso de que existem amplamente dois tipos de pessoas: pessoas cujas duas funções principais consistem em uma função de julgamento introvertida e uma função de percepção extrovertida ou pessoas cujas duas funções principais consistem em uma função de julgamento extrovertida e uma função de percepção introvertida . Se você já fez o MBTI ou teste de personalidade semelhante, a última letra informa em qual categoria você se enquadra. Se você é um P, significa que você é um julgador introvertido / percebedor extrovertido e J é o contrário.

Ainda comigo até agora? Aqui é onde eu entendo o que eu quis dizer com os dois lados sendo imagens espelhadas um do outro. Ninguém percebeu isso na época, mas eles estavam essencialmente construindo um esboço de onde a funcionalidade está no cérebro. De fato, cada uma das atitudes-funções de Jung foi mapeada para uma localização aproximada no cérebro. Como se vê, todas as funções P (julgamento introvertido e percepção extrovertida) estão no lado direito do cérebro e as funções J estão no lado esquerdo do cérebro.

Sempre que você diz que pessoas de cérebro esquerdo são bons em detalhes e pessoas de cérebro direito são boas no "quadro geral" (embora eu diria que "o quadro inteiro" seria mais preciso), você se concentra no lado extrovertido das coisas . Se uma pessoa de cérebro esquerdo administra uma pessoa de cérebro direito, o canhoto vai querer saber todos os detalhes sobre como o poderoso vai fazer seu trabalho antecipadamente e com antecedência. Eles querem que os requisitos sejam definidos em pedra e prazos rígidos sejam decididos com antecedência. Os justos querem apenas uma idéia muito ampla do que precisam fazer para preencher os detalhes mais tarde.

No entanto, observe que isso não parece não ser o que você está enfrentando. Parece que o código dos esquerdistas provavelmente não foi muito bem pensado com antecedência e tem alguns problemas que poderiam ter sido evitados por alguma premeditação. Isso ocorre porque, quando você cria modelos abstratos de coisas como código em sua cabeça, está usando sua função introvertida , que funciona ao contrário. O destro quer construir esse modelo com antecedência e fazê-lo de tal maneira que ele preenche todos os detalhes necessários ou facilmente pode preencher todos os detalhes. Além disso, eles podem se tornar rígidos em termos da melhor abordagem a ser adotada (observe que você está adotando uma linha dura sobre como se sente sobre os recursos mais avançados do C ++). O modelo dos esquerdistas será mais ad hoc e preenchido à medida que avançam.

Minha experiência é que, por causa disso, os canhotos acusarão os demais de projetar demais tudo, enquanto os canhotos acusarão os canhotos de serem muito rápidos e sujos. Ambos os lados têm um pouco de verdade para eles, mas somente quando essa abordagem é levada ao extremo. Aqui está o que é engraçado: eles estão adotando abordagens opostas para alcançar o mesmo objetivo (ou seja, fazer as coisas). Os destros querem que seu modelo seja decidido com antecedência, para que possam gastar menos tempo implementando a coisa e, portanto, concluindo todo o projeto mais cedo. Os esquerdistas querem gastar menos tempo arquitetando para que possam fazer as coisas mais cedo.

Aliás, essas duas atitudes são revertidas quando se trata de coisas do tipo gerenciamento de projetos (determinação de prazos, criação de requisitos etc.). Isso pode levar a uma situação realmente confusa, em que um lado acusa o outro de ser muito rígido, enquanto o outro afirma que o outro lado não está planejando com antecedência suficiente, e então o próximo argumento tem os dois lados adotando a posição exatamente oposta.

O que você pode fazer sobre tudo isso? Nada além de estar ciente dessas diferenças e tentar acomodar a visão do outro lado, tanto quanto possível. O problema, porém, é que isso acontece nos dois sentidos. Você pode entender e acomodar os esquerdistas o máximo possível, mas isso não fará muita diferença, a menos que eles estejam tentando retribuir o favor. Este é sempre o desafio. Não porque os canhotos sejam idiotas e queiram tornar a vida dos canhotos miseráveis, mas porque os canhotos estão acostumados a ser dominantes no campo da programação. Se o seu modo de pensar foi ecoado por praticamente todo mundo, você estaria convencido de que também está correto.

Jason Baker
fonte
Bem profundo e longo o suficiente para ler para adiar o trabalho de verdade por um tempo!
darenw
6
Coisas muito interessantes. Tem alguma fonte?
Mason Wheeler
4

Confie na sua intuição. Se você é um bom profissional, isso significa que, independentemente do seu "cérebro" - esquerdo ou direito - coisas que os esquerdistas fazem conscientemente, você pode fazer intuitivamente. No final, é a mesma coisa. Infelizmente, não controlamos nosso subconsciente, mas ele faz o trabalho mais rápido que a nossa consciência, se é que o faz. Essas idéias intuitivas surgidas do nada são exatamente os resultados de cálculos subconscientes.

Ah, e você pode falhar, é muito confiável. Mas desde que você perguntou ...;)

mojuba
fonte
2

Penso visualmente também e os detalhes da tipografia me atormentam.

Termos do Google: site britânico sobre dislexia também Estilos de aprendizagem: pensamento espacial visual, aprendizagem parcial ou parcial.

Conceitos Primeiro, Dicas Depois

  1. Pessoas com cérebro certo imaginam tudo no 'olho da mente'.
  2. Quando sua visualização corresponde bem à realidade, o trabalho é fácil
  3. Pensadores de cérebro direito que não fazem bem O pensamento de cérebro esquerdo deve confiar na visualização
  4. Alunos com o cérebro certo aprendem tudo de uma só vez 'aha!' depois encaixe os detalhes na construção mental. Eles precisam da visão geral PRIMEIRO, depois dos detalhes.
  5. Sem uma visão geral do contexto, os detalhes flutuam no vácuo, desconectados no olho da mente - portanto, a memorização da força bruta deve ser usada. Muito difícil para o cérebro direito.

Dicas que me ajudaram:

  • 1 Use Cor para distinguir partes da sintaxe
    1. escreva o pseudocódigo do código que você está depurando: faça isso, então vá aqui e identifique as seções do código para corresponder
    2. se os objetos fossem, digamos, animais reais, eles teriam hábitos e comportamentos esperados. Essa é uma maneira mais fácil de visualizar sobre o código.
    3. Imagino o código como uma história com pseudicódigo como minhas anotações e depois sigo o processo.

  • Qual seção corrigir a seguir?

  • Meu fluxo de trabalho

  • Quem mora ali? (processo, conexões, dados, etc.)

  • o que eles precisam fazer? (função) OK

    Está bem

  • codificá-lo em algum lugar, pode ser sintaxe / verificação ortográfica OK copiar e colar

  • Teste

    Resultado -> Funciona? Sim, continue

    Não? Os personagens devem estar representando Hamlet, onde todos morrem.

  • Retornar ao ambiente

  • deixou algo de fora ?, erros de sysntax
  • precisa de uma conexão
  • precisa de dados
  • código de erro tem significado?
  • funciona em outra parte do código?
  • Problemas com a versão?
  • é suposto funcionar
user87105
fonte