“Ciência da Computação! = Engenharia de Software” é uma desculpa para ensinar mal a programação?

23

Todos nós já ouvimos isso; sempre que houver uma discussão sobre graduados em ciências da computação com poucas habilidades de desenvolvimento, alguém diz:

Ciência da computação não é engenharia de software.

O problema que vejo é que a programação e o desenvolvimento de software são ministrados nos cursos de CS. Eles são comumente ensinados mal. Se está sendo ensinado, por que não ensiná-lo direito da primeira vez? *

Então, eu gostaria de ver quais são as opiniões em 2 perguntas:

  1. O argumento CS! = SE é um argumento ou desculpa para não ensinar adequadamente as habilidades de programação.

  2. Independentemente da sua resposta à pergunta 1; se você estivesse na posição todo-poderosa de tomar tal decisão: você enfatizaria o ensino adequado da programação nos cursos de CS?

* Suspeito, com base em evidências anedóticas que obtive ao longo da minha educação, que a maioria dos acadêmicos da área não precisou escrever código para manter e não manter código e, como resultado, não possui conhecimentos / habilidades para ensiná-lo efetivamente.

Steve Evers
fonte
7
Vou esclarecer meu comentário; na minha opinião, eles são diferentes (CS! = SE). Portanto, se eu substituir CS e SE por 2 outros campos A, B, onde A! = B, você poderá obter algo como Bowling Lessons! = Japanese History. Então seu argumento se torna: o BL! = JH é uma desculpa para não ensinar adequadamente JH? Agora, essa é uma pergunta absurda e deve ser descartada. Se você visse um graduado em CS que não sabia por que usaria uma hashtable em uma lista vinculada, ele foi ensinado mal. Se você viu um graduado em CS que fez um péssimo trabalho no código de refatoração, isso pode ser justificado.
Jeremiah Nunn
2
@ Jeremiag Nunn: Para usar sua analogia: a história japonesa não é ensinada em conjunto com o boliche. Estou argumentando que todo programa de CS realmente ensina programação e que eles usam o argumento "CS! = SE" para se desculpar de ensiná-lo bem.
Steven Evers
2
Outro pensamento: a falta de habilidades SE em um determinado grau de CS é culpa da escola ou do aluno? Em cada classe, você provavelmente terá uma habilidade bastante ampla espalhada de competente para horrível.
Adam Lear
2
@SnOrfus Engenharia de software é a arte de construir software. A ciência da computação é a teoria por trás do software. Conhecer os dois é o ideal, mas eles ainda estão separados. Uma analogia melhor (IMO) do que a de Jeremiah seria um instrumento de construção versus tocá-lo.
dash-tom-bang
5
A nota de rodapé sobre os acadêmicos não terem que escrever código sustentável é quase exatamente o ponto. Não é disso que a CS se importa.
dash-tom-bang

Respostas:

27

Eu não acho que seja uma cópia, mas uma afirmação de que a ciência da computação não é engenharia de software, não é programação - é, bem, a ciência da computação formalizada. Em essência, é matemática (de fato, muitos programas de CS começaram como programas de matemática aplicada).

Eu acho que o problema está mais na indústria do que na academia. A indústria vê um diploma de CS listado em um currículo e pensa: "Ótimo, esse cara é bom com computadores" e o contrata para fazer qualquer coisa relacionada a um computador: TI, programação, desenvolvimento de software, o que for. Essas coisas não estão necessariamente no campo da experiência de um graduado em CS. Por sua vez, muitas pessoas que gostam de construir computadores ou jogar videogames entram em um programa de CS esperando fazer esse tipo de coisa e recebem uma surpresa rude; ou seja, muitos estudantes que ingressam no CS realmente não pertencem a esse país e estariam melhor em um programa de graduação mais direcionado.

Em segundo lugar, há um tempo muito limitado para ensinar CS - uma matéria muito ampla - em um currículo típico de graduação. Meu currículo de graduação tinha 8 cursos de CS (para um BA) ou 12 cursos de CS (para um BS), além de todos os cursos de matemática necessários. Isso não é muito tempo para ensinar CS e matemática e programação e engenharia de software, de modo que em algum ponto você tem que decidir o que é importante, eo que um estudante pode pegar por conta própria.

Esse último ponto é crucial: acho que um bom aluno - em qualquer área de estudo - explorará idéias por conta própria. Sou formado em ciências da computação, mas acho que saí da faculdade como um desenvolvedor decente, porque estudei e escrevi software sozinho . A faculdade não é só aulas; trata-se também de dar aos alunos tempo para desenvolver suas habilidades de forma semi-autônoma, enquanto ainda dão orientações valiosas.

