Ciência da Computação VS Engenharia de Software - Qual especialidade é melhor para você?

Ei pessoal! Meu nome é YK, e atualmente estou administrando o CS Dojo, um canal educacional de programação no YouTube com mais de 200.000 assinantes. Também fui desenvolvedor de software no Google.

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

“Qual é a diferença entre os cursos de Ciência da Computação e Engenharia de Software?”

E…

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

Neste artigo, responderei a isso e apresentarei minha própria análise rápida sobre esses cursos.

Uma rápida visão geral desses dois cursos

  • Ciência da Computação é o estudo de como os computadores funcionam, principalmente do ponto de vista teórico e matemático.
  • Você deve escolher Ciência da Computação se gosta de matemática, lógica ou se deseja entrar em um campo especializado em Ciência da Computação, como inteligência artificial, aprendizado de máquina, segurança ou gráficos.
  • Engenharia de software é o estudo de como os sistemas de software são construídos, incluindo tópicos como gerenciamento de projetos, garantia de qualidade e teste de software.
  • Você deve escolher Engenharia de Software se 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 quanto a Engenharia de Software ensinam os fundamentos da programação e da ciência da computação, então você pode escolher qualquer um para se tornar um desenvolvedor de software.

Para entender a diferença entre os graduados em Ciência da Computação e Engenharia de Software, vamos dar uma olhada em seus respectivos currículos na Universidade de Waterloo, no Canadá.

Escolhi a University of Waterloo para isso porque ela tem um dos melhores programas de ciência da computação da América do Norte.

Perspectivas de emprego

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

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

Para cada curso, aqui estão alguns dos títulos que os ex-alunos possuem e onde eles trabalham:

Ciência da Computação

  • Desenvolvedor / arquiteto da web, The Steele Group
  • Programador, Harry Rosen Inc.
  • Desenvolvedor de dispositivos móveis / nuvem, Clearbridge Associates Limited
  • Engenharia de Software, General Dynamics Canada
  • Engenharia de Desenvolvimento de Software, Microsoft
  • Engenheiro ágil, Pivotal Labs
  • Analista de negócios, Canadian Tire Corporation
  • Defensor do 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
  • Engenheiro de software, VistaPrint EUA
  • Engenheiro de software, Harris Corporation
  • Desenvolvedor de software, Accenture Inc.
  • Gerente Técnico de Produto - Design e Desenvolvimento de Software, NexJ Systems Inc
  • Consultor, PureFacts Financial Solutions
  • Consultor de implementação, Desire2Learn

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

O emprego mais comum que os graduados obtêm depois de obter o diploma de Ciência da Computação ou Engenharia de Software é Desenvolvedor de Software ou Engenheiro de Software.

Existem também outras opções relacionadas, como gerente de produto, analista de controle de qualidade 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 obrigatórios de cada programa. Vamos primeiro comparar alguns dos cursos que você precisa fazer no primeiro ano.

Ciência da Computação

  • CS 135 - Projetando Programas Funcionais
  • CS 136 - Projeto de Algoritmo e Abstração de Dados
  • MATEMÁTICA 135 - Álgebra
  • MATH 136 - Álgebra Linear 1
  • MATEMÁTICA 137 - Cálculo 1
  • MATEMÁTICA 138 - Cálculo 2
  • Mais algumas disciplinas 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
  • MATEMÁTICA 117 - Cálculo 1 para Engenharia
  • MATEMÁTICA 119 - Cálculo 2 para Engenharia
  • MATEMÁTICA 135 - Álgebra para Matemática Honors
  • 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 também são bastante semelhantes. 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 tem componentes adicionais de física e elétrica, enquanto a Ciência da Computação tem mais algumas disciplinas eletivas.

Cursos após o primeiro ano:

Que tal as disciplinas obrigatórias e eletivas após o primeiro ano? Vamos dar uma olhada em vários exemplos aqui:

Ciência da Computação:

  • MATH 239 - Introdução à Combinatória
  • Probabilidade STAT 230
  • Estatísticas STAT 231
  • CS 240 Estruturas de dados e gerenciamento de dados
  • CS 241 Fundamentos de Programas Sequenciais
  • Lógica e computação CS 245
  • CS 246 Desenvolvimento de Software Orientado a Objetos <- não obrigatório para especializações em Engenharia de Software
  • CS 251 Organização e Design de Computadores
  • Algoritmos CS 341
  • Sistemas Operacionais CS 350
  • Além disso, várias disciplinas eletivas de ciência da computação

