;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Logo Pagbenk Seu dinheiro rende mais
Topo

Curso da Universidade Harvard é oferecido de graça, online e em português

Universidade Harvard, nos EUA, é uma das melhores do mundo - Getty Images
Universidade Harvard, nos EUA, é uma das melhores do mundo Imagem: Getty Images

Do Estudar Fora*

29/05/2022 04h00

A Fundação Estudar atualizou e disponibilizou gratuitamente o curso mais popular da Universidade Harvard: o CC50 de introdução à ciência da computação. O curso completou 10 anos em 2021 e ganhou uma nova versão em alta resolução com as atualizações que surgiram nos últimos tempos. As aulas estão disponíveis gratuitamente com legendas em português.

Além das atualizações de conteúdo e formato, o programa ganhou uma expansão e sua duração ou de 10 para 11 semanas. Agora, as aulas estão disponíveis no ambiente de desenvolvimento próprio do curso de Harvard original. O nome CC50 é a tradução do original "CS50", mas com foco no público falante de português.

O curso pode ser uma ótima oportunidade tanto para quem quer começar uma carreira em tecnologia, seja quem está entrando na universidade ou pensa em mudar de carreira, quanto para aqueles que gostariam de aprender um pouco sobre programação.

O que o curso CC50 ensina?

O CC50 é voltado para pessoas sem conhecimento prévio, mas que querem aprender sobre Ciências da Computação. Nas aulas, o aluno aprenderá conceitos básicos de computação e internet, como programação, algoritmos, desenvolvimento de projetos, além de ter o a uma comunidade de estudantes de diferentes níveis de experiência na área.

As aulas são ministradas pelos professores:

  • David J. Malan, professor de Práticas de Ciência da Computação e membro da Faculdade de Educação na Universidade Harvard, criador do curso CS50;
  • Doug Lloyd, professor de Ciência da Computação na Divisão de Educação Contínua na Universidade Harvard;
  • e Brian Yu, professor em Ciência da Computação na Divisão de Educação Contínua na Universidade Harvard.

Como são as aulas do CC50?

  • 25h de aulas em vídeo com teoria e estudo de caso;
  • Introdução à Programação e à Ciência da Computação;
  • Como pensar algoritmicamente e resolver problemas de programação de forma eficiente;
  • Familiaridade com linguagens de programação, como C, Phyton, SQL e Java Script, além de CSS e HTML;
  • Conceitos de algoritmos, estruturas de dados, abstração, encapsulamento, gerenciamento de recursos, segurança, engenharia de software e desenvolvimento web;
  • Como desenvolver e apresentar um projeto final

Como se inscrever no curso online gratuito

Para cursar o CC50, e a página do curso através deste link (disponível aqui) e clique em "quero fazer minha inscrição". Devido ao excesso de usuários, o site pode apresentar instabilidade e aparecer mensagem de erro durante a inscrição. A orientação é esperar e tentar novamente. Segundo a Fundação Estudar, as equipes técnicas trabalham para resolver o problema.

Na página que abrirá, preencha o formulário com seus dados e confirme a inscrição para ar o curso completo.

Na página do curso, estarão disponíveis a introdução e mais dez módulos de aulas, além de uma apostila de material complementar.

*O texto "Curso de Harvard de introdução à ciência da computação online de graça e em português" foi originalmente publicado no portal Estudar Fora, da Fundação Estudar.