Eu mantenho que a teoria do ensino - CS, matemática etc. - é tão importante, se não mais importante, quanto o ensino de habilidades específicas relacionadas ao trabalho. Se você ensinar a um aluno o porquê dos métodos e técnicas, e não apenas o quê , você terminará com alguém que é muito mais adaptável ao aplicar seu conhecimento. Por exemplo, fui a uma "escola Java" muito difamada e, portanto, fui ensinado em Java, mas também tive cursos de teoria da linguagem de programação, que explicavam o porquê de muitas linguagens; como resultado, aprendi a escrever um software muito melhor do que se não tivesse esse histórico. Claro, eu não escrevo software em Haskell no meu trabalho diário, mas conhecer muita teoria da linguagem de programação me permitiu ter uma ideia de quetem sido aplicável ao meu trabalho como programador.

Eu também acho que a indústria está esperando demais dos estudantes universitários. A indústria quer cortar seus próprios custos; portanto, em vez de treinar novos recrutas para seus empregos, eles esperam que as faculdades se tornem escolas técnicas / comerciais; com efeito, eles querem faculdades para fazer seu treinamento para eles. Não se espera que os graduados da faculdade saibam tudo o que há de novo na faculdade. Ser um bom desenvolvedor tem tanto a ver com a experiência quanto com o conhecimento (especialmente em um campo relativamente jovem como o desenvolvimento de software).

mipadi
fonte
Este é exatamente o meu pensamento, mas explicou muito melhor do que a minha resposta.
Jeremiah Nunn
+1: Tanta coisa boa aqui, eu odiaria escolher uma coisa, mas, considerando que o CS se originou como matemática aplicada, isso não implica a importância de sua aplicação - neste caso, programação?
Steven Evers
2
@SnOrfus: Na medida em que a programação é aplicada à matemática, sim. Mas assim como a ciência da computação! = Engenharia de software, programação! = Engenharia de software também.
Mipadi 13/10/10
1
@ David Thornley: Em primeiro lugar, eu e todos que conhecemos que usaram a física usaram um osciliscópio ao estudar ondas. Ainda assim, a analogia não se sustenta. Os alunos estão sendo ensinados a programar como parte de um diploma de CS. Você era, eu era, todos nós que assistimos a um evento inverossímil. Não era nem uma seção única de um curso. É parte integrante de pelo menos 1-2 aulas por semestre.
Steven Evers
2
+1 para explicar que a escola (faculdade, universidade, qualquer que seja) deve ensiná-lo a pescar e não apenas dar-lhe o peixe
Emiliano
25

Parte do problema aqui é o fato de que 4 anos não são tempo suficiente para se tornar um engenheiro de software sofisticado. Dado que queremos que o graduado tenha exposição a mais coisas do que apenas cursos de matemática e ciências da computação e ao fato de que há bastante mecânica pura para aprender (algoritmos, estruturas de dados, sintaxe da linguagem), não podemos esperar que uma formação em ciências verdes seja um engenheiro de software.

Concordo que o CS! = SE e eu não tenho certeza se você pode apenas ir à escola e se tornar um SE (mesmo com um mestrado)

bigtang
fonte
+! 1: Entendo o seu ponto, mas não é apenas 'polido'. Muitos não têm habilidades muito básicas.
Steven Evers
Eu acho que depende do que você considera habilidades muito básicas. Por exemplo, SQL é uma habilidade básica em minha mente, mas eu descobri que meus graduados em CS são realmente muito fracos e acho que isso é esperado. Se você está dizendo que eles são fracos na sintaxe da linguagem ou conceitos básicos de modularidade ou OOP, então isso é um grande problema e eu começar a olhar para graduados fora de diferentes escolas
bigtang
Venho programando profissionalmente há 14 anos. Examinei o SQL e posso até criar consultas básicas, mas mesmo essas habilidades básicas só chegaram no ano passado. SQL não é CS. SQL é uma implementação da teoria de banco de dados, que é CS.
Dash-tom-bang
@ dash-tom-bang: Você consideraria básico as declarações de fluxo de controle em linguagens imperativas? Eu posso confirmar que existe um diploma de graduação em ciências da computação que não conhece a maioria deles.
Steven Evers
Eu não consideraria a implementação do controle de fluxo em nenhuma linguagem específica entre os "princípios básicos da ciência da computação". No entanto, se alguém não entende o controle de fluxo como um conceito, então não aprendeu a CS.
traço-tom-bang
10

