エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

プログラミング

カプセル化と関数と名前づけ

註:ここでの関数はC言語の関数のことです。「オブジェクト指向のこころ」を読みながら。同書でカプセル化を「あらゆる種類の隠蔽」と説明しています。それをふまえて。仕事の現場で、最近思ったのが「関数ってのもカプセル化なんだな」と。 手続きのまとまり…

複数の言語で書く意義

わたしの場合。いくつかの言語でFizzBuzzを書いてみているのは、知的好奇心という側面と(この面がたしかに大きい)以外に、特定のやり方に捕われないようにするための練習だと思っています。 言語の特徴は同時に思考を制限する部分もあるわけで、同じ言語ばか…

ポリノミアルカウンタ

以前、仕事でIC設計に関わった時に使ったカウンタ。ふと思い出したので、記録。そのカウンタは次のような感じで定義されるものです。 Kビットからなる値xの各ビットをx[i]、つまりx=(x[K-1], x[K-2],...,x[0])として、 数列x0,x1,...,xnを次のように定義する…

名前、大事!

今日はコードレビュー。言語はC++。 関数の説明を求める。いろんなことをやっている関数。関数名はやっていることを表していますか?とたずねると、悩まれてしまった。コードレビューとしては失格だった−−コードをレビューしなくはいけないのに、書いた人の方…

オブジェクト指向へ跳躍

C++を使ってソフトウェアの開発をしているわけですが。「オブジェクト指向っぽくないな」という設計に出会います。 オブジェクト指向は普通の技術者が普通に使う普通の技術だと、今では思っているのですが、それとて学ばずにその技術が身に付くわけもなく、…

あえて組み込みでC++を使うというのならば

必要なのは、標準となるライブラリだと思います。リソースが足りないことを言い訳にしているのか、どうも組み込みの環境のライブラリは貧相な気がしてなりません。デバイスを操作するためのビット演算やビット列の分割結合、タスク間通信のためのシリアライ…

「マジックナンバー」はなにか?

プログラマとしては、今更な話題ですが。プログラミングの基礎として、マジックナンバーを使うのをよそうというのがあります。 for(int i = 0; i < 10; ++i) // `10'ってなに? ちゃんと名前をつけようと。 static const int ArrayCount = 10; // ... for(int…

いまさらICFP Programming Contest

いまさらながらICFP Programming Contestに手を付けてみたところ。まるまる半日がかりで仮想マシンを書いてみたものの、ひとまず動けばいいと、いたって低機能、必要最小限。夜中になってシステムが動きだし、その中に課題があるのだけれども。階層の違う思…

パーサライブラリを作ってみた。

Boost.spiritに触発されて、自分でもパーサライブラリを作ってみました。サブセットの模倣みたいなものですが、シンプルな割には機能するものができたのではないかと自己満足。2006/04/12 追記 再帰構文に対応できないことに気がつきました。それと、一部よ…

日本語を日本語に翻訳する

「パターン指向リファクタリング入門」を読んでいます。一つ一つの事柄を読んでいくと、普段わたしがソフトウェア開発をする中で、よく感じることが裏付けを持って書かれてる、と感じます。本家「リファクタリング」を読んだときもそうだったのですが、自分…

「メンテナンス容易性」という品質

一緒に仕事をしているプログラマに、昨日また、おおよそプログラマであれば考慮しなければならない「メンテナンス容易性(たとえばここ)」を説いて、そして説得に失敗しました。一ヶ月以上ことあるごとに説いてきましたが、連敗中。我慢強くないわたしは、…

いつオブジェクト指向を学ぶか

仕事でソフトウェア開発をするのでしたら、開発が始まる前に学習しておくのが本来でしょう。実際は…ある意味予想通り…開発の現場で学習する、という事態になっています。わたしは、当然のように、この事態は間違っていると信じています。しかし、これがエン…

「設計する」こと・余談

「設計する」ことと「設計書を書くこと」を取り違えていると、書きましたが、設計書を書くことについても「ワープロで清書すること」と思っている人がいるようです。それはそれとして。わたしはワープロが好きではありません。ひとくくりにして扱ってしまう…

「繰り返さない」再び

「繰り返さない」という話を先日書きました。 実際、ソフトウェアを設計していると、機能として、繰り返しを必要とすることに出くわすことはあまりないように感じます。むしろ言語などの制約から、必要な機能を繰り返しで実現しているだけのほうが多いのでは…

なにをやるか、どうやるか

設計や実装でも、なにをやるかとどうやるかの違いを、つまりは目的と手段を、きちんと意識する必要があると思います。言葉にするとあたりまえなのですが、書かれたコードを見ると、そうでもないようです。なにをやるかを置いてけぼりにしているコードが、少…

「繰り返さない」「分岐しない」「処理を書かないしない」

構造化プログラミングに喧嘩を売っているようなタイトルになってしまいました。 よりよいソフトウェアを作るためには何が必要か、とたびたび考えます。特に「堅い」ソフトウェアを作ることに興味があります。わたしが考える「堅い」とは、堅牢という意味で、…