ソフトウェアの設計について(フローチャートはいらない編)

 あー、ただいま大学でなぜかCの入門講座みたいな授業を受けているcalcsです。
なぜかっていうか、Cはあんまり得意じゃないからとっただけなんですけどね。

まぁ、それはいいとして。

フローチャート書くんですよ。フローチャート
そういえば夏休みにインターンシップに行ったあるソフトウェアベンダーでも書かされました。実話です。

今時フローチャート

まぁ、私もフローチャートの全てが悪いとは言いませんよ。しかしアレが使用される設計段階で必要なものは大枠を決める、伝えるための記法のはずです。そういう意味ではアレはそんじょそこらのソースコードより抽象度が低いといえるでしょう。

以下、ひたすらフローチャートバッシングです。

それは なぜか。

条件分岐ごときの記述にあれほどの手間をかけるのであれば、正直なところ、直接コードを書いたほうが早い。例外処理までフローチャートで書くというのであれば、例外のリストを箇条書きでまとめると貸しておいた方が有用でしょう(もっと言えば例外機構のある言語で、分かりやすい名前の例外を発生させればよい)。下手にselect文など使おうものなら、フローチャートの横幅が半端ないことになるのは明白です。

他にも問題はありまして、入出力を対象ごと(プリンタか画面かとか)に違う記号を使うのも(今となっては)意味が分からない。そんなものは統一化されたインターフェイスで、ライブラリ化されているべきであって、コードですらその違いを大して意識せずに作るべきものを、なぜそれより抽象化されたレイヤーで頭を悩ませねばならないのか。っていうか、画面に出力してるのか、ファイルに出力してるのか、文脈で一発で分からない機能分割とか、命名とか、そっちの方をどうにかせよ!

まだまだいくよー。

まともにOOPすると、とたんにフローチャートが書けなくなる。マルチスレッドの処理を書いているときに、割り込み処理でも記述しようものなら意味不明にまぁ普通なる。Lispのプログラムをチャート化するなど(この倒錯した表現に注意いただきたい。チャートで考えるやつなど多分いない。大体擬似コードぐらいでみんな考えていると思う)、針の筵を歩くようなものだ。

だいたい、例に挙がっているフローチャートの記号内に(unsigned char english_score)とか(return 0)とか書いてあるんだから(これは授業の話)、どうしようもない。

そこまでやってVPLやCASEツールを使わない理由って何ですか?ってことになる。

じゃ、フローチャートの有用度ってゼロなのか?といわれると・・ビミョーにフローチャートぐらい具体的な抽象度の低い記法が欲しいときもまったく無いことはない気がする。そんなわけでUMLのアクティビティ図があるわけですな。わたしゃUMLに全面賛成って訳ではまったく無いですけど、状況に応じた記法を、というのは大賛成です。

記法は世界を変える有力な手段です。これはまぁ、数学でも文学でも変わりませんな。

あ、ちなみにフローチャートで書くほうがコードを書くより楽な例として、昔ながらの行番号付きBASIC(N-88とか)や、フツーのアセンブラのような構造化のレベルが絶句レベルなら、十分考えられます。っていうか、それらが台頭してた時期に普及しただけじゃないのかなー。とか思ったり