Finalmente estou aprendendo a programar – e não comecei com um curso de programação

A necessidade de aprender algo novo é uma sensação ótima, e se você está brincando com a ideia de aprender a codificar, sinta-se fortemente encorajado a fazê-lo. Mas quando se trata de estudar, começar pode ser uma verdadeira luta, e sei disso por experiência própria. Algumas pessoas vão direto ao assunto e começam a hackear coisas juntas até que funcione, mas esse não sou eu.

Abrir o VS Code parecia assustador – e mais do que isso, inútil. Claro, eu provavelmente poderia fazer o computador imprimir “Olá, mundo” copiando algo que vi no Reddit, mas de que adianta exatamente se não tenho a menor ideia de por que funciona ou como aconteceu? Programação é um assunto tão estranho para quem não é técnico como eu, e mergulhar sem saber nada sobre como ela ou os computadores funcionam parecia uma loucura.

Então, depois de alguma tristeza e procrastinação geral, decidi abordar as coisas de uma direção diferente.

A maneira divertida é a melhor maneira

Gosto bastante de estudar e, como aos meus olhos é meio que um hobby, é natural que eu faça o que parece mais divertido. É bastante comum que as pessoas sigam na direção oposta e queiram fazer apenas o que é mais eficiente. Em todas as comunidades de aprendizagem que frequento, vejo constantemente perguntas de iniciantes sobre “a melhor maneira de aprender”.

Na minha opinião, o jeito divertido é sempre o melhor. Quem consegue aprender algo novo nunca é aquele que “estuda da maneira correta”, é apenas aquele que segue em frente. Mesmo que você perca algo importante nos estágios iniciais, contanto que continue, chegará a um ponto em que precisará preencher essa lacuna para progredir. Então você vai preenchê-lo e seguir em frente – e no final, o como e o quando nem importarão.

Quando pensei pela primeira vez em aprender a programar, tive mais certeza de como não queria fazê-lo do que de como queria fazê-lo. Eu sabia que não queria começar a escrever programas quando não tinha ideia do que fazia esses programas funcionarem. Eu sabia que o mistério disso iria apenas me incomodar e me distrair, e também acreditava que entender um pouco sobre computadores também ajudaria na minha compreensão da programação no futuro.

Então encontrei um livro chamado “Code: The Hidden Language of Computer Hardware and Software” de Charles Petzold . Houve boas críticas tanto de estudantes quanto de programadores experientes, e parecia começar logo no início, o que me agradou. Mas quando olhei os tópicos abordados nos diferentes capítulos (códigos binários, lógica com switches, bytes e hexadecimal, adição com portas lógicas, registradores e barramentos, sinais de controle da CPU, etc), ainda me senti um pouco sobrecarregado. Eu sabia que queria lê-lo, mas ainda sentia que precisava começar um pouco mais na minha zona de conforto.

Felizmente, há um assunto que está na minha zona de conforto e pode ser aplicado a praticamente qualquer assunto: história. Gostei na escola, estudei na universidade e adoro um bom livro de história ou um drama histórico. Existem também algumas figuras bastante conhecidas misturadas à história dos computadores que eu já conhecia – nomes como Charles Babbage, Ada Lovelace , George Boole e Alan Turing. Então, decidi deixar o livro Código de lado e entrar no mundo da ciência da computação lendo sobre seus primórdios.

O computador universal: o caminho de Leibniz a Turing

Capa do livro o computador universal.
Martin Davis

Este livro é de Martin Davis e está disponível como e-book na Amazon . Se você gosta de história, recomendo fortemente que você leia, mas também há alguma utilidade em lê-lo, mesmo que você não seja um grande fã de história. Se você não consegue começar com toda essa coisa de programação, pegar um livro sobre o assunto é uma ótima maneira de começar a estudar tecnicamente sem realmente sentir que está estudando.

O livro fica bastante matemático em alguns pontos, pois se concentra muito nos matemáticos cujo trabalho acabou se tornando parte integrante da invenção dos computadores. Não sou uma pessoa de matemática, sou péssimo com números, na verdade, mas matemática é um daqueles tópicos em que entender o quão pouco você entende é útil por si só.

Vamos sair pela tangente aqui. Acho que a matemática representa uma grande barreira para as pessoas quando pensam em computadores e programação. Certamente pode parecer uma área em que você nem deveria se preocupar em entrar se não fosse bom em matemática – e provavelmente houve um tempo em que isso era verdade (embora já tenha sido há um bom tempo). De qualquer forma, isso não é mais verdade.

Matemática e ciência são o que constroem os computadores – não há dúvida sobre isso. Mas a programação é diferente. Quando você escreve programas ou projeta software, a matemática é mais uma escolha do que uma necessidade.

A razão para isso pode ser resumida em uma palavra que você provavelmente ouvirá muito se começar a estudar: abstração. Compreender computadores significa lidar com diferentes níveis de abstração – o que essencialmente significa colocar as coisas em caixas e esquecê-las. Isso parece uma piada, mas é verdade.

