Executando verificação de segurança...
7

CS50 - Um dos melhores cursos de programação.

Na minha primeira publicação aqui no TabNews, gostaria de fazer uma recomendação de um dos melhores cursos que já fiz e que, surpreendentemente, poucas pessoas conhecem.
Quando alguém fala do CS50 dificilmente é mostrado um resumo do que você vai aprender no curso, acredito que isso ajudaria a alguem a dar uma olhada nesse curso incrivel gratuito de Harvard!

CS50

O CS50, também conhecido como "Introduction to Computer Science", é um curso de ciência da computação gratuito disponibilizado na Universidade de Harvard. Ele é projetado para fornecer uma introdução abrangente e acessível aos conceitos fundamentais da programação e da ciência da computação. Isso tudo ocorre de forma presencial e online.

Este curso é incrível! Ele é dividido em 11 semanas, durante as quais você aprenderá conceitos extremamente importantes. Você pode fazê-lo pelo tempo que desejar, eu mesmo demorei alguns meses para terminar ele, culpa da motivação que eu tinha na época.

(Abaixo está um breve resumo das aulas e os exercícios que mais gostei em cada semana, porém existem outros exercícios para fazer que vão te desafiar)

OBS: Depois de um tempo, percebi que todos os exercícios te ensinam na prática, sem você notar como ler documentação e como funciona um ambiente de teste, já que você precisa fazer os exercícios e passar nos testes desenvolvidos por eles.

Semana 0

Introdução sobre a importância da programação e como ela pode ajudar a transformar o dia a dia das pessoas.

Exercícios: Ao final dessa semana, há um exercício envolvendo a criação de um programa usando o Scratch.

Semana 1

Nesta semana, temos nosso primeiro contato com a linguagem de programação C. Aprendemos sobre tipos de dados, operadores, condições, loops, linha de comando, etc.

Exercícios: Um dos exercícios consiste em criar um programa que verifica a validade de um cartão de crédito e identifica o tipo de sua bandeira.

Semana 2

Nesta semana, aprofundamos nosso conhecimento em C e aprendemos sobre funções, depuração de código, arrays e argumentos de linha de comando.

Exercícios: O programa caesar implementa a cifra de César para criptografar mensagens. Ele recebe um único argumento de linha de comando, um número inteiro não negativo chamado "key", e solicita ao usuário uma string de texto a ser criptografada. A saída é o texto criptografado correspondente, preservando letras maiúsculas e minúsculas. (Por mais que não seja muito usado, foi a única vez que vi alguém ensinando para o que serve os argumentos argc e argv ).

Semana 3

Nesta semana, aprendemos sobre algoritmos de busca, como linear search, binary search, bubble sort, selection sort, merge sort, e também sobre recursão.

Exercícios: O programa Plurality é basicamente a implementação de uma urna eletrônica, onde é necessário escrever o código corretamente para que o candidato com o maior número de votos seja o vencedor.

Semana 4

Nesta semana, aprendemos sobre hexadecimal, ponteiros, alocação dinâmica de memória, filas de ponteiros, etc.

Exercícios: O exercício Filter é incrível! Mesmo estando no início do curso, você implementa um programa que aplica filtros em fotos, como escala de cinza, reflexão, desfoque e adição de bordas. Tudo isso usando vetores. Neste exercício, você percebe que, mesmo com pouco conhecimento, já pode fazer grandes coisas.

Semana 5

Nesta semana, aprofundamos nosso entendimento sobre vetores, utilizando listas encadeadas, hash tables, árvores binárias, pilhas, filas e o Big O.

Exercícios: Aqui escrevemos um código que realiza verificação ortográfica em um arquivo de texto que contém um dicionário de palavras. Nosso objetivo é implementar o verificador ortográfico mais rápido possível. Um bom exercício para aprender sobre tempo de execução e otimização.

Semana 6

Nesta semana, começamos a trilha com Python, onde aprendemos que, uma vez que já temos uma base, apenas precisamos aprender a sintaxe das novas linguagens.

