どのくらいの人がこのブログを読んでいるか分かりませんが、
もし、勉強が出来ない人が周りにいたら、このブログを紹介してあげてください。
ふと
勉強が出来ない人は、プログラマになったほうがいいと思った。
僕はというと
自分でも驚くくらい勉強というものが出来ない。ものごとを知らない。
はっきり言ってバカなのである。
たとえば、
- 大学行ってない。
- 株式公開と上場の違いを知らなくて、一同ぽかーん。
- つい最近まで、サイバーエージェントを知らなかった。(技術者には必要ない)
- 英語が一切読めない。
- 宮崎料理「冷や汁」を「冷や飯」だと思ってた。
- 基本的に会議とかでよく出る英語、「さじぇっしょん」とか、「あさいん」とか、「ぶらんでぃんぐ」とか、「うぇぶつーぽいんとおー」とか、よく分からん。
- 人力(じんりき)検索を入力(にゅうりょく)検索だと思っていた
たぶん、まだまだあるけど、自分がバカだから気がつかないんだと思う。
でも、
とくいなこともある。
それは、人に優越感を与えること(笑)。
それとプログラミング。(まだまだだけど、得意といえば)
というわけで
僕の(勉強できない人向け)プログラミング学習法を紹介したいと思います。
1.朝起きたらケータイで「はてなブックマーク」の昨日の人気エントリーを見る。
勉強も出来なくてプログラミングを知らない人は、まず「はてなブックマーク」を知って欲しい。
世の中の流れがバカなりに分かる。
これから流行りそうなものを見つけられる。
朝から PC はダルいのでケータイで。
2.教材はオープンソースなフレームワークやライブラリ
まず、自分の教材とするフレームワークを決める「Ruby on Rails」とか「prototype.js」とか「Catalyst」とか、「Dojo」とか、「Simphony」とか、「Seaser」とか、
決める基準は、まずオープンソースであること。
次に、1.であげた「はてブ」で良く出てくるけど、あんまり具体的な情報がないもの。
3.教材が決まれば言語が決まる
僕の場合は最初は「prototype.js」で JavaScript を学び。
最近は、「Catalyst」で Perl を学んでいる。
4.言語の基本の文法をマスター
これは、人によるけど一ヶ月くらいかな。
5.実際に例とかをコピペして何か作ってみる
ドキュメントは最低限しか読まない。
ドキュメントは勉強できない人には理解できない。
ドキュメントには書いた人が大事だと思うことしか書かれていない。
6.仮説をたてる
なぜ、こう書いたらこういう風に動くのか。という風に。
自分なりに仮説を立ててみる。
ここでいう、仮説のことを僕は「イメージモデル」と言っています。
この「イメージモデル」が一番大切なのです。
7.ソースがどこにあるか知る
イメージモデルが出来たら。フレームワークのソースがどこに配置されているのかを知りましょう。
たとえば、prototype.js なら script タグの src にある。 Perl CPAN なら、大抵、/usr/lib/perl5/site_perl にある。
Java や C だったら、ソースをダウンロードしてきて、自分でビルドして動かせるようにしておく。そうすればソースは手元にある。
8.フレームワークの入り口を見つけて突入する
呼び出している関数や、継承しているクラスや、フレームワークへの入り口である。
そして、そのフレームワークのソースをそこから読む。読む。ひたすら読む。
ドキュメントは読んでも理解できないし、大抵英語なので時間の無駄です。
9.必ず分からない箇所がある。
分からない箇所には二つの種類がある。
- 文法が分からない。
- ややこしくてよくわからない。
文法が分からない場合は、もう一度よく勉強しましょう。
ややこしくてよく分からない場合は、以下のように解決します。
- ややこしい部分を等価の式に分解してどんどん自分の読みやすいように書き換えてしまう。
- 式に分解したあと、一度動くことを確かめる。
- そのあと、print文を挿入したり、デバッガで追いかけたりする。
例:
var SomeClass = Class.create(); SomeClass.prototype = { initialize: function(options){ Object.extend( this, Object.extend({ property1: 1, property2: 2 }, options || {}); ); } };
ほぼ等価↓↑
var SomeClass = Class.create(); SomeClass.prototype = new Object(); SomeClass.prototype.initialize = function(options) { if(options.property1 != undefined) { options.property1 = 1; } if(options.property2 != undefined) { options.property2 = 2; } this.property1 = options.property1; this.property2 = options.property2; }
ここで、ふたつ格言。
フレームワークを書き換えることを恐れるな!
等価式を見つけることがプログラミング上達の肝!
10.イメージモデルの破壊、再構築を繰り返す
そうして、自分のそのフレームワークに対するイメージモデルを切磋琢磨していく。
出来たイメージモデルは言葉では表せない右脳的プログラミングセンスとして、あなたに蓄積される。
以上。おしまい。
この勉強法が勉強できる人に出来ない理由
会社でも、勉強が出来る人はドキュメントばかりを読んでいる気がする。
持たざるものは進化する。
勉強のできない人へ
プログラマになりましょう。