Um caminho para a educação autodidata em Ciência da Computação!
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!
- 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 através das nossas issues, sinta-se à vontade para abrir discussões lá.
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.
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.
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. | - |
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 |
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. | - |
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; Isomorfismo; Decomposição. | Fundamentos Matemáticos para Computação |
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 |
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, Programação Orientada a Objetos I |
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 |
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. | - |
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 |
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.
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!
- 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
Nosso muito obrigado a todas essas pessoas!
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!