Como eu estudo completamente a Ciência da Computação? [fechadas]

45

Sendo um programador completamente autodidata, eu gostaria que pudesse melhorar a minha autoaprendizagem do curso de ciência da computação ministrado a um graduado típico de CS.

Encontrar recursos diferentes na internet tem sido fácil, há, claro, curso aberto do MIT , e há cursos do Coursera em Stanford e outras universidades. Existem inúmeros outros recursos abertos espalhados pela Internet e alguns bons livros que são recomendados repetidamente.

Eu tenho aprendido muito, mas meu estudo é muito fragmentado, o que realmente me incomoda. Eu adoraria Se em algum lugar, eu poderia encontrar um caminho que eu deveria seguir e uma pilha que eu deveria limitar-me, para que eu possa ter certeza sobre o que essencial partes da ciência da computação Eu estudei e, em seguida, sistematicamente abordar aqueles que não tenho.

O problema com a Wikipedia é que ela não diz o que é essencial, mas insiste em ser uma referência completa.

MIT curso aberto para Ciência da Computação e Eng. Elétrica. tem uma lista enorme de cursos que também não informam quais cursos são essenciais e o que é opcional, de acordo com o interesse / exigência da pessoa. Eu não encontrei nenhuma menção de uma ordem em que se deve estudar assuntos diferentes.

O que eu adoraria é criar uma lista que eu possa seguir, como essa falsa

SUBJECTS                                                        DONE

Introduction to Computer Science                                  *
Introduction to Algorithms                                        *
Discrete Mathematics                   
Adv. Discrete Mathematics
Data structures                                                   *
Adv. Algorithms
...

Como você pode ver claramente, tenho pouca noção de quais assuntos específicos a ciência da computação consiste.

Seria extremamente útil, mesmo que alguém apontasse cursos essenciais do curso do MIT (+ assuntos essenciais não presentes no MIT OCW) em uma ordem recomendada de estudo.

Vou listar os posts que já passei (e não consegui o que estava procurando)

link - a resposta principal diz que não é vale a pena estudar cse

link - aponta para o MIT OCW

link

link

    
por Optimus 10.06.2012 / 13:50
fonte

4 respostas

24

Eu vi algum material do curso do MIT, e foi chocantemente ruim . Eles tinham materiais de ensino que exigiam VC5, grupos de variáveis globais implícitas, passando cores como "Blue" em vez de 32GB ARGB, e muito menos 4x [0,1] floats, esse tipo de coisa. Eu não confiaria em um currículo ou código só porque vem de uma universidade de grande nome.

Meu grau de computação em equipe (de uma universidade que é o top 10 no Reino Unido para CS) consistia em:

Primeiro ano:

  1. OOP- os super básicos
  2. Sistemas de computador - coisas como representações inteiras binárias.
  3. Teoria básica de banco de dados relacional
  4. Matemática para CS - simples geometria 2D e 3D.
  5. Um pouco de HTML / JS - coisas para iniciantes completos
  6. Um pedaço igualmente pequeno de PHP.
  7. Um pouco de programação funcional

Segundo ano:

  1. Questões legais em computação - coisas como, leis que giram em torno proteção de dados do usuário
  2. Linguagens de programação - a hierarquia e o lexing do Chomsky foram cobertos
  3. Sistemas operacionais, redes e a Internet - principalmente coisas como memória virtual e paginação, pilha de IP
  4. Gráficos de computador 2D - na maioria apenas provando teoremas do subjacente matemática
  5. AI- descrições básicas de redes neurais, sistemas de crenças bayesianos, etc.
  6. Análise de requisitos - visão geral resumida da UML, requisitos funcionais / não funcionais.
  7. Projeto de equipe

Terceiro ano:

  1. Análise de algoritmo - teoria da complexidade, principalmente
  2. Implementação de linguagens de programação - técnicas de análise LL / LR, CFGs e tais coisas.
  3. Gerenciamento de projetos de software - uma olhada nos modelos Waterfall / Agile
  4. Computação internacional - Unicode e outros divertimentos de localização
  5. IA avançada - não sei, honestamente, e eu fiz um exame em breve
  6. computação gráfica 3D - principalmente, novamente, apenas provando teoremas para matrizes de rotação e tais
  7. Sistemas baseados em agentes - principalmente sobre agentes assíncronos se comunicando, alcançar as decisões do grupo, etc.
  8. Aplicações de microprocessador - processamento de sinal digital
  9. Robótica - abrange coisas como visão computacional e decisão de robôs fazendo em alto nível

