Bom, como vocês devem estar indagando-se, o que vocês precisam para tornarem-se bons programadores, acima de tudo, é coragem. Não, não é uma brincadeira.
Prepare-se e tenha coragem, pois noites serão perdidas, atenção será necessária e práticas exaustivas, até que se chega próximo à perfeição (perfeição não seria a melhor palavra, mas não consigo pensar em uma melhor).
Para ser um programador, você precisará dedicar-se, ler muito (bem, a prática da leitura não é algo exclusivo da informática e nem da programação, é evidente).
Ao contrário do que muitos acham, os livros podem ensinar de forma errada. Como assim "de forma errada"? Você deve estar indagando.
Forma errada, que me refiro, é o ensino de práticas errôneas (ou má prática, se preferir. Os termos são quase que infinitos) e, muitas das vezes, ensinando até mesmo erros absurdos, que podem acarretar grandes problemas. O que, consequentemente, como diria o Martin Fowler (ou seria o Robert C. Martin? Não me lembro, mas foi num livro de um destes autores) poderia levar uma empresa à falência.
Não sei se posso citar aqui livros onde encontrei erros claros, erros absurdos, mas sei que posso citar livros extraordinários, que apresentam ótimas formas de desenvolvimento, economia de código, refatoração e, acima de tudo, da construção de um bom código, limpo e legível.
Vamos iniciar, portanto, falando um pouco sobre
threads.
Threads, basicamente, são como processos, que dividem-se para realizar uma ou mais tarefas de uma vez só (essa é a sua utilidade principal). Vamos supor que temos um formulário, com uma barra de progresso (Progress Bar), e um botão (Button).
No evento de "click" deste botão (on click) temos um laço, que percorre de 0 à 100 e, através da variável contadora desta mesmo laço, vamos adicionando à posição da nossa barra de progresso.
Um exemplo prático, simples, e de fácil entendimento:
TProgressBar.Max = 100;
for i = 0 to 100 do
begin
TProgressBar.Position :=
TProgressBar.Position + 1;
end;
O que o código acima faz:
'100' passa ser o valor máximo da barra de progresso, valor atribuído na primeira linha. Na segunda, temos nosso laço, que percorre de 0 à 100, como dito, e dentro do begin/end, vamos acrescentando 1 (uma) posição a cada vez que o loop passar.
Ótimo, temos um laço, que fará com que nossa barra de progresso "carregue", assim que clicarmos no nosso botão. Execute o programa e clique no botão.
Assim que a barra começar a encher, tente arrastar o formulário. Travou (ou deu "lag"), não? Isso é perfeitamente normal, pois estamos fazendo duas coisas ao mesmo tempo (tentando, ao menos), e sem usar threads.
Se tivéssemos usado threads, por exemplo, não teríamos esse problema.
- O que seria o ideal a fazer?
Criar uma thread, e no evento de execução desta thread (on execute), ou no evento de execução e espera (execute and wait), colocarmos uma prioridade baixa.
Em threads, podemos, inclusive, manipular sua prioridade, se é baixa, média ou alta, por exemplo. A grosso modo, é pra isso que a thread serve.
Como notam, minha explicação fora demasiada simplória, mas foi para ilustrar, apenas, a importância e o principal objetivo da thread. Para mais, pesquisem em referências externas.
Como eu havia prometido, indicarei dois livros de cabeceira. Isso mesmo, espero que, assim como é para mim, sejam também seus livros de cabeceira.
Os livros são:
- Clean Code: A Handbook of Agile Software Craftsmanship (Código Limpo, aqui no Brasil), do Robert C. Martin.
Se preferirem, há a edição em Português do Brasil. Este livro é estupendo! Ele nos apresenta, de forma super didática, boas práticas de programação, ilustrando com exemplos práticos as situações do dia a dia do desenvolvedor. Leitura indispensável para os novatos e também para os veteranos da programação.
- Refactoring: Improving the Design of Existing Code (Refatoração, aqui no Brasil), do Martin Fowler.
Sem sombra de dúvidas, é o livro mais importante sobre refatoração. Neste livro, que aliás também é excepcional, são apresentadas técnicas práticas de refatoração, boas práticas de programação e conceitos de desenvolvimento; tudo isso usando a linguagem Java como base, e a sua orientação a objetos, o que é importantíssimo.