読者です 読者をやめる 読者になる 読者になる

futoase

よろしくお願いします。

僕のプログラミングの道すじ

雑記 人生

波がキテるらしい

これ見てたら、今まで生きてたことを振り替えてみたくなったので自分語りエントリを書く。

僕にとってのプログラミング

プログラミングについて、プログラマーになる前のことを思い出してみた。
小学時代、中学時代、高校時代。その後。

小学時代

小学時代は家にPCが無く、小学校にもPCがない状態だった。
けどいとこがPCを持っていたのでいとこのところに遊びにいく度に
毎度毎度Windows 3.1をいじっていた。
富士通のPCだった。

中学時代

中学時代はまだ家にPCがなく、学校にあったPCというかPC-9821でプログラミングしていた。
N88-BASICで... Windows機が無く、ブートしてもN88-BASICが起動するだけで何もできん。
FDに対してファイルを保存するには...どうすれば...
なんか悩んでたけどプログラミングにものすごい興味がある後輩に色々と教えてもらった。
LINEやCIRCLEを使ったりしてメガデモのしょぼいやつを書いたりしていた。
矩形が色とりどりの色を描画して、BEEP命令の間にFOR + SLEEPによる割り込みを利用して
圧電ブザーの音階を変えてみたりして楽しかった。

家では厳密なプログラミングじゃないけど、
デザエモン(SFC)を買って家でシューティングゲームを作ってた。
キャラクターとか用意し過ぎるとすぐに保存容量がオーバーしてアラームが鳴る思い出が...

高校時代

高校時代は情報処理科に進んだ。
情報処理科では商業高校ということでCOBOL-85を覚えることになった。

IDENTIFICATION        DIVISION.
PROGRAM-ID            HOGEHOGE.
DATA DIVISION.
WORKING-STORAGE SECTION.
001 NAME PIC X(12).
PROCEDURE              DIVISION.
MOVE "UNKO" TO NAME.
DISPLAY NAME.
STOP RUN.

実際授業で書くCOBOL、こんな短いわけないんだけど(もともと帳票出力のためにコード覚えんとならんかったし)、
これを机上で実装して机上でデバッグしていた。
COBOLの参考書に書いたり、大学ノートにコードを書いてた。
高校のPC(Windows機、Canbe PC-9821Cb10)にはCOBOLの処理系が入っておらず、全部机上だった。
実行結果を想像しないとまずく、チンプンカンプンでものすごくヤバかった。

パソコン部に入ったけどプログラミングを学ぶというよりは
資格取得のために邁進するという感じだった。
就職優先だから仕方ない感じだったのかも。

パソコン部では他にワープロを極めようとする感じで、
キャノワードという当時見てもやばいぐらい連節変換が危うく、
自分で好みに辞書を学習させていくいう感じのワードプロセッサでタイピング速度を上げていくということもやってた。
県大会にも出たりした。文字数入力で上位になってうれしかった。

1度だけ授業で電算機センターというところに行って、
自分で入力したCOBOLコードを実行して出力(プリンター)するということを体験した。
連続用紙に出力されるのがヤバイぐらい興奮した。
アレコレした。

家では親戚が高校入学と同時にPCを買ってくれたので(ありがたい)
それを使ってプログラミングしていた。その頃何やっていいのかわからんし
とりあえず学校で学割で買えるからということで薦められた
Visual Basicを買った。4.0だったな。
それで初歩的なアプリケーションを作ってた。
テキストエディタとかマップエディタとか。稚拙なものばかり書いてた。

Click & Createを買ってクソゲーを作ったりもしてた。
こいつはオーサリングツールだけどものすごく強力だった。
作ったゲームをクラスで配ったりした。黒歴史だ。

とある時、高校でプログラム作品を提出する県かなんだかの
催しがあるから出さないか、と言われたので、
僕はその時ハマっていたカイロソフトさんが作ったまんが奥の細道に似ている
VBシミュレーションゲームを作った。
引きこもりな主人公を社会復帰させるというものだ。放置してると死んで救急車が来る。
だけど先生からこんなゲームを出すこと自体がとんでもないことだ、
ということでストップをかけられてしまったので、
つまらん暦の変換アプリを書いて終わった。

高校卒業後

その後黒歴史的な専門学校生活とアルバイト生活、引きこもり生活、アルバイト生活という
感じで続けていく。その間まともにプログラミングはしていなかった。

社会に出たり入ったりしてるとき

メインで利用するOSをLinuxに変更した。
システム管理とかそこで学んだ。

