Onde os bons tiram suas dúvidas?

Estou ingressando no mundo java e só conheço o GUJ e o próprio site da sun/oracle como referência e documentação.

Achei aqui nesse post http://www.guj.com.br/java/7028-favoritos- outras fontes para o java, mas ele já é antigo.

Já li muitos posts aqui e percebi que a galera é bem ativa para tirar dúvidas dos novatos (como eu). Mas, resumindo, gostaria de saber o que os grandes desenvolvedores que participam deste forum leem quando tem dúvida (pode ser em inglês ou português)? Qual site/forum vocês acessam? Que livro vocês carregam nas suas bolsas ou quais consultam no dia-a-dia?

Agradeceria muito se pudessem compartilhar essas informações.

eu procuro no google primeiro, depois procuro no google e depois procuro no google.
se eu nao achar eu pergunto aqui. que eu me lembre nunca fiquei sem resposta.

[]'s

Livros, testes, google.

Ler com atenção a documentação também ajuda muito.
Muitos iniciantes postam dúvidas aqui e dá para ver claramente que sequer fizeram isso.

Claro, para isso, muitas vezes é importante dominar o inglês (ou ter paciência para aguentar os erros do google translator).

Mas você tem algum exemplo?

Que tipo de exemplo você espera?

:arrow: stackoverflow

Bom… não me considero Bom… Mas realmente eu parto pro Google primeiro, depois de achar alguma coisa (sempre há uma luz por menor que seja) tento captar a idéia do que foi feito e apatar a minha realidade…

Quando não acho nada (o que está sendo cada vez mais raro), venho aqui e refaço a pesquisa no fórum de várias formas diferentes, mesmo sabendo que é meio desnecessário, mas é um passo que não abro mão…

Quando o tópico não é MUITO antigo, ressucito e refaço com meu novo problema, quando é um dinossauro, uso como referência para o novo Post.

Uma coisa que aprendi aqui e que o Viny já citou é: aprender a procurar na Doc e na FAQ antes de qualquer coisa…

Estou me forçando no inglês e isso tem me feito muito bem.

Abs []

Cara quer um monte de exemplo entra ai e não copie e cole tenta entender o que faz.

http://www.java2s.com/

livros te indico em inglês exceto se vc saber claro.

pergunta, vai programar em quê?

ótimo!!

[quote]Cara quer um monte de exemplo entra ai e não copie e cole tenta entender o que faz.

http://www.java2s.com/[/quote]

caraca!! muito bom o site!! vou usar bastante.

como disse antes, sou novato ainda entao fica difícil responder. Estou descobrindo o j2se 7, mas pretendo me especializar na camada servidor e web.

Vou dar um exemplo de todo o processo, então.

Digamos que eu queira aprender um assunto novo, vamos supor, como buscar uma placa de carros em meio a uma imagem. Escolhi um assunto especialmente difícil, pois é esse tipo de abacaxi que um profissional senior tem que descascar.

Primeiramente, vejo se nas APIs que conheço tem algo que faça isso. Se tem, basta ler a documentação e usar.
Mas, nesse caso, o pepino é grave o suficiente para não ter.

Então, a solução é procurar no google por coisas similares. Eu usaria termos como “image search” e “image data analysis” e “image cropping”. Um desses deve retornar algo próximo do que eu quero. É importante saber que na primeira busca você raramente acerta.

Dou uma lida nos artigos, tentando encontrar os que são mais próximos do que quero, pois eles podem indicar termos importantes da área. Nesse caso, vamos supor que eu achasse um artigo genérico da wiki, que me indicasse um termo mais preciso, que no caso é “image segmentation”.

Pois bem é hora de procurar no google especificamente por esse termo. A idéia aqui é encontrar artigos sobre o assunto, fóruns especializados, ou frameworks e ferramentas específicas para esse problema. Se eu achar e o assunto for o que eu quero, bingo!

Entretanto, em assuntos mais avançados, o conteúdo da internet é, em muitos casos, escasso, deficitário e dificilimamente vai ter o que você quer. (Outro problema é o oposto, vc acha coisa demais e não sabe onde aplicar). Porém, lendo os artigos encontrados, já dá para saber ainda mais termos, e o próximo passo, é buscar um livro na Amazon.

