Qual foi a coisa mais eficaz que você fez para melhorar suas habilidades de programação?

876

Olhando para a minha carreira e vida como programador, havia várias maneiras diferentes de melhorar minhas habilidades de programação - ler código, escrever código, ler livros, ouvir podcasts, assistir a screencasts e muito mais.

Minha pergunta é: Qual foi a coisa mais eficaz que você fez que melhorou suas habilidades de programação? O que você recomendaria para outras pessoas que desejam melhorar?

Espero respostas variadas aqui e nenhuma resposta única "tamanho único" - eu gostaria de saber o que funcionou para pessoas diferentes.

Oded
fonte
18
Prática, prática, prática. E nunca fique satisfeito com a primeira coisa que vem à mente.
Mark Ransom
2
+1 para Mark Ransom ... A dificuldade surge quando você ainda não está satisfeito com a centésima coisa que lhe veio à mente!
precisa saber é o seguinte
5
Não desperdiçar meu tempo no site Programmers Stack Exchange me ajudou a melhorar imensamente minhas habilidades de codificação.
Job
3
@ Mark Trapp como isso não é construtivo?
rightfold
1
@WTP - Leia a descrição. "Esta questão não se encaixa no nosso formato de perguntas e respostas." - como alguém que fez esta pergunta, eu concordo. Foi perguntado em tempos mais relaxados.
Oded

Respostas:

753

Em nenhuma ordem específica ...

  • Trabalhar com pessoas muito mais inteligentes que eu

  • Sempre ouvindo o que os outros têm a dizer, independentemente de serem juniores, intermediários, seniores ou guru. cargo não significa nada.

  • Aprender outras estruturas / idiomas e ver como eles fazem as coisas, e comparar isso com coisas que eu já conheço

  • Lendo sobre padrões, práticas recomendadas e examinando minhas coisas antigas e aplicando esses padrões sempre que necessário

  • Programação em par

  • Discordando de tudo o que Joel diz. ;)

cranley
fonte
41
Eu sei que parece realmente gratuito e potencialmente prostituto de reputação, mas se você separasse esses itens em um por resposta, as pessoas poderiam votar em quais deles concordavam, permitindo uma "solução" de votação final mais específica para esta pergunta.
117
Observe como as pessoas mais inteligentes lidar com erros - que é quando eu aprender o máximo deles
82
se esta é uma lista em nenhuma ordem específica, não deveria ser uma lista não ordenada e não ordenada? : P
Jon W
3
Eu concordo com os mmyers - só porque você discorda de alguém não significa que você está ignorando-o. Na verdade, é o contrário - para discordar deles, você está realmente prestando atenção neles.
Cristián Romo
15
Não discordo de tudo que Joel diz, acho que na maioria das vezes ele tem algumas coisas interessantes a dizer. Meu comentário foi de língua na bochecha. Eu concordo com muitas coisas quando se trata de Joel, mas cerca de uma vez por mês ele me faz balançar a cabeça e perguntar: "O que? Você está falando sério ?!". O que eu amo, pois acho as coisas mais desafiadoras que me obrigam a realmente verificar minha posição e o que acredito.
557

Decidir TO ser um 'Jack-of-all-trades'

Bem no início de minha carreira, eu era especialista em um banco de dados e linguagem de programação específicos. Infelizmente, esse banco de dados em particular perdeu as 'guerras do banco de dados' e descobri que minhas opções de carreira eram ... limitadas. Depois disso, conscientemente decidi que nunca mais me deixaria encaixotar dessa maneira. Então, estudei tudo o que pude ter: Windows, Unix, C, C ++, Java, C #, Perl, Python, Access, SQL Server, Oracle, Informix, MySQL, etc. Quaisquer que sejam as ferramentas e tecnologias novas ou incomuns, eu tornou-se o 'go-to-guy' - "Pergunte a Craig, se ele não souber, ele aprenderá". Como resultado, trabalhei em todos os tipos de projetos, desde sistemas embarcados para telemetria ambiental até sistemas de comando e controle para defesa antimísseis.

O único problema que já tive foi com empresas que insistem em me colocar em uma especialidade, quando minha especialidade é ser generalista. [EDIT: Também conhecido como Polymath ou Renaissance Man ou multi-especialista. ]

