/ciencia-da-computacao

🎓 Um caminho para a educação autodidata em Ciência da Computação!

MIT LicenseMIT

Universidade Brasileira Livre

Um caminho para a educação autodidata em Ciência da Computação!

Awesome Open Source Society University - Computer Science

Conteúdos

Sumário

O Curso de Ciência da Computação oferecido pela Universidade Livre Brasileira é uma educação completa em Ciência da Computação usando materiais on-line e em Português do Brasil. Esse Curso não é pensado para treinamento em tecnologias específicas ou focado em habilidades profissionais direcionadas ao mercado. Esse Curso é pensado para aqueles que desejam uma educação própria, com qualidade, fundada nos conceitos fundamentais da computação e é planejada para alunos com disciplina, cometimento e (o mais importante) bons hábitos de estudo majoritariamente independentes, mas que buscam o suporte de uma comunidade de outros estudantes no Brasil todo.

Esse curso contém conteúdos que seriam vistos em um curso de Ciência da Computação organizados de forma estruturada e que contêm disciplinas relacionadas à computação e também disciplinas de formação geral (acreditamos que uma formação completa abrange mais do que simplesmente CC). Os cursos em si são selecionados primariamente do conteúdo aberto de diversas Universidades e Institutos de Educação do Brasil, mas no geral os cursos presentes na grade seguem os seguintes critérios:

Os Cursos devem:

  • Ser gratuitos ou de conteúdo que possa ser assistido de forma aberta
  • Possuir método pedagógico
  • Ter reconhecimento de qualidade da Comunidade sobre o tema
  • Estar de acordo com o que espera-se do Currículo de Ciências da Computação

Os cursos têm como suplementação sempre que possível, livros. Quando um livro ou curso de qualidade for recomendável a leitura, mas não encaixar-se com o currículo ele deverá ser adicionado nas listas de cursos extras e livros extras respectivamente.

Organização. O Currículo é organizado da seguinte forma:

  • Introdução a Computação: Contêm os conteúdos de introdução, é onde você pode começar e ver se quer fazer CS.
  • Aprofundamento de Conceitos Introdutórios: Contêm os conteúdos que começam a aprofundar os conceitos introdutórios.
  • Desenvolvimento Teórico: Contêm os conteúdos que servem como base para a construção de bases teóricas.
  • Desenvolvimento Técnico: Contêm os conteúdos que começam a desenvolver bases técnicas.
  • Aprofundamento Técnico: Contêm os conteúdos que utilizam as bases teóricas e técnicas para construir fundamentos práticos.
  • Tópicos Finais: Conteúdos que utilizam-se de todo conhecimento adquirido nos tópicos anteriores para técnicas avançadas de computação.

Duração. É possível terminar o curso em x anos, dedicando x horas por dia. Os estudantes podem utilizar a planilha que ainda vamos disponibilizar para estimar o tempo de curso que ainda falta para a conclusão.

Custo. Todos os cursos podem ser completados de forma gratuita. Porém, alguns cursos têm diplomas/certificados/atividades/extras opcionais que são pagos. Observe que o Coursera oferece ajuda financeira.

Decida quanto tempo de curso e quanto quer gastar em seus estudos neste curso por sua própria conta, apenas tenha sempre em mente que você não pode comprar o sucesso!

Processo. Os estudantes podem fazer as disciplinas individualmente ou em grupo, seguindo a ordem que estabelecemos ou não.

Política de Conteúdo. Apenas publique em seu GitHub e espaços públicos os materiais que seu Curso permite que sejam publicados. Nunca desrespeite nenhuma regra do curso em que se matriculou e nunca faça plágios!

Como contribuir

Comunidade

  • Temos um servidor no Discord! Discord Nele pode encontrar e interagir com outros estudantes. Por que não se apresenta lá agora mesmo? Vem para o Discord.
  • Você também pode interagir sobre questões a respeito dos problemas do Curso, propor mudanças de Currículo e outras coisas relacionadas através das nossas issues, sinta-se à vontade para abrir discussões lá.

Técnicas de estudo, organização e aprendizagem

Antes de começar a estudar é importante que você aprenda algumas coisas importantes. Ser autodidata não é sobre aprender sozinho, nem sobre não estar vinculado à uma Instituição de Ensino Superior (IES), mas sobre ser responsável pelo seu próprio ensino e isso é algo que exige saber como estudar, o quanto estudar, como organizar seus estudos... e para isso recomendamos os seguintes conteúdos abaixo.

Curso Duração Dedicação Conteúdos
Aprendendo a aprender ¹ 3 Semanas 5 horas/semana Memória; Técnicas de estudo; Recursos de estudo.
Como estudar do jeito certo 3 Semanas 2 horas/semana Tempo; Técnica; Discussão.

¹ Disponível com legendas em Português.

Currículo

