仮想サーファーの波乗り

仮想化エンジニアの日常

プログラミング・SNS分析・仮想通貨・自動化などに関してよく書く雑記ブログ

文系大学生がWebエンジニアになるために最初の1年半でやってきたことまとめ


僕が初めてプログラミングに触れたのは、1年半前の2016年8月頃だったので、2018年3月の今現在でエンジニア歴1年半になったことになります。ド文系の大学生で、「プログラムって暗号がいっぱい書いてある難しそうなやつでしょ。」「プログラミングの何が楽しいの?」「Ruby?宝石を作れるの?」という状態から、1年間半でエンジニアとして様々なことに取り組む機会があり

・JavaでWebアプリケーション開発、リリース
・VRアプリの開発、リリース
・Webエンジニアとして就職
・PythonでTwitter操作の自動化機能実装

などなどに取り組むことができました。

この1年間半でいろんなことを試してきて、たくさんの「これはよかった!」「これはイマイチだった!」がたまったので、自分と同じように「文系大学生だけど、エンジニアになりたい!」という大学生のために、文系大学生がエンジニアとして働けるようになるまでに具体的にやってきたことをまとめておきます。


文系大学生がエンジニアとして働くまでにやってきたこと

f:id:virtual-surfer:20180310153155p:plain

ここでは、以下のような方を対象としてエンジニアリング力を伸ばしていくための方法をご紹介していきます。

・1年生~3年生の文系大学生
・授業がある日は、1日1時間~5時間程度プログラミングに時間を使うことができる。
・長期休暇は、1日4時間~10時間程度プログラミングに時間を使うことができる。

文系大学生かつプログラミング1度も触ったことがなかった2016年8月の夏(この時大学4年生)から、何をしてきたかまとめたのが下の図です。

f:id:virtual-surfer:20180318215519p:plain

上の図に沿って、時系列でやってきたこととその結果良かったのか悪かったのかをまとめていきます。


1ヶ月目:Progateでプログラミングでできること、プログラミングの雰囲気を楽しむ。

f:id:virtual-surfer:20180310153211p:plain

プログラミングを初めて1ヶ月間は、右も左もわからない状態だったので、「HTMLで1行表示するには、

タグで囲むのか!」とか「cssで色を調整することができるのか!」など、1つ1つ知らないことを学んでいきました。どんなことを学ぶときもそうだと思いますが、最初の頃は時間をかけても得られる学習効果・成長している実感値は低く、楽しくなくなって学ぶことを継続することから離れてしまいがちです。そうなってしまわないように、この期間では「プログラミングでこんなこともできるのか!」「プログラミング楽しいじゃん!」と感じる機会を意図的に作り、プログラミングへの熱意を継続できたことは良かったです。

この期間には、「難しい周辺知識もまとめて体型的に学ぶ」よりも「実際に動くものを作ってみながら学ぶ」方針で進めた方がやる気が出て結果的に学習効果も高かったように思います。そんな機会を与えてくれたのが、プログラミング初心者に優しいProgateでした。

prog-8.com

プログラミング初心者でもゲーム感覚で楽しめるように設計されていて、コードを打って実行すればすぐに画面の変化を確認することができるし、エラーも超わかりやすく表示してくれます。また、多様な技術を学べる点でも優れています。基本的なコーディングを学ぶHTMLやCSSをはじめ、iPhoneアプリ開発のためのSwift、バージョン管理のためのGitなどなど無料で様々なコースを学べます。1コースにつき、3時間~10時間もあれば終わるので、3日間も触ってみればプログラミングの雰囲気は味わうことができます。まず1ヶ月目は、Progateを触りながら、気になった知識に関してググって知識の幅を広げ、なんとなく自分の作りたいWebサービス案を考えて行きました。


2ヶ月目:自分の作りたいサービスをすぐに質問できる環境TECH::CAMPにオンラインで通う

f:id:virtual-surfer:20180310153223p:plain

1ヶ月目である程度のプログラミングの雰囲気は理解できて、なんとなく自分の作りたいWebサービス案ができてきたので、TECH::CAMPというメンタリングが受けられる環境でRailsでのwebサービス開発を進めていきました。経験のある人にすぐに質問できる環境で、自分の作りたいWebサービスの開発を進めることができたのは良かったのですが、教室に通わずオンラインで済まそうとしてしまったこと、他にも個人事業をやっていてプログラミングは1日2,3時間しか取れなかったこともあって、この期間でWebサービスを開発仕切ることができず、悔しい結果となりました。

