2011年3月23日水曜日

新人さんに覚えてもらいたい事 その1【プログラミング】

今までやってた仕事を新人にもやらせなさいとの事なので、必要な事をあげてみます。
ついでに、このまま新人さんに読んでもらう為の文章にします。

できるだけ自分の言葉で書いたつもりですが、僕が下で紹介している本から多大な影響を受けており、同じような事を書いているかもしれません。まあそれも僕自身の復習という事でご容赦くださいw


うちは基本的にはRubyを主に使っているのでRubyの構文の知識は最低限必要です。
ただ、うちの場合、プログラミングだけでなく仕様案作成、設計、バージョン管理からWebサーバだのデータベースだののソフトウエアの選定からセットアップ、ネットワーク設計、そしてサーバへのデプロイ等、基本丸投げになるので(笑 それらの知識も必要になります。


構文
社内では主にRubyを使っています。ですのでRubyの基礎的な構文の知識は必要です。
僕はプログラミング自体初心者の時に下の2冊を常に手元に持っていました。

最初の一冊としては「Ruby プログラミング入門」がオススメです。初心者にもわかりやすく丁寧に解説してありますし、実践的で読みながら直ぐにプログラムを作ってみる事ができます。


Ruby Way」はもう少し詳しく解説してくれている本です。「Ruby プログラミング入門」では物足りない場合はこちらも購入を検討されると良いでしょう。こちらもとてもわかりやすく実践的な内容だと思います。


もちろん上記以外にも良い書籍があります。自分に合った書籍を常に手元に持っておきながら、まずは自分の手でプログラムを組んでみるのが習得への早道だと思います。

Hellow World はお約束として、その後はとりあえず以下の点を学ぶと簡単なプログラムが組めるのではないかと思います。


Step
  1. 条件分岐(if文)
  2. イテレータ(配列に対する"each"によるループ処理等)
  3. 文字列(String)の扱い。+による連結された文字列の生成やsubによる置換等
  4. 数値演算
  5. 配列
  6. ハッシュ
  7. クラスとメソッドの定義
  8. ファイルへの書き出し、ファイルからの読み込み


もちろんまだまだ覚える事は沢山ありますが、まずは自分の手を動かしてコードを書く事だと思います。本を見てると簡単そうに見える事が実際書いてみると思った以上にうまくいかないことがあります。その理由がわかったとき、一歩成長したと言えるのだと思います。
それを繰り返しているうちにだんだんと自由に思った通りの動きをするプログラムを組めるようになってきます。

設計
ただ、前述のように丸投げになって誰も指示してくれないので、設計もきちんとしておく必要があります。ポリモーフィズムを応用したりシングルトンなインスタンスを検討するなど基本的な設計については最初から考えてコーディングに取りかからねばなりません。

またWebサービスであれば(X)HTMLやCSS、Javascriptも当然必要になってきます。これらも単に

(σ´∀`)σ動いた動いた♪

的な知識ではなく、どう動かすか、つまり設計を自分なりに考えてとりかかる必要があります。そうしないと後でバグだらけになって手に負えないものになったり修正に時間のかかるものになってしまうからです。

この点について、コーディングにかかる前に新人さんには「どのような設計で作ろうと考えているか」を話してもらうと良いかもしれません。その際にテストフレームワークは何を使うか、データベースの設計はどうするか、Railsを使うかMerbやSinatraも検討するか、しないのならそれは何故か。そして最終的なリリースをいつにするかなど、完全に答えられなくても自分の考えを述べる事で技術的経験的に足りない部分が早い段階で浮き彫りになるかもしれません。

ソフトウエアの設計についてはこの業界では読み継がれている本があります。できれば以下の本には目を通しておいて欲しいです。
特に「リファクタリング:Rubyエディション」と「達人プログラマー」は必ず読んでください。





Step

  1. 上記のうち、少なくとも2冊を自費で購入して読んでください。自費で購入することで、自分に対する投資感覚を身につける事につながります。
  2. 上記以外で良さそうな書籍を自分で探して読んでてください。


トレーニング
プログラミングを仕事をはじめて最初のほうは必ずなにかしらの失敗をします(いや、今でも色々と失敗をしますがw)。ある程度できてきた頃に、あちこちに気に入らない所がでてきて、全部作り直したくなったりもします。そうならない為にはどうすれば良いのでしょうか。
上記の本を読む事で予備知識や、陥りがちな失敗を知る事ができ、それによって事前に対策を打つ事ができますが、それはあくまで机上の知識です。やはり実践に勝るトレーニングはありません。

まずは自分の普段の仕事を、「小さなプログラム」を作る事で自動化しましょう。普段の仕事の中には自分でも気づかずに実行している無駄な仕事があると思います。

もし、その作業が「手でやる場合」と「自動化するプログラムを作る場合」とで同じ時間がかかるならプログラムを組んで自動化しましょう。かりに2、3倍かかったとしてもやはりプログラムを組んで自動化するべきです。そうすれば明日からはその作業にかかる時間は飛躍的に短くできます。

しかし、それ以上に重要なのは「自分が日々使うプログラムを自分で作り保守する」ことにより、ある面では素晴らしい本を読む以上の経験が得られる事です。

ユーザが自分なのですからリスクは最小です(データベースから全ユーザを削除したりしなければw)。そして最終ユーザからのフィードバックが即座に得られます(最終ユーザが自分なのですから当然ですがw)バグはもちろん、使いにくいと感じた所もどんどん直していきましょう。時間がなかったりすると作り手故に知っている”回避方法”を使ってバグのあるままに使い続ける事もできると思いますが、ずっと微妙な「嫌な気持ち」を感じながら使う事になると思います。嫌な気持ちになったらすぐに直しましょう。そうすると今度は逆に少し幸せな気持ちになれるはず...と思われますw

僕も今まで小さなスクリプトを幾つも作ってきました。例えば複数のサーバに同じアプリケーションをデプロイする際にコマンド一つで、最新のソースのチェックアウトから再起動までを自動的にやってくれるようにしたり、同じくコマンドひとつでテキストファイルに登録された全サーバにpingを打ったりポートオープンしてサービスの稼働状況を監視したりするプログラムです。
あるいはもっと地味に、単に特定のサーバへSSHトンネルを張るコマンドを1行書いただけのbashスクリプトだったり。

小さなプログラムなら失敗しても直ぐに作り直せます。失敗はできるだけ他人に影響の無い範囲で経験しておいて、その教訓を他の人が使うプログラムの開発に活かすように心がけましょう。

Step

  1. 自分の普段の仕事、定期的に行っている仕事を自動化するプログラムを作りましょう。
  2. 作ったプログラムを実際の仕事の中で使いましょう。不具合や使いにくい箇所を見つけて修正しましょう。