Como você notará, praticamente tudo é "o básico" de algo e quase nada é coberto até uma profundidade útil.

O material que valeu a pena, essencial:

  1. OOP- e mais um pouco, e mais um pouco
  2. Programação funcional - também um pouco mais. Tente escolher uma linguagem como C ++ ou C #, em que você não precise reaprender a sintaxe e as ferramentas, etc., para abordar os dois estilos.
  3. A parte virtual do sistema operacional é boa para se conhecer, assim como o modo kernel versus o modo usuário. Ignorar a segmentação e a pilha de IPs.
  4. Análise de requisitos - deve ser útil para qualquer projeto
  5. Análise de algoritmo - saber qual é a complexidade algorítmica, como reduzi-la e qual é a complexidade das operações comuns é importante.
  6. Modelos de gerenciamento de projetos de software - muitas lojas fazem Agile e muitos modelos mais antigos ainda fazem modelos estilo Cachoeira.
  7. Computação internacional - o Unicode é essencial

As coisas que valeram a pena, opcionalmente:

  1. Linguagens de programação - Hierarquia de Chomsky, as ferramentas de lexação e análise. Pule a teoria por trás dos analisadores LL ou LR - um analisador LR pode aceitar virtualmente qualquer CFG realista e não ambíguo, e quando não puder, a documentação do seu gerador de analisador irá informá-lo sobre isso.
  2. Gráficos 3D. Eu não quero dizer "provar que isso é uma fórmula de matriz de rotação" desperdícios de tempo, quero dizer real "Isso é um shaver de vértice" coisas, ou GPGPU. Isso é divertido, interessante e diferente.
  3. Algumas das coisas de IA são campos em potencial e busca de caminhos divertidos.

Coisas essenciais, mas eu não as abordei de qualquer maneira:

  1. Concorrência - um must-know, pelo menos o básico, para qualquer um em 2012.

O resto foi uma completa perda de tempo. Infelizmente, a maioria desses nove pontos eu já conhecia ou peguei as partes úteis em outro lugar. Se você ler sobre coisas como o problema do FizzBuzz , rapidamente se torna aparente que você não precisa saber muito para estar no topo - o que é uma sorte, já que meu diploma e muitos dos materiais que eu já vi online em outros cursos realmente não ensinam muito.

    
por 10.06.2012 / 14:23
fonte
5

O curso Open Course é apenas uma lista de cursos que eles disponibilizaram. Se você quer saber o que um estudante teria feito, visite o site do MIT (não OCW) e veja o programa atual. Eles têm uma lista do que é necessário e o que é considerado um pré-requisito para o quê. Aqui está a página deles.

    
por 10.06.2012 / 14:16
fonte
5

Experimente as recomendações do currículo de Ciência da Computação de 2001 da ACM / IEEE, vinculadas aqui: link

junto com as atualizações do CS de 2008.

Página 17 do relatório de 2001 tem um gráfico útil que sublinha todo o conhecimento "central" e ainda lista eletivas.

Um programa de graduação não teria tempo para cobrir até mesmo os cursos considerados essenciais por essas recomendações, de modo que agrupariam algumas das categorias e permitiriam que os alunos escolhessem entre elas (por exemplo, sistemas operacionais, linguagens de programação e engenharia de software). são agrupados no Software e os alunos escolhem uma faixa).

Você pode encontrar o curso necessário no site do departamento de ciência da computação para praticamente qualquer escola, e eles devem ser alguma versão disso.

    
por 11.06.2012 / 18:41
fonte
-4

Se eu puder, sugiro que você associe github.com como parte de seu processo de aprendizado.

Em seguida, você pode procurar um código que tenha algum aplicativo do mundo real no qual esteja interessado, cloná-lo por conta própria, trabalhar com ele, codificar e conhecer o conteúdo e, eventualmente, começar a enviar os patches de volta para o projeto de origem, e abaixo da linha estar trabalhando em um projeto de código aberto que você tem interesse.

E, claro, você se familiarizará com o git, que é melhor.

    
por 10.06.2012 / 23:57
fonte