Preenchendo a lacuna entre pesquisa em ciência da computação e engenharia de software [fechado]

8

Você acredita que existe uma lacuna entre a pesquisa em ciência da computação e os problemas de engenharia de software? Por exemplo, os engenheiros de software precisam se preocupar com "fatoração e isomorfismo de gráficos" ou com alguns problemas complexos de ciência da computação, se necessário ... digamos, construir um site de carrinho de compras? Provavelmente não.

E se houver uma desconexão entre a ciência da computação e os engenheiros que constroem aplicativos? É assim que a engenharia e a ciência devem existir? Os engenheiros mergulharão em anos e anos de trabalhos de pesquisa para resolver um problema específico que eles têm?

Edit-1: Depois de pensar sobre isso, a ciência geral provavelmente tem o mesmo problema. Estou certo de que existem químicos de ponta que trabalham em empresas como McDonald's e Taco Bell que têm a tarefa de fazer um hambúrguer melhor e mais fácil de fabricar.

berlinbrown2
fonte
Que lacuna? Se você deseja posse e subsídios, preocupa-se com "isomorfismos de fatoração e grafismo" como você o coloca e se deseja criar um site de carrinho de compras, preocupa-se com cookies e dados da sessão. Que lacuna existe para preencher?
Davidk01:
Definitivamente, você deve se preocupar com gráficos e coisas assim, se estiver criando algum tipo de fluxo de trabalho (incluindo um carrinho de compras ou qualquer coisa igualmente comum). Caso contrário, seu fluxo de trabalho poderá se tornar inutilizável e incompreensível para os mantenedores e seus usuários finais.
SK-logic

Respostas:

10

Na maioria das posições de engenharia de software, os problemas fundamentais da ciência da computação raramente aparecem, por um de dois motivos:

  • Eles foram resolvidos pelas ferramentas que você usa. Os exemplos são algoritmos de análise da linguagem de programação que você usa pelo compilador, algoritmos de agendamento para os aplicativos executados pelo sistema operacional, resolução de consultas no banco de dados usado, etc.
  • Eles simplesmente não são cruciais para o que você está tentando alcançar. Não porque eles não ajudariam, mas porque a tarefa mundana de automação é muito mais importante que a versão otimizada máxima.

A razão pela qual tantos engenheiros de software estão construindo sistemas de informação triviais do ponto de vista teórico é simplesmente porque eles são necessários. A maneira como nosso mundo é automatizado atualmente é provavelmente inferior a 0,01% do que poderia ser alcançado. Portanto, nas próximas décadas, provavelmente construiremos principalmente sistemas e interfaces de informação. Quando tivermos esses problemas, alguns problemas fundamentais começarão a aparecer.

Atualmente, esses problemas existem, por exemplo, com relação à escalabilidade, segmentação etc., mas são simplesmente uma parte extremamente pequena de tudo o que precisa ser feito. Portanto, a razão pela qual as empresas estão construindo sistemas de informação relativamente triviais é porque (1) as pessoas precisam deles e (2) é muito mais fácil (e mais lucrativo) do que resolver problemas fundamentais.

Deckard
fonte
1
"A maneira como nosso mundo é automatizado atualmente é provavelmente inferior a 0,01% do que poderia ser alcançado." Era isso que eu estava pensando. Parece lamentável que toda essa ciência, pesquisa e gênio avançados possam se perder porque estamos construindo aplicativos que basicamente pegam dados de um formato e os colocam em um banco de dados.
berlinbrown2
3
@ Berlim, acho que esse é o problema que as estruturas estão tentando resolver. De qualquer maneira, estamos nos movendo na direção certa. Pense em quanto gênio, etc., costumava obter registros de arquivo desperdiçados em armários!
Ethel Evans
6

Você acredita que existe uma lacuna entre a pesquisa em ciência da computação e os problemas de engenharia de software?

Minha experiência é que o desenvolvimento de software comercial / prático fica atrás da pesquisa acadêmica entre 5 e 30 anos ou mais. Um dos prazos mais rápidos, de um artigo acadêmico inovador a um produto de remessa comercial, foi o SQL. O documento foi publicado em 1969, a IBM e outros gastaram muito tempo e esforço tentando tornar produtos viáveis, e o primeiro produto comercialmente viável foi o Relational Software - a empresa agora chamada Oracle.

