Ciência da Computação ou Engenharia de Software – Qual principal é melhor para você?

Ei, todos! Meu nome é YK, e atualmente estou executando o CS Dojo , um canal de educação de programação do YouTube com 200.000 assinantes. Eu também era anteriormente desenvolvedor de software no Google .

Duas das perguntas mais comuns que meu público me pergunta são:

“Qual a diferença entre Ciências da Computação e Engenharia de Software?”

E…

“Devo escolher Ciência da Computação ou Engenharia de Software se eu quiser me tornar um engenheiro de software?”

Neste artigo, vou responder a isso e dar-lhe a minha própria análise rápida sobre estas principais.

Uma rápida visão geral desses dois maiores

  • A ciência da computação é o estudo de como os computadores funcionam, principalmente a partir da perspectiva teórica e matemática.
  • Você deve escolher Ciência da Computação, se você gosta de matemática, lógica ou se deseja entrar em um campo especializado em CS, como inteligência artificial, aprendizado de máquina, segurança ou gráficos.
  • A engenharia de software é o estudo de como os sistemas de software são criados, incluindo tópicos como gerenciamento de projetos, garantia de qualidade e testes de software.
  • Você deve escolher a Engenharia de Software se você estiver mais interessado na abordagem prática e se quiser aprender o ciclo de vida geral de como o software é construído e mantido.
  • Tanto a Ciência da Computação como a Engenharia de Software ensinam fundamentos de programação e ciência da computação, para que você possa escolher qualquer um para se tornar um desenvolvedor de software.

Para entender a diferença entre as especialidades de Ciência da Computação e Engenharia de Software, vejamos seu currículo respectivo na Universidade de Waterloo, no Canadá.

Eu escolhi a Universidade de Waterloo por isso, porque tem um dos melhores programas de ciência da computação na América do Norte.

Perspectivas de trabalho

Vamos primeiro comparar os tipos de empregos e estágios que você pode obter através de cada programa.

Felizmente, o site da Universidade de Waterloo fornece vários exemplos.

Para cada uma das principais, aqui estão alguns dos títulos que os alunos mantêm, e onde eles trabalham:

Ciência da Computação

  • Web Developer / Architect, The Steele Group
  • Programador, Harry Rosen Inc.
  • Desenvolvedor de celular / nuvem, Clearbridge Associates Limited
  • Engenharia de Software, General Dynamics Canada
  • Engenharia de Desenvolvimento de Software, Microsoft
  • Agile Engineer, Pivotal Labs
  • Analista de Negócios, Canadian Tire Corporation
  • Advogado Desenvolvedor, Google
  • Gerente de Produto, Dropbox

Engenharia de software

  • Desenvolvedor de Software, Tagged Inc
  • Desenvolvedor de Software, IBM Canadá
  • Gerente de Software, Arius Software Corporation
  • Software Engineer, VistaPrint, EUA
  • Engenheiro de Software, Harris Corporation
  • Desenvolvedor de Software, Accenture Inc.
  • Technical Product Manager – Software Design & Development, NexJ Systems Inc
  • Consultor, PureFacts Financial Solutions
  • Consultor de Implementação, Desire2Learn

Como você pode ver, não há uma enorme diferença entre os tipos de empregos que você pode obter.

Os graduados de trabalho mais comuns obtêm depois de ganhar seu grau de Ciência da Computação ou Engenharia de Software é Desenvolvedor de Software ou Software Engineer.

Existem outras opções relacionadas, como Gerente de Produto, Analista de QA e Consultor de Tecnologia. Suas opções dependerão de seu conjunto de habilidades específicas.

Cursos de primeiro ano:

Agora, vamos dar uma olhada nos cursos exigidos de cada programa. Vamos primeiro comparar alguns dos cursos que você precisaria levar no seu primeiro ano.

Ciência da Computação

  • CS 135 – Projetando Programas Funcionais
  • CS 136 – Design de Algoritmos e Abstração de Dados
  • MATH 135 – Álgebra
  • MATEMÁTICA 136 – Álgebra Linear 1
  • MATEMÁTICA 137 – Cálculo 1
  • Matemática 138 – Cálculo 2
  • Além de algumas opções eletivas

