Aprenda Programação: Introdução
Créditos para a imagem: Imagem criada pelo autor usando o programa Spectacle.
Quero Começar a Programar
Ótimo! A vontade de aprender é extremamente importante.
As próximas entradas deste website contém material e teoria para se aprender a programar em qualquer linguagem de programação. Os exemplos fornecidos serão escritos nas linguagens Python, JavaScript, Lua e GDScript. Assim, você conhecerá linguagens que permitem criar programas para linha de comando, navegadores de Internet, e mesmo com interfaces gráficas de usuário.
Naturalmente, você pode escolher uma das linguagens anteriores ao invés de todas. O principal motivo de apresentar exemplos em diversas linguagens é demonstrar que o conhecimento adquirido é válido para outras linguagens além da primeira que você escolher.
De Que Preciso Saber para Começar?
Para programar, você precisa de dedicação, curiosidade, disciplina e perseverança. Gostar de desafios e de resolver problemas também é desejável. Você precisa de um computador, preferencialmente com acesso à Internet e com um teclado.
Só isso? Mas...
Eu...
Preciso ser especialista em Matemática?
Não. As quatro operações básicas (soma, subtração, multiplicação e divisão), resto de divisão ( tem resto 1), potenciação, e radiciação são suficientes para muitos problemas. Não é preciso calcular mentalmente. Se você consegue resolver problemas com uma calculadora, é suficiente. O computador fará as contas por você.
Evidentemente, problemas complexos podem requerer conhecimento específico. Matemática, Física, Biologia, Química, Filosofia, História... Todo conhecimento é bem-vindo para programação.
Preciso de um computador de última geração?
Não. Praticamente qualquer computador serve. A rigor, você poderia programar até em um smartphone ou tablet, embora eu não recomende para a prática profissional. Um teclado continua a ser importante e mais prático.
Preciso saber inglês?
É recomendável, mas não. Um dos objetivos deste website é fornecer material de alta qualidade em português sobre programação.
Preciso usar um sistema operacional específico?
Não. Na minha opinião, normalmente é mais fácil configurar ambientes de desenvolvimento em Linux, mas Windows e macOS também são bons sistemas. Após a configuração, as práticas deste material serão similares independentemente de sistema operacional.
Preciso gastar dinheiro com ferramentas para programação?
Não. Muitas ferramentas de desenvolvimento são software livre (free / libre software) e/ou de código aberto (open source). Elas são financeiramente grátis, embora você possa fazer doações para projetos de que goste.
Preciso ser especialista em Informática?
Não. Você sabe digitar, executar um programa, usar um navegador de Internet e instalar programas? Isso basta.
Não sabe instalar programas? Confira instalação de programas.
Não quer instalar programas? Este website fornece alguns ambientes online para algumas linguagens de programação (por exemplo, JavaScript, Lua e Python).
Precisa de um editor de texto? Confira editores de texto. Microsoft Word e LibreOffice Writer são processadores de texto, inadequados para programação.
Tem dúvidas de como acessar arquivos ou pastas (diretórios)? Confira gerenciadores e operações básicas de manipulação de arquivos.
Basicamente, a seqüência de entradas iniciada no primeiro tópico deste blog contém conceitos e operações necessários para programar. Entretanto, o material apresentado é mais completo do que o mínimo necessário para se começar.
Novamente, basta saber digitar, executar programas, usar um navegador de Internet e instalar alguns programas.
Sou muito velha ou velho; não nasci com computadores. Sou muito nova ou novo, não sei estou preparada ou preparado.
Programação não tem limite mínimo ou máximo de idade. Basta a vontade de aprender.
Tenho deficiência ou dores crônicas:
Baixa visão, ou sou cega ou cego:
Você sabe usar um leitor de tela e um teclado? Então você pode começar a programar.
O material deste site procura ser acessível à maior extensão possível de pessoas. Contudo, alguns recursos serão inerentemente inacessíveis (por exemplo, linguagens visuais), os quais peço desculpas antecipadamente. Os recursos não são fundamentais para o aprendizado, mas facilitariam o processo.
Caso o problema seja o uso do teclado, confira o próximo item.
Deficiência Motora, Lesão do Esforço Repetitivo (LER), Síndrome do Túnel Cárpico (STC) e tendinites:
Existem tecnologias assistivas para entrada por voz. Por exemplo, Caster.
Não tenho o dom; não sei se consigo, acho que é muito difícil; não entendo nada sobre computadores.
Todo início de atividade é difícil; programação não é exceção. Por isso a importância de dedicação, curiosidade, disciplina e perseverança.
Programação e desenvolvimento de software são atividades desafiadoras; mesmo profissionais duvidam das próprias habilidades de tempos em tempos.
Nunca desista sem tentar. A maioria dos problemas é solucionável com dedicação, tempo, estudo e pesquisa.
Os melhores programadores (homens e mulheres) não nasceram sabendo; eles continuam a aprender e melhorar a cada dia. Inclusive, a programação era dominada por mulheres em seus primórdios. Computadores não julgam. A única pessoa que pode limitar seu potencial é você mesma.
Atividades de programação são especialmente difíceis quando se começa, pois requerem uma forma diferente de pensar. O chamado pensamento computacional é próximo de pensar como uma combinação de cientista, escritor, inventor e artista. Pensamento computacional é uma habilidade que pode ser desenvolvida; este desenvolvimento será, doravante, seu objetivo.
Qual Linguagem Escolher?
Em teoria, praticamente qualquer linguagem de programação moderna existente. Você pode encontrar uma discussão mais detalhada na introdução sobre ambientes de desenvolvimento.
Na prática, as linguagens listadas no início desta página são boas opções. Assim, minha recomendação seria optar entre Python, Lua e/ou JavaScript. Não por acaso, as três linguagens farão parte dos exemplos deste material.
Para começar, escolha uma.
Para começar com JavaScript, basta um navegador de Internet (como Mozilla Firefox, Google Chrome ou Chromium, Microsoft Edge ou Apple Safari) e um editor de texto. Ou seja, você pode começar agora mesmo, caso esteja usando um navegador moderno em um computador (navegadores para dispositivos móveis como smartphones e tablets são mais limitados).
Para começar com Python ou Lua, basta instalar um Ambiente Integrado de Desenvolvimento (em inglês, Integrated Development Environment ou IDE) recomendado na respectiva página da linguagem para iniciar as atividades.
Para começar com JavaScript, Lua ou Python, você também pode usar um ambiente online para programação, criado pelo autor. Nesse caso, não é necessário instalar nenhum programa adicional; basta usar seu navegador.
Contudo, se qualquer linguagem basta para começar, por que fornecer exemplos em várias?
Linguagens de programação são ferramentas. Assim, minha recomendação é que você aprenda mais de uma, para poder escolher a mais adequada para a resolução do problema em questão. Afinal, não há razões para cavar um buraco com um martelo quando se pode usar uma pá.
Em particular, quando tiver experiência, procure conhecer diferentes paradigmas (modelos) para programação. Este material normalmente utilizará exemplos em paradigma procedural nos tópicos para iniciantes, para focar em conceitos aplicáveis a maioria das linguagens. Com prática, procure conhecer outros paradigmas, como orientação a objetos, declarativo, funcional e lógico. Um paradigma molda a forma de pensar na linguagem. Ou seja, conhecer diversos paradigmas contribui com alternativas para se pensar em um mesmo problema de formas diferentes. Você poderá usar paradigmas como lentes para auxiliar na resolução de problemas.
Quem É o Autor?
Você chegou a esta página; agradeço sua visita.
Quem, afinal, é o autor? A pergunta é pertinente. Pensamento crítico é fundamental neste século. Questionar a autoria de conteúdo é, pois, importante.
Você pode saber um pouco mais sobre minha formação nesta página. Em resumo, tenho graduação, mestrado e doutorado em Ciência da Computação, e publicação de alguns artigos científicos nacionais e internacionais. Meu projetos incluem motores, ferramentas e técnicas para desenvolvimento de jogos digitais (tanto por profissionais, quanto por pessoas que nunca programaram); jogos para educação e saúde; programação por usuários finais. Durante meu período na universidade, acompanhei mais de 15 alunos em atividades de iniciação científica, além de duas turmas de graduação.
Assim, este material reflete meu conhecimento e experiência (teórica e prática) em programação e desenvolvimento de software. Da minha (breve) experiência com ensino, identifiquei que estudantes querem criar projetos que sejam modernos e possam fazer uso de seus dispositivos. Algo que, de certa forma, entra em conflito com recursos para iniciantes.
O material é uma tentativa de ser aquele que eu gostaria de ter quando comecei a aprender a programar. Completo do ponto de vista teórico, centrado em fundamentos, aplicável profissionalmente, e prático, com exemplos e aplicações interativas. O material referencia documentação e manuais de linguagens de programação (para se aprender a obter a ajuda oficial), e alguns artigos externos, como recursos complementares (a Wikipedia pode não ser um recurso ideal para pesquisa acadêmica, mas pode ser ótimo como recurso introdutório e para oferecer visões gerais de conceitos). Entretanto, a tentativa de fornecer um material mais completo pode resultar em maior complexidade; assim, caso você identifique partes que estejam difíceis, confusas ou incorretas, entre em contato para que eu possa melhorá-las.
Além disso, a intenção é fornecer um material acessível e inclusivo. Quanto pertinente, tópicos comentarão sobre aspectos de acessibilidade e usabilidade. O intuito é permitir que mais pessoas possam criar e usar sistemas digitais, respeitando-se as habilidades de cada uma delas.
Aprender a Programar
Na primeira entrada deste blog, comentou-se que programação assemelha-se a magia. Assim como combinações de palavras mágicas resultam em feitiços, combinações de palavras especiais (chamadas de palavras reservadas) em programação com a criatividade e o engenho da programadora ou do programador resultam em aplicações (programas, aplicativos, ou apps) para computador.
O número de palavras reservadas em linguagens de programação tende a ser pequeno. Muitas palavras também são semelhantes em diversas linguagens, pois se referem a conceitos e fundamentos de programação. De fato, basta conhecer as principais para escrever código e programas em praticamente qualquer linguagem de programação.
Os tópicos anteriores ilustram a afirmação. Para cada ambiente de desenvolvimento descrito em entradas anteriores, a seção "Conhecendo Nome da Linguagem por Meio de Experimentação" apresentou algumas palavras reservadas importantes para programação (inclusive com alguns paradigmas diferentes).
Por exemplo, de paradigmas similares:
- Conhecendo JavaScript por Meio de Experimentação;
- Conhecendo Python por Meio de Experimentação;
- Conhecendo Lua por Meio de Experimentação;
- Conhecendo GDScript por Meio de Experimentação.
Deve-se notar que, mesmo sendo poucas, dificilmente uma pessoa iniciante conseguiria escrever qualquer programa de computador conhecendo apenas as palavras reservadas. Conhecer as palavras reservadas é uma condição necessária, porém insuficiente para programar em uma linguagem. Ela também é uma das condições menos importantes, pois é possível consultar a documentação para descobrir as palavras reservadas e comandos.
Como mencionado para JavaScript (e todas as outras linguagens em seção de título similar), conhecer palavras de um idioma (língua humana) não implicam em ter o conhecimento necessário para se escrever obras literárias.
A mesma comparação vale para outras atividades. Em particular, a culinária é um exemplo pertinente. Possuir ingredientes e equipamentos podem não ser suficientes para o preparo de um alimento (por exemplo, pão, bolo ou algo mais complexo). Por outro lado, após adquirir-se habilidades básicas, pode-se seguir receitas para preparar alimentos (simples ou complexos).
A culinária possui técnicas para, dentre outros: cortes, cozimentos, condimentação, conservação. A programação possui técnicas para, dentre outros: armazenamento, acesso e modificação de memória, aritmética, escolha, repetição, entrada e saída de dados.
A culinária possui equipamentos e instrumentos como facas, fornos e utensílios. A programação possui palavras reservadas, palavras-chave, e comandos para a implementação das técnicas, e bibliotecas de código pronto. Algumas dessas palavras foram apresentadas na seção de experimentação de cada linguagem. A hora de aprender sobre eles e a usá-los aproxima-se; antes, convém uma última comparação entre culinária e programação.
Algoritmos
Culinária e programação possuem mais um item em comum: receitas. Na culinária, uma receita oferece uma seqüência de passos para a realização de um preparo.
Mesmo sem experiência em programação, pode-se comparar, item a item, o código em cada uma das linguagens e notar-se semelhanças. Como comentado em introdução sobre ambientes de desenvolvimento, isso ocorre porque cada item implementa um mesmo algoritmo.
Um algoritmo é uma seqüência finita de passos para a resolução de um problema. Algoritmos não se restringem a programação. Matemática e Física são repletas de algoritmos, com fórmulas e equações aplicáveis para resolver problemas. Algumas fórmulas, inclusive, possuem o termo algoritmo no nome.
Algoritmos comumente definem (classes de) entradas esperadas e saídas calculadas. Pode-se pensar em um algoritmo como uma caixa preta, que realiza os processamentos necessários para converter a entrada na saída esperada (o resultado).
A magia da programação está na caixa preta. Em outras palavras, para se tornar uma maga ou mago digital, você deve construir caixas pretas. Em terminologia mais adequada, você construirá algoritmos.
Quando se pretende resolver um problema usando programação, deve-se construir um algoritmo para instruir a máquina de como fazê-lo. Algoritmos independem de linguagem de programação. A conversão de um algoritmo para uma linguagem de programação é chamada de implementação. A linguagem de programação é, pois, apenas um ferramenta para a implementação de um algoritmo. Aliás, se você está imaginando que é possível implementar algoritmos sem linguagens de programação, você está correto.
Se uma linguagem é a ferramenta (insuficiente para programar), mas o objetivo é construir algoritmos, existe um impasse. O que se deve aprender para programar?
Lógica de Programação, Pensamento Computacional e Pensamento Algorítmico
A resposta usual, porém insuficiente, é uma linguagem de programação. Respostas melhores são lógica de programação e pensamento algorítmico. Uma resposta mais completa é pensamento computacional. Mais especificamente, habilidades de pensamento computacional.
Pensamento computacional não é pensar como um computador (afinal, computadores não pensam), mas pensar como uma programadora ou um programador. Trata-se, idealmente, de um pensamento organizado, estruturado, pormenorizado e sem ambigüidades, formalizado em uma seqüência finita de passos (um algoritmo) que um computador possa executar. De forma geral, as atividades são sintetizadas como os Três As: Abstrair, Automatizar, Analisar. Eles relacionam-se com Quatro Cs: Comunicar-se, pensar Criticamente, Colaborar, Criar; algumas pessoas dizem que pensar Computacionalmente seria o Quinto C.
O pensamento computacional inclui atividades como:
- Abstração, representação e modelagem de dados;
- Modelagem de processos;
- Definição de fluxos para dados e processos.
A resolução de problemas usando pensamento computacional consiste em decompor problemas em partes menores, as quais computadores possam realizar operações simples para resolver. A máquina não resolve problemas por ela mesma; quem resolve problemas é a pessoa que comanda a máquina. A solução é expressa como um algoritmo, implementada em linguagem de programação como o código-fonte de um programa, executada como um programa.
Como artistas, programadores precisam de criatividade, inovação e prática. Como cientistas, programadores devem entender um problema, formular hipóteses, conceber tentativas de soluções, criar experimentos, testá-los. Se a tentativa de solução mostra-se uma solução correta, finita e repetível, ela constitui um algoritmo.
Pintores utilizam tinta e pincéis para expressar seus pensamentos e idéias em telas. Escritores utilizam palavras e lápis para a expressão de pensamento e idéias em papel. Matemáticos utilizam números, símbolos e operadores como partes de equações e expressões. Programadores utilizam palavras e recursos computacionais para comunicação com computadores. Eles fazem a máquina trabalhar por eles: pessoas fazem o trabalho intelectual, máquinas fazem o trabalho repetitivo.
Próximos Passos
Programação requer comunicação com a máquina. Comunicação depende de um vocabulário comum. Vocabulário é o conjunto de palavras de uma língua (idioma) ou de uma ciência. Léxico é o dicionário de uma língua.
A programação requer um vocabulário e regras sintáticas para determinar construções válidas para permitir que uma pessoa comunique-se uma máquina.
Os próximos tópicos apresentam conceitos e recursos básicos para programação, com o objetivo de introduzir lógica de programação e pensamento computacional.
- Introdução;
- Ponto de entrada e estrutura de programa;
- Saída (para console ou terminal);
- Tipos de dados;
- Variáveis e constantes;
- Entrada (para console ou terminal);
- Aritmética e Matemática básica;
- Operações relacionais e comparações;
- Operações lógicas e Álgebra Booleana;
- Estruturas de condição (ou condicionais ou de seleção);
- Subrotinas: funções e procedimentos;
- Estruturas de repetição (ou laços ou loops);
- Vetores (arrays), cadeias de caracteres (strings), coleções (collections) e estruturas de dados;
- Registros (structs ou records);
- Arquivos e serialização (serialization ou marshalling);
- Bibliotecas;
- Entrada em linha de comando;
- Operações bit-a-bit (bitwise operations);
- Testes e depuração.
O material não assume experiência prévia com programação. Os exemplos de implementação para cada tópico serão escritos em JavaScript, Python, Lua e GDScript (Godot Engine).
Sua jornada para se tornar desenvolvedora ou desenvolvedor de software está em progresso.