Time is money

日常のこと、web関連、映画の感想について書いていきます

ソーサルから学んだこと 「学生エンジニアになるためには」

桜が綺麗でしたね。

今年も光が丘公園の桜は心に残るほど咲き誇っていました。

f:id:okutaku:20150401131018j:plain

 春は出会いと別れ、そして環境変化の季節です。

僕も大学入学から早くも、4年生となり、今年から研究室配属され今までと全く違った生活を送っています。

 

私事ですが、今年(2015年)の2月末にソーサルという「フットサルをもっと身近に」をコンセプトに個人参加型フットサルの新しい形を創っていくサービスをリリースしました。僕はこのサービスにエンジニアとして加わっています。

sosal.me

"学生エンジニア"という言葉を自分から使うのはあまり好きではないのですが、学生でありかつ、実際にサービスを開発しているということで、お恥ずかしいのですが、この言葉を使わせていただきます。

僕がソーサルをエンジニアとして立ち上げ、約一ヶ月間運営してみて感じたことを、特に「学生エンジニアになるためには」というテーマでつらつら書きたいと思います。

 

1. ソーサルというwebサービス

f:id:okutaku:20150411022447j:plain

ソーサル( https://sosal.me )は「フットサルをもっと身近に」をコンセプトにしたwebサービスで、好きな時間、好きな場所でフットサルができます。

「個人でフットサルをしたいんだけど、なかなか自分に合う企画がない」、「フットサルを初めたいけど、一歩が踏み出せない」とお考えの方、是非、ソーサルを使って楽しくフットサルをしましょう!

2. エンジニアリングはチームである

f:id:okutaku:20080227161455j:plain

はい。意味が分かりません。

ソーサルの開発は一人ではできないということです。

当たりまえです。

ソーサルを開発・運営していて身に染みてそうに思いました。

ですが、当たり前に思っていたことと身をもって体感するのではまるで違います。

一つのwebサービスを創り上げるにはエンジニアがいてデザイナーがいて、営業・広報を担当するメンバーが必要です。これを一人で行うのはかなり骨が折れます。これらの役割がぴったりはまり、歯車がうまい具合に回りだすと一つのサービスが誕生します。チームの中で自分の役割を明確に理解して、全力を出すことがカギだと感じました。ですが、自分の役割だけをこなせばいいということだけではない点への注意が肝心です。

ソーサルを例にすると、代表の一人はフロントエンド(見える部分)も書けるため、ユーザーサイドを全て実装してもらっています。エンジニアとしてこれほど助かることはありません。自分のできることを最大限行うことで、サービス開発は加速します。

3. プログラミングはツール

f:id:okutaku:20150411021132j:plain

何かサービスを創ることにおいて、プログラミングはツールだと思っています。

どのツールを使うか、あるツールとあるツールを組み合わせるかはエンジニア次第です。

これはユーザー側に見える部分に大きな変化はないということです。ただ、応答の速度などのパフォーマンスに絡んでくるため、ツールはどれでもいいというわけではありません。

ソーサルを運営していて、サービスの根幹にある思想がどれほど重要か日々感じています。プログラミングという行為はそれを可視化するプロセスに過ぎません。

「プログラミングを通して何をしたいのか」が大切だと感じました。

4. 学生エンジニアになるためには

f:id:okutaku:20150411024723j:plain

本題です。

僕はRuby on Railsというアプリケーション・フレームワークを使ってソーサルを開発しています。

Ruby on Railsに出会って、2年ほど実務経験を積み、今年で早くも大学4年となってしまいました。理系の比較的忙しいと言われる学科に通う学生でありながら、エンジニアとしてソーサルを開発するに至るまでの、技術修得の最短ルートを書きたいと思います。あくまで"僕が考える"最短ルートです。

 

さっそく申し訳ないのですが、プログラミングを修得する近道なんてありません。

はっきり言います。よほどの天才でない限り、数ヶ月でちゃんと実装されたサービスを開発することはできません。簡単なCGMなどをローンチすることはできると思いますが。

考えてみてください。中学・高校の部活動と同じです。僕は卓球部だったのですが、新参者がたった数ヶ月で大会で名を馳せるなんて聞いたことがありません。

 

では、"僕の考える最短ルート"とは、出来る人の下で歯を食いしばって"一年間"は耐えることです。何かを学ぶには先生が必要です。プログラミングの場合は先生を見つけるのは難しいのですが。先生は自分から一歩踏み出さない限り見つかりません。何故、先生が必要か。考えて欲しいです。また部活動の話に戻るのですが、文系・運動系問わず優れた指導者が必要だったはずです。初めて何かを初める時、卓球部の場合でも優れた指導者がいる学校はしっかりとした練習ができ、打ち型もしっかりして、強かったです。これはプログラミング学習においても変わりません。何故、一年間耐える必要があるのか。一年間はざっくりとした期間です。これは個人で大きく可変すると思いますが、だいたい一年間は修行が必要です。プログラミングを数ヶ月しているとわかりますが、初めは壁の連続です。もはや壁しかないです。何をどうやってアプリケーションが成り立っているのか、わけがわからず、Google先生に聞いてもチンプンカンプンだと思います。

f:id:okutaku:20150411030116j:plain

まるで、自分がエンジニアには向いていないと言われているかのように感じるでしょう。しかし、一年間、四苦八苦して検索しまくると、壁の向こう側が見えてきます。エンジニアリングとは何かがわかるということではないです。何となく、エラー回避の仕方、検索の仕方、答えの見つけ方が見えて来ます。ここまで来たら勝ちです。初めは時間がかかると思いますが、実装不可能な例を除いて必ず答えにたどり着くと思います。

先ほど、僕は出来る先生を持つべきだと言いました。ここまでの話では、その先生に頼ることが無いように見えますが、圧倒的な技術を持つ人がバックに構えてくれることは本当に心強いことです。間違ってはいけません。最高の先生は、何でも聞ける先生ではありません。自分の技術力を少し前進するための手助けをしてくれる先生です。これは持論ですが、なんでも教えてもらえると思い込むことと環境はとても危険なことだと思います。いち早く、答えを見つける嗅覚を得るためには、教えてもらうという姿勢ではなく、何としてでもプログラミングを上達させるぞという気持ちが上達を左右すると思います。ぐぐって、ぐぐって、ぐぐって、小さい機能なのに何時間も悩んだ末、先生に聞くことを強くオススメします。その悩んだ時間は本当に貴重な時間です。きっと、答えの見つけ方が身に付いてくると思います。

 

僕の例を示します。

僕は大学一年の終わりまで、プログラミングの「ぷ」の字もわからない状態でした。中学生などからパソコンが好きというわけではなく、一般のコンピュータリテラシーしかありませんでした。大学一年生の終わりに知人にアプリを創ってみないかという誘いを受け、興味本位で本を買いました。それが今のアルバイト先の社長の著書でした。

 

改訂新版 基礎Ruby on Rails (IMPRESS KISO SERIES)

改訂新版 基礎Ruby on Rails (IMPRESS KISO SERIES)

 

 本の通りに進んでいったのですが、割と初めの方でエラーが起き、それ以上進めなくなってしまいました。高いお金を支払ったにも関わらず、すぐエラーで進めなくなったことに憤りを感じた僕は著者にその旨のメールを送りつけました。今でも本当に感謝しているのですが、突然のメールにも関わらず、懇切丁寧に返事をしてくれたので、調子にのって度々メールを送っていました。その時期、会社も人手を求めていたのか、ひょんなことから声がかかり、今の職を得て、2年間ほどアルバイトとして働かせてもらいました。

僕にとって、メールを送りつけたことが、プログラミングの世界に足をつっこむ"一歩"だったと思います。

もう一度言いますが、"一歩"を踏み出すことが重要です。そのきっかけは何でもいいと思います。僕の場合は特殊かと思いますが、本当に本気になり、自分はエンジニアになりたいと強く望んで行動すれば、きっと誰かが手を差し伸べてくれると思います。スタートアップやベンチャー企業のインターンなどがいいと思います。多くのスタートアップやベンチャー企業には本当に優秀なエンジニアが多いです。また、人数が少ない企業では多くの事を一人のエンジニアが行わなければなりません。ある程度実力が付いてきたら、大きなことも"押しつけ"られることでしょう。これも持論ですが、本気でプログラミングについて考える、プログラミングを生活の一部にする、つり革につかまっている時でもコードを(頭の中で)書く、プログラミングを趣味にするなどして、本気で取り組めば絶対に得るもが大きいと思います。

 

プログラミング学習の効果を最大化させる為には、明確な目的を持って学習することです。自分の創りたいサービスがあればいいのですが、無くても、自分で使ってみたいサービスや既存のサイトの焼きまわしでもいいと思います。

また、僕の事例で一般化できず、申し訳ないです。

僕はアルバイトでプログラミングを勉強しながら、大学の講義情報を集めるサービスを創りたく、自宅に帰ってからも少しずつですが進めていました。個人でもサービス開発する最大のメリットとして、具体的にどんな機能を実装すればいいのかわかり、検索して実装できることです。修得にはより多く手を動かすことが重要で、実際に創ってみることが本当に大切です。自分で創っていてどうしてもわからないことがあったら、先生となる人が機嫌のいいときにちょろっと聞けばいいのです。(反省はしています)

 

そして、これもスタートアップやベンチャー企業など実務的な場にいることの最大のメリットの一つですが、会社のソースコードをただで閲覧できること。これは本当に素晴らしいことです。感覚的には、サッカーや卓球、野球などのプロ選手のフォームをYoutubeなどで見て学ぶことに近いと思います。自分よりも技術が上の人に何でも聞いては様々な面で良くありません。エンジニアになるには"ソースコードを見て学ぶ"ことが重要で、肝です。具体的には、実際にアプリを動かしてみて、実装したと思う機能に該当するコードを探し出し、舐め回します。これは自分だけの時間のため、誰かの時間を侵すことがありません。

後はひたすらコードを書くのみです。

 

総括すると、学生エンジニアになるためには実務環境に勇気の一歩を踏み出し、歯を食いしばって耐えて耐えて耐えて、ググって、ググって、ググりまくり、会社だけではなく、自分のためのアプリを創ることを一年間くらいやる。これだけです。一年経ったとき、きっと違った世界が見えます。自分の創りたいものが創れるようになってると思います。

5. 人の出会いには意味がある

もう一つ、お伝えしたいのは「人の出会いには意味がある」という事です。

2014年7月に開催された「TED x Sapporo」で登壇された植松努さんのスピーチを取り上げます。お時間のある方は最後までご覧ください。

彼の感動的なスピーチの中でおっしゃっていたのは「人の出会いには意味がある」ということです。最近僕はこの言葉を痛感してます。ソーサルの創立メンバーとの出会いもTwitterのDMでした。興味を持って会ったら、ソーサルの原案を聞き、その日に作ることを決めました。出会いのきっかけは何でもいいと思っています。これもそうですが、一歩踏み出すことが大事なんだと思います。

ソーサルをオープンしてから、多くの方にお会いする機会が増え嬉しい限りです。

これも初めの一歩があったからだと思っています。

 6. Rubyは生産性を最大化させる

f:id:okutaku:20150411035520p:plain

 僕はエンジニアとしての2年間でRubyしか書いていません。

何故Rubyなのか。一つに、自分よりも圧倒的な技術と経験を持つ人がRubyを書いているからです。右も左もわからないとき、頭のいい人に従っていればいい方向に向かうと思います。適当ですが。二つ目の理由は、良く言われることですが、「Rubyは書いてて楽しい。生産性が他の言語と比べて10倍」と実感したからです。Rubyは書いてて本当に楽しいです。比較的簡単でわかりやすい故に何かサービスを創ることが楽しくなります。さらに、開発速度が本当に早いです。簡単なメディアなどのサービスであれば一週間しない内に公開まで運べるでしょう。これから、プログラミングを初めるのであればRubyしかオススメしません。Rubyはエンジニアの生産性を最大にするソリューションです。

さらにRuby on Railsというレールを使うことで、開発速度は加速します。

f:id:okutaku:20150411035626p:plain

7. ただ現状に抗いたいだけ

ここからは自分の現状について書きます。

掃き溜めです。

僕は化学系の学科の学生で、1~3年までは学業期間は忙しく週に5時間程度しか働くことはできなかったのですが、長期休業はあり、夏休みや春休みでフルコミットして技術力の向上を試みていました。もちろん、学業中もパソコンあればどこでもできるので、自分のアプリの開発はしていました。

今年(2015年)から、4学年となることで研究室に配属となりました。

研究室は平日、10時から17時までの拘束時間があります。研究は本当に楽しいので、心境は大丈夫なのですが、平日は19時から2時間ほどしかプログラミングできる時間がありません。さらに長期休業という学びのための時間も無くなってしまいました。しかし、時間を切り詰めれば、アルバイトをする時間は少し捻出できます。一番の問題となるのが、個人開発の時間がとれないことです。本当に切り詰め切り詰めすれば少しはとれると思いのですが、メイン開発者としてコミットするには空く時間が不安定で絶対量が圧倒的に足りないというのが現状です。

しかし、時間がないといっても新しいアイデアを聞いたり、個人開発できる可能性を模索しています。これは、時間が取れないう現状に、ただ抗いたいだけです。本当はわかっています。

8. エンジニアとして成し遂げたいこと

僕自身は誇れるようなエンジニアではありません。開発経験も浅く、プログラミングに深く考える能力はありません。僕と同世代、もっと下の世代には化け物みたいなエンジニアが腐るほどいます。

しかし、僕はエンジニアとして「より良いサービスを創り続けたい」と強く思っています。ゆくゆくはRubyRailsにもコミットしていきたいし、もっともっとギークな技術を修得したいです。しかし、今の段階では「サービスを創る側」にいたいと思います。

これは、僕がプログラミングをする理由でもある、「プログラミングを通して誰かに幸せや楽しさを届けたい」という思いからです。

ソーサルを例とすると、ただのwebサービスというソースコードの集合体を使ってもらうことによって、オフラインで実際に集まってフットサルすることができる。ただのソースコードの集合が実際の人生に喜びや楽しさを生み出すことができる。僕はこれは本当にすごいことだと思いました。だから僕は作り手でいたいです。

f:id:okutaku:20150411041435j:plain

 

最後になりますが、最近思う事をつらつら。

 僕は学生のエンジニアがもっと増えて欲しいと思っています。学生は時間だけしかなく、何にでも挑戦できる時期だと思っています。失敗してもいいんです。

日本のエンジニアの方々を見ると、本当に優秀な人が多いです。世界に負けてないと思います。しかし、iPhoneAndroidの主要なアプリ、FacebookTwitterInstagramなどなど、全て米国産です。プロダクトレベルで世界に戦えるアプリが日本から生まれても不思議じゃないし、そうであって欲しいです。

エンジニアとして、世界で使われるアプリを創ること。成し遂げたいことの一つです。

 

今現在、技術力の壁にぶつかっていると感じています。ある程度のwebサービスを一人で開発できるようになり、ある程度は修得できたと感じています。社会人のエンジニアの職としている方々から見れば、塵に等しいのですが。もっともっと技術力をあげたいです。最近知り合った社会人エンジニアの方に相談したところ、「目的を持つこと」とご教授いただきました。自分でgemを作ることやrailsを読んでみること、目的を持ち、より深い部分に踏み込むことで技術力は上がる。

ここで一つの記事を紹介・引用します。

30ruby.hatenablog.com

この記事の中にこうあります。

"「半年から1年の経験がある人を雇うのは確かに意味がある。(中略)。だがその後、成長曲線は平らになる。驚くべきことに半年の経験と6年の経験は大差ない。本当の差は、応募者自身の熱意や個性、知性に現れる」"

この本当の差を埋めるのは何か。今真剣に悩んでいます。誰か教えてください。本気です。

 

本当に最後となりますが、僕と同じような考えを持つ方いたら連絡ください。

平日はなかなか時間が取れず、週に20時間程度しか開発時間が取れない僕と何かサービスを開発してもいいという方、エンジニア・アイデア問わずお待ちしております。

 

長くなりましたが、ここまでお読みいただき、ありがとうございました。

これからも全力で頑張ります!!!

 

この言葉が好きです。

"Stay hungry, stay foolish"

by スティーブ・ジョブズ

 

ご連絡Twitterで!

twitter.com