新しいプログラミング言語を覚えるときの壁

構文の文法が違うというのはまあ教科書があるから頑張ればどうにかなるとして、それ以外で難しかったこと。
個人的に思い出せる壁を並べてみます。

関数を(変数に入れて)渡し、それを使うという考えがない

クロージャも関数ポインタもコールバックもわかりません。関数が関数を返すこともありうることに思い至れません。

実行コンテキストが認識できない

マルチスレッドが使えません。コールバックの非同期呼び出しとかさっぱりです。ここがわからないとコード記述全体がバッチ実行のようにしか見えません。

再帰の記述がわからない

ローカル変数と引数が呼び出し前と呼び出し先で違う(同じこともありうるが)ということに思い至れず混乱します。

現在の実行位置で実行されないコード記述というものがわからない

無名関数、無名クラス、クロージャ、遅延評価がこれに当たります。そこにあるからここを通れば即実行されるんだろう、ではなく、その時点では定義されているだけ、ということです。

他にも、

  • ローカル変数がわからない
  • 関数の実引数と仮引数の違いがわからない
  • 参照渡しと値渡しの違いがわからない
  • ポインタがわからない
  • 構造体(と共用体)がわからない

といったことがありうるとは思いますが、こちらは私にとってはそうでもありませんでした。
あー、、、ポインタはちょっと難しかったかな。ハコと中身とハコにつけたタグの比喩でどうにかしたかなぁ…タグをつけなおすと当然中身は変わるわけで。