Algo a ter em mente ... qual é a meia-vida do conhecimento em alta tecnologia? Ele acompanha a Lei de Moore: metade de tudo que você sabe ficará obsoleta em 18 a 24 meses. Um especialista que escolhe a disciplina errada pode ser facilmente prejudicado pela pressão da tecnologia; um generalista só precisa adicionar mais algumas habilidades e lembrar as lições do passado ao aplicá-las.

Craig Trader
fonte
224
"Jack de todos os comércios, mestre de ninguém, embora muitas vezes melhor do que um mestre de um." -Adam Savage
jms
9
Excelente conselho, votado. A "tecnologia órfã" no meu passado era o meu Atari de 8 bits, que perdeu para o C64. Cheguei à mesma conclusão - para citar Heinlein, "a especialização é para insetos".
17
Sempre existem trocas e apenas 86.400 segundos em um dia - você terá que decidir como deseja gastá-los. No meu caso, escolhi passar horas extras (além e além do horário de trabalho) para aprender coisas que eu achava interessantes ou que seriam demandadas no futuro; você precisará fazer suas próprias escolhas.
22730 Craig Trader
74
"Especialização é para insetos." - Heinlein
Kelly S. Francês
31
Onde está o seu distintivo "generalista"? ^^
Arnis Lapsa 02/09/09
459

Eu sempre pensei em mim como um programador bem bacana. Então, um novo cara, chamado Aaron, foi contratado para a nossa equipe. Aaron era obviamente muito melhor que eu na maioria das áreas. Ele era mais novo que eu também. Ele me fez perceber que eu realmente não havia melhorado muito nos últimos anos. Eu era um hacker ad-hoc, e um medíocre nisso.

Isso me alertou para tentar conscientemente melhorar a mim mesmo e, principalmente, a qualidade do código que escrevo.

Aaron me levou a aprender muitas coisas. Ele me ensinou como a maior parte do código que escrevo terá que ser mantida e estendida por pelo menos vários anos; portanto, devo escrever o código com isso em mente. Eu deveria escrever testes automáticos para o meu código. Aaron estava sempre falando sobre como eu nunca deveria parar na primeira versão de trabalho, mas refatorar e refinar até que o código seja elegante. Eu descobri que as linguagens e ferramentas que eu estava usando tinham muito espaço para melhorias.

A coisa mais importante que aprendi com Aaron foi nunca parar de aprender.

Depois de alguns anos, Aaron deixou a empresa. Eu me senti vazio. Os últimos anos com ele me elevaram a novos níveis de habilidade, e eu percebi que agora era muito melhor do que o resto da equipe. Eles ainda estavam escrevendo códigos ruins e cometendo os mesmos erros de antes. Eu tentei ensiná-los, mas eles não tinham interesse em aprender. Na verdade, eles ficaram irritados por alguém ser tão arrogante em dizer quais erros estavam cometendo.

Então, alguns meses depois, deixei a empresa também. Mudei-me para uma empresa menor, com uma equipe muito talentosa. Todo mundo lá queria aprender mais, e eu adorei.

Estou feliz por conhecer Aaron. Sem ele, eu provavelmente ainda estaria trabalhando na velha empresa com a velha gangue, indo a lugar nenhum e pensando demais em mim.

Ville Laurikari
fonte
54
Isso normalmente funciona nos dois sentidos. Eu entrei em algumas empresas agora como um 'Aaron' e descobri que, uma vez que os outros codificadores são energizados, eles começam a me dar uma corrida pelo meu dinheiro e me incentivam a redobrar meus próprios esforços. Ótimo post!
28
+1 para "Aaron estava sempre falando sobre como eu nunca deve parar na primeira versão de trabalho, mas refactor e refinar até que o código é elegante"
17
"nunca pare na primeira versão de trabalho" ??? - quando você deve fazer o resto do seu trabalho? :)
4
Eu tentei ser Aaron, às vezes funciona, mas às vezes estou errado. "Aqueles que não podem aprender com a história estão condenados a repeti-la." É bom manter a mente aberta para novas idéias, mas é ruim escutar um milagre sobre aqueles que já cometeram os erros por você. Todo mundo precisa de algum ceticismo, à medida que aprendemos fazendo perguntas a nós mesmos e aos outros.
27
O problema é que muitas pessoas pensam que são "Aaron"
cinqoTimo
257