Linguagens funcionais foram desenvolvidas por pesquisadores na década de 1960. Quantos são de uso comum hoje? Alguns. Atualmente, eles estão obtendo muito mais uso do que fora das paredes cobertas de hera das universidades. Mas levou três décadas para fazer isso.

Os engenheiros mergulharão em anos e anos de trabalhos de pesquisa para resolver um problema específico que eles têm?

Sim. Eu faço isso o tempo todo. Quando trabalhei em uma empresa que criava redes de área de armazenamento, muitos dos produtos que começaram a ser enviados foram descritos em trabalhos de pesquisa publicados 5-6 anos antes.

Outro exemplo envolveu um problema chamado "correspondência do paciente". Os seres humanos são bons em olhar para coisas como Chem. Dept.ouDepartment of Chemistrye determinar essas coisas são idênticas. A maioria dos algoritmos tem um tempo terrível para determinar essas coisas. Eu estava trabalhando em uma empresa que lidava com prescrições eletrônicas de medicamentos, relatórios de laboratório e reivindicações de seguro. Teria sido útil poder (anonimamente) ser capaz de ter dados de longo prazo cobrindo a eficácia e a eficácia dos tratamentos para os pacientes. Tal coisa precisaria depender da capacidade de determinar a proximidade das strings. Durante a década de 1990, a maioria dos pesquisadores dessa área desapareceu no projeto Genoma Humano, e a maior parte de seu trabalho desapareceu da Web (com NDAs e propriedade intelectual, tudo o que essas pessoas inventaram desaparece da Web quando vão trabalhar para a indústria privada). Após o 911, os nomes correspondentes se tornaram um problema de "segurança nacional" (existem cerca de 25 maneiras de escrever Mohammed em inglês, e cerca de uma dúzia de maneiras de soletrar Osama) e muitas das demais também desapareceram. Então uminventor / empresa tinha um produto que permitia combinar pessoas e relacionamentos chamados " analisador de relações não óbvias " que acabaram desaparecendo em um complemento para o DB2. Você terá que cavar bastante papéis. Talvez não, se você fizer carrinhos de compras, mas é bastante comum fazê-lo em outros projetos.

Tese: Detecção adaptativa de registros de banco de dados aproximadamente duplicados e a abordagem de integração de banco de dados à descoberta de informações .
Biblioteca que implementa algumas das funções da tese .

Tangurena
fonte
Boa resposta e você conectou uma tese real a um aplicativo. Eu ainda argumento que essa não é a norma para a maioria das tarefas de desenvolvimento de engenharia de software por aí. Como você disse, acho que o desenvolvimento de software pode estar anos ou décadas atrás de pesquisas que estão por aí. E isso é para tarefas interessantes como 'pesquisa no google' ou aplicativos biométricos.
berlinbrown2
Isso não é verdade. Por exemplo, sistemas de recomendação, análise de cestas de mercado, etc., todos surgiram de pesquisas fundamentais em ciência da computação usando o Teorema de Bayes e isso não levou mais de 30 anos.
Mushy
4

Os cientistas acadêmicos da computação são muito bons com o seguinte:

  1. Análise de algoritmos
  2. Conhecimento de estruturas de dados padrão.
  3. Teoria dos autômatos

Todos os itens acima são úteis para a engenharia de software. De fato, seria indispensável ter pelo menos um cientista da computação em uma equipe de engenharia de software.

No entanto, a maneira como a ciência da computação é ensinada e as regras de acreditação da ABET exacerbam o problema (se puder ser chamado de problema). Os cientistas da computação não têm muito conhecimento sobre as principais áreas de engenharia de software.

  1. Pegada RAM de um software e impacto que isso pode ter no desempenho do software.
  2. Engenharia de manutenção de software. Eles não apreciam o fato de 80% dos trabalhos de software estarem na manutenção de software, que é o maior componente do custo de software.
  3. Como trabalhar perto do hardware. Isso é necessário quando você vê o sistema inteiro como uma combinação de hardware e software e otimiza o sistema para ver como otimizar os dois para obter a melhor funcionalidade.
  4. Inventar procedimentos de teste, implementação e manutenção de software novos, rápidos e confiáveis.
  5. Documentação de software, treinamento de clientes e documentação relacionada.
  6. Engenharia de segurança do sistema.

Eu posso continuar, mas acho que fiz o meu ponto.

Hoje, a engenharia de software é uma disciplina própria, que se empresta da ciência da computação, mas está impulsionando a tecnologia e a vida humana hoje. Você realmente precisa do cérebro de um engenheiro para se destacar nele. Nem todos os cientistas da computação são ótimos engenheiros de software. É claro que o inverso também não será verdadeiro.

