A ciência da Ciência da Computação está morta? [fechadas]


18

Pergunta: A ciência e a arte de CS estão mortas? Com isso, quero dizer que os requisitos reais para pensar, planejar e resolver problemas com eficiência parecem estar se afastando do CS atualmente. O campo parece estar diminuindo a barreira de entrada para que mais pessoas possam 'programar' sem ter que aprender a programar de verdade.

Formação: Sou recém-formado com bacharelado em Ciência da Computação. Estou trabalhando em uma posição inicial em uma empresa de tamanho decente no departamento de TI. Eu principalmente faço .NET e outras tecnologias da Microsoft no meu trabalho, mas antes disso eu fiz coisas de Java por meio de estágios e similares. Pessoalmente, sou um programador de C ++ para meus próprios projetos divertidos.

Em Profundidade: Através do trabalho que tenho realizado, parece-me que as disciplinas intensas de uma ciência real não existem mais no CS. No passado, os programadores tinham que resolver problemas com eficiência para que os sistemas fossem robustos e rápidos. Mas agora, com as tecnologias predominantes como .NET, Java e linguagens de script, parece que eficiência e robustez foram trocadas por facilidade de desenvolvimento.

A maioria dos colegas com quem trabalho nem se formou em Ciência da Computação. A maioria se formou em engenharia elétrica, alguns com engenharia de software, mesmo alguns que vieram de escolas de tecnologia sem um programa de quatro anos. No entanto, eles se dão muito bem sem ter o conhecimento técnico do CS, sem ter estudado teorias e algoritmos, sem ter nenhuma consideração em criar uma solução elegante (eles apenas buscam a solução mais fácil e barata).

A empresa nos incentiva a usar as tecnologias da Microsoft, que retiram todo o pensamento real do problema e o substituem por bibliotecas e ferramentas que podem criar seu projeto automaticamente para você na metade do tempo. Não estou tentando odiar as linguagens, entendo que elas servem a um propósito e o fazem bem, mas quando seus funcionários não sabem como uma tabela de hash funciona, usam métodos de classificação incorretos ou executam comandos SQL que são terrivelmente ineficientes (mas fazem o trabalho em um tempo aceitável), parece que mais esforço está sendo feito no desenvolvimento de tecnologias que ofereçam novos 'programadores' em vez de realmente ensinar às pessoas como fazer as coisas corretamente.

Estou interessado em tornar programas eficientes e, na minha opinião, bonitos. Se houver uma maneira melhor de fazê-lo, prefiro voltar e refatorá-lo do que deixá-lo deslizar. Mas no mundo corporativo, eles me pressionam a concluir as tarefas rapidamente e não com elegância. E isso realmente me incomoda.

É isso que eu vou esperar pelo resto da minha vida? Ainda existem posições por aí para pessoas que amam a ciência e a arte do CS em vez de apenas o salário?

E na mesma nota, aqui está uma boa leitura, se você ainda não a viu antes de The Perils Of Java Schools