O currículo deste Curso se divide em duas categorias: a das Disciplinas de Formação Geral e as Disciplinas de Especialização. As disciplinas de formação geral são essenciais na formação de todos os alunos independente de qual área ou especialização desejam seguir e são a base para o conteúdo técnico-teórico para os cursos de especialização. Você pode fazer os cursos na ordem, onde e como preferir e esse é o maior benefício da liberdade, mas por fins didáticos e de organização recomendamos que tente respeitar os pré-requisitos e que conclua todas as disciplinas de formação geral antes de prosseguir nas de especialização.

organização do currículo por área


Formação Geral

Introdução a Computação

Curso Duração Dedicação Conteúdos Pré-requisitos
Introdução à Ciência da Computação com Python I 9 Semanas 4 horas/semana Algoritmos; Lógica de Programação; Python; Testes. -
Fundamentos Matemáticos para Computação 9 Semanas 4 horas/semana Lógica Formal; PROLOG; Recursão; Matrizes; Booleanos; Grafos. -
Ciência da Computação 50 (CC50) 9 semanas 4 horas/semana Sistemas Operacionais; Redes; Arquivos; C; JS. -
Leitura e Produção de Textos 4 semanas 2 horas/semana Língua Portuguesa; Escrita; Gramática; Argumentação. -
Circuitos Digitais 9 semanas 4 horas/semana Portas Lógicas; Diagramas; Máquinas de Estado; Projeto de Circuitos. -

Aprofundamento de Conceitos Introdutórios

Curso Duração Dedicação Conteúdos Pré-requisitos
Introdução à Ciência da Computação com Python II 6 Semanas 4 horas/semana Matrizes; POO; Recursão; Complexidade de Algoritmos. Introdução à Ciência da Computação com Python I
Estatística e Probabilidade 9 Semanas 4 horas/semana Espaços Discretos; Bayes; Distribuições; Variância; Regressão. Fundamentos Matemáticos para Computação
Arquitetura de Computadores I 9 Semanas 4 horas/semana Memória; Booleans; Arquitetura; RISC-V. Circuitos Digitais
Noções de Inglês 9 Semanas 4 horas/semana Inglês básico; Técnicas de Leitura; Escrita. -
Noções de Direitos Autorais, parte I 9 Semanas 4 horas/semana Direito Autoral; Direito do Autor; Limitação do Direito do Autor. -
Noções de Direitos Autorais, parte II 9 Semanas 4 horas/semana Patentes Digitais; Registro de Programas de Computador. Noções de Direitos Autorais, parte I

Desenvolvimento Técnico

Curso Duração Dedicação Conteúdos Pré-requisitos
Programação Orientada a Objetos I 6 Semanas 4 horas/semana OOP; Streams; MVC; Design Patterns. Introdução à Ciência da Computação com Python II
Bancos de Dados 4 Semanas 3 horas/semana MER; Projeto de Banco de Dados; Normalização; SQL. -
Arquitetura de Computadores II 9 Semanas 4 horas/semana Cache; Paralelismo; ASM; RISC-V. Arquitetura de Computadores I
Algebra Linear I 4 Semanas 3 horas/semana Sistemas lineares; Vetores; Espaços Vetoriais. Fundamentos Matemáticos para Computação
Princípios de Desenvolvimento Ágil de Software 9 Semanas 4 horas/semana XP; User Stories; Taks; Sprint; Diagramas. -

Desenvolvimento Teórico

Curso Duração Dedicação Conteúdos Pré-requisitos
Desenvolvimento Ágil com Java Avançado 4 Semanas 3 horas/semana JDBC; Servlets; Web; Lambda Calculus. Princípios de Desenvolvimento Ágil de Software, Programação Orientada a Objetos I
Cálculo I 4 Semanas 3 horas/semana Funções; Limite; Derivada; Trigonometria; Mat. Espacial. Fundamentos Matemáticos para Computação
Teoria dos Grafos 4 Semanas 3 horas/semana Grafos; Representações; Listas; Árvores. Fundamentos Matemáticos para Computação, Programação Orientada a Objetos I
Sistemas Operacionais 4 Semanas 3 horas/semana Processos; Threads; Calls; I/O. Arquitetura de Computadores II
Banco de Dados MySQL 3 Semanas 4 horas/semana CRUD; Consultas; Tabelas. Introdução à Ciência da Computação com Python II, Bancos de Dados

Aprofundamento Técnico

Curso Duração Dedicação Conteúdos Pré-requisitos
Interfaces Humano-Computador 3 Semanas 3 horas/semana Estudos de Usuário; Design; Avaliação de Interfaces. -
Estrutura de Dados 2 Semanas 3 horas/semana Filas; Pilhas; Árvores; Ordenação. Teoria dos Grafos
Redes de Computadores 2 Semanas 3 horas/semana Protocolos; UDP; TCP; Comunicação. -
Criação de Startups 2 Semanas 3 horas/semana Canvas; MVP; Modelo de Negócio; Pitch. -
Introdução ao Desenvolvimento de Aplicativos Android 2 Semanas 3 horas/semana Aplicativos; Android Studio; Views. Desenvolvimento Ágil com Java Avançado

Tópicos Finais

