Instituto Federal de Mato Grosso do SulSetembro/2024

02. Apresentação da Disciplina
Algoritmos 2
Prof. Rodrigo Duran
Um pouco sobre mim ...
Nem tudo é trabalho também! Meus outros hobbiesEu jogo ativamente Overwatch (melhor Moira do BR), World of Warcraft (for the Horde! Azralon) e gosto de plastimodelismo e guitarras!
-
Formação Acadêmica
Bacharel em Ciência da Computação pela Universidade Estadual de Londrina (UEL), mestrado em Ciência da Computação pela Universidade de São Paulo (USP) e doutorado em Ciência da Computação pela Aalto University (Finlândia)
-
Atuação Profissional
Desenvolvedor de software (4 anos em automação residencial), desde 2011 professor do IFMS, campus Nova Andradina. Membro da comissão de educação da Sociedade Brasileira de Computação (SBC) (2019-?)
-
Atividades de Pesquisa e extensão
Eu pesquiso sobre Educação de Computação. Participo de feiras de ciências desde 2013. Meus alunos conseguiram alguns prêmios notáveis: 3o, 2o e 1o lugar na FEBRACE e duas vezes classificados para a ISEF (2014 em Los Angeles, e 2015 em Pittsburgh, USA); apresentações em congressos no Brasil e no exterior. Se você gosta de pesquisa entre em contato comigo!
1. Apresentação da Disciplina

Sobre o curso ...
Objetivos de aprendizagem...
No curso de Algoritmos 2 você vai aprender a integrar as diferentes habilidades da programação em JavaScript: ler programas de computador de forma correta e eficiente, criar seus próprios programas para atender necessidades contextualizadas, desenhar exemplos e simples casos de teste para verificar se seu programa atende os requisitos solicitados e, caso erros existam em seu programa, utilizar estratégias de debugO termo bug (inseto em Inglês) é frequentemente usado para indicar um problema ou malfuncionamento em um programa. Então, debug é a habilidade de sistematicamente investigar e remover esses problemas de um código. O termo bug se popularizou na ciência da computação em 1947 quando uma traça foi encontrada dentro do computador Mark II em Harvard, o que estava causando erros no programa sendo executado (lembre-se de que antigamente os computadores eram enormes!). para corrigir os erros.
Alguns dos conteúdos a serem integrados com essas habilidades são:
- Utilizar estruturas como arrays e listas;
- Utilizar e depois escrever suas próprias sub-rotinas (funções), incluindo como usar parâmetros e definir variáveis locais às suas sub-rotinas
- Identificar os diferentes tipos de escopo de variáveis em JavaScript;
- Utilizar repetição, tanto utilizando funções de alta ordem (Higher-Order Functions) quanto estruturas de laço (loops);
- Usar classes e objetos, incluindo definir as suas próprias classes e métodos; e finalmente aprender como manipular arquivos.
Nesse curso também serão trabalhadas suas atitudes em relação às habilidades de programação e os conteúdos da disciplina, além das suas habilidades socioemocionais dentro da disciplina e do curso técnico em informática como um todo.

Sobre o curso ...
Materiais Requeridos
Neste curso nós não utilizamos nenhum livro texto base. Os materiais disponibilizados online através desta página deverão ser suficientes para acompanhar o curso e possibilitar a realização das atividades.
Entretanto, como material suplementar de apoio, sugiro a consulta ao livro Eloquent JavaScript 3a edição (em Inglês) ou a 2a edição do mesmo livro, em Português.

