/note/tech

あるプログラマの若かりし頃の奇行集

要約:

■ 1. 概要

  • プログラマとして成長しようとした時期に、深く考えずに思いつきで奇行に走ることが多かった
  • それらを振り返ると微笑ましく面白いため、いくつかのエピソードを紹介する

■ 2. 各エピソード

  • gzipコマンドのオプション全暗記:
    • Linux入門時、gzipの全オプションを暗記して完全理解しようとした
    • man gzipをプリンタで印刷して研究したが、数日後に飽きて断念した
  • GNU Helloの熟読・写経:
    • GNUのお作法に則ったHello WorldプログラムであるGNU Helloを、オープンソース開発の標準スタイルと信じて写経した
    • 「読みにくく書きにくい」と感じながら完遂したが、しっくりこず全て忘れた
    • 実際には全員がそのスタイルで開発しているという思い込みであった
  • オブジェクト指向への狂信:
    • プログラミング初期にオブジェクト指向を絶対視し、全てをオブジェクト指向で書こうとした
    • プログラムのオブジェクト指向度を異様に気にするなど、手段と目的が逆転した
    • にわか知識は増えたが、プログラミングの腕は向上しなかった
  • マイクロソフトへの強い反感:
    • 聞きかじった知識をもとにマイクロソフトを「悪の帝国」「オープンソースの敵」と見なした
    • Linuxをサポートしないハードウェア・ソフトウェアベンダも批判の対象とした
    • 公の場での発言はなく、電子的な記録は残らなかった
  • Design by Contractへの執着:
    • 「オブジェクト指向入門」に記載された「契約による設計」の概念に傾倒した
    • 事前・事後・不変条件でガチガチに縛った使いづらいクラスを量産した
    • 変な考え方がしばらく定着し、プログラミングの腕は向上しなかった
  • 文芸的プログラミングへの熱狂:
    • Knuthの文芸的プログラミングを知り、全プログラムに適用しようとした
    • うまくいかず、「Knuthにしか実践できない」と悟り断念した
  • 1バイト削減へのこだわり:
    • メモリ・ストレージは貴重との思いから、ループ変数の型を極限まで小さくするなどの「チューニング」を行った
    • 構造体のパッキングにも注力したが、ほぼ意味がなく害悪ですらあった
    • プログラミングの腕は向上せず、変な癖がしばらく抜けなかった

■ 3. まとめ

  • 各エピソードに共通して、手段に囚われ意味のある実践ができず迷走していた
  • 就職後にプロにしごかれることで一人前になれた