Engenharia de software

  • CS 137 – Princípios de programação
  • CS 138 – Abstração e Implementação de Dados
  • MATH 115 – Álgebra Linear para Engenharia
  • MATH 117 – Cálculo 1 para Engenharia
  • MATH 119 – Cálculo 2 para engenharia
  • MATH 135 – Álgebra para Honras Matemática
  • ECE 105 – Física da engenharia elétrica 1
  • ECE 106 – Eletricidade e magnetismo
  • ECE 124 – Circuitos e sistemas digitais
  • ECE 140 – Circuitos lineares
  • SE 101 – Métodos de engenharia de software

Como você pode ver, os cursos do primeiro ano são bastante similares. Ambos cobrem alguns cursos fundamentais de ciência da computação e alguns cursos de matemática em álgebra linear e cálculo.

A única grande diferença é que a Engenharia de Software possui componentes adicionais de física e engenharia elétrica, enquanto a Computer Science tem mais algumas opções eletivas.

Cursos após o primeiro ano:

Que tal os cursos necessários e eletivos após o primeiro ano? Vejamos vários exemplos aqui:

Ciência da Computação:

  • MATH 239 Introdução à Combinação
  • STAT 230 Probabilidade
  • STAT 231 Statistics
  • CS 240 Estruturas de dados e gerenciamento de dados
  • CS 241 Fundamentos de Programas Seqüenciais
  • CS 245 Lógica e Computação
  • Desenvolvimento de Software Orientado a Objetos CS 246 <- não requerido para majores de Engenharia de Software
  • CS 251 Computer Organization and Design
  • CS 341 Algoritmos
  • Sistemas operacionais CS 350
  • Além disso, várias disciplinas de Ciência da Computação

Engenharia de software:

  • CHE 102 Química para engenheiros
  • Computadores digitais ECE 222 (inclui linguagem de montagem)
  • ECE 358 Redes informáticas
  • MATH 213 Matemática avançada para engenheiros de software
  • MATH 239 Introdução à Combinação
  • STAT 206 Statistics for Software Engineering
  • MSCI 261 Economia de Engenharia: Gestão Financeira para Engenheiros
  • CS 241 Fundamentos de Programas Seqüenciais
  • CS 240 Estruturas de dados e gerenciamento de dados
  • CS 247 Princípios de Engenharia de Software <- não é necessário para maiores especialistas em Ciência da Computação
  • CS 341 Algoritmos
  • Interfaces de usuário CS 349 <- não é necessário para maiores especialistas em ciência da computação
  • CS 343 Programação simultânea e paralela <- não é necessário para maiores especialistas em ciência da computação
  • CS 348 Introdução ao Gerenciamento de Banco de Dados
  • SE 212 lógica e computação
  • Sistemas Operacionais SE 350
  • SE 465 Software Testing e garantia de qualidade
  • SE 464 Design e Arquiteturas de Software
  • Especificação e Análise de Requisitos de Software SE 463
  • Projecto de Design SE 490
  • Além disso, algumas disciplinas de informática e eletricidade elétrica

Eu lhe dei muita informação para digerir aqui. Mas aqui está o meu resumo:

Quando se trata dos requisitos em matemática e estatística, Ciência da Computação e Engenharia de Software são quase idênticos. Eles cobrem combinatória, probabilidade e estatística.

Os principais requisitos de ciência da computação são semelhantes, além de algoritmos, estruturas de dados e sistemas operacionais.

A diferença fundamental é a seguinte:

  • A engenharia de software tem mais requisitos em engenharia elétrica e fundamentos de engenharia de software, como o teste de software, o design e a especificação de requisitos de software.
  • Ciências da computação permite mais eletivas em cursos de informática de nível superior. Você pode escolher entre uma ampla gama de tópicos, como segurança, fundamentos de engenharia de software, visão por computador, aprendizagem de máquina e gerenciamento de banco de dados.

