見出し画像

なぜ、プログラミングではなく「コンピュータサイエンス」なのか

プログラミング教育の関心が高まっている日本。その一方で、シリコンバレーを代表とするアメリカでは、コンピュータ活用全般を扱う学問分野である「コンピュータサイエンス」の教育に本格的に力が注がれています。なぜアメリカではコンピュータサイエンスの教育が重要とされているのでしょうか?

データは現代の石油

2007年スティーブジョブスがiPhoneを発売して以降、スマートフォンが急速に普及し、私たちは場所、時間を問わず世界中と繋がることができるようになりました。また、インターネットの増大とIoTの普及により、ヒト・モノ・組織がネットワークに繋がり、大量のデータが生成、収集、および蓄積されるようになりました。

このように、現実世界からより多くのデータを収集し、サイバー空間で現実世界の状況をより詳細に再現することができるなったおかげで、私たちは情報を可視化できるようになり、これまでとは異なる視点や考え方によって、今まで解明不可能であった問題や、将来までも予測できるようになりました。

また近年データの価値は上昇し続け、データは「21世紀の石油」と表現されるようになり、GoogleやApple、Amazonを始めとするIT企業は、膨大なデータを活用することによって、大きな影響を社会に与えるようになりました。

コンピュータサイエンスとは?

コンピュータサイエンスとは、アルゴリズム、データ構造、グラフ理論、データベース、離散数学、ハードウェアの仕組みなど、コンピュータに関する基礎からハイレベルな内容まで体系的に学習できる学問です。

会計、ビジネス戦略、データ分析、ファイナンス、マーケティングなどのビジネスに必要な科目を体系的に学習できるMBAを想像するとわかりやすいかもしれません。

コンピュータサイエンスは「データを扱う」学問であるため、コンピュータサイエンスによって現実世界の事象をサイバー空間で表現し、膨大なデータを処理できるようになります。ファイナンスや考古学、生命科学などあらゆる分野に活用できるその柔軟性によって、シリコンバレーを始めとするアメリカでは特に高く評価されている学問の1つです。

コンピュータサイエンスを大学及び大学院で学習すると、ソフトウェアに関する知識を体系的に持っているとみなされ、アメリカでは特に高く評価されます。

プログラミングとコンピュータサイエンスの違い

プログラミングとは、PythonやJavaScript、Javaなどのプログラミング言語を用いて、仕様通りにタスクを実行するように処理を記述することです。多くのプログラマーは仕様通りにしかプログラムが書けないため、自力で何かを開発する際に限界があります。

一方、コンピュータサイエンスを学習すると、コンピュータに関する基礎知識を幅広く持っているため、その知識を組み合わせることによって、より革新的なソフトウェアを開発することができます。より応用力のある開発者として活躍することができるでしょう。

例えば、Ruby on Railsの使い方を学習して会社にエンジニアとして働いているとしましょう。1年後Ruby on Railsが廃れ始め、勤務先の会社がNode.jsに切り替えると決定しました。

既に開発済みのソフトウェアを別の言語やフレームワークに書き換えるのは簡単ではありません。言語やフレームワークがどのように動いているかを深く理解しておく必要があります。このとき、コンピュータサイエンスの知識がないと、このタスクを実行することができません。

技術トレンドの移り変わりは激しいため、1つの言語やフレームワークに固執することはとても危険です。コンピュータサイエンスは約50年間続いている学問で、トレンドに関係なく、いつでも活躍することができます。

コンピュータサイエンスで何ができるのか?

コンピュータサイエンスは先述のようにコンピュータに関する知識を体系的に網羅した学問であるため、ソフトウェアエンジニアとしてのキャリアの幅が広がります。

ソフトウェアエンジニアと言ってもその専門性によって仕事内容が変わります。

・フロントエンドエンジニア
・バックエンドエンジニア
・フルスタックエンジニア
・ゲーム開発エンジニア
・情報セキュリティアナリスト
・データサイエンティスト
・機械学習エンジニア
・組み込みシステムエンジニア
・デスクトップアプリエンジニア
・モバイルアプリエンジニア
・グラフィックエンジニア
・ネットワークアーキテクト

これらの専門分野の知識のほとんどはコンピュータサイエンスがベースになっています。コンピュータサイエンスを学習すると、新しい言語やフレームワークを学習したり、新しい分野を研究する際に非常に役に立ち、学習コストを大幅に下げます。職種に関係なく使える知識を身につけておくことはとても重要です。

またソフトウェア開発はデバッグが開発時間のほとんどを占めます。大半のケースでは、プログラミングの知識、コンピュータサイエンスの知識が必要で、OSレベルの知識が必要なことも少なくありません。単にプログラミング言語の文法やフレームワークの使い方を知っているだけでは、デバッグに多くの時間がかかってしまい、雇用者にとってデメリットになってしまいます。

テック企業はコンピュータサイエンスの知識を最優先

