2011年1月3日月曜日

職業プログラマに必要な10の知識

このエントリーをはてなブックマークに追加
Pocket

昨年末に、プログラミングは「やる気を出して学習すれば、誰でも習得できる知識」と主張するブログ記事が賛否両論を呼んでいた。反論者は「実用的なレベルまで学習するには、相応の努力が必要な技術」と否定している。つまり、双方で必要とする技量の水準が大きく異なっている。

プログラマには、プログラマ、職業プログラマ、真のプログラマの三種類がいると言われる。誰でもプログラムを組めば、簡単にプログラマになれる。しかし、真のプログラマはハッカーとして賞賛される人々なので、簡単になれない。では、職業プログラマとしては、どの程度のスキルが必要なものだろうか?

最近の受託ソフトウェア開発業の現場のトレンドから、以下に必要知識を10項目をリストしてみた上で、職業プログラマになるのが簡単かを考察してみたい。

1. プログラミング言語

手続き型、オブジェクト指向、関数型、機械語と色々な種類があるが、プログラミング言語は基本だ。用途に応じて使い分けるので、大抵の職業プログラマは複数の言語を利用することができる。

ただし、利用している言語仕様の詳細を把握している人は少ない。また、ライブラリやフレームワークまで範囲を広げると、学習範囲は膨大で、全体像を把握するのは不可能だ。

2. 開発ツール

開発ツールは直感的に使えないものも多く、学習コストがかかる。EclipseやNetBeansなどの統合開発環境(IDE)が一般化しており、以下のツールを別個に使う事は減ったが、機能としては知っておく必要がある。

2.1. エディタ
ソースコードが書けないと始まらない。IDEを使うか、単機能エディタを使うかは好みが分かれるが、メモ帳では効率的な開発は難しい。
2.2. デバッガ
プログラムの挙動を追跡する。異なるハードウェアで用いるリモート・デバッガなどバリエーションもある。
2.3. プロファイラ
プログラムのパフォーマンスを分析する。比較的、利用者は小数だが、徐々に一般的な機能にはなってきているようだ。
2.4. ドキュメント生成システム
最近はJavaDocなどのソースコードと連動したドキュメント生成システムが一般化している。
2.5. バージョン管理システム
開発中もリリース後の保守でも、プログラム作成の履歴管理は重要な要素だ。また、複数のプログラマがいる場合は、ソースコードの共有も編集がかぶったりするので問題になる。

これ以外にも、makeやautoconf、antやMavenなどのビルド・ツールや、InstallStudioのようなインストーラ作成ツールなど、必要に応じて覚えるものは数多い。

3. オペレーティング・システム

一般の人はグラフィカルなインターフェイスに目が行くものだが、それはOSの真の姿ではない。プログラマはOSのより深い部分の知識が求められる。つまりOSの資源管理について知識が必要になる。ここで言う資源はプロセッサやメモリ、ストレージであるが、リンカーや日本語の取り扱い方法などもOSの範疇に入る問題だ。

4. ネットワーク

ルーティングなどの専門的な知識は不要なことが多いが、TCP/IPやhttp等の知識なしでは、要件を満たすアプリケーションを稼動させる事ができないのが現実だ。データベースやバージョン管理システムの設定でも、常にネットワークの知識は必要となる。

5. データベースなどのストレージ

ストレージの知識無しでは、プログラミングはできない。今はファイル・システムだけではなく、リレーショナル型やオブジェクト型、XMLデータベース等の各種データベースの利用が当たり前になっており、これらの知識が無いと何もできない事が多い。最近は大規模分散DBとして、KVSも見直されている。

6. 仕様書や図表

仕様書の図には、DFDER図、UMLの書式が存在する。余り利用されてはいないが、仕様書自体にもIEEE830などの規格がある。これらの書類を読んで理解することが、特に職業プログラマは求められている。

7. アルゴリズムとデータ構造

アルゴリズムやデザイン・パターンを知らないと、我流で遅くて汚いコードになるだけではなく、創意工夫の余地が少なくなる。ただし、オブジェクト指向の普及に従い、年々と計算テクニックの比重が下がり、データ構造、特にGoF23パターンの常識化が進んでいる。

8. テスト技法

プログラムのテストには哲学や手法、ツールがある。契約プログラミングや、ウォークスルーテストや頑強性テスト、テスティング・フレームワークを知らないと、高品質のアプリケーションは作成できない時代になりつつある。

9. 英語運用能力

日本国内で日本人相手に開発を進めていても、仕様書や取扱説明書が英語という事は多々ある。商社や国際企業の人ほど必要ではないが、英語運用能力は高いに越したことは無い。

10. 目的に応じた知識

作成するプログラムには目的があって、その目的に応じた知識が必要になる。例えば勘定系アプリケーションであれば経理の業務知識が必要になるだろうし、ウェブ・アプリケーションであればHTMLなどの知識が必要になる。デバイスドライバであれば、ハードウェアの知識が必要になるだろう。

まとめ

以上のように、職業プログラマに必要な知識は膨大だ。業務でプログラムを作成しながら、随時知識を入れていく必要があり、学習コストは低くは無い。知っているだけではなく応用することも事も求められる。ただし、一つ一つの難易度はそうは高くは無く、完璧である必要もないので、やる気を出して学習すれば大抵の人は職業プログラマになれる。

ところで、ほとんどのソフトハウスでは、少数のできる人が、大多数のできない人をサポートして成り立っていると言われている。できない人同士で補完しあうわけではない。中途半端に知識がある人がブログでプログラマになるのは簡単だと主張すれば、サポートにストレスを感じている職業プログラマの反発を受けるのは必至だ。

最後に、この議論に関連して、一つ思うことがあるので述べておく。これだけ情報が溢れている社会なので、プログラミングに必要な知識は簡単に入手する事ができる。インターネットで検索してもいいし、本屋にいって入門書を購入してもいいだろう。そういう簡単にできる努力をしないで、プログラマになる方法をプログラマに聞いて回る人がいる。そういう人は、プログラマになる事はできない。

0 コメント:

コメントを投稿