Duas coisas:

  1. Leia o código escrito por pessoas diferentes.
  2. Escreva documentação para o código escrito por outras pessoas.

Escrever código é extremamente fácil; qualquer outra pessoa que eu conheça pode fazer isso. Mas ler o código de outra pessoa e descobrir o que ele faz era um mundo totalmente novo para mim.

Swati
fonte
42
E uma das melhores maneiras de aprender o que não fazer :)
Avid
9
Você pode ver como eles fazem alguma coisa. Talvez eles façam isso de uma maneira melhor do que você?
4
Eu tive que me aprofundar em um projeto muito antigo e completamente indocumentado, documentá-lo, corrigir alguns erros e portá-lo para um novo sistema. Eu aprendi muito, e nem tudo era o que não fazer. Embora eu tenha aprendido o valor dos comentários.
E enquanto você estiver escrevendo a documentação, talvez escreva alguns casos de teste de unidade para ela (se eles não existirem). Então você também saberá como usar o código.
dhable
Verdade, essa foi a parte mais difícil do meu trabalho por um longo tempo.
199

Vá à academia regularmente.

Sério, meu cérebro funciona muito melhor quando estou em forma. Os problemas se tornam mais fáceis e menos impressionantes, a brincadeira é muito menos tentadora e o trabalho passo a passo não parece uma tarefa tão árdua.

Ken
fonte
30
O triste fato de que a maioria das pessoas não se exercita nem se alonga regularmente, é um grande problema no mundo de hoje.
Sneakyness
5
Vou estender isso, se eu puder, a qualquer quantidade de excursão física. Às vezes, quando não faço muito trabalho manual há um tempo, começo a desejar cansaço físico. É meio que romance quando você está tão acostumado a ser drenado mentalmente e ajuda a sair quando você está se pensando em círculos.
precisa saber é o seguinte
1
Sim, esse é o grande problema hoje. não temos tempo, especialmente no Paquistão, onde o horário de trabalho é muito maior #
maz3tt
2
+1 como um lembrete para eu fazer mais exercício.
SingleNegationElimination
Acho que um esporte é um grande motivador - para mim, é o basquete.
Adel
181

Programação. Trabalhando em projetos interessantes. Não há nada como entrar e trabalhar nas coisas. Especialmente sob pressão. Eu sempre digo a quem me pergunta como programar - basta encontrar um projeto interessante (mesmo que você precise inventar) e trabalhar nele.

user13276
fonte
4
Concordo. Sujar minhas mãos em um projeto provavelmente foi o maior contribuinte para minha melhoria. ; )
Mike Grace
1
Exatamente. A melhor maneira de se tornar um codificador melhor é codificar. Você pode aprender tudo o que quiser com livros, podcasts e colegas de trabalho, mas precisa aplicá-lo antes de realmente entender. Codifique mais e codifique coisas mais diferentes. Porque você não aprende muito repetindo o mesmo velho truque.
Escolhendo projetos desafiadores e intrigantes para fazer. Acho que a luta a superar fora da sua zona de conforto realmente acelera suas habilidades. Eles não foram para a lua porque era fácil.
Kim Jong Woo
172

Tomei um emprego de meio período como professor de CS na minha universidade. Isso realmente obriga a entender algo em um nível completamente diferente quando você precisa explicá-lo a outra pessoa.

