ti-enxame.com

Como melhoro minhas habilidades de codificação?

Aqui estão algumas informações sobre mim, antes de começar com a pergunta.

Sou formado em Ciência da Computação, Java sendo minha principal linguagem de codificação.

O problema básico da minha universidade são os padrões de ensino. Ninguém está preocupado com o ensino do conhecimento de codificação para os alunos, e não apenas com o conhecimento teórico.

O efeito é que a maioria dos meus colegas de faculdade não entende de programação.

Mesmo eu não consegui sair do ambiente de programação tradicional, o que limita minha codificação a uma extensão.

Quais são as formas possíveis pelas quais posso desenvolver e expandir minhas habilidades de programação/codificação.

Além disso, você pode sugerir as fontes para o mesmo?

Editado: Fontes sugerindo o desenvolvimento de habilidades de codificação.

76
ykombinator

A programação é um dos campos em que a experiência importa. Portanto, para se tornar um codificador melhor, você deve codificar mais. No entanto, escrever não é a única coisa que você deve fazer. Você também deve ler o código de outros desenvolvedores e aprender com ele o que é um bom código. Consulte SO perguntas sobre isso .

Você também pode encontrar livros úteis especificamente para codificação; como "Código completo". Eles contêm descrições do que é um bom código que, combinado com seu conhecimento fundamental, pode fazer de você um bom programador.

46
P Shved

Minha citação favorita é de Confúcio:

Eu ouço, eu sei. Entendo, eu lembro. Eu entendo.

Todo o conhecimento que obtive foi da aplicação de uma única estratégia:

Siga o caminho mais desafiador, sempre.

Você quer aprender c #? Consiga um emprego como desenvolvedor de C #.

Você quer aprender italiano? Vá lá com um dicionário inglês/italiano e fale italiano

Você quer aprender a codificar? Código!

98
user2567

A codificação é um ótimo conselho, mas sem alguém para fornecer feedback, você apenas repetirá seus erros. Encontre um emprego, trabalhe em um projeto de código aberto, encontre um mentor e faça com que eles analisem seu código.

21
JeffO

Aqui está um apresentação Dan North deu e QCon sobre como passar de programador iniciante para especialista chamado Sharpening the Tools . Abaixo estão as principais sugestões da apresentação:

  1. Pratique o básico: kata, código para se divertir ...
  2. Aprenda com outras pessoas: leia livros, blogs, etc., leia código, programa em pares ...
  3. Entenda as tendências: o que está acontecendo no setor agora
  4. Compartilhar conhecimento: a melhor maneira de aprender algo é entendê-lo e ensiná-lo
  5. Mantenha sua caixa de ferramentas: use "atemporal" e novas ferramentas
  6. Aprenda a aprender: entenda como o aprendizado funciona
10
ysolik

Tente escrever um compilador para uma linguagem simples do zero. Você irá melhorar muito suas habilidades ao longo do caminho (com algumas técnicas teóricas de Nice da teoria formal da linguagem como um bônus). Tentei escrever uma versão simples do Excel, e também é um exercício muito agradável.

Como outros disseram, a única maneira de melhorar suas habilidades de codificação é realmente fazê-lo. Deixe sua mão suja com alguns projetos grandes. Porém, para programas grandes, é ainda mais importante que você domine as técnicas de design de software; caso contrário, o tamanho do programa parece incontrolável.

Há uma citação legal de Nate Kirby:

"Os programadores ruins ignoram os detalhes. Os designers ruins se perdem nos detalhes."

Portanto, alternar entre esses dois níveis de abstração é a habilidade que você deve dominar.

Além disso, a velocidade de quantas linhas de código você pode escrever por hora não é o que você deve procurar. Eu gosto de uma citação de David Parnas :

"Frequentemente ouço desenvolvedores descritos como 'alguém que sabe como construir um sistema grande rapidamente'. Não há truques para criar sistemas grandes rapidamente; quanto mais rápido você os constrói, maiores eles ficam! "

8
D. L.

Eu implementei um pool de apostas ou um jogo de Bacará em quase todos os idiomas que aprendi.

Este tipo de software cobre

  • Datas e horários, com cálculos
  • Tipos de moeda e itens que podem ser convertidos para e da moeda
  • Um conjunto discreto de regras que é fácil de testar
  • Estados, transição entre estados e múltiplas entidades responsáveis ​​pela transição de estados
  • Vários usuários com diferentes visualizações do mesmo modelo
  • Várias condições finais

O blackjack e o pôquer para vários jogadores também funcionariam.

Uma ressalva é que, no meu trabalho diário, trabalho em sistemas financeiros e há uma enorme sobreposição entre as coisas a serem consideradas ao escrever um jogo de azar multijogador e um sistema de negociação.

