コンピュータサイエンスVSソフトウェアエンジニアリング-どの専攻があなたに最適ですか?

こんにちは、みなさん!私の名前はYKです。現在、チャンネル登録者数が20万人を超えるプログラミング教育YouTubeチャンネルであるCSDojoを運営しています。私は以前、Googleのソフトウェア開発者でもありました。

私の聴衆が私に尋ねる最も一般的な質問の2つは次のとおりです。

「コンピュータサイエンスとソフトウェアエンジニアリングの専攻の違いは何ですか?」

そして…

「ソフトウェアエンジニアになりたいのなら、コンピュータサイエンスとソフトウェアエンジニアリングのどちらを選ぶべきですか?」

この記事では、これに答えて、これらの専攻についての私自身の簡単な分析を提供します。

これら2つの専攻の概要

  • コンピュータサイエンスは、主に理論的および数学的観点から、コンピュータがどのように機能するかを研究するものです。
  • 数学、論理学が好きな場合、または人工知能、機械学習、セキュリティ、グラフィックスなどのCSの専門分野に参入したい場合は、コンピュータサイエンスを選択する必要があります。
  • ソフトウェアエンジニアリングは、プロジェクト管理、品質保証、ソフトウェアテストなどのトピックを含む、ソフトウェアシステムの構築方法の研究です。
  • 実践的なアプローチに興味があり、ソフトウェアの構築と保守のライフサイクル全体を学びたい場合は、ソフトウェアエンジニアリングを選択する必要があります。
  • コンピュータサイエンスとソフトウェアエンジニアリングはどちらもプログラミングとコンピュータサイエンスの基礎を教えているので、どちらかを選択してソフトウェア開発者になることができます。

コンピュータサイエンスとソフトウェアエンジニアリングの専攻の違いを理解するために、カナダのウォータールー大学でそれぞれのカリキュラムを見てみましょう。

ウォータールー大学は北米で最高のコンピュータサイエンスプログラムの1つであるため、このために選択しました。

就職の見通し

まず、各プログラムで得られる仕事やインターンシップの種類を比較してみましょう。

ありがたいことに、ウォータールー大学のWebサイトにはいくつかの例があります。

専攻ごとに、卒業生が保持しているタイトルのいくつかと、それらが機能する場所は次のとおりです。

コンピュータサイエンス

  • The Steele Group、Web開発者/アーキテクト
  • プログラマー、Harry Rosen Inc.
  • モバイル/クラウド開発者、Clearbridge Associates Limited
  • ソフトウェアエンジニアリング、ジェネラルダイナミクスカナダ
  • ソフトウェア開発エンジニアリング、マイクロソフト
  • アジャイルエンジニア、Pivo​​tal Labs
  • カナディアンタイヤコーポレーションビジネスアナリスト
  • 開発者擁護者、Google
  • Dropboxのプロダクトマネージャー

ソフトウェア工学

  • TaggedIncのソフトウェア開発者
  • ソフトウェア開発者、IBM Canada
  • Arius SoftwareCorporationのソフトウェアマネージャー
  • VistaPrint USA、ソフトウェアエンジニア
  • ハリスコーポレーションソフトウェアエンジニア
  • アクセンチュア株式会社ソフトウェア開発者
  • テクニカルプロダクトマネージャー— NexJ Systems Inc、ソフトウェア設計および開発
  • PureFacts FinancialSolutionsのコンサルタント
  • 実装コンサルタント、Desire2Learn

ご覧のとおり、取得できる仕事の種類に大きな違いはありません。

コンピュータサイエンスまたはソフトウェアエンジニアリングの学位を取得した後に取得する最も一般的な仕事の卒業生は、ソフトウェア開発者またはソフトウェアエンジニアです。

プロダクトマネージャー、QAアナリスト、テクノロジーコンサルタントなど、他の関連オプションもあります。オプションは、特定のスキルセットによって異なります。

初年度コース:

それでは、各プログラムに必要なコースを見てみましょう。まず、1年目に受講する必要のあるいくつかのコースを比較してみましょう。

