コンピューター関係の仕事をしている人にしか分からなそうな10のこと」の解説や僕の意見を。

まず、コンピューター関係の人(特に、小さい機器を扱っている人や、「マイコン少年」だった人)は、少ない資源(メモリなど)を効率的に使うことが至上命題、あるいは腕の見せどころです。なので、可能な限り無駄を減らそうと常に考えています。

それから、昔は今のようにインターネットブラウザとかGoogleとかスマフォなんて便利な物はなかったので、ちょっとしたことは、覚えておいたり素早く計算できる必要がありました。2のべき乗や数の基数の変換(2⇔10⇔16進数)や文字コードなんてのはその例です。

1. 22を見ると"を、39では9を、20では空白を、FFではファイナルファンタジーでなく255を連想する。

5. 28や210がすぐに分かる。

6. 48歳なのに30歳とか言うことがある。

は、それです。16進数で22は"、39は9、20は空白の文字コード(ASCIIコード)です。また、16進数でFFは255です。

39についての余談: もうほとんどの方は分からないでしょうが、39には別の意味もあります。6809というマイコンの、RTSという、サブルーチン(いろいろな箇所から呼び出される、共通の処理部分)から戻る命令です。6809が好きだった僕は、39を見るといつも思い出します。

それから、昔は普通の電卓では2進数や16進数を計算できなかったので、28や210は考えなくても出て来ます。16進数だって、良く使う値の100は10進数では256とか、10000は65536とか、見ただけで出て来ます。ほとんどパブロフの犬です。ところで、化学の人はアボガドロ数がパッと出て来るのでしょうか?

そして、10進数の48は16進数では30です(これは通じないことが多いので、余り使わない方がいいでしょう。しかも、16進数なので、正しくは「さんじゅう」でなく「さんぜろ」と読むので、余りおもしろくないです)。類似の例としては、4歳にして既に100歳というのもあります。2進数です。

次に、

2. 256とか1024といった数はキリがいいと感じる。

3. 10の倍数より2や16の倍数を好む。

は、無駄を減らすことに関係しています。コンピューターや通信関係などでは、情報はバイト(あるいはオクテット)という8ビット(あるいはその倍数)単位で扱われます。そして、1バイトの数は0~255の値を取れます。それで、256や1024はその単位にぴったり収まる(実際には、値は収まらず、状態の数が収まる)ので「キリがいい」のです。

そして、コンピューターでは、数値は16進数や2進数で格納されるので、10の倍数でなく、2や16の倍数の方が効率良く格納・表現できるのです。例えば、いくつかの物を識別するのに、物の数が8個なら、3ビットでぴったり格納できますが、10個なら4ビット必要になって、しかも、6個分も無駄になります(4ビットは16個まで区別できるので)。

ですが、現在は、小さいコンピューターだってメモリはふんだんにありますし、プログラミングには高級言語を使っているため、常にバイト単位で意図どおりのデータ構造を持つプログラムを作れる訳でもないので、キリがいい値を使うことに余り価値はないと思います。

ただ、通信ではさまざまな区切り(パケットとかフレームと呼ばれるもの)があるため、それに合わせたキリがいいデータ量にする必要があります。そうでないと、通信速度の低下などが起こります。更に、通信の手順(プロトコル)では、バイトやビット単位で情報を格納する位置が決まっているので、その場合は位置を厳密に合わせないと、通信が成り立ちません。たった1ビットずれるだけで駄目になります。

同様に、デバイスを扱う場合には、そのデバイスに合わせた単位で情報をやり取りする必要があるので、やはり、キリがいい値が出て来ます。例えば、USBで接続できる機器は最大127台だそうですが、それもこれです。USBは機器の区別に7ビットを使っているそうで、27は128(127+1)です。余りの1個(おそらく0番)は、ホスト(パソコンなど)を識別するのに空けているのかも知れません。

少し話が逸れますが、この業界の人は、何かの番号は1からでなく0から始めることを好みます。それは、後述するC言語から始まったように思いますが、主に、少しだけメモリ使用量が減るのと、内部の計算が簡単になるからだと思います。僕も昔はそうでしたが、今は特に文句を言われない限り、外部に見えるものは1番からにします。普通の人にはそれが当然なので。

