見出し画像

文系からソフトウェアエンジニアを目指してみる

自分がここ半年にわたってしてきたことと、どうやったら0からエンジニアで実務するところまでいけるのか、みたいなのを今の自分が考えられる範疇で書いています。

エンジニアを目指してみた

留年して大学5年目の春にエンジニアを目指すことにした。新卒の枠とかで研修で学ぶのではなく、いわゆる独学でエンジニアを目指してみた。
正直、血迷うのもひねくれるのもいいとこだけれど、右も左もわからないところからだったので、誰かの参考になれば。

自分の場合、いざどうやったら、「文系・未経験」からソフトウェアエンジニアになれるのかが全くわからなかったので、誰かのために自分の経験をシェアします。

エンジニアとかプログラミングに興味あるって人、誰でも相談受け付けてます(自分が乗って頂いてたのあるので)。0からでも真摯に答えるのでぜひ。

目指した理由

「世界でどこでも&グローバルに働けるようになりたい」
「ものづくり好きかも」
「テクノロジーすごい」

きっかけとしてはこんな感じ。あとは暇で何かしらやることが欲しかった。
別に一生エンジニアをやるつもりはない

- 人生の1つのフェーズとして -

単純に、サッカー→ダンス→大学受験→アメフトの次の第5フェーズとして、エンジニアを目指してみる、という色合いが強い。自由そうに見えるが、仕事の範疇からしかピックしてないので、かなり不自由。だけれど、いろんなことやっていきたい。料理とか。

実際に自分がしたこと

自分語りはここまでで、ここからが本題。

Recurion(5月中旬〜7月終わり)

有名なProgate的なものの亜種で、ガチ勢向けって感じのサービス。
Computer Science(パソコンとかについて学ぶ学問)を少しかじりながら、PythonとJavaScritpt(どちらもプログラミング言語の一種)を学習して、コーディング問題を解きまくった。(多分めっちゃ優良サービスだけど高い)

ただ個人的には、これは最初の方あまりにも基礎的なことをやり過ぎて、いざこれらが何に応用されるかわからないまま勉強しなきゃいけない感覚が進むにつれて、難しくなるほど出てくるので(上級コースをクリアしないと受けられないコースが多い、上級コースは普通に難しい)個人的には途中まででもいいのかな、なんて思います。(当然やれば基礎力は上がるので、いいですし基礎力が全て、というのがこのサービスの根底にあります)

コーディング問題ってなに?
簡単にいうとブラックボックスをプログラミング言語を用いて作ることが問題の趣旨になる。

ある数字x,yが与えられた時に
z=x+yとなるような数字zを出力するブラックボックス(関数)になっている

こんな感じでもっと複雑な問題がたくさんある、それらがコーディング問題になる。

いろんなエンジニアの人に話を聞いてみる

実際にエンジニアとして働いている人に話を聞きに行った。どうやったらなれるか、最短方法を知りたかったためである。結論「なるべく早く実務経験を」これが全ての人が口を揃えていうことだった。

Webアプリ開発をしてみる(8月〜10月中旬)

コーディング問題をいくら解いても、Webアプリ(Todoリストとかいわゆつ”アプリ”みたいなもの)開発は全くできるようにならない。数学で例えるならば、複雑な計算問題ばっかり解いてて、公式とか定理を知らないから問題が解けないという感じ。
つまり、Webアプリを作れるようになるためには、ここから更にWebアプリ開発に関する技術や知識を勉強していかなければいけないことに気づく

そこでYoutubeとかで色々調べて、ハンズオンで一つのアプリを作れるようなものを真似して何個か作ってみた。Todoリストが一番あるあるなのでは?と思う。ここで「実際に動くもの」を初めて作る。

実際、何かしら動くものを作る中で、必要なことが出てきて、それを調べて勉強していく、というのが独学の中では一番効率がいい。

次にアメリカでいうESPNのスポーツのアプリみたいに、アメフトの試合の動きのGameCastも作ってみた。(これはいつかちゃんと作ってみたい)

(こんなのいつか作りたい)

インターン開始(10月中旬〜)

実務経験を早く積んだほうがいいというのは前から言われていたことではあったのだが、ピンとくる企業が少ない&ピンときても落ちるで、ずるずる10
月中旬になってしまった。
一応、アメフトのGameCastのやつをポートフォリオとしてて提出、コーディング面接も受けた。

実際実務をする中だと、どんどん必要な知識が出てきて成長スピードは早い。ただ自分で好きなものを開発する時間の方が楽しくはあった気がする。

結論、どうすればいいのか

結論としては、実務未経験から実際に仕事を取ろうとするのであれば、何かしら自分で作ったプロダクトがポートフォリオとしてあること、これが一番だと思ってます。採用側が未経験者をとるにあたっての一番の懸念点はやはり「こいつ本当にできるのか」「すぐに辞めたりしないか」ということなので、「できるぞ!」って示せるのがいい。
もっと一番いいのは、何人かで作ったプロダクトがあること。「チーム開発」なんて言ったりするけどその経験があるとよかったりはする。

