2. Sobre …

"Não é o destino, mas a jornada que importa."

Ralph Waldo Emerson? Lynn H. Hough? Aerosmith? Anônimo?

Hoje é difícil imaginar alguma atividade humana que não tenha sido impactada pelos avanços em computação. Seus impactos são tão notáveis que não precisamos ir longe para perceber seus efeitos, que para o bem ou para o mal, vem transformando comportamentos pessoais, sociais e criando novos comportamentos. A começar talvez pelos dispositivos móveis como os telefones celulares 📱 com seus inúmeros programas, atualmente chamados de aplicativos. Esse exemplo de computação móvel mostra que um dispositivo atualmente comum, como um telefone, ao se tornar digital e conectado à Internet, se transforma em vários aparelhos. Por ser programável, a flexibilidade e utilidade desses dispositivos aumenta a cada nova aplicação que instalamos nessa coisa, ou seja, a coisa original, o telefone 📱, se transforma em uma agenda 📆, em uma tv 📺, em um vídeo game 🎮, em um tradutor, dentre várias outras coisas.

Uma outra tecnologia que começa a ser notada a nível pessoal é a Internet das Coisas ou IoT (do inglês Internet of Things). A IoT vem permitindo que coisas se tornem mais inteligentes, desde uma lâmpada que pode ser controlada remotamente pela Internet, até a integração de “coisas” em toda uma cidade. Dessa forma, as cidades inteligentes 🏙️ poderão otimizar melhor seus recursos, como por exemplo melhoria no trânsito, maior conservação de energia e redução de poluentes.

À medida que mais coisas, aparelhos ou dispositivos se tornam digitais, conectadas à Internet e programáveis, abrem-se um grande número de novas oportunidades de uso, tanto de coisas agindo individualmente, quanto coisas agindo em conjunto com outras coisas. Você provavelmente já faz uso de muitas dessas coisas. 😲

Essas transformações são possíveis pois a computação nos ajuda a resolver de maneira extremamente rápida certos tipos de problemas que vamos chamar de problemas computacionais. Com tamanho impacto sobre nossas vidas 👧🏾 🧑🏽 🧒🏻 👧🏻 🧒🏿 🧑 🧑🏿 🧒, fazer todo esforço possível para entender um pouco do que trata computação com seus programas e os seus tão famosos algoritmos poderá lhe ser útil, tanto profissionalmente como também para desenvolver seu pensamento crítico, questionando qualquer coisa e todas as coisas. Alias, o pensamento crítico 🤔 é imprescindível para absolutamente tudo 🥇!

Um possível primeiro passo para se aprender computação é praticar a programação. Este texto apresenta alguns possíveis roteiros de passeios pelo reino da programação. Na metáfora de Passeios por programação, os pontos turísticos a serem visitados serão os problemas propostos ao longo de nossas andanças. Há uma variedade muito grande de possíveis caminhos que podem ser seguidos até chegar a uma solução. Ao longo de cada caminho veremos paisagens diferentes e interessantes. A escolha dos caminhos a serem visitados em cada passeio e a ordem dos destinos turísticos foi feita baseada na experiência das várias pessoas que, ao longo de muitos anos, foram as culpadas pelo oferecimento das disciplinas de Introdução a Computação e de Princípios de Desenvolvimento de Algoritmos do DCC-IME-USP.

Como em todo passeio, os destinos nos indicam as direções a serem seguidas. Cada passeio é apenas uma forma possível de chegarmos ao destino. Em geral, há vários passeios que nos levam ao mesmo destino. Por exemplo, há passeios que são mais bonitos, outros mais árduos e alguns com atalhos que podem nos levar ao destino mais rapidamente. Neste texto os destinos serão os problemas propostos e os passeios serão possíveis maneiras de resolvermos os problemas. Ao longo da construção das soluções as paisagens que veremos são as ideias ou técnicas desenvolvidas, o que faz com que o caminho seja tão relevante ou até muitas vezes mais relevante que o próprio destino.

O ato de programar consiste em prepararmos uma redação que descreve um passo a passo de como um problema pode ser resolvido por um computador. Essas redações são os programas e a linguagens utilizadas são as linguagens de programação. Enxergamos a linguagem de programação apenas como uma ferramenta didática e, apesar de ser um bônus concreto de aprendizagem que esperamos lhe seja muito útil, o objetivo central é que você desenvolva um raciocínio aplicado na formulação e resolução de problemas computacionais. Neste texto os programas serão escritos na linguagem de programação Python.

