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.