どう勉強すればいいの?

ここが一番難しいのかなと思います。ただでさえ慣れない中で、わからないこともたくさんある、エラーは出まくる、なんで動かないのかわからない。うまく動かないことが続けばやる気は無くなります。

一番大切なのはググる力です。極論を言ってしまえば、記憶する必要は1ミリもないです。わからないことなんて鬼のように出てきます。それを調べていき、点と点を結んでいけば、いつの間にかわかるようになっている、という世界です。
バグとかエラーがででも、そのエラーをコピペして調べれば、きっと世界のどこかで同じエラーに引っ掛かってる人がWeb上にDocumentを書いてくれているので、それを参考にしましょう。どんなすごいエンジニアでも毎日のようにググってます(たぶん)。

あとは最初はひたすら手を動かして、こうしたらどうなるのか、などを身をもって体験してアウトプットを繰り返す。
こんな感じだと思います。

「文系」・「CS以外の学部」の不利な点

ここまで書くと、「文系」や「CSの学部でないこと」は、なんのディスアドバンテージにならないような気がしてきますが、そんなことはないです。

- 「文系」について。
これ自体は理系に対するアドバンテージは論理的な思考能力、みたいなところです。ここを埋めるのは大変ですが、訓練でしょう。まあ、大学受験の文系数学ができればひとまずはOKです。(多分極めるとそれじゃ足りない)
- 「CS以外の学部」について
これは個人的にとても大きいと思います。CSの授業で、実際にWeb開発をすることはおそらく少ないです。しかし、Web開発のひとつ下、さらにもう1つ下のレイヤーで使われているようなことを理解することは、学習していくにつれて、とても大切なことになっていきます。
シンプルにいうと、「ネットワークはなぜつながるのか」とか「なぜコンピュータは動いているのか」とかそんな話です。
それも勉強する量はかなり多くなるはずなので、ここは大きなディスアドバンテージでしょう。

ただ、最初やる分には、ほとんど必要ないので、始めるハードルをここに感じる必要は全くないとは思います。

最後に

Webアプリ開発の領域だけですら、多様な言語と多様な技術があり、参入障壁がとても高いように見えると思います。ただ、ネットにあり得ない数のドキュメント(学習の参考になる資料)とYoutube解説動画、そして学習サービスがあるので、ひとつずつやっていけば、全然参入可能、それが結論です。

また、自分の仕事の作業の効率化を簡単に行えるという観点から見ても、知っていて損はない、くらいなものではあるのではないでしょうか。

どの言語やればいいの?何からすればいいの?とか、全く知らないところからでも、力になれたらと思うので、お話お聞かせください!


少しでも興味ある人に少し詳しく書いておこうと思います。

言語最初何やればいいの?

最初に出てくる疑問は、言語最初何やればいいの?ってことだと思います。
これは基本的にはなんでもいいはず、という感じではあるのですが、今の自分の個人的な私見からでしかないですが。

  • 日本語のドキュメントが多い言語(英語できるなら無視でOK)

  • 言語としてとっつきやすい・理解しやすい言語

  • その言語さえ理解してしまえば汎用性が高い言語(上とは矛盾しうる)

  • 実際の企業でよく使われている言語

がひとまず大切かなと感じています。

この条件で、今の自分が学習している中やさまざまな求人を見てる上だと
・TypeScript(JavaScript)
・Python
・Java
・(GAS)

がよさそうかな、と勝手に思いました。

興味が出た言語があれば是非一度触れて見てださい

TypeScript(JavaScript)

まあTypeScript ≒JavaScriptだとおもってもらってOKです。TypeScriptの方が今は採用している企業は多そう。使い勝手が良い。
・Webアプリを作る上だと99%必要になる(使っていない企業はほぼ無い)
・比較的理解しやすい文法
・日本語のドキュメントも多い
この言語さえあれば簡単に「動くもの」が作れる、という点でも、形になり、続けやすいかもしれません。

Python

有名なやつで、研究などで使っている人も多いのでは無いでしょうか。
・書きやすい文法(余計な制約が少ない)、とっつきやすい
・機械学習などにも使われていることもあり、未来は明るいのかも
・ドキュメントは多い
なんと言っても早く書けるのは書き心地がいいので続けやすいし、可読性も慣れないうちは高い言語なのでは、と個人的に感じています。

Java

Recursionで勧められているのがJavaです。JavaとJavaScript何が違うの?はググってください。
・その言語さえ理解してしまえば汎用性が高い言語(上とは矛盾しうる)
ですね。金融系のイメージ(?)(適当)があります。
慣れないうちは、制約も多い上難しいですが、慣れてしまえば他の言語の理解も早くなる、という感じでしょうか。

GAS(Google Apps Script)

Webアプリ開発に使われているものでは無いですが、これを使えばいろんなアプリの連携が簡単にできちゃいます。その点で、ドキュメントも多く、結果が目に見えるので入りとしてもいいのではないか、と感じます。

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