5
sal
  • Selecione bons projetos de código-fonte aberto e leia o código.
  • Faça um projeto de tamanho médio e comece a codificar
    • Se você estiver interessado em desenvolvimento web, tente criar um site existente do zero usando sua tecnologia favorita; e o Twitter no django?
    • Se você estiver no desenvolvimento de aplicativos de desktop, comece com um bloco de notas e improvise-o para oferecer suporte a recursos avançados (pesquisas baseadas em regex, para começar).
4
Amarghosh

Pule na água, pode estar frio no começo e você ficará tentado a sair, mas logo seu corpo se acostumará e se aquecerá novamente. À medida que você se sentir confortável na água, poderá nadar, talvez entrar final profundo.

Acabei de terminar a faculdade há alguns meses, onde estudei Java. Mesmo que você, eu não tinha idéia de como codificar corretamente. Há cerca de um mês, eu queria criar um aplicativo da web em PHP. Eu não sabia o que estava fazendo, mas apenas fui em frente. Foi intimidador e esmagador no começo, mas à medida que você pratica, isso se torna natural. Até escrevi o aplicativo várias vezes, simplificando-o ainda mais. Agora estou trabalhando no aplicativo a partir do zero, mas desta vez estou descobrindo como fazê-lo orientado a objeções e usando PEAR e seu módulo quickform, que é outro obstáculo que tenho que superar, mas determinado e animado) Não obstante.

Então pratique. Pule na água! Boa sorte :)

4
Jonathan

Pense assim ... Tiger Woods não chegou a ser "o melhor" jogador de golfe assistindo golfe ou lendo sobre ele. Ele ficou assim, como qualquer outro atleta, estudando, praticando, descobrindo onde ele pode melhorar seu jogo e fazendo algo a respeito.

Codificação é a mesma. A melhor maneira de melhorar é estudar o que os outros fazem, entender por que eles fazem dessa maneira e depois fazer você mesmo.

4
Muad'Dib

Como em qualquer outra atividade humana, a melhor maneira de melhorar é praticar seu conhecimento, mas você precisa de alguns exercícios para isso. Dave Thomas , um dos autores do livro O Programador Pragmático, introduziu o conceito de Code Katas , semelhante ao conceito de kata nas artes marciais.

Você pode dar uma olhada lá: http://codekata.pragprog.com/

4
jmservera

Sugiro que você aprenda toda a sintaxe do seu idioma favorito. Entenda como usar funções virtuais, herança, lambda, se existirem. etc. Uma coisa que fiz foi pegar uma grande biblioteca assustadora (fiz isso com boost e STL para C++) e ver se todas as linhas e palavras-chave fazem sentido.

Ou, como alternativa, você pode ler a referência de sintaxe do idioma, se houver uma boa que cubra a versão mais atualizada. Como exemplo, aqui está a referência C # (Não é a versão na parte superior. Cometi o erro olhando uma versão mais popular e antiga que não tinha a sintaxe que eu estava procurando)

3
user2528

O consenso geral é "escrever mais código", com o qual concordo, mas acrescentarei a esse conselho que você deve escrever vários tipos diferentes de código. Java é bom no que diz respeito às linguagens, mas você definitivamente deve escrever código tanto para cima quanto para baixo no espectro de potência. Além do Java, eu sugiro fazer alguns pequenos projetos em um nível mais baixo idioma (C é bom para isso), uma linguagem de script (eu prefiro Perl, mas python também é uma boa opção), uma linguagem funcional (LISP é a recomendação geral aqui, mas OCaml e Haskell também são boas escolhas) e, pelo menos, se sentem confortáveis ​​com a leitura de uma linguagem Assembly.

Além disso, escolha alguma variedade nos tipos de programas que você implementa. Veja como implementar pelo menos uma GUI de área de trabalho, um aplicativo da Web rico, um cliente e servidor de rede, um driver, um utilitário de transferência de dados, um rastreador de raios e uma simulação de física.

Todos os projetos devem ter um alcance relativamente pequeno, o objetivo não é ter um programa completo, mas obter uma ampla experiência nos diferentes domínios em que você pode se deparar, para aprender os diferentes tipos de pensamento necessários para cada um, e descobrir onde estão seus interesses.

Depois de fazer isso, você terá uma boa idéia de que tipo de programação está mais interessado e poderá encontrar ou iniciar um projeto de código aberto para obter experiência trabalhando em grandes bases de código, lidando com projetos de longo prazo e trabalhando com outros desenvolvedores.

3
Cercerilla

Você está recebendo algumas respostas semelhantes e as minhas também serão as mesmas. Escreva código. Existem duas boas maneiras de fazer isso.

  1. Escolha algo que realmente lhe agrade ou lhe interesse e continue implementando. Se você gosta de jogos, escreva um jogo. Se você estiver interessado em coisas da Web, monte um site interessante e original. Você pode não conseguir terminar nem mesmo, mas a experiência o ensinará muito.
  2. Escolha um projeto de código aberto que você achar interessante e se envolva com ele. Aprenda com o código existente e use-o para corrigir erros, criar testes de unidade e implementar novos recursos.

