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.
fonte
Respostas:
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:
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.
fonte
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.
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 Chemistry
e 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 .
fonte
Os cientistas acadêmicos da computação são muito bons com o seguinte:
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.
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.
fonte
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=c
que 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.
fonte
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.
fonte
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.
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.
"Deveria" não tem sentido. É a maneira como ele faz existir.
Sim. Frequentemente. É por isso que assino a Biblioteca Digital ACM. http://portal.acm.org/ É essencial para resolver problemas que não são triviais.
fonte