シリコンバレーを始めとする多くのアメリカのテック企業では、コンピュータサイエンスの知識をチェックするために技術面接を課します。

例えば、以下のような質問です。

1).
文字列stringが与えられたとき、特定の文字の出現回数を調べるためにはどうすれば良いですか?(例)abacec => a:2, b:1, c:2, e:1
解答:ハッシュマップの知識が必要

2).
2進数b1, b2が文字列として与えられたとき、その合計値を文字列として表すにはどうすれば良いですか?(例)”1011”, “110” => “10001”
解答:配列、スタックの知識が必要

3).
異なる額面の硬貨を表す整数によって構成される配列coinsと、金額を表す整数amountが与えられるので、金額amountを構成するのに必要な最も少ない枚数の硬貨を調べるにはどうすれば良いですか?(例)[1,3,4,5], 7 => 1×2, 5で3枚必要
解答:動的計画法の知識が必要

これらの問題は単にプログラミング言語の文法やフレームワークの使い方を知っているだけでは解答することは不可能です。アメリカではコンピュータサイエンスの知識がないと技術系の会社にソフトウェアエンジニアとして就職することは不可能になっています。

コンピュータサイエンスの知識がなくて就職できる会社は、技術をよく理解していない会社のみになります。ローカルのアパレルショップがECサイトを作るとか、ピザ屋がオンラインで注文できるアプリを作成するような例が挙げられるでしょう。

このような会社はアプリが動作すれば問題ないわけですから、コンピュータサイエンスの知識があるような高いレベルの技術者は必要ありません。コンピュータサイエンスを重要視しない傾向にあります。

ソフトウェアの世界は目前

現在の傾向としてソフトウェア産業が爆発的に伸びているのは間違いありません。ハードウェアである車にソフトウェアを上手く組み込んだTeslaのようにこれから既存の産業とソフトウェアが融合する時代が少しずつ訪れています。製造業だけでなく、金融、通信、リテール、あらゆる産業において、すべての企業がソフトウェア企業になる時代も目前でしょう。

テスラをただの電気自動車と捉えるのか、ソフトウェアが搭載されたハードウェアと捉えるのかによって、これからの時代の立ち回りが変わってくるかもしれません。コンピュータサイエンスを学習することで、アドバンテージが生まれると思いませんか?

アメリカのテック企業はコンピュータサイエンスの知識がある高度な開発者に対して、莫大な年収を提示し、人材の取り合いが激化しています。このトレンドは間違いなく日本でも近い将来起きるでしょう。

これからコンピュータサイエンスを学ぼうとしてる方へ

コンピュータサイエンスはこれからの時代で最も役に立つ需要の高いスキルの1つと言っても過言ではありません。ソフトウェアが発展していく限り、必ず必要とされるスキルであり、一度身につけると一生困ることはないでしょう。

コンピュータサイエンスは、幅広い知識をカバーしているため、短期間で学習できるものではありません。根気は必要ですが、数学が好きな人や、やる気のある方にはぜひチャレンジしてほしいなと思っています。

コンピュータサイエンスは世界共通言語なので、習得できれば日本だけでなく外資系企業で働くことも十分可能ですし、自分のアイデアをソフトウェアという形で実現することだってできるようになります。

社会人になってからの学び直しを

アメリカではコンピュータサイエンスの学位がないとテック企業に就職できないのですが、日本では未経験から採用し、会社でトレーニングするという文化が深く根付いています。

ある一定の期間トレーニングを受けると、業務周りの開発(似たようなことの繰り返し)はできるようになるかもしれません。ただコンピュータに関する体系的な知識が抜けていると、答えが用意されていない開発に取り組むことはほぼ無理と言っても過言ではないでしょう。

ビジネス系の方が体系的な知識の学び直しとしてMBAを活用するように、非情報系からエンジニアになった方が学び直しとしてコンピュータサイエンスを学習することはとても意味があると思っています。

最後に・・・

私はアメリカに来て、日本の大学であまり見たことなかったコンピュータサイエンスという科目が多くのアメリカの大学で導入されていること、またコンピュータサイエンスを学習するために世界中から留学生が集まっていることに驚きを隠せませんでした。そして、アメリカ、特にカリフォルニア州から世界中の人々の生活を変えるようなソフトウェアが多く生まれるのを目の当たりにしてきました。

そんな中、少しでも日本にコンピュータサイエンスの重要性が伝わればという思いで、この記事を執筆しました。この記事を読んで少しでも共感があれば、いいね、およびシェアして頂けると嬉しいです。

PS: Meta(旧:Facebook)のソフトウェアエンジニア(@jalva_dev)とアメリカの大学のカリキュラムに沿ったコンピュータサイエンスを無料で学習できるプラットフォーム「Recursion」を立ち上げたので、ぜひ使ってみてください。



この記事が気に入ったらサポートをしてみませんか?