segunda-feira, 31 de maio de 2010

Minha história como programador

Atualizado em 6 de abril de 2013

Hoje eu estava "olhando pra trás" e me lembrando do passado, lembrando de como eu entrei nessa de ser programador. Daí me deu tanta saudade daquela época quando programação era pra mim só um passatempo, que eu resolvi escrever essa postagem pra você que está começando a descobrir esse ramo tão amplo da informática.

Bom, tudo começou quando eu tinha apenas 4 anos. Sim, 4 anos mesmo. Não que eu tenha começado a programar com essa idade, mas foi com 4 anos de idade que eu tive o meu primeiro contato com um computador. Meu pai me ensinou a digitar no teclado, e até hoje todos contam como eu aprendi a escrever "XUXA" no computador, kkkkkkkkk. Deixa pra lá... Mas creio que foi a partir daí que a minha curiosidade pelos computadores começou.

A partir dessa idade, eu já comecei a mexer com jogos. O software para esses computadores antigos da linha MSX funcionavam basicamente através de três mídias: fita cassete, cartuchos ROM e disquetes. Na época, não tínhamos um drive de disquete instalado na máquina, e nem os disquetes para rodar. Tínhamos uns poucos cartuchos e muitas, MUITAS fitas cassete com jogos. Pra quem não entende disso, aquela máquina era capaz de carregar um programa através de uma fita cassete rodando num toca-fitas comum, ligado ao computador. A "música" da fita cassete era uma barulheira chatinha, uns ruídos esquisitos que o computador traduzia para linguagem de máquina. E eu tinha muitos jogos em fita cassete, e era assim que eu me divertia naquela época. Na verdade, minha infância toda se baseou nisso. De vez em quando eu brincava com os poucos amigos que eu tinha, mas na maior parte do tempo era fuçando na máquina que havia se tornado o meu único companheiro fiel.


Isso era o que eu fazia aos 12 anos...



Vários anos depois, quando eu já tinha uns 12 anos, depois de muito jogar e fuçar na máquina, eu já estava mais "consciente" e comecei a mexer com programação. A primeira linguagem que eu aprendi foi BASIC. Eu tinha um computador antigo da linha MSX (por isso a minha paixão por essas máquinas MSX). Esse computador dos anos 80 não possuía um sistema operacional como se conhece nos PCs de hoje. O que ele tinha era um interpretador de BASIC embutido na ROM. Ou seja, ao ligar a máquina, o interpretador já aparecia e ela não fazia mais nada. Aparecia simplesmente um "Ok" que é o prompt de comando do interpretador, e a máquina ficava alí à disposição pra executar comandos do BASIC. Então, eu como sempre fui curioso, quiz descobrir como fazer alguma coisa naquela máquina. Existiam alguns poucos livros e manuais sobre BASIC, que na época que o meu pai comprou, vieram junto com o computador. Eu pegava os livros e copiava os exemplos, as listagens de programas-exemplo e digitava na máquina. Ficava encantado com os resultados. Ficava desenhando linhas, elipses, retângulos... Lembre-se que eu era apenas uma criança de 12 anos. Sem me dar conta, eu já estava lidando com programação. Eu ficava modificando os exemplos do livro, pra ver o que acontecia, e percebia que alterando o que estava escrito (o programa) eu mudava os resultados (o que aparecia na tela). E assim, pouco a pouco, eu fui aprendendo comandos e funções, sem saber que eu estava aprendendo programação.


Programando joguinhos em BASIC aos 13 anos...