Como outras linguagens modernas, a linguagem Python oferece várias ferramentas prontas, as funções nativas e módulos, que a tornam muito efetiva para escrevermos programas compactos. Apesar do domínio da linguagem e dessas ferramentas ser fundamental para um programador efetivo, nesse texto, ao menos em um primeiro momento, utilizaremos apenas um subconjunto bem limitado dos recursos de Python. Tudo isso com o objetivo de nos concentrarmos no desenvolvimento do raciocínio aplicado na formulação e resolução de problemas.

Se você já sabe programar e o seu interesse é Python sugerimos que você consulte a própria documentação do Python. Nessa página há um Guia para Iniciantes, inclusive informações em português.

A abordagem adotada para desenvolver sua habilidade de resolver problemas computacionais será uma forte base conceitual e experiência com problemas inicialmente simples e cada vez mais complexos. A resolução de um problema passa pelo seu entendimento e conceituação, estruturação do problema em problemas menores e mais simples de serem tratados, busca de alternativas de solução que considerem aspectos de desempenho, definição de formas adequadas para a representação das informações, definição de casos de teste etc., até chegarmos, idealmente, em um programa correto, eficaz e bem documentado.

Cada novo problema traz novos desafios que, para serem transpostos, nos levarão a novas ideias e novas práticas de programação. Ao longo da disciplina, frequentemente veremos que algumas soluções já foram implementadas em Python, as vezes na forma de um comando nativo ou integrante de algum módulo, outras vezes disponíveis na Internet e que podem ser facilmente encontradas usado algum mecanismo de busca ou ainda consultando um chatbot de inteligência artificial. Para que esses problemas e exercícios sejam efetivos no desenvolvimento de seu raciocínio, sugerimos que você primeiro procure chegar a uma solução por si mesma ou por si mesmo. Procure por ajuda ou uma solução pronta somente depois de pensar individualmente. Afinal, não se trata de chegar a uma resposta, o importante é o que aprendemos no caminho, inclusive, ou principalmente, com nossos erros. Como dizem, a jornada pode ser mais relevante que o destino. Hmm, 🤔 a bem da verdade, ao longo dos anos não convencemos muitas pessoas sobre esse ponto de vista… 😫

Também por esse motivo, idealmente, as suas soluções devem procurar utilizar apenas os recursos elementares que estão sendo trabalhos no momento, justamente para treinar o uso desses conceitos. Sem essa restrição, muitas e muitos estudantes gastam mais tempo procurando um comando mágico que resolva o problema em vez de focar no problema. Escute o que o problema tem a dizer, pense, e procure desenvolver sua própria solução.

Depois de vários passeios, gostaríamos que você adquirisse uma certa habilidade para resolver problemas computacionais utilizando recursos simples do Python, mas disponíveis na maioria das linguagens de programação, como C, C++, Java etc. Esperemos que, desta forma, resolver problemas utilizando outras linguagens seja uma tarefa mais simples, mais natural.

Perdoe-nos por insistir… 🙄 Esse não é um texto sobre Python. Nosso objetivo é mais fundamental e muito mais ambicioso. Desejamos que você adquira a capacidade de resolver problemas computacionais, independente da linguagem usada para programar suas soluções. A programação junto com a capacidade de executarmos nossos programas em uma máquina se torna uma poderosa ferramenta de exploração pois, quando expressamos nossas ideias como programas, nós as tornamos testáveis. 🤔 Quando procuramos e corrigimos os erros nos nossos programas, estamos procurando e corrigindo erros nos nossos pensamentos. 😔

Em tempo… a ciência da computação vai além da programação. 😮 Como ciência, ela estuda os fundamentos teóricos da informação, dos dados, da transformação dos dados e as considerações práticas para aplicar essa teoria em sistemas computacionais. Por exemplo, estudar formas para representar diferentes tipos de dados e algoritmos eficazes para manipular esses dados. O estudo dessas estruturas e algoritmos é uma excelente forma de desenvolvermos um raciocínio computacional, algo parecido com estudarmos partidas entre grandes mestres de xadrez para aprendermos a ser uma melhor jogadora de xadrez.

2.1. Pensamentos

"O pensamento crítico é ter o desejo de buscar, a paciência para duvidar,
o empenho para meditar, a lentidão para afirmar, a disposição para considerar,
o cuidado para ordenar e o ódio por qualquer tipo de impostura."

Francis Bacon

