O que a ciência de graduação computador de rumo melhor prepara programadores para o local de trabalho? [fechadas]

StackOverflow https://stackoverflow.com/questions/895165

Pergunta

A idéia aqui é para obter melhores programadores para fora da direita da faculdade.

Eu acho que eu teria que ir com algoritmos, não é exatamente algo que você pode pegar em seu próprio país muito facilmente e eu acho que ele permite que você olhar para a eficiência e correção de software em um nível mais profundo.

Eu também acredito que o ensino de programação real pode ser útil, mas eu aprendi mais do que eu aprendi sobre a programação no trabalho, o que me faz pensar que alguns desses blocos curso de programação (não todos) poderia ter ido para uma melhor utilização.

Estes resultados serão parte de uma carta que eu quero escrever para o departamento de CS na minha antiga escola, eu acho que há toneladas de aulas que tirei isso não ajudou em tudo, e outros que eu acho que teria sido de valor inestimável .

Foi útil?

Solução

Eu ainda tenho que encontrar um bom curso CompSci que adequadamente prepara engenheiros de software para o local de trabalho. Se você encontrar um que tem a seguinte [embora se poderia ser chamado CompSci tenho dúvidas, é mais como Software Design do mundo real que é um animal muito diferente].

A ciência da computação é um assunto mais teórico que tem implicações mundiais muito reais, mas é mais útil em uma luz acadêmico. projeto de algoritmos, por exemplo, é fantasticamente útil para engenheiros de software, mas não é realmente diretamente útil para o consumidor. Por exemplo, saber como construir um algoritmo quicksort, ou compreender lista travessia ligado não é realmente para útil em ambiente de engenharia de software de hoje - é claro, a compreensão da teoria é útil para escolher as ferramentas certas para o trabalho , não me interpretem mal. Como desenvolvedores, muitos de nós contar com a saída do mundo da ciência da computação para promover nossas ferramentas de desenvolvimento, de fato, sem eles muitos desenvolvedores seria deixado debatendo, mas colocar uma pós-graduação de ciência da computação na frente de um usuário e levá-los para projetar um parte significativa de software para eles e o intelecto acadêmica vai cair aos pedaços porque os dois falam completamente diferentes idiomas.

