Artigo original: Computer Science VS Software Engineering - Which Major Is Best For You?

Escrito por: YK Sugi

Olá a todos! Meu nome é YK e, atualmente, sou o responsável pelo CS Dojo, um canal de educação em programação no YouTube com mais de 200 mil inscritos. Também já fui desenvolvedor de software na Google (texto em inglês).

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 eu quiser ser um engenheiro de software"

Nesse artigo, eu vou responder a isto e dar minha própria análise rápida sobre esses cursos.

Uma rápida visão geral dos dois cursos

  • Ciência da Computação é o estudo de como os computadores funcionam, a maioria sob a perspectiva teórica e da matemática.
  • Você deveria escolher Ciência da Computação se você gosta de matemática, lógica, ou se quiser entrar em um campo especializado da Ciência da Computação, como inteligência artificial, aprendizagem de máquina, segurança ou na área gráfica.
  • Engenharia é o estudo de como os sistemas de software são construídos, incluindo tópicos como gestão de projetos, garantia de qualidade e testes de software.
  • Você deve escolher a Engenharia de Software se estiver mais interessado na abordagem prática e se quiser aprender sobre o ciclo de vida em geral, sobre 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. Então, você pode escolher qualquer dessas opções para se tornar um desenvolvedor de software.

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

Escolhi a Universidade de Waterloo para isso porque é um dos melhores programas de Ciência da Computação da América do Norte.

Perspectivas de trabalho

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

Felizmente, o site da Universidade de Waterloo dispõe de vários exemplos.

Para cada área, aqui estão alguns dos títulos que os ex-alunos detêm, e onde eles trabalham:

Ciência da Computação

  • Desenvolvedor para a web/arquiteto, The Steele Group
  • Programador, Harry Rosen Inc.
  • Computação em nuvem/dispositivos móveis, Clearbridge Associates Limited
  • Engenheiro de software, General Dynamics Canada
  • Engenheiro desenvolvedor de software, Microsoft
  • Engenheiro agile, Pivotal Labs
  • Analista de négocios, Canadian Tire Corporation
  • Consultor de desenvolvimento, Google
  • Gerente de produtos, Dropbox

Engenheiro de Software

  • Desenvolvedor de software, Tagged Inc
  • Desenvolvedor de software, IBM Canada
  • Gerenciador de software, Arius Software Corporation
  • Engenheiro de software, VistaPrint USA
  • Engenheiro de software, Harris Corporation
  • Desenvolvedor de software, Accenture Inc.
  • Gerente técnico de produtos — Designer de software e desenvolvimento , NexJ Systems Inc
  • Consultor, PureFacts Financial Solutions
  • Consultor de implementação, Desire2Learn

Como pode perceber, não há uma grande diferença entre os tipos de trabalhos que você pode ter.

O emprego mais comum que os graduados obtêm após receberem seu diploma de Ciência da Computação ou de Engenharia de Software é o de desenvolvedor ou engenheiro de software.

Existem também outras opções relacionadas, tais como gerente de produtos, analista de garantia de qualidade e consultor em tecnologia. Suas opções dependerão de seu conjunto de habilidades específicas.

Primeiro ano:

Agora, vamos dar uma olhada nos cursos obrigatórios de cada programa. Vamos primeiro comparar alguns dos cursos que você precisaria fazer em seu primeiro ano.

Ciência da Computação

  • CC 135 — Projeto de programas funcionais
  • CC 136 —  Projeto de algoritmos e abstração de dados
  • Matemática 135 — Álgebra
  • Matemática 136 — Álgebra linear 1
  • Matemática 137 — Cálculo 1
  • Matemática 138 — Cálculo 2
  • Além de algumas eletivas

Engenharia de Software

  • CC 137 — Princípios de programação
  • CC 138 — Abstração e implementação de dados
  • MATH 115 — Álgebra linear para engenheiros
  • MATH 117 — Cálculo 1 para engenheiros
  • MATH 119 — Cálculo 2 para engenheiros
  • MATH 135 — Álgebra para o bacharelado em 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 também são bastante semelhantes. Ambos cobrem alguns assuntos fundamentais de ciência da informação, e alguns assuntos da 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 engenharia elétrica, enquanto a Ciência da Computação tem mais algumas eletivas.

Curso após o primeiro ano:

E quanto aos cursos obrigatórios e opcionais após o primeiro ano? Vamos dar uma olhada em diversos exemplos aqui:

