このエントリは、Gaiaxアドベントカレンダーの17日目として書いています。非エンジニアがプログラミングを勉強した/プログラマーにジョブチェンジした的な記事がいくつかありました。私も元々は営業マネジャーでしたが、約3年ほど前からプログラミングを勉強しはじめ、現在はコードを書くこと、サービスを作ることを主な仕事にしています。前述の方々にならい、私も素人の状態からどのようにプログラミングを勉強したか、その中で思ったことなどを書いてみようと思います。私の主観が中心であり、ポエムであり、厳密な話ではありませんが、ご了承ください。いままで何をやっていたか大学は文系の学部を卒業しました。ガイアックスに入社する前は、新卒採用支援をしている会社で営業や採用のプロジェクト・マネジメント(採用の企画から集客、説明、ツールづくり、内定者フォローの実施など)を仕事としていました。ガイアックスでは、グループウェアの営業責任者などをしていました。プログラミングの経験としては、業務の効率化は好きで、ExcelやWordのVBAをいじったりはしていましたが、本格的なプログラミングの経験はありませんでした。プログラミングを勉強しようと思ったか最初はチームの生産性を上げたかったからグループウェアの営業をしていたころは、私の知識の無さから、クライアントの要望をエンジニアに正しく伝えられないことがあり、コミュニケーション上では、開発者に必要以上に歩み寄ってもらうことが必要でした。顧客と会社のかけはしになり、両者の利益が最大化するように努めるというのが営業の役目と考えていましたが、当時の私はそれとは違う状況でした。それが自分の仕事観の中で必要だったから私にとって、働いていて気持ちが良い状況とは、「顧客への貢献の場の最前線にいること」でした(随分ポエミーですが)。前職の時は、コンサルのような仕事をしていたので、顧客の要望をダイレクトに聞け、顧客にどのような価値を提供するかを顧客目線で考えられていたように思います。私がガイアックスに入社し、Web業界を知った時、私が考えている仕事観を実践できるのは、エンジニアだと感じました。プログラミングをできるようになりたいと思いました。他の「開発の勉強してみた」的な記事と大体同じような感じでした。RSpecによるRailsテスト入門メタプログラミングRuby第2版ドットインストールRailsCastsこの辺りは鉄板かなと思います。他の方が書いていないこととしては、個人的に家庭教師的な人を頼みました。学習するにあたって、「調べるよりも聞いたほうが早い」「何を調べればいいかさえ分からない」ということは、よくあると思います。いった場合、例えば、学生、または新入社員のエンジニアであれば、「友達や先輩に聞く」という方法が一般的だと思います。私は20台後半からプログラミングを勉強し始めたので、あまりそういった環境ではありませんでした。そこはお金で解決(といっても、全然大した額ではないですが)ということで、個人的に家庭教師的な人を頼みました。最初は動くものを中心に考えるまずは動くものをある程度のスピードで作れる事が重要と考えていました。設計やコードの綺麗さ、または計算機械自体への深い理解は、エンジニアにとって、非常に重要なものだと認識しています。学習するにあたっては、楽しいと感じられることが重要であると思います。私にとっては、「動くものができる」ということが楽しいことであったので、まずは、動くものを作るということに集中するために、うまく設計できない、綺麗なコードが書けないということは、あまり悩まないようにしました。自分にとって毎日必要なサービスを作るのはお勧め一定以上の年齢からプログラミングを勉強すると、「意味のあるものを、使ってくれるものを作れない」ということに悩むかもしれません。いうのも、自分の持っている技術では大したものは作れないです。いって、よくチュートリアルなどにある「占いアプリ」「神経衰弱アプリ」のようなものを作っても、「なぜいまさらこんなものを」とも思ってしまうと思います。何かを作れたとしても、それを使ってくれる人はいません。Twitterのようなサービスを作ることはできますが、Twitterのように盛り上がるサービスにできるかというと、それはまた別の問題です。大したものを作れない、使ってくれないと、段々と学習することに飽きてきてしまうかもしれません。私にもそういう時期はありました。いった場合におすすめなのが、自分が必要な情報をWebからスクレイピングをするようなサービスを一人で作り、自分のために運用するということです。これがお勧めかというと、ありものの情報を取ってくるわけですから、データを作る必要がありませんので、他の人に使ってもらわないと成り立たないということがありません。あたりまえですが、自分が必要な情報なので、作る意欲が湧いてきやすいと思います。スクレイピングする対象が動的なので、かなりの頻度でツールは壊れます。すると、エラー処理の必要性や運用すること大変さなど、実際のサービス運用に必要なことを学べると思います。巡回・解析機能の実装と21の運用例、がおすすめです。大体必要なことは書いてあります。サポーターズというサービスで、Railsやフロントエンドを書いています。スキル的には非常にしょぼいです。ある程度かけるようになったので、次はコードの質や設計についても学んでいきたいと思います。技術やサービスを通じて、世の中を前進させるようにしてきたいです。今の自分があるのは、偉大な先人たちのおかげだと思っています。いつかは、オープンソースコミュニティにも貢献できるようになっていきたいと思っています。