Bill the Lizard
fonte
1
Eu posso garantir isso.
1
Um instrutor da universidade me contou sobre a abertura quando eu ainda era estudante. Fiquei quase um ano (meio período) depois que me formei.
Bill the Lizard
29
Como Douglas Adams escreve na "Agência Holística de Detetives de Dirk Gentley": "a melhor maneira é tentar explicá-la a outra pessoa. Isso força você a resolver isso em sua mente. E quanto mais lento e tolo seu aluno, mais mais você precisa dividir as coisas em idéias cada vez mais simples ".
2
Verdadeiro demais. Ensinar fotografia me fez um fotógrafo melhor. Não muito de um codificador tho :(
CAD bloke
9
mutuo ista fiunt, et homines dum docente discunt - Seneca
135
  1. Sou um grande fã do sistema "aprenda uma linguagem de programação todos os anos". Um ano dá a você tempo suficiente para superar o viés "ok, eu conheço a sintaxe, então agora conheço o idioma" e obriga você a ir um pouco mais longe e entender o que é benéfico nesse idioma e programar em um estilo nativo para esse idioma (com o que quero dizer, você não acaba escrevendo aplicativos java usando a sintaxe Ruby). Cada idioma mudará a maneira como você pensa sobre programação - eu sabia usar a recursão, mas pensar em recursão não aconteceu até que eu tenha uma aula de prólogo (imagino que uma linguagem funcional como o ML tenha o mesmo efeito).

  2. Inicie um projeto Pet. Minha equação pessoal para um bom projeto para animais de estimação é que algo que você tem experiência com + algo que você não faz = aplicativo que você acharia útil. Por exemplo, o Migratr (meu próprio projeto com cafeína de fim de semana que se tornou em andamento) começou como "Eu sei c #, mas nunca codifiquei contra uma API da Web. E quero mover todas as minhas fotos para o Zooomr". Poderia ter sido tão facilmente "Eu já codifiquei contra APIs da Web antes, mas não sei C #"

A publicação do seu projeto de estimação é uma experiência educacional incrível por si só. De repente, tudo o que praticamente ninguém ensina, mas todo mundo deveria saber (para mim, estava configurando seu próprio sistema de teste, tirando o máximo proveito dos sistemas de controle de versão, como acelerar o ritmo quando ninguém mais está definindo seus prazos, como interagir com o seu usuários e como saber quando dizer "não" para apresentar solicitações), tudo isso borbulha para a superfície e obriga a auto-educar em um nível que você não era antes - pelo menos não lendo ociosamente guerras de fogo no dzone sobre o prós / contras da maneira "foo" vs "bar" de fazer as coisas.

Fazer essas duas coisas cobre as duas extremidades do espectro. Aprender um novo idioma fará de você um codificador melhor. O projeto pet fará de você um desenvolvedor melhor: P

callingshotgun
fonte
Eu só posso concordar; "projeto de estimação em uma língua até então desconhecida" é bom, posso confirmar
Muito boa sugestão para aprender algo meio familiar.
Ótima sugestão "algo que você tem experiência + algo que você não tem"! Graças
sica07
Eu preciso de um animal de estimação agora.
Adel
118

Me ensinou a montar. Fiz isso em um chip 6502 antigo quando eu tinha 13 anos? 14? Há muito tempo. Mas não consigo pensar em nada que melhore seu desenvolvimento mais do que descer ao nível de bits.

A montagem de aprendizado fornece uma visão da maneira como os computadores pensam em um nível fundamentalmente mais baixo, e a elegância nesse nível é surpreendente ... não há movimentos desperdiçados, nem 'descarte' de dados. O desenvolvimento nesse nível ensinará a você eficiência e aprimorará seu pensamento crítico e suas habilidades lógicas. Também irá curá-lo de quaisquer hábitos desleixados que você tenha com bastante rapidez!

O chip 65xx tinha três registros (o acumulador, X e Y) e nenhuma instrução no nível da máquina para multiplicar ou dividir. Lembro-me de codificar uma rotina para calcular o dano da batalha, folhear o livro e de repente perceber que teria que escrever minha própria biblioteca de matemática. Passei algumas semanas rabiscando 1 e 0 em todo o meu caderno, tentando descobrir o que 'dividir' e 'casas decimais' realmente significavam.

Estudei C ++, pascal, .NET, muitos outros desde então ... mas nenhum deles me ensinou tanto, me intrigou tanto ou me deixou com a sensação de 'uau' que a montagem no meu antigo comodato fez .

peixe-agulha
fonte
16
Tenho que votar em você por trazer de volta memórias maravilhosas! Talvez eu mesmo a chorar um pouco :)
Charlie Flowers
3
Ainda traduzo mentalmente C / C ++ para a linguagem assembly de 68K. É incrível como isso ajuda você a escrever código eficiente para qualquer plataforma.
10339 Bob Murphy
1
Ah, o 6502, traz de volta ótimas lembranças. Eu aprendi muito com o assembler neste chip.
5
CADA aluno de programação deve ter uma exposição aprofundada à montadora no início de sua educação!
2
Eu fiz a mesma coisa quando jovem. Ele realmente ensinou como os computadores funcionam, mais do que uma linguagem de alto nível.
CAD cara
110