2
Duas coisas - 1. O desenvolvimento não precisa ser difícil. 2. Programas bem escritos serão essenciais em situações em que a escalabilidade é importante, e é onde você presumivelmente irá brilhar. Eu concordo com o que você está dizendo em princípio. Embora eu me considere um programador iniciante, estou interessado em aprender tudo em um nível baixo (até certo ponto) e não usar estruturas pré-escritas, e assim por diante ... (pelo menos para começar ... ou quando Eu uso qualquer tipo de estrutura que seja minha.
Anonymous

48
Eu acho que você está confundindo CS com programação, estas são relacionadas, mas duas coisas diferentes.
quer

1
@ Chris eu concordo totalmente. Faço uso extensivo de estruturas e bibliotecas, mas tento fazê-las sem antes entender o problema e como a biblioteca o resolve. Uma vez que eu sei, então eu posso escolher o que resolve biblioteca que é melhor neste caso, em vez de apenas jogando uma biblioteca genérica em cada problema e esperando que fura
Veaviticus

8
Que problema você está tentando resolver com esta pergunta?
Jeremy

15
@Veaviticus, você realmente espera que seus encanadores conheçam a dinâmica dos fluidos (para que eles possam fazer seu trabalho melhor?). A maioria dos aplicativos de linha de negócios (desktop / web) não precisa resolver problemas altamente complexos (muito raramente). Ter formação em CS ajuda sim! Certamente. É necessário para LOB -> não realmente.
Darknight

Respostas:


25

Sim e não

Boa pergunta, mas suposição ruim.

A parte de Ciência da educação parece estar faltando, mas a suposição de que a ciência estava lá apenas para tornar os programas eficientes é equivocada.

A ciência era necessária para ensinar as pessoas a definir e resolver problemas.

Infelizmente, essa parte de alguns currículos de "CS" (currículos?) Parece ser completamente omitida, substituída por problemas de brinquedo por soluções triviais ou conhecidas e destinada apenas a ensinar familiaridade com ferramentas

Decepcionante; muitos graduados em Java foram enganados, nunca ensinaram como decompor um problema, projetar um algoritmo, especificar um teste ou até mesmo depurar efetivamente.


2
Eu frequentei uma escola que nem enfatizava muito o Java, a maior parte do que fiz foi em C ++. Mas eles ainda não nos ensinaram como fazer nada do que você mencionou. Eles cobriram o básico, examinaram algumas coisas e aprofundaram o interesse de cada professor. Parece que as escolas hoje em dia estão tentando desenvolver o maior número de 'desenvolvedores' em vez de cientistas quanto possível.
Veaviticus

@Veaviticus: Isso seria para os alunos afortunados. Na minha universidade, os professores têm um nível de abstração esquizofrênico e sua idéia de um exame é "recitar definição formal".
DeadMG

A linguagem não tem nada a ver com os ensinamentos de decompor um problema. Um problema é um problema, independentemente de ser C, Java ou Ruby.
Rig

29

A ciência da Ciência da Computação está morta? "..." Sou recém-formado com um BS em Ciência da Computação. Estou trabalhando em uma posição inicial em uma empresa de tamanho decente no departamento de TI .

Honestamente, meus dois centavos: você não encontrará a "ciência" da ciência da computação trabalhando em um departamento de TI de uma empresa de tamanho decente, porque é o departamento de TI, não o departamento de CS. Tente voltar à escola para fazer um doutorado ou trabalhar nos departamentos de engenharia de uma empresa cujo foco é ciência da computação (por exemplo, processamento de imagem, redes de alto desempenho, sistemas de álgebra computacional, aeroespacial, etc ...). É aqui que você encontrará os problemas difíceis e interessantes em que o design desleixado [geralmente] não será tolerado.

"Ainda existem posições por aí para pessoas que amam a ciência e a arte do CS, em vez de apenas o salário?"

Sim, absolutamente, mas provavelmente não nos departamentos de TI de empresas de médio porte.


16

Se você é um programador, não se considere um "cientista da computação"; são os cientistas da computação que estão criando a próxima geração de computadores, alguns dos quais ainda são ficção científica até que a mistura correta de materiais, miniatuização e teoria computacional seja obtida. Eles são apenas o começo do pipeline. As pessoas que desenvolvem software aqui e agora são "engenheiros de software"; eles levam as teorias e ferramentas, às vezes colocando a teoria prática e as ferramentas do mundo real no topo, para aproveitar o poder em potentia dessa complexa peça de magia eletroínica e fazê-la fazer o que queremos. Essa é, por sua vez, uma especialização do campo da "engenharia da computação", que utiliza as teorias dos cientistas da computação e as aplica, hardware e software, a soluções eletrônicas do usuário final do mundo real.

É na IMO que os negócios encontram a teoria. Nesses tipos de casos, o velho ditado "o inimigo de melhor é bom o suficiente" pode ser facilmente mudado para ler "o inimigo de melhor é bom". Considerar-se um "engenheiro" em vez de um "cientista" e colocar o que você faz em paralelo com outras disciplinas de engenharia lança as diferenças em relevo.

Digamos que um cliente chegue até você, um engenheiro civil / estrutural, e peça para você construir uma ponte. A ponte precisa se estender por 20 pés, sustentar-se e transportar uma tonelada de carga, deve durar 10 anos com manutenção de rotina e eles a querem em um mês por US $ 20.000. Essas são suas restrições; atender aos mínimos, sem exceder os máximos. Fazer isso é "bom o suficiente" e recebe o salário. Seria uma engenharia ruim para você construir a Ponte Golden Gate, excedendo em muito as especificações de projeto e o orçamento em várias ordens de magnitude. Você geralmente acaba comendo os custos excedentes e pagando multas por excesso de tempo. Também seria uma má engenharia para você construir uma ponte de corda com o peso de cinco homens adultos, mesmo que custe apenas US $ 1000 em tempo e materiais; você não recebe boas críticas e depoimentos de clientes,

De volta ao software, digamos que você tenha um cliente que precisa de um sistema de processamento de arquivos criado para digerir os arquivos que entram e colocar as informações no sistema. Eles querem isso em uma semana e precisam lidar com cinco arquivos por dia, com cerca de 10 MB de dados, porque esse é todo o tráfego que eles recebem atualmente. Suas preciosas teorias vão amplamente pela janela; sua tarefa é criar um produto que atenda a essas especificações em uma semana, pois, ao fazer isso, você também atende ao orçamento de custos do cliente (como os materiais geralmente são uma gota no balde para um contrato de software desse tamanho). Passar duas semanas, mesmo com dez vezes o ganho, não é uma opção, mas o mais provável é que não seja um programa criado em um dia que possa lidar apenas com metade da taxa de transferência, com instruções para ter duas cópias em execução.

Se você acha que esse é um caso marginal, está errado; esse é o ambiente diário da maioria dos alojamentos internos. O motivo é o ROI; esse programa inicial não custa muito e, portanto, se paga muito rapidamente. Quando os usuários finais precisam fazer mais ou ir mais rápido, o código pode ser refatorado e redimensionado.

Essa é a principal razão por trás do estado atual da programação; a suposição, confirmada por toda a história da computação, é que um programa nunca é estático. Ele sempre precisará ser atualizado e, eventualmente, será substituído. Paralelamente, o aprimoramento constante dos computadores nos quais os programas são executados permite diminuir a atenção à eficiência teórica e aumentar a atenção à escalabilidade e paralelização (um algoritmo que é executado no tempo do quadrado N, mas que pode ser paralelo para rodar nos N núcleos). parecem lineares e, geralmente, o custo de mais hardware é mais barato que o dos desenvolvedores para criar uma solução mais eficiente).