Quando teremos nossas aulas?
Algoritmos 2 é uma disciplina de 100 horas/aula. Logo, teremos 5 aulas por semana, durante 20 semanas (teremos vários sábados para completar o calendário). Veja o calendário ao lado ...
Horário das aulas:
- Informática 2 A: Terça e quarta-feira das 13:00 as 14:30. Quarta-feira 10:55 as 11:40 (REMOTO)
- Informática 2 B: Terça-feira 14:30 as 16:10. Quarta-feira das 16:10 as 17:40. Quarta-feira 10:10 as 10:55 (REMOTO)
O horário de atendimento aos estudantes (PE) será feito todas as quintas-feiras das 09:00 às 11:40
Tecnologias Necessárias
-
Online REPL
Programas são escritos em uma linguagem de programação e depois executados em uma máquina. Para isso, precisamos de um local onde esses programas são inseridos e algo (um compilador ou interpretador) que execute esse programa. REPLs são interfaces de interação simplificadas de programação, muito úteis para trabalhar com programas curtos com entrada e saída. O Repl.it permite a criação rápida e sem necessidade de instalação de vários tipos de REPL, inclusive JavaScript. Eu criei uma REPL de demonstração que vamos usar durante as aulas do curso, crie a sua!
-
Comunicação
Nossa ferramenta principal de comunicação, tanto durante as aulas quanto fora delas será o WhatsApp. Nós teremos um grupo com as turmas de Informática A e B para avisos e para tirar dúvidas. Lembrem-se que este grupo é exclusivo para estudos portanto obedeçam as boas regras de convivência. Os grupos são os mesmos da disciplina de Algoritmos 1. Quem não possuir acesso, favor solicitar ao professor.
-
Atividades
Parte das atividades serão realizadas durante as aulas síncronas utilizando os quizzes do Zoom. As atividades assíncronas serão enviadas pelo Moodle no EAD do IFMS. Toda e qualquer atividade só será considerada entregue caso tenha sido enviada pelo Moodle!
-
Desenvolvimento
Além da REPL, usaremos também o VSCode como plataforma de desenvolvimento, principalmente quando não por possível utilizar serviços online. Você pode baixar gratuitamente o VSCode aqui.
Conduta Acadêmica
Como espero que vocês se comportem nesse curso:
- Respeite a humanidade de cada um. Todos nós temos vidas, lutas, medos e objetivos. Você é mais do que um estudante, eu sou mais do que um professor e seus colegas de classe mais do que colegas de classe. Comece cada conversa lembrando-se disso.
- Respeite as diferenças de cada um. Tecnologia é para pessoas e as pessoas são diferentes: aprenda sobre as diferentes perspectivas, experiências e ideias umas das outras.
- Foque no aprendizado, não em notas. Ter conhecimento e habilidades é o que o leva a cursos de graduação, estágios, empregos e pós-graduação. As notas são medidas imprecisas e estreitas do que você sabe e pode fazer, portanto, se focar apenas nas notas em vez de suas habilidades, você acabará com conhecimentos e habilidades restritos. Esse curso é a base para todo o técnico em informática. Lembre-se disso.
- Seja ativo. Faça perguntas, peça ajuda e busque experiência. Pode ser assustador admitir que você precisa de ajuda, mas espero que precise de ajuda. É assim que o aprendizado acontece.
- Seja confiante. Mesmo que você não acredite que pode aprender algo, eu acredito que você pode. Basta ter a instrução certa, a prática certa e o feedback certo. A maioria deles é meu trabalho, então se você está com dificuldades mesmo quando se empenha, provavelmente é minha culpa.
- Seja exigente. Eu quero que este curso seja ótimo. Se você não gosta de como está indo, me dê um feedback. A única maneira de melhorar é se você me disser o que está errado.
- Seja construtivo. Não apenas critique ideias; use seu conhecimento das limitações dessas ideias para torná-las melhores. Isso é especialmente importante quando você colabora com outras pessoas.
- Não engane. Diga a verdade, mesmo que seja difícil de compartilhar. Você não fez uma atividade? Admita, e vamos encontrar uma maneira de você concluir as futuras atribuições a tempo. Você não entende alguma coisa? Admita, e vamos ajudá-lo a entender. Você não quer aprender alguma coisa? Admita, e vamos encontrar uma maneira de torná-lo mais interessante para você.
Atividades e Notas
-
01. Avaliação presencial
No primeiro bimestre será realizada uma avavaliação presencial, individual, utilizando o computador.
Você terá uma nota no 1o bimestre.
Avaliação: 80% da sua nota do 1o bimestre é composta pela nota da avaliação.
-
02. Atividades Assíncronas
Todo tópico terá uma ou mais listas de atividades a ser realizada durante o período da aula ou no momento que vocês julgarem mais apropriado.
Você terá uma nota por lista de atividades e posteriormente uma média de notas das listas
Avaliação: 20% da sua nota final é composta pela média das listas de atividades.
-
03. Projetos
Durante o semestre serão apresentados dois projetos mais extensos (e.g., que durem mais de uma semana) que irão requerer mais esforço de vocês. Alguns projetos serão individuais, outros serão em grupo. Mais detalhes com a apresentação de cada projeto.
Você terá uma nota por projeto e posteriormente uma média de notas dos projetos.
Avaliação: 30% da sua nota final é composta pela média dos projetos no 1o bimestre. 80% da nota final no 2o bimestre.
Perguntas Frequentes - pg. 1
- Aluno(a)
-
Como posso tirar dúvidas fora da aula?
- Professor
-
Você pode postar a dúvida no nosso grupo do WhatsApp (lembre-se que a sua dúvida provavelmente é compartilhada com outras pessoas). Pode enviar sua dúvida por e-mail também: rodrigo.duran@ifms.edu.br. Participe dos PEs comigo e com os monitores da disciplina.
- Aluno(a)
-
Perdi a data de envio de uma atividade, posso enviar para você no WhatsApp/e-mail?
- Professor
-
Não! Todas as atividades devem estar no Moodle pois as pedagogas também verificam essas atividades e reportam aos seus responsáveis.
- Aluno(a)
-
Mas posso enviar a atividade após o prazo?
- Professor
-
Sim, mas a cada semana depois do prazo você perde 20% da nota dessa atividade ...
Perguntas Frequentes - pg. 2
- Aluno(a)
-
Professor, estou muito perdido no conteúdo, penso em desistir da disciplina
- Professor
-
Não! Converse comigo, podemos marcar aulas particulares para tirar as dúvidas. Todos podem e conseguem aprender a programar ! :)
- Aluno(a)
-
Minhas notas estão ruins, consigo recupear?
- Professor
-
Claro! A recuperação é feita em paralelo ao andamento do curso. O que importa é: ao fim do curso, você dominou os conceitos da disciplina? Se sim, considero aprovado.
- Aluno(a)
-
Posso consultar outros materiais nessa disciplina?
- Professor
-
Claro! Meu material é apenas uma sugestão! Só não copie as atividades de outras fontes, inclusive de colegas! Não tenho tolerância com cópias e vou fazer entrevistas para checar! Quem copiou e quem deixou copiar será zerado!
2. Avaliando Conhecimento Prévio
Autoavaliacão de compreensão de conceitos de programação
Esse instrumento (SEI)Esse instrumento foi desenvolvido por mim em 2019. Aqui apresentamos o instrumento e uma comparação com questionários de background, e aqui comparamos com outros testes. tem como objetivo avaliar o seu entendimento acerca da sua capacidade de compreender programas utilizando vários conceitos utilizados nos cursos introdutórios de programação. Por se tratar de um instrumento de autoavaliação, não existem respostas certas ou erradas, apenas a sua perspectiva.
Algumas definições úteis antes de preencher o instrumento (leia!):
- Sintaxe: São as regras que governam como as coisas são expressas em uma linguagem de programação. A sintaxe defines quais são as peças constituintes do código do programa e como o programador pode combiná-las. Sintaxe é de forma geral contrastada com a semântica do que essas peças significam.
- Semântica: os significados das expressões em uma linguagem de programação. Por exemplo, os comandos em JavaScript
x = x + 1
ex += 1
diferem sintaticamente, mas sua semântica é a mesma: cada um incrementa a variável x em um. - Trace: Trace ou Tracing significa simular a execução de um programa, em alguns momentos (dependendo da sua experiência) percorrendo o programa linha a linha, observando como as variáveis e fluxo de dados e controlem mudam conforme a execução do programa. Muitas atividades que pedem que você trace o código significa avaliar as entradas de dados e observando o comportamento do programa oferecer a saída resultante do programa. Você já pode ter ouvido esse conceito como teste de mesa.
- Valores concretos: são valores que podem ser inseridos como entrada em um determinado programa que será executado. Por exemplo,
a = 0
alimenta um valor concreto à variável a. Em contraste,a = prompt()
introduz um valor abstrato à variávela
, uma vez que a pode assumir qualquer valor durante a execução do programa. - Convenções de nomenclatura descritivas: quando as variáveis ou funções são nomeadas de forma que o objetivo ou significado dessas estruturas seja expresso pelo seu nome. Por exemplo,
let soma = a + b;
. Em contraste, convencões não significativas atribuem nomes genéricos:a = b / x;
Preenchendo o instrumento
Cada uma das linhas apresenta um conceito. Ao passar o cursor sobre os conceitos vocês podem ver exemplos desse conceito (em amarelo). Na primeira linha (em cinza escuro) da tabela são apresentados cada um dos níveis de proficiência: um por coluna - A0, A1, etc. Ao posicionar o cursor no nível você pode observar a descrição de cada nível (em verde).
Leia a descrição de todos os níveis. Você vai marcar (no formulário - veja a seguir) o nível que mais se adequa ao seu conhecimento prévio em um determinado conceito. Os níveis são cumulativos, ou seja, se você acha está no nível B1 ao compreender programas usando o conceito de variáveis, também significa que você é capaz de compreender programas usando o conceito de variáveis nos níveis A2, A1 e A0. Assinale um nível a cada um dos conceitos. Abaixo temos uma tabela com um exemplo de preenchimento. Quando estiver pronto você pode preencher o instrumento usando a tabela abaixo como guia.
A0 Eu não tenho familiaridade com esse conceito. |
A1 Em geral, eu sei o que esse conceito significa |
A2 Em geral, eu consigo reconhecer a sintaxe usada em JavaScript para representar esse conceito |
B1 Eu posso ler e trace código que usa esse conceito com poucos elementos. Eu consigo predizer o resultado de um código que usa esse conceito quando o código usa valores concretos e convenções de nomenclatura descritivas. |
B2 Eu posso ler e trace código que usa esse conceito com vários elementos diferentes. Eu consigo predizer o resultado de um código que usa esse conceito quando o código usa valores concretos e convenções de nomenclatura descritivas. |
C1 Na maioria das vezes eu consigo reconhecer padrões usando esse conceito em diferentes tipos de código mesmo quando as convenções de nomenclatura não são sempre descritivas. Eu sou capaz de compreender o propósitode comportamento de códigos que usam esse conceito usando uma grande quantidade de diferentes tipos de entradas. |
C2 Eu posso facilmente reconhecer padrões e explicar o comportamento de códigos que usam esse conceito mesmo quando as convenções de nomenclatura não são descritivas. Eu posso generalizar o propósito e comportamento de código usando este conceito mesmo quando este recebe um grande número de entradas diferentes. Eu sou capaz de resumir o propósito do código usando esse conceito em frases curtas. |
|
---|---|---|---|---|---|---|---|
Variáveis e atribuição
let a = 0;
|
|||||||
Entrada e saída
let ps = prompt("Enter passcode");
|
|||||||
Operadores aritméticos, lógicos e relacionais
2+2;
|
|||||||
Estruturas condicionais
if (1 + 1 == 2) {
|
|||||||
Loops ou repetição
let number = 0;
|
|||||||
Estruturas de dados como arrays ou listas
let listOfNumbers = [2, 3, 5, 7, 11];
|
|||||||
Funções ou métodos
const square = function(x) {
|
|||||||
Classes e objetos
function Rabbit(type) {
|
Questionário de avaliação de autoeficácia
Esse questionário tem algumas similaridades com o anterior, mas investiga alguns pontos sobre uma outra perspectiva.
Nesse questionário estamos investigando como você se julga capaz de executar diversas atividades relacionadas a vários aspectos da programação.
Novamente, é a sua perspectiva, então não existem respostas certas ou erradas, mas tente responder cada item com o máximo de suas capacidades.
O questionário consiste de 20 perguntas em 4 seções.