4. 80や8080のような数も好き。

は、インターネットが出来てからの発想です。Webで使われるHTTPという通信プロトコルは、標準で80番というポート(通信の種類を区別する番号)を使うので、80はとても馴染み深い数字です。また、昔良く使われたプロキシは8080番を使っているので、8080も同様に馴染み深いのです。

僕は、いつもお世話になっている80を、次の車のナンバー候補にしたい気がしています(他にも好きな番号はあるのですが)。

7. 1度しかしないことでも自動化したい。自動化するために、却って時間が掛かってもいいし、間違いがあってもいい。

は、業界人の病です。はっきり言ってアホです。コンピューターは基本的には自動処理です。とにかく、人手を介さずに連続して処理することが得意です。それを繰り返すのも得意です。だけど、まともな処理をさせるには準備(プログラミングやテスト)が必要で、その準備の方が時間が掛かることが多いです。しかも、作ったばかりの時は間違いも起こります。それでも、コンピューターがスラスラ動くことは快感なので、こんなおかしなことをします。

僕は、本当に1度しかしないことは手でやります。ただ、結構そういうことは何度かやる羽目になります。また、電卓などを使う場合には、途中で間違えることもあるので、結局検算で何度もやることになりますから、悩ましいところです。

8. CPU使用率やメモリ使用率がフルに近いと、嫌な感じがする。というか、10%未満じゃないと嫌。

CPUやメモリなんて、使うためにあるのですが、フルに使って限界に達してしまうと、予期せぬ(いわゆる「想定外」の)問題が起こります(頻発していたマイナンバーカード発行の障害はそれなのでしょう)。それで自分に被害が出たり、お客さんから文句を言われるのは嫌なので、とにかくなるべく使わないようにしたいのです。

ちなみに、「想定外」というのは、大体において、逃げです。何かの問題が起こることは事前に分かっているのですが、どうなるかや対策を考えるのは面倒で大変だし、それが外れることが多いので、とりあえずそれはない(その条件を発生させない)前提でプログラムやシステムを作っていることが多いです。原子炉のメルトダウンのようなものです。

あと、今のコンピューターは、複数のプログラムが同時に動いているので、もしひとつのプログラムがCPUやメモリを100%使ってしまうと、他のプログラムが動かなくなってしまいます。それで、「CPUを100%使うプログラムなんて糞」という風潮があります。実際、多くの場合には、「まとも」なやり方をすれば、CPUを100%使うことは起こりません(もちろん、円周率の計算のような、純粋な計算は別です)。そして、メモリについても、「メモリを大量に使うプログラムなんて糞」です。

9. 外からは見えないことでも美しくすべきだなどのこだわりがある。

これは、ジョブス的な美学です。気持ちは分かりますが、僕は、プログラムとか製品は芸術作品じゃないんだから、何を使ってどう作ったって、ちゃんと動いて使えればいいと思います。ただ、その場限りで行き当たりばったりで作ると保守性が悪くなって後々苦労するので、そこは考慮する必要があります。

10. 大文字より小文字の方が美しいと思う。

これもつまらない美学、あるいは、思い込みです。C言語が出て来た辺り(1980年代)からの風潮です。とは言え、実際には、アルファベットを使う言語では、すべて大文字の文章というのは良くないとされているようです(怒鳴っているようなイメージでしょうか)。だからといって、小文字ばかりの文章が良い訳ではありません。小文字は、ひらがなのイメージではないでしょうか。

今のプログラミング言語やプログラマーは、どういう訳か大文字を好みません。プログラムはほとんど小文字です。僕は、適度に大文字と小文字を混ぜるべきだと思います(なので、このブログの管理者名は"PiuLento"です)。とは言え、やっぱり全部小文字で書くのに慣れているのと、その言語の流儀があったり、気分でどちらを使うか決めているので、いつも混ぜている訳ではありません(このブログのタイトルは「piu lentoの日々」です。これは、当時の気分の問題と、音楽用語は"piu lento"だったからです)。