コンピュータサイエンス

  • CS 135 —関数型プログラムの設計
  • CS 136 —アルゴリズムの設計とデータの抽象化
  • 数学135—代数
  • 数学136—線形代数1
  • 数学137—微積分1
  • 数学138—微積分2
  • プラスいくつかの選択科目

ソフトウェア工学

  • CS 137 —プログラミングの原則
  • CS 138 —データの抽象化と実装
  • 数学115—工学のための線形代数
  • 数学117—工学のための微積分1
  • 数学119—工学のための微積分2
  • MATH 135 —優等数学の代数
  • ECE 105 —電気工学の物理学1
  • ECE 106 —電気と磁気
  • ECE 124 —デジタル回路およびシステム
  • ECE 140 —線形回路
  • SE 101 —ソフトウェアエンジニアリングの方法

ご覧のとおり、初年度のコースもかなり似ています。どちらも、いくつかの基本的なコンピュータサイエンスのコースと、線形代数と微積分のいくつかの数学のコースをカバーしています。

唯一の大きな違いは、ソフトウェアエンジニアリングには追加の物理学と電気工学のコンポーネントがあり、コンピュータサイエンスにはさらにいくつかの選択科目があることです。

初年度以降のコース:

初年度以降の必須コースと選択コースはどうですか?ここでいくつかの例を見てみましょう:

コンピュータサイエンス:

  • 数学239組み合わせ論入門
  • STAT230の確率
  • STAT231統計
  • CS240のデータ構造とデータ管理
  • CS241シーケンシャルプログラムの基礎
  • CS245の論理と計算
  • CS246オブジェクト指向ソフトウェア開発<-ソフトウェア工学専攻では必要ありません
  • CS251コンピューターの編成と設計
  • CS341アルゴリズム
  • CS350オペレーティングシステム
  • さらに、いくつかのコンピュータサイエンスの選択科目

ソフトウェア工学:

  • エンジニアのためのCHE102化学
  • ECE 222デジタルコンピュータ(アセンブリ言語を含む)
  • ECE358コンピュータネットワーク
  • MATH213ソフトウェアエンジニアのための高度な数学
  • 数学239組み合わせ論入門
  • ソフトウェアエンジニアリングのためのSTAT206統計
  • MSCI 261エンジニアリング経済学:エンジニアのための財務管理
  • CS241シーケンシャルプログラムの基礎
  • CS240のデータ構造とデータ管理
  • CS247ソフトウェアエンジニアリングの原則<-コンピュータサイエンス専攻には必要ありません
  • CS341アルゴリズム
  • CS349ユーザーインターフェイス<-コンピュータサイエンス専攻には必要ありません
  • CS343並行および並列プログラミング<-コンピュータサイエンス専攻には必要ありません
  • CS348データベース管理の概要
  • SE212ロジックと計算
  • SE350オペレーティングシステム
  • SE465ソフトウェアテストと品質保証
  • SE464ソフトウェアの設計とアーキテクチャ
  • SE463ソフトウェア要件の仕様と分析
  • SE490設計プロジェクト
  • さらに、いくつかのコンピュータサイエンスと電気工学の選択科目

ここで消化するための多くの情報を提供しました。しかし、ここに私の要約があります:

数学と統計の要件に関しては、コンピュータサイエンスとソフトウェアエンジニアリングはほとんど同じです。それらは、組み合わせ論、確率論、統計をカバーしています。

コアコンピュータサイエンスの要件も同様であり、アルゴリズム、データ構造、オペレーティングシステムにまで及びます。

主な違いは次のとおりです。

  • ソフトウェアエンジニアリングには、ソフトウェアテスト、設計、ソフトウェア要件の仕様など、電気工学およびソフトウェアエンジニアリングの基礎に関する要件が多くあります。
  • コンピュータサイエンスは、より高いレベルのコンピュータサイエンスコースでより多くの選択科目を許可します。セキュリティ、ソフトウェアエンジニアリングの基礎、コンピュータビジョン、機械学習、データベース管理など、幅広いトピックから選択できます。