Satish Singhal
fonte
o que é "ABET"?
Gnat #
Discordo. Obter conhecimento do desenvolvimento de software não é algo alto e distante como você pensa ser. Tenho mestrado em ciência da computação e não me falta conhecimento nas principais áreas de engenharia de software. Atualmente, a maioria dos engenheiros de software está graduada e aprender novos conhecimentos é fácil ... provamos que podemos aprender!
Mushy
2

Na verdade, eu argumentaria que, para construir um bom site de carrinho de compras, é absolutamente necessário empregar algoritmos difíceis.

Digamos que você deseja prever comportamentos do usuário com base em compras anteriores. Isso vai demorar muito mais do a+b=cque efetivamente. Que tal hábitos de compra baseados em vários fatores diferentes, como idade, sexo, localização geográfica etc.?

Na minha própria linha de trabalho, há o uso diário de algoritmos complexos na renderização, IA, etc.

Em resumo, se você pensa em um recurso específico (ou seja, apenas em um carrinho de compras), provavelmente está pensando em implementações ruins. Comece a pensar em implementações do Google ou da Amazon e tenho certeza de que começará a ver onde seria útil (ou necessário) conhecer ou pelo menos estar familiarizado com algoritmos complexos.

Demian Brecht
fonte
Sim, algoritmos práticos de pesquisa e classificação fazem parte da computação. Mas eu não chamaria os algoritmos básicos de classificação de problemas interessantes na pesquisa em ciência da computação. Eu vejo a IA incluindo visão computacional, algoritmos genéticos com aplicações mais práticas, mas há outro aspecto da pesquisa em ciência da computação que parece muito distante da engenharia de software.
precisa saber é o seguinte
@berlin: Eu imagino que, se você conseguiu um emprego na NASA ou na NSA como engenheiro de software, enfrentaria todos os tipos de algoritmos de tipo de pesquisa de ficção científica. "Engenharia de software" é um termo bastante vago e pode significar uma grande variedade de coisas, dependendo do contexto do campo do empregador.
Demian Brecht
2

Os engenheiros de software para solução de problemas têm uma enorme sobreposição com a pesquisa em ciência da computação e também com a pesquisa matemática e estatística.

Criar um site não é engenharia de software, mesmo que você integre algum código de carrinho de compras. Está projetando.

Mesmo 'codificação' não é necessariamente engenharia de software - eu conheço muitos codificadores que não se considerariam algo que se aproximas de engenheiros. O código pode ser tão simples quanto a manipulação de cadeias ou a criação de fórmulas do Excel.

Obviamente, nem toda engenharia de software se sobrepõe à pesquisa científica (existem muitas outras responsabilidades no trabalho), mas li muitos artigos publicados para determinar o algoritmo ideal ou a abordagem dos problemas. Esses problemas podem surgir apenas uma vez por ano (o resto do tempo em que escrevo a validação da interface do usuário ou o que for), mas essa é a natureza do meu ambiente de trabalho.

Kirk Broadhurst
fonte
1

Você acredita que existe uma lacuna entre a pesquisa em ciência da computação e os problemas de engenharia de software?

Não.

Por exemplo, os engenheiros de software precisam se preocupar com "fatoração e isomorfismo de gráficos" ou com alguns problemas complexos de ciência da computação, se necessário ... digamos, construir um site de carrinho de compras? Provavelmente não.

Falso. Eles usam ferramentas que dependem disso corretamente.

De fato, todas as suas relações de amigo no Facebook são um enorme problema de teoria de grafos. Muito complexo. Muito grande. Muito teórico.

E se houver uma desconexão entre a ciência da computação e os engenheiros que constroem aplicativos?

Sim. Algumas pessoas criam aplicativos claramente não qualificados. Eu já vi muitas coisas realmente ruins construídas por "profissionais" pagos que deveriam estar fazendo outra coisa, mais útil com o tempo deles.

É assim que a engenharia e a ciência devem existir?

"Deveria" não tem sentido. É a maneira como ele faz existir.

Os engenheiros mergulharão em anos e anos de trabalhos de pesquisa para resolver um problema específico que eles têm?

Sim. Frequentemente. É por isso que assino a Biblioteca Digital ACM. http://portal.acm.org/ É essencial para resolver problemas que não são triviais.

S.Lott
fonte