2013年03月26日

【メモ】プログラム勉強の過程

嫁さんのドジっ子っぷりがハンパない。
最近は天然ではなくと呼んでます。ジャンボです。


http://anond.hatelabo.jp/20130322031333
新年度を迎える3月だからなのか、プログラム入門の話がちらほら見かけるようになった。
そういえば、自分はどうだったかなーってな感じを思い出すためにメモメモ。

1.はじめに
現在は業務系のWebシステム関連の開発をやってます。
言語としてはJavaが多いですが、PHPとかPerlもちらほら。

2.プログラムの勉強過程
2.1. 最初の1歩
【レベル】入門書の通りに実行環境を作り、例題に書かれたプログラムを実際に書いて、動かせる

とりあえず、自分で作ったコードが実際に動いて、
「プログラミングってこんな風に実際にできるんだ」って実感できた。

大切なのは、ただ写すのではなくて1行1行の意味を理解しようとする事。
「ここでopenして・・・closeは?ここか。」みたいに。
大体の言語は英単語の意味そのままなので、そんなに苦労はしないと思う。

個人的には、おっさん臭いけど写経する基は書籍の方が良いと思う。
理由は・・・
 ・コピペが出来ないので、必然的に1行1行自分で書く様になる
 ・誤植があるケースが多いので、ただ写しただけでは上手く動かない時があり、
  トライアル・アンド・エラーの経験を自然にできる

2.2. ちょっとカスタマイズ
【レベル】例題のプログラムを一部変更して動かす事が出来る

1行1行の意味を大凡理解する事が出来れば、
「ここをこう変えたらこうなるかな?」と予想する事が出来る。それを実際に実行してみる。

例題が掲示板プログラムだったら、
投稿するたびに語尾に「にょ」が入るだけでも良い(単純に投稿文字列に "にょ" を足すだけ (汗))。
a + b のプログラムを a + b + c にするでも良い。

とにかく、自分でしっかりとした理由を基に仮定を立てて、それを実践に移す事が大事。

プログラミング言語がなんだか分からない文字の羅列と思っていたり、
ただ何となく写経しただけだと、このレベルに行けない。
そこから変わったと自覚できる事が良いと思う。

2.3. 例題の組み合わせ
【レベル】複数の例題から一つのプログラムに組み合わせる事が出来る

例題のプログラムのカスタマイズが色々出来る様になると、
別の例題のプログラムをカスタマイズしたプログラムに組み込めるようになる。

先程の掲示板の例題で言えば、
他でクライアントのIPアドレスの取得する例題を見かけた時、
「投稿者のIPアドレスも表示させる事ができるんじゃね?」とか
「IPアドレスで投稿者の制限ができるんじゃね?」とか色々と思いつくことができる。

更にプロパティファイルの取得方法を知る事が出来れば、
「投稿可能なIPアドレスをプロパティファイルに設定する様にすれば、
 何度もコンパイルする必要がなくなるんじゃね?」とどんどん組み合わさる。

そしてそれらが組み合わさった結果を見ると、
完全に例題とはかけ離れた自分オリジナルのシステムが出来上がっている。

ここまで来ると、プログラミングが本当に面白く感じると思う。
自分の作ったコードが動くというだけの喜びから、
自分が考えたものを実際に実現する事が出来るという喜びに変わる。

入門書の見方も単なる勉強から、
自分が考えた処理を実現するための手法探しに変わる。

何時間とコーディングしていても苦痛に感じず、最高の遊び道具になっている。

こう感じれれば、システム開発系に就職するのも向いているだろうし、
反対にずっと苦痛感じていたり、思いつかない状況なら、向いていない気がする。
(少なくとも、上記みたいな発想ができないとプログラム設計はできても基本設計ができない)

この期間は本当に大切にしたい。
ここの基礎がしっかりと出来上がれば、他の言語でも潰しが効くようになる。
社会人になる前であれば、ずっとこの期間で色々なプログラムを作った方が良い。
(フレームワーク云々は業務に携われば必然的に学ぶことになるので)

2.4. フレームワークや効率の良いプログラミングの手法の取り込み
【レベル】フレームワークや指定アルゴリズムに従って、プログラムを作成する事が出来る

前の段階で色々と調べていくと、
フレームワークといったものがある事や、効率の良いプログラミング手法がある事に気づく。

「なんだ、こんな便利なものがあるんじゃないか」とか
「今まで書いてたプログラムが恥ずかしー」とか思うかもしれない。
そうしたら、今まで書いていたプログラムをそれらの方式に変換する。

その変換する過程で「この時はどうするんだ?」とか、
各々のフレームワークで必要な知識も身につくだろう。

批判はガンガンある気がするが、
オブジェクト指向も含めて、この段階で修得する方が良いと思う。

オブジェクト指向だってメジャーなフレームワークだって、
今の段階でベターなだけで、絶対じゃない。

新しい手法やフレームワークが出てきた時に、
最初に手法やフレームワークから入ってしまうと対応する事が出来ない。
(まあ、前段階の状態を正としすぎて、これらの手法自体を批判する側になる人もいるケド・・・
「オブジェクト指向は実践に使えない!」みたいな)

「俺、○○しかできません」なんて言っていたら、自分が出来る事を自ら狭めてしまう。
正直、そういった人とかを見たりすると、もったいないなって思う。


この先も色々と段階があると思いますが、まずはここまで。
なんか久々にまじめに書いた気がします。
posted by ジャンボ at 00:12| Comment(0) | TrackBack(0) | 雑記 | このブログの読者になる | 更新情報をチェックする