それで、あなたはどの専攻を選ぶべきですか?

それは主にあなたの好みに依存すると思います。要するに:

  • 数学、論理学が好きな場合、または人工知能、機械学習、セキュリティ、グラフィックスなどのCSの専門分野に参入したい場合は、コンピュータサイエンスを選択する必要があります。
  • 実践的なアプローチに興味があり、ソフトウェアの構築と保守のライフサイクル全体を学びたい場合は、ソフトウェアエンジニアリングを選択する必要があります。

しかし、待ってください—それでは、どちらですか?ソフトウェアエンジニアになりたいのであれば、どちらの専攻が良いですか?

これが私の意見です。この特定の大学(ウォータールー大学)では、この特定の一連のプログラム要件があるため、ソフトウェアエンジニアになりたい場合は、コンピューターサイエンスの方が優れています。

簡単にするために、北米でソフトウェアエンジニアとして、最も給与の高い仕事(〜$ 100,000 USD /年)を取得したいとしているとします。これらの仕事は通常、大規模なソフトウェア会社(Microsoft、Google、Amazonなど)または中規模の高成長企業(Dropbox、Lyft、Snapchat、Pinterestなど)で行われます。

通常、ソフトウェアエンジニアの候補者に求められるのは、堅実なコードを記述して興味深いプロジェクトを構築する能力と、データ構造やアルゴリズムなどのコンピューターサイエンスの基礎です。

このスキルセットを養うための最良の方法は、コンピュータサイエンスの基礎をすばやく学び、問題の解決とコードの記述に時間を費やすことだと思います。

ソフトウェアエンジニアリングのカリキュラムと、エンジニアリングの学生が一般的にどれほど忙しい傾向があるかに基づいて、コンピュータサイエンスよりもソフトウェアエンジニアリングでこれを行うのは難しいと思います。

この特定のコンピュータサイエンスプログラムのもう1つの利点は、より多くのコンピュータサイエンスの選択科目が可能になることです。求人市場で何が求められているかに応じて、コースを調整できるので、これも素晴らしいことです。たとえば、モバイルアプリの開発が求められている場合は、それを学ぶことができます。また、並列コンピューティングが必要な場合は、代わりにそれに集中することができます。

ソフトウェアエンジニアリングの基礎(プロジェクト管理、設計、テストなど)を学ぶことにはいくつかの利点があると確信しています。しかし、私は個人的には、事前定義された一連のスキルに対して柔軟性を持たせたいと思います。そのため、この特定のカリキュラムでソフトウェアエンジニアになるには、コンピュータサイエンスの方が専攻であると思います。

もちろん、それは私の意見であり、これはただ1つの特定の大学です。コンピュータサイエンスまたはソフトウェアエンジニアリングを専攻した場合のあなたの意見と経験についてお聞かせください。以下のコメントで教えてください。

いくつかのメモ

注1:大学が異なれば、これら2つの専攻の要件も異なります。この記事は良い出発点になるはずですが、それでもあなたが参加したい大学のプログラム要件を見る必要があります。

注2:一部の大学にはソフトウェア工学専攻さえありません。たとえば、バンクーバーにあるブリティッシュコロンビア大学には、コンピュータサイエンスとコンピュータエンジニアリングの学位がありますが、ソフトウェアエンジニアリングの学位はありません。しかし、彼らはコンピュータサイエンスプログラムやコンピュータエンジニアリングにソフトウェアエンジニアリングを集中させています。

興味のある大学にソフトウェア工学専攻がない場合、ソフトウェア開発者になりたいのであれば、コンピュータサイエンスを利用します。コンピュータエンジニアリングは、コンピュータサイエンスやソフトウェアエンジニアリングよりもハードウェアに重点を置いているため、一般的なソフトウェア開発者の仕事とは直接関係がありません。

そして、これが私が使用した主な情報源です:

  • ワーテルローのコンピュータサイエンス
  • ワーテルローのソフトウェアエンジニアリング

読んでくれてありがとう、そして大学とあなたの専攻を選んで頑張ってください! ?