Um curso muito mais útil para engenheiros de software iria incluir o maior número [e possivelmente mais] dos seguintes componentes que eu posso pensar em cima da minha cabeça:

  • Linguagem de programação - fluxo básico do programa, paradigmas, sintaxe etc. Isto é principalmente ensinado muito bem, por isso não vou ficar em um presente muito. Apesar de que seria útil se alguns completamente diferentes classes de linguagens de programação foram ensinados - por exemplo, eu aprendi C, Pascal e VB 3 (não me lembro a versão exata?). Seria muito mais útil se os programadores aprenderam pelo menos uma linguagem funcional, uma linguagem imperativa, uma linguagem declarativa.
  • Depuração - Ao escrever aplicações nTier [que muitas aplicações do mundo / mais reais são], seria útil para ser capaz de descobrir o , onde algo está errado, estabelece direito ao nível do protocolo, se necessário. ferramentas de análise, tais como WireShark são úteis para isso.
  • Dispositivos de Comunicação -. XML, XQuery, XPath, XSL, XSD [como estes parecem ser usado tão extensivamente]
  • Banco de Dados Relacional Design -. Isto é ensinado razoavelmente bem já
  • Banco de Dados Relacional Performance Tuning - Apenas projetar as tabelas não é suficiente, saber quando é apropriado índice determinados campos e quando não é, também é importante e não parece ser coberto em um monte de cursos.
  • Normalização de dados Este também parece ser ensinada razoavelmente bem em muitos casos. Embora a maioria dos estudantes parecem sair para o mundo real vomitando as teorias que foram ensinados - "Tu sempre usar Boyce-Codd Normal forma" etc, sem realmente pensar sobre as implicações dessas teorias. Às vezes, no mundo real, temos razões muito boas quebrar as regras.
  • Consulta Otimização - Escrevendo consultas básicas muitas vezes parece estar nos limites exteriores da zona graduados de conforto, otimização deve ser ensinado. Além disso, ferramentas como profilers de consulta devem ser ensinados a ajudar os alunos a depuração problemas de desempenho com aplicações.
  • Stored Procedures / Triggers - Tenho ainda de se deparar com um aluno que poderia escrever um procedimento armazenado ou gatilho ou usar qualquer um de forma eficaz. Seleciona / Joins / aninhados seleciona parece ser o limite do que é ensinado quando se trata de consulta design.
  • algoritmos básicos - Isto é ensinado farely bem na minha experiência, mas um monte de estudantes não parece ter qualquer idéia de como decidir qual algoritmos se aplicam a que situações sem ser dito "utilizando tais e tal algoritmo, resolver este problem". Seria útil se você poderia dizer, 'resolver este problema', e eles são como, bem, eu tenho uma frota de algoritmos que seria útil nesta situação, este é o melhor por causa de x, y ou z razão e aqui é como ela pode ser aplicada para proporcionar uma solução.
  • recursão - Eu ainda tenho que encontrar uma abordagem que pode ensinar a recursividade, parece que quer obtê-lo ou não. Um dia desses eu vou encontrar uma boa metáfora que vai fazer este entendido por até mesmo o programador mais básico.
  • Abstraction -. Este parece ser algo que um monte de cursos encobrir apesar de ser um dos princípios fundamentais da OOP
  • refatoração de código -. Saber quando para refatorar e quase tão importante, quando não para
  • reutilização de código - Parece que um monte de cursos são cuspir para fora cortar / colar macacos - este é não o que a reutilização de código é suposto que significa
  • Controle de Fonte - Eu não aprender sobre controle de origem até o meu 3º ou trabalho de programação 4, e eu não conheço um único engenheiro de software, pessoalmente, que aprendeu o controle de origem, como parte de seu curso. .. por que isso?
  • Backup e Restauração - Eu não ouvi falar de nenhum curso que ensina isso. Quantos programadores iniciantes perderam todo o seu trabalho, porque eles simplesmente não pensar sobre apoiando-se? Eu sei que tenho no passado - não recentemente embora. Não é que eu era ignorante de fazer o backup, mas como diz o ditado "nunca vai acontecer comigo". É irá acontecer com você, e garantiu que vai ser logo antes você tem que demonstração tudo o que você acabou de perder!
  • Arquivo Sistema de Manutenção -. Ok, alguns dos cursos encobrir este brevemente, mas muitos não o fazem
  • Escrevendo boas especificações de design de qualidade - Este parece sempre ser fornecida como uma breve de cursos, mas o estudante raramente é convidado para projetar por si próprios. Escrevendo um escopo de trabalho e modelos de documentos compreensão parece estar longe fora do escopo da maioria dos cursos de software.
  • Documentação do usuário - Os usuários não pensam como você, entregando-lhes o software que é "auto-explicativo" ou "tão simples um idiota pode usá-lo" irá explodir em seu rosto. Há um famoso ditado que "Programar hoje é uma corrida entre os engenheiros de software que lutam para construir programas maiores e melhores à prova de idiotas, eo universo tentando produzir idiotas maiores e melhores. Até agora, o universo está ganhando". documentação escrita usuário que um 8 anos de idade pode seguir - pode parecer dolorosa para escrevê-lo, mas uma vez que é feito, e sempre mais, você vai agradecer a si mesmo
  • .
  • Documentação técnica -. Ou seja Seria útil se os estudantes poderiam usar Sandcastle, NDoc ou a documentação ferramentas
  • Planejamento de Teste - projetar os testes e software que permite o teste. nUnit ou similar seria uma grande ferramenta para ensinar em cursos de desenvolvimento de software. Na verdade, o ensino qualquer testing quadro seria melhor do que não ensinar qualquer ... como parece ser o caso.
  • FAT / SAT / UAT Testing - Seria útil para compreender vários cenários de teste no mundo real, tais como checagens, testes de aceitação de fábrica e testes de aceitação do usuário. Assinar para o seu software é tão crítica como desenvolvê-lo. Se você não entregar o que o cliente pensou que eles estavam recebendo, você não está sendo pago -. Não importa o quão brilhante a sua solução está em um plano técnico
  • Arquitetura de Software -. Compreender os diferentes componentes do mundo real n-tier aplicações, vantagens e desvantagens de usá-los
  • Interação com usuários - Talvez isso não é realmente ciência da computação, mas aprender a falar com as pessoas que não são muitas vezes no seu comprimento de onda e não pensam da mesma maneira que você faz, Thé vai com a comunicação, mas é realmente desenvolvedores algo que precisa estar ciente de.
  • Common Sense - ding, ding, ding, ding - há um monte de programadores lá fora, sem um pingo de presente! Os cursos são projetados para provar que você pode pensar por si mesmo, eu não entendo por que muitos graduados entrar no pensamento do mundo real que tudo que eles precisam fazer é aplicar as regras que lhes foram ensinados cegamente sem pensar sobre as razões e implicações. Vou repetir o que eu disse anteriormente - no mundo real, por vezes, encontrar muito boas razões para quebrar as regras. Nós não segui-las cegamente, e nós não quebrá-las cegamente qualquer um. desenvolvimento de software é uma arte, e como todas as artes é preciso saber quando podemos e não pode e como importante quando deve e não deve quebrar as regras. Como um graduado, você aprendeu as regras, você já provou isso. Agora você precisa fazer o que o curso estava realmente tentando ensinar-lhe -. Aplicar o que você aprendeu a pensar por si mesmo
  • Ouvir - Você ficaria surpreso quantas vezes eu vejo o código escrito porque o desenvolvedor "pensavam que sabiam o que o cliente queria" em vez de realmente ouvir o que o usuário está dizendo e entender seu real necessidades.
  • Compreender -. Anda de mãos dadas com a escuta
  • As habilidades de comunicação
  • Conversando com o tecnicamente inepta - ou seja, uma grande parte da sua base de usuários
  • Projecto de Mediação - vender suas idéias aos escrevendo as verificações
  • Priorização -. Como decidir quais recursos são mais importantes do que outros
  • Orçamento - tempo estimativa
  • Gestão do Tempo - como fazer as coisas na hora certa, quando todos à sua volta está impedindo em seu tempo e não tem cuidado com seus prazos. Assim como quando todos os seus amigos estão querendo que você vá para o pub para uma cerveja ou dez quando você tem um pedaço de trabalho do curso que você ainda não começou devido em até o final do dia de amanhã.
  • Âmbito deslizamento -. Quando dizer, não, isso não é na especificação / orçamento

