Como aprender a programar? Indiferente da Linguagem

Tempo de Leitura: 12 Minutos

Em uma aula de “Algoritmos e programação”, vi alunos, que nunca viram sequer uma linha de código. Alguns deles tinham habilidades matemáticas e conseguiam pensar fora da caixa. Alguns outros estavam na média. Outros não tinham muito interesse na aula, só prestavam atenção. Até que uma atividade foi proposta e eles tinham 1 semana para ler e usar a internet para resolver uma série de problemas. Uma semana depois, me mandaram a solução, eles resolveram tudo perfeitamente, só lendo na internet.

Todo mundo pode aprender a resolver um problema simples em alguns dias, e até aprender a sintaxe básica de C ou JAVA ou qualquer outra linguagem. Aprender a programar é um processo muito complexo. É como aprender um idioma, você precisa aprender a dizer a mesma coisa de várias formas diferentes pra se considerar proficiente. Também, existem níveis de conhecimento. Não se “sabe programar” fazendo simplesmente Hello World e algum menu interativo, mais sim conseguindo usar aquela linguagem em específico para resolver um problema por mais simples que seja.

O material de estudo realmente importa. A internet te municia com uma tonelada de recursos, então você precisa aprender a diferenciar entre a explicação curta e concisa e a explicação longa e que agrega um conhecimento específico sobre algo, e a informação não útil. Você talvez não precise saber toda a lógica de um vetor para poder utilizá-lo, a não ser que seu objetivo seja entender a fundo seu funcionamento, ou seja, você pode ir aprendendo de maneira mais superficial se já tem conhecimento de funcionamento, ou pode ser mais específico se está querendo entender o funcionamento. Se você também tiver um professor que te ajude a entender, e te der as respostas que precisa, você provavelmente aprenderá muito mais rápido com a experiência dele.

Eu não me considero um expert nem um novato. Estou no meio, perguntando quando necessário e ajudando quando possível. Eu sei fazer algumas coisas muito complexas em C/C++, então, pela minha experiência, aprender a escrever código decente, legível e capaz de ser refatorado, pode tomar entre 2–3 anos em um ambiente de produção, talvez até mais.

A internet tem crescido em material educativo, então esse é um motivo pelo qual as pessoas aprendem rápido. Se você não entende um artigo, ou uma forma de explicação, você simplesmente lê outro. Também, você não precisa sair de casa enquanto participa de uma aula online. Essas são as vantagens da era moderna. Fóruns e blogs são um recurso útil também. veja alguns sites como o StackOverflow, o Quora, entre uma centena de outros que tem o único objetivo de ser uma comunidade de aprendizado e troca de experiências.

A vontade de melhorar a cada dia e de aprender, a perseverança, autoconfiança e um pouco de sorte é o que te empurra ao próximo nível. Portanto, para aprender a programar, o que você tem que aprender primeiro é o quão fundo você quer conhecer uma determinada linguagem, ou o quão importante para você é aquele conhecimento.

Da mesma maneira, hoje, o quão importante para você é fazer um curso ou aprender sobre estética para pets ou qualquer outro assunto? Vejo muitas perguntas sobre que linguagem é melhor ou pior, o que devo aprender para me tornar um programador ou várias questões do gênero, e eu te diria que o que importa não é a linguagem em sí, e sim, você tem que aprender a solucionar um problema.

Já trabalhando com programação, fui contratado por uma empresa, e me vi fazendo um curso de animação de festas infantis, pois um conhecimento que eles passariam ali, me seria útil para entender uma parte do funcionamento de uma empresa de organização de festas e eventos e me ajudaria muito na condução de uma equipe que estava com a proposta de desenvolvimento de um software específico para a área. E claro, não foi inútil pois todo o conhecimento é aproveitado por nós de uma maneira ou de outra.

A resposta, não é qual a linguagem que você deva aprender, e sim, o que você pretende na sua carreira profissional, se seu objetivo é escrever games, não é muito útil aprender assembly, da mesma maneira que se o objetivo é software embarcado como softwares para microondas não é util você aprender python pois o ideal nesses caso é assembly ou C. Se seu objetivo é analise de dados, R ou Python são boas pedidas e por ai vai. Fazendo uma analogia, não adianta você falar 10 idiomas (inglês, alemão, espanhol, russo, português, japonês, italiano, chinês, árabe, tailandês) se seu objetivo for prestar serviços com comunidades carentes da índia ou da áfrica pois com eles você não vai ter sucesso total em sua comunicação pois a barreira do idioma não seria vencida, mesmo você podendo se virar em praticamente qualquer parte do mundo.

A diferença entre um programador Trainee, um júnior, um pleno e um sênior ou master, não é o conhecimento em uma determinada linguagem, e sim o quanto ele consegue desenvolver bem uma determinada solução. Um profissional experiente por exemplo no desenvolvimento de games pode não ser tão bom programando aplicativos comerciais. Da mesma maneira que um profissional de desenvolvimento de aplicativos web, pode não ser um bom programador de software embarcado, e por ai vai.

