営業がプログラミングを勉強してみた

こんにちは、ガイアックスの [@diskogs](https://twitter.com/diskogs) です。このエントリは、[Gaiaxアドベントカレンダー](http://qiita.com/advent-calendar/2015/gaiax)の17日目として書いています。

# はじめに
今年の Advent Calendar でも、非エンジニアがプログラミングを勉強した/プログラマーにジョブチェンジした的な記事がいくつかありました。私も元々は営業マネジャーでしたが、約3年ほど前からプログラミングを勉強しはじめ、現在はコードを書くこと、サービスを作ることを主な仕事にしています。
前述の方々にならい、私も素人の状態からどのようにプログラミングを勉強したか、その中で思ったことなどを書いてみようと思います。私の主観が中心であり、ポエムであり、厳密な話ではありませんが、ご了承ください。

# いままで何をやっていたか
大学は文系の学部を卒業しました。ガイアックスに入社する前は、新卒採用支援をしている会社で営業や採用のプロジェクト・マネジメント（採用の企画から集客、説明、ツールづくり、内定者フォローの実施など）を仕事としていました。ガイアックスでは、グループウェアの営業責任者などをしていました。プログラミングの経験としては、業務の効率化は好きで、ExcelやWordのVBAをいじったりはしていましたが、本格的なプログラミングの経験はありませんでした。

# なぜプログラミングを勉強しようと思ったか
## 最初はチームの生産性を上げたかったから
グループウェアの営業をしていたころは、私の知識の無さから、クライアントの要望をエンジニアに正しく伝えられないことがあり、コミュニケーション上では、開発者に必要以上に歩み寄ってもらうことが必要でした。顧客と会社のかけはしになり、両者の利益が最大化するように努めるというのが営業の役目と考えていましたが、当時の私はそれとは違う状況でした。

## それが自分の仕事観の中で必要だったから
私にとって、働いていて気持ちが良い状況とは、「顧客への貢献の場の最前線にいること」でした（随分ポエミーですが）。前職の時は、コンサルのような仕事をしていたので、顧客の要望をダイレクトに聞け、顧客にどのような価値を提供するかを顧客目線で考えられていたように思います。私がガイアックスに入社し、Web業界を知った時、私が考えている仕事観を実践できるのは、エンジニアだと感じました。だから、プログラミングをできるようになりたいと思いました。

# どのように勉強したか
## 主な教材
他の「開発の勉強してみた」的な記事と大体同じような感じでした。

- [たのしいRuby](http://www.amazon.co.jp/%E3%81%9F%E3%81%AE%E3%81%97%E3%81%84Ruby-%E7%AC%AC4%E7%89%88-%E9%AB%98%E6%A9%8B-%E5%BE%81%E7%BE%A9/dp/4797372273)
- [Ruby on Rails チュートリアル](http://railstutorial.jp/)
- [Everyday Rails - RSpecによるRailsテスト入門](https://leanpub.com/everydayrailsrspec-jp)
- [メタプログラミングRuby第2版](http://www.amazon.co.jp/%E3%83%A1%E3%82%BF%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0Ruby-%E7%AC%AC2%E7%89%88-Paolo-Perrotta/dp/4873117437)
- [ドットインストール](http://dotinstall.com/)
- [RailsCasts](http://railscasts.com/)

この辺りは鉄板かなと思います。

他の方が書いていないこととしては、個人的に家庭教師的な人を頼みました。学習するにあたって、「調べるよりも聞いたほうが早い」「何を調べればいいかさえ分からない」ということは、よくあると思います。こういった場合、例えば、学生、または新入社員のエンジニアであれば、「友達や先輩に聞く」という方法が一般的だと思います。しかし、私は20台後半からプログラミングを勉強し始めたので、あまりそういった環境ではありませんでした。ですので、そこはお金で解決（といっても、全然大した額ではないですが）ということで、個人的に家庭教師的な人を頼みました。

## 最初は動くものを中心に考える
まずは動くものをある程度のスピードで作れる事が重要と考えていました。設計やコードの綺麗さ、または計算機械自体への深い理解は、エンジニアにとって、非常に重要なものだと認識しています。しかし、学習するにあたっては、楽しいと感じられることが重要であると思います。私にとっては、「動くものができる」ということが楽しいことであったので、まずは、動くものを作るということに集中するために、うまく設計できない、綺麗なコードが書けないということは、あまり悩まないようにしました。

## 自分にとって毎日必要なサービスを作るのはお勧め
一定以上の年齢からプログラミングを勉強すると、「意味のあるものを、使ってくれるものを作れない」ということに悩むかもしれません。というのも、自分の持っている技術では大したものは作れないです。だからといって、よくチュートリアルなどにある「占いアプリ」「神経衰弱アプリ」のようなものを作っても、「なぜいまさらこんなものを」とも思ってしまうと思います。また、何かを作れたとしても、それを使ってくれる人はいません。Twitterのようなサービスを作ることはできますが、Twitterのように盛り上がるサービスにできるかというと、それはまた別の問題です。大したものを作れない、使ってくれないと、段々と学習することに飽きてきてしまうかもしれません。私にもそういう時期はありました。
そういった場合におすすめなのが、自分が必要な情報をWebからスクレイピングをするようなサービスを一人で作り、自分のために運用するということです。なぜこれがお勧めかというと、ありものの情報を取ってくるわけですから、データを作る必要がありませんので、他の人に使ってもらわないと成り立たないということがありません。そして、あたりまえですが、自分が必要な情報なので、作る意欲が湧いてきやすいと思います。また、スクレイピングする対象が動的なので、かなりの頻度でツールは壊れます。そうすると、エラー処理の必要性や運用すること大変さなど、実際のサービス運用に必要なことを学べると思います。スクレイピングの本では、[Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例](http://www.amazon.co.jp/Ruby%E3%81%AB%E3%82%88%E3%82%8B%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E9%96%8B%E7%99%BA%E6%8A%80%E6%B3%95-%E5%B7%A1%E5%9B%9E%E3%83%BB%E8%A7%A3%E6%9E%90%E6%A9%9F%E8%83%BD%E3%81%AE%E5%AE%9F%E8%A3%85%E3%81%A821%E3%81%AE%E9%81%8B%E7%94%A8%E4%BE%8B-%E3%82%8B%E3%81%B3%E3%81%8D%E3%81%A1/dp/4797380357)、がおすすめです。大体必要なことは書いてあります。もちろん、クロールするときは、対象のサービスに負荷をかけないように注意しましょう。

# 今後
現在、伝統サポーターズというサービスで、Railsやフロントエンドを書いています。まだまだ、スキル的には非常にしょぼいです。ある程度かけるようになったので、次はコードの質や設計についても学んでいきたいと思います。そして、技術やサービスを通じて、世の中を前進させるようにしてきたいです。
また、今の自分があるのは、偉大な先人たちのおかげだと思っています。いつかは、オープンソースコミュニティにも貢献できるようになっていきたいと思っています。


明日は @hoto17296 さんです。