CS não é, de fato, SE. E as pessoas parecem confundir os dois o tempo todo, mesmo admitindo isso. A ciência da computação deve realmente ser renomeada como Computologia, ou a ciência da computação. De fato, a ciência da computação tem muito pouco a ver com computadores. É teoria dos grafos, análise de algoritmos, estruturas de dados, etc.

As pessoas querem assumir que um novo diploma de CS é realmente um diploma de ITT; eles querem alguém que tenha sido treinado em uma vocação. Ciência da computação é ciência, programação é uma arte. Estes não são os mesmos.

É como perguntar por que um recém formado em Física não é um bom engenheiro de automóveis. Isso é bobagem.

Jeremiah Nunn
fonte
2
Programar é um ofício, não uma arte.
traço-tom-bang
6
Programação é artesanato, engenharia e arte.
Maciej Piechotka 13/10/10
2
Eu não iria mudar o nome. O que é Ciência da Computação, mas a ciência dos computadores? em outras palavras, o estudo das máquinas de calcular, o que implica o estudo do cálculo.
Michael K
1
Deve ser renomeado porque as pessoas confundiram isso como você. você conhece Edsger W. Dijastra? ele disse uma vez: "a ciência da computação não é mais sobre computadores do que a astronomia é sobre telescópios". :)
vaias
1
A arte cria beleza; artesanato cria utilidade. A arte é criada por sua beleza; artesanato é criado por sua utilidade. A arte pode ser útil; artesanato pode ser bonito. Engenharia de software cria utilidade; portanto, a engenharia de software é um ofício.
systemovich
8
  1. Pelo menos nos Estados Unidos, a educação como um todo tornou-se lucro. As escolas estão enfraquecendo o currículo em geral para aumentar as matrículas. Há mais pessoas na faculdade que não pertencem a ela do que nunca. Aprender técnicas adequadas não é algo que você possa ensinar com facilidade, para que não aprendam.
  2. Pessoalmente, eu colocaria mais ênfase no SE do que normalmente existe, mas acredito que o CS como um programa é menos apropriado para pessoas que desejam ingressar na indústria. Eu acho que mais instituições deveriam oferecer um programa prático de SE.
ChaosPandion
fonte
+1 para o número 1. Percebi isso quando fui para a escola. Era uma escola com fins lucrativos e eu senti que muitos dos alunos não estavam qualificados para estar lá. Além disso, a escola só recebia dinheiro por curso e, na falta de um aluno, significava que eles não recebiam mais dinheiro com eles, e muitas vezes os professores se esforçavam para aprovar os alunos. Tínhamos pelo menos uma pessoa formada, que eu acho que nem poderia escrever um programa Hello World em sua escolha de idioma!
Rachel
desde que você tocou no sistema educacional dos EUA e no papel do lucro, aqui está um coral obrigatório de Milton Friedman: youtube.com/watch?v=W3Seg0JE1PM
Job
7

O argumento CS! = SE é um argumento ou desculpa para não ensinar adequadamente as habilidades de programação.

Não. CS não é SE. Isso é um fato, não uma desculpa.

Independentemente da sua resposta à pergunta 1; se você estivesse na posição todo-poderosa de tomar tal decisão: você enfatizaria o ensino adequado da programação nos cursos de CS?

Não. Seria como forçar os astrônomos a aprender os detalhes da construção de telescópios. Ou forçar os programadores a aprender os detalhes da construção de computadores. Coisas relacionadas, mas um homem não precisa saber tudo.

Joonas Pulakka
fonte
6

Sim, isso me parece uma bobagem e um sinal da imaturidade do CS como disciplina acadêmica.

Um programa de BS credenciado pela American Chemical Society exige que você tenha passado em cursos específicos para demonstrar uma proficiência específica em teoria (aulas de aula) e prática (aulas de laboratório). Atualmente, CS não tem nada disso, até onde eu saiba.

Um dos meus professores de pós-graduação era um teórico de torre de marfim, cujo escritório nunca foi manchado com algo mais fisicamente químico do que um aquário com Magic Rocks, mas quando eu era seu assistente de química para calouros, ele também provou ser um químico de bancada bastante competente .

Quando eu trabalhava como químico industrial de tintas, eles riam da idéia de que eu era bacharel e seria incompetente no laboratório. É claro que os detalhes do que eu estava fazendo no laboratório eram diferentes do que eu tinha nas aulas de laboratório na escola, mas os princípios eram os mesmos - nós apenas usamos um misturador de tinta e uma lata, em vez de um copo e agitador magnético. .