最後に、もう一個余談です。日本のプログラマーは、本当に、全角のアルファベットや空白と半角カナを邪悪なものと考えて嫌っています。どちらもない方がいいものです。全角のアルファベットは、見た目は本物のアルファベットに似ているのに、文字コードが違うので、同じ文字として扱うには内部処理が複雑になります。あと、本物と違って、見た目が汚くなるせいもあります。("Beauty"と"Beauty"、どっちが美しいでしょうか?) 半角カナは、見た目が醜いのと、本物のカナと違って、濁点や半濁点が独立の文字になっているので、やっぱり内部処理が複雑になるせいでしょう。なので、「全角のアルファベットや半角カナ文字を使っているプログラムは糞」です。僕も本当に、それらはない方が良かったと思います。正直言って、今からでもいいから、廃止とか使用禁止にして欲しいです。

なんてことを、コンピューター関係者(特にプログラマー)は日夜考えています。これを読まれた方が、少しでもコンピューターの中身とか、コンピューター関係者の理解しがたいおかしな言動の原因や理由に興味を持って下されば、幸いです。

  •   0
  •   2

9件のコメント

  1. JS:

    このあたりのお話は、社長さんは当然理解しているんですよねー。

    •   0
    •   0
  2. naoki:

    半角カナや全角英数は、プログラマではない僕から見ても、美しいとは到底思えません。それでも日本語の文章書くときは全角スペースを使いますが。

    あとハイフンと長音を混同したり、「ティッシュ」の入力方法を知らずに「テイシュー」と書く会社の人間にはうんざりします。亭主かよ。

    •   0
    •   0
  3. PiuLento:

    ●JSさん、理解しているようですが、あるものの番号を0から始めるのに固執したとか、僕より一般人からの乖離がひどそうですw

    •   0
    •   0
  4. PiuLento:

    ●naokiさん、全角スペースですかー。。。横幅の好みでしょうか。まあ、プログラム側で対応すれば問題ないですけどね。実際、おそらく今のオフィス用プログラムは、どちらも空白として処理すると想像します。

    そう、-とーと―は違うので、ちゃんと区別して欲しいです。それにしても、テイシューはひどいっすね。Tを「テー」と読みそうですw そういう人は、ますます世の中から取り残されますね。

    •   0
    •   0
  5. naoki:

    段落の始めの一文字目は全角で字下げしてると読みやすいんですよね。(文章の話です。コードじゃなくて)

    WordPressだとスペース無視されるので、1行余計に空けるようにしてます。

    •   0
    •   0
  6. PiuLento:

    ●なるほど。そこら辺は、書く人が気にしなくてもプログラムがフォーマットを調整して、綺麗に表示できるのが理想ですね。

    以下、プログラマーとしての考えです。

    段落頭の空白は、書く人が入れなくても、そういうフォーマットを定義できればいいです。Wordの書式定義みたいなものです。

    WordPressが(連続した)空白を無視するのも、Wordpressを調整すればいいです。どこをどうすればいいのか、今は出て来ませんが。

    •   0
    •   0
  7. PiuLento:

    ●naokiさん、WordPressで空白を無視しないようにする方法はいくつかあるようです。

    PS Disable Auto Formattingプラグイン: http://www.nishi2002.com/8817.html

    Tiny MCE Advanced: http://diary.karaagetankentai.com/2016/01/10/120852/

    Ultimate TinyMCE: http://waox.main.jp/news/?p=4387

    読んでみると、PS Disable Auto Formattingには互換性の問題があるようです。どの方法が最適なのかは分かりませんが、ご興味があれば、お試しください。

    PS. ただ、本来は、WordPressのスタイルシートで、段落の先頭を1em程度下げるようにするのが、(プログラマー的には)美しいですw これなら、自分で空白を入れなくて済むのです。

    •   0
    •   0
  8. naoki:

    P.Sの内容が最も美しいと感じました。最もシンプルですし。

    •   1
    •   0
  9. PiuLento:

    ●おっしゃるとおりです。

    •   0
    •   0

コメントを書く

名前    

メール 

URL