Universidade Brasileira Livre
Um caminho para a educação autodidata em Ciência da Computação!
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, comprometimento 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:
Bases para a criação do Currículo (Guidelines):
Levamos em consideração (apesar de não ter implementado completamente como sugerido) os seguintes documentos sobre a formação de um currículo em Ciência da Computação. Continuaremos constantemente trabalhando e aceitando sugestões de melhorias para cada vez mais oferecer uma experiência melhor para todos os estudantes que seguem nosso guia aberto de conteúdos.
- Referenciais de Formação para os Cursos de Graduação em Computação 2017 (SBC)
- Diretrizes Curriculares de Cursos da Área de Computação e Informática (UFRGS)
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 se espera do Currículo de Ciências da Computação
Os cursos têm como suplementação sempre que possível, livros. A forma como você quer aprender o conteúdo de cada uma dessas disciplinas é inteiramente sua responsabilidade, você pode ler o livro ou assistir o curso conforme achar conveniente. Livros geralmente não são gratuitos e de livre acesso, mas não se preocupe, pois o conteúdo é o mesmo dos cursos, que são.
Quando um curso de qualidade for recomendado, mas não se encaixar na grade, vamos adicioná-lo em cursos extras - e o mesmo com livros, em livros extras.
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 CC.
- 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 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 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 ou 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!
Conseguindo ajuda (Detalhes sobre o FAQ e servidor)
Comunidade
- Temos um servidor no 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 por meio das nossas issues. Sinta-se à vontade para abrir discussões lá.
- Adicione a Universidade Brasileira Livre no seu perfil do LinkedIn!
Antes de começar
Existem tópicos que, apesar de não serem essenciais na formação de Ciência da Computação, podem ser muito úteis na sua jornada de aprendizado. Caso queira você pode pulá-los ou vê-los depois.
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.
Git e GitHub
Conhecer ferramentas como o Git irá te ajudar a organizar seus projetos de estudo, enquanto que o GitHub (ou outras plataformas como BitBucket ou GitLab) pode ser muito útil para trabalhar remoto e compartilhar os seus projetos com colegas, além de poder usá-lo como portfólio em futuras oportunidades de trabalho.
Curso | Duração | Dedicação | Conteúdos |
---|---|---|---|
Git e Github para Iniciantes | 2 Dias | 2 horas/dia | Git; GitHub; Controle de versão. |
Git e GitHub | 4 Semanas | 5 horas/semana | Git; GitHub; Controle de versão. |
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.
Formação Geral
Introdução à Computação
Curso | Duração | Dedicação | Conteúdos | Pré-requisitos | Leitura Recomendada |
---|---|---|---|---|---|
Introdução à Ciência da Computação com Python I | 9 Semanas | 4 horas/semana | Algoritmos; Lógica de Programação; Python; Testes. | - | DOWNEY, Allen B. Pense em Python. |
Fundamentos Matemáticos para Computação | 9 Semanas | 4 horas/semana | Lógica Formal; PROLOG; Recursão; Matrizes; Booleanos; Grafos. | - | GERSTING, J. L. Fundamentos Matemáticos para a Ciência da Computação: Matemática Discreta e suas Aplicações. |
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. | - | Tanenbaum, Andrews S. Organização Estruturada de Computadores. |
Aprofundamento de Conceitos Introdutórios
Curso | Duração | Dedicação | Conteúdos | Pré-requisitos | Leitura Recomendada |
---|---|---|---|---|---|
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 | DOWNEY, Allen B. Pense em Python. |
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 | Ross, Sheldon. Probabilidade: Um Curso Moderno com Aplicações. |
Arquitetura de Computadores I | 9 Semanas | 4 horas/semana | Memória; Booleans; Arquitetura; RISC-V. | Circuitos Digitais | A. S. Tanenbaum. Organização Estruturada de Computadores |
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 | Leitura Recomendada |
---|---|---|---|---|---|
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 | Deitel, Paul e Deitel, Harvey. Java: como programar. |
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 | Tanenbaum, Andrews S. Organização Estruturada de Computadores. |
Algebra Linear I | 4 Semanas | 3 horas/semana | Sistemas lineares; Vetores; Espaços Vetoriais. | Fundamentos Matemáticos para Computação | Strang, Gilbert. Álgebra linear e suas aplicações |
Princípios de Desenvolvimento Ágil de Software | 9 Semanas | 4 horas/semana | XP; User Stories; Tasks; Sprint; Diagramas. | - | - |
Desenvolvimento Teórico
Curso | Duração | Dedicação | Conteúdos | Pré-requisitos | Leitura Recomendada |
---|---|---|---|---|---|
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 | Deitel, Paul e Deitel, Harvey. Java: como programar. |
Cálculo I | 4 Semanas | 3 horas/semana | Funções; Limite; Derivada; Trigonometria; Mat. Espacial. | Fundamentos Matemáticos para Computação | Steward, James. Cálculo, Volume 1. |
Teoria dos Grafos | 4 Semanas | 3 horas/semana | Grafos; Representações; Isomorfismo; Decomposição. | Fundamentos Matemáticos para Computação | Bondy e Murty. Graph Theory with Applications. |
Sistemas Operacionais | 4 Semanas | 3 horas/semana | Processos; Threads; Calls; I/O. | Arquitetura de Computadores II | MAZIERO, C. Sistemas Operacionais: Conceitos e Mecanismos. |
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 | Leitura Recomendada |
---|---|---|---|---|---|
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, Programação Orientada a Objetos I | CORMEN, T., LEISERSON, C., RIVEST, R., e STEIN, C. Algoritmos - Teoria e Prática. |
Redes de Computadores | 2 Semanas | 3 horas/semana | Protocolos; UDP; TCP; Comunicação. | - | KUROSE, J. F.; ROSS, K. W. Redes de Computadores e a Internet: Uma Abordagem Top-down |
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 | Leitura Recomendada |
---|---|---|---|---|---|
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 | Aho, A.V., Sethi, R. e Ullman, J.D. Compiladores – Princípios, Técnicas e Ferramentas. |
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. | Estrutura de Dados, Estatística e Probabilidade | Russel, S. e Norvig, P. Inteligência Artificial. |
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 , fotorrealismo , 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 |
CyberSecurity | 20+ semanas | Média de 4 h/semana | segurança , pentest , criptografia , autenticação , análise , estatística , e mais |
DevOps | 30+ semanas | Média de 2 h/semana | devops , infraestrutura , container , docker , kubernetes , CI/CD , e mais |
Como demonstrar o meu progresso?
A melhor forma de demonstrar sua evolução e maturidade ao longo do currículo é por meio 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 por meio 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
- Camilo Cunha de Azevedo: Fundador da ULivre
- Mateus Roveda: Líder de Comunidade
- Leonardo Fiedler: Mantenedor da Especialização em Ciência de Dados
- Jefferson Quesado: Mantenedor da Especialização em Desenvolvimento Web
- Marcus Rodrigues: Mantenedor do Site do Projeto
- Rotfuchs von Vulpes: Moderador da Comunidade
- Emanuel Castelo: Moderador da Comunidade
- Gustavo Schneider: Moderador da Comunidade
Contribuidores
Nosso muito obrigado a todas essas pessoas!
E a todos os outros educadores, produtores de conteúdo e pessoas que contribuíram com esse projeto, mas não possuem perfil ou ainda não os encontramos!