Certa vez, vi uma discussão, sobre PHP em um fórum onde um programador citava as falhas e tentava argumentar sobre a qualidade da linguagem, que a época estava prestes a lançar a versão 4 ou 5 se não me falha a memória nestes longo tempo, e a resposta dada por Rasmus Lerdof justamente o criador da linguagem é que mesmo a linguagem não sendo o ideal, e ele não sendo um bom programador ela era melhor do que o que existia até então (PERL) e ele era um programador melhor que a maioria, inclusive que o próprio autor da pergunta; realmente, mesmo com as falhas, ela era muito melhor do que o que existia no mercado em questões de produtividade e atendia muito bem os requisitos da maioria.

O mesmo ocorre com outros grandes saltos, o próprio linux, se Linus Torvald não tivesse tido a ideia e a publicado, nenhum outro programador o teria ajudado, e o sistema não seria o que é hoje. Mesmo Linus sendo considerado um mal programador pelo seu professor, ele teve uma grande ideia e pode com a ajuda de outros desenvolver o núcleo do sistema que roda em centenas e milhares de lugares e é responsável por inúmeros processos de missão crítica em todo o mundo.

Como desenvolver projetos pessoais em programação?

Existem dois problemas principais: A motivação e a metodologia. No primeiro, inicialmente você tem a ideia de algo e passa a pensar em uma solução para aquilo, fica um tempo criando um modelo lógico ou um algoritmo do problema e da solução, você está motivado a solucionar aquele problema que você tem em sua cabeça, e EUREKA, você acabou de criar todos os passos necessários para solucionar esse problema inicial.

Na sua próxima fase, você resolve publicar na internet, no GitHub ou em algum outro repositório de código e escreve um esboço da documentação e até encontra pessoas interessadas e o que precisa ser feito agora é você já sabe as respostas mas ainda tem que escrever o código, e sem dúvida, nenhum programador em sã consciência gosta de escrever código. A grande diversão da área é resolver os problemas. Quando você desenvolve profissionalmente (trabalho) ou mesmo academicamente (para um TCC ou uma aula) a sua motivação é financeira ou intelectual, e isso o estimula ou te obriga a continuar, pois se parar neste ponto, ou você perde o emprego ou não conclui seu curso.

Já, em projetos pessoais, muitas vezes, queremos simplesmente receber e ver a solução pronta, rodando e funcionando, da exata maneira como a concebemos (seria como escolher o sexo, e com quem nosso filho vai se parecer, e não aceitar nenhuma mudança) e não temos esse total controle quando usamos uma produção colaborativa como o GitHub, da mesma maneira que nosso bebê vai se parecer com ambos os pais, e vai depender de fatores externos como a carga genética que vão determinar todas as suas características, mesmo que a ciência tenha evoluído na genética, e possa escolher o sexo de um bebe, ainda assim fatores são dependentes de influências externas.

O grande problema do hábito de “codar freestyle” é que além de você poder gerar o problema da falta de motivação, se por algum motivo no meio do projeto você perceber que se embananou com algo definido logo no começo, dificilmente você vai ter motivação para desfazer as besteiras, e refazer o projeto. Isso acontece em qualquer grau de senioridade pois a maioria dos problemas surgem de escopos mal definidos / planejados.

Ou seja, falta uma metodologia para o desenvolvimento, se você quer fazer algo sozinho, tem que ter em mente todas as dificuldades e desafios, e encontrar uma motivação constante para a conclusão. Se for um projeto colaborativo, entenda que o filho não será só seu, e portanto terá características de cada um dos participantes e que você vai abranger uma causa comum a todos que se motivaram para desenvolver com você, e que cada um pode ter uma ideia ligeiramente diferente do problema e da uma solução para um aspecto diferente, além de uma visão mais ou menos abrangente.

Colaborar com um projeto me ajuda a aprender?

Não, na maioria das vezes, quando você é iniciante em uma linguagem, ou mesmo na programação, por mais que você se esforce e envie uma parte de código como uma solicitação de “pull request” seu código não vai ser perfeito e muito provavelmente será negado, o que pode gerar uma certa desmotivação e te inibir de continuar.

Neste caso, o melhor caminho é realmente ler o código de um projeto menor usando a linguagem, e entender a forma que o processo é feito, como é escrito cada parte de código, como determinadas partes são reutilizadas e pode até mesmo pegar uma parte como a de um issue e desenvolver para seu próprio uso, você deve ser capaz de entender e modificar o código feito por outra pessoa antes de querer enviar o seu para ser lido e aprovado por outras pessoas, quando você já estiver conseguindo entender e alterar código, ai sim está na hora de pular para a próxima fase.

Neste segundo momento, você pode começar a fazer solicitações e contribuir com projetos menores, entender como o fluxo de trabalho de um projeto colaborativo funciona, quando tiver uma solicitação negada, não desanime, releia o que você fez, arrume as falhas e tente novamente, o processo pode ser até um pouco demorado, para você ter sua primeira contribuição aceita em um projeto. Somente depois de algumas aprovações, você pode criar um próprio projeto e começar a desenvolve-lo e claro, receber solicitações de outros desenvolvedores.

