Programming into a language [プログラマー現役続行]
私自身が1984年に社会人となってC言語を学び始めた時には、動作すれば良いという感じでプログラムを書いていたのではないかと思います。つまり、関数間のデータの受け渡しには、パラメータや戻り値だけでなくグローバル変数を混在させたりとか。
何をヘッダーファイルに入れて、どのヘッダーには何を入れるべきかも気にしていなかったと思います。公開APIとしての定義と実装用定義も混在させてヘッダーファイルに入れていたと思います。C言語で公開APIを強く意識してコーディングするようになったのは、1992年前後だと思います。
書きかけの「API設計の基礎」にそのあたりのことを書いています。C言語ではどのような設計でもできます。しかし、「API設計の基礎」にも書いている「Programming into a language」※が重要です。
※ Steve McConnell著、『コードコンプリート第2版下』(日経BPソフトプレス)の34.4節
簡単に言えば、「Programming into a language」とは、「言語にとらわれずに、行いたい設計を与えられた言語で行う」ということです。たとえば、「公開するAPIには、実装の詳細は一切いれないで、実装の詳細は一切公開しない」というのも行いたい設計の1例です。
使用するプログラミング言語によっては、言語仕様として行いたい設計をサポートしているものもあります。しかし、言語によっては全くサポートしておらず、何らかの工夫が必要となります。C言語では、抽象データ型やオブジェクト指向プログラミングを言語仕様として直接サポートしていません。
様々なプログラミング言語を学ぶことは、言語仕様で直接サポートしている設計手法を学ぶことに役立ちます。その設計手法が有効だと自分自身で納得できれば、その設計手法を言語仕様で直接サポートしていない言語で工夫することになります。
その意味で、C言語だけで(特に組込システム)開発をずっと続けている人の場合、行いたい設計の範囲が非常に狭い場合がありますので注意が必要です。その結果、他の言語がサポートしている設計手法を理解できなかったりします。
何をヘッダーファイルに入れて、どのヘッダーには何を入れるべきかも気にしていなかったと思います。公開APIとしての定義と実装用定義も混在させてヘッダーファイルに入れていたと思います。C言語で公開APIを強く意識してコーディングするようになったのは、1992年前後だと思います。
書きかけの「API設計の基礎」にそのあたりのことを書いています。C言語ではどのような設計でもできます。しかし、「API設計の基礎」にも書いている「Programming into a language」※が重要です。
※ Steve McConnell著、『コードコンプリート第2版下』(日経BPソフトプレス)の34.4節
簡単に言えば、「Programming into a language」とは、「言語にとらわれずに、行いたい設計を与えられた言語で行う」ということです。たとえば、「公開するAPIには、実装の詳細は一切いれないで、実装の詳細は一切公開しない」というのも行いたい設計の1例です。
使用するプログラミング言語によっては、言語仕様として行いたい設計をサポートしているものもあります。しかし、言語によっては全くサポートしておらず、何らかの工夫が必要となります。C言語では、抽象データ型やオブジェクト指向プログラミングを言語仕様として直接サポートしていません。
様々なプログラミング言語を学ぶことは、言語仕様で直接サポートしている設計手法を学ぶことに役立ちます。その設計手法が有効だと自分自身で納得できれば、その設計手法を言語仕様で直接サポートしていない言語で工夫することになります。
その意味で、C言語だけで(特に組込システム)開発をずっと続けている人の場合、行いたい設計の範囲が非常に狭い場合がありますので注意が必要です。その結果、他の言語がサポートしている設計手法を理解できなかったりします。
2013-09-10 07:46
nice!(0)
コメント(0)
トラックバック(0)
コメント 0