Vou na Amazon e procuro por termos que encontrei como “Image Processing”, “Image Segmentation” e “Computer Vision”. Talvez eu tenha achado algumas APIs para isso, e nesse caso, busco livros delas também “OpenCV”. É importante olhar as estrelinhas e ler os comentários dos leitores. Tentar ler alguns trechos do livro (no google books) ajuda, pois você precisa achar autores com os quais se identifique.

Provavelmente vou encontrar por lá alguns livros. Leio o resumo dos livros, e vejo se consigo obter algum.

Com o livro em mãos, provavelmente terei muito o que estudar. Provavelmente por lá irei descobrir que para buscar uma placa numa imagem, terei que fazer uma busca de altíssima dimensionalidade. E então, começo a achar os algorítmos clássicos para isso: Busca Tabú, Algoritmos Genéticos, etc. Procuro entender qual deles se adaptaria ao meu problema.

Vamos supor que eu opte pelos algorítmos genéticos. Então, busco material sobre esse assunto, estudo a fundo, e tento fazer uma implementação, ainda que simples, para testar se a minha teoria de que aquilo resolve o problema se confirma. Se confirmar, ótimo, tento refinar o algorítmo para uma solução final. Se não confirmar, repito o ciclo com algum outro algorítmo encontrado.

Agora, o que é importante nisso tudo. É entender que:

  • Você jamais encontrará o que procura sem os termos certos de busca. As primeiras buscas são mais para achar esses termos, do que propriamente para encontrar a resposta do que você precisa;
  • Não perca tempo procurando conteúdo em português. Geralmente é mais difícil, mais incompleto e as traduções divergem entre os termos;
  • Você precisa aprender a ler. E isso não significa só passar o olho, mas aprender a filtrar a informação, e efetivamente, a estudar com o que está lendo.
  • Em assuntos mais avançados, esqueça completamente a idéia de que você achará a resposta pronta, mastigada, do jeito que você quer.
  • Para entender o que lê, você precisa conhecer informática. Não estou falando de frameworks, mas de projetos, algorítmos, estruturas de dados e basicamente tudo que os alunos dizem que é inútil e não é prático num curso de ciência da computação.

Outras coisas que ajudam:

  • Conhecer outros especialistas em outras áreas (se vc nao sabe, ter o telefone de quem sabe pode poupar muito tempo). Recentemente, tive que fazer um rastreador de vídeo. Eu não entendia muto do assunto, e pude cortar muito caminho perguntando ao julicbq, aqui do GUJ, que sei que é especialista no assunto (entretanto, hoje sou dono de 2 livros sobre isso);
  • Ajuda ler material de outras áreas da informática de vez enquando. Você trabalhar com web? Procure se informar sobre outras tendências, como mobile ou redes. Você nunca saber quando os assuntos irão se cruzar.
  • Certifique-se que você tem uma base sólida em informática (não estou falando de uma linguagem, ou frameworks, isso muda o tempo todo). Se você ainda tem dúvida do que coisas podem transformar uma busca O(1) em O(n), de como trabalhar seu sistema operacional, seu banco de dados, do que são regiões críticas, de quais são os tradeoffs entre as várias estruturas de dados e algorítmos, você tem um problema.
  • JAMAIS use um código sem entender perfeitamente o que ele faz. E cuidado especial ao usar sites como Java2s, que são muito velhos. A maioria tem práticas antiquadas (como usar StringBuffer ou StringTokenizer). É bom ler a documentação do que está envolvido nesses códigos, pois elas costumam a indicar que aquele assunto é ultrapassado.

Esqueci de comentar, para dúvidas a respeito de bugs o processo costuma a ser mais simples:

  • Ler a documentação, para certificar-se que o código está sendo usado da maneira correta (isso deve ser feito antes mesmo de começar a codificar, ou do erro aparecer, mas se for código de terceiro, é bom saber se o cara fez direito);
  • Ler e entender a stack trace do problema;
  • Buscar o erro do stack trace no google;
  • Usar e abusar do depurador;

Também ajuda:

  • Ler livros sobre frameworks e linguagens;
  • Conhecer boas práticas das técnicas associadas (por exemplo, no caso de Java, Effective java, Refactoring, Padrões de Projeto, etc). Muitos desses livros dão dicas valiosas sobre o que é um mau código, e erros não tão comuns ou óbvios assim.

Pessoal muito obrigado pelas respostas.

Vini, foi ótimo o que vc passou aqui, valeu mesmo.

Achei excelente este relato do ViniGodoy. Mostra claramente que para se ter conhecimento não há “atalhos”.