Frequentemente, em um ou outro passeio no texto, apelaremos para alguns dos assuntos e ideias apresentadas aqui. No momento, o que está escrito aqui pode parecer viajar na maionese 🤦🏾‍♂️ 🤦🏼‍♀️ Com o tempo, a medida que você ganhar experiência, perceberá que faz sentido. Pelo menos é nisso que acreditamos. Vamos em frente. ▶️

A construção das habilidades cada vez mais complexas só se tornam sólidas quando apoiadas em outras habilidades sólidas e já bem fundamentadas. Por isso muitos exercícios que você verá nesse curso são para desenvolver ferramentas e recursos antes de aplicá-las, para exercitar as ideias, mesmo quando alguns desses recursos já estejam “prontos” e disponíveis na linguagem. Ao exercitar o pensamento para remover a mágica 🧙🏿 🧙🏼 desses recursos, você aprofunda seu conhecimento e amplia sua competência.

Nosso objetivo principal é desenvolver um certo pensamento ou raciocínio aplicado na formulação e resolução de problemas computacionais. Frequentemente é possível identificar alguns dos seguintes componentes nesse raciocínio 🤔:

  • decomposição: quebrar um problema complexo em subproblemas que sejam idealmente mais simples;
  • reconhecimento de padrões: buscar similaridades entre os subproblemas que permitam que estes sejam resolvidos de formas semelhantes;
  • representação dos dados: determinar as características do problema necessárias para sua solução; e
  • algoritmos: roteiro ou sequência de passos para resolver o problema.

Em particular, quebrar um problema em subproblemas mais simples e a procura de similaridades não são estratégias somente utilizadas em programação. Essas são rotinas aplicadas por todas e todos na solução diária de problemas de diversas origens. A criatividade de cada uma e cada um nos leva muitas vezes a soluções muito engenhosas.

Não se trata de acertar ou errar 😧. Se trata de nos tornarmos melhores pensadores. Para treinar nosso pensamento 🤔 começaremos sempre da análise e compreensão de um problema. Passaremos à construção de um roteiro para sua solução. Esse roteiro ou script é o nosso programa que, ao ser executado em um computador, nos leva a uma solução.

Tipicamente, as melhores soluções de um problemas são resultado de um profundo conhecimento do problema e de uma certa experiência com as ferramentas usadas para construir as soluções, além, é claro, de um pouco de criatividade. Veremos que, em muitos casos, nossas soluções são incorretas 😐 por falta de conhecimento do problema ou uso incorreto das ferramentas.

Para quem nunca programou, perceber certos detalhes não é fácil. Muitas vezes diferenciar o que é relevante do que é irrelevante nós impede de entender um problema, ou enxergar uma solução, ou ainda ver um erro na nossa tentativa de solução. Por isso, desde já, pedimos sua atenção e paciência para que possamos estender sua habilidade de leitura de textos para a de leitura de programas.

Um dos primeiros fundamentos que vamos treinar é procurar entender o que está escrito, como leitores pensando se o que está escrito resolve o problema, para que, em seguida, possamos passar ao papel de escritores ou criadores de soluções. Frequentemente escrevemos blá, quando queríamos escrever blá-blá e deveríamos ter escrito blá-blá-blá. Confuso 😵‍💫?! Vejamos um exemplo.

Considere as palavras "casa", "CASA", "cASa" e "CasA". Essas quatro palavras não são exatamente as mesmas, apesar de representarem a mesma ideia 🏠. Cada uma delas tem uma combinação diferente de letras maiúsculas e minúsculas e por essa razão são consideradas diferentes em programação; pelo menos frequentemente. Considere agora o problema de colocar essas palavras em ordem alfabética crescente. Nessa ordem as letras maiúsculas têm precedência, devem vir antes, das letras minúsculas. Isso significa que, por exemplo, palavras que se iniciam com "A" devem vir antes de palavras que se iniciam com "a". De maneira semelhante, palavras em que a primeira letra é "B" devem preceder aquelas que iniciam com "b". "C" deve aparecer antes de "c", … Portanto, em uma lista de palavras ordenadas alfabeticamente, uma palavra ou sequência de letras, como "aBa" deve aparecer antes de uma palavra como "aba".

Em qual das opções a seguir as palavras "casa", "CASA", "cASa" e "CasA" estão em ordem crescente?

  • "casa", "CASA", "cASa", "CasA"
  • "casa", "cASa", "Casa", "CASA"
  • "CASA", "Casa", "casa", "casa"
  • "CASA", "casa", "Casa", "casa"