Olhando para as coisas antigas que escrevi e percebendo o quanto elas eram ruins.

Grant Johnson
fonte
Eu digo que ... mal consigo ler algumas das minhas coisas antigas.
Unkwntech 16/09/08
28
Quando examino minhas coisas antigas, sinto um desejo quase irresistível de excluir o arquivo inteiro. Às vezes, o diretório inteiro.
Christopher Mahan
+1 para objetividade. Examinar seu código antigo não informa como melhorar, apenas se você melhorou e como - ou, inversamente, se não tiver.
Eu fiz isso - escrevi esse intérprete de script inteiro no VB6, escrevi durante dois anos; era capaz de criar janelas, lidar com seus eventos etc. Ele ficou tão grande e fora de controle que eu não consegui mais adicionar isso sem quebrar tudo. Essa foi a última coisa que escrevi antes de desistir da programação de livros sobre programação. Agora estou muito melhor ufa . Leitura de volta nesse projeto monstro me faz perceber o quão longe eu vim
Carson Myers
3
@ Christopher Mahan: E em ocasiões muito ruins, todo o volume.
Thanatos
93

Ler

  • livros, não apenas sites
  • para auto-aperfeiçoamento, não apenas para o projeto mais recente
  • sobre como melhorar seu comércio, não apenas sobre a tecnologia mais recente
  • leia o código, não apenas você está trabalhando.

Apenas desenvolva o apetite pela leitura.

lamcro
fonte
2
Além disso, 1. Eu estava começando a me perguntar onde estava essa escolha.
Thanatos
87

Programação.

Sério, existem livros, existem katas de codificação, existem sites como este, mas acredito que a melhor maneira de melhorar como desenvolvedor é trabalhar em projetos reais, com clientes inconstantes e reais, com requisitos reais e em constante mudança, com engenharia real problemas Não há substituto para a experiência.

Fishtoaster
fonte
8
Se você quer melhorar algo, não há nada melhor do que fazê-lo.
Jeff Siver
4
+1 - Isso me lembra o Finding Forrester : "A primeira chave para escrever é ... escrever"
Wizard79
2
Não há outra resposta. Você realmente não pode dizer que sabe o que está fazendo até escrever uma pilha de códigos não trivial e ficar presa a ela através de algumas iterações de produtos com os executivos + os clientes. Você realmente não sabe o quão bom é o seu código até a hora de fazer alterações para atender aos novos requisitos.
blucz 12/09/10
1
Definitivamente, a melhor coisa que fiz para melhorar minha programação foi conseguir um emprego.
Matt Ellen
1
Meu palpite é que a questão implícita "além de programação" ...
UncleZeiv
81

Eu acho que a coisa mais importante que você pode fazer é fazer um esforço consciente para melhorar. Não existe uma única bala de prata; você precisa continuar procurando novas fontes de informação, novas experiências e mais prática.

E a segunda coisa mais importante, pense no que está fazendo, por que está fazendo e como pode fazê-lo melhor. A mesma coisa com os projetos anteriores. Veja o que você fez e como você pode fazê-lo de maneira diferente agora. Pense sobre o que poderia ter sido feito melhor ou onde você ainda poderia melhorar.

Eu vejo dois grandes exemplos disso trabalhando todos os dias. Eu tenho um colega de trabalho que gosta de aprender e quer ser o melhor desenvolvedor que puder. Ele usa qualquer tempo de inatividade para ler blogs, ler livros, discutir técnicas de programação e fazer muitas perguntas. Ele também melhorou muito notavelmente no ano passado. Outro colega faz seu trabalho, e o faz razoavelmente bem. Mas é só isso que ele faz. Ele segue o que sabe, não faz muito esforço para melhorar, não trabalha em nenhum projeto fora dos projetos existentes e, após 4 anos, ele tem exatamente o mesmo conjunto de habilidades e capacidade de programação que tinha quando eu o conheci. ele.

Christopher Cashell
fonte
7
E ele provavelmente tem menos habilidade, porque alguns dos seus conhecimentos tornou-se obsoleto ..
72

Muitas pessoas sugeriram escrever código. Eu diria que ler o código de outras pessoas é muito mais benéfico.

