そーだいなるらくがき帳

そーだいが自由気侭に更新します。

文系でもプログラマになれるのか

ブログについたコメントに対する自分なりの考えを書く。

soudai.hatenablog.com

私は文系の大学生ですが、プログラミング興味を持ちプログラマになりたいと考えています。 とても難しい事は理解していますが、プログラマに就職するのは やはり難しいでしょうか?

もし可能性があるとしたら、就職先の探しかたや見分け方などの ことを教えてください? お願いします。

文系でもプログラマを始めとするソフトウェアエンジニアになれるか?の答えは なれる。 例えば自分の周りでも id:daiksy さんとか @shinpei0213 さんは文系出身のソフトウェアエンジニアだしプログラミングしている。 もっと言えば自分自身、高卒エンジニアなので学歴がネックでプログラマになれないということは無い。 だがソフトウェアサイエンスをしっかりと学んだ人からするとスタートラインは後ろである、という事実はあるし、それは自分だって感じることだ。 しかし過ぎた時間は取り戻せないし、大事なのは今からの未来だ。なのでどうやって 理系大学出身では学生がどうやってエンジニアとしてスタートを切るか という戦略を書く。

アプリケーションを作る

もし、質問者がすでにプログラミングとしての基礎、言語はなんでもいいけどを書くことができるなら次は「動くもの」を一つ作ることをお勧めする。 理由は2つある。

1つ目は何かを0から作ったことがある、という経験はとても大きな経験で現場でも役立つ経験だからだ。 Webアプリケーションならhtml、サーバ設定、DNSフレームワーク、何かを動かすには色々と覚える必要がある。 スマホアプリでもAPIが必要になればサーバサイドの知識が必要だし、ネイティブアプリケーションの場合はどのフレームワークを選ぶか?みたいなところから学びは沢山ある。 また動かすために必要なことをいきなり全部を理解しなくてもいい。 まずは手を動かしながら、ハローワールドと書かれたhtmlが出力されるところか少しづつやるのが良い。 もしサーバサイドが必要な場合にAWSGCPとか試してみたけど全然分からない…という場合はまずはレンタルサーバーかherokuを使おう。 まず格安で使えるし(herokuであれば無料枠で収まるだろう)インフラの知識が無くてもある程度動くところまですぐ行く。 言語は好きな言語で試してみれば良いと思う。 スマホアプリの場合はAndroidで始める方が初期コストが少なくて済む。 まずMacを買う必要が無いからだ。

とにかく「動くものを作る」ことを最初の目標にするのがいいだろう。

2つ目は動くものは見せれる実績になるからだ。 それまでの過程で身についた経験を証明するわかりやすい形は就活や後述するインターンに応募するときなどに有効だ。 「これを私が作りました、見てください!」と言えば多くの会社は会ってくれるはずだ。 書類審査で落とされたりする手前の段階で大きなリードになるため、実績を作っていこう。 しかし最初から素晴らしいアプリケーションを作れるとは限らない。 同じものでも何回も作り直すことをお勧めする。 1度目より2度目の方が良いものができるし、例えば電卓を作ったとしても、2度目は記録機能を追加するなどもできるだろう。 そうして最終的にできた一番自信があるプロダクトを実績として紹介すればいい。 面接の時に「これを作るまで5回作り直しました、3回目はリファクタリングを、5回目は拡張性を意識してプラグインを利用できるようにしました。」のような自分だけの物語を言えるのも強みだ。 なお、5回作り直しただけでプラグインを利用できるようにまで拡張できたとしたら超絶優秀なのでこれは目標とせず、自分なりの機能追加をしていくだけでいい。

作る時はいきなり独創的なものよりは身近にあるものを再度作る、通称「車輪の再発明」が良い。 なぜならば仕様が明確だからだ。 電卓と自動販売機はソフトウェアの練習問題として定番なのでお勧めする。 Webアプリケーションでは掲示板もよくお勧めに上がるが私はアップローダーをおすすめする。 私が新しいフレームワークを覚えるときもアップローダーを作る。 理由はファイル操作、CRUD(Create/Read/Update/Delete)、DB接続、セッションなどを一通り触れる上でUIが難しくないからだ。

スマホアプリやネイティブアプリだとTwitterクライアントなどの何かのサービスのViewerもお勧めだ。 まずAPIサーバやログインの仕組みを自分で用意する必要がない。 しかし実務で必要なAPIの処理とUIの作成を学ぶことができるからだ。

またUIはいきなりかっこよく出来ればいいが、まずは動くもの、次に見た目と問題を一つ一つクリアしていくのがお勧めだ。 こうやって手を動かしていくことが大事だ。 仮にここに書いてあることが全く理解できない、何から始めればいいか?というのがわからない場合は本屋にまず行き、入門書を3冊ほど読みながらアプリケーションを作るところを実際にやってみよう。

とりあえずWebアプリケーションを前提でRubyの本でお勧めを2冊書いておく。 似たようなスマホ本も沢山あるし、Ruby以外だとググって情報が出やすいのでPHPがお勧めだ。 3冊目は何となくで選べば良いが本を通して手を動かして何か作る系の本を選ぶこと。

