環境に依存しない技術者へ

「CODE COMPLETE 第2版 上 完全なプログラミングを目指して」という書籍の4.3章で、以下の2つのプログラミングスタイルが紹介されている。

[A] ~言語の「中へ」のプログラミング~
問題を解決する方法を決めてから、プログラミング言語やツールが提供する機能を使って、実現する。

[B] ~言語の「中で」のプログラミング~
使用するプログラミング言語やツールが”直接”提供する機能の範囲内で、問題を解決する。

 

■いったい、両者にどのような違いがあるのか

(書籍の中でも例えて説明しているが、私なりにも例えさせてくれ)
例えば、「動的に個数が変わり、順序性が必要で、間にデータを挿入したり、削除したり、順番を入れ替えるデータ」を扱う機能を、C言語で実現しなければならないとする。
門外漢向けにさらに例えれば、『ノルマが厳しく離職率の高い不動産投資会社の、営業員別・月間の営業成績順位表』としよう。

[A]の技術者ならば、以下のように実現するだろう。
「このようなデータを扱うのに最適なのは、リスト構造だ。
しかし、C言語にはリスト構造を扱うデータ型が用意されていない。
構造体・ポインタを使い、リスト構造を実現したライブラリを自作してから、機能を実装しよう。」

ノルマが厳しく離職率の高い不動産投資会社で例えると、
『大きなホワイトボードに、上から営業成績順に、全社員分の名前を書いたマグネットを貼り付けている。
月が変われば、上から営業成績順に、マグネットを並び替える。
トップの営業員のマグネットは、デコレーションシールでかわいく縁取りしてあげよう。
最下位の営業員のマグネットなんか、トイレの配水管に貼り付けとけば良い。
入社した社員からは、マグネット代の200円を徴収しよう。
退社する社員には、手土産に、思い出の詰まったマグネットを渡してあげよう。(もちろん、マグネット代の250円は徴収だ)』

 

[B]の技術者ならば、こうするかな。
「C言語では、データの集合は配列じゃないと扱えないと信じきっている。
そして、データ数が増減するたびに、配列をfree・reallocする。
並び替えも、もちろん自前のバブルソートだ!」
⇒これだと、以下のような問題を作りこむ可能性が増す。
・性能が出ない
・メモリリークのバグを作りこんでしまう

ノルマが厳しく離職率の高い不動産投資会社で例えると、
『営業成績の悪い社員が、良い社員より前の社員番号なのはありえない!
営業成績順に、社員番号を振ろう。
名刺や社員証に社員番号(つまりは売上順位)を刻印し、自分の置かれている立場を、常に意識させよう。(もちろん、社員のためを思ってだ)
月が変われば、社員番号を振り直す必要が出てくる。
面倒だ、この際、会社を解散し、立ち上げ直すのが手っ取り早い。
そうそう、退社する社員からは、無駄になった名刺代を徴収だ。』

 

[A]と[B]、どちらの『ノルマが厳しく離職率の高い不動産投資会社』で働きたいか、明白だ。

 

■さらに言うと

[A]の技術者のように普遍的な知識を持ち合わせていれば、楽して得することができる。
経験のないプログラミング言語での開発に直面した際、基本的な文法を勉強すれば、後はライブラリをヘルプで調べながら、”ある程度”は対応できるだろう。

 

さらに言うと、普遍的な知識を持っていなければ、言語が提供する機能を使いこなせない場合が多い。
思いつく解決策の選択肢が少なく、入門書で紹介されている機能での解決に終始してしまう。
[A]の技術者のように、
「いまどきの言語に、動的配列は用意されているよね。
ウン十年前に登場したC++でさえ、STLでvectorが用意されている。
C#だったら、動的配列ではないけど、似たような機能を有するListを使おう。
Javaなら…何があったか忘れちゃったが、何かあるはずだ。(○racleが有償オプションにしていなければ)」
とはならないだろう。

 

■環境に依存しない技術者になるために

変化に強い普遍的な知識を持ち合わせた技術者になるため…というより、お作法的な内容が色濃いが、以下の書籍をおすすめする。(内容はうろ覚えですいません)

・リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Dustin Boswell, Trevor Foucher)
言語に依存しない、基本的なプログラミングのお作法。
本書の内容を忠実に守れば、コードの保守性が高くなる。
堅苦しくなく、大変読みやすい。
薄い本なので、トイレや鞄の中に入れておけばよい。

・CODE COMPLETE 第2版 完全なプログラミングを目指して(Steve McConnell)
コンストラクション(詳細設計~実装~単体テスト)の作法を網羅している。
上下巻構成で分厚い。

・新装版 リファクタリング―既存のコードを安全に改善する― (Martin Fowler)
既存のコードを、機能はそのままに、改善していく手法。
もちろん、新規コード実装時にも役立つ。

 

何かで読んだが、平均的な技術者は、年に1冊も参考書を読んでいないそうだ。
2年がかりでもよいので、是非、1冊、手にとって見て欲しい。

お問い合わせ

ATACKS(アタックス)、Quickx(クイックス)、生産管理システム、セキュリティー対策はもちろん、システム関係のご相談・お問い合わせはお気軽にどうぞ!

株式会社タダノシステムズ
電話 087-839-5545
受付時間 8:30-17:00 [ 土・日・祝日除く ]