Além disso, existe o princípio muito simples de que toda linha de código de desenvolvedor é outra coisa que pode dar errado. Quanto menos um desenvolvedor escreve, menos provável é que o que ele escreve tenha um problema. Isso não é uma crítica à "taxa de erros" de ninguém; é uma simples afirmação de fato. Você pode saber como escrever um MergeSort para frente e para trás em 5 idiomas, mas se você digitar apenas um identificador em uma linha de código, a Classificação inteira não funcionará, e se o compilador não o capturar, poderá levar você horas para depurá-lo. Compare isso com List.Sort (); está lá, é eficiente no caso geral e, aqui está a melhor coisa, já funciona.

Portanto, muitos dos recursos das plataformas modernas e princípios das metodologias de design modernas foram criados com isso em mente:

  • OOP - construa dados e lógica relacionados em um objeto, e sempre que o conceito desse objeto for válido, ele será o objeto ou uma derivação mais especializada.
  • Modelos pré-criados - um bom código de 60% ou mais é uma crença sintática e o básico para fazer o programa mostrar algo na tela. Ao padronizar e gerar automaticamente esse código, você reduz a carga de trabalho do desenvolvedor pela metade, permitindo um aumento na produtividade.
  • Bibliotecas de algoritmos e estruturas de dados - Como descrito acima, você pode saber como escrever uma pilha, fila, QuickSort etc., mas por que precisa, quando há uma biblioteca de códigos com tudo isso incorporado? Você não reescreveria o IIS ou o Apache porque precisava de um site; então, por que implementar um algoritmo QuickSort ou um objeto em árvore vermelho-preto quando várias excelentes implementações estão disponíveis?
  • Interfaces fluentes - Na mesma linha, você pode ter um algoritmo que filtra e classifica os registros. É rápido, mas provavelmente não é muito legível; o desenvolvedor júnior levaria um dia apenas para entendê-lo e muito menos fazer as alterações cirúrgicas necessárias para classificar em um campo adicional no objeto de registro. Em vez disso, bibliotecas como o Linq substituem muitos códigos muito feios e quebradiços por uma ou duas linhas de chamadas de método configuráveis ​​para transformar uma lista de objetos em objetos projetados filtrados, classificados e projetados.

