kitの技術担当共同ファウンダー。私の経験によると、これからプログラミングを始めようという人間にとってもっとも危険なことは「プログラミングなんて簡単だよ」と聞かされることだ。このときあなたの頭の中では次のようなプロセスが進行する。子供だってプログラミングできる。それに私は頭がいい!...なんでプログラミングがさっぱり学習できないんだ?簡単だって言われたのに。私は向いてないのかも。それとも私は本当は頭が悪かったの?お断りしておくが、私のプログラミングはイラストよりマシだ。ほとんどの場合、プログラミングには特別な能力は必要ない。プログラミングというのは他のあらゆる仕事に比べてはるかに苛立たしく、めちゃくちゃな作業だ。スマートですっきりした効率的なプログラミングが学べると約束するブログ記事、教室、アプリが溢れている。いうバラ色の約束には、プログラミングを始めるにはまず第一にそれに適した環境を設定するという大事業が必要だという注意が抜けている。言っておくが、どんなに親切なプログラマーの友人でもこの点では助けにならないはずだ。いうのもこの作業は頭がおかしくなりそうなほど苛立たしい上に、一旦終えてしまえば誰も細かいこと覚えていないからだ。誰も教えてくれない秘密は他にもいろいろある。プログラミング能力の非常に重要な部分はGoolgeに正しい質問をし、発見したコードのうちどの部分をコピー&ペーストしたらいいか見分ける能力だ。プログラミングには「これで免許皆伝」などというレベルなどないことも誰も教えてくれないだろう。迷子になったような、自分がバカに思えるような精神状態はプログラミングに必然的に付随する。この冬、私はiOSを勉強することにした。私は夏休みに独学でプログラミングを学んだので、新しい言語を習得する能力にはいささか自信を持っていた。問題は、それがどんなに辛いか忘れていたことだ。子供向けの絵本じゃあるまいし、こんなの本当のプログラミングじゃない)。その後で始めたいくつかプロジェクトはどれも私のレベルでは手に負えないものだとわかった。iOSはウェブ・アプリの開発とはまるで違うことが次第にわかってきた。私が「これは難しいだろう」と思う部分はやさしくて、やさしいはずの部分に際限なく手間取った。私が忘れていたのはプログラマーの生活には「準備不足感」が付き物だという点だった。プログラマーが学ぶべきことには際限がない。一つの言語なりフレームワークなりに習熟することはできるかもしれないが、何か役に立つものを作りたかったら常に新しいツールが必要になる。絶えず自分の不慣れな分野に踏み込んでいかねばならない。自分がバカに思えるという状態に慣れておく必要がある。著名な心理学者、ミハイ・チクセントミハイは学習過程を、退屈と不安の間のジグザグの歩みとして巧みにグラフ化した(どんな分野の学習にも当てはまるだろう)。Experience”私がプログラミングを学んだ過程を思い出してみるとまさにこの通りだった。ステップバイステップのチュートリアルをよくわからないところがあっても忠実にフォローしていく。作家志望者が巨匠の文章を丸写しにタイプして勉強するようなものだ。これで言語/フレームワークがどう働くのか感じがつかめてくる。この段階は比較的やさしいが退屈である。進歩は速い]チュートリアルで作ったサンプルを少し変えてみる。すると分からないことだらけだと分かる。進歩は遅くなる]ごくシンプルだが自分が作りたいものを作ろうとする。すると自分がほとんど何も理解できていなかったことを知る破目になる。[絶望の海に投げ込まれる]自分のプロジェクトにより関連の深い別のチュートリアルを見つける(うまくいけば背景となる学んでいる言語の知識を増やしてくれる)。ステップバイステップで学ぶ。[少し理解できた気がしてくる。多少の自信]サンプル・プロジェクトを少し変える。[また恐怖]新しいプロジェクトを始める。[また絶望]1に戻って繰り返す。私はチュートリアルの大ファンだ。上記のプロセスを繰り返すうちに、私は推薦するプログラマーをベースにベストなチュートリアルをリストするアプリを作った。このアプリが自分に合ったチュートリアルを見つける手助けになればよいと思う。フラストレーションに耐えて努力を続けていれば、やがて見晴らしのいい場所からそれまで登ってきた道を振り返ることもできるだろう。理解できないことが多くてもかまわない。自分が進歩しているのかどうか分からなくても、進歩していると信じて進もう。