孤独な素人プログラミング愛好家のつぶやき

プロのプログラマにはならない人のために。ヘボの初心者が思いつきで書く。特にまわりにひとりの仲間・先輩のプログラマもいない人のために。

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

とりあえず、これくらいか。随時追加。一流プログラマになりたい人は無視して下さい。