Se alguém aplicasse a mesma abordagem ao CS, os detalhes do que alguém poderia ensinar como habilidades práticas de desenvolvimento de software para um currículo de CS / SE podem variar de escola para escola e ao longo do tempo. Mas parece loucura para mim que é aceitável que alguém possa se formar em campo e não seja competente para escrever, depurar e manter algum tipo de código. (Claro, é assim que as coisas realmente são em muitos programas de CS, mas ainda é uma loucura.)

Bob Murphy
fonte
Não é loucura, é uma epidemia. Cerca de 90% do código que eu vi escrito por meus colegas é tão sustentável quanto a torre inclinada de Pisa.
Marcel Valdez Orozco
5

Concordo que 4 anos é apenas tempo suficiente para dar-lhes uma boa base sobre a qual crescer. No entanto, acho que uma coisa que realmente ajuda é quando pessoas da indústria se envolvem no desenvolvimento do currículo e até no ensino na sala de aula. No ano passado, fui bolsista da indústria em uma aula de desenvolvimento de software em uma universidade local. Foi uma experiência muito reveladora para mim. O professor e eu trabalhamos juntos no conteúdo do curso e colocamos muito mais informações sobre o processo de desenvolvimento, as melhores práticas do setor e as situações do mundo real, como antes. O que descobrimos foi que, como a maioria dos instrutores não desenvolve código amplamente usado e mantido, trazer alguém da indústria ajudou a identificar e ensinar as habilidades necessárias para fazer isso.

Beth Whitezel
fonte
Eu adoraria tentar algo assim.
ChaosPandion
Você deve entrar em contato com a universidade local e ver se eles têm algo parecido. Onde você está localizado?
Beth Whitezel
3
  1. Sim, é uma copa 100%, eles devem ensinar habilidades de longo prazo que serão úteis ao longo de nossa carreira. Se sua intenção é ou não entrar na academia ou no setor, você precisará ser capaz de programar de uma maneira que possa ser mantida, mesmo que seja apenas por si mesmo.

  2. Sim, embora apenas seja enfatizado nos cursos adequados. Pessoalmente, se eu tiver que falar com você para entender melhor como você tentou implementar um algoritmo, eu anotaria sua nota.

Mesmo se você fizer uma pesquisa pura em CS, provavelmente precisará criar um código para demonstrar suas idéias. As habilidades apropriadas de programação serão úteis para você em algum momento; por que não começar na faculdade?

JustJohn
fonte
As habilidades de longo prazo são o CS. "Java" não é uma habilidade de longo prazo, nem .NET, SQL, Pascal ou COBOL. A menos que por "longo prazo" você queira dizer "fique feliz por ter um emprego quando eles precisarem de alguém para manter esses sistemas legados".
traço-tom-bang
Embora eu concorde que as habilidades básicas (CS) sejam necessárias, refiro-me à escrever um código que possa ser mantido e fácil de ler, independentemente da linguagem de programação em que está escrito. Portanto, habilidades de longo prazo significam que vão além das tecnologias utilizadas.
JustJohn
1
O IMHO CS é necessário para ser capaz de abordar problemas mais complexos, muitas pessoas por aqui não precisam de um diploma de CS para escrever código, mas se você precisar lidar com uma matriz de 10x10 milhões de dados e manipulá-lo, não consigo entender como um SE pode lidar com isso sem um diploma de CS.
boos
3

Penso que o nosso problema é que somos muito mais parecidos com médicos do que estamos dispostos a admitir ... Temos a ideia de que um diploma de quatro anos deve preparar os alunos para escrever software. Não é nem perto.

Nossa profissão é amplamente iniciada em comparação com outras disciplinas. Talvez a pergunta deva ser: como podemos melhorar o CS para que os alunos que se formam com esse diploma sejam mais adequados para se tornarem membros produtivos de uma equipe de desenvolvimento de software do mundo real em um período de tempo muito menor?

Talvez devêssemos ser mais como remédios. Quatro anos de trabalho básico (grau CS) e, em seguida, residência - prática da embarcação sob a supervisão de um engenheiro de software mais experiente. Talvez seja isso que já temos, mas é menos formal ... Quero dizer, como um residente, aprendemos nossas habilidades mais valiosas no local de trabalho em nossos primeiros empregos.

Talvez como disciplina, apenas precisamos formalizar isso melhor.