2
Boa resposta, mas você perde um ponto importante. "O que não posso duplicar, não entendo." Saber como eles funcionam não significa que você os digita manualmente para cada projeto; ao contrário, garante que você conheça cada um dos pontos fortes e fracos que o ajudarão a escolher o melhor. Então, tudo que você precisa saber é se essa estrutura de algoritmo / dados está em sua biblioteca padrão.
Michael K

Exceto que seu ditado está errado; Eu posso entender muito claramente os conceitos por trás de alguma coisa material que não tenho esperança de duplicar com êxito. Eu concordo em princípio; um engenheiro de sucesso de qualquer tipo precisa conhecer teoria suficiente para escolher a solução que funciona. Isso não significa que um engenheiro precise construir todos os tipos de lâmpadas para conhecer as especificações de cada um e, assim, escolher a correta para uma casa. Da mesma forma, posso usar uma árvore vermelho-preta, entendendo seu desempenho e aplicação adequada, sem ter idéia de como implementá-la do zero.
Keiths

A analogia com a engenharia não é boa. Não é o caso de uma "ponte melhor" no CS necessariamente custar muito - geralmente é apenas uma questão de entender qual ferramenta é apropriada para o trabalho certo. Mesmo a implementação de um algoritmo de livro didático bastante complexo está muitas vezes fora da zona de conforto das pessoas, mas não é uma noção difícil ou cara (dependendo do escopo - mas supondo que esse seja um projeto em anos-homem, não dias-homem). Geralmente é ainda mais fácil - sem implementação personalizada, apenas uma questão de conhecer a ferramenta certa e as palavras-chave para o Google.
Eamon Nerbonne

8

Parece-me que você está fazendo TI, e não CS, e isso não implica que CS esteja morto. O CS não está morto, apenas a maioria dos trabalhos está no desenvolvimento de software. Como a maioria dos estudantes de CS aprende a programar, eles geralmente acabam contratando como programadores e não como cientistas da computação. Os trabalhos de Ciência da computação são minúsculos em comparação aos trabalhos de programação. Você pode até criar um aplicativo complexo usando técnicas de ciência da computação, mas na minha opinião (e eu não gosto de respostas de opinião porque são subjetivas), isso cai no campo da engenharia do que no campo dos cientistas.

Além disso, um código bonito e elegante está nos olhos de quem vê , mas para a maioria das empresas / gerentes, ter um design suficientemente bom no prazo é muito mais importante que o código bonito, mas nunca termina no prazo.

Por fim, existe o mundo real e a terra do lala. Infelizmente, recebemos o salário do primeiro e é aí que entra a "ciência / arte" do desenvolvimento de software sobre como produzir alta qualidade de software com restrições de tempo / orçamento. Senti o mesmo tipo de sentimento que você tem no início da minha carreira. Eu sempre quis criar "o melhor", mas logo percebi que "o melhor" não é o mais eficiente ou elegante, mas o design mais econômico.


3
"código bonito e elegante" vs "bom enuogh, mas a tempo" é uma falsa dicotomia. É mais fácil terminar no prazo se o design for simples e o design simples for igual ao design bonito. Apenas simples não significa simplista .
pillmuncher