Quando eu tinha uns 13 anos, eu já sabia de cor todos os comandos e funções do BASIC. Eu era capaz de criar os programas que eu quizesse, sem nem olhar mais nos livros e manuais (que, à propósito, já estavam mofando). Lembro até hoje quando eu descobri uma coisa que eu sempre quiz saber sobre aquela máquina. Eu sempre quiz saber como redefinir os caracteres usados pra escrever na tela. E isso era um assunto relativamente avançado. Nos poucos livros que eu tinha, não havia nada avançado, só tinha o básico, eu não tinha computador com acesso à Internet, não existiam lan-houses ainda. Então eu tive que descobrir por conta própria. E foi um belo dia, ou melhor, uma bela madrugada (devia ser umas 2hs da madrugada), eu estava lá fuçando no computador como sempre, e comecei a mexer com um comando que eu tinha até medo de mexer: o comando VPOKE. Esse comando serve para colocar um byte em uma posição da VRAM (memória RAM de vídeo). Eu tinha medo de estragar alguma coisa, eu não sabia nem o que era RAM ou ROM. Imagina se eu ia saber o que era VRAM. Eu só sabia que mexer na tal da VRAM afetava a tela, os caracteres da tela e as cores. Mas eu arrisquei. Comecei a testar diversos endereços da VRAM, fucei, fucei e fucei bastante. Até que eu percebi que ao colocar um valor em notação binária num endereço da VRAM algumas vezes fazia um caractere na tela mudar de "formato", quero dizer, o "desenho" do caractere se alterava de acordo. Percebi que a cada VPOKE que eu executava, mudava uma linha do caractere. E que os dígitos binários '1' "acendiam" um pixel, e os dígitos binários '0' apagavam um pixel. Daí eu me toquei que toda a parte da VRAM que lidava com os caracteres funcionava assim. Ou seja, eu havia acabado de descobrir como redefinir os caracteres da tela, tudo sozinho. A partir daí eu comecei a me sentir um verdadeiro programador.


Meu brinquedo favorito aos 13 anos era esse...



Com o passar dos anos eu fui aprendendo cada vez mais coisas sobre aquela máquina que já estava mais do que obsoleta, afinal já existiam PCs com Windows 98 e Internet. Aprendi a mexer com sprites, a fuçar na memória RAM do sistema, enfim... Mas a máquina estava tão velha que começou a dar sinais de mal funcionamento. Ficava reiniciando sozinha, travando, dando bugs, etc. Acabou estragando de vez quando eu tinha uns 14 ou 15 anos. A máquina foi jogada fora pois nem ligava mais. Fiquei triste...

Mas daí... o tempo passou, e com mais ou menos uns 17 anos eu consegui um PC desses comuns, com Windows 98 (ou seja, ultrapassado). Pra especificar melhor, era um Pentium 233 MMX usado que eu comprei com muito esforço pra juntar dinheiro do salário do meu primeiro emprego que já era uma mixaria. Paguei mais ou menos uns 300 reais pela máquina. Depois tive que comprar o monitor, o teclado e o mouse, tudo separado. Mas enfim, consegui uma máquina "mais ou menos", e que pelo menos daria pra programar bastante. Nessa época já existiam lan-houses, e eu como não tinha acesso à Internet em casa, eu levava um CD, baixava programas na lan-house e gravava tudo no CD, e levava pra casa pra instalar. Nessa época eu baixei um interpretador BASIC pro MS-DOS - o famoso QuickBASIC - pra relembrar os "velhos tempos" quando eu estava apenas começando a programar. Mas até aí eu não sabia programar grandes coisas. Só uns joguinhos bobos e uns programinhas básicos. Nada de mais. Até hoje eu tenho essa máquina mas ela não funciona mais. Inclusive, estou olhando pra ela agora :) Ela está de lado aqui no canto do meu quarto. Eu retirei a placa mãe dela pra fuçar nos chips, afinal de contas ela não funciona mais mesmo, então estou usando ela para pesquisas :P Retirei até a CPU (o processador) dela pra guardar de lembrança.

Passaram-se mais alguns anos, eu já com uns 19 ou 20 anos, ou seja, há uns 2 ou 3 anos atrás, eu comecei a estudar HTML e CSS para mexer com Web Design. Claro, se você não sabe, HTML não é e nunca foi uma linguagem de programação. HTML é uma linguagem de marcação. Mas faz parte da vida do programador saber mexer com HTML, CSS, JavaScript, isso é muito comum. Tanto que em 2008 eu fiz um curso básico de Web Design no SENAI em Florianópolis, SC. Bom, mas isso já é outra história.