Linuxに変更したのはWindows2000がリリースされるアナウンスがされたころで、
Windows98 SE使ってたころだな...
このままWindows使うだけでもエロゲーぐらいしかやらないし
雑誌で見たLinuxでも入れたほうがいいんじゃなかろうか、という結論に至ったためだった。

初めて触ったディストリはMandrake Linuxだった。
(ブラジルのディストリ会社と合併して今はMandriva Linuxになっている)
Fedora Linuxについてもインストールしたんだけど、ちょうどその頃
ロケールの設定がUTF-8とするかEUC-JPのままのシステムを使うかで
微妙な時期だった。UTF-8にするとアプリ側の問題で文字化けとか発生してしまう。
各種コマンドでも対応しているものは少ないという。

2chLinux板で見たらMandrake Linuxという、フランスの会社が
出しているディストリを選択したらどうだろうと思った。システムロケールEUC-JP使えるし。
試しにインストールしてみると微妙にインストーラが日本語にローカライズされていた。
まあいいやってことで選択して、2年ぐらい使ってた。

その後はDebianを選択した。debパッケージの仕組みはとても便利だった。
でもなんかDebianを使っててもみんなつかってて詰まらいよなってことで
MEPISというDebian系ディストリに乗り換えた。乗り換えてから2年ぐらい使ってた。

で、その頃インターネットで知り合ったプログラミングに詳しいというか
今でも感謝している人なんだけど、その人がFreeBSDを勧めてきた。

FreeBSDか。随分前、高校時代にOh!PCでFreeBSD(98)2.2.8のCDインストールイメージが
雑誌付録に入ってて試したことあるけどCUIなイメージしかない。
サーバー向けのOSだよなぁ。大丈夫なの?メール読むのに
黒背景白文字で読むことになったり不便なだけでは...と思った。

けどその人が言うにはデスクトップ用途に使っても全く問題ないし、
自分自身FreeBSDで生活している、ということなんで、
まあ大丈夫だろうということでFreeBSDに乗り換えた。

FreeBSDに乗り換えたころはいくつだったっけ。5.0がリリースされたころだったっけ。
isoイメージを落としてさっさとMEPISを消してインストールをした。
楽しかった。ブートしたときにデーモン君が出てきた。FreeBSDっていう文字に後々変わってしまったけど。
(9.1だとどうなのかは確認してない)

FreeBSDの使い方を色々聞いた。portsについても教えてもらったし、
initについてもLinuxとは違うことを教えてもらった。
楽しい。こんなにシンプルなインストールの仕組みがあるのか。
Synaptic使ってdebパッケージを選択してインストールしていた頃が懐かしい。
portupgradeを入れたり、portsをcvsを利用して更新してUPDATEを見るのが楽しみになった。

コロコロとLinuxディストリを変更したりOS変更したりしてたけど楽しかった。
NetBSDに乗り換えたり、OpenBSDに乗り換えたりもしていた。
DragonFlyBSDとかも。秋葉原まで遠出して中古のSuper 7 CPUとマザーボードを買って
環境を毎回壊せるPCも組み立てたりした。懐かしい。

この間は仕事としてはプログラミングとまったく関係ないことをやっていた。
携帯電話の評価とか家電の評価とか。

LispPython

アルバイトとして携帯の評価をしてる間、家に帰ってMMOに没頭するという
どうしようもない生活を送っていた。とにかく早上がりするために
仕事をしまくってしまくってしまくって定時に帰宅し、帰宅したあと
飯喰って風呂入ったらすぐに寝て朝3時に起きて狩りしまくりっていう。

そんなことやってたら体と精神を壊してしまった。最悪である。

というのはさておき、プログラミングをしたい。久しぶりに。
高校までは稚拙だけどコードを書いていた。
プログラマーになりたいとは思ってなかったが、
せっかくLinuxやらFreeBSDを使っている環境に身をおいているので
コードを書けるほうがなんかいいよなぁと思った。

Lisp

プログラム板を見ても怖い人達だらけで、
周りはプログラミングしてる人間は一切いなかった。
Perlが流行ってるらしいし、Rubyも良いらしい。けどなんか
誰かが知ってるプログラミング言語を使うとツッコまれたらだるいな。
と思ったので僕はLispを学ぶことにした。
これがLispだ!というサイエンス社の本をセブンネットで注文してセブンイレブンで受け取った。
読んでみたらLispの処理系を入れろとかあったけどなんもわからん。
ひとまずsbclを選択して、emacsの使い方を覚えて、slimeを入れて、環境を整えて。

