移転しました。新しいエントリはこちらの「今日勉強したことをつらつらと」へ

プログラミング初級者になるために

 プログラミングって何かと壁がある。理解できなかったり、どう考えればいいかわからなかったり。
 おおざっぱだけど、僕は壁ごとにレベル分けするとこんな感じに分けられる思う。

  • 初心者

始めたばっかり。やりたいなーって興味持つ程度〜が初心者プログラマ

  • 初級者

ある程度わかる。変数とか分岐、ループがどんな物なのかわかってて、解説チラ見しながらバブルソートとか二分探索くらいを組める。クラスライブラリとか標準ライブラリくらいなら使いこなせるくらいが初級者

  • 中級者

そこそこわかる。オブジェクト指向とかポインタを理解できて、ヘルプとかのドキュメント読めば大概のことを理解できるようになったら中級者

  • 上級者

なんでもできる

 といってる僕も初級者からようやく卒業できそうな位なのは置いといて。
 初心者から初級者への壁って高い訳じゃないけど、なかなか乗り越えられない。何やればいいかわからない。適当な本買ってもできない。初級者から先は時間さえかければステップアップしていけるんだけど。
 その壁って何なのか考えてみた。

1から覚えなければならない

 プログラミングって今までやってきた他の事がとっかかりになることが少ない。
 初心者のうちは数学なんて使わないし、PCの操作の知識もあんまし関係ない。プログラミングって今までやってきたことと全く違うものだ。

覚えなきゃならない事の種類が多い。

 プログラミングって、プログラミングっていう一個の事を勉強すれば出来るって物じゃない。これが他の事と決定的に違う壁をもってると思う。
 「プログラミングをするためにやらなきゃいけないこと」と聞いて、初心者がまず思い浮かべるのが「プログラミング言語を覚える」事だと思う。でもプログラミング言語を覚えるだけじゃプログラミングは出来るようにはならない。
 他にも覚えなきゃならんことが山ほどある

  • プログラミングのお約束

変数って何?とか分岐、ループの使い方とか、プログラミングの基本的な概念

やりたいことがあったとして、それをどう実現するか考える力

説明いらんと思うし、これは勉強量意外と少ない

  • 入出力のやり方

画面にどうやって表示させるか、どうやってキーから入力させるか、とか。標準入出力とかAPIの使い方

 と、ざっと思いつくだけで4つのことを覚えなきゃならない。
 この4つ、互いに関係あるんだけど、一個覚えれば芋づる式に覚えられるってわけじゃない。変数とかの概念を理解したからってアルゴリズムを考えられるようになる訳じゃないし、全部がまったくの別個の物だと思って取りかかったほうがいい位、独立した体系があると思う。
 でも、アルゴリズムを表現したり読んだりするためにはプログラミング言語がわからないと読めないし、たいていの解説はお約束がわかってるものとして説明してくる。どれか一つでもわからないと一つが覚えられない。この辺の矛盾した感じのところが、一番の初級者への壁だと思う。

結局どうやれば初級者へなれるのか

 っていう所を説明してる所が少ない気がする。
 僕が思う優先順位が高い順に並べると

  1. 変数、条件分岐、ループがどんな物か覚える
  2. 何でも良いから実際に動かせる環境を作る
  3. 変数、条件分岐、ループくらいの最低限のプログラミング言語を暗記する、実際に動かしてみる
  4. キーボードからの入力できるようにする
  5. ソート、探索とかのアルゴリズムを動かしてみる、追いかけてみる

 ってな感じで進めていくと初級者になれてると思う。具体的な話は気が向いたら次回。