Engenharia de software:

  • CHE 102 Química para Engenheiros
  • ECE 222 Computadores Digitais (inclui linguagem assembly)
  • ECE 358 Redes de Computadores
  • MATH 213 Matemática Avançada para Engenheiros de Software
  • MATH 239 - Introdução à Combinatória
  • STAT 206 Estatísticas para Engenharia de Software
  • MSCI 261 Economia da Engenharia: Gestão Financeira para Engenheiros
  • CS 241 Fundamentos de Programas Sequenciais
  • CS 240 Estruturas de dados e gerenciamento de dados
  • Princípios de Engenharia de Software do CS 247 <- não obrigatório para especialização em Ciência da Computação
  • Algoritmos CS 341
  • Interfaces de usuário do CS 349 <- não obrigatório para especialização em Ciência da Computação
  • CS 343 Concurrent and Parallel Programming <- não obrigatório para cursos de 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
  • Teste de Software SE 465 e Garantia de Qualidade
  • SE 464 Projeto e Arquitetura de Software
  • Especificação e Análise de Requisitos de Software SE 463
  • SE 490 Design Project
  • Além disso, algumas disciplinas eletivas de ciência da computação e engenharia elétrica

Eu dei a você MUITA informação para digerir aqui. Mas aqui está meu resumo:

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

Os requisitos básicos da ciência da computação também são semelhantes, abrangendo algoritmos, estruturas de dados e sistemas operacionais.

A principal diferença é que:

  • A Engenharia de Software tem mais requisitos em engenharia elétrica e fundamentos de engenharia de software, como teste de software, projeto e especificação de requisitos de software.
  • A Ciência da Computação permite mais disciplinas eletivas em cursos de ciência da computação de nível superior. Você pode escolher entre uma ampla variedade de tópicos, como segurança, fundamentos da engenharia de software, visão computacional, aprendizado de máquina e gerenciamento de banco de dados.

Então, qual curso você deve escolher?

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

  • Você deve escolher Ciência da Computação se gosta de matemática, lógica ou se deseja entrar em um campo especializado em Ciência da Computação, como inteligência artificial, aprendizado de máquina, segurança ou gráficos.
  • Você deve escolher Engenharia de Software se 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 curso é melhor se você quiser ser um engenheiro de software?

Aqui está minha opinião. Nesta universidade em particular (University of Waterloo), com este conjunto específico de requisitos de programa, Ciência da Computação é uma área de especialização melhor se você quiser ser um engenheiro de software.

Apenas para simplificar, vamos supor que você espera conseguir um dos empregos mais bem pagos (~ $ 100.000 USD / ano) como engenheiro de software na América do Norte. Esses empregos são normalmente em grandes empresas de software (pense em Microsoft, Google, Amazon, etc.) ou em empresas de médio porte 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 da ciência da computação, incluindo algoritmos e estruturas de dados.

Acho que a melhor maneira de cultivar esse conjunto de habilidades é aprender rapidamente os fundamentos da ciência da computação e passar seu próprio tempo praticando a resolução de problemas e a escrita de códigos.

Com base no currículo de Engenharia de Software e em como os alunos de engenharia tendem a ser ocupados 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 específico de Ciência da Computação é que ele permite mais disciplinas eletivas de ciência da computação. Isso também é ótimo porque, dependendo da demanda do 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 em aprender os fundamentos da engenharia de software (gerenciamento de projetos, design, testes, etc.). Mas pessoalmente prefiro ter flexibilidade em vez de um conjunto predefinido de habilidades. É por isso que acho que Ciência da Computação é a melhor graduação para se tornar um engenheiro de software com esse currículo específico.

Claro, essa é apenas minha opinião, e esta é apenas uma universidade em particular. Adoraria saber sua opinião e como foi sua experiência se você se formou em Ciência 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 diferentes requisitos para essas duas especialidades. Este artigo deve ser um bom ponto de partida, mas você ainda deve dar uma olhada nos requisitos do programa da universidade que deseja cursar.

Nota 2: Algumas universidades nem mesmo possuem especialização em Engenharia de Software. Por exemplo, a University of British Columbia em Vancouver possui graduação em Ciência da Computação e Engenharia da Computação, mas não em Engenharia de Software. Mas eles têm concentração em engenharia de software em seu programa de Ciência da Computação, bem como em Engenharia da Computação.

Se a universidade em que você está interessado não tem graduação em Engenharia de Software, eu escolheria Ciência da Computação se você quiser se tornar um desenvolvedor de software. A Engenharia da Computação está mais focada em hardware do que Ciência da Computação ou Engenharia de Software, portanto, está menos diretamente relacionada ao trabalho de um desenvolvedor de software típico.

E aqui estão as principais fontes que usei:

  • Ciência da Computação em Waterloo
  • Engenharia de Software em Waterloo

Obrigado pela leitura e boa sorte em escolher uma universidade e seu curso! ?