1
@ pillmuncher, Sim, eu concordo, para mim, um código bonito é simples (mas não mais simples), mas infelizmente essa premissa é subjetiva / relativa. "design simples é igual a design bonito" não é uma afirmação, mas uma opinião (uma opinião muito popular que concordo 100%, mas ainda assim uma opinião). O que não é uma opinião, é cronograma, requisitos e custo. Essas restrições tendem a levar a um design suficientemente bom para as restrições especificadas.
Armando

"[1] Parece-me que você está fazendo TI, e não CS, e isso não implica que CS esteja morto. [2] CS não está morto, é apenas que a maioria dos trabalhos está no desenvolvimento de software". Sua primeira declaração está correta - o OP está em TI e não em CS. No entanto, discordo de sua segunda declaração, já que muitos dos chamados "cientistas da computação" também desenvolvem software. É chamado de "pesquisa e desenvolvimento", e um exemplo pode ser de cientistas da computação que definem, resolvem e provam a exatidão de um algoritmo de roteamento sobre certas topologias de rede e, em seguida, implementam a implementação "oficial" ou protótipo
Bill VB

8

Primeiro de tudo, você entendeu errado. "pensar, planejar e resolver problemas com eficiência" não é ciência, é engenharia. A ciência tem muito mais a ver com explorar novos campos. E, na verdade, no mundo acadêmico, as pessoas se preocupam muito menos com a eficiência do código do que na indústria. Na academia, é mais uma prova de conceitos, etc.

Não, o que você está descrevendo é que é necessário menos conhecimento aprofundado para o desenvolvimento de software. O que pode ser verdade, se os requisitos forem os mesmos. Atualmente, porém, espera-se que o engenheiro de software saiba como lidar com multi-threading, computação distribuída, dimensionamento etc. Eles devem saber como liderar o projeto com eficiência. A maior parte disso não estava nos currículos poucas décadas atrás.


Ainda não é, pelo que estou lendo aqui. Muitas escolas não ensinam engenharia, elas ensinam idiomas. Isso é o mesmo que ensinar Autocad a um estudante de engenharia civil.
Michael K

@ Michael: Não vi nenhuma universidade decente fazer isso.
vartec

1
Eu vou para o RIT. É altamente classificado, e ainda um pouco ruim. Nenhuma escola ensina programação corretamente, porque simplesmente não pode ser feita em apenas quatro ou cinco anos no contexto de outros cursos.
Jon Purdy

4

Eu não acho que o que você disse esteja exatamente certo, mas você tem alguma razão . Penso que, com o tempo, a ciência da computação e a engenharia de software se separaram.

Engenharia de software (como outra engenharia) tem a ver com a aplicação da ciência para criar produtos, resolver problemas, etc. A ciência da computação é principalmente sobre pesquisa de algoritmos e (embora essa parte seja muitas vezes esquecida) como implementar esses algoritmos (pelo menos em algum sentido teórico) por exemplo, talvez tratando todas as máquinas PRAM como equivalentes).

Tendo isso em mente, acho que a razão por trás da bifurcação se torna aparente: a maioria dos problemas algorítmicos envolvidos em algo como um site típico já foi resolvida - a maioria deles há muito tempo. Talvez o mais importante seja que a maioria deles tenha sido resolvida o suficiente para que, para um desenvolvedor web comum, o problema tenha desaparecido quase completamente. Por exemplo, fazer atualizações atômicas em bancos de dados distribuídos é definitivamente uma tarefa não trivial - mas um desenvolvedor web típico apenas escreve um pouco de SQL e não tem idéia (ou se importa) com quanta pesquisa foi necessária para descobrir como fazer o trabalho de forma confiável.

Ao mesmo tempo, era essencialmente impossível separar a ciência da computação da engenharia de software. Tão poucos problemas foram resolvidos que escrever um programa relativamente trivial exigia pesquisas sobre os fundamentos. Se você quisesse fazer algo tão simples quanto classificar um monte de dados no final dos anos 50 ou início dos anos 60, as chances eram muito boas de que você precisaria fazer uma análise dos seus dados e tentar projetar um algoritmo que se encaixa da melhor forma possível com o que seria necessário para classificar esses dados em particular - nem perto do número de algoritmos de classificação conhecidos hoje, e mesmo os algoritmos conhecidos não eram tão conhecidos quanto hoje. .

