見出し画像

文系エンジニアのためのコンピューターサイエンスの学び方


日本では理系出身ではなくてもITエンジニアになれます。

私は文学部出身の機械音痴でしたし、学歴関係なく中卒でも高卒でもエンジニアになれます。

海外の方と話していて「私は文学部出身で今はWeb開発者だ、自分で勉強したんだよ」というとすごく驚かれます。
多くの海外では「コンピューターサイエンス」の学位がなければエンジニアになることは難しいんです。

「私はエンジニアにはなれないわ、大学で専攻してないから」
と言う話を聞くと日本人でよかった、とこの時ばかりは思います。

エンジニアに関わらず、学部の選択が将来の仕事に直結するってなんか責任が思いですよね。10代そこらで自分が何をしたいのか何に向いているのかなんてわからないし決められない。


そんな、ある意味恵まれた環境にいる文系エンジニアですが、仕事を始めると必ずと言っていいほど壁にぶつかります。

それがコンピューターサイエンスの知識です。
(日本だと電子工学?情報工学?)


Javascriptでコーディングができる!Dockerを使って開発ができる!
それでも仕事は成り立ちます。
ただ、「メモリ」「アルゴリズム」「カーネル」「プロセス」「OS」..などちゃんと理解してますか?

こういうこと、ちゃんと理解しているか(しようと努めているか)でエンジニアの本質が問われてくる気がします。

と、偉そうにいう私も全然ダメです。

以前、あるIT企業の技術面接を受けた時に、この辺の理解を問われるような課題を出されてほんとにぽかん...😦でした。
(面接はここで落ちました..)
この時はなんかすごく恥ずかしくて、情けなくてかなり落ち込みましたね。

が、相変わらず切り替えが早いのでちゃんと勉強しようと思い、コンピューターサイエンスってなんやねん、どうやって(無料で)勉強できるのかを調べ始めました。


これまでに学習した、今も学習している勉強法がこちらです。

・edX CS50's Introduction to Computer Scienceの受講
・情報処理技術者試験(基本・応用)の本を読む
・LeetCodeでアルゴリズムの基礎問題を解く


edX

https://www.edx.org/
HarvardとMIT大学で作られたオンライン学習プラットフォームです。
 CS50's Introduction to Computer Scienceという講座が有名で、この講座で超基本的なコンピューターサイエンスの勉強できます。
しかもハーバード大学講師による授業なのに無料!!

この講座の中でも特にメモリ、データ構造、アルゴリズムは文系エンジニアが苦手とする分野だと思うので、ここだけ目を通すのでもかなり学びになるはずです。


情報処理技術者試験

情報処理技術者試験は日本の国家資格です。
基本と応用の2種類あります。
個人的にエンジニアになる前~1年目くらいなら基本、それ以降なら応用の知識があると良いのかなと思います。

こちら試験なんですが、私は今のところ受験する予定はありません。
というのも試験勉強となるとかなり時間を取られるし、学習範囲もかなり広い。どうせ使わない知識は覚えても忘れるから時間がもったいないと思って。

なので寝る前など隙間時間に読み進めたり、仕事でわからないことがあったら辞書的に読んでみたり、という勉強方法です。

私はこちらの本を読んでいます。
イラストを多用してめっちゃくちゃわかりやすいので文系エンジニアにおすすめです。


この本を読むとわかるんですが、edXで学習したメモリ、アルゴリズムについても別の視点から記載されていたり、コンピューター回路、OS、ネットワークなどのまさに「コンピューターの知識」が習得できます。


LeetCode

メモリ、アルゴリズムあたりの知識がつくと、コーディングするときの意識・姿勢も変わってきます。

・このコード、メモリを大量に消費していないか?
・もう少しパフォーマンスの良いアルゴリズムはないのか?

こういう姿勢で取り組んでいくとエンジニアとして一気に成長するんじゃないかと思っています。
私も1年前はパフォーマンスを意識して開発する!!なんてレベルに達していなかったのでひどいコードを書いていましたがだいぶ良くなりました。

さて、ここまできたらアルゴリズムのトレーニングができるLeetCodeというサイトで実際にコーディング問題を解くのをお勧めします。

こちらも日本、海外でも有名な学習プラットフォームで、さまざまなアルゴリズムを用いた問題が掲載されています。有名企業のエンジニアの入社面接の技術問題としても良く使われているようです。

問題はEasy << Medium << Hardと難易度が設定されています。
挫折しないためにもEasyから始めましょう。

最初はEasyでも苦戦しましたが、他の方の回答を見ながら、「そんな解き方があったのか!」「こうすると半分の処理で答えが導ける!」などすごく勉強になっています。

LeetCodeで問題を定期的に解いていると、実際のプロジェクトでも似たような課題にぶつかります。「あ、LeetCodeに似たような問題あったな、こうするとメモリ効率いいんだっけ」みたいに実践で役立ってきます。

ちなみにこちらも時間やゴールを決めず、時間がある時に1門解いてみる、という感覚でやっています。



さて、こうやってほとんどお金をかけずにコンピューターサイエンスを学ぶことができるのが、本当にありがたいな、としみじみ。。

理系の方から言わせればこれでも全然足りないんでしょうけれど、私はこういう学習を継続して、実務で開発していれば十分かなと思います。
(継続が大事)

理系の方と肩を並べる必要はない、と思います。
それでも仕事はいくらでもあるし、ちゃんと稼げる。
いいところで妥協して、諦める。土日は副業や他の学習のために時間を取ったり、リフレッシュもちゃんとする。
職業エンジニアでいい。とにかく無理は禁物です。



**************

これからエンジニアを目指す方、若手文系エンジニアの方などに何か役に立ったものがあれば嬉しいです。

お読みいただきありがとうございました!
スキ、フォローいただけるととても励みになります♪

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