Nesse meio tempo, eu comecei a estudar linguagem Assembly, ou seja, linguagem de máquina. Comecei a ver na Internet diversos documentos e tutoriais sobre a minha antiga máquina MSX. Comecei a redescobrir as características técnicas da máquina, a aprender sobre o microprocessador Zilog Z80 (por isso eu sou tão apaixonado por essa CPU), a aprender tudo sobre o computador que me fez seguir por esse caminho. Escrevi alguns programinhas inúteis em Assembly, e percebi que eu entendo relativamente bem como funciona a "escovação de bits". Pra vocês verem, passei do alto nível (BASIC) pro menor nível possível (Assembly). Ah, e antes que alguém resolva chiar: o correto é Assembly. Não existe linguagem Assembler. Assembler é o nome do programa que converte o código Assembly no código binário nativo da máquina. Resumindo de uma vez por todas: Assembly é um tipo de linguagem. Assembler é um tipo de programa. Ficou esclarecido?


Estudando Assembly z80 nos anos 2000...



Em 2009, eu comecei a estudar Programação Orientada à Objetos em Java. Aí eu já estava consciente de que era isso que eu queria pra minha vida como profissão. Já estava decidido que o que eu quero é ter uma carreira na área de Análise e Desenvolvimento de Sistemas. Eu comecei uma rotina de estudo: todos os dias eu tinha um horário certo pra estudar. Estudei através do livro "Java: Como Programar" da Deitel. Aprendi muito nesse livro. Aprendi muito sobre Orientação a Objetos, como os conceitos fundamentais: atributo, método, classe, objeto, referência, etc. Aprendi os conceitos um pouco mais avançados como herança e polimorfismo. Aprendi sobre relacionamentos entre classes como associação, agregação, composição, etc. E aprendi a aplicar todos esses conceitos usando a linguagem Java. Hoje, faz 1 ano que eu estudo Java, e na verdade, eu já tenho um certo domínio da linguagem, raramente eu preciso dar uma olhada em alguns assuntos mal resolvidos na minha cabeça. Mas na maior parte do tempo eu preciso é pesquisar sobre as inúmeras APIs de Java (que é gigantesca!), o que é natural pois nenhum programador conhece todas as APIs de Java.

Ao mesmo tempo que eu concluía os meus estudos sobre Orientação a Objetos em Java, eu comecei a pegar interesse por C e C++, já que são as linguagens mais usadas no mundo, e as mais poderosas também, depois de Assembly, claro (minha opinião). Comecei então a baixar apostilas sobre C e C++. Daí vem uma coisa interessante: como eu já tinha a noção de Orientação a Objetos, só precisei aprender a sintaxe de C++ pra aplicar os mesmos conceitos que eu aplicava em Java. O mais difícil em C e C++ foi entender a questão dos ponteiros, que é um assunto que todo programador iniciante passa por problemas ao tentar entender, mas que é absolutamente essencial para quem quer tirar o maior proveito possível da linguagem. Em C e C++, se você não sabe como funcionam os ponteiros, você não sabe fazer nada muito sofisticado.


Meu primeiríssimo projeto de software foi em Java:

Micropad



Aos 22 anos, eu já programava em Java, C e C++. Neste blog eu coloco de vez em quando alguns dos meus programas pra ajudar quem está começando também. Embora eu tenha divulgado o código-fonte de alguns programas em C++, os meus programas em Java eu não gosto muito de divulgar... mas quem sabe um dia. Em 2011, estudei Delphi mas não foi do meu agrado. Recentemente, comecei a estudar Javascript e sua biblioteca JQuery, para entrar na área de desenvolvimento Web.

Concluindo, essa foi a minha história até hoje.

Abraços!