Chris Holmes
fonte
Ou um programa de Mestre Artesão / Aprendiz
Austin Salonen
1
O programa MD não é um programa científico. Você quer estudar a ciência, você toma biologia. Se você tem um problema médico, não o leva a um biólogo.
David Thornley
Essa é uma ideia muito boa: formalizar o fato de que a Engenharia de Software também é uma questão de experiência. O mesmo se aplica para os advogados e médicos
Emiliano
Mas do que estamos falando David? Quantos de nós se formam em CS e depois passam nossas carreiras fazendo "Ciência da Computação"? O que a maioria de nós realmente faz é sair para o mundo e praticar o ofício de Desenvolvimento de Software. É o mesmo que um médico: eles "praticam" medicina. Praticamos a construção de aplicativos.
21810 Chris Holmes
@ Chris Holmes: Estou realmente irritado com a idéia de que um diploma de CSci deveria transformá-lo em um programador pronto para contratar um trabalho usando a linguagem mais recente. Há muito espaço para esse tipo de diploma ou certificado, provavelmente muito mais do que o CSci real. Eu acho que o desenvolvimento de software é análogo ao exercício da medicina aqui, mas você não obtém seu MD nos departamentos de biologia ou psicologia, mas sim na faculdade de medicina. É um diploma muito respeitado, mas não é doutorado.
David Thornley
3

Sou formado em ciências da computação e, durante um ano inteiro do meu programa, não houve programação, apenas teoria. Disseram-nos que não estamos nos formando em programação, mas em Ciência da Computação. Se você quer ser programador, vá para a faculdade comunitária.

Aprendemos sobre algoritmos, padrões de design e muita teoria sobre a solução de problemas sem uma linguagem específica. As linguagens de programação vêm e vão, mas a teoria subjacente permanece a mesma.

Portanto, na sua primeira pergunta, não, não acho que CS! = SE seja uma cópia. É um fato.

Para sua segunda pergunta, não, acho que não. Como você ensina programação corretamente? Além de loops, ifs, métodos, classes e OOP, o que seria 'programação adequada' e como você a tornaria relevante para qualquer linguagem de programação existente? Você precisa ter experiência em escrever código, algo que um diploma de 4 anos não pode preparar você.

Uma coisa que eu faria seria fornecer uma aula sobre desenvolvimento no mundo real. Controle de origem, rastreamento de tickets / bugs, rastreamento de código e tudo o que jazz seria um bom começo para preparar todos os graduados em breve para o que enfrentarão em seus novos empregos.

Acho que depende de nós quando contratamos um novo graduado para entender que eles provavelmente não vão escrever um código premiado. Eles precisam de orientação e direção.

Tyanna
fonte
++ - excelentes pontos. Seria bom se os currículos de CS oferecessem uma ou duas aulas sobre esse "mundo real", eu concordo. Nós conversamos sobre isso na minha universidade (em 1993), mas nunca foi a lugar nenhum.
traço-tom-bang
Como você deveria demonstrar sua proficiência nas aulas que compunham o ano de não apenas teoria de programação? Exames puramente escritos?
Carson63000
@ Carson630000 - tarefas escritas, algumas vezes escrevendo diagramas de estado, às vezes escrevendo ensaios indicando como abordaríamos e resolveríamos um problema ou como aplicaríamos vários conceitos de CS. Isso nos forçou a entender a teoria e não uma linguagem de programação específica.
Tyanna
2

É importante que a universidade encontre um bom equilíbrio entre o conhecimento teórico e as habilidades práticas. Enquanto participava de cursos diferentes, aprendi os dois. Durante os primeiros anos, houve muitas estruturas matemáticas e de algoritmos / dados. O que se seguiu foi uma escolha: você poderia continuar aprendendo ciência da computação (tipo de caminho artístico, onde poderia, por exemplo, frequentar cursos com sofisticados algoritmos de correspondência de cordas) ou se concentrar em engenharia de software. Você ainda precisava obter um sólido histórico de programação durante esse período.

Eu escolhi a engenharia de software, porque nunca estava muito interessado em problemas abstratos. Mas mesmo aqueles que gostavam de pura ciência da computação precisavam:

  • programe um sistema de arquivos pequenos no espaço do usuário, crie um linuxmódulo do kernel e modifique o próprio kernel, escreva um jogo orientado a objetos puro SmallTalk,
  • escreva um protocolo de comunicação próprio e depois implemente um escolhido pelo professor (foi muito legal, quando os programas de dois alunos pudessem se comunicar facilmente, embora não colaborassem antes),
  • crie um projeto maior Javaem uma equipe de quatro,
  • construir algum projeto de programação funcional,
  • escreva vários programas sólidos Cpara programação paralela (as idéias eram abstratas, mas as revisões eram bastante duras, como perder pontos por não fornecer saída adequada, quando o programa falhava, como um bom unix programdeveria fazer),
  • criar um portal da web usando alguma estrutura da web (escolhemos django, o que me fez amar essa estrutura),
  • crie um programa bastante grande usando LAMP(ainda tenho pesadelos php, mas usei em postgresqlvez disso MySQLe estou muito feliz em saber disso DBMSagora),
  • e se alguém escolhesse, ele poderia escrever um programa para sua tese de mestrado - eu escrevi o pythonprograma desktop de 10k linhas usando PyQt.