リストによる扱いが便利であったり、consで連結リストの概念を得たり、
defmacroによるマクロ作成なども行った。I/O操作は載っていなかったが問題はなかった。
`と'の違いがわからず(展開後と同じ形で記述するかどうか)とか色々あったな。

なんでLispやったんだろ。

Python

その後、Pythonに触れた。Pythonに触れた理由は、
日本以外では使われているから、だった。
もちろんコミュニティは存在し、使われてはいるんだけど
メインストリームとしてあちこちで使われているという状態ではなかった。

オライリーにネズミの本があったのでそれを買った。
初めてのPython。分厚い本だった。なんだこれは。

最初のページから最後のページまで全部やった。
分からないところあったっけ。強いて言えばTkinterを使うところか。
UIの部品にcallbackを渡せばいいが、Tkを見ればいいんじゃないみたいな感じだけだったな。
楽しかった。書いたものがそのまま評価される。

Pure Lispを学んでいたころではできなかったファイル操作が行える。
それがとても楽しかった。システム処理を自動化するとか、
自作のPythonスクリプトをxreaにあげて動かして楽しんでいた。

職場での利用

家電の評価のアルバイトをしていたころだった。
家電開発者が何やら騒いでいた。
海外の開発者から送られてきたコードにバグがあるようで動かない、ということだった。
そのコードはPythonで書かれていた。
開発をサポートするツールだった。

開発者はPythonが読めなかったが、僕には読めた。
Pythonのデバッガ(pdb)を使ってひとまずステップ実行して
落ちる原因を確かめようと進言して、やってみたらTkinterを読み込む所で落ちた。
ああ、実行するマシンにはTk入れてないんだ、それだけか、ということで
インストールしてあげた。

ただそれだけだった。が、その後僕のところに
その海外から流れてくるコードを読んで欲しいということで僕のところにくるようになった。
僕は家電の評価をしていたけど楽しいからコードの改善をやったりした。
バイナリファイルを適切な形で、且つファイル形式を壊さない形で分割するとか
エクセルファイルでバグ管理していたけどファイル数が半端ないから
D&Dでxlsファイルを放り込むと勝手に集計した結果のxlsファイルが
吐き出されるようなものを書いたりした。

稚拙だけど。
でも楽しかった。
どう書く?にも投稿したりしてたな...

プログラマーへ

その後その仕事を辞めることになり、どうしようかな、と思ってたら
インターネットでプログラマーを募集してるというのがネットで話題になり、
プログラマーになりたいな〜と思ったので応募してみた。
けど応募するにも作品がなければいけませんよ、ってことなんで
ウェブプログラミング能力が低い自分はさっと思いつくアプリを書かないと、
ということでPython2ch掲示板のクローンを書いた。
0chみたいに複数の板を管理できたり、テーマを切り替えることができたり、とか
出来る限りの機能を追加したものをプログラマーへの応募をした後に書いた。
必死だった。4,5日ぐらいしか猶予がなかったので必死に書いて、提出した。

0chのコードはPerlだし独自のOOPみたいなのは読めないから(当時)、動作だけはほぼ同等なもの。
つまり仕様を満たすもの。

...このエピソードを書いているだけですごく恥ずかしい。こんなものを26歳(当時)のおっさんが提出するなんて。
ものすごく凝ったゲームとかそういうものを出すべきだろう。
ソースはどっかに転がってるんだろうか。リファクタしたい。

面接をした後、受かった。
あ、プログラマーになったのか。プロプログラマーに。なるほど。

ついでに書くとその頃に常時利用するOSをMac OS Xに乗り換えた。
Quartzで描画されるデスクトップは美しく、動画サイトで表示される文字も綺麗だ。
nspluginwrapper + IPAモナーフォントで描画される世界と違う。おお...

すみませんでした

初めてプログラマーとして採用されたあと、
あまりの糞初心者っぷりに周りに迷惑をかけてしまった。
土下座してもダメだろう。

その後とか

プログラマーになった後の仕事の内容とか
現状について書くと面倒なので端折る。

今の状況

なんか振り返ったけどやっぱりただのプログラミング初心者であって
たいした経験がない。なんでプログラマーになったんだろう。
でもプログラミングやってて楽しいし、nginxのことを考えると興奮する。

プログラミングは、必要にならんとやらないものだなぁと振り返りながら思った。
手を出さなくていいんだもん。というか手をだすという意識すら生れない。
必要については、「なんとなくやってみる」という状態も含むが…

あとやっぱり常にコード書いてないと頭から蒸発していく。
自転車の運転とかと同じようには行かないようだ。
環境の作り方も忘れてしまう。

Copyright (c) 2013-2015 Keiji Matsuzaki