baudtack
fonte
11
uma mistura dos dois é realmente o que funciona melhor para mim; leitura de código de outras pessoas e refatoração-lo para torná-lo mais legível é um ótimo exercício
Lendo um bom código, é claro ... e entendendo-o. E modificá-lo ou escrever testes para ele.
4
A leitura do código é interessante, mas não fica realmente interessante até que você realmente o faça.
Você deve fazê-lo para aprender. É como andar de bicicleta ...
70

Programa em pares com pessoas muito diversas e opinativas

Heath Borders
fonte
A única "experiência" com programação em pares que tenho são os momentos em que tenho que ajudar colegas. Prograjo muito mais feliz quando há outra pessoa comigo para discutir os problemas que enfrento e como vou resolvê-los.
Mhitza 6/02
67

As coisas básicas que me ajudaram como programador:

  • Aprendeu a digitar com toque.
  • Aprendeu a superar a timidez e fazer perguntas.

Digitar para um programador é essencial. Todo mundo teve um colega de trabalho "programador" que digitou usando exatamente dois dedos e teve que procurar no teclado por tudo. Não tem graça. Aprender a digitar dá um grande impulso à sua produtividade como programador.

E se você não perguntar, ninguém vai lhe contar.

Nasir
fonte
15
Digitação por toque é a habilidade mais importante. Os maiores crimes de programação foram cometidos por aqueles que tentaram salvar algumas teclas.
5
Isso supera todas as outras respostas, na minha opinião. A digitação economiza muito tempo, o que significa que você pode gastar mais tempo inserindo o código e testando-o. Isso significa que você pode digitar os exemplos em um livro em vez de apenas acenar com a cabeça, seguir em frente e esquecer. Tentar ser um programador com caça-e-beijar é como tentar ser um pianista de concertos fazendo cócegas nos marfim com os pés.
Kyralessa
2
Vi pessoas acertarem 15 flechas para recuperar um comando de 2 caracteres. Muito triste. É como algumas crianças sem um IDE ... completamente incompetentes.
7
Para ser contrário aqui, nunca aprendi a digitar. Tentei aprender uma vez, mas imediatamente comecei a sentir dores nos pulsos, apoiando-os na mesa para assumir que as posições corretas das mãos pressionavam o importante túnel do carpo. Portanto, acho que minha digitação pelo menos tem algumas vantagens ergonômicas. E faço isso há tanto tempo que apenas olho intermitentemente para o teclado, sem perda de produtividade real. De qualquer forma, não passo muito tempo inserindo caracteres, mas lendo o código e descobrindo a melhor forma de resolver os problemas à medida que eles aparecem.
Eloff
2
As posições das mãos não são importantes - o importante é que você pode digitar sem precisar olhar. No meu laptop, não descanso os pulsos.
56

Contribuir para / participar de projetos de código aberto foi de longe a maior coisa para mim.

user13643
fonte
53

Você pode ler todos os livros, códigos e projetos de código aberto que desejar, mas precisa entender o aspecto do usuário final do desenvolvimento de software. Você precisa sair da câmara de eco. Então, abordarei alguns pontos não técnicos que ajudarão sua carreira técnica.

  1. Afaste-se do teclado e interaja com o usuário final e veja, através de seus olhos, como eles usam o software. Os usuários finais geralmente não são técnicos; portanto, eles veem o software como um trabalho mágico, enquanto você vê o software como um conjunto lógico de etapas. Os dois mundos são completamente diferentes. Então, o que parece fácil e lógico para você pode parecer enigmático e intimidador para os outros.

  2. Teste, teste, teste. Muitos dos softwares que vi em grandes empresas usam casos de teste. Inferno, eles usam JUnit, xUnit e todas as outras linguagens de teste de unidade por aí. Mas o problema que eu vi é que a maioria dos programadores nunca vê como é o software deles em Produção. Aprenda como os usuários (ou sistemas, se estes são trabalhos em lotes) interagem com seu aplicativo, biblioteca ou interface para descobrir que tipo de informação repugnante eles lançam nele. Isso ajudará você a gerar bons casos de teste e parará de supor que seu programa sempre receberá o conjunto correto de dados.

típico
fonte
Verdadeiro. Você pode testar sua versão final (até agora), deixando que um grupo de pessoas que você conhece não seja técnica tente e ouça os comentários delas (certifique-se de escolher aquelas que não digam "Está bom!", Porque este oviously não ajudá-lo na mínima).
48

