コンピュータのソフトウエアは建物を作ることと似ています。様々な材料を、有機的に組合わせるばかりでなく、それぞれの材料の特性を考えた設計を行い、全体を矛盾なく組み上げることが必要だからです。
ところで、一般的に考えられている以上に、プログラム言語は原始的なものです。コンピュータに向かって訳のわからない作業をしているプログラマーの作業内容は、とても難しそうに見えますが、それほど高度な知識が必要なものではありません。コンピュータに、どのような作業を行うかについて与える命令の種類がさほど多いわけではないのです。
例えて言うと、ノミとカンナとノコギリとカナヅチで家を建てているようなものです。一つ一つの作業は単純作業に過ぎず、最低限の品質を確保するための訓練期間もそれほど多く必要とはしません。但しそれだからこそ、大工の職人のように、道具の使い方の熟練度によって仕上がりが大きく変わってきます。宮大工や船大工をはじめとする芸術作品のような職人芸がある一方で、ノミで木を切ったような雑なプログラムもあります。つまり、プログラムの仕上がりは、そのプログラマーの勘と経験に左右されるのです。
同じものを作るのに全く違う手順が存在し、他人のプログラムを解読することは非常に困難です。プログラマーの場合使用するプログラム言語が変わることもあります。しかも手順が大幅に改善されるのではなく、単に使い方が変わるのです。プログラム言語が変わると新しく必要となる知識がとても多く覚えるのも大変です。
又、プログラム作成のためのにコンピュータの環境を整えるのにも、多くの時間が必要ですし、その時チョットした知識があるかないかで、時間が大幅に変わります。動くようにするまでが大変で、実際のプログラム作業に入る前に疲れきってしまいます。
マニュアルも膨大で全部読んでから作業を開始する人はめずらしく、経験者から必要な部分だけを教えてもらって、ともかく作るという事になりがちです。時にはマニュアルに書いてない事があり裏技と呼ばれる操作方法を発見しないとうまくいかない場合もあります。マニュアル自体が嘘だったという笑えない場合もあります。
これらのことが、プログラマー社会の独特の価値観や、雰囲気を生んでいることは後でふれます。