Exercícios: Refazemos todos os exercícios que já fizemos no CS50, porém utilizando Python. Fica evidente a rapidez com que é possível implementar esses códigos. O que levou 6 semanas até agora vai ser feito por você em 1 dia, haha! (Vale ressaltar que ele mostra a lentidão que esse código python roda em comparação com o codigo em C.)

Semana 7

Nesta semana, aprendemos um pouco sobre bancos de dados e sua utilidade.

(Melhor exercício para mim)

Exercícios: Sem dúvida, essa é a melhor forma de aprender sobre bancos de dados que já vi até hoje. Eles transformam você em um detetive e apresentam um roubo que aconteceu com o mascote do CS50. Seu objetivo é encontrar o culpado e o cúmplice, você fará isso acessando logs de câmeras, registros de interrogatórios, lista telefônica pública, lista de voos, etc., dessa forma você treinara as consultas e vai aprender se divertindo.

Semana 8

Depois de mostrarem o quão fácil foi "aprender" Python depois de já ter uma base sólida, eles nos pedem para aplicar isso para aprender o básico de JavaScript e introduzem o básico de HTML e CSS.

Exercício: Implementar uma página simples web usando HTML, CSS e JavaScript.

Semana 9

Nesta semana, aprendemos como os frameworks podem facilitar nossa vida, apresentando o Flask, e também como usar o Ajax.

Exercício: Refazer um site de compra e venda de ações, colocando em prática o desenvolvimento web com Python, JavaScript, HTML, CSS e bancos de dados. Nesse site você vai aprender muito, vai mexer com registro e login de usuários, cache, uso de API, etc.

Semana 10

Uma palestra sobre emojis e a criação de algumas funcionalidades relacionadas.

Exercícios: Este é o projeto final, você precisa criar algo que mude a vida ou o dia a dia de alguém. Alguns fazem sites, outros app andorid, jogos, etc. Você é livre para fazer o que quiser.

Considerações finais

Espero que esta recomendação e esse breve resumo do curso CS50 tenha despertado o interesse de alguém. No final do curso você consegue pegar um certificado gratuito caso tenha feitos os exercícios e tenha passado pelos testes.

O site é https://cs50.harvard.edu/x/2023/. O curso é em inglês, mas é só usar legenda automática do youtube nas aulas. Tem uma versão em PT-BR desse curso que um rapaz que fez o curso desenvolveu, mas eu prefiro pelo site porque tem atualizações constantes nos exercícios.

Entrem no discorda deles, para que quando você tiver travado, você possa pedir ajuda lá, ninguém vai te dar uma resposta pronta, mas vão te direcionar para um caminho certo para você resolver os problemas sozinho e se sentir realmente satisfeito com o progresso, pelo menos eu me senti assim ao completar cada desafio.

Carregando publicação patrocinada...
1
1

Excelente post. Sempre indico o CS50 para quem pergunta por onde começar. Infelizmente não consegui assistir tudo, apenas o começo, mas um dia vou concluir.

2

Curso muito bom, só depois que comecei a trabalhar que percebi que o curso replica bem o mundo real:

Continuar inplementação de algo feito por outra pessoa.
Leitura de documentação.
Criação de perguntas bem elaborada para seu problema(Pergunats no discord).
Teste automatizados.
Etc...

Volta a fazer o curso, aproveita que da para ir fazendo no seu tempo. Eu mesmo demorei a finaliza-lo.

1

Vi que você precisa enviar um e-mail pra eles pra pegar o certificado e precisar ter uma media para conseguir, sabe me dizer a melhor a respeito ? você conseguiu tirar o seu ?

2

Consegui sim, para ganhar o certificado grátis você só precisa estudar e passar no curso. Você faz isso entregando os exercícios corretamente. A correção dos exercícios é simples, feita por um programa de teste e não diretamente por uma pessoa do CS50. Vale ressaltar que antes de entregar para o programa deles seu exercício, você tem acesso a esse teste, então sua real preocupação é apenas testar a aplicação antes de enviar para o programa deles.

Lógico que, se pararmos para raciocinar, tem como alguém procurar alguma solução na internet para passar nos testes. Para evitar que façamos isso sem querer ao tentarmos resolver algo, eles pedem para procurar ajuda pelo Discord deles. Lá, ninguém vai te dar resposta de "mão beijada", eles vão te ajudar qual caminho você deve seguir para resolver os problemas (igual deve acontecer em uma empresa com desenvolvedores novos). Eles falam no curso que se for encontrado plágio, você não ganha o certificado, mas não sei como isso funciona.

