studies

いろいろ勉強用備忘録的な感じ

ぐるぐるとまだ回る君の影 どこにも行けずに春が来る

社会人になって一年が経過した。

同時に、プログラマになって一年だ。

今自分の職業について思っていることを徒然に書いてみる。

プログラマはプログラムを作る人

プログラムとは予定表の意味だ。
だから、プログラマとは予定表を作る人に他ならない。

プログラマナチュラリスト

予定表を作るためにはナチュラリストである必要がある。
といっても、別に山や野原に出る必要はない。
あるプログラムの振る舞いを決めるうえで、「何が自然か」ということを知っていなければならない、ということだ。
これはたとえば、数列が与えられたとき、そのルールを見抜く(自ら設定する)ような力だ。
有限数列が与えられて、自分の好きな数値をそのあとにもう一項加えてよいのなら、どうするだろうか。
自分の誕生日を入れる?
それとも、好きな人の誕生日だろうか?
しかし、プログラマなら、次の項は何が自然かを必死になって考えるはずだ。

プログラマアルゴリズムアプリケータか、アルゴリズムエンジニア

プログラマが作る予定表は誰でも意味が分かるように書かれている必要があるので、必然的に何らかのアルゴリズムがそこには記述されることになる。
もし幸いにも予定表の目指している「目的」と同じモノに向かって既に歩いた人がいるなら、プログラマはその人のレガシーを用いて予定表を作る。
その場合はプログラマアルゴリズムアプリケータだ。
しかしさらに幸いなことに、人類にとっての大きな一歩を踏み出すことを余儀なくされるのであれば、プログラマアルゴリズムエンジニアだ。

プログラマトランスレータ

プログラマが作り上げる予定表は、残念ながら最終的には「誰か」に渡さなければならない。
そうしないとだれもその予定表の存在を認識できない。
認識できないものは存在しないので、そうするしかないのだ(プラグマティズムですよ)。
実のところプログラマはまず最初に、内言語で予定表を作り上げる。

ここをああして、あれをこうして、そこでそうすれば、目的地にたどり着きそう…。

それから、この内言語を外言語に翻訳するのだ。
外言語はプログラミング言語が一般的だが、フローチャートだったりUMLだったりすることもある。
もしかしたら、自然言語かもしれないし、ハードウェア的な実装かもしれない。
このとき、プログラマトランスレータだ。

システムはプログラムを必ず含む

実は社会人になった当初はプログラマではなくSEになったと思っていた。
今では自分はプログラマだと思っている。
というか、「私はSEです」という人をかなり胡散臭いと思っている。

しかし、システムという言葉が周りでよく使われているのは確かだ。
システムという言葉は難しい。
今、私なりに理解しているシステムとは、こうだ。
複数の構成物が一つの目的に向かって、ある特定のやり方で協調して働いているような構造体。
この「ある特定のやり方」というのは予定表で書けるところだ。
つまり、システムは必ずプログラムを含む。

エンジニアリングはアーキテクチャとインプリメンテーションに分けられる

グラデーションはあるが、プラトンイデア説のように、設計と実装に分けるのはとても分かりやすい。
たとえば、プログラミング言語イデア界の住人だ。
私たちは直接見ることはできない。
言語仕様書はこのイデア界の住人を理性によって描写したものだ。
プログラミング言語のインプリメンテーション=現実界の住人は、コンパイラだ。
私たちは通常コンパイラを通してプログラミング言語を見ることになる。