Time is money

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

プログラミングは誰かの人生を変え、多くの人に幸せを届ける

こんにちは。

夜の雨音が静かで心地いい季節ですね。

この季節は雨の日を楽しむようにしてます。

f:id:okutaku:20100627041450j:plain

先日、ReLife (http://bb-relife.jp/)という起業家インタビューサイトで、今話題のプログラミング学習サイト「Progate」の記事を拝見しました。それがこちらです。

bb-relife.jp

加藤將倫さん、村井謙太さんには直接面識はないのですが、記事のタイトル、「プログラミングは人生を変える」と内容にしびれたので、触発されて、この記事を書いています。

「プログラミングは誰かの人生を変える」と「プログラミングは多くの人に幸せを届ける」ということを軸に書いていきたいと思いますが、脱線したらすみません。笑

また、大それたタイトルをつけてしまったことを、ここでお詫びいたします。

 

プログラミングは誰かの人生を変える

f:id:okutaku:20150621020341j:plain

「誰か」とは、他でもない、あなたです。そして、その一人に僕がいます。僕もプログラミングを知って人生が変わったと思っている一人です。そのことについて書きます。

大学1年の終わりにプログラミングと出会いました。

僕は元々、なんの自慢もない人間でした。ただ、何かに熱中したり、馬力とか根性だけはあると自負していました。大学1年の終わり、周りの学生はサークル、アルバイト、留学など、輝かしい大学生活を謳歌してる中で、僕は何も熱中できることがなく、ただ実験やレポート(専攻は応用化学)に追われる日々を過ごしていました。そんなモラトリアムの中、何となく新しいことを始めたいと思った時、手に取ったのが今のアルバイト先の社長の著書で、ひょんな事からエンジニアとして雇われました。これが僕のプログラミングとの出会いで、エンジニアとしての始まりです。

エンジニアのアルバイトを2年ほど続けてきましたが、プログラミングを始めたころは、本当に全く何もわからない状態でした。これが何に使われて、誰の役に立つのか、プログラミングを勉強する楽しさなんて抱けませんでした。プログラミングを勉強することは、わけのわかないものを学んでいるのと同じで苦痛を感じていた時もあります。

そんな中で、プログラミングの楽しさに気がついたのは「自分のアイデアをプロダクトとして作り上げた時」です。初めに紹介した記事の中で加藤さんは「一つのものを作り上げること」が成功体験となることについて触れています。webに落ちているチュートリアルをやるなり、参考書に従って一つのアプリを作るなり、なんでもいいのですが、一つの実際に動くアプリを作ることは自分の成功体験として心に残ります。しかし、僕はそれでは自分の中での感動を呼び覚ますには弱いと思っています。こう言うと、むっとする方もいると思いますので、ここで謝罪します。すみません。少なくとも、僕は参考書のサンプルアプリを動かしただけでは、なんの感動も受けませんでした。「で…?」と感じた僕は、自分の頭の中にあった、これあったら皆の生活が豊かになるんじゃないか?というアプリを作り出しました。四苦八苦し、全然思い描くものはできなかったのですが、初めてサーバーからメールを飛ばせた時、徹夜でサーバーを構築して初めて取ったドメイン(~.comみたいなもの)で自分のアプリが動き出したとき、初めて身内じゃない人がユーザー登録してくれた時、本当に感動しました。webの可能性を実体験した瞬間です。今思えば、全く大したものを作ったわけではないのですが、本当にすごく感動したことを覚えています。そこから僕はサービス開発を通して、プログラミングが大好きになりました。プログラミングを学ぶということは極めて能動的です。誰かが強制してきて、勝手に意義が付与された義務教育ではありません。自分から学んでいかなれば誰も教えてはくれませんし、実力もつきません。そのためには、自分がプログラミングをして何でもいいから、アイデアを形にして動かしたという感動が必要だと思います。話が脱線しましたが、プログラミングは僕にとって熱中するに十分なほど面白いものになり、良い意味でドはまりしました。

生きていく上で、人生に変化がないことは決してないです。進学や就職、転勤など環境が変われば人生も変わっていきます。なので、かなりの偏見ですが、僕はすべての人がプログラミングを学んで、理解できる社会などいらないと思っています。本当にプログラミングが好きで、言語を作ったり、OSを作ったり、はたまたwebサービススマホアプリを作ることが人生の生き甲斐だと感じる人がプログラマ、エンジニアをすればいいと思っています。当たり前ですが、プログラミングには向き不向きがあります。しかし、それと一度チャレンジすることは大きく違います。少しでも興味があるなら、プログラミングは難しい、理系脳じゃないとできない、闇が深そう、暗い感じがするなどの障壁に臆することなくチャレンジしてみてください。webサービスを自由に設計して、思い描いたものを作り出すことは本当に楽しいです。これはどれだけ言っても、実体験ででしか伝わらないと思います。

 

プログラミングは多くの人に幸せを届ける

f:id:okutaku:20150621004835j:plain

この写真は僕がエンジニアとしてジョインしている「フットサルをもっと身近に」をコンセプトにした「ソーサル」というwebサービスで、実際にフットサルをした時の写真です。

sosal.me

普段は10~20人程度の規模で企画をしているのですが、この写真はソーサルカップ (https://sosal.me/blogs/sosalcup_3rd_report)といって大人数でフットサルをしようということを目的とした大会のようなものです。

なぜ、この写真を紹介したのか。それは、プログラミングが誰かに幸せを届けるためのツールだと思っているからです。「ソーサル」の最終的な目的はフットサルをすることです。そこにwebサービスである必要性はありません。既存のコミュニティー、仲間内を辿っていけば、どうにかフットサルをすることができると思います。自分でコートを予約してTwitterなどで呼びかければ、実際にフットサルができると思います。しかし、ソーサルがwebサービスとして機能しているのは、プログラミングが運営者であるソーサルのメンバーの負担を少しでも軽減し、ソーシャルと連携することで、そのリーチ数を伸ばすことができ、フットサルをするという目的を達成する可能性を最大化させるためだと考えています。そう考えるとプログラミングはフットサルをするという目的を達成するためのツールでしかありません。

これまでに多くの方がソーサルに参加してくださいました。僕が本当に感動したのは、ソーサルに参加してくれた方が「楽しかった。ありがとう。また参加するね!」と言ってくれたことです。本当に感動しました。「ただフットサルしただけでしょ?」と思われる方もいると思いますが、プログラミングというソースコードの塊を通して、オフラインで実際に初対面の方とフットサルをして、「ありがとう」と言ってもらえる。これ以上に嬉しいことはありません。また、ソーサルに参加してくれた方の中には、地元では仲間とフットサルをしていたけど、上京してコミュニティーを失って、なかなかフットサルをすることができずに困っていたところで「ソーサル」を知ってくださり、実際に参加してくれた方がいます。その方から頂いた「こういう場を作ってくれてありがとう」という言葉は本当に嬉しかったです。「ソーサル」には新しいフットサルの形として、誰もがフットサルを楽しめる環境を作りたいという夢があります。少しずつですが、その環境を作りだせているのではと感じています。プログラミングはwebサービスという一つの形を通して、多くの人に幸せを届けることができる最高のツールです。あとはしっかりとした実力をつけ、それをどうに利用するか、ではないでしょうか。

 

長々と書いてしまいましたが、このブログを読んで少しでもプログラミングに興味を持ってくれて、参考書なり、プログラミング学習サイトをやり始めてくれる方が増えてくれたら幸いです。

最後にエンジニアに少しでも興味がある方へ、恐れ多いのですが、2年と少しエンジニアをしてきて思うことを書きます。

僕はエンジニアをしていく過程で3つのことを大事にしています。

まず、「師を仰ぐこと」です。独学では多くの場合、限界がきます。僕は大学1年の終わりからプログラミングを始めた、この業界の上層からしたらかなり遅いスタートです。より早くプログラミングを上達させるためには、良き師に出会い、その技術を貪欲に吸収していくことが近道ではないでしょうか。

次に、「コードと真摯に向き合うこと」です。昨今、数ヶ月でエンジニアになれるなどのうたい文句が流れていますが、残念ながら多くの場合、一朝一夕でエンジニアになることは困難です。どこまでをエンジニアと呼ぶかの問題かと思いますが、僕の思うエンジニアは自分で全てを構築できる者です。その場合、本当に多くの知識を身につけ、場数を踏むことが重要です。そのためにはそれなりの期間がいります。その中で、真摯にコードに向き合うこと、第一とは言いませんが、電車のつり革につかまっている時でさえ、コードについて考え、皆が遊びに走る中でも、できる限り多くの時間、コードを書き続ける姿勢が大事なのではないでしょうか。

最後に、「創り続けること」です。元々プログラミングにあまり興味がなかった僕の場合、技術を身につけるための勉強は困難を極めました。何か目的を持って勉強することで本当に多くのことを学べた気がします。この機能を作るためには、どのような技術が必要か。それを追求することで、少しずつ、一つずつできることの幅が広がります。そのためには、創り続けることがとても大切だと感じました。

 

エンジニアは決して辛い職業ではありません。最高にクリエイティブで、世界をより良い方向に動かす実行者です。日本のIT業界では経営者が注目されがちですが、真にプロダクトを押し進めているのは、他でもないエンジニアではないでしょうか。そう考えると、エンジニアは本当にやりがいのある職業だと思います。

 

最後まで読んでいただき、ありがとうございました。

 

ご連絡Twitterで!

twitter.com

【エンジニア視点】注目教育系サービス、「センセイプレイス」から学ぶ - webサービスを創る上でもっとも大切なこと

こんにちは。

誕生日月である5月が風のように過ぎ去ろうとしています。

日々、夏の訪れを感じています。

f:id:okutaku:20150530001028j:plain

今回は、僕がエンジニアとしても一人の学習者としても注目する、教育系webサービス、「センセイプレイス」について書きたいと思います。

センセイプレイス => http://www.senseiplace.com/

1. 教育×テクノロジー = EdTech、「センセイプレス」とは

「センセイプレイス」とは「個人の先生が活躍する、オンライン指導のマッチングプレイス」です。

センセイプレイスについて、とてもわかりやすい動画があります。

センセイプレイスでは、生徒が気に入った先生に指導を仰ぎ、実際に先生とビデオ通話することができる、オンライン教育のプラットフォームです。実際にサービスを使ったことがないため、具体的には述べられませんが、教えてもらえることはその"先生が得意なこと"だと思います。"得意な教科"ではないことが大きな特徴ではないでしょうか。教育はただ事実を教えることではなく、生徒と対話して、生徒が今どの段階にいて、何が不足していて、何をどのように学んだらいいか、人生そのものにアドバイスをすることだと思います。それをwebサービスとしてやろうと試みているのが、「センセイプレイス」ではないでしょうか。関係者の方々、間違っていたらすみません。

 

2. 僕と「センセイプレイス」の関わり

f:id:okutaku:20150530005439p:plain

僕は、実際にセンセイプレイスの先生をしているわけではありません。

では、なぜセンセイプレイスに注目しているのか。その理由を書きたいと思います。

大学一年の頃、僕は一度先生を志して教育課程を受講していましたが、プログラミングを本気で学ぶために、先生になる道を断ちました。(未だ教育者への想いは決して冷めたわけではありません)

ある日、Twitterで誰かがRTしていたブログを拝見しました。

30ruby.hatenablog.com

そう、それがセンセイプレイスのエンジニアをしている馬場祐平 ( @u_baba )さんとの出会いでした。そのころはまだセンセイプレイスは今の形を成していなかった頃だと思います。このブログの「一ヶ月、Rubyを本気で独学した結果(文系向け)」というタイトルの記事 ( http://30ruby.hatenablog.com/entry/2014/11/01/030505 )を読みました。めっちゃ長い文章でしたが、その分、僕の魂にめっちゃ刺さりました。僕も、もともとパソコンが好きとか独学でプログラミングを勉強していたとかではなく、大学一年の終わりに興味からプログラミングを始めて、完璧な無知から這い上がってきたからです。そんな僕には感動と共感するに十分すぎる内容でした。馬場さんのブログの読者になった僕は、次なるエントリーを心待ちにしていました。

 次なる記事が「センセイプレイス」についてでした。

30ruby.hatenablog.com

 実際に読んで欲しいので、記事の内容は述べませんが、馬場さん達はプログラミングというテクノロジーを通して教育にもう一つの道を創造しようとしていて、エンジニアとして教育者を志した身として、鳥肌が立つほど刺激的な文章でした。きっと馬場さんはプログラミングを楽しんで、自分のプロダクトを愛していると感じました。

このブログを通して、馬場さんと連絡することができ、お話する機会を得ました。土曜の浜松町、芝大門近くの東京タワーの見えるスタバのテラスで、まだ肌寒さがありました。実際にお会いした馬場さんは、想像以上の方でした。すごく情熱的で、センセイプレイスを愛している方だと感じました。また、エンジニアとして共感することもあり、教育に関しても共感することが多々あり、本当に楽しい時間でした。

その時、「センセイプレイス」について初めて内容を聞き、URLを教えてもらいました。「センセイプレイス」について感じたことを以降に書きたいです。すごく、主観的な考えなので、不快に思われる方、読み飛ばしてください。

 

3. webサービスを創る上でもっとも大切なこと = "情熱"

f:id:okutaku:20150530030110j:plain

webサービスを創る上でもっとも大切なこと、それは情熱です。燃えたぎるような情熱が必要不可欠です。それも"持続的な"。これは、エンジニアであろうと、経営者であろうと、デザイナーであろうと、ライターであろうと変わらないと思っています。また、その情熱の方向は何でもいいと思っています。プログラミングが好き、お金を稼ぎたい、有名になりたい、困っている人を助けたい、誰かを幸せにしたい...何でもいいです。このことについて、「センセイプレイス」を踏まえて、今回はエンジニア視点で考えたいです。

まず、「センセイプレイス」を訪れてみてください。

センセイプレイス / Sensei Place

みなさんはどう思われるでしょうか。

僕はこのサイトをエンジニアとして拝見し、単純にすごいと思いました。最近ではUI/UXに特化したリッチなサイトがユーザーのデフォルトとなり、サイト構築のコストは増してきています。その視点からみると、まだまだ詰め込める部分は多いかもしれません。しかし、このサイトをプログラミングを始めて半年で作り上げ、公開まで持っていくことは並大抵のことではないと思います。技術的なことも含め、実際に自分のアイデアを具体化させていくのは想像を超えます。初めてwebサービスを構築していくためには、小さなブレイク・スルーの積み重ねが必要です。初めのうちは、エラーとの戦いです。自分が欲しいと思った機能を作るために、きっとエラーと遭遇します。一文字違いでもプログラムは正常に動作せず、クラッシュします。そのエラーに立ち向かい、何かしらの解決策を導きだすためには、諦めないことが大切だと思っています。これがいわゆるエンジニア気質で、エンジニアは「自分が思い描いた機能、webサービスを構築するにはどうすればよいか」という探究心で支えられていると思います。エンジニアリングはツールです。

webサービスを開発するに当たり、その開発期間はだいたい数ヶ月に及びます。また、運営期間中も機能追加などをするため、大きな開発は長期にわたると思われます。数ヶ月から半年、一年に渡り、モチベーションを維持することは極めて困難です。その時に必要となるのが"持続的な情熱"だと思います。

エンジニアリングは「今まで学んできた、吸収してきたことの総和」です。Ruby on Railsができるだけでは、実際にサーバーを使って公開させることはできません。HTMLを組めるだけではリッチなwebページ作ることも難しいです。サーバーを自作できるだけでは、すぐにはwebサービスを構築し、公開させることはできません。今まで習得してきた内容を総動員することで一つのwebサービスができていくのだと思います。

Ruby on Railsエンジニアを志す全ての人へ - 初めに手に取るべき最高の一冊

こんにちは。

気がついたら五月が終わろうとしています。

もうすぐ梅雨ですね。あの土の香りが結構好きです。

f:id:okutaku:20150523014438j:plain

 

さて、僕がエンジニアをしている「フットサルをもっと身近に。」をコンセプトにした個人参加型フットサル、ソーサルは全て"Ruby on Rails"というプログラミング言語"Ruby"で記述されたアプリケーションフレームワークで構築されています。

sosal.me

僕がRuby on Railsを始めるきっかけを与えてくれ、バイブルとしている参考書が2015/5/22に改訂されたので、ご紹介します。

これは僕の独断と偏見なので、むっとする方は聞き流してください。

 

初めに、その本とは黒田 努 著「改訂3版基礎 Ruby on Rails」です。

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

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

 

 この本がいかにRuby on Railsの教科書としてオススメかについて語りたいと思います。

 

1. Ruby on Railsとは

f:id:okutaku:20150523032211p:plain

Ruby on Railsは先ほども書いた通り、アプリを創るためのツールのようなものです。日本発のプログラミング言語Rubyで書かれていて、多くの企業がサーバーサイドで用いています。

Ruby on Railsについて詳しく知りたい方はここが詳しいです。

 

2. Ruby on Railsは最高に楽しい

f:id:okutaku:20150523032657j:plain

皆さんはプログラマ、エンジニアという職種についてどのような印象をお持ちでしょうか。暗い、地味、オタク、辛い…ネガティブなイメージを持たれやすい職種だと思います。

しかし、実際にプログラマの方、エンジニアの方と話してみるとそうでもありません。ネガティブなイメージは社会の闇が一人歩きしているだけだと思います。

エンジニアリングは頭の中のアイデアを具体化するプロセスであり、最高にクリエイティブです。

友人は「プログラミングは魔法だ」と表現していたのですが、本当にそうです。少なくとも、僕にとっては人生を変えるほどの魔法であったことは確かです。

 飽き性の僕が2年もプログラミングを続けてこれたのは、プログラミングが最高に楽しいからに他なりません。その楽しさは"Ruby on Rails"だから感じることだと思っています。これには否定的な意見をお持ちの方もいると思うのですが、「Ruby on Railsは書いていて楽しい」と良く言われます。実際に書いてみると、わかりやすいアーキテクチャで、話言葉に近い文法、決まりきった型があるからこそ簡単にアプリが作れるなどが分ります。自分で書いたプログラムがすぐに動きだし、ブラウザで見ることができ、創る喜びを瞬時に実感できるからだと思います。

 

3. Ruby on Railsは最速かつ最小でアイデアを形にする

f:id:okutaku:20150523033219j:plain

僕はRuby on Rails

「エンジニアの生産性を最大化させるソルーション」

だと思っています。簡単なアプリケーションであれば、ちゃんと訓練することで瞬時に構築でき、自分が書くコードもそんなに多くはありません。

自分の頭の中にあるアイデアを最速で形にし、世に出すことをRuby on Railsは可能にしてくれます。

その例として、僕がエンジニアを務めるソーサル( https://sosal.me )は開発着手から2か月余りで公開されました。最小の機能だけですが。

また、その根拠として、自分たちのアイデアをすぐに形にして世に出し検証する必要があるスタートアップの方々はよくRuby on Railsを選択します。ここまで多くのサービスがRuby on Railsを採用するのは、それがただ単に注目されているテクノロジーだからだけではないと思われます。

 

4. なぜ「改訂3版基礎 Ruby on Rails」 をオススメするのか

さて、ここからが本題です。

この「改訂3版基礎 Ruby on Rails」は2015/5/22に改訂され、最新のRubyRuby on Railsをサポートしているため、今から買うのであればこの改訂3版を手にしてください。

僕は、大学1年の終わりに、知人の勧めでアプリを開発しようとぼんやりと思い池袋のジュンク堂にいきました。webについて何も知らなかったため、どの本が初心者向けなのか、イスに腰掛け、何冊もイントロダクションを読んでいました。しかし、どの本を開いても「やっぱりプログラミングは難しい」という印象だけでした。その中で出会ったのが、今回オススメする本の前のバージョンでした。感じたのは、この本はすごく親切に書かれているなということで、初心者に優しそうな印象でした。あくまで印象です。このような参考書は単価が高く、そうほいほい買えるものではないため、どの一冊にしようと考えた時に、"なんとなく"この本にしようと感じたのです。

 

実際に一周やろうと思いました。この時は何も知識がありません。

最初の方で詰まりました。

これが独学の最大のデメリットです。詰まったらどうしようもない。答えの見つけ方もまだわからない。どうしようもない。さて…笑

僕は高いお金を出したので、どうしても許せませんでした。なぜ、本通りにやっているのに先に進めないんだ。これは著者に問題ありだろ。勝手に解釈しました。

僕は著者の黒田さんにメールをしたところ、すぐに解決策を教えてくれました。単純な僕はすごく感動しました。本通りにやっていると思っていたけれども、それはただ単に手順を間違えて勝手に詰まっているだけで、著者の方に非はないのに、ここまで親切に教えてくれるのかと。

こうして本の最後まで勉強してみると・・・

何もわからない。何がどうなって、このサイトができているのか。本当に何もわからない。

これが結末かと思いました。独学では限界がある。そうに思いました。

 

ただ、救いだったのは、この本には"実際に一つのサイトを自分の手で構築していく手段"が書かれていることです。ここが他の参考書と大きく違うポイントだと思います。実際に創ることを通してRuby on Railsが学べる。今だからこそ、そうに思うことができるのですが、その時の僕にはちんぷんかんぷんでした。

そこで僕は、二週目をやることにしました。二週目を終えるとなんとなくわかってきました。リンクの作り方、データの保存の仕方、本当になんとなくです。

次に僕は、三周目をただ単に復習するのではなく、自分のアイデアに置き換えました。その時に実際に創ったのが「大学講義情報収集サイト」です。アイデアは違えど、やっていることはこの本と同じことで、ユーザーがいて、ログインでき、自分の記事を講義情報として投稿できるだけ。この本に書かれている内容とまったく同じことです。

f:id:okutaku:20150523030020p:plain

f:id:okutaku:20150523030029p:plain

f:id:okutaku:20150523030037p:plain

 

しかし、このアプリをある程度作った段階で、自分の頭の中のアイデアが形になる楽しさや喜びを感じることができました。ただ単純に、「プログラミングすげー!!!」と思いました。

僕がこの感覚を持てたのは、この本がすぐに自分のアイデアをある程度現実化できるように、webアプリに必要と思われる最小限の機能について書いてあるからだと思います。自分のアイデアにすぐに置き換えることができるように設計されています。

 

長々と書いてしまいましたが、僕が「改訂3版基礎 Ruby on Rails」をオススメする理由を一言で言うと、

「実際に創ることを通してRuby on Railsが楽しく学べる」

からです。

勉強も部活もそうです。説明されているだけだと頭に入ってこないし、楽しくもなんともない。自分で体験することで、その面白さに気が付くんだと僕は思います。

 

オススメの学習法としては「改訂3版基礎 Ruby on Rails」を最低三周することです。最後の周は自分のアイデアにできる限り置き換えて勉強してみてください。本にないことはできるだけすぐに検索してみてください。きっと自分と同じ悩みを持った人がいて、すでに答えが導きだされています。

 

僕の今開発するソーサルもこの本のアプリ構築に必要な基本的な機能をトレースする形で作られています。実際にwebサービスを構築したい人は、一冊持っておいて損はないと思います。他の本やオンラインプログラミング学習サービスなどを使ったことがないため、比較することは避けますが、少なくとも僕はこの本を初めに手にとって正解だったと思っています。

もし、この記事を読んで少しでも興味を持っていただけた方は、是非本屋に足を運んだ際に手に取ってみてください。

 

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

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

 

 

長々とすみませんでした。

お読みいただいき、本当にありがとうございました。

 

ご連絡Twitterで!

twitter.com

エンジニアと研究者、3つの共通点

こんにちは!

もう、GWも終わりですね。

エンジョイしましたか!?

 

僕は毎年恒例の「名探偵コナン」の劇場版を"一人で"観に行きました。

f:id:okutaku:20150506141919j:plain

感想は「ほぅ...!」です笑

 

僕は今、某私立大学の理系学科で研究室に配属されている研究者の卵で、その傍らでソーサルのエンジニアであり、最近はできていませんがアルバイトでもエンジニアをしています。

sosal.me

 

平日10-17時まで研究室にいて、主に土曜日にアルバイト、空いた時間にソーサルなど個人でのプログラミングをしていて、タイトル通り、エンジニアと研究者の狭間をふわふわしています。

そのことに関しては最後に述べるのですが、この少しの間、エンジニアと研究者の狭間でもがいた結果、わかったことを3点述べたいと思います。

 

1. 誰もがビギナーである

f:id:okutaku:20141217073218j:plain

これは当たり前ですね。

プログラミング、研究に限らず全て、新しいことを始める時は"誰しもがビギナー"です。

始めは誰も何もわからないです。

この数か月で研究者としての生活が始まり、なぜ人々は研究するのか、どのように研究するのか、研究結果とは何か。まったくわかりませんでした。今でもはっきりとはわかりません。

しかし、確かに僕がプログラミングを始めた2年と少し前の時、何が何だかわからず、ただ頭が痛かったのを思い出しました。今では当たり前と思っていることも、始めた段階では当たり前ではなく、理解し難いことのように見えるんだと思いました。

わからない。それだけの理由で諦めてしまうのではなく、プログラミングでもそうであったように、"わかりたい"と強く思って、楽しみながら、小さなブレイクスルーの積み重ねをしていけばいいんだと思いました。きっと数年後、なんとなくだけどわかっている自分がいると信じています。

 

2. 技術は伝承する

f:id:okutaku:20150506143557j:plain

出典: http://www.lifehacker.jp/2012/06/120624matomeresearch.html

これも当たり前です。

当たり前の事ばかりすみません。

 知識・技術は伝承します。これは紛れもない事実です。

プログラミングにおいては独学もあると思うのですが、独学でも初めは書籍などで学ぶはずです。

僕がエンジニアをしていて思うのは、知っている人から学ぶことは上達への最短ルートであるということです。独学で自分なりの開発ルールを築いていくことは本当に難しいことだと思います。何故そこにそのコードを書くのか、何故そのツールを使うのか、自分で考えて行動できるまでは相当の経験が必要だと感じています。

また、技術の伝承は研究者において顕著です。プログラミングはこの数十年の間に誕生し、日々の進化速度は計り知れませんが、一方、学問を巨視的にみると古くは古代ギリシャ、起源はもっとはるか昔にあり、多くの偉大な先達たちが自分の人生を賭して多くの発見をしてきました。僕たちはその巨人たちの肩にのり、遠くを見渡せているわけです。多くの天才たちが独自の研究方法を発案していて、それらが洗練されて今の研究があります。

エンジニアリングも研究においても師を仰ぎ、多くを吸収して、自分のアウトプットに活かすことの大切さを日々噛みしめています。

 

3. 世の中にまだ、無いものを生み出している

f:id:okutaku:20150506145730j:plain

出典: レトロでおしゃれ。電球の原点を復刻したエジソンバルブが素敵! | キナリノ

エンジニアリングも研究活動も"まだ世の中に無いもの"を生み出していることに他なりません。どっちが素晴らしいかではないです。確かに、つい最近まで「ITこそ至高だ。革新を生み出せるはITしかない。」という意識が僕にもありました。しかし、それは間違いです。

反論される余地が多くあるので、深くは述べませんが、僕はITを「より生活を便利に、幸福にしてくれるためのテクノロジー」だと思っています。素晴らしい技術ですが、それだけでは、青色LEDは発明されないし、刺しても痛くない注射針や、難病の特効薬、プラスチックも発明されなければ、家が建つこともありません。極論ですが。

どっちも正しいんだとわかりました。どっちも情熱を傾けるだけの価値があって、自分が楽しめて、誰かの役に立つものを生み出し続けている。

最終的には、誰かの笑顔や元気になって、生活の幸福度を上げることができる。それがどちらも共通していると思っています。

 

 最後になりますが、僕はエンジニアと研究者の狭間をどっちつかずでふわふわしています。最終的にはどちらの道に進むか決めなければならないのですが、今はどちらも全力で取り組んでいきたいというのが、ここ最近の結論です。

どっちも目的は「誰かの役に立つものを生み出すこと」だからです。エンジニアリングも研究も手段でしかありません。

もう少しだけ、もがき苦しみたいと思います。

 

ご連絡Twitterで!

twitter.com

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

桜が綺麗でしたね。

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

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

学生プログラマーがアプリを作り続ける理由。

アプリってなんだろう?
スマホが普及して、「アプリ」って言葉はかなり身近に、抽象的になった。

僕は「アプリ」を「ユーザーに何らかのサービスを提供するソフトウェア」と考える。
ここで言うサービスは掲示板であったり、キュレーションであったり、パズルゲームといったもの。
スマホでいうとTwitterであったり、Facebookであったり、Instagramのこと。

僕がアプリを開発し続ける理由は三つある。
1. 楽しいから。
2. 楽しいから。
3. 楽しいから。

アプリ開発、いや、プログラミングって本当に楽しいですよ。
自分のアイデアを形にできる、一つの方法だと思っています。
仲間とあーでもない、こーでもないとか言って、0(アイデア)から1(実際に動くもの)を作るのって本当に難しくて、本当にやりがいがある。
本当の理由は以下の3点。

1. 夢がある。

f:id:okutaku:20141217072224j:plain

僕は某都内大学に通う化学系の学生で、プログラミングとは一切関係ない生活を送ってた。
だけど、運あってプログラミングを知って、今の会社でアルバイトとして雇ってもらって、日々プログラミングを勉強している。
そんな、僕には夢がある。というか、夢ができた。
本当の夢は化学者になってノーベル賞をもらうことだけど、もう一個、日本発の最高のアプリを作ること。
「最高の」ってわざとぼやかしてるのは、まだはっきりと何が最高かわかってないから。
今、最強のアプリって廃れてきたかもしれないけど、Facebookであったり、Twitterであったり、国内ではLINEであったりする。
蓋をあけてみれば、ほとんど外国製。そう、日本は先進国の中でIT後進国。ITは今後も、たぶん何十年かは伸びる分野だと思う。
最近では、中等教育からプログラミングとか、IT関連のリテラシーを学ぶ機会が増えてきたみたいだけど、まだまだ後進国
そんな中で最高のアプリを作ってGoogleみたいに本当の意味で世界を変えるって野望があったりする。

2. プログラミングは世界を変える。

f:id:okutaku:20141217073306j:plain

プログラミングには世界を変える力がある。先日、虫歯で歯医者行って、今日もまた行くところだけど、久しぶりに中学生ぶりに行ったらビックリした。カルテは電子化されてるし、一つの席に一個ディスプレイあって、レントゲンがすぐ出てくるし。すごい。
そのサービスもプログラミングで出来てる。今、これの記事書いてるのもはてなさんが提供してるブログサービス。普段使ってるスマホ全部がプログラミング。スマホは無くても生きていけるけど、生活を便利で快適にする力を持っている。
そう、プログラミングは生活を変える。だから、学ばなくちゃ。

3. 学生には時間しかない。

f:id:okutaku:20141217073553j:plain

学生には時間しかない。でも、時間がある。好きなことに時間を使える唯一の期間だと思ってる。僕はプログラミングにどっぷりはまっただけ。いろんな時間の使い方がある。僕は勉強は難しい理論よりも、簡単な実践の方が吸収は早いと思ってる。難しいことは、あとからGoogle先生が教えてくれる。まずは、動くものをバンバン作ろうと思ってる。

学生プログラマーがアプリを作り続ける理由。
プログラミングは様々な力を持っていて、社内の煩雑な作業を効率化することであったり、会員・商品をワンクリックで管理することであったり、頭の中のアイデアを世間一般に広める方法であったり、教えを乞う場所であったりする。プログラミングを学ぶためには、実際にアプリを作ることが手っ取り早い。だから、最近作り続けてる。

第一弾としては、自己管理をより自由にするサイト。Myself。
自己管理は昨日の自分よりも今日の自分、明日の自分って、成長していくための方法だと感じてる。

Myself

第二弾として、誰もがライターになれるサイト。Talker。
自分の考えている・語りたいことを誰かに知ってもらって、自分も知る。きっと世界は良い方向に向かってくと考えてる。

Talker

アプリって素晴らしいアイデアを実現して、世界をちょっとだけ良くすることができると思ってる。

gitでコミットを整頓する

1. まず、作業ブランチにいるとする。

% git branch -> work_branch

 

2. masterのブランチをfetchする

% git fetch

 

3. 作業ブランチでgit rebase -i してコミットを整頓する

% git rebase -i origin/master

主要なコミット以外はsquash!!

参考URL: 初心者でも分かる!git rebaseの使い方を解説します | 株式会社LIG

 

4. masterに戻る

% git checkout master

 

5. masterをpull

% git pull

これいらないかも。

 

6. masterに作業分を取り込む

% git merge --ff-only work_branch

 

7. masterをpush

% git push origin master

 

終わり。