Como melhoro minhas habilidades de codificação? [fechadas]

76

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

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

O problema básico da minha universidade são os padrões de ensino. Ninguém está preocupado em ensinar conhecimento de codificação para os alunos, em vez de apenas 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 possíveis maneiras 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 que sugerem o desenvolvimento de habilidades de codificação.

ykombinator
fonte
13
FYI: Da minha experiência o conhecimento teórico irá certamente ajudá-lo na parte posterior
Gopi
6
Você pode nadar apenas lendo o livro "aprenda a nadar em X dias"?
Pramodc84 6/10/10
9
"Prática deliberada". Faça algo um pouco mais difícil que o seu nível atual, resolva-o, aprenda com ele e repita.
7
@ pramodc84 Mas, certamente, ler um livro relacionado com a natação e, em seguida, pulando em um rio vai certamente ajudar do que apenas saltando diretamente em um rio e tentando aprender a nadar
Gopi
5
É assim na maioria das universidades. Um diploma não é sobre ser um bom programador; trata-se de conhecer as teorias por trás disso e como aplicá-las - você pode dizer que ser um bom programador é deixado como exercício para os graduados.
configurator

Respostas:

46

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 as perguntas SO 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.

P Shved
fonte
8
Code Complete é uma boa leitura - esse é o livro que eu mais gostaria de ter lido quando saí da faculdade como programador.
glenatron
2
Agora esse livro está na minha must-readlista. :) Obrigado!
Ykombinator 01/10/10
2
@ykombinator:(push 'code-complete must-read)
Giorgio
98

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!


fonte
19
+1 para sempre seguir o caminho mais difícil. Eventualmente, eles se tornam um caminho fácil! Boa resposta.
Ryan Hayes
3
Certamente parece uma tarefa assustadora se preparar para um desafio, mas acho que isso gera motivação para o sucesso. Ótima resposta. Os idiomas que eu conheço melhor são os que primeiro mergulhei na cabeça sem saber e aprendi continuamente com cada projeto.
Chris
2
Eu mudei mais difícil pela maioria dos desafios. É mais positivo
2
Uma boa programação não é um esporte para espectadores.
Incognito
4
@ Pierre, você quer aprender 1) latim e 2) Perl. Código Perl em latim: csse.monash.edu.au/~damian/papers/HTML/Perligata.html
21

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.

JeffO
fonte
1
Exatamente! Esse é um ótimo ponto. Provavelmente ainda não tenho mentor.
Ykombinator 01/10/10
4
Escreva um código e publique-o com uma pergunta específica no StackOverflow.com e você obterá bastante.
JeffO 01/10/10
2
É por isso que continuo reclamando de ter revisões de código em nosso projeto, mas "não há tempo para isso".
MetalMikester 01/10/10
1
@MetalMikester - mas sempre há tempo para fazer isso de novo.
JeffO 01/10/10
1
@ Jeffff É exatamente o que está acontecendo agora. :(
MetalMikester
10

Aqui está uma apresentação que Dan North fez e a 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
ysolik
fonte
8

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

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 bela citação 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 :

"Costumo ouvir 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! "

DL
fonte
5

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.

sal
fonte
4
  • 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).
Amarghosh
fonte
4

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.

Muad'Dib
fonte
Sim, Tiger Woods pode ser "o melhor" jogador de golfe por ter muitos amantes. :-) Então ele não é realmente um bom exemplo.
DL
4

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 The Pragmatic Programmer, introduziu o conceito de Code Katas , semelhante ao conceito de kata nas artes marciais.

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

jmservera
fonte
4

Pule na água, pode estar frio a princípio 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 por aí, talvez entrar final profundo.

Acabei de terminar a faculdade há alguns meses, onde estudei Java. Igual a 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 o PEAR e seu módulo quickform, que é outro obstáculo que tenho de superar, mas determinado e empolgado.

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

Jonathan
fonte
3

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 de C # (não a versão na parte superior. Cometi o erro olhando uma versão antiga mais popular que não tinha a sintaxe que eu estava procurando)


fonte
3

O consenso geral é "escrever mais código", com o qual concordo, mas acrescentarei a esse conselho que você deve escrever muitos tipos diferentes de código. O Java é bom no que diz respeito às linguagens, mas você definitivamente deve escrever um código para cima e para baixo no espectro de potência. Além do Java, sugiro fazer alguns pequenos projetos em uma linguagem de nível inferior (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.

Cercerilla
fonte
2

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. Talvez você não consiga finalizá-lo, 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.

glenatron
fonte
2

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.
Tjaart
fonte
2

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.

desaparecido
fonte
1

"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.

Ming-Tang
fonte
1

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. Reveja 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 significado de NP-completo, ou se a notação big-O o assusta, provavelmente você deve fazer alguma teoria das classes de computação e algoritmos.

Dima
fonte
1

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.

Tim Claason
fonte
1

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ê precisa 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.

Sangue fresco
fonte