Habilidades de pensamento para ser um bom programador [fechado]

10

Eu tenho programado nos últimos 15 anos com diploma não-CS. A principal razão pela qual entrei na programação foi que eu gostava de aprender coisas novas e aplicá-las ao meu trabalho. E pude encontrar e corrigir erros de programação e suas causas mais rapidamente do que outros. Mas nunca me considero um guru ou um especialista, talvez devido ao meu diploma de não-CS. E quando vi grandes programadores, observei que eles são muito bons, muito melhores do que eu, é claro, na solução de problemas.

Uma habilidade que achei boa no meio da carreira é pensar em requisitos e tarefas em ordem inversa e abstrata. Dessa forma, posso ver o que realmente é necessário para eu fazer sem detalhes e rapidamente encontrar partes da solução que já existem.

Então, eu me pergunto se existem outras habilidades de pensamento para ser um bom programador. Segui as perguntas e respostas abaixo e, na verdade, li alguns livros recomendados por lá. Mas eu realmente não consegui pegar bons métodos diretamente aplicáveis ​​ao meu trabalho de programação.

Quais livros de não programação um programador deve ler para ajudar a desenvolver habilidades de programação / pensamento?

/software/44654/skills-and-habits-to-develop-to-be-good-at-programming-im-a-newbie

Tae-Sung Shin
fonte

Respostas:

10

Obrigado pelos ponteiros para as perguntas existentes. As respostas para essas são bastante diferentes do que eu entendo que você deseja. Vou te dar algumas sugestões da minha própria experiência. Meu diploma é de física, vim para o campo com lacunas em torno de formalidade, correção / verificação, análise de algoritmos, programação dinâmica, sistemas de banco de dados e, em grande parte, no começo, seleção de estruturas e algoritmos de dados. As lacunas mais óbvias (por exemplo, estruturas de dados e algoritmos) eu fechei cedo, mas ainda leio livros nessa área, para aprofundar minha compreensão, ver apresentações alternativas e atualizar minha memória. (Tenho cerca de 40 anos, então os livros funcionam para mim :)

Aqui está uma lista de leitura (em nenhuma ordem específica que não seja a que eles vieram à mente).

  1. Pérolas de programação (Jon Bentley)
  2. Mais pérolas de programação (Jon Bentley)
  3. A arte da programação de computadores (Donald Knuth)
  4. Algoritmos em C ++ (Robert Sedgewick)
  5. O Manual de Design de Algoritmos (Steven Skiena)
  6. A Prática de Programação (Kernighan e Pike)
  7. Elementos de Programação (Stepanov)
  8. Como Resolvê-lo (Polya)
  9. Estrutura e Interpretação de Programas de Computador (Abelson e Sussman)

Eu também aprendi muito escrevendo o código sólido quando o li em meados dos anos 90. Mas não está na lista, pois não se relaciona muito com as habilidades de raciocínio, como tal (trata mais do projeto de APIs para minimizar a chance de uso incorreto acidental - ou pelo menos essa foi a minha principal desvantagem).

Também aprendi muito com Gödel, Escher, Bach (Hofstadter) quando adolescente, mas isso já foi mencionado nas respostas às perguntas que você já apontou. É um livro para ler por prazer, e não diretamente para desenvolver as habilidades de ciência da computação.

Eu trabalho com um número bastante grande de programadores talentosos, e quase universalmente eles são fãs de Programming Pearls . Certamente, desejo que mais dos candidatos que entrevistei tenham lido o capítulo 4 desse livro.

James Youngman
fonte
4

Primeiro; para qualquer disciplina, sempre haverá alguém muito melhor de alguma forma. Não se preocupe com essa parte.

Então; um diploma de CS é bom e tudo isso, e o conhecimento teórico que ele fornece é certamente útil, mas não é de forma alguma uma indicação de que alguém é um bom programador. Alguns dos melhores programadores são autodidatas e, acredite, o mundo está cheio de graduados em CS que não conseguiam programar o caminho de um saco de papel molhado. Portanto, não se preocupe com essa parte também.