Feliz aquele que transfere o que sabe e aprende o que ensina”Um bom caminho para aprender a escrever código, ou uma nova linguagem de programação, é entender a lógica por traz do código, é ler e responder ou tentar solucionar pequenos problemas, tente, escrever funções simples e testar todas as opções para saber como o seu código se comporta. Veja, no infográfico ao lado, a pirâmide de aprendizado natural onde as bases para se adquirir conhecimento são fazendo e ensinando, ou seja, você começa adquirindo o conhecimento através de métodos passivos como LENDO e OUVINDO, e juntos, eles respondem por somente 30% do conteúdo, os outros 70% são provenientes de métodos ATIVOS como FAZER, CONVERSAR, DISCUTIR e principalmente ENSINAR ao próximo.

Quando vamos ensinar, nos preocupamos mais com o conteúdo expresso, e isso é extremamente importante. Lembre-se, mesmo um programador com anos de experiência em uma determinada linguagem, pode não lembrar a sintaxe exata de uma função, ou todos os argumentos obrigatórios e opcionais, até mesmo em determinadas linguagens, todas as possíveis funções e métodos existentes, e isso não compromete sua proficiência naquela linguagem.

Um dos objetivos do blog BRASAP.COM.BR é justamente servir como um espaço, onde possa ensinar os Devs mais jovens, com uma série de artigos, promovendo essa primeira parte do aprendizado, onde você pode ler, e em breve, ver e ouvir discussões sobre esses conteúdos. Portanto, use e abuse dos comentários criando uma sólida e saudável discussão sobre os assuntos abordados, exponha suas dúvidas, e acima de tudo, quer aprender, coloca a mão na massa sem medo de errar.

Seja colaborativo e Aprenda com as Dúvidas dos Outros

Um ótimo primeiro passo para o aprendizado ativo, é a troca de experiências colaborativas, um dos melhores lugares em se tratando de Programação para tirar dúvidas é no StackOverflow que tem versões em Português e em ingês ambas com muito conteúdo tanto para quem precisa aprender como para quem quer aprender ajudando ao próximo.

Ah, uma coisa muito mal vista, não só em sites colaborativos como em praticamente qualquer lugar, é você não ter tentado nada e pedir ajuda, soa muito como faça o meu trabalho por mim, se você não tem ideia de por onde começa, a documentação é o melhor lugar, quando você já tiver uma noção de como algo é feito, você vai começar a fazer, e se algo não está funcionando do jeito que você espera, ai sim é hora de mostrar o que você já fez, e pedir a ajuda.

Ah, sites de documentação, wiki, how to, foruns e mesmo perguntas e respostas de dúvidas, são lugares destinados a quem quer aprender e a quem quer ensinar aquele conteúdo, não é lugar de ficar realizando discussões ou enquetes, comparações, e outros afins, a internet tem dezenas de outros sites que tem como objetivo principal criar grupos de discussão, vídeos de opinião, blogs e uma dezena de outros modelos. Geralmente quem opta por um site direcionado a dúvidas, ou é porque esta aprendendo ou é porque quer ajudar o próximo, e utiliza a tecnologia em questão.

Existem níveis e objetivos, nem sempre a dúvida de um iniciante é a mesma de um desenvolvedor que já domina o uso da ferramenta, e muitas vezes o que se aplica a um não se aplica a outro. É muito comum um desenvolvedor iniciante ter um código que não trata corretamente um determinado tipo de dados (principalmente em linguagens de tipagem mais fraca) ou não trata corretamente uma entrada de dados, cabe um alerta, tipo em produção pode ter uma falha de segurança ou uma exceção aqui, mais a complexidade aumenta conforme a evolução de quem está aprendendo. Isso se aplica a tudo, não adiante dar para uma criança que esta aprendendo as formas e figuras, montar um quebra cabeça de 3000 peças, tem que começar do básico e ir aumentando gradualmente.

DOCUMENTAÇÃO, o melhor lugar para aprender uma linguagem específica?

Na documentação, seja qual for a linguagem que você esteja aprendendo ou procurando uma informação, lá é com certeza o melhor lugar para encontrar as informações sobre uso desde o básico até o avançado. Ah e de quebra, é em suma maioria grátis e disponível para todos, claro, existe exceções e muitas vezes ajuda muito um guia ou um vídeo ou um exemplo diferente, por este motivo é que existem centenas de sites de cursos e treinamentos que tem conteúdo pago e gratuito e nos mais diversos formatos e valores.

Um detalhe muito interessante é que o lugar que tem o material mais atualizado, é justamente na documentação. Veja, a maioria das dos sites de linguagens e ferramentas, hoje é online e pode ser colaborativa, possuindo uma comunidade de desenvolvedores e mantenedores que podem tirar dúvidas e apresentar exemplos.