Em uma próxima oportunidade veremos como utilizar a linguagem Python para determinar essa ordenação.

This work is licensed under a Creative Commons Attribution-NonCommercial 2.5 License.

Fig. 2.1 Wikipedia: O Pensador no Jardim do Museu Rodin, Paris.

2.2. Design

A palavra design é usada (abusada?) por diferentes áreas do conhecimento. Neste texto, vamos usar design para indicar o processo que envolve um pouco de arte, de ciência, de técnica, de experiência, de criatividade, de exploração de alternativas etc., na busca de uma solução algorítmica para um problema computacional.

O processo de design se inicia pelo entendimento do problema. Muitos dos problemas que veremos possuem uma entrada e saída bem definidos. Isso facilita o design pois nos permite focar em processos que transformam os dados de entrada na saída, solução almejada. Como, em geral, há vários processos distintos possíveis que levam ao resultado correto, trabalharemos com o conceito de eficiência computacional para medir o uso de recursos, como tempo e memória, necessários para executar cada algoritmo e, assim, poder comparar soluções distintas.

A escolha e definição do algoritmo a ser implementado, codificado usando Python, é o objetivo do design. Usaremos a palavra algoritmo para indicar uma sequência lógica das etapas que conduzem ao resultado correto. Os algoritmos são tipicamente hierárquicos, cada etapa pode ser descrita com um nível de detalhes diferente.

Uma forma comum para desenvolver um algoritmo é conhecido como top-down, de cima para baixo, do mais complexo ao mais simples. Para pensar de forma top-down começamos desenhando a solução usando “módulos grandes” e vamos decompondo cada “módulo” até ficar claro que sabemos codificar aquele módulo.

Algumas vezes é possível chegar na solução de forma bottom-up, de baixo para cima, do mais simples ao mais complexo. Costumamos pensar desse jeito quando sabemos resolver certos pedaços e queremos usar esses pedaços na solução. Ao usar essa forma de pensamento, tome muito cuidado para que esse desejo não se torne obsessão pois, muitas vezes, forçar o uso de algum pedaço pode conduzi-lo a um caminho errado 🤕. Procure manter a mente 🧠 e olhos 👁️ abertos a novas alternativas 👍🏾.

Um outro problema comum que encontramos em programadores menos experientes, mas que acontece com programadores experientes também é a empolgação por um certo design que foge do problema. Talvez porque algumas vezes a gente se apaixona por certas ideias, seja pela beleza, elegância, criatividade etc, que torna difícil abandoná-las. Por isso os testes são fundamentais para nos manter com os pés no chão e no caminho correto.

Para você que é programador iniciante no entanto, o maior desafio está na codificação, transformação de uma ideia ou algoritmo em código. Para vencer esse desafio vamos codificar bastante para que a sintaxe da linguagem Python se torne natural, e vamos também fazer exercícios usando as ferramentas de programação como o editor, o terminal, o depurador etc, que constituem o IDE.

2.3. Python

Há várias razões para termos escolhido um veículo como a linguagem Python para fazermos os nossos passeios.

Python pode ser instalado facilmente em várias plataformas como Linux, Window, Mac OS e Android. Mesmo aquelas e aqueles que não gostam de uma aventura nova como a de instalar um ambiente de programação pode utilizar Python pela Internet utilizando ferramentas como Google Colab, Replit, ou Trinket. Em particular, neste texto vamos utilizar o Trinket para executar programas, mas isto fica para daqui a pouco.

Outra razão para a escolha de Python foi a disponibilidade de consoles. Esses consoles são ambientes interativo que nos permite conversar em Python diretamente com o computador, como o IPython Shell. Testemunharemos ao longo dos passeios que essas conversas são extremamente convenientes e úteis para o aprendizado de programação. Por exemplo você pode pedir para executar trechos pequenos de código para testar algumas ideias e sanar, rapidamente, dúvidas sobre o comportamento de algum comando ou o resultado de algum cálculo.

Há ainda visualizadores muitos bacanas para Python que nos permite ver o programa sendo executado passo a passo e o resultado produzido.

Python tem uma sintaxe relativamente simples e que força a escrita de programas estruturados de forma a facilitar a visualização da solução, identificação de nossos erros e suas correções. A linguagem oferece também uma ampla variedade de módulos que a tornam muito poderosa, facilitando o desenvolvimento de software para várias áreas do conhecimento como matemática, estatística, processamento de sinais, aprendizagem de máquina e inteligência artificial, entre outras.

2.4. Interatividade

Conversemos um pouco sobre os chamados recursos interativos neste texto.

