fundo
Quanto mais trabalho em um projeto, menos claro ele fica. É como se eu não pudesse mais separar várias classes / objetos na minha cabeça. Tudo começa a se confundir e é extremamente difícil desmontar tudo de novo. Começo a colocar funções em classes onde elas realmente não pertencem e cometo erros tolos, como escrever código que mais tarde acho 100% obsoleto; as coisas não são mais claramente mapeadas na minha cabeça. Não é até dar um passo atrás por várias horas (ou dias, às vezes!) Que eu posso realmente ver o que está acontecendo novamente e ser produtivo.
Normalmente, eu tento lutar com isso, sou tão apaixonado por codificação que nem sei pela vida o que mais eu poderia estar fazendo. É quando as coisas ficam realmente esquisitas, fico tão na cabeça que perdi o contato com a realidade (em certa medida), pois várias ações, como derramar um copo de água, não acontecem mais em um nível consciente. Isso acontece no piloto automático, durante o qual praticamente toda a minha concentração consciente (isso é alguma coisa?) É dedicada à solução de problemas sem sentido (tentando separar elementos do código). Parece uma batalha perdida.
Por isso, fiz um teste de QI há um tempo (a Wechsler Adult Intelligence Scale, acredito que fosse) e constatou que minha Aptidão Espacial estava bastante baixa. Ainda tenho uma pontuação total decente , um pouco acima da média, por isso não terei que mexer nas coisas com a vida, mas estou um pouco preocupado que isso seja uma desvantagem ao escrever / projetar programas de computador que ganhei ' nunca será capaz de fazê-lo a sério ou profissionalmente.
Questão
Estou muito interessado no que as outras pessoas pensam disso ...
Poderia uma baixa aptidão espacial ser a causa dos problemas descritos acima?
Como a programação é afetada pela aptidão espacial?
Talvez eu devesse procurar mais, de acordo com o ADD ou algo semelhante, porque fui diagnosticado com ADD aos 17 anos (5 anos atrás), mas o medicamento que recebi não pareceu me afetar tanto, então nunca tomei tudo tão sério.
Até onde eu sei, as pessoas nascem com baixa / média / alta aptidão espacial, então acho interessante descobrir se os mais afortunados são melhores programadores por direito de nascimento.
fonte
it turned out my Spatial Aptitude was quite low. I still got a decent score, just above average,
Não sou psicóloga, mas se leio corretamente o inglês e entendo a definição de média, realmente não entendo como isso se traduz emquite low
... Talvez você esteja pensando demais nisso ... :)Respostas:
Na verdade, existem alguns dados de pesquisa sobre isso, coletados principalmente nos últimos 35 anos, e também experimentei alguns fenômenos semelhantes, embora não regularmente. Veja abaixo mais.
Dados de Pesquisa
Parece haver alguma correlação, porém menor, com base nas pesquisas realizadas e resumidas nos trabalhos a seguir. No entanto, como geralmente ocorre com a pesquisa, os modelos de estudo diferem entre os estudos e devem ser revisados de perto para entender por que os resultados apresentam diferenças nas conclusões.
Explorando os preditores psicológicos da realização da programação [ PDF ] (Erdogan, Aydin, Kabaca, 2008)
Infelizmente, este é vago em detalhes. Aponta para o "alto impacto" das "aptidões" em geral, mas, em seguida, apenas aponta para outras pesquisas sem fornecer os resultados para cada teste de aptidão, por isso não sabemos como se sai a capacidade espacial. É mais uma revisão de literatura do que uma pesquisa real.
Habilidade espacial e aprendizado de programação [ PDF ] (Jones, 2008)
Preditores de sucesso em um primeiro curso de programação [ PDF ] (Simon, Fincher & al., 2006)
Quem provavelmente adquirirá habilidades de programação? (Shute, 1991)
Capacidade de lateralização e programação hemisférica (Gasen, Morecroft, 1990)
Correlatos da resolução de problemas em programação [ PDF ] (Choi-man, 1988)
Interessante ... Bom modelo de estudo, e resultados quantificados com vários grupos de estudo e respondendo pela confiabilidade dos fatores de estudo. Isso produz que:
Aprendizado, pesquisa e representação gráfica da programação (Taylor, Cunniff, Uchiyama, 1986)
Requisitos cognitivos da aprendizagem de programação de computadores em configurações individuais e em grupo (Webb, 1985)
Correlatos cognitivos de tarefas de programação em programadores iniciantes (Irons, 1982)
Pesquisa sobre aptidão para aprender: um relatório de progresso [ PDF ] (RE Snow, 1976)
Leve-o com uma pitada de sal: alguns são relativamente antigos, os testes de QI podem ter mudado desde então. Não fiz uma pesquisa aprofundada para encontrar citações de cada artigo para ver se elas foram confirmadas ou desmascaradas posteriormente.
Alguns links (especialmente o tipo [PDF]) podem não funcionar para você se você não tiver uma afiliação a uma biblioteca que dê acesso a esses conteúdos online.
Opinião pessoal
Aviso e divulgação: Eu sou NEM um psicólogo NOR um neurologista, mas tenho vindo a estudar e ensinar programação para ambas as crianças pequenas (começando 6) e estudantes universitários (até 60!).
Tendo estudado com AND e ensinado alunos como professor universitário, incluindo alguns alunos afetados por problemas espaciais (e outros com deficiências mais fortes), devo dizer que, embora pudesse ter sido (não acompanhei meus alunos com base em deficiências, obviamente) que alguns teriam se registrado em uma parte inferior da curva geral, ainda me lembro claramente de uma pontuação alta (e mesmo uma em particular sendo a principal da turma por pelo menos 2 anos).
O que quero dizer é que, embora possa ter um efeito e, como mostra algumas das pesquisas acima, não é responsável pela maior parte de sua capacidade de aprender a programar e pensar como um programador. É irrelevante, pois isso não o impedirá de aprender se você realmente deseja, e não o impedirá de trabalhar no caso geral, embora isso possa (como pode ser o seu caso) tornar um pouco mais difícil para você.
Praticamente não há limite para o que e com que rapidez você pode aprender .
Afinal, nenhum programador não gosta de um bom desafio, certo? (Eu estou olhando para você, RSI)
Experiência pessoal (possivelmente não relacionada)
Pode ser que você seja muito apaixonado. Quantas horas você trabalha por dia e por semana? Você faz intervalos regulares?
Um caso semelhante?
Em um período da minha vida, trabalhei dias de pelo menos 14 horas todos os dias da semana, durante todo o ano, a ponto de culminar em gravar semanas de 120 horas de trabalho na frente de uma tela de computador . Sim, faltam apenas 48 horas por semana para comer, dormir, viajar de e para o trabalho ( dica: evite dirigir !! ), tomar banho e outras funções vitais. Nesse ponto em particular, eu quase conseguia dormir num piscar de olhos (embora geralmente tenha problemas para dormir), masEu quase sempre ficava sonhando com código, e de repente percebia no chuveiro ou mesmo ao caminhar, correr ou executar tarefas domésticas que minha mente voltava a ele no piloto automático, como você mesmo disse. Infelizmente, eu não magicamente resolvia problemas enquanto dormia; estaria mais próximo do que você parece descrever e experimentar: um gigantesco turbilhão de pensamentos confusos girando na minha cabeça, o que meio que (parece) faria sentido em uma escala maior, mas não expressaria claramente nenhuma solução e sem muito sucesso agarrando um desses pensamentos para focalizá-lo, dissecá-lo claramente e transformá-lo em algo útil. E isso geralmente era bastante cansativo e angustiante.
O relaxamento pode ajudar
Talvez você precise se acalmar um pouco, relaxar e trabalhar menos. Tente encontrar algo para tirar sua mente. Naquela época, acabava renunciando muitas horas preciosas de sono para fazer algo que realmente pararia essa louca linha de pensamento. Parece contraproducente, mas na verdade eu preferia fazer algumas coisas em que realmente relaxava do que dormir mais e não descansar. A distração para as baterias nervosas e o sono para as baterias físicas, em certo sentido.
Identificando gatilhos
Se esse não for o seu caso, talvez haja algo mais envolvido no desencadeamento desse estado para você. Tente isolar os elementos presentes nessas situações e verifique se é possível reproduzir essa condição em outros ambientes, para ver se você também encontra esses elementos. Isso acontece mais no trabalho ou em casa, etc ...
Isolamento
Além disso, você já deve ter ouvido e tentado isso, mas eu tenho um amigo com uma deficiência espacial menor, e geralmente ajuda para ele, se estiver trabalhando em computadores, ficar em uma sala mais escura, para evitar ter vistas e janelas complexas demais. aberto (para evitar distrações) e, em geral, para manter as coisas um pouco minimalistas (tanto em termos de design e cores, quanto em termos de conteúdo e representação).
Tente também fazer intervalos regulares e deixar sua mente livre por curtos períodos de tempo a cada 1 ou 2 horas, com base no que funciona melhor para você. Talvez adote a técnica Pomodoro ou algo semelhante (não tenho pesquisas sobre correlação com isso, mas pode ser útil para forçar você a fazer pausas).
fonte
Ech ... isso merece mais do que um comentário.
Pare de brigar. Você está torcendo as coisas e cometendo erros, certo? Você pode ter alguns problemas únicos, mas a maneira pela qual seu cérebro está se rebelando é normal para quem passa muito tempo hiper-focado em um problema. Quando eu era mais jovem, passava muito do meu dia pensando naquele nível altamente consciente e eu não estava fazendo nenhum favor a mim mesma. Seu problema não é que você não está se esforçando o suficiente, é que você não sabe quando parar.
Finalmente aprendi a apreciar o valor de colocar as coisas em segundo plano quando descobri que a única maneira de dormir a uma hora razoável era pensar em absolutamente nada e fiquei chocado ao descobrir que em 10 minutos mais ou menos Adormecia enquanto normalmente pensava, pensava, pensava por pelo menos algumas horas antes de cair de exaustão mental.
A partir daí, achei mais fácil aprender a reconhecer quando estava colocando um excesso de pensamento consciente em um problema e deixá-lo passar por um tempo. Fiquei surpreso ao descobrir o quanto isso realmente contribui para ajudá-lo a resolver um problema.
Eu recomendo o seguinte:
Quando algo está ficando torcido na sua cabeça e você não tem o luxo de dar um tempo e dar um passeio ou algo assim, tente mudar de marcha e se concentrar em um problema muito diferente por um tempo.
Nunca pule o almoço e sempre saia do escritório. Dê a si mesmo até chegar à porta para chegar a um ponto de parada ou simplesmente soltá-la. Qualquer coisa que valha a pena ter em mente estará lá quando você voltar a ela e todas as coisas que você não precisava desaparecerão. Quanto mais você descobre isso, mais fácil fica.
Regularmente, você mesmo pensará em nada durante o dia. Mesmo que seja apenas por um minuto enquanto você pega esse copo de água.
Tente aproveitar o OOP ou qualquer outra abordagem arquitetônica centrada no domínio do problema para pensar em menos. Quem são os atores no seu código no nível mais alto? Eles não devem ter relacionamentos complexos um com o outro. Isso permite que você se concentre mais em uma parte do problema de cada vez.
Alguns princípios de codificação que podem ajudar
DRY é uma prática geral de codificação, pois "Roubar é errado" pode ser aplicado a quase toda ética / moralidade. Existem exceções muito raras. Mantenha-os muito raros.
Se você tem o hábito de resolver em excesso os problemas que poderá enfrentar no futuro, pare com isso. Nada é mais à prova de futuro ou "escalável" do que o código que não é mais complexo do que precisa ser. "Empresa" é mentira.
Padrões complexos geralmente prometem longas listas de recompensas. Existem apenas três coisas que devem importar na maioria das vezes. É fácil de ler. É fácil de reutilizar. É fácil de modificar. Pense em termos de uso mínimo de força que um artista marcial possa e aplique esse princípio à complexidade. Exatamente o suficiente para resolver o problema é ideal.
Escreva sua interface primeiro. E não, não quero dizer as construções C # / Java que devem ser usadas apenas quando necessário, quero dizer a API de seus objetos. O que a classe / objeto precisa fazer? Escreva esses métodos vazios e dê a eles nomes de argumentos. Não preencha os espaços em branco até terminar completamente. Não há problema em fazer ajustes mais tarde, mas depois de estabelecer o que ele precisa ser capaz de fazer, você pode se concentrar em como cada coisa, uma de cada vez, precisa ser feita. O motivo pelo qual você pode tentar manter tanto em sua mente como costuma fazer pode ser porque você tem implementações acontecendo para problemas que deveriam ter sido resolvidos muito antes de você chegar a um determinado estágio de um processo. Tem muito é e tem métodos? É disso que estou falando.
Diagnóstico?
Eu acho que a preocupação de conscientização espacial foi bem coberta. O que quer que você decida nessa área, eu daria uma revisada no ADD, principalmente se você relutasse na primeira vez. Definitivamente, isso parece muito com o hiper-foco ao extremo. Por fim, deixe que o amor pela codificação o leve a encontrar maneiras de mitigar esses problemas, e espero que sua carreira dê certo.
fonte
Quantas horas você trabalha antes de começar a ver esse desfoque? Muitos programadores médios a bons que conheço do trabalho 4, podem levar cinco horas antes de tomar um café, almoçar ou algo assim. O mais longo desses sprints que eu já li foi quando Guy L Steele e Richard M Stallman fizeram um sprint de 10 horas ou mais ao escrever o Emacs. Steele continua dizendo que não gostaria de fazer um sprint tão longo novamente.
Se você é relativamente novo em (menos de, digamos, 5000 horas (esse número veio do post de Peter Norvig sobre aprender a programar em dez anos, diminuindo pela metade as 10000 horas que ele recomenda para se tornar um programador especialista)), isso soa muito normal, exceto na parte em que você diz que precisa de dias de folga. Talvez você esteja se esgotando para fazer uma pausa tão longa?
fonte
Pelo que você descreve, seu problema pode ter várias causas:
Inexperiência
Perda de foco / fadiga
Baixas habilidades espaciais
A inexperiência pode ser resolvida com ... bem, ganhando mais experiência, basicamente. Por mais óbvio que possa parecer, praticando mais, você se encontrará em situações complexas de programação com mais frequência e aprenderá progressivamente a lidar com elas. No momento, você pode não ter os esquemas e reflexos mentais para fazer as conexões certas, tirar as conclusões certas e desbloquear essas situações, o que pode fazer você se sentir lento e escrever "código obsoleto", mas esses padrões de solução de problemas serão progressivamente ocorre na sua cabeça à medida que você se torna mais experiente (você tem apenas 22 anos, pelo que entendi, que ainda é muito jovem).
Existem várias técnicas para melhorar seu foco. Pomodoro e Getting Things Done são dois exemplos. No campo da programação, o Desenvolvimento Orientado a Testes também é algo que eu realmente recomendaria, pois obriga você a se concentrar em um objetivo pequeno e alcançável de cada vez (pequenos passos). Com uma abordagem TDD, é muito menos provável que você "coloque funções em classes nas quais elas realmente não pertencem", pois você é forçado a definir claramente uma responsabilidade de sua classe com um teste e, em seguida, se concentrar apenas na implementação quando codificar , em vez de saltar entre várias classes e preenchê-las aleatoriamente, pouco a pouco.
Fadiga e quedas de atenção podem ser evitadas adotando-se um ritmo sustentável com pausas frequentes. Você pode encontrar interesse nessa apresentação de Linda Rising em ser mais produtivo, respeitando nosso cérebro: nascido para o ciclo .
Quanto às baixas habilidades espaciais, receio que não haja muito que você possa fazer sobre isso. No entanto, o trabalho duro pode atenuá-lo e está longe de ser a única habilidade necessária na programação. Coisas como criatividade, paixão, entusiasmo, rigor, habilidades analíticas, nitidez, boa compreensão de questões de negócios, habilidades de colaboração podem mais do que compensar uma visualização mental mais fraca do que a média da base de código.
Em resumo, o que você precisa da IMO é:
Disciplina
Prática
Um ritmo sustentável
fonte