Porém, 50 anos de pesquisa e desenvolvimento valeram a pena - o desenvolvimento mais típico pode usar não apenas algoritmos conhecidos, mas implementações pré-escritas. A maioria dos problemas típicos pode ser resolvida razoavelmente com base no conhecimento existente (e até mesmo nas implementações existentes) de algoritmos.

Isso não significa que a ciência da computação esteja morta - ainda existem mais algoritmos para pesquisar e pessoas fazendo pesquisas neles. Isso significa, no entanto, que a maioria das pesquisas é mais especializada e provavelmente se aplica a áreas bastante especializadas. Provavelmente também há uma "lacuna" maior entre adquirir e aplicar o conhecimento. Ao mesmo tempo, você descobriu uma maneira melhor de classificar no processo de escrever um programa de classificação, e ele foi gravado em código real quase imediatamente. Agora, muita ciência da computação é dedicada a coisas como usar um número essencialmente infinito de processadores - o que provavelmente será útil um dia, mas mesmo as tribos primitivas não considerariam os dois núcleos do meu computador como "muitos" ... :-)


1

Desenvolvimento de software e ciência da computação não são a mesma coisa, e eu descobri que a maioria dos meus colegas de classe em um B.Sc. O programa Comp Sci ficou frustrado com isso.

Penso no software como um produto da ciência da computação ... como pinturas são um produto da arte visual.

Eu acho que a maioria das pessoas com formação em CS é contratada para trabalhar no desenvolvimento de software, especialmente nos estágios iniciais de suas carreiras. Eu acho que muitas pessoas nessa função ficam lá e não vão mais longe.

Eu acho que a diferença começa a aparecer quando novos problemas ou paradigmas aparecem ou quando "bater juntos" não é bom o suficiente. Quem constrói os novos frameworks ou idiomas? Quem se senta e medita os detalhes de um novo mecanismo de física? Quem usa a teoria de grafos / transformações de grafos para extrair alguns ciclos por iteração de desempenho de um algoritmo?

Terminarei por onde comecei, concordando que existem muitos cientistas da computação em funções de desenvolvimento / engenharia de software, talvez não cumprindo seu potencial.


1

Você parece confundir ciência da computação com programação e desenvolvimento de software em geral. Os dois não são os mesmos, nem chegam perto. Independentemente do que nossos diplomas possam dizer, a grande maioria de nós somos programadores, não cientistas da computação. A menos que você esteja ativamente envolvido na academia em um nível alto, eu apostaria que você realmente não tem idéia do que está acontecendo na ciência da computação.


0

Posso dizer que a Ciência da Computação está viva e bem. Eu tenho que resolver novos problemas diariamente e encontrar uma solução eficaz e elegante para esses problemas. Eu tenho que usar minhas habilidades como engenheiro diariamente e usar o conhecimento de mim e de meus colegas para resolver esses problemas para o nosso cliente.

Não estou tentando odiar as linguagens, entendo que elas servem a um propósito e o fazem bem, mas quando seus funcionários não sabem como uma tabela de hash funciona, usam métodos de classificação incorretos ou executam comandos SQL que são terrivelmente ineficientes (mas fazem o trabalho em um tempo aceitável), parece que mais esforço está sendo feito no desenvolvimento de tecnologias que ofereçam novos 'programadores' em vez de realmente ensinar às pessoas como fazer as coisas corretamente.

Isso parece um problema com o funcionário e certamente não é verdadeiro para todos os programadores.

Só porque existem ferramentas que facilitam nosso trabalho não significa que não devemos entender a tecnologia de sublinhado; caso contrário, não estamos ajudando ninguém e, certamente, não estamos fazendo nosso trabalho na solução de problemas da maneira correta.


Concordo. Não estou tentando dizer que não há trabalhos que não precisem ser pensados ​​ou que todos os desenvolvedores não têm ideia do que estão fazendo, mas, tendo acabado de vir de um programa de CS, posso dizer que minha escola não me ensine metade das coisas que sei agora. Eu os aprendi sozinho. E agora que os conheço, posso usar estruturas que fazem isso por mim. Mas se eu não tivesse aprendido sozinho, estaria apenas cegamente usando uma estrutura, na maioria das vezes de maneira incorreta
Veaviticus

