ブログ@kaorun55

HoloLensやKinectなどのDepthセンサーを中心に書いています。

心と体とコードを健康にする、プログラマのための3つの躾

最近、本のおかげで学生のフォロアーさんが増えてきたので、彼らに向けてプログラマが持っていたほうがいいスキルを「躾」として書いてみようと思います。
ここで扱うのは言語ではなく、もう少し一般的なスキルを主にツールの面からみてみます。なお、ここでの「プログラマ」の定義は、一般的なSIerでの「PG」ではなく、「自分でソフトウェアの構造を考えて、実装できる」クリエイティブなプログラマとします。
僕が考えている、プログラマとしての躾は次の3つです。それぞれの具体的なツール、利用することでのメリットを紹介します。

  1. バージョン管理
  2. タスク管理
  3. 自動化されたテスト

バージョン管理

プログラムのコードやドキュメントなど、プロジェクトに必要な電子データを管理するツール。追加、削除、変更などの履歴が残るため、状況によって古いバージョンに差し戻したり、実験的なコードに分岐して作業したりといったことが簡単にできるようになる。

  • ツール
  • バージョン管理を行うメリット
    • 常に最新バージョンが一つであることでの、心理的な安心感
    • 新規に書いたコード、変更したコードが、何を目的にして書かれたものなのかが分かる(コミットメッセージ)ことでの、コードの健全性
    • もし、動作しなくなっても元に戻すことができることでの、心理的な安心感

タスク管理

プロジェクトを進める上でのタスク(やること)をまとめて一覧できるツール。タスクの進捗や、期限を設定することで、現状の把握や、予定を立てる際の材料となる。

  • ツール
  • タスク管理を行うメリット
    • タスクの残りが分かるので、ゴールが明確になることでの、心理的な安心感
    • バージョン管理と連携することで、該当タスクがどのようにコードと関連し、成長しているかが分かる
    • マイルストーンと連携することで、タイムボックス化され、期限までにタスクを進めるモチベーションになる

自動化されたテスト

作成したソフトウェアをテストするツール。テストを適切に行うことで、ソフトウェアの品質を作りこむことができる

  • ツール
  • 自動化されたテストを行うメリット
    • 常にテストされたコードが手元にあることで、自分の書いたコードに対して自信が持てる
    • コードが確実に動作する保証があることで、心理的な安心感と、コードの健全性が保てる
    • 変更したコードに対しても、いわゆるデグレ、先祖がえりが起きていないことを確認できる(回帰テスト)ことでの、心理的な安心感

統合的なツール、サービス

上記(主にバージョン管理、タスク管理)の統合的なツール、サービスとして以下のツールがあります。これらは、バージョン管理と、タスク管理を統合して利用できるので、実業務でも利用しています。
本稿の画面イメージに利用しているのはgithubで管理している「KINECTセンサープログラミング」のサンプルプログラムです。本書のフィードバックやサンプルコードはすべてgithubで対応しています。

まとめ

僕自身、仕事を始めた時は、これらのツールをまったく使わずに、業務でコードを書いていました。そのときはいわゆるデスマーチが頻発し、体調を悪くするメンバーも大勢いました。
数年前にTracSubversionと出会い、これらを自分たちなりに運用することで、デスマーチは改善され、ここ数年は残業して仕事することは数えるほどになっています。


ツールはあくまでも道具なので、導入しただけでは効果が薄いですが、適切に運用することで大きな改善が期待できます。しかしながら、ここで挙げたツールは、導入しただけでも一定の効果が挙げられると思っていますので、もしまだ使ったことがなければ、一度導入してみることをオススメします。


もしツールの運用などで詰まってしまった場合には、手助けすることもできると思いますので、お気軽にどうぞ


最後に、今回あえて「躾」としたのは、この漢字が「美しい身」と書くからです。ツールとその使い方を身につけて、「美しい身」のプログラマが増えることを願っています。

おまけ・マネージャ(≠PM)のための躾

要望があれば書きますw
現時点ではこれくらい


僕のソフトウェア・エンジニアとしての、プロジェクトを進めるためのツール・スキルセットの全体像はこんな感じです