最近はプログラマの影響力が大きくなっている
最近のWebシステムの開発の現場で気づいたこと。
システム開発の現場でプログラマの影響力が大きくなっている気がする。
現在は、入社1年目の新人プログラマでも、3ヶ月で軽く数万行のプログラムを書いている。
優秀な人であるのは分かっているが、数年前には信じられない状況だ。
数万行のプログラムの中身は、フレームワークが自動生成したソースやユニットテストが半分以上占める。
でも、それらのプログラムの整合性を取りながら、一つのWebシステムを曲がりなりにも動かしている事実がある。
以前よりも、大規模なシステム開発が少人数のチームで可能になったのは確かな事実だと思う。
その開発環境を支えているものは何か?
3つあると思う。
【1】フレームワークの威力が上がった
RubyならRails、JavaならS2Sruts/S2daoを使えば、DB層からWebのControler/Viewまで、CoCに従って簡単に書くことができる。
特にDB層は、ルールに従えば、自動生成してくれる。
フレームワークがプログラムの論理的整合性を大部分吸収している。
だから、ルールさえ覚えれば、業務ロジックに専念すればいい。
更に、ユニットテストもフレームワークが提供してくれている。
RailsもSeasarも、ユニットテスト用のディレクトリが既に確保されている。
特にDB層や共通ライブラリは、ユニットテストをプログラミングすれば、最低限の品質は確保できる。
仕様変更があっても、ユニットテストのプログラムがあるから、回帰テストで以前の機能が正しく動いていることも確認できる。
ユニットテストの重要性は、回帰テストでデグレを防止できることだけでなく、JDKやRuby、Tomcat、RDBのバージョンUpのような開発環境そのものが変わっても正しく動くことを保障できる所にあると思う。
システムのハード面のスケールアップにも、ユニットテストが大きな威力を持つ。
【2】無料で使いやすい開発環境の普及
JavaならEclipse、Rubyならemacsやvi、最近ならNetBeansで開発するのが普通だろう。
昔なら、MSのVisualStudio、IBMのVisualAge for Javaのような統合開発環境は高価で、誰もが自由に扱える存在ではなかった。
また、バージョン管理システムも、MSのVSSぐらいしか使い物にならなかった。
でも、JavaではEclipseが2002年以降急激に普及してから、山のようにオープンソースライブラリが増えて、より開発しやすくなった。
バージョン管理システムはSubversion、ビルドツールはAntやMaven、WebアプリケーションサーバーもTomcatやJBossのように、色んなツールが無料で、しかもかなり品質もいい。
ノウハウもネット上にいくらでも転がっている。
一度、開発環境を整えることができれば、新人のプログラマでも、環境の細かな使い勝手を考えずに、プログラミングだけに専念できる。
【3】アジャイルな開発プロセスの普及
Webシステム開発なら、常時ビルド環境はもはや当たり前。
だからこそ、いつでも検証できるし、頻繁なリリースも可能。
テスト駆動開発、リファクタリングというアジャイル開発の基本テクニックも、Eclipseを使ううちに自然に身に付く。
テストを通すようにプログラムを書く帽子、そして、テストが通ったプログラムをリファクタリングで綺麗にする帽子を切り替えることも、数万行近いプログラムを書くうちに、さすがに自然に分かってくる。
また、プロジェクト管理もTracやRedMineのようなWebベースのツールを使うプロジェクトが多くなった。
この部分はまだ洗練されていないと個人的に思うが、少なくとも、カレンダーで開発スケジュールを全員に周知させたり、BTSのようにバグ報告フローを管理するツールはすごく有効。
また、コミットしたソース量を毎晩レポートしてくれるツールがあるおかげで、誰がどれくらい頑張っているか分かる。
今回、数万行も書いている事実は、statSVNのおかげだ。
【今、問われる問題点とは?】
そんな開発スタイルで問われる問題点は、プログラマとしての基本的な技術力だと思う。
例えば、、
・可読性は高いか?
クラスやメソッド、変数の名前が分かりやすいか?
きちんとインデントしているか?
無駄なコメントアウトしたソースがないか?
JavaDocをきちんと書いているか?
・後から機能追加しやすいように保守性を気にしているか?
きちんと論理的に分割できているか?
無駄なフラグは多くないか?
IF文が3個以上ネストしていないか?
無駄なローカル変数が多くないか?
・きちんとユニットテストを書いているか?
カバレッジは100%ですか?
テストしやすいソースを書いてますか?
などなど。
つまり、保守性や可読性の高いプログラムを意識して書いているか?
一度、本番稼動いているプログラムは、たとえ可読性が悪くとも、たとえユニットテストやリファクタリングの技術があっても、修正するのはすごく難しい。
簡単にプログラムが書けてしまう時代だからこそ、プログラミングの基本スキルそのものが問われているのだと思う。
| 固定リンク
「プログラミング」カテゴリの記事
- Javaのモジュールシステムの考え方をまとめてみた(2022.10.21)
- Javaのモジュールシステムは複雑性をより増している(2022.09.10)
- Javaはなぜ関数型言語になろうとしているのか(2022.09.02)
- Javaのラムダ式の考え方(2022.08.10)
- Javaはオブジェクト指向言語ではなく関数型言語だった~「[増補改訂]関数プログラミング実践入門」はお勧めの本だ(2022.08.06)
コメント