見出し画像

CS(コンピューターサイエンス)とは?学ぶべき?

こんにちは!😊
Slalomでエンジニアをしている@new_marty7です!
今回はコンピューターサイエンスとは何か?、エンジニアはCSを学ぶべきなのか?、について書いていきたいと思います!

自分のCSの知識

まず、自分がCSの知識がどれほどあるか書いておかないとこの記事の説得力が全くないと思うので書いておきます。
自分は慶應の理工学部情報工学科を卒業しています。研究室はソフトウェアテストを専門としている先生の研究室に大学4年の時に配属されました。大学4年の時には大学院の授業を先取りし、JavaScriptのライブラリに関する研究をしました。その後はArizona State Universityのオンラインの大学院に進学し、CSを専攻しています。(在学中)また、学生時代からエンジニアとしてインターンをさまざまな会社で経験し、Slalomに入社しました。
まだまだ下っ端ですが、それなりにCSだったりエンジニアとしての知識はあります。🙂

CSってそもそも何?

おそらくCSを学んだことがない人からすればそもそもCSって何のことを指すん?🤷‍♂️って感じだと思います。自分が知る限りのことを説明していきたいと思います。(慶應とASUでの経験を元に書いてます。)
まず、日本の「情報工学科」とアメリカの「Computer Science」では学ぶことが少し違います。
日本の情報工学科では、ハードウェア、ネットワーク、電気回路、プログラミング、DSA、OSなどかなり幅広く授業があります。ただ、一つ一つの分野で提供される授業は少ないです。つまり広く浅くと言った印象です。それに対し、アメリカのComputer Scienceではそのうちのプログラミング、DSA、OSなど、もっとソフトウェアに近い部分を深く勉強する分野という印象です。そのほかの分野はComputer Engineeringと呼ばれたりしますね。

ASUで提供されている授業
慶應のカリキュラムマップ

