Como foi Programming Fundamentals na UoPeople

A pergunta mais comum, quando digo que estudo Ciência da Computação, é: “Qual linguagem de programação você aprende no curso?”. Normalmente assim, no singular, como se existisse uma linguagem única capaz de expressar tudo e construir qualquer tipo de programa. Perguntas desse tipo são frequentes e revelam o desconhecimento das pessoas a respeito da tecnologia que nos cerca. “Hoje em dia todo mundo deve aprender a programar”. “Saber programar é uma habilidade em alta demanda”. “Milhares de vagas foram abertas para programadores”. Essas frases estão por toda parte: conversas de bar, artigos de jornal, anúncios e ofertas de cursos online. Programar é o Santo Graal da modernidade, capaz de resolver todos os problemas do mundo e de quebra garantir aquele salário anual de seis dígitos.

Programming Fundamentals é o primeiro curso de programação para a maioria dos alunos da UoPeople. É possível fazer cursos que trabalham com programação antes dele, mas é em Fundamentals que a atividade de programar está no centro do curso. Ele é a base para basicamente todos os outros cursos de CS da universidade, e de também nos ajuda a entender as limitações da computação. Ele remove a aura sagrada em torno do tópico e revela a dura realidade do ato de programar.

Os objetivos do curso

Em Fundamentals entramos na história e no desenvolvimento das linguagens de programação. Aprendemos como planejar um programa, antes de efetivamente programá-lo, utilizando modelos conceituais como pseudo code e fluxogramas, que ajudam a aprimorar a lógica de um programa, sua funcionalidade e execução. Desenvolvemos programas básicos em Python, e, finalmente, discutimos as vantagens e desvantagens de certos paradigmas de programação.

A introdução do curso destaca a importância de entender profundamente os tópicos, e não apenas completar burocraticamente os exercícios. São conceitos que serão revisitados constantemente nos cursos adiante, assumindo que já sabemos os fundamentos apresentados em Programming Fundamentals. É o alicerce de toda a construção que está por vir.

Como se preparar

Apesar do curso ser introdutório, recomendo entender o que será abordado com antecedência. Neste caso, é importante preparar a mente para entrar no “modo programador”. É o que em inglês chamam de mindset. Para minha (e nossa) sorte, nosso colega Dan Fletcher (que já citei aqui anteriormente) fez uma ótima postagem com o “manual de sobrevivência” para o curso. Ele dá dicas práticas de como instalar Python, a importância do processo de debugging, o conceito de ler-pesquisar-perguntar (read-search-ask), e compartilha sites excelentes para praticar o que aprendemos.

Para os ansiosos, vale dar uma “folheada” no livro do curso, Think Python. A versão online é dinâmica, com linguagem simples e ilustrativa. Ela contém vários exercícios interativos e que podem ser executados diretamente no navegador.

A dinâmica do curso

A UoPeople é consistente na estrutura dos cursos. Todos possuem exercícios de discussão (discussion assignments), diários de aprendizado (learning journals), e provas de múltipla escolha (graded quiz). Em Programming Fundamentals a diferença está nos exercícios de redação (written assignments), que se tornam exercícios de programação (programming assignments).

Os tópicos abordados nos discussion assignments giram em torno de conceitos genéricos de programação, como linguagens compiladas/linguagens interpretadas, linguagens formais, linguagens naturais. A maioria dos temas não possuem uma resposta absoluta, o que encaixa muito bem no formato de debate proposto. Quem espera só escrever código pode se surpreender. Os conceitos apresentados em English Composition 1 e 2 serão úteis aqui, especialmente se o instrutor for rígido com a qualidade dos textos e o uso de citações e referência APA.

Os exercícios de programação exigem a criação de pequenos programas de cálculo, de interface simples com o usuário e manipulação de documentos/dados. Quem tem experiência prévia com programação, mesmo que básica, não terá dificuldades. Praticamente todos os exercícios exigem a criação de um modelo conceitual em pseudo code/flowchart, que deve ser submetido junto com o código em Python. É um trabalho adicional que pode torcer o nariz de alguns, mas é uma forma excelente de praticar como documentar adequadamente o programa e garantir que o código seja claro para a revisão de terceiros.

Por fim, os testes de múltipla escolha abordam o conteúdo do livro Think Python e sobre a história da computação. É aqui que a quantidade de conteúdo pode ficar pesada. O curso utiliza o livro de Roy A. Allan, “A History of the Personal Computer”. É uma obra extensa, um tanto desorganizada e desatualizada, que entra nos mínimos detalhes de cada época na evolução dos computadores. Para evitar se perder na quantidade de informação, recomendo fazer os self quiz antes de ler os capítulos de cada unidade. Anote apenas o que cai nos testes e passe “superficialmente” sobre o conteúdo restante.

Mesmo com todas as falhas, o livro de história abre bastante a cabeça para a complexidade por trás do longo desenvolvimento da computação. Ele mostra como evoluções no hardware contribuem para evoluções no software, e vice-versa. Reúne publicações históricas de cada década, fala sobre a computação amadora, empresas como Tandy/Radio Shack, Altair, Namco e Atari. Processadores como o Intel 8008. Personalidades como Ada Lovelace, Charles Babbage, John von Neumann, Claude Shannon, Nolan Bushnell e Toru Iwatani.

Resumão

Este é um curso que vai além de muitos cursos introdutórios de programação que vemos pela internet. Não pela qualidade técnica, mas pela abrangência. Ele não se resume a ensinar o uso de variáveis, funções, operadores lógicos, estruturas de looping, data structures e data types. Ele vai além, misturando história, conceitos de desenvolvimento de software e exercícios práticos.

A habilidade mais importante de um cientista da computação é a resolução de problemas”. Este é um paradigma que devemos manter durante todo o curso. Não se trata de aprender essa ou aquela linguagem, mas de internalizar a capacidade de resolver problemas de forma estruturada. “Programar é o processo de quebrar uma tarefa grande, complexa, em tarefas cada vez menores e suficientemente simples para serem realizadas por instruções computacionais básicas”. Aprendemos que a tarefa mais difícil ao desenvolver um programa é conceitualizar suas instruções de forma organizada. Programar é resolver um problema, é atender uma necessidade. O programa deve ter um propósito.

Para alguns o parágrafo acima pode soar óbvio, mas sei que para outros tantos não é. É comum esquecermos esses princípios. Muitos se distraem querendo saber qual linguagem será a mais popular, ou qual linguagem é “melhor”. Descobrimos que não há resposta absoluta, e que muitas respostas dependem do contexto e do problema. Manter isso em mente é o melhor caminho para sobreviver à Programming Fundamentals e manter o foco durante a longa jornada em busca do bacharelado em Ciência da Computação.

Como sempre, estou à disposição em caso de dúvidas. É só comentar ou entrar no grupo de estudantes no Facebook.