Então, qual principal você deve escolher?

Eu acho que depende principalmente de suas preferências. Em resumo:

  • Você deve escolher Ciência da Computação, se você gosta de matemática, lógica ou se deseja entrar em um campo especializado em CS, como inteligência artificial, aprendizado de máquinas, segurança ou gráficos.
  • Você deve escolher Engenharia de Software se você estiver mais interessado na abordagem prática e se quiser aprender o ciclo de vida geral de como o software é construído e mantido.

Mas espere – o que é então? Qual importante é melhor se você quer ser um engenheiro de software?

Aqui está a minha opinião. Nesta universidade particular (University of Waterloo), com este conjunto particular de requisitos do programa, a Computer Science é uma importante maior se você quer ser um engenheiro de software.

Apenas por simplicidade, suponhamos que você espera obter um dos empregos mais bem pagos (~ $ 100,000 USD / ano) como engenheiro de software na América do Norte. Esses trabalhos são tipicamente em grandes empresas de software (pense na Microsoft, Google, Amazon, etc.) ou em empresas de médio e alto crescimento (pense em Dropbox, Lyft, Snapchat, Pinterest, etc.).

Normalmente, o que eles procuram em um candidato a engenheiro de software é a capacidade de escrever código sólido e construir projetos interessantes, bem como fundamentos de ciência da computação, incluindo estruturas de dados e algoritmos.

Eu acho que a melhor maneira de cultivar este conjunto de habilidades é aprendendo rapidamente os fundamentos da ciência da computação e passando seu próprio tempo praticando problemas de resolução e código de escrita.

Com base no currículo de Engenharia de Software e com base em quantos estudantes de engenharia ocupados tendem a ser em geral, acho que seria mais difícil fazer isso com Engenharia de Software do que com Ciência da Computação.

Outro benefício deste programa particular de Ciência da Computação é que ele permite mais eleições para a ciência da computação. Isso também é bom porque, dependendo do que está em demanda no mercado de trabalho, você poderá ajustar seus cursos. Por exemplo, se o desenvolvimento de aplicativos móveis estiver em demanda, você pode aprender isso. E se a computação paralela estiver em demanda, você pode se concentrar nisso.

Tenho certeza de que existem alguns benefícios para aprender fundamentos de engenharia de software (gerenciamento de projetos, design, teste, etc.). Mas eu pessoalmente preferiria ter flexibilidade em relação a um conjunto de habilidades predefinidas. É por isso que penso que a Ciência da Computação é uma peça principal melhor para se tornar um engenheiro de software com esse currículo específico.

Claro, essa é apenas a minha opinião, e esta é apenas uma universidade em particular. Eu adoraria saber sobre sua opinião e qual era sua experiência se você se especializasse em Ciências da Computação ou Engenharia de Software. Por favor, deixe-me saber em um comentário abaixo.

Algumas notas

Nota 1: Diferentes universidades têm requisitos diferentes para estas duas maiores. Este artigo deve ser um bom ponto de partida, mas você ainda deve dar uma olhada nos requisitos do programa na universidade que você está interessado em participar.

Nota 2: Algumas universidades nem sequer possuem uma especialização em Engenharia de Software. Por exemplo, a Universidade da Colúmbia Britânica em Vancouver possui graus de Ciência da Computação e Informática, mas não engenharia de software. Mas eles têm uma concentração de engenharia de software dentro do seu programa de Ciência da Computação, bem como em Engenharia de Computadores.

Se a universidade na qual você se interessa não tenha um especialista em Engenharia de Software, eu iria com a Ciência da Computação se quiser se tornar um desenvolvedor de software. A engenharia de informática é mais focada em hardware que a Ciência da Computação ou a Engenharia de Software, por isso é menos diretamente relacionada ao trabalho típico de um desenvolvedor de software.

E aqui estão as principais fontes que usei:

Obrigado pela leitura e boa sorte escolhendo uma universidade e sua principal! ?