Wikipediaの日本語ページ計算機科学(https://ja.wikipedia.org/wiki/計算機科学)と英語ページのComputer Science(https://en.wikipedia.org/wiki/Computer_science)でも少しニュアンスが違います。面白いですね。
では本題のCSとは何かについてです。(ここからはかなり個人的な意見になります。)CSの分類の仕方はいろいろあると思います。例えばWikipediaだとTheoretical computer science, Applied computer science, Computer systemsの3つに分類されています。それを総合したものがCSということもできると思うし、ASUが提供している授業の全てをまとめてCSということもできると思います。ただ、自分はプログラミング、データ構造とアルゴリズム、OS論が基礎となった上でそのほかのものがあるんじゃないかなって思っています。物理はいろいろと分野があるけど結局最初に習うのはma=F!のような感覚です。なので少し前まではBig Techの会社が別に業務ではそんなに高度なアルゴリズムだったりデータ構造を使うことないのにコーディングテストをするのはなんでだろうと思っていましたが、最近は結構合理的なことをしているんじゃないかとしっくりきています。
では基礎の上には何があるのかについてですが、最近であれば以下の4分野なんじゃないかなと思います

  • AI and Machine Learning

  • Big Data

  • Cybersecurity

  • Software Engineering

これはASUが提供しているProfessional Certificationです。マスターを取るにあたってその分野の授業を一定数以上取ればプラスで資格をくれるというシステムです。個人的にはこれはよく分類されていると思います。ソフトウェアエンジニアからすればこの中で必要になってくるスキルはSoftware Engineeringでしょう。DSAを学んだ上でソフトウェア工学を学べばかなり専門的な知識を持ったいいエンジニアになれると思います。
Software Engineeringは

  • Software Design

  • Software Verification, Validation and Testing

  • Software Project, Process and Quality Management

のような授業がASUでは提供されています。https://scai.engineering.asu.edu/wp-content/uploads/sites/31/2023/04/List-of-CS-Area-Courses-Matrix.pdf

学ぶ価値はあるの?

自分は大いにあると思います!ASUに入らなかったら知らなかったこと、勉強して業務に生きていることがたくさんあります。ソフトウェアエンジニアとして仕事をしている上で、かなりCSの知識は貢献してくれています。また、日本の情報工学とアメリカのCSは全く別物です。先述しましたが、より自分の興味のある狭い分野を深く学べています。前回の記事で「日本のIT業界は10年遅れている」と書きましたが、よりそのことをCSの教育を通して実感しています。特に未経験の方は基礎だけでも学ぶべきだと思います。

マネージャーにCSの学位についてどう思ってるか聞いてみた

マネージャーにCSの学位はとった方がいいかを聞いてみました。アメリカ出身で何年もテック業界で経験があり、Resumeのスクリーニングや面接もしている方なので参考になると思います。(一個人の意見だから参考までに聞いてねって本人が言ってました。)
※英語で話した内容なので意訳しています。ご了承ください。

Q. CSの学位は取るべき?
A. エントリーレベルの人だったらかなり価値があると思う。ただ、経験が豊富になっていくにつれて相対的に価値は薄くなっていくかな。

Q. 日本ではCSの学位がそこまで評価されない感じがするんだけどどう思う?
A. 日本って変だよね笑。日本の採用の仕方ってメンバーシップ型なんだ。正社員になるってことは、会社の一員(メンバー)になるという契約をする。逆にアメリカだと仕事をしてもらうことに契約をする。(いわゆるジョブ型の採用。)どういうことかっていうと、日本の会社ではある仕事がなくなったらその仕事をしていた人には別の部署で仕事をしてもらう。アメリカではポジションや部署がなくなれば簡単にレイオフされる。どっちにもいい部分も悪い部分もあるけどね。ただメンバーシップ型だとせっかく大学で学んだこととは全く別のことを仕事でやらされることも少なくない。エンジニアリングみたいに高度な専門的知識が必要とされる分野においてはこれはよくないことだよね。そう言った専門的な分野においては学位はより重要だと思う。個人的には日本は早くメンバーシップ型をやめた方がいいと思ってるよ。

Q. 同じ学歴社会でも日本はどこの大学に行ったか、アメリカは何を学んだかが重要視されている印象があるけどどう思う?
A. その通りだと思う。さっきも言ったように日本はメンバーシップ型の採用だからそうなんだろうね。

Q. じゃあインタビューをする側の意見として、CSの学位があることはどう見る?
A. エントリーレベルだったら見るかな。ただ、学位があるだけだったらResumeスクリーニングで落としてインタビューには呼ばないと思う。それよりもその人のやる気だったり本気度がみれた方が印象がいい。例えば、その学んだことで何かを自分で作ってみたり、OSSにコミットしてみたり、学んだことをいかせているかの方が重要だと思う。

Q. これから大学を選ぶような高校生になんてアドバイスする?
A. 何を学ぶかと学んだことで何を成し遂げるかを意識した方がいいかな。あと、その上でネットワーキングをした方がいい。人とのつながりを大切にした方がいい。何かあったときに一番大事になってくる。あとはどの学校で学ぶかはそんなに重要じゃない。強いて言えばその学校がどんなプログラミング言語で教えているかは少し重要だけどそれよりも何を学ぶかの方がよっぽど重要だと思う。

Q. どんな人がCSを学ぶべきだと思う?
A. CSの知識があると複雑なことをしようと思ったらその知識が活きてくると思うね。答えがどこにもないようなことを追い求める仕事ををするときとか。逆にスタートアップとかでコードをひたすら書くみたいな環境だったらそんなに活きてはこないかもね。本当に最先端なこととか自分で道を切り開かなきゃいけないこととかをするんだったらとっても価値があると思うよ。

最後に

いかがだったでしょうか?この記事でCSを学んでみよう!と思ってくれる方が一人でもいてくれたら嬉しいです!☺️
これからも自分がより良いエンジニアになる模索をしていく中で得た知見を発信していく予定なのでよかったらtwitter, noteフォローお願いします!


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