Quanto ao que é preciso para se tornar um bom programador: acho que duas coisas são essenciais. Uma é que você precisa ser capaz de abordar os problemas de maneira estritamente formal e pensar em um certo nível de abstração. Se você entende ponteiros e recursão, provavelmente é bom nessa frente. O outro é dedicação e persistência. Como qualquer outra embarcação, a programação leva dezenas de milhares de horas de prática dedicada e focada para dominar, isso não acontece durante a noite. Leva pelo menos dez anos para alcançar o domínio, de um jeito ou de outro. Se você é apaixonado, será fácil; dedicar horas, se concentrar e encontrar novos desafios; se não estiver, acho que ainda é possível, mas não será uma viagem agradável.

tdammers
fonte
2

Lembre-se sempre que começar a aprender a linguagem de programação Primeiro aprenda o conceito e, ao mesmo tempo, teste, significa fazê-lo praticamente depois de fazer este exercício, não esquecendo os conceitos e seu uso.

A seguir, a conhecida "prática leva à perfeição" e também se aplica aqui na programação. Quanto mais você brinca com o código, executa o código, lê o código existente para corrigi-lo, você se tornará um bom programador, mas o gr8.

Chitrank Dixit
fonte
0

Existem dois livros que não são de programação que considero cruciais.

O primeiro é "Lady or the Tiger", de Raymond Smullyan. Este é um ótimo conjunto de quebra-cabeças lógicos que inclui sorrateiramente uma espécie de tour pela teoria dos autômatos. Coisas bacanas.

O segundo é "Godel, Escher, Bach: uma eterna trança dourada", de Douglas Hofstadter, que faz você pensar em recursão e teoria da linguagem.

Se você deseja bons hábitos para um novato, leia "Padrões de Aprendizagem", de Hoover, e "O Manual de Sobrevivência dos Novos Programadores", de Carter. Ambos os livros falam sobre como expandir suas habilidades e como expandir sua carreira. Eles adotam abordagens diferentes, mas trabalham bem juntos.

philosodad
fonte
0

Estou interessado em saber como você avalia a habilidade de outros programadores.

Eu acho que esse conhecimento específico e aplicável cria resultados muito mais impressionantes do que as habilidades gerais. Se você já tem muito contexto e talvez já tenha enfrentado problemas semelhantes antes, poderá encontrar a causa de um problema rapidamente. Se você já sabe como usar um conjunto de ferramentas aplicáveis, poderá criar soluções muito rapidamente. Se você ainda não possui esse conhecimento, mas possui as habilidades necessárias, levará mais tempo para adquirir o conhecimento necessário. Se for esse o caso, você está demorando mais para cobrir mais distância, o que não significa necessariamente que você é mais lento.

Obviamente, se você puder adquirir conhecimento e aprender a usar ferramentas que o ajudarão posteriormente, isso lhe dará uma vantagem. Acho que aprender um pouco sobre uma ampla variedade de tópicos ajuda aqui, pois eles acabam se sobrepondo mais do que eu esperava, e apenas saber onde procurar as informações necessárias pode economizar muito tempo. Mas talvez seja só eu.

Vincent Povirk
fonte
0

Você gosta de aprender coisas novas e pode corrigir erros rapidamente. Isso significa que você tem os dois elementos principais para se tornar um guru: entusiasmo e habilidade. Mas você acha que nunca se considera um especialista, talvez precise de mais duas coisas: foco e tempo. Por exemplo, quando Linus Torvalds lançou o Linux pela primeira vez em 1991, ninguém o considerou um guru. Ele ainda está trabalhando no Linux todos os dias e você pode ver seu log de mesclagem no repositório Git do kernel do Linux hoje em dia. Seu foco faz dele o guru mais famoso no campo Linux. O tempo é um conceito abstrato, significa manter-se atualizado, ganhar experiência através da prática constante, compartilhar seu conhecimento com outras pessoas e melhorar com retrospecto.

Eu tenho a mesma situação com você. Venho programando há 15 anos com diploma não-CS (EE), e sempre estou confuso com minha enorme lacuna com o guru em meu campo. Mas tenho o sonho de me tornar um guru e comecei a participar de um projeto de código aberto. As habilidades de pensamento vêm da prática e da experiência. Alguns livros podem ser úteis, mas seu significado é principalmente instrutivo. As habilidades de pensamento pertencentes a você são de sua própria experiência. Vamos começar de agora em diante!

Aprenda todos os dias
fonte