孤独な素人プログラミング愛好家のつぶやき
プロのプログラマにはならない人のために。ヘボの初心者が思いつきで書く。特にまわりにひとりの仲間・先輩のプログラマもいない人のために。
- 「クソコード」は無に勝る。とにかくコードを書く。でないと楽しくならない。
- プログラミング・ブログでも作って、(クソ)コードを晒せ。だいぶ経ってから見直すと恥ずかしくなる。それに手を入れろ。プロは「リファクタリングは慎重に」というが、素人は関係ない。1字だけでも直せ。それから、必ず動くコードを載せておけ。動くだけで「クソコード」の利用価値があったりする。ぐぐってみると動くコード例のうれしいこと。
- 「車輪の再発明」ウェルカム。楽しければよし。
- 本を買え。
- 必死でぐぐれ。(ヘタな)英語でもぐぐれ。
- プログラミングのための「格言」はたくさん伝承されている。しかしどれも(守るべきだが)絶対視するな。もしひとつ信じるなら、読みやすくてシンプルなコードを。グローバル変数は使うなといわれるが、絶対ではない。DRY(Don't Repeat Yourself)は正しいが、その方がシンプルならコピペ可。1字だけの変数はプロなら怒られるが、その方が読みやすければそれも可。一般に、長生きする変数には意味ある長めの名前を、しかしすぐ死ぬ変数は短い名前でも可。ただ、Matz の「名前重要」はそのとおり。とにかく、自分にすら読みにくいコードは他人にはまったく読めないということ。よい英語の変数名、メソッド名、関数名が思いつかなかったら、日本語のローマ字でも可。その方が読みやすければ、必要ない変数を導入するも可。読みにくいのなら、無理に 1行で書くな。
- 全体として短いコードは多くの場合よいコード。
- 読みやすいコードほどバグが見つかりやすい。読みにくいコードはどこかおかしいことが多い。バグでなくても、無駄があったりする。
- 自己満足大事。そのためにプログラミングで遊ぶのだから。そのために、コードの見かけはすごく大事。
- あまり凝りすぎない。不必要にあんまり凝ったコードばかり書いているうち、面倒になってプログラミング自体しなくなる。テキトーなくらいの方が楽しい。我々は遊びでやっているのだ。
- できるだけその言語の標準的なコーディングスタイルで書いた方がいい。たいていそれがその言語でいちばん読みやすいから。でも、自分のコードなのだからそれを絶対視する必要はなし。チームでプログラミングしているのではないのだから。しかし、スタイルは統一すること。
- 「他人のソースコードを読め」といわれるが、どうせ初心者にはわからないのだから絶望するな。他人のソースコードがスラスラ読める人は既に初心者ではない。
- 「写経」可。しかし自分にわかりやすいように書き換えるべき。たいていは改悪になるのだが、わからなくては仕方がない。すごく圧縮されたコードをほぐして感動する、初心者にはよくあること。それで既にレヴェルアップしているのである。
- 他の言語からの移植は推奨。これは勉強になる。いいことだらけだと思う。あと、他の言語でこう書くのは、この言語ではどう書くのだろう、というのも推奨。
- C言語、Java、JavaScript、Python あたりはさわり(入門書)だけでもやっておくとよいかも。本当は C++ も入れたいが、自分が勉強していないので。これは恥。Lisp、Haskell あたりは勉強中。ちなみに自分は Rubyist。
- 好きな言語ができたら出来るだけ仕様全体を知ろう。といいつつ、僕は Ruby の全貌を知らないが…。いまだ発見の日々。
- 我々は自己満足派なのだから、是非 Linux を。金持ちなら Mac でもいいが。
- コメントはできるだけ書かない。コードだけでわかるような、読みやすいコードを書くのが理想。あとから自分で読んで忘れそうなことだけ、コメントに書く。
- メソッド(サブルーチン、関数)の中できたないことを引き受けてもらって、きれいに返そう。メインループはシンプルに。
- オブジェクト指向プログラミング(OOP)はプログラミングを容易にするために使うのである。コードが読みにくくなる類の OOP は、素人の採用するところではない。逆にコードが読みやすくなるなら、少しでも積極的に OOP すべき。でも、デザインパターンとか、素人は(勉強はした方がよいけれど)あまり信用しない方がいい。というか自分はムリ。
- OOP の「クラス」ってのはつまりは自分で作る「ユーザー定義型」。「継承」は使わない方がいいことも多い。コードが複雑になって、使いこなすのがむずかしい。
- 我々は設計などしない。いきなりコードを書き始める素人である。OOP はじつはそのために役に立つ。なお、(言語にもよるが)プログラム全体を OOP で書かねばならぬことなどない。一部だけでもよい。
- 少しずつ動かしながら実装していく。そういうところから実装する。いきなりバーっとたくさん書いて動かすというのは我々にはムリ。
- データ構造がコードを決めてしまう。これ本当にむずかしい。
- アルゴリズムのお勉強は役に立つ。基本中の基本なのだけれど、再帰すごい。再帰プログラミングのパワーには何度も驚いて、感動させられると幸せ。再帰は本当に奥が深い。自由自在に再帰が書けたら達人じゃないか。それから、自分の使っている言語で、深さ優先探索、幅優先探索がどうやって実装できるかまず確認する。それから最初はソートの実装なんて何の役に立つかと思うのだが、実際に役に立つ。バイナリサーチも役に立つ。動的計画法も役に立つ。スタック、キューも役に立つ。とかいって、僕はアルゴリズムに関してまだまだ初心者。アルゴリズム楽しいってなると幸せ。
- プログラミングは最初は変数、制御構造、ループ、サブルーチンってこと。関数型プログラミングをやるとパワーアップらしいが、自分はまだそこまでいっていない。
- 使っている言語が「第一級関数」(さらには無名関数)を使えるか。クロージャを使えるか。
- さすがに「メモ帳」はやめておけ。エディタのショートカットは覚えた方がよい。でも、ヘボでもよし。ダメでもよし。
- 我々はプログラミングに向いていない。でもプログラミングが楽しくたっていいじゃないか!
- もう一度。「クソコード」を恐れるな。僕らはヘボだけれど、プログラミングが好きなのだ。仕事じゃないのだ、誰にも迷惑はかけない。
とりあえず、これくらいか。随時追加。一流プログラマになりたい人は無視して下さい。