Esquema Aprendido.

mbishop
fonte
Sim, esse foi o grande problema para mim também. Também significativos foram a digitação por toque e a programação em pares.
46

Escrevendo código e muito.

Oded
fonte
Todos nós começamos a escrever códigos ruins. Se você escrever o suficiente e trabalhar nisso, ficará melhor. As revisões de código ajudam, mas a melhor maneira é revisar seu próprio código.
Lendo código e muito.
Stefan
3
Ler e escrever muito código ... Open source é como um benefício para nós;)
Oded
45

Aprendendo expressões regulares.

Vhaerun
fonte
Só fiz isso quatro meses atrás, quando comecei a me ensinar perl! Minha capacidade de usar vim e unix no céu em geral disparou! Surpreendente.
Sixtyfootersdude
Expressões regulares não são apenas úteis, elas também fazem você pensar de uma maneira diferente.
Tikhon Jelvis
+1. Totalmente de acordo. Fico surpreso ao fazer as pessoas se surpreenderem com frequência fazendo coisas básicas no vi, sed ou grep.
39

Competindo em concursos do TopCoder Algorithm .

Paul Reiners
fonte
14
Acho o TopCoder um pouco problemático. OK, faz você pensar melhor em algoritmos, mas você é forçado a trabalhar com um estilo ruim (todo o código em uma classe) e com pressão de tempo, portanto você provavelmente não comentará e testará. Talvez o Projeto Euler seja a melhor escolha.
3
Você não é forçado a trabalhar com estilo ruim; você pode ter quantas aulas quiser. Além disso, é melhor testar se você deseja passar de forma consistente, pois uma solução que falha em um único caso de borda recebe zero pontos.
2
@hstoerr - para não mencionar o fato de que os concorrentes são recompensados por fazer o seu código difícil de ler (sua solução é mais difícil de desafiar)
Shane Fulmer
7
(desculpe se isso soa ofensivo) Acho que pessoas que não gostam do Topcoder (ou de outros concursos similares) tentam inventar razões pelas quais fazê-lo fará de você um péssimo programador. Tudo bem se você não gostar deles. Mas inventar razões espúrias IMHO não ajuda. Nenhum competidor sério no TC ofusca intencionalmente o código (na verdade, é motivo de desqualificação se for pego). Eu vejo muitas pessoas que não competem escrevem códigos ruins o tempo todo. Os concursos de algoritmo não têm como objetivo ensinar bons hábitos de codificação (aprenda isso em outro lugar), mas sim ensinar / desenvolver algo muito mais profundo.
MAK
2
O TopCoder é uma maneira de mostrar o quanto você pode se tornar melhor.
38

Faça o possível: crie seu próprio projeto, seus marcos, seus recursos, dependências, requisitos e plano de teste. Isso forçará você não apenas a melhorar suas habilidades de programação para operar dentro de parâmetros específicos, mas também servirá para destacar exatamente onde você mais precisa melhorar. Faça atualizações regulares sobre o seu progresso, seja através de um blog ou atualizações formais do projeto, para que você possa ver exatamente onde esteve e para onde espera ir.

Magsol
fonte
36

Larguei o meu último emprego.