Faça o curso sem medo!

0
2

Se C te deixou com um pé atrás, pode ser um sinal de que você está aprendendo as coisas bem superficialmente. Talvez você ache ultrapassado, mas linguagens como Python, Javascript entre outras são compostas por bibliotecas que são escritas em C, ou seja, essas linguagens são apenas uma casca, o trabalho pesado fica por conta do C mesmo. Em C você vai ter que lidar com coisas mais baixo nível, que outras linguagens vão abstrair para você, mas na minha visão é lidando com essas coisas que vocÊ vai se diferenciar, e realmente entender como as coisas funcionam.

1

Por qual motivo? Você vai aprender o basico com C, variaveis, metodos e logica. E eu garanto que se você aprender com C o basico, vai olhar outras linguagens de uma forma completamente diferente, por exemplo, quando vi Java pela primeira vez so consegui pensar em como ele era mais facil e rapido de fazer as coisas comparado com o C.

1

Exatamente. A liguagem que se deve ensinar num curso de Ciência da Computação não é pensada em mercado, é em aprendizado.
Todo mundo seria um programador um pouco melhor se já tivesse praticado operações com ponteiros e alocalção dealocação de memória, ainda que nas linguagens mais modernas costume ser irrelevante.

Se já faz bem para quem nem é da área de tecnologia aprender o básico de lógica e programação, imagina o quão importante é pra quem é da área lidar com questões mais avançadas e linguagens de mais baixo nível.

3

ainda que nas linguagens mais modernas costume ser irrelevante

Eu acho que a relevância é, digamos, indireta.

Apesar da maioria das linguagens modernas não permitirem usar ponteiros diretamente, o estudo deles em C permite entender melhor o conceito de referências, que muitas ainda possuem.

Embora nem todas permitam manipular diretamente as referências, ainda sim ajuda a entender certos comportamentos. Um exemplo clássico em Python:

def f(x):
    x += 10

def g(x):
    x += [ 10 ]

n = 1
f(n)
print(n) # 1

n = [ 1, 2, 3 ]
g(n)
print(n) # [ 1, 2, 3, 10 ]

O número não é modificado pela função, mas a lista sim. Isso porque o primeiro é um tipo por valor, e o segundo por referência.

Apesar de Python não permitir manipulação direta das referências, vc precisa saber o conceito para entender porque em um caso o valor não é alterado e no outro é. E - na minha opinião - estudar C é uma ótima maneira de aprender este conceito, pois vc tem que fazer tudo manualmente via ponteiros.

Algumas linguagens, como C#, permitem escolher se um argumento será passado por valor ou referência, sem precisar de manipulação direta dos ponteiros. Já outras, como Python, JavaScript e Java, não permitem tal controle, pois é o tipo que indica como será passado.

De qualquer forma, estudando C vc entende melhor o que está por trás desses mecanismos e fica mais fácil pra entender outras linguagens - até porque todas usam alguma variação do que já foi citado, mudando um detalhe ou outro.

Por essas e outras que muitos - eu incluso - defendem o uso de C como ferramenta de aprendizado, mesmo que nunca vá trabalhar com ela.

2

Todas as linguagens que eu conheço permitem passar qualquer valor por referência, mas algumas, como as três citadas citadas, que não possuem nem ponteiro, nem referência, só permitem encapsulando o objeto a ser passado por referência em outro objeto que já é por referência naturalmente, como bem demonstrado no exemplo acima. Só não daria para fazer isso em uma linguagem de programação que não tem referência alguma, ou não permita colocar qualquer objeto dentro de outro por referência.

Embora dê para estudar todas as estruturas de dados e algoritmos em todas as linguagens, não da forma como ela funciona de fato, teria que fazer um contorno, e dificulta entender o que de fato está acontecendo. Continuaria parecendo mágica. Por isso C é interessante, e simples. C++ e Rust também dão, mas são complicadas.


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).