Qualquer uma dessas opções fornecerá a experiência direta de programação necessária, bem como o envolvimento nas comunidades de programação, à medida que você aprender e precisar fazer perguntas para tirar mais proveito dela. Você cometerá muitos erros. Isso é bom - se você para de cometer erros, para de aprender e precisa encontrar uma nova maneira de se desafiar.

2
glenatron

Minhas sugestões

  • Encontre um projeto para animais de estimação e escreva-o em um idioma diferente (lyke python/c #) para o que você conhece. Isso vai te ensinar mais do que você pode imaginar. Veja outros projetos semelhantes e tente obter paridade de recursos com eles. Você pode ir devagar com isso e ter objetivos modestos, aumentando constantemente seu nível de dificuldade com novos recursos. Isso também se torna sua peça de exibição quando você vai para uma entrevista de emprego.
  • Encontre usos em seu projeto para tecnologias relevantes, como serviços da web, javascript, ajax, geocodificação e basicamente tudo o que está avançando no mundo do software.
  • Jogue com outros sistemas operacionais como Linux/freebsd. Quanto mais exposição você obtiver a diferentes tipos de sistemas, mais entenderá o pensamento que os rodeia e por que eles fizeram as coisas da maneira que fizeram.
  • Quando você terminar com partes do seu código, volte a ele e tente aprimorá-lo constantemente. Encontre ineficiências, adicione mais comentários quando necessário, tente aperfeiçoá-lo.
  • Pesquise em c2.com. Existem muitas boas práticas de codificação. Aprenda isso e tente aplicá-los em seu próprio projeto.
  • Leia livros como o programador pragmático e o código completo, eles fornecerão o conhecimento da programação reforçada em batalhas.
  • Isso pode parecer não relacionado, mas encontre outro hobby técnico, se você ainda não possui um, como pilotar carros de RC, tocar um instrumento musical ou aprender um idioma estrangeiro. Quanto mais partes do seu cérebro estiverem em uso, melhor, e você precisará relaxar de tempos em tempos, pois a programação pode ficar demais.
2
Tjaart

As revisões por pares realmente ajudam a melhorar a qualidade do seu código. Se você não tiver um mentor real, poderá postar seu código [depois de reduzi-lo ao mínimo necessário] em StackOverflow ou RefactorMyCode ou em listas de correio, e as pessoas o ajudarão a melhorar a qualidade do seu código.

2
missingfaktor

Sim, a prática é extremamente importante para desenvolver habilidades de programação e mantê-las afiadas. No entanto, somente a prática o levará tão longe. Você também precisa aprender com pessoas que sabem mais do que você. Existem técnicas de que você nunca ouviu falar, práticas cujos benefícios não são imediatamente óbvios e truques que você nunca conseguiu inventar.

A maneira de aprender novas técnicas, truques legais e práticas úteis são muitas. Leia livros. Converse com colegas de trabalho. Pergunte. Revise o código de outras pessoas e peça que elas analisem o seu. Leia blogs e artigos sobre programação, incluindo este site. Em resumo, não trabalhe no vácuo.

Ah, e se você não tem certeza do que significa NP-completo, ou se a notação big-O o assusta, provavelmente você deve fazer alguma teoria das classes de computação e algoritmos.

1
Dima

Eu diria que você deve ler sobre os padrões de design, como Builder, Factory, Composite e, eventualmente, Observer, Mediador e Flyweight. Os padrões de design não são o fim de tudo para soluções de codificação, mas demonstram como implementar conceitos teóricos de programação orientada a objetos.

1
Tim Claason

Só posso sugerir o que funcionou para mim. Eu sonhei em aprender uma linguagem de programação e criar um mecanismo de xadrez com ela. Saí gastando tempo com livros, artigos e pequenas amostras. Por isso, decidi verificar projetos reais com melhor documentação para o desenvolvedor. Eu escolhi um e comecei a ler o projeto dia a dia. Não pense que os dias que passam perdem tempo enquanto lê. É muito melhor do que gastar tempo lendo artigos e livros. Você encontrará muitas coisas que não estão claras à primeira vista, mas dia após dia isso mudará se você tentar pesquisar com paciência. Não espere entender tudo em uma semana. Você tem que manter sua baixa auto-estima quando não entender algumas coisas. Apenas tente descobrir como essa coisa incrível está funcionando e se divertindo.

Escolha um projeto existente que tenha paixão por ele. Comece a ler códigos, depure-o e tente entender como as coisas funcionam todos os dias. Também use o projeto para si mesmo. Então comece a adicionar alguns recursos que você deseja. Tente escrever um aplicativo igual ou semelhante.

1
Freshblood

"Prática!" Isso é um clichê.

Você deve revisar o que aprendeu nas aulas de matemática e criar alguns programas que lidam com os problemas. Além disso, implemente um programa de elevador, uma máquina de venda automática (que calcula as alterações nas moedas), para aprimorar suas habilidades lógicas. Pense em tudo na vida cotidiana e implemente-os.

1
Ming-Tang