最近、本のおかげで学生のフォロアーさんが増えてきたので、彼らに向けてプログラマが持っていたほうがいいスキルを「躾」として書いてみようと思います。
ここで扱うのは言語ではなく、もう少し一般的なスキルを主にツールの面からみてみます。なお、ここでの「プログラマ」の定義は、一般的なSIerでの「PG」ではなく、「自分でソフトウェアの構造を考えて、実装できる」クリエイティブなプログラマとします。
僕が考えている、プログラマとしての躾は次の3つです。それぞれの具体的なツール、利用することでのメリットを紹介します。
- バージョン管理
- タスク管理
- 自動化されたテスト
バージョン管理
プログラムのコードやドキュメントなど、プロジェクトに必要な電子データを管理するツール。追加、削除、変更などの履歴が残るため、状況によって古いバージョンに差し戻したり、実験的なコードに分岐して作業したりといったことが簡単にできるようになる。
- ツール例
- Subversion
- Git
- Mercurial
- Bazaar
- バージョン管理を行うメリット
タスク管理
プロジェクトを進める上でのタスク(やること)をまとめて一覧できるツール。タスクの進捗や、期限を設定することで、現状の把握や、予定を立てる際の材料となる。
自動化されたテスト
作成したソフトウェアをテストするツール。テストを適切に行うことで、ソフトウェアの品質を作りこむことができる
統合的なツール、サービス
上記(主にバージョン管理、タスク管理)の統合的なツール、サービスとして以下のツールがあります。これらは、バージョン管理と、タスク管理を統合して利用できるので、実業務でも利用しています。
本稿の画面イメージに利用しているのはgithubで管理している「KINECTセンサープログラミング」のサンプルプログラムです。本書のフィードバックやサンプルコードはすべてgithubで対応しています。
- TracLightning,Kanon
- Trac+Subversion,Git,Mercurial,Bazaar
- BItNami:Redmine
- Visual Studio Team Foundation Server
- Microsft 独自のバージョン管理とタスク管理ツール
- github
- Issueリスト+Git
- bitbucket
- Issueリスト+Mercurial
- SourceForge.jp
- Issueリスト+Subversion,Git,Mercurial,Bazaar
まとめ
僕自身、仕事を始めた時は、これらのツールをまったく使わずに、業務でコードを書いていました。そのときはいわゆるデスマーチが頻発し、体調を悪くするメンバーも大勢いました。
数年前にTracやSubversionと出会い、これらを自分たちなりに運用することで、デスマーチは改善され、ここ数年は残業して仕事することは数えるほどになっています。
ツールはあくまでも道具なので、導入しただけでは効果が薄いですが、適切に運用することで大きな改善が期待できます。しかしながら、ここで挙げたツールは、導入しただけでも一定の効果が挙げられると思っていますので、もしまだ使ったことがなければ、一度導入してみることをオススメします。
もしツールの運用などで詰まってしまった場合には、手助けすることもできると思いますので、お気軽にどうぞ
最後に、今回あえて「躾」としたのは、この漢字が「美しい身」と書くからです。ツールとその使い方を身につけて、「美しい身」のプログラマが増えることを願っています。
おまけ・マネージャ(≠PM)のための躾
要望があれば書きますw
現時点ではこれくらい
- 開発プロセス
- 継続的インテグレーション(CI)
僕のソフトウェア・エンジニアとしての、プロジェクトを進めるためのツール・スキルセットの全体像はこんな感じです