Talvez houvesse outros projetos, mas eu simplesmente os esqueci agora.

O que quero dizer é: tudo depende da escola. Não gosto muito da abordagem pura de engenharia de software, onde Javaé o idioma principal. Eu tive que ajudar um amigo uma vez, que freqüenta essa escola e tive que escrever um programa para programação paralela. Eu tive que escrever para ele basicamente, porque ele, sizeof(some_string)no entanto, Cdá o comprimento da corda.

Serei honesto: eu odiava matemática, estava com dor, quando tive que me preparar para tarefas abstratas, que seriam servidas em exames de algoritmos / estruturas de dados. Mas isso me dá uma certa vantagem: consigo pensar de uma maneira muito abstrata. É como quando você aprende artes marciais e não guarda (pelo menos naquelas onde você deveria). O treinador continua chegando e batendo na sua cabeça, quando você abaixa as mãos, porque você esqueceu ou porque está cansado demais para mantê-las. Mas depois de algum tempo, você apenas os mantém. E fica muito difícil acertar você na cara. O mesmo acontece com problemas algorítmicos abstratos. Entenda o conteúdo da Introdução aos algoritmos e realmente poucas coisas surpreenderão no trabalho.

gruszczy
fonte
Parece um bom programa. Alguma teoria. Muita prática.
Mike Dunlavey
1

Eu acho que a resposta é sim (de certa forma).

O fato é que não é possível ensinar às crianças em um curto período de tempo programando. Devem ser pensados ​​o raciocínio lógico dos programadores, como resolver (em menor escala) os problemas do programador.

Estou certo de que os programas da escola devem ser revisados, meu pequeno país do "terceiro mundo", felizmente, um esforço está sendo feito para que isso aconteça. Nós somos o primeiro país a implementar o programa OLPC; http://laptop.org/en/

Trufa
fonte
1

Da minha própria experiência (sou estudante no momento), tenho que dizer que sim, é uma desculpa. Todo mundo se refere ao CS como uma ciência que nos ensina todas as noções básicas de computadores e o SE como um ramo especial no CS que ensina explicitamente a programação. Imo, todo mundo que tem BS no CS, precisa saber como escrever código bom e otimizado (mesmo que a programação não seja sua área de especialidade). Então, sim, se eu tivesse uma posição onipotente de tomar essa decisão, forçaria os alunos a adquirir boas habilidades de programação.

Ilija Eftimov
fonte
Meu diploma é intitulado Engenharia da Computação e Software e foi criado para oferecer o melhor dos dois mundos, ou seja, ser um programador competente e conhecer a teoria o suficiente para ser capaz de seguir para a faculdade ou para a pesquisa. Eu acho que foi uma boa abordagem.
Michael K
1

Assumindo que o objetivo é educar bons engenheiros de software (programadores) porque o mundo precisa deles, não há problema em responder dizendo o que acho que deveria ser ensinado?

Primeiro, isso é importante porque atualmente a transferência de conhecimento é muito ineficiente. Quando os programadores em potencial estão nas aulas, suas mentes estão abertas e absorvem o que aprendem. Ao mesmo tempo, os professores (eu fui um) com demasiada frequência estão mais interessados ​​em preencher o canal da pós-graduação com alunos que podem trabalhar em assuntos esotéricos. Quando se levanta a objeção de que os estudantes não estão sendo preparados para problemas do mundo real, vi professores afirmarem que esse não é o trabalho deles . Esse é o trabalho do mundo real.

Então, quando os alunos se tornam programadores no mundo real, eles estão ansiosos para aprender com seus novos colegas? Não na minha experiência. Antes, eles estão ansiosos para espalhar o evangelho que adquiriram na escola. Lembro-me, como estudante e jovem praticante, de pensar como seria difícil promover novas idéias entre os velhos peludos por aí. Agora que sou velho, vejo como é difícil abrir os olhos dos novos programadores para a diferença entre teoria e prática.

Eu era estudante de engenharia, em engenharia mecânica e, posteriormente, elétrica. Uma parte fundamental disso foi a) fundamentos matemáticos eb) solução prática de problemas. A engenharia de software deve ser assim, não apenas a programação.

