10年で独学するプログラミング
- なぜプログラミング学習をそんなに急ぐのか、という問いかけ。
- 書店には「24時間でJavaを学ぶ」のような本があふれており、C、SQL、Ruby、アルゴリズムなどを数日あるいは数時間で学べると主張する本が多い。
- Amazonで2000年以降、「teach yourself time」という語を含む本を検索すると512冊が見つかり、上位10冊のうち9冊がプログラミング本だった。
- 「teach yourself」を「learn」に、「time」を「days」に置き換えて検索しても、似たような結果になる。
- 結論として、人々はプログラミングを学ぶことを急ぎすぎているか、あるいはプログラミングが他の何よりも学びやすいものだと見なしている。
「24時間で独学するC++」が意味するもの
- 24時間では、いくつもの重要なプログラムを書き、成功と失敗から学ぶのに十分な時間はない。
- 経験豊富なプログラマと一緒に作業し、C++の環境の中で生きることを理解する時間も足りない。
- 本が語れるのは深い理解ではなく、表面的な親しみだけである。
- C++の文法の一部は学べるかもしれないが、その言語をどう使うかは学べない。
- アラン・パーリスは、言語がプログラミングの考え方に影響を与えないなら、学ぶ価値はないと言った。
10年で独学するプログラミング
- 研究によれば、チェス、作曲、電信操作、絵画、ピアノ演奏、水泳、テニス、神経心理学や位相幾何学の研究など、さまざまな分野で専門家になるには約10年かかる。
- 重要なのは意図的な練習である。単に繰り返すのではなく、現在の能力を超える課題に挑戦し、試行し、実行中および実行後にパフォーマンスを分析し、ミスを修正することだ。
- 本当の専門家になるには、一生かかることさえある。
プログラマになりたいなら
- プログラミングに興味を持ち、楽しみながらプログラミングすること。
- 他のプログラマと話し、他人のプログラムを読むことは、どんな本や教育課程よりも重要である。
- 大学で4年過ごしたり、大学院でさらに長く学んだりすることもできるが、学校が楽しくないなら、個人的な努力や職場でも同様の経験は得られる。
- 他のプログラマと一緒にプロジェクトを進め、さまざまなプログラミング言語を学ぶべきである。
- 「コンピュータサイエンス」には「コンピュータ」が含まれているのだから、コンピュータが命令を実行するのにかかる時間を知るべきである。
- 言語標準化の作業に参加してみるのもよいが、できるだけ早くやめたほうがよい。
- 単に本だけで学ぶのでは十分ではない。
付録: 言語選択
- 最初にどのプログラミング言語を学ぶべきかについての助言。
- 友人たちが使っている言語を使い、シンプルに保ち、対話的な方法で学ぶのがよい。
- 最初のプログラミング言語としてPythonやSchemeを勧めている。
付録: 本とその他の資料
- 「本だけで学ぶのは十分ではない」と強調しつつも、いくつかの本やウェブページを勧めている。
- SchemeやPythonを使ったプログラミング学習の本や資料を推薦している。
GN⁺の意見
- この記事は、プログラミング学習に対する現実的なアプローチを強調し、短期間で専門家になれるという虚偽の約束に警鐘を鳴らしている。
- 10年または10,000時間の意図的な練習が専門性の発達に必要だという研究結果を示すことで、学習に対する長期的な視点を提供している。
- プログラミングへの深い理解と実力向上のためには、さまざまなプロジェクトに参加し、複数のプログラミング言語を学び、コンピュータサイエンスの基本原理を理解する必要があることを強調している。これは、プログラミング学習を考えている初級ソフトウェアエンジニアに有益な助言を提供する。
1件のコメント
Hacker Newsの意見
あるユーザーは、1999年に "Sams Teach Yourself C++ in 24 Hours" という本を購入したところ、レジ係の人がその本を見て笑いながら、ある記事について話してくれたという。別のときには、16歳のときにBordersでプログラミング本を見ていたら、誰かが "The C Programming Language" という本を手渡してくれ、これが人生を変えるきっかけになったという。このユーザーのキャリアは、世の中のプログラミングに関心のある開発者や人々と出会うことで大きく形作られたという。
別のユーザーは、若い頃に初めて読んだこのエッセイに特別な意味があると述べ、再読した際にマルコム・グラッドウェルへの参照や『レミーのおいしいレストラン』への言及を見て、1998年の掲載以降に記事が更新されていたことに気づいたという。元の版はアーカイブで今も利用でき、ずっと短いという。
また別のユーザーは、自分はよく本で学ぶタイプだが、こうした姿勢は数学や物理のような、変化の遅い非CS分野でより役立つと述べている。最近読んだ量子プログラミングに関するO'Reillyの本は、量子回路を十分に詳しく説明しておらず、実際に何をしているのか理解する助けにならなかったと批判している。本はあくまで学習ツールの一つにすぎず、趣味プロジェクトのほうが経験を通じてより効果的な場合もあると考えている。本は正しい方向を示すのには有用だが、もちろん自分の必要に合った本を見つける必要があるという。本を最初から最後まで読めるときにしか開かないという人もいるが、それは愚かな態度だと考えている。O'Reillyの Generative Deep Learning を注文しており、この本から何かを得られることを願っているし、キャリアの中でいくつかの情報だけでも身につけば得だと考えている。
あるユーザーは、ページ内の古い Amazon.com のリンクが今でも関連する結果を返すことに深く感銘を受けたという。これは "Cool URIs don't change" の良い例だと述べている。
別のユーザーは、過去16年間のスレッド一覧を共有し、1年たてば再投稿は問題なく、リンクは好奇心のある読者を満足させるためのものだと述べている。
また別のユーザーは、意図的な練習の重要性を強調し、単に繰り返すのではなく、現在の能力を超える課題に挑戦し、試し、実行中および実行後にパフォーマンスを分析し、ミスを修正したうえで繰り返すべきだと述べている。
あるユーザーは、5〜6年前に見た動画で、プログラマーの数が増えており、その大半が5年未満の経験しか持っていないと述べられていたことを思い出している。IT/ウェブが私たちの生活により大きな影響を与えるようになるにつれ、こうした現象が起きるのは理にかなっているという。20年の経験を持つこのユーザーは、5年未満の経験しかない人が知る必要のない多くのことを知っている一方で、経験は依然として有用であり、経験の浅いプログラマーたちも想像を超える多くのことをできると述べている。
別のユーザーは、1998年と記された文章に Clojure や Go のような言及が含まれているため、おそらく更新されたのだろうと推測している。
あるユーザーは、プログラミングを学ぶことは最終的に芸術の域に達し、次第により芸術的なものになっていくと考えており、基礎的なことなら2〜3年の専念で十分だと述べている。
最後のユーザーは、プログラミングを独学することの重要性に触れ、この仕事は継続的な学習を必要とするタイプのものだと述べている。5年前に学んだことが今日でも通用するかもしれないが、現在の状況に合わせて新しいことを学ぶ必要があるかもしれないという。