0

Você simplesmente não entendeu o problema em questão. O problema não é obter o desempenho máximo - está obtendo desempenho suficiente para que seu aplicativo seja responsivo e rápido o suficiente. Aprender a programar é resolver o problema, pela menor quantia de dinheiro.

Eu odeio dizer dessa maneira, mas qualquer impressão que você tenha sobre a morte do CS é apenas suas próprias pré-concepções sobre o que um programador "real" deve ter que fazer.


Certo. Eu sei que as empresas precisam ganhar dinheiro. E certamente não sou inocente de tornar partes de meus aplicativos 'suficientemente rápidas' em vez do melhor que podem ser. Estou mais curioso sobre a tendência como um todo que muitos (pelo menos pelo que posso dizer) desenvolvedores nunca estudaram CS. Eles vieram para o campo de outros lugares, e têm pouca ou nenhuma teoria real por trás deles, apenas uma experiência com frameworks
Veaviticus

@Veaviticus: Usar uma estrutura pode não ser uma teoria acadêmica inovadora, mas definitivamente ainda é CS.
DeadMG

0

Bem, morto ou não, é discutível!

O fato é que, na era tecnológica atual, a maioria das empresas contrata pessoas para resolver tarefas do tipo fluxo de trabalho no mundo real por meio da automação de software. Eles não estão interessados ​​em quão elegante ou mais rápido um programa você pode escrever, desde que permita que a empresa execute mais rapidamente com maior produtividade.

O estresse está em mais produção em menos tempo. (Pense na comercialização de culturas / alimentos; crescimento mais rápido e mais com menos custo). O mesmo está acontecendo no mundo da tecnologia (a próxima nova idéia).

Lembre-se, hoje em dia, as coisas estão se movendo mais rápido do que nunca, devido à quantidade e acesso ao conhecimento do que antigamente. Naquela época, a produção era pequena e melhor, os lucros eram maiores. Agora, o jogo mudou completamente. Basta olhar para coisas como a qualidade do serviço ao cliente e, em geral, as coisas não duram mais.

Elegância e eficiência são importantes para empresas de tecnologia como o Google etc., mesmo que esses lugares não sejam perfeitos, mas você pode se aproximar trabalhando com uma dessas empresas nos próximos anos.

Sempre há uma troca na vida. Você pode encontrar um emprego que paga menos, onde você tem todo o tempo e atenção. Ou você escolhe nadar conosco para pagar melhor e ignorar coisas que não são perfeitas. Quanto mais rápido essa percepção afundar em você, você poderá se preparar para o mundo real. Não estou dizendo que você deva ignorar qualidade e elegância, mas conhecer a dinâmica. Você será mais feliz :)


0

Na minha opinião, algumas das coisas mais interessantes que o futuro possa ter certamente se basearão na parte científica da ciência da computação, especificamente na visão computacional / aprendizado de máquina e em outros algoritmos de sematisização. Provavelmente, eles serão promovidos na indústria (por exemplo, o Microsoft Kinect), mas são problemas tão difíceis que certamente se basearão no grande corpo de pesquisas e nos progressos realizados pelos acadêmicos (novamente, no Microsoft Kinect).


0

Eu acho que a programação cotidiana padrão é tanto uma arte quanto uma ciência, mas certamente existem áreas que estão profundamente interessadas nos aspectos científicos da ciência da computação. Por exemplo, pesquisadores de empresas e universidades. Se você realmente quer se envolver profissionalmente nas ciências, deve procurar um doutorado. No entanto, descobri que as partes científicas da minha educação são continuamente valiosas, apesar de também precisar contar com o meu lado mais criativo na realidade!

As pessoas que não sabem o que estão fazendo podem invadir as coisas com algumas das ferramentas mencionadas, mas geralmente contratam pessoas reais de CS para fazer as ferramentas, você só precisa ser mais abstrato para se esforçar.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.