Há alguns anos colaboramos na tradução do inglês para o português dos livros interativos Como Pensar como um Cientista da Computação - Aprendendo com Python e Resolução de Problemas com Algoritmos e Estruturas de Dados usando Python. Por interatividade entenda-se que é possível executar trechos de programas ou mesmo executar programas diretamente no navegador, dentro do próprio texto. Esses livros foram concebidos no projeto Runestone.

Dessa experiência, surgiu a ideia de produzirmos textos interativos em português seguindo o espírito das disciplinas Introdução à Computação e Princípios de Desenvolvimento de Algoritmos do DCC-IME-USP. A interatividade neste texto é totalmente inspirada no projeto Runestone e é devida ao uso de várias ferramentas que passamos a descrever. Esperamos que a interatividade contribua de forma mais efetiva para o desenvolvimento de seu raciocínio computacional pois combinam, em um mesmo lugar, trechos breves de teoria e prática que acompanham e reforçam os conceitos e ideias trabalhadas.

O texto foi escrito no formato reStructured Text (reST) e transformado para HTML pelo Sphinx. A seguir vamos mostrar a interatividade oferecida pelos consoles de execução de programas usados nesse livro. Tudo que está até o final desta seção é apenas um aperitivo do que veremos em todo o texto, não se preocupe que os detalhes, a menos quando dissermos que é para se preocupar com o detalhes 🙂.

2.4.1. Console

Chamamos de console ou de shell uma janela em que podemos inserir comandos, um por vez, e visualizar os seus resultados. Funciona de maneira semelhante a uma calculadora. Este texto usa o console IPython que você acessa diretamente em seu próprio navegador.

Veja a seguir um exemplo do IPython sendo usado para determinar a soma de 3 e 5 e a diferença de 2 e 7. Depois de In [x]: colocamos o nosso comando e seguindo Out[x]: o console nos mostra o resultado do comando, em que x é um número inteiro que indica o número de comandos executados até aquele momento.

Python 3.9.13 (main, Aug 25 2022, 23:26:10)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.31.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: 3 + 5
Out[1]: 8

In [2]: 2 - 7
Out[2]: -5

O IPython usado neste texto é proveniente do PythonAnywhere, que é um ambiente online de desenvolvimento integrado hospedado na Web. Prove esse recurso interativamente no seu navegador realizando alguns cálculos na janela abaixo. Antes de mais nada, clique na janela. Por exemplo, para somar 3 e 5 digite 3 + 5 e em seguida tecle Enter. O Enter ao final indica que terminamos o comando e que passamos a bola para que o IPython execute o comando e exiba o resultado.

2.4.2. Execução

Para executar os programas em Python no navegador usaremos o Trinket.io, que por sua vez se apoia no Skulpt. O Trinket permite que você desenvolva e execute os programas no próprio navegador. Por exemplo, para executar o programa que está na janela abaixo clique no botão com rótulo Run com a figura, ou ícone, de um triângulo com uma ponta para a direita. Assim que o programa começar a ser executado você verá que, onde aparecia Run, agora você vê Stop depois do ícone de um quadrado ⬛ Se você desejar parar a execução do programa clique no botão Stop. Quando o programa chegar ao seu final, termina de ser executado, o botão com o ícone de um triângulo que representa uma tecla Play voltará a aparecer.

Uma coisa muito bacana com ferramentas como o Trinket é que podemos alterar o programa na janela, ou mesmo escrever um novo programa nessa janela, e executá-lo. Só por diversão, clique na janela e dirija o seu cursor até o número 90 na linha 6. Troque o número 90 por 180 e execute o programa novamente. Você nota alguma diferença no resultado? 🤔

2.4.3. Um passo por vez

Nossa opinião é suspeita, mas … outra característica muito bacana da interatividade do texto é que nos ajudará a seguir os passos do interpretador Python durante o seu passeio pelo nosso programa. Poderemos ver as pegadas, os efeitos, deixadas por cada passo.

Veremos os programas sendo executados um passo por vez graças ao visualizador do Computer Science Circle (cscircle). Esse visualizador faz seu serviço utilizando o Python Tutor que implementa um ideia muita legal. Provaremos um pouco desse visualizador na janela logo a seguir.

A maneira que devemos entender a visualização é a seguinte. O visualizador sempre ilumina a linha do programa que está prestes a ser executada. O que estamos chamando de iluminação é o efeito parecido com o produzido ao passarmos um marcador de textos amarelo na linha. Para tentar deixar as ideias mais claras, vamos nos concentrar no programa na janela abaixo.