Eu acho que a engenharia de software (programação) deve ser ensinada com ciência da computação suficiente para ser um conhecimento prático - teoria básica de autômatos e teoria da informação. Isso não precisa ser feito em grande profundidade. Depois que as habilidades básicas de programação são ensinadas, deve haver projetos cooperativos de tamanho não trivial. Uma parte essencial disso deve ser a proposta e a consideração de soluções alternativas de problemas específicos, com análise de prós e contras, não apenas a religião mais recente ou a "próxima grande coisa" ou o modelo único. Por fim, deve haver cooperação e parceria entre a indústria e a academia, para que idéias e melhorias possam ser comunicadas nos dois sentidos, melhorando bastante o controle de qualidade.

Mike Dunlavey
fonte
0

Aqueles que podem, fazem; aqueles que não podem ensinar.

Na minha universidade, a base de conhecimentos dos professores é extremamente deficiente. Vi professores lutando para entender como representar tabelas semiestruturadas em XML enquanto mantinham um PHD em Design de Banco de Dados. Eu vi meu professor de montagem me perguntar o que meu código está fazendo quando foi copiado e colado o trecho de código dele. Eu já vi meu professor de design de software nos dizer que o método Agile é o mesmo que o método em cascata, apenas mais rápido, que o modelo de processo de desenvolvimento iterativo possui e pode ter apenas três iterações, porque é essa a imagem que o livro usa como exemplo. Um dos meus professores nem sabia o que era uma declaração elseif.

Não acredito que eles estejam "dando um jeito" ou dando desculpas, acredito realmente que estão fazendo o melhor que podem com suas experiências, das quais têm muito poucas.

Concordo com as outras pessoas que postam aqui que 4 anos não são suficientes para se tornar um programador experiente, mas a experiência que meus professores tiveram também não é suficiente para torná-los experientes. É como em Ender's Shadow, onde Bean percebe que as métricas usadas pelos professores na escola de batalha ficam aquém porque a última guerra, que é a regra dos guias, era muito curta para mostrar realmente o que é realmente necessário. Em outras palavras, os professores estavam fazendo o melhor que podiam, mas não tiveram a experiência necessária para saber o que é realmente necessário para se tornar um bom comandante (ou um bom programador neste caso).

Malfist
fonte
3
Acho que muitos de seus exemplos são obviamente apenas casos em que seu professor está tentando simplificar as coisas para seu próprio benefício. Those that can, do; those that cannot, teach.Também não concordo com isso: carreiras acadêmicas e industriais levam a estilos de vida completamente diferentes. Grande parte da pesquisa mundial vem de acadêmicos. E não vejo como você respondeu à pergunta original.
Ninguém
2
O que o XML tem a ver com o design do banco de dados, além do fato de que, se alguém estivesse tão desinteressado em desempenho, poderia usar o XML como armazenamento de suporte para um banco de dados? Para não dizer que alguns professores podem perder o objetivo (lembro-me de discutir com um instrutor sobre pontos removidos devido a "comentários excessivos" quando o currículo até aquele momento ensinava "comentários como o vento"), mas é meio exagerado. Se alguém quiser aprender Java, há maneiras mais baratas de fazê-lo do que passar por um currículo de CS.
traço-tom-bang
1
Há também o fato de que algumas universidades são piores que outras, e a sua pode ter um departamento de CS particularmente ruim. Tradicionalmente, as pessoas com pós-graduação em CS conseguiram ganhar muito mais dinheiro na indústria do que na academia; portanto, as pessoas na academia eram as que realmente queriam estar lá e as que não conseguiam manter um emprego no mundo real. Eu já vi os dois e suspeito que a proporção varia entre as universidades.
precisa
@ dash-tom-bang, XML é um exemplo quase perfeito de bancos de dados semiestruturados. en.wikipedia.org/wiki/Semi-structured_model
Malfist 15/10/10
1
O XML usado assim ainda é uma implementação de uma teoria de banco de dados. Não é ela mesma a teoria.
traço-tom-bang
0

Cientistas da computação e engenheiros de software são diferentes. O cientista é o pessoal que realiza os experimentos malucos e apresenta os algoritmos que nós, engenheiros de software, utilizamos para melhorar.

Pense em químicos realizando experimentos para uma empresa farmacêutica. Eles não se importam em como produzir o produto químico em massa. Tampouco se importam com marketing, embalagem, distribuição ou qualquer coisa que aconteça com o medicamento depois de descobri-lo. Inferno, eles nem se importam com o processo de certificação. Eles só se preocupam em encontrar um produto químico que tenha efeito quando administrado aos sujeitos do teste. A empresa é responsável por ir além disso.