mihn
fonte
2
eu também! (precisar de mais alguns caracteres ...)
6
Se você nos dissesse o porquê, isso pode até ser uma resposta. ;-)
2
Apoiar o projeto feito com a estrutura interna (baseada no EJB2) não era minha ideia divertida. Nada de novo, apenas porcaria velha. E a perspectiva em um novo emprego não é melhor. :(
Mihn
Estive lá, fiz isso.
Allbite
+1 Boa sorte em conseguir um emprego que não seja um beco sem saída.
Tomek Szpakowicz 29/09/10
29

Eu acho que questionar constantemente o que você está fazendo é a maior coisa. Nunca pense que seu código é perfeito, sempre se esforce para melhorá-lo.

Parece que eu tive 2 ou 3 vezes quando pensei que meu código era perfeito, então percebi que tinha um longo caminho a percorrer.

Acho que o mais importante foi quando comecei a ver meu próprio código como consumido por outros programadores e não por uma máquina. É fácil escrever código que sua máquina pode processar, mas é difícil escrever código SECO e compreensível.

E não quero apenas entender "O que essa linha faz", quero dizer trivial descobrir "Como essa classe se encaixa com todas as outras classes", ao mesmo tempo em que torna a interface das classes tão bem formada que é praticamente impossível abusar disso.

Bill K
fonte
29

Eles dizem que 70% do bom código é verificação e manipulação de erros. Quando comecei a programar dessa maneira, meu código ficou muito melhor. Pensar no que pode dar errado e lidar com isso imediatamente fez uma enorme diferença. Ele se sente como fazendo tudo o que a verificação é apenas ficar no caminho de obter o código instalado e funcionando, mas diminui o tempo do início ao fim por um fator de 2 a 4.

Quem são essas pessoas "eles" e onde eles "vivem"?

Harold Bamford
fonte
28

Minha habilidade de codificação melhorou bastante quando comecei a pensar antes de implementar algo como documentar isso .

"Coisa" aqui deve ter toda a granularidade possível. Do método ao produto inteiro. Por exemplo, no nível do método, impede a adição de um método na API que não se encaixa ou não é claro antes de realmente ser gravado. E se eu realmente precisar implementar um método que não possa documentar (facilmente), é um sinal de que há um problema de design em algum lugar ...

Automaticamente, a atitude " se não posso explicar, não escrevo " filtra o código incorreto e, inversamente, quando eu sei como documentar uma coisa corretamente, torna-se mais simples e mais limpa de implementar.

kabado
fonte
28

Aprenda e pratique constantemente o que aprende.

Por meio de:

  1. Projetos pessoais: Desde que comecei a programar, tenho feito projetos pessoais. Desde pequenos jogos, processamento de imagem, esteganografia, implementação de especificações de tipo de arquivo, implementação de vários protocolos a partir do zero ou implementação de vários programas ao longo do tempo.

  2. Lendo livros: Decidi ler e acompanhar vários livros no meu tempo livre. Existem muitos livros bem escritos por especialistas, aguardando para serem lidos. A profundidade que você pode obter de um livro é incomparável, por exemplo, lendo várias postagens no fórum.

Brian R. Bondy
fonte
10
+1 por mencionar livros. Muita experiência não vale muito se tudo for gasto fazendo as coisas da maneira errada.
mbillard
27

Esta é geralmente a minha ordem cronológica de aprender qualquer nova tecnologia:

  1. Leia regularmente bons blogs (Atwood, Martin Fowler, etc.), Mantenha-se atualizado com as novidades da tecnologia, Siga coisas sobre novas tecnologias interessantes. Essas etapas me permitem decidir se encontro algo interessante para explorar ainda mais.

  2. Leia o livro certo ou qualquer outro recurso para aprender para o seu nível (por exemplo, para iniciantes, se você quiser aprender padrões de design, sugiro 'Head First Design Patterns'). Eu também tenho preferências específicas para livros .

  3. Lance um ou dois projetos de brinquedos usando o que aprendi. Não me preocupo com a utilidade do projeto. Minha intenção é apenas explorar meu aprendizado. (por exemplo, um projeto de calculadora para OOP seria bom)

  4. Eu veria se eu poderia usar as coisas no trabalho . (por exemplo, embora não usemos o subversion no trabalho, eu o uso como meu repositório local, usei o Ruby para uma tarefa que, de outra forma, seria muito monótona e demorada)

  5. Esta é a melhor parte que acho que a maioria das pessoas perde. Sessões de compartilhamento de conhecimento. Dê uma ou duas sessões aos colegas da equipe, por exemplo. Acredito que o ensino é uma das melhores maneiras de realmente aprender a tecnologia. Garanto que seu nível de entendimento da tecnologia se tornará múltiplo, independentemente de o público entender ou não. :-)

rpattabi
fonte
24

Corte em algum projeto de código aberto por alguns meses; quanto maior, melhor. Quando você está interagindo com pessoas altamente opinativas e geograficamente diversas que não o conhecem, você não pode deixar de aprender com seus erros muito mais rapidamente - acho que é um certo fator de constrangimento. Além disso, se você identificar uma ou duas pessoas realmente inteligentes, poderá coletar informações valiosas, se não um conhecimento puro.

Roubar
fonte