E mesmo se você se conseguem aprender tudo o que em seu curso, eu diria que você ainda aprender mais em três ou quatro meses estágio em uma de desenvolvimento de software consultoria de um callibre decente do que em todo o curso. Eu aprendi mais em meus primeiros 6 meses após o meu Bacharelado do que eu fiz no meu curso inteiro de 3 anos. É certo que eu teria plana caído meu rosto sem muitas das coisas que aprendi nesse curso, mas não havia tanto que foi ensinado desnecessariamente que poderia ter sido substituído com o conteúdo muito mais útil.

Outras dicas

A classe em que você gasta o seu verão em um software real empresa por escrito.

A sério - aulas CS não são destinadas a produzir bons programadores. Eles foram feitos para cientistas produtos de informática que, como um efeito colateral, também pode software de escrita.

Ciência da Computação! = Programação.

Se você está à procura de melhores programadores, olhar para as pessoas com educação de um programa da faculdade de 2 anos que se concentra especificamente sobre isso.

Nada supera o conhecimento adquirido através da construção de projetos, isso realmente não importa qual o curso é que, se você estiver tomando bancos de dados relacionais claro construir um projeto de sistema de biblioteca, se estiver a tomar Assembléia linguagem construir alguma coisa como PC Tools com 32 / 64 bits de montagem.

Você só pode tornar-se melhor programador fazendo "Programação" não apenas tomando cursos e obter um alto GPA.

O mais importante e relevante não são cursos de CS. Você vai precisar de se comunicar bem. Seja qual for cursos que você pode chegar a ser um melhor ouvinte / leitor e um escritor melhor / alto-falante.

  • Negócios 101
  • Office Politics 200
  • Nada é sempre acadêmica no mundo real

Na realidade, andando em um trabalho de programação que você não se espera que seja um desenvolvedor sênior do dia 1. Aprender alguns fundamentos de codificação certamente levará um longo caminho, mas no pequeno aumento, eu vejo bastante uma luta alguns de ciência da computação estudantes em o mundo real, porque eles realmente não sabem o que estão recebendo em si mesmos no dia 1. eles lutam com domínios de negócios e entender por que eles fazem o que fazem. Eles não sabem que para se comunicar com outras pessoas de negócios.

Essa é uma pergunta difícil de responder, mas uma coisa que eu acho que dificulta programadores em um monte de programas CS é a falta de hands-on de codificação. É importante saber a teoria da ciência da computação, mas eu acho que um monte de programas altamente teóricas CS cair por não exigir exercícios de programação em suas aulas. Por exemplo, eu vi um monte de aulas de IA que exigem pesquisa e jornais, mas nenhum código. Na minha opinião, é extremamente importante entender a teoria da ciência da computação, mas é igualmente importante para ser capaz de aplicá-lo.

Eu acho que o vazio de acadêmicos deve ser preenchido por organizações estudantis ou projetos de estudantes independentes.

Na minha universidade, tivemos a Association of Computing Machinery capítulo estudante especificamente para estudantes CS e também tivemos um organização estudantil dedicado ao desenvolvimento de jogos de vídeo. Estes orgs ajudou a ensinar os alunos sobre o "mundo real", trazendo em alto-falantes da indústria e obrigou os alunos a trabalhar uns com os outros.