インターンに行く

コードを書いたら次に勉強会にいくのも良い。 だが勉強会はあくまでコミュニティに参加しただけなので自分自身が強くなるわけではない。 強くなりたいなら学生の特権であるインターンに行くのをお勧めする。 実際に id:kuxumarin ちゃんがインターンに言った感想を書いてるので共有する。

kuxumarin.hatenablog.com

インターンの良いところは業務として技術を触れること、会社を実際に見れること、そして同世代のエンジニアとも出会えることだ。 また良い会社にいくにはやはり競争率が高い。 そういう時に上記のような実績が効いてくる。

とは言え、今はインターンの旬の時期が終わっており、希望の会社がないかもしれない。 そういうときはアルバイトもお勧めだ。 PHPでも良くて中央線沿線に住んでいるなら弊社、オミカレに遊びにきても良い。 (別に単発に遊びに来る分であればいつでも遊びにきていいが、継続的に来ることを考えて上記のような条件としている)

party-calendar.net

実際に業務でエンジニアと触れる機会は多くの学びを貰えるだろう。

新卒カードを大事に使う

就職活動における新卒カードはかなり大事だ。 それにも関わらず、かなり無責任な発言を行う。 だからこそ自分なりにしっかり考えてほしいがとりあえず30代のおっさんの意見を書く。

色んな会社があるがもし、君がMicrosoftGoogleAWSなどの多くのエンジニアが憧れる会社に新卒で行けるチャンスがあれば絶対に行ったほうがいい。 他にもLINE、Voyage Group、メルカリなどの今をときめくIT系の花形に行くチャンスがあるなら行ったほうがいい。 またスタートアップなどに行くよりはNTTデータ富士通NECなどのSIerの会社にまず入れるならそこで経験を積んだ方が最初に丁寧に業務を知ることが出来るだろう。 地方ならIT系の大手と呼ばれるようなところやそこと仕事をしているところが良いと思う。 ただ孫受けのようなところの場合、Web受託開発と変わらない構図の場合も多い。 新卒カードを大事に使うには勉強会に行って大人の話を沢山聞くのが良い。 そうすると行っては行けない会社は見えてくるはずだ。

ここで重要なのは新入社員で入った会社は半年で学ぶことが何もないと感じたなら半年で辞めてもよいし、少しでも学ぶところがあるならそのまま居ると良い。 会社は相性があるので合わない会社は合わないし、そうすると自分の得意不得意は見えてくるし、好き嫌いも見えてくるだろう。

もし、スタートアップに行きたいのであればアルバイトで学生のうちから行けばいいし、なんなら学生起業して自分で体験してみてもいい。 つまり、後からスタートアップや小さなWeb受託会社に行くことはできても、大きな会社に中途で入ることは難しい。 しかし新卒カードを使うと入れる事もある(もちろん落ちることもある)

このように最初は大手に行ったほうが良いと私は思うが、例えばアルバイト先などで水があった場合はこの限りではない。 それとすでに希望の会社があるなら学生のうちからアタックしたほうが良い。 中の人にあって話をするだけでも方向性が見えてくる。

もしプログラマーに向いてないと感じたら。

もし君が「動くものを作る」ところで大きく躓き、挫折し、プログラミングを楽しいと思えないのであればプログラマー以外のエンジニアリングの業種を目指すと良い。 例えばセールスエンジニアはコードは書かないがシステムの理解は求められるし、現場の技術に触れる場合も多い。 この他にもアシストやSRAなどを始めとするDBA(DatabBaseAdmin)の職種もコードを書かない人が多いが重要な職種だ。

このように一括りにソフトウェアエンジニアと言っても色んな職種がある。 プログラマーに拘らず、自分の楽しいとおもったことを探すのが良い。 私はちなみにコーディングよりも設計のほうが好きだし(プログラミングは設計も含むのでその部分は好きだ)その中でもデータベースが好きだ。 このように「自分が好きだな、楽しいな」とおもったらそこを大事にするのが良い。 そして職種がわからなければ勉強会や企業説明会に行って自分の好きなことに向いてる職種を聞くのが良いだろう。 5人いたら1人くらいは真摯に答えてくれる。 残りの4人は無視しよう。 このようなアドバイスを求める時、聞く人の母数を増やして統計を見るのが大事だ。

そうやっていると自然と職種も見えてくるのではなかろうか。

まとめ

私が学生の間にやったほうが良いとおもったこと、私が面接する上で学生に対して重点を置いてヒヤリングする部分を基に書いた。 もし、質問した君がすでにOSSのコードを眺めたり、プルリクエストを送ったり、ゲームを作ったりするのが好きならば安心してくれ、君はもう立派なプログラマーだしソフトウェアエンジニアだ。 まだそうではない場合、まずは一歩目を踏み出そう。 プログラミングは小学生でも出来る人は出来る。 つまり始めるのは今からでも出来るし、別に社会人になるのを待つ必要は無い。

それでは君がいつか何処かで出会った時、君がその時一番楽しい、好きな技術について教えてくれることを楽しみに待っている。