Os cientistas da computação são como esses químicos. Tudo o que eles fazem é testar teorias com código. Eles não se importam com a manutenção do código. Eles provam uma teoria e passam para a próxima. Outra pessoa empacota esse algoritmo e o torna útil para as massas, e nós temos MP3 ou visão computacional com o Kinect ou streaming de vídeo no seu iPhone. Portanto, CS! = SE é um argumento válido.

Escreva a segunda parte da sua pergunta. Se eu oferecesse uma licenciatura em Teoria da Música, poderia haver um curso obrigatório de composição ou algo assim, mas não exigiria que ninguém estudasse um instrumento. Cabe ao aluno procurar o conhecimento que deseja. Ciência da Computação não é Engenharia de Software ... se você quer aprender SE, faça um curso duplo.

Michael Brown
fonte
0

Edsger Wybe Dijkstra era um cientista da computação holandês.

Ele recebeu o Prêmio Turing de 1972 por contribuições fundamentais para o desenvolvimento de linguagens de programação , uma vez disse:

"CIÊNCIA DE COMPUTADOR NÃO É MAIS SOBRE COMPUTADORES DO QUE ASTROMIA É SOBRE TELESCÓPIOS."

CS é REALMENTE DIFERENTE DE UM SE. (CS! = SE).

Um CS é um cientista que adquiriu conhecimento de CIÊNCIA DO COMPUTADOR.

CIÊNCIA DO COMPUTADOR ou ciência da computação (CS às vezes abreviado) é o estudo dos fundamentos teóricos da informação e da computação e de técnicas práticas para sua implementação e aplicação em sistemas de computadores. É frequentemente descrito como o estudo sistemático de processos algorítmicos que criam, descrevem, e transformar informações.

A ciência da computação tem muitos subcampos, por exemplo:

  • Ciência da computação teórica
  • Teoria da computação
  • Algoritmos e estruturas de dados
  • Arquitetura e elementos do computador
  • Multiprocessamento
  • Ciência computacional
  • Inteligência artificial
  • Sistemas de software

Muitos de nós não precisamos de nenhuma dessas habilidades no trabalho diário ou pelo menos um pouco delas.

O ENGENHEIRO DE SOFTWARE (SE) é uma profissão dedicada ao design, implementação e modificação de software, para que seja de qualidade superior, mais acessível, sustentável e mais rápida de construir. É uma "abordagem sistemática para a análise, projeto, avaliação, implementação, teste, manutenção e reengenharia de um software, aplicando engenharia ao software"

Como um conhecimento de CS, ele deve ter o conhecimento necessário para gerenciar problemas complexos reais sem conhecer uma linguagem de programação realmente boa. IMHO aqui podemos abrir outro tópico, onde um GRAU para mim é apenas um ponto de partida e não um objetivo final.

Como conhecimento de SE, ele deve ter o conhecimento necessário para gerenciar a produção desse problema complexo real e gerenciar o desenvolvimento de uma equipe ou projeto sobre esse campo.

Juntos, fazer a pesquisa em ciência feita por um CS em Ciência aplicada, com a ajuda de um SE.

Não quero dizer que CS é melhor que SE, quero dizer CS! = SE.

Esse tipo de pergunta é a mesma pergunta que pessoas que não são de computadores perguntam a si mesmas quando perguntam por que, como programadores, você não é capaz de resolver por telefone o problema do programa X, Y, Z no sistema operacional J, M, N. ;)

Na verdade, eu estou realmente entediado de codificar depois de 10 anos de desenvolvimento de sistemas unix no campo da segurança e depois de ler essa pergunta, entendi o ponto, preciso estudar mais ciência da computação e menos linguagem e sistema ou protocolo de computador!

Ninguém no meu trabalho pode lidar com a diferença entre SE e CS! é realmente uma coisa ruim.

Se você acha que um CS pode ser uma desculpa para uma péssima habilidade de programação, você realmente não entende o que é um CS e o que é SE.

Suponho que você seja um SE, você sabe, por exemplo, que toda a linguagem, todo paradigma e todas as coisas relacionadas à linguagem do computador podem ser expressas matematicamente em um conjunto de funções recursivas parciais e o que você aprende em um novo idioma, QUALQUER NOVA LÍNGUA, você é apenas aprendendo uma nova abstração sobre a mesma função parcial recursiva?

diverta-se :)

vaias
fonte