Eu também recomendo que os alunos se formando em menor Ciência da Computação no negócio se eles estão interessados ??em grupos principais de software ou se os alunos querem se tornar mais tecnicamente habilitados que menor em Artes Liberais. Eu sei que parece estranho, mas eu fiz isso e eu descobri que ele realmente ensina você a pensar fora de uma perspectiva puramente técnica e matemática e como aplicar o pensamento humano ao desenvolvimento de software.

Eu diria que é um empate entre banco de dados de Sistemas e um curso de Projeto de Engenharia de Software. Nem curso é necessário para um curso de graduação na minha escola, mas pode ser tomado por estudantes universitários. Ter algum conhecimento de bases de dados é provavelmente mais necessário do que algoritmos para a maioria dos programadores. Trabalhando em uma equipe de projeto, mesmo em um projeto claro, pode ajudar a compreender a dinâmica da equipe e como trabalhar em um ambiente de equipe.

Por outro lado, eu acredito firmemente que uma boa compreensão de temas de ciência da computação fundamentais, incluindo estruturas de dados, algoritmos, sistemas operacionais, etc, são cruciais para preparar um para crescer como um programador.

Os dois mais relevantes para o trabalho do meu grau de Engenharia de Software da Universidade de Sheffield foram o módulo Software Hut do 2º ano, que envolveu ao longo de um termo em equipes que produzem um produto de software para um cliente real. Havia três clientes diferentes eu acho, e as equipes competiram entre si para produzir o melhor sistema para eles.

Em seguida, no quarto ano de um terço dos anos marca veio da gestão de uma empresa de software, novamente para clientes do mundo real. Embora não totalmente como correr um negócio real, devido às restrições de IP em todos os produtos que nós fizemos produtos (como ainda eram estudantes na Universidade, que possuíam o trabalho), o fez se envolver na maioria dos aspectos da gestão da empresa - barrar qualquer contabilidade / escrita contrato.

Database Design

A programação funcional

Programação Orientada a Objetos

x Impulsionada Design

A minha opinião (como Diretor de TI Inglês) é que um dia em um escritório é uma semana pena na escola e, como tal, se você pode fidn uma maneira de obter alguma experiência vai valer a pena.

Outros, que apenas estar confiante em sua abilty, jogar com seus pontos fortes e estar preparado para google qualquer coisa que você não sabe!

Se você deseja se destacar da habitual ele multidão, em seguida, garantir que você é capaz de se comunicar corretamente como é incrível como muitos 'top' graduados não pode.

Melhor programadores para fora da direita da faculdade? Até escolas começam o ensino de conceitos como a coesão, acoplamento, boas práticas de programação, controle de versão, gerenciamento de configuração, modelos de desenvolvimento modernos - Eu não penso assim. O que comumente vemos é auto alunos que desejam fazer a aprendizagem coisa certa por conta própria ou se eles são ter sorte contratado em uma organização que prega e práticas coisas boas.

Tudo depende do que você quer para o programa e que tipos de problemas você está interessado.

Obviamente, a combinação geral de

  • Discreta Matemática (sua teoria lógica, Graph, alguns teoria dos números e recorrência)

  • Algorithm Design (aprender vários modelos resolução de problemas, paradigmas de projeto, pensando em recursos do computador)

  • Engenharia de Software (gerenciamento de projetos de software, trabalhando com os componentes existentes, trabalhando com pares ou em grupo, controles de versão, padrões e assim por diante) como este

  • Programação intensivos cursos (i tomou este curso ) que ensinam idéias gerais sobre aproximando-se um problema, reunindo o seu pensamento antes de escrever uma única linha de código, exposição a diferentes paradigmas de programação

    irá prepará-lo para a maioria dos desafios de programação.

Depois disso, tudo depende do que domínio que você deseja trabalhar. Fale com seu consultor, idosos em sua faculdade e professores e falar com eles sobre seus objetivos e interesses. Eles irão aconselhá-lo melhor do que ninguém aqui pode.

No entanto, não ignore o pensamento crítico, escrevendo classes. Ter aulas que lhe permitem apresentar suas idéias e prepará-lo para falar em público.

Eu acho que o curso que eu tomei eu tenho o máximo de é Estruturas de Dados e Algoritmos . O conhecimento é independente do progresso da tecnologia, e fornece as ferramentas básicas utilizadas por programadores de todo tipo.

Uma classe que tinha requerido para que possamos construir algo como um projeto de tipos de serviços à comunidade. Isso nos obrigou a usar e aprender toda a jogada Engenharia de Software.

No entanto, a menos que o professor decide colocar alguns malucos na classe cujo objetivo é tentar fazer as coisas o mais difícil possível, um curso como este vai faltar muito ...

Estruturas de Dados e claro Algorithm, durante a minha graduação, me ajuda muito no meu local de trabalho

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top