Ciência da Computação

  • MATH 239 Introdução à combinatória
  • Estatística 230 Probabilidade
  • Estatística 231 Estatística
  • CC 240 Estruturas de dados e gerenciamento de dados
  • CC 241 Fundamentos de programas sequenciais
  • CC 245 Logica e computação
  • CC 246 Desenvolvimento de software orientado a objetos <- não exigido para a área de Engenharia de Software
  • CC 251 Designer e organização de computadores
  • CC 341 Algoritmos
  • CC 350 Sistemas operacionais
  • Além disso, várias 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 engenheiros de software
  • MSCI 261 Economia da engenharia: gestão financeira para engenheiros
  • CC 241 Fundamentos de programas sequenciais
  • CC 240 Estruturas de dados e gerenciamento de dados
  • CC 247 Princípios de engenharia de software <- não é necessário para a área de Ciência da Computação
  • CC 341 Algoritmos
  • CC 349 Interface de usuário <- não é necessário para a área de Ciência da Computação
  • CC 343 Programação concorrente e paralela <- não necessário para a área de Ciência da Computação
  • CC 348 Introdução a gestão de bancos de dados
  • ES 212 Logica e computação
  • ES 350 Sistemas operacionais
  • ES 465 Testes de software e garantia de qualidade
  • ES 464 Design de software e arquitetura
  • ES 463 Especificação e análise de requisitos de software
  • ES 490 Design de projetos
  • Além disso, algumas eletivas de Ciência da Computação e da Engenharia Elétrica

São MUITAS informações para assimilar, mas aqui está o resumo

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

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

As diferenças principais são:

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

Então, qual você deveria escolher?

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

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

Mas espere qual dos cursos, então? Qual é melhor se você quer ser um engenheiro de software?

Bem, aqui vai minha opinião. Nessa universidade específica (Universidade de Waterloo), com esse conjunto específico de requisitos do programa, a Ciência da Computação é um curso melhor se você deseja ser um engenheiro de software.

Apenas por simplicidade, vamos supor que você esteja esperando conseguir um dos empregos mais bem-pagos (cerca de U$ 100.000/ano) como engenheiro de software na América do Norte. Estes empregos são normalmente em grandes empresas de software (pense na Microsoft, Google, Amazon etc.) ou em empresas de médio porte, de alto crescimento (pense na Dropbox, Lyft, Snapchat, Pinterest etc.).

Tipicamente, o que eles procuram em candidatos a engenheiro de software é a habilidade de escrever códigos sólido e de construir projetos interessantes, bem como os fundamentos da Ciência da Computação, incluindo estruturas de dados e algoritmos.

Acho que a melhor maneira de ter este 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 no quanto os estudantes de engenharia tendem a estar 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 particular de Ciência da Computação é que ele permite mais eletivas em Ciência da Computação. Isto também é ótimo porque, dependendo do que estiver em demanda no mercado de trabalho, você será capaz de ajustar seus cursos. Por exemplo, se o desenvolvimento de aplicativos para dispositivos móveis estiver em demanda, você poderá aprender a fazer isso. E se a computação paralela estiver em demanda, você pode se concentrar nisso no lugar dos aplicativos móveis.

Tenho certeza de que há alguns benefícios na aprendizagem de fundamentos de engenharia de software (gerenciamento de projetos, design, testes etc.). Mas eu, pessoalmente, preferiria ter flexibilidade com relação a um conjunto pré-definido de habilidades. É por isso que eu acho que a Ciência da Computação é uma área melhor para se tornar um engenheiro de software com este currículo em específico.

Claro, esta é apenas minha opinião, e essa é apenas uma universidade em particular. Eu adoraria saber a sua opinião e como foi sua experiência se você se formou em Ciência da Computação ou em Engenharia de Software.

Algumas observações

Observação 1: Universidades diferentes têm exigências diferentes para estas duas áreas de habilitação principal. 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 frequentar.

Observação 2: Algumas universidades não possuem sequer uma especialização em Engenharia de Software. Por exemplo, a Universidade de British Columbia, em Vancouver, tem graduação em Ciência da Computação e Engenharia de Computação, mas não em Engenharia de Software. No entanto, os dois cursos têm uma área focal em engenharia de software dentro de seu programa de Ciência da Computação, bem como no de Engenharia da Computação.

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

Essas são as principais fontes que usei:

Obrigado pela leitura e boa sorte escolhendo sua universidade e sua especialização!