Antes de tudo, essa não é a pergunta genérica 'faça de mim um programador melhor', mesmo que o resultado de fazer essa pergunta possa parecer semelhante. Em programmers.SE, eu li e vi estes serem fechados aqui , aqui , aqui , aqui e aqui .
Todos sabemos que há uma infinidade de sugestões genéricas para aprimorar suas habilidades de programação (por exemplo, ler SO, ler livros recomendados, seguir blogs, envolver-se em projetos de código aberto etc.). Isso é não o que eu estou atrás.
Também reconheço os leitores ativos neste site e espero que funcione a meu favor, obtendo ótimas respostas. Da leitura da correspondência aqui, parece haver um grande número de pessoas experientes que estão trabalhando, ou já trabalharam, em campos relacionados à programação. E a maioria de vocês pode transmitir pensamentos de uma maneira eloquente e concisa.
Recentemente, notei a distinção entre alguém capaz de programar e um programador que pode realmente pensar . Recuso-me a acreditar que, para nos tornarmos excelentes programadores, simplesmente nos submetemos a uma vida inteira de comportamento semelhante a uma esponja (ou seja, absorvemos tudo relacionado ao nosso campo lendo, ouvindo, assistindo etc.). Eu diria mesmo que, simplesmente conhecendo cada conceito de programação que permite resolver o problema X mais rapidamente do que todos os que estão ao seu redor, se você não consegue pensar , está se limitando enormemente - você é apenas um robô rápido.
Eu gosto de acreditar que existe uma outra cara de ser um grande programador que não tem relação com o quanto você sabe sobre programação, mas é com que facilidade você pode entrelaçar novos conceitos e aplicá-los à sua profissão ou hobby de programação. Não vi ninguém se aprofundar ou abordar essa faceta da mente e da programação humanas. (Sim, também é possível que eu não tenha me esforçado o suficiente - desculpe se esse for o caso.)
Portanto, para quem passou algum tempo pensando sobre o que eu mencionei acima - ou talvez todos aqui, porque estou um pouco atrasado no meu desenvolvimento pessoal / profissional - quais são suas sugestões para aprender a pensar? Além da leitura usual, o que mais você fez para ser melhor do que as outras pessoas em sua / nossa área?
Respostas:
Minhas sugestões para aprender a pensar:
E mais importante, a linguagem determina o que não podemos pensar.
fonte
Da minha experiência, tudo se resume a duas coisas:
Além disso, todos são bastante diferentes na maneira como pensam sobre programação ou aprendem novas habilidades de programação. Eu sugiro que você continue tentando coisas novas e mantenha o que funciona bem para você.
fonte
Prática. Prática. Prática.
Sério, atividade mental (isto é, pensar) é como atividade física. Quanto mais você faz, melhor você o faz. (De fato, a atividade física também envolve um tipo de atividade mental. Os melhores esportistas não têm apenas os músculos no lugar certo ...)
Então, como você praticaria (efetivamente) o pensamento?
(Aqui estou generalizando de outra coisa ...)
Acho que você identificaria problemas de pensamento que considera difíceis (mas não impossíveis) e tentaria resolvê-los (pense neles) e mais parecidos com eles.
fonte
Você pode se interessar por essas duas coisas a seguir:
O fluxo
Mihály Csíkszentmihályi , professor de psicologia húngaro, introduziu o conceito de fluxo .
Tenho a sorte de poder entrar no fluxo todos os dias usando uma técnica antiga que aprendi com meu aplicativo de GTD, que é a próxima ação .
Posso dizer que realmente faz a diferença. Quando estou no fluxo, produzo maior qualidade e mais rápido do que quando não estou nesse estado. Estou totalmente focado no que faço e, portanto, penso com mais eficácia.
Mindfulness
Eu fiz uma pergunta sobre meditação há um tempo atrás, porque estava preocupada com o fato de a meditação poder diminuir minhas habilidades de programação (e criativas).
Acabei de iniciar o treinamento do método Jon Kabat-Zinn , por isso é muito cedo para compartilhar experiências extensas com você, mas das poucas que aprendi até agora, posso dizer que isso provavelmente é algo que você deseja fazer.
fonte
Sempre acreditei que bons engenheiros nascem, não são feitos.
Você precisa da mentalidade para isso, a mente lógica, analítica e dedutiva, combinada com a tenacidade e a inquisição necessárias para obter uma visão geral e uma visão estrutural de um problema de maneira eficiente e caminhar rapidamente de A para B, direcionando sua mente através a solução.
Há muita pesquisa sugerindo que essa habilidade é enormemente impulsionada pela boa exposição precoce a essas coisas, a música também ajuda. Depois de um certo ponto no tempo, seus mapas mentais estão bem conectados. Não em termos do que você pensa, mas como você pensa.
Você pode aprender a pensar como adulto? Bem, certamente você pode aprender técnicas para resolver problemas, mas, depois de ter algoritmos a seguir, pode se tornar um "robô rápido", como eloquentemente coloca. A compreensão intuitiva é provavelmente inata.
Isso não se limita à nossa profissão, pois muitas habilidades são dominadas por habilidades inatas, em vez de respostas adquiridas. As pessoas podem não querer que isso seja verdade, mas é mais provável.
fonte
Encontre um fórum on-line sobre algo pelo qual você é apaixonado. Algo que tem algum tipo de comunidade. De preferência, não programação - os fóruns de programação geralmente são mais orientados a soluções do que orientados a discussões. Tome uma posição. Defenda-o. Use argumentos. Você também pode blogar, mas ter um oponente é melhor. O objetivo é ter uma comunicação significativa e escrita sobre algo com alguém. Onde você troca pedaços de texto um pouco maiores.
Você aprenderá a comunicar suas idéias e argumentá-las. Como você terá que defender seus pontos de vista, precisará apoiá-los com fatos. Você terá que pensar em algo, articular sua posição e apoiá-la; talvez até mude.
Posteriormente, use essa capacidade de analisar o problema, sintetizar a opinião e aplicá-la a qualquer coisa. Mesmo programação.
fonte
Uma coisa em que penso é que é preciso ver as coisas como sistemas, e todos os sistemas estão relacionados. Cada um no universo. A humanidade, os planetas, a galáxia, as plantas, a luz solar, a fotossíntese, os insetos, as rochas, os oceanos, todos os sistemas em interação. Da mesma forma, com o tempo, ciclos: nascimento, crescimento, decadência, morte, de insetos, pessoas, civilizações, montanhas, sistemas estelares. A luta sem fim por energia. Todos os sistemas.
Este é o estudo da vida e da natureza no grande sentido do estudo. Veja tudo relacionado, veja tudo interagindo. Concentre-se nisso quando assistir o pôr do sol e sentir a profundidade das forças da gravidade que nos giram ao redor do Sol, nos puxa para a superfície do planeta e a luz do sol que se esvai antes de entrar em sua retina a 300.000.000 metros por segundo e fazer imagens no seu cérebro de primata.
Quando você começa a pensar nisso, em como tudo está relacionado, em como o preço do ouro e do trabalho escravo e as tempestades no Pacífico e nos complexos industriais no Japão estão relacionados, e você gasta algum tempo, realmente gasta um tempo para sentar e pense em tudo isso, então seu "músculo" pensante realmente se flexionará e crescerá.
Agora, muito disso estará abaixo do limiar da expressividade, mas não deixe que isso o impeça. Seu cérebro é mais poderoso que o computador mais poderoso. Empurre-o. Eu não acho que é possível fazer overclock.
Lembro-me de uma imagem em preto e branco que mostrava Albert Einstein descansando em uma cadeira de jardim na praia olhando o oceano. A legenda dizia: "Aqui está Albert Einstein. Com o cérebro".
O próximo desafio é poder comunicar a complexidade e a interdependência de todas as coisas de uma maneira simples. Isso lhe dará algo para fazer até você ficar muito velho.
fonte
Uma abordagem é a prática deliberada .
A repetição simples não leva a nenhuma aquisição de habilidades - você precisa ser introspectivo, avaliar seu desempenho, identificar maneiras de fazer as coisas melhor.
Uma ilustração: Um parente próximo compete no esporte do tiro de pistola. Durante o treinamento, muita concentração continua revendo cada tiro, concentrando-se nos passos que correm corretamente. Contra-intuitivamente, não há muito foco em fotos ruins, porque repetir (ensaiar) o erro o reforça.
Simplesmente disparar 100 tiros abaixo do alcance não faz nada. A prática deliberada de disparar 20 tiros reforçará bons hábitos e levará a um melhor desempenho.
O mesmo se aplica à programação - pense no que você faz. Não faça isso mensalmente, semanalmente ou diariamente - faça momento a momento, ação por ação.
E assim por diante ...
fonte
Vá cutucar algo que você ama até encontrar uma vantagem.
Respiração profunda,
Passar por cima ...
...
... Diga aos outros o que encontrou.
fonte
Então você quer pensar
Muitas sugestões excelentes de outros pôsteres sobre como pensar ou como aprender a pensar: o fluxo, a atenção plena, a matemática, a paixão, a prática ... então eu não irei lá, coberto de chão.
Mas nada sobre o porquê. Qual é o propósito?
Pessoalmente, eu entendi isso antes que você possa pensar que precisa saber o porquê.
A melhor coisa a fazer é ouvir e olhar. (Eu tomo os dois como uma unidade, você não pode separá-los)
A única maneira de melhorar a programação, seja reunindo requisitos, transformando-os em especificações detalhadas do sistema, combinando isso com documentos de design, implementando o código, depurando para sua vida útil, se você pular algum ou todos esses estágios, se você tem cinco minutos para encontrar uma solução ou 20 anos, precisa ouvir e procurar.
Ouça o que o usuário deseja, ouça o que o usuário diz que aconteceu, ouça a pessoa de suporte que você viu. Ouço. Ouça mesmo que não faça sentido. Ouça mesmo se você estiver convencido de que eles estão tão errados. Ouça e não julgue.
Procure pistas, não pesquisando, mas abrindo os olhos. Veja a realidade. Você não pode começar a procurar respostas antes de olhar para a cena do crime. Você não pode encontrar uma solução até ter provado a falha.
Um único exemplo da minha experiência(na resolução de bugs, mas poderia ser adaptado a qualquer coisa realmente). Por razões óbvias (legais e outras), vou manter detalhes interessantes disso. Em um sistema crítico de segurança, um operador relatou uma falha grave. Na verdade, algum dispositivo de rastreamento geográfico perdeu o rastreamento quando "não deveria", com impacto potencial em vidas (esse "deveria" foi o verdadeiro erro e paralisou nossas investigações por muito tempo). Felizmente, embora isso tenha sido encontrado semanas mais tarde quase por acaso, pois havia outro sistema em operação em um local remoto para o qual outro operador veio provar que o rastreamento não havia sido perdido naquele sistema. Isso nos fez pensar novamente. Nosso principal fornecedor de software não acreditou em nós nem um segundo, então tivemos que sair e provar o assunto. O único caminho era através do enxerto: construindo uma simulação para replicar a exata situação operacional. Tivemos que filmar a prova para que o fornecedor acreditasse em nós. Eventualmente, a simulação produziu informações além de nossas esperanças e nos levou a entender todo o problema. Não demorou muito para corrigir depois disso.
A única maneira de chegarmos ao final foi conectando logicamente um sistema remoto a outro, executando um trabalho semelhante, mas não exatamente o mesmo trabalho. Essa é a busca de pistas (veja). Isso só foi possível confiando no relatório único e não descartando-o como uma falha aleatória no sistema (Listen) e depois ouvindo novamente o segundo relatório que contradiz o primeiro (Listen).
Portanto, quando você tiver as pistas certas (depois de ouvir e olhar), definir a área do problema, entender a causa raiz ou os principais princípios, poderá pensar em soluções para entender melhor primeiro (tentativa e erro, simulações, demonstração, prova de conceito, mock-up, alfa, beta) e, eventualmente, oferecer uma solução sólida (que às vezes pode ser melhorada após algumas operações na vida real).
Ser capaz de ouvir e olhar assim exige uma mente aberta, confiança e dedicação absoluta aos seus objetivos. Esse é o combustível que você precisa pensar, ou mais precisamente para que seu pensamento seja focado no alvo certo (geralmente o problema não é a incapacidade de pensar, mas a falta de um alvo bem definido para se exercitar).
fonte
Eu acho que você precisa fazer a distinção entre diferentes tipos de pensamento.
Pensamento criativo - como apresentar novas idéias, soluções inovadoras e resultados inesperados. Existe toda uma ciência por trás disso, procure Edward de Bono, técnicas de criatividade etc. Poucos programadores investigam essa área.
Pensamento analítico - com isso quero dizer processo científico. Observe entradas, saídas, meça o que é importante e chegue a conclusões lógicas. A maioria dos desenvolvedores está familiarizada com a técnica científica, mas nunca a utiliza realmente. Faça isso!
Pensamento crítico - acho que isso é mais filosofia. Afaste-se e olhe para a foto maior, revise suas suposições, você realmente faz o que diz que são seus valores? Estudar filosofia, há um monte de grandes autores e idéias por aí.
fonte
A matemática ensina como pensar. Aplicação requer criatividade e experiência.
Boa visão. Em termos gerais, os requisitos para "grandeza" dependem da sua definição pessoal de "grandeza" ... e mudaram ao longo do tempo. Hoje, o sucesso do projeto consiste em ser capaz de reunir conceitos rapidamente e sem se aprofundar em todos os detalhes. O sucesso pessoal pode ser definido como o domínio de C # como Jon Skeet.
Leia o codificador no trabalho . Codificadores muito mais experientes do que eu discuto isso em detalhes.
fonte
Trabalhe na aplicação de idéias e conceitos de áreas aparentemente não relacionadas. Para mim, o brilhantismo do iPod não era a engenharia por trás de criar um ótimo MP3 player, mas a ajudar a resolver um enorme problema que a indústria do entretenimento musical estava tendo com músicas piratas e com o modelo de CD / álbum de venda de músicas. Jobs provavelmente aplicou mais do que aprendeu na Pixar ao lidar com a indústria cinematográfica. Ele sabia qual era o verdadeiro problema.
fonte