Por exemplo, qualquer livro de programação ou curso de ciência da computação provavelmente começará explicando o que é binário – os pequenos 1s e 0s de Matrix. Você aprenderá o que são, por que existem e para que os usamos – e então colocará todo esse conhecimento em uma caixa e fechará a tampa. Porque quando você começar a digitar o código, não estará pensando em binário. Você não digita, não faz cálculos binários e realmente só pensa em bytes (grupos de 8 dígitos binários) em vez de bits (um dígito binário).

Trabalhar com binário é um trabalho superespecializado que a maioria dos programadores nunca fará — então eles fecham a tampa da caixa binária e se concentram em outras coisas. Usar matemática na programação é semelhante – pessoas que são boas nisso cuidarão da matemática para você e a colocarão em uma caixa chamada “função”.

Você pode espiar dentro da caixa e ver o que está acontecendo se quiser, mas não é necessário. Você apenas “chama” a função quando quiser usá-la. Digamos que você queira descobrir quantos caracteres há em uma sequência de texto – é preciso muito mais esforço para fazer um computador resolver isso do que um ser humano apenas olhando e contando “1, 2, 3”. Mas você não precisa pensar em tudo isso — basta chamar a função strlen() (comprimento da string) e ela fará a contagem para você. De qualquer forma, é assim que a função é chamada em C. Em Python é len() e em Java é length() . Linguagem diferente, palavras diferentes.

A questão é que a matemática é resolvida de uma forma ou de outra. Ele está escondido em funções e bibliotecas, e se você suspeitar que pode precisar de algo matemático para resolver seu problema, é prática padrão encontrar as informações online.

Se você realmente odeia números, também pode se limitar a uma programação de alto nível. Quanto mais alto o nível, mais longe você estará dos 1 e dos 0 e menos terá que pensar em matemática. Tudo isso para dizer: não deixe que a matemática o afaste da programação. Você pode evitá-lo enquanto codifica, assim como pode evitá-lo na vida!

De qualquer forma, li este livro sobre a história dos computadores . Aprendi tudo sobre esses matemáticos e o que eles alcançaram – sem entender nada sobre matemática em si, é claro – e me diverti muito.

Código: a linguagem oculta do hardware e software do computador

Código da capa do livro no idioma oculto.
Carlos Petzold

Em seguida, eu precisava ir um pouco mais direto ao assunto – o que significava ler o livro sobre como os computadores funcionam. Como eu disse antes, este livro pareceu um pouco assustador no início. É grande e detalhado – e não vou fingir que entendi cada palavra que li. Mas não chegamos a lugar nenhum deixando o “bom” ser inimigo do “perfeito”. Compreender 80% de um livro é muito melhor do que compreender 0% porque você decidiu não lê-lo.

Além disso, não foi tão ruim no final. Foi escrito de uma forma amigável, conversadora e bem-humorada, o que realmente ajuda a tornar as partes complicadas mais fáceis de serem lidas. Também possui um site com diagramas interativos e versões funcionais dos “minicomputadores” que ele faz ao longo do livro. E, o mais importante, não começa com coisas complicadas.

Nem começa com computadores – os primeiros capítulos cobrem alguns tópicos bastante aleatórios, como código Morse e braille. Ou, pelo menos, eles parecem aleatórios por um tempo, até que você se aprofunde e perceba que o Sr. Autor está lhe fornecendo sorrateiramente os conceitos que você precisará saber mais adiante no livro.

É definitivamente uma daquelas experiências do tipo “confiança no processo” – mas posso garantir que é um livro bem escrito e bem estruturado, e não importa o quão difícil seja para você, você ainda sairá sabendo mais sobre computadores do que jamais imaginou ser possível.

Quando terminar, você pode pegar outra caixa e colocar todas as informações dentro dela — porque não precisamos realmente pensar em “como um computador funciona” quando estamos codificando. No entanto, agora que você tem essas informações guardadas em algum lugar, às vezes elas serão úteis. Certos conceitos de programação naturalmente farão mais sentido para você e, quando o conhecimento for relevante para o que você está fazendo, ele aparecerá convenientemente pronto para uso.

E a melhor parte? Quando você iniciar seu curso de programação e ele começar a falar sobre binário — você já saberá o que é binário. O curso também lhe dará muitas informações novas, mas ter o contexto existente em sua cabeça ajudará as coisas a parecerem um pouco mais familiares e gerenciáveis. Isso ajudará você a se concentrar na programação, em vez de se distrair com cada novo conceito e se perguntar se precisa entendê-lo ou não.

De qualquer forma, foi assim que me senti, e estou tão mal construído para programar quanto humanamente possível. Fui péssimo em matemática na escola, estudei história e literatura inglesa na universidade, escrevo para viver, estudo japonês como hobby e, até recentemente, nunca tive um PC de mesa – e ainda assim está tudo indo bem. Se eu puder fazer isso, honestamente, qualquer um pode.