言語習得でつまずくところ

大量生産される新卒デビューJavaプログラマがぶつかる壁 - GoTheDistance
より。

お決まりのSystem.out.println("HelloWorld")に始まって、for,while,if,switch・・・といったものをまず覚えた。変数についてはintとかStringとかまー色々あるのね的に考えていた。とにかく文法を学ばないとコンパイルに通らない。コンパイルできないと実行できない。それが死活問題だった。コンパイルが何をやっているのかもよく知らなかったし、環境変数のPATHなども知らなかった。
その次に苦労したのがmain以外の関数の書き方だった。何しろ「戻り値」と「引数」が全然わからなかった。returnって何処で書けばいいのだろうかと真剣に悩んでしまったほど、私はプログラムの世界がわからなかった。
(中略)
上記のようなプログラムが書けるまで、1ヶ月ぐらいかかった。

  1. main関数はstaticのため、newしてオブジェクトを参照してやらないとコンパイル通らない。
  2. 関数というものが、インプットがあってアウトプットを返すものと体でわかるのに時間がかかった。
  3. 修飾子とか型とか引数とか一気に覚えたので消化不良を起こした。

などの理由だった。特にstaticのところでは苦労した。

以前、初心者向けの掲示板とか見て回っていた頃には、Javaでメソッドの外側に実行文を書いてしまう人とかをちょくちょく見かけましたし、上の例であるように、mainはstaticメソッドだからインスタンスを作らなくても実行できるけどmainから呼び出されるメソッドは(staticを付けない限り)インスタンスをnewしなければならない、というのは初心者にとってはかなり大きな壁だと思う。
初心者に言語を教えるにあたり、「#include 」のようなものを、「とりあえずおまじないとして覚えておけ」的な言い方はよくされると思うし私も言ったことありますが、初心者は結構そういうところでつまずいてしまうもののようですし(逆にそこで疑問も持たずに「そっかーおまじないなんだ」と思ってしまう人のほうが、後の成長が期待できないような気もする)、ましてJavaの場合、「staticって書いときゃいいんだよおまじないなんだから」と言ってくれる入門書も少ないように思う。ここで引っかかるのが1日2日なら、若者のこと、勢いで乗り越えて欲しいところですが、1ヶ月ひっかかるとなると、仕事ででもない限り挫折してしまいそうですね。
Diksamにトップレベルがあるのは、crowbarから.yを引き継いだ、という理由もありますが、その辺を考慮したという面もなくはないです。
少なからぬ初心者が、HSPとか行番号つきBASICとかを支持「してしまう」(とあえて書く)事実は、初心者向けの言語を考えるのなら、避けては通れないと思うんですよね。
参考リンク:
おまじない