Na janela, inicialmente, a linha 1 que contém um print("Um") será a primeira a ser executada. Por essa razão ela está iluminada. Para que a instrução na linha iluminado seja executada, clique no botão Forward >. Esse Forward >> significa algo como vá para frente ou dê um passo ou anda logo ou execute a instrução. Clique nesse botão é verifique que o efeito produzido será:

  • a linha 2 passará a ser a iluminada, já que ela passará a ser a bola da vez; e
  • na janela com rótulo Program output, saída do programa, veremos Um escrito.

Clicando mais uma vez no botão Forward > a execução do programa dará mais uma passo, executando a instrução na linha 2. O vizualizador:

  • iluminará a próxima linha a ser executada; e
  • escrevará a palavra passo na janela Program output.

Clicando mais algumas vezes em Forward > chegaremos ao final do programa. Se desejarmos que a execução de um passo para trás basta clicarmos no botão < Back. Se quisermos ir direto para o final da execução do programa clicamos em Last >>. Finalmente, para voltarmos a execução para o seu início, clicamos em << First. Brinque um pouco clicando nesses botões e observe os resultados até entender o comportamento geral deles.

Mais uma funcionalidade muito útil do visualizador é que, se desejarmos, podemos alterar o programa sendo visualizado. Para isso basta clicarmos em Edit code, edite o código, e passaremos a ver o programa na janela:

Agora podemos alterar o programa e assistir a execução desse programa alterado clicando no botão Vizualize Execution. Dá hora, né?! 👍🏿 👍🏻 👍🏽

2.5. Outros roteiros

Para aquelas e aqueles que preferem acompanhar vídeos, dentre os vários excelentes cursos que há pela internet, não podemos deixar de mencionar pelos menos dois cursos em português:

Há vários ótimos livros de introdução à programação. Alguns exemplos dos quais buscamos constante inspiração são:

Há muito mais material disponível, tanto impresso quanto online. Mas assim como é improvável aprender a andar de bicicleta apenas estudando livros, desenvolver um raciocínio computacional exige muita prática na resolução de exercícios. Sabemos que, para alguns alunos e algumas alunas, esse processo pode ser longo e cheio de desafios. Esse material foi desenvolvido com esses alunos e alunas em mente e esperamos que lhes possa ajudar na superação desses desafios.

2.6. O que é…

Aqui vai um lista de termos que usamos nesse capítulo e os seus significados.

acrônimo
Acrônimo é uma palavra formada pela inicial ou por mais de uma letra de cada um dos segmentos sucessivos de uma locução. Por exemplo, IoT é um acrônimo de Internet of Things.
algoritmo
algoritmo é uma estratégia, roteiro ou sequência de passos para resolver um problema
design
design é o processo que envolve arte, ciência, técnica, experiência, criatividade, de exploração de alternativas etc, na busca de uma solução algorítmica para um problema computacional
Google Colab
Colab é um ambiente de programação em que pode utilizar Python através navegador.
IoT
IoT é um acrônimo para Internet das Coisas, do inglês Internet of Things
IPython
IPython é um console ou shell onde podemos executar comandos e ver seu resultados.
linguagem de programação
Linguagem de programa é a linguagem usada para escrever programas
precedência
Precedência indica uma ordem dos elementos um conjunto. O conjunto pode ser de instruções em uma expressão.
programa
Programa é um roteiro escrito em linguagem de programação que descreve as operações que um computador ou outra máquina deve realizar para solucionar um problema.
Python
Python é a linguagem de programação que é usada neste texto.
PythonAnywhere
PythonAnywhere é o ambiente online usado neste texto para exibir janelas do IPython
Python Tutor
Python Tutor ferramenta utilizada para visualizar a execução de scripts em Python
Replit
Replit um ambiente de programação em que podemos utilizar Python através do navegador.
Runestone
Runestone é um projeto que tem como objetivo democratizar os livros didáticos para o século XXI.
script
Script é o mesmo que programa. Normalmente chamamos de scripts os programas escritos em uma linguagem interpretada como Python.
Trinket
Trinket um ambiente de programação pode utilizar Python através do seu navegador. Este texto usa este ambiente.
visualizador
Visualizador é a ferramenta que permite que acompanhemos a execução de um script em Python passo a passo, instrução a instrução, linha a linha.

"A última coisa que se descobre ao escrever um texto é o que colocar primeiro."

Thomas Stearns Eliot