Como aprender a programar
Recentemente eu escrevi um post sobre como se tornar um programador e outro como se tornar um ainda melhor. Na verdade o post não fala exatamente como se tornar um, mas conta a minha experiência pessoal de como me tornei um ao longo de 1 ano e meio trabalhando na área de suporte até conseguir a primeira oportunidade. Obviamente eu não teria conseguido, caso não soubesse programar.
Mas como aprender a programar antes de se tornar um programador, para então se tornar um programador e aprender a programar de verdade?
Pode soar confuso, como o enigma do 'ovo e da galinha', mas vou tentar desmitificar aqui e bater um papo com você, novamente levando em consideração a minha experiência pessoal.
Comece com o Básico
As pessoas tendem a subestimar o básico em todos os sentidos.
Elas querem perder peso, mas não querem cortar a sobremesa depois do almoço.
Querem comprar algo novo, mas não querem economizar para isso.
Note que nestes dois exemplos, e poderia citar muito mais, é óbvio o que é necessário para alcançar os objetivos, mas poucos conseguem porque tem de fazer concessões, abrir mão de coisas que não são tão fáceis assim.
Aprender programação não é diferente.
Então qual seria 'o básico' para aprender a programar?
Estudar.
E não estou falando de se matricular em algum curso, seja técnico, superior ou mesmo profissionalizante (os famosos cursinhos de informática, será que ainda existem?). Estou falando de ESTUDAR DE VERDADE. Talvez algo que você jamais tenha feito, vai saber...
Vou ilustrar uma maneira de como fazer isso por conta própria e você vê se é um modelo que você conseguiria repetir, ok? Futuramente pretendo falar de outras possibilidades, se não tiver muita inclinação ao autodidatismo. Gostaria que comentasse o que funciona ou funcionou para você nos comentários, assim quem sabe não me ajuda a ajudar outras pessoas?
Mas voltando ao básico, estudar é algo óbvio, certo?! Mas por que não funciona para todos?
Porque independente de como você escolher fazer isso, terá de abrir mão de seu tempo. Existe um lema na musculação chamado 'No pain, no gain' ou 'Sem dor, sem ganhos', é mais ou menos o que temos aqui. O básico para você aprender a programar será dedicar parte do seu tempo livre para estudar programação. Ponto. E ignore o fato de já estar estudando programação em algum curso que esteja fazendo, simplesmente NÃO É O BASTANTE.
Façamos as contas: dou aula de programação para 20 alunos todas as terças e quintas na faculdade em que trabalho. São 3h de programação às segundas, mais 3h de teoria às quartas (um mal necessário, diga-se de passagem). Isso dá um total de 24-27h de estudo de programação por mês. Isso considerando que neste período você estivesse 100% focado, não tivesse de esperar pelos colegas mais lerdos, e por aí vai.
Alguém que já esteja no mercado de trabalho bate essa mesma marca trabalhando 3-4 dias do mês, e com muito mais qualidade, uma vez que no serviço tendemos a estar mais focados que a maioria dos alunos de faculdade. Ou seja, apenas o tempo que programamos na faculdade não é o bastante, você sempre vai estar muito atrás da galera que "saiu na frente", mas com pequenos ajustes em nossa rotina, podemos mudar isso.
Novos cálculos: se um aluno meu pegar um turno (3h) do sábado ou do domingo para estudar programação, uma vez por mês, já estará 10% mais avançado que a turma, apenas "sacrificando" (eu prefiro dizer INVESTINDO) um turno de um final de semana do mês. Se ele fizer isso todo final de semana, são no mínimo 12h a mais de programação no final do mês, ou 50% a mais que a média dos alunos que só programam durante as aulas.
Quem você acha que está mais perto de se tornar um jogador de futebol: aquele que só bate bola no domingo ou aquele que além de ir para a escolinha ainda bate bola todo domingo?
Como arranjar tempo?
Então o primeiro passo é arranjar mais tempo, certo?
Errado.
O primeiro passo é REALOCAR TEMPO.
Sim, porque o dia sempre vai ter as mesmas 24h, e a menos que você hoje não faça nada da sua vida, provavelmente já terá suas horas acordado alocadas. O grande segredo aqui é cortar os desperdícios, o supérfluo e aproveitar o seu dia, semana e mês mais eficientemente. E isso eu sempre soube fazer muito bem, modéstia à parte.
O autor e empreendedor Tim Ferriss tem um método conhecido como DEAL, cuja letra 'E' do acrônimo é traduzida como Eliminação, ou seja, cortar fora da sua agenda tudo o que toma o seu tempo mas que agrega pouco, ou pior, não agrega nada. Esse método é usado por ele para ensinar atletas esportivos a serem mais eficientes em seus treinos e dietas, e empreendedores a trabalhar menos e ganhar mais com seus negócios.
Tentador, não? Ele detalha isso em seu livro famoso "Trabalhe 4h por Semana", mas não vou falar dele neste post, pois já falei em outro.
O grande segredo de eliminar coisas que tomam seu tempo não é para ficar vagabundeando sem fazer nada, é para ter mais tempo disponível para fazer o que realmente importa pra gente, ou que ao menos PRECISAMOS fazer, como é o caso neste momento: aprender programação.
Na era do Netflix, vejo a maioria dos meus alunos gastarem todas as horas de um final de semana assistindo toda uma temporada de sua série favorita. Ou séries, no plural.
Não estou dizendo que você não deva mais assistir suas séries, mas que tal deixar para assistir a temporada completa ao longo dos meses que antecedem o lançamento da nova?
Digo, um episódio por semana, que nem as pessoas normais faziam antes do advento do Netflix. Pode parecer estranho hoje, mas há uns 10 anos víamos um episódio de nosso seriado favorito por semana apenas, e teve gente que ficou 6 anos assistindo Lost assim ou 10 assistindo Smallville (como eu...).
Outra ideia é o tempo jogando videogame.
Eu mesmo, se não me "cuido" jogo 3-4 temporadas de Master League no Xbox durante o final de semana, consumindo horas preciosas que eu poderia estar fazendo coisas mais interessantes, seja estudar uma tecnologia nova, escrever pro meu blog ou passear com minha família. Não precisa abandonar o videogame, mas defina um horário para terminar sua jogatina e dar atenção aos estudos de programação. Que tal unir o útil ao agradável e aprender a programar jogos? Eu posso te ajudar com isso nesse livro aqui!
Outro ponto: ônibus.
Se você consegue ler enquanto o ônibus chacoalha (eu leio de boas há uns 20 anos sem problemas de visão até o momento), esta é uma boa hora para colocar a parte teórica do aprendizado de programação em dia, deixando para praticar assim que chegar em casa ou no curso. Também já ouvi falar de excelentes aplicativos que você pode usar no celular para aprender o básico de programação (bem básico mesmo). Quem sabe eu não faço uma lista deles em um post futuro?
A questão é: você vai ter de sacrificar algumas coisas.
O que eu fiz?
Descobri, só pra citar um exemplo, que ir para a casa da minha namorada na sexta à noite e só sair de lá na segunda de manhã fazia eu perder muito tempo, na verdade todo o tempo que eu tinha disponível, uma vez que eu trabalhava e estudava no resto da semana. E isso era um grande problema.
Sério. Ninguém fica tanto tempo assim fazendo coisas realmente legais com a namorada, você sempre acaba vendo novela junto com ela em algum momento, esperando ela tomar banho e/ou se arrumar pra sair, aguentaconversa com parentes dela e por aí vai.
Reduza este tempo como eu fiz: passei a ir pra casa dela no sábado de tarde, isso me deu a noite de sexta e a manhã de sábado para estudar mais programação. E mesmo quando estava na casa dela eu levava o notebook junto para programar nos momentos em que eu e ela não estaríamos fazendo nada de interessante.
E a quem possa interessar, estamos há 11 anos juntos, somos casados e temos um lindo filho de 2 anos. Ou seja, não foi o fim do mundo, muito pelo contrário! Foi algo que eu combinei com ela que faria durante 6 meses, o prazo que eu havia dado a mim mesmo para conseguir uma vaga com programação (acabei conseguindo no quinto mês).
Aprendendo sozinho
Sempre tive facilidade de aprender coisas sozinho. E sempre preferi aprender sozinho também. Do ponto de vista do aprendizado em si, sempre foi melhor para mim. Os cursos me ajudam de outras formas, como networking, resolução de dúvidas pessoais e muitas vezes me obrigar a estudar aquilo (afinal, estou pagando, tenho de ir nas aulas :) ). E hoje em dia está ainda mais fácil aprender a programar sozinho, com a infinidade de videoaulas em sites como Youtube, Udemy e muitos outros.
Como eu fiz para aprender sozinho?
Bom, eu vi o básico de programação para máquinas quando fiz Técnico em Eletrônica no SENAI, mas nunca tinha praticado em projetos reais. Quando entrei para a faculdade, começamos a ver C. Mas não parávamos nunca de ver C e isso me incomodava, pois não gostava dos pseudo-sistemas que fazíamos em DOS com aqueles códigos em C, eu queria interface gráfica, banco de dados, etc. Então ouvi falar de Java, que é uma das linguagens de programação mais usadas no mundo, e que em 2006 estava em seu auge (hoje nem tanto). Meu professor de Introdução à Computação sempre falava bem da linguagem, das oportunidades do mercado e como era bem pago um programador Java.
Pensei: tenho de aprender a programar Java!
Ele não ajudou muito (o professor) no começo, pois me deu o link do site da Sun (antiga dona do Java), onde tu faz download do Java e onde tem toda a documentação oficial. Qualquer um que já tentou aprender alguma coisa usando a documentação oficial sabe que não é exatamente a melhor fonte para um iniciante 'beber'.
Mas nada que o Google não resolva, certo?
No início eu não tinha Internet em casa (nem mesmo um computador, eu só usava no serviço e faculdade), então eu descobri um site chamado Apostilando.com, que era a maior referência em apostilas de informática na época. Fui na categoria Java e baixei todas as apostilas que lá existiam.
Sim, TODAS.
Na verdade não eram muitas, apenas umas duas dezenas. Baixei todas pro PC para poder ler mesmo sem Internet e carregava comigo as que cabiam em um disquete. Sim, disquete. Pendrives eram muito caros à época, 1GB custava R$150 em uma época que isso era 25% do meu salário de estagiário de suporte...
O meu modus operandi era bem simples: eu lia a apostila e ia fazendo os exercícios da primeira página à última. Depois pegava a próximo apostila e fazia o mesmo. Ad infinitum.
Obviamente lá pela terceira ou quarta apostila eu já estava ficando craque no básico de programação Java e tive a sorte de encontrar uma que era excelente, do prof. Peter Jandl Jr, da Universidade Federal do Paraná. Ele meio que me ensinou Java diretamente, pois a apostila dele foi a melhor que encontrei à época e influenciou bastante a didática que utilizei no meu próprio livro de Java, que hoje recomendo para quem deseja aprender essa linguagem.
Mas estamos falando de como eu fiz para aprender Java sozinho em 2006, hoje em dia existem outras técnicas que você pode experimentar, como videoaulas. Encontre a mídia que lhe agrada mais: livros físicos, digitais, videoaulas, etc e vá em frente.
Praticando sozinho
Todos sabemos que teoria sem prática não leva a lugar algum, então mesmo estudando sozinho uma hora você terá de praticar, certo?
E não estou falando dos exercícios dos livros e das videoaulas, estou falando de praticar no mundo real, com problemas reais.
Parece impossível?
Não MESMO, e vou mostrar como!
Costumo dizer que estudantes de computação espertos sempre arranjam um jeito de ganhar dinheiro. Isso porque sempre tem alguém que precisar arrumar seu PC, configurar uma impressora, precisa de um site pro comércio da família ou mesmo um um "sisteminha".
E é desses "sisteminhas" que estou falando!
Fato: todo mundo conhece alguém que precisa de um sistema para resolver alguma coisa. Nas disciplinas que dou de programação na faculdade sempre incentivo meus alunos a buscarem problemas reais para resolverem com "sisteminhas". Coisas simples como telas de cadastro e listagem, já fazem muita diferença no cotidiano de quem antes lidava com caderninhos ou tinha de lembrar coisas de cabeça.
Um aluno certa vez fez um sistema de controle de caixa para o brechó da prima dele, achei demais, pois ele começou a disciplina sabendo o básico de algoritmos e terminou com um sistema completo funcionando em produção! Me senti muito orgulhoso...
Outro aluno, que fazia websites e banners para clientes, fez um sisteminha de cadastro para colocar quem devia pra ele e quanto. Muito simples e funcional, e rodava direto do pendrive! Demais!
Mas o que EU fazia na época da faculdade?
Sempre tive muitos livros e filmes, então fiz um sisteminha tipo de biblioteca/locadora onde eu listava minha coleção e para quem eu havia emprestado algum livro ou DVD, para evitar esquecer e poder cobrar a devolução depois.
Meu padrinho usava um caderno para controlar a entrada, saída e gastos dos hóspedes de seu pequeno hotel em Porto Alegre, então fiz um sisteminha para ele cuidar disso.
No meu estágio como técnico de suporte nós atendíamos chamados de diversos postinhos de saúde de Gravataí e depois não tínhamos como "prestar contas" do que fazíamos. Eu e meu colega fizemos um sisteminha de cadastrar os chamados que depois imprimia um relatório por período, para mostrar aos chefes.
Mas se isso não parece legal pra você, eu também fazia joguinhos para ajudar a melhorar minha lógica e conhecer mais dos pormenores do Java (tipo os que ensino aqui). Eu criei um joguinho de tênis, igual àqueles de SNES, mas com direito à sprites do Guga e gritos à cada raquetada bem sucedida. Pena que programei mal a IA do oponente (ou bem demais) e não havia como ganhar...
Também criei um joguinho de PIF também, com gráficos no estilo daqueles de Pôker do SNES. Eu criava muita coisa nas horas vagas do serviço e mesmo durante as aulas chatas da faculdade. :P
O ponto aqui é que depois de um certo tempo lendo e praticando com exercícios, você terá de arranjar algo real para programar. Seja um jogo, sistema, não importa, você tem de encarar o quanto antes o mundo real, olhar nos olhos de um cliente e resolver um problema dele. Mesmo que esse problema seja a falta de um joguinho para se divertir.
Tenha o equipamento certo
O equipamento certo é algo subjetivo.
Tenha em mente que você tem que ter o hardware necessário para aprender a programar. Na maioria dos casos, um notebook com 2 núcleos de processamento e 1GB a mais de RAM do que o SO usa, já é o suficiente. Se for programar algo muito pesado, que exija uma IDE como Visual Studio ou NetBeans, 1GB não será o suficiente, então pense em 2GB sobrando na máquina.
Ter um notebook é de longe o melhor investimento que alguém que está querendo aprender a programar pode fazer. Eu senti isso na pele.
Custei a ter um computador, fazia 1 ano e meio que estava na faculdade quando fui comprar meu primeiro computador para então descobrir que eu nunca usava ele, pois nunca estava em casa, a não ser para dormir. Vendi o PC e comprei um notebook. Aí sim minha produtividade decolou.
Com o notebook eu tinha os meus códigos-fontes, livros digitais e programas de exemplo onde quer que eu fosse. Desde o serviço, minha casa, casa da namorada e faculdade. Não perdia mais os trabalhos transportando em disquetes, podia sempre continuar meus sistemas de onde parei e principalmente: aproveitava cada hora disponível para programar um pouco mais.
Caso você não tenha grana para um note, um bom pendrive resolve a questão de transportar seus estudos sempre com você. Carregue seus PDFs, videos, programas de exemplo e códigos-fontes consigo, mesmo que tenha conta no Google Drive ou DropBox, pois nunca se sabe quando podemos ficar sem Internet e consequentemente sem acesso aos estudos.
Pode parecer paranóico, mas se você quer realmente aprender a programar o quanto antes, não pode se dar ao luxo de perder 1h ocioso porque não tem Internet para baixar seus arquivos.
Inglês ajuda muito
Se o notebook lhe permite aumentar a produtividade, o Inglês lhe ajudará a aumentar o leque de opções nos seus estudos, o que deve acelerar seus resultados exponencialmente. Sério.
Primeiro ponto: as linguagens de programação são em Inglês. Só o fato de conseguir ler o básico de Inglês já vai lhe ajudar a entender o que é um 'IF' ou um 'WHILE'.
Segundo ponto: os melhores sites de dúvidas são em Inglês. Sim, Stack Overflow por exemplo, que é de longe a fonte mais usada por programadores para acessar suas dúvidas (são 4.5 milhões de programadores ao redor do mundo perguntando e respondendo questões de programação) é completamente em Inglês. Sem contar os inúmeros fóruns, blogs e claro, as documentações oficiais que são boas para tirar dúvidas pontuais como qual o tamanho máximo de um inteiro ou quantas casas decimais tem um float.
Terceiro ponto: os livros mais recentes, que devem demorar anos para chegar ao Brasil, são em Inglês. O mesmo para as videoaulas. Ok, este último é mais complicado, mas note como apenas saber ler Inglês já lhe dará acesso a muito mais material de qualidade do que você tem hoje, e consequentemente vantagem sobre os demais brasileiros que estão querendo aprender programação também.
Quarto Ponto: as melhores vagas de emprego são em Inglês. Pelo simples fato de os melhores salários e condições de emprego serem oferecidas por multinacionais como Google, Microsoft, Dell, etc. Ou seja, adiar o aprendizado do Inglês vai adiar também as melhores oportunidades de emprego.
E caso ainda não esteja convencido, saiba que empresas como SAP e Dell contratam jovens inexperientes para suporte e programação, mesmo sem saberem programar ou prestar suporte, se eles tiverem Inglês avançado. Sim, isso mesmo. Isso porque é mais fácil para eles ensinar alguém a programar ou responder chamados do que falar um segundo idioma.
Curioso, não?!
Não tenho foco algum neste artigo em dar dicas de como aprender Inglês sozinho (embora o Felipe Neto dê uma excelente dica neste vídeo), mas acho que você entendeu a ideia. Eu mesmo aprendi o básico sozinho e depois fui atrás de cursos online e presenciais. E ainda continuo aprendendo!
Conclusão
Eu sei que o post foi extenso, mas é como disse, não é fácil se tornar um programador, principalmente sozinho. Precisando de dicas, feedback ou apenas querendo deixar seu depoimento ou experiências, use o espaço para comentários aí embaixo ou entre em contato!
Se mais especificamente o seu desejo é virar um programador de apps, recomendo este livro. Programador Java? Este livro aqui é bem bacana também.