Curso Duração Dedicação Conteúdos Pré-requisitos
Paradigmas de Programação 2 Semanas 3 horas/semana Programação Funcional; Cálculo Lambda; Haskell; Monads. Estrutura de Dados
Exercícios de Paradigmas de Programação - - Exercícios do curso. Estrutura de Dados
Compiladores 2 Semanas 3 horas/semana Lexers; Parsers; AST; Generators. Teoria dos Grafos
Gerência da Qualidade de Software 2 Semanas 3 horas/semana Testes; Estimativas; Processos. -
Fundamentos da Inteligência Artificial 2 Semanas 3 horas/semana Regressão Linear; Gradientes; Redes Neurais; Perceptons. Teoria dos Grafos
Metodologia da Pesquisa em Computação 8 Semanas 5 horas/semana Pesquisa; Artigos; Métodos; Publicação. -

Especializações

Após ter concluído a formação geral, você já deve ter uma ampla visão sobre Ciência da Computação, seus fundamentos e aplicações e estará mais que preparado para escolher uma área de especialidade dentro de suas aplicações para se tornar especialista. A partir daqui não vamos mais elencar pré-requisitos, pois entendemos que com a bagagem da formação geral o aluno já consegue ter pleno conhecimento sobre como estudar temas complexos e decidir como e quando fazer cada curso sem necessitar de recomendação.

Especialização Duração Dedicação Áreas de Atuação
Computação Gráfica 15+ semanas Média de 4 h/semana softwares gráficos, aplicações 3D, games, fotorealismo, sistemas gráficos, simuladores, e mais
Embarcados 31 semanas Média de 4 h/semana internet das coisas, controles industriais, coisas inteligentes, wearables, cidades inteligentes, automobilismo, e mais
Desenvolvimento Web 37 semanas Média de 4 h/semana aplicações em servidor, layout de páginas web, sistemas on-line, APIs, computação em nuvem, streaming, e mais
Ciência de Dados 25+ semanas Média de 4 h/semana análise de dados, visualização de dados, machine learning, deep learning, sistemas especialistas, estatística, e mais

Como demonstrar o meu progresso?

A melhor forma de demonstrar sua evolução e maturidade ao longo do currículo é através de projetos práticos que demonstrem um pouco do que você aprendeu em cada disciplina, isso vai desde projetos guiados em muitas disciplinas, até projetos que você decida fazer para se testar e construir coisas com o que aprendeu. Compartilhar sobre os projetos que tem feito ao longo do Curso, seja através de redes sociais, blogues, tutoriais, streaming... vai demonstrar para as pessoas do meio técnico e de outros meios o quanto você aprendeu e evoluiu ao longo dessa jornada.

Não deixe de hospedar todos os seus códigos em seu perfil do GitHub, mesmo que sejam pequenos projetos ou apenas exercícios eles podem demonstrar muito sobre o que você tem estudado, como você resolve problemas e o quanto você melhorou ao longo do tempo.

Parabéns!

Após completar todos os requisitos do currículo acima e aprender ao menos uma especialização você já viu todo o conteúdo equivalente a um Bacharelado completo em Ciência da Computação. Parabéns!

O que fazer após isso? Bem, na verdade as possibilidades são sem limites e interconectadas:

  • Procurar um trabalho como Desenvolvedor em sua especialidade.
  • Aprender mais lendo livros clássicos de Ciência da Computação em um Clube do Livro para melhorar suas habilidades e expandir seu conhecimento (além de fazer muitos amigos)!
  • Participar ou organizar meetups de tecnologia.
  • Encontrar novas tecnologias que estão crescendo:
    • Explorar o modelo de atores (actor model) com Elixir ou Scala, que são linguagens modernas com ferramental e bibliotecas muito interessantes para Desenvolvimento Web e que utilizam VM's muito poderosas!
    • Explorar empréstimo (borrowing) e tempo de vida (lifetimes) em Rust, uma linguagem que tem segurança de memória e de fio de execução sem um coletor de lixo!
    • Aprender mais sobre tipos e inferência de tipos com OCaml, uma linguagem multiparadigma com inferência estática de tipos!

Time

Contribuidores

Nosso muito obrigado a todas essas pessoas!


Fabio Kon

📹

professordouglasmaioli

📹

Gabriel Guimaraes

📹

Pedro Thiago Valério de Souza

📹

Rodolfo Azevedo

📹

Eduardo Guerra

📹

Fábio dos Reis

📹

Matheus Felipe

👀

João Paulo Carvalho

🤔

Wellington Silva

🤔

Hallison Paz

📹 🤔

Fernando Mercês

📹 🚧

Fernando Masanori

📹

Emilio Francesquini

📹

Fabricio Olivetti de Franca

📹

Professor Isidro

📹

Fabio Levy Siqueira

📹

Luiz Velho

📹

Geofisicando

📹

WR Kits

📹

Bruno Miranda

📹

Gustavo Guanabara

📹

Victor Lima

📹

Lucas Nhimi

📹

oliveira-michel

📹

Willian Justen

📹

Kizzy Terra

📹

Andrew Rosário

📹

E a todos os outros educadores, produtores de conteúdo e pessoas que contribuiram com esse projeto, mas não possuem perfil ou ainda não os encontramos!