「自分一人で開発できる!」という方は一人でやってもいいとも思いますが、実装したい機能をどうやって実装すればいいのか?エラーの原因はなんなのか?を自力で解決できない(ググり力が低い)うちから自力だけでなんとかしようとすると、エラーにつまづいた際に相当な時間を食われます。そして結果的にエラー解決に難航し、プログラミングから徐々に離れ、やる気がなくなってしまう...。という事態を避けるためにも、すぐに質問できる環境を用意した方が長期で見た時のコスパは良かったなと思います。とはいえ、せっかくやるならサービスリリースできないと何の価値もないくらいの気概で望めば良かったなと今では思います。

周りにすぐに質問できる情報系の友人や、エンジニアとしてインターンしている友人がいる場合は、彼らを捕まえて質問できる状況を作り出すか、そんな友達がいない場合には、TECH::CAMPCodeCampのようなコースを受講するのがいいと思います。

tech-camp.in

codecamp.jp

5万円~10万円程度かかってしまいますが、すぐに質問できてエンジニアリング能力を一気に上げられると考えれば、投資対効果は良いと思います。別記事にも書きましたが、大学生活の4年間という時間は思ったよりも短くて貴重なので。


3ヶ月目~7ヶ月目:エンジニアとして未経験可の会社でインターンをする

f:id:virtual-surfer:20180318220557p:plain

TECH::CAMPで用意されている講座を受講し、サービスのリリースまでの手順を一通りなぞったことがあるとはいえ、まだこの段階ではエンジニアとして働いて給料をもらうことができるレベルではありませんでした。セキュリティの知識、エラー解決能力、仕様の設計能力、他人のコードを読むソースコードリーディング能力など、エンジニアとして最低限伸ばすべき能力・知っておくべき知識が備わってなかったです。

それらのエンジニアリング力の基礎を実戦から学ぶため、まずは未経験でも働くことができる会社を探して、インターンをしてみました。初めてのインターンから自分の興味のあるサービス領域が定まっていて、ある程度エンジニアリング能力もあって最適な職場環境を選択できる人はいいですが、僕はそんなことはなかったので、「Railsで開発している」「未経験でも可」の会社をWantedlyで全部リストアップし、Spread Sheetにまとめ、上から順に話を聞きに行きたいリクエストを送っていきました。

www.wantedly.com

10社程度に連絡して、3社と面談をして、その中で一番条件が合致していた会社でインターンを始めることができました。普通の大学生は日中授業があると思うので、17時以降や土日でも働くことができる猫の手も借りたいスタートアップか、柔軟に働けるベンチャーでのインターン機会を探すのが良いかと思います(ちなみに、週に3日以上は働かないと技術力は伸びにくいと思うので、週に3日以上は最低でも働けるように自分の予定を調整しましょう)。この5ヶ月間のインターンから学べることは多かったです。Railsでの実装はもちろん、Gitの使い方、Javascript、フロントエンドの実装、またプログラミングだけではなく、1→10フェーズでの事業・組織の作り方とそこで生じる課題、慢性的な人不足、広告業界の動向など、様々なことを学ばせてもらうことができました。

この時期には学びが多かった反面、「なんでこのような実装になっているのか?」「もっと事業をこうしたらいいのでは?」と主体的に提案して自発的に取り組みを初めてみるとかって動きができなかったのは反省でした。有名ベンチャーのCTO出身のCTOが隣の席に座っていて、2週間程度直でプログラミングを教えてもらっていたのですが(今思うとすげーありがたい機会だったな)、「プロダクトをどうしていきたいのか?」など、もっとプロダクトの構想的な長期での話もぶつけられたら良かったなと。

また、この時期は自分のエンジニアリング能力の低さに絶望するタイミングが何度もありました。もともと営業職をずっとやっていたので、「営業のインターンの方が向いてんじゃね?」と社員さんに言われることもあって、このままCTOの時間を奪いながらエンジニアインターンとして働いていていいんだろか...。と何度も悩みました。この時期は東京に家がなくAirbnbに滞在していたこともあり、ストレスがピークになってしまっていました。ボロボロな精神状態になることもありましたが、「エンジニアになるって決めたし!」と謎のモチベーションを持って働き続けました。


7ヶ月目~8か月目:1ヶ月Unityを触りまくり、VRアプリのリリース

f:id:virtual-surfer:20180310153337p:plain

5ヶ月程度ずっとエンジニアとしてインターンさせてもらっていたこともあり、いつの間にか自力で実装する能力もエラーを解決する能力も上がっていたので、一人でアプリを開発できるか挑戦することにしました。1ヶ月間毎日朝9時から夜21時まで開発にふけっていたこともあり、UnityでiOS向けのVRアプリを開発、リリースまですることができました。今までは部分的な機能追加やエラー解決に終始することが多かったので、Webサービス・アプリの仕組みの全体像が見えない。という状態だったのが、一人で実装しきってリリースすることで全体像を理解することができたのは良かったです。


9ヶ月目~1年7ヶ月:エンジニアとして会社員1年目

そして2017年の4月から晴れてエンジニアとして働き始めることができました。それまではRailsとUnityしか触ったことがなかったので、会社に入ってからJavaを新たに学び直すことになって一瞬学習コストが高くなりましたが、RailsとUnityを触っていた経験があったのでそこまで抵抗なく学び続けて実装力を上げていくことができました。また、ここまで続けていると困ってもたいていのエラーは自分でググれば解決できるようになっていたので、平日はJavaで会社のサービス機能開発に従事し、土日は気になった技術(PythonやAndroidアプリ)などを触るようになりました。


まだまだエンジニアとしてはしょぼいですが、1年半でエンジニアとしてやってきたことでした。


まとめ

初心者からエンジニアリング力を上げて一人でWebサービスをリリースできるようになるまでにどのような機会選択をしていくべきかをまとめましたが、大事なことは、「興味を持ってから始めるまでの期間の短さ」「楽しみながら継続的に学習できるかどうか」だったなと思います。

f:id:virtual-surfer:20180310153015p:plain

僕もそうでしたが、エンジニアに興味を持ってから、実際にコードを書き始めるまでに半年間程度のインターバルがありました。3年生の秋には「エンジニアいいかも!」となんとなく思って興味を持ちましたが、実際にコードを書き始めたのは4年生の夏前でした。「就活あるしな...。サークルの活動も忙しいし、テストもあるし。」となんだかんだ理由をつけて「まずはやってみる」ことから遠ざかり続けていました。初めて興味をもった3年生の秋からプログラミングを始めていれば、今よりも数倍技術力が伸びていたであろうこと、選べるキャリアの選択肢が変わっていたであろうことを考えると惜しい思いをすることがあります。何事もそうだと思いますが、能力は経験の積み上げで構成されているので、早く始めることは何にも増して大事です。

新しいことを学ぶことが好きな人は、元文系とか理系とか関係なしに急激に技術力が伸びている一方で、週末や暇な時は技術的なことは考えたくないというタイプの人はエンジニアリング能力の向上は限定的な人が多いです。これは、姿勢によって学びの量と質が変わるからだと思っています。自発的に技術を学ぶことを楽しんでいると、「ブラウザには、キャッシュとクッキーという機能があるらしい」という知識で終わる人と、「複数回同じページを表示するために毎回サーバーにアクセスしてページの読み込みに時間をかけるよりも、ブラウザにキャッシュとしてページの情報をもたせておいて、同じページがアクセスされたらサーバーにアクセスせずにブラウザのキャッシュからページを表示する。また、ブラウザにクッキーを持たせておくことで、アクセスするごとにログインしなくても、そのクッキー情報から同じユーザーだと識別できるようにしてるのか。じゃあその機能の実装ってどうやってるんだろう...。」と一つの知識から周辺知識にも興味を持ち、実装方法まで調べて実際に実装して見る人とでは、長期的に見ての学習効果はかなり異なってきます。また、それらの知識と経験が積み重なってさらなる興味と学習意欲を生んでいくので、意欲的に学ぶことができる人はどんどん強くなっていきます。

いろいろ書いてきましたが、

まずは始めること!

始めたら半年間は続けると決めてのめり込むこと!

そしてエンジニアリングを楽しむこと!

これが全てだったなと。


とりあえず半年間やってみて、向いてないor楽しくないと思えばやめればいいかと!やってみないといつまでも分かりませんしね。


では!