見出し画像

プログラミング入門書は、なぜ初心者に役立たないのか?

「プログラミング入門書を読んだけど、ソフトウェアを作れるようにはならかった」
「2章くらいまで読んだけれど、今は押入れで埃を被っている」

こんな人はとても多いだろう。実際、プログラミング学習は、9割は挫折すると言われている。

私はまさにその一人だった。『初心者にもわかる』というフレーズに惹かれて本を開いたものの、わずか数ページ進めたところで挫折。そんな経験を何度も繰り返した。

今は生成AIにハマったおかげでエンジニアになったけれど、プログラミング入門書はあれから読んでいない。

どうして私は、プログラミング入門書を読んでも、プログラミングができるようにはならなかったのだろうか?


筆者はこんな人です!

筆者の著書はこちら! 【Amazonベストセラー1位ありがとうございます!】

※カテゴリ。本全体では81位

 文法学習がつまらない

プログラミング入門書は、ほぼ例外なく最初に言語の文法やルールを説明する。変数、条件分岐、ループ、関数などの基本的な仕組みを覚えることからスタートする。

しかし、これが驚くほど退屈なのだ。英語学習にたとえてみるとよくわかる。文法のルールだけを暗記しても、実際に話したり聞いたりできるようになるわけではない。

プログラミングも同じで、文法知識だけでは実際に「自分の思ったもの」を作れるようになるはずがない。結局、頭に入れるだけ入れるものの役に立たず、挫折感だけが積もっていく。

さらに、文法パートが延々と続くことで、「プログラミング=面倒なルールの塊」という印象が刷り込まれてしまう。初心者が本当に必要なことは、簡単なプログラムでもいいから自分で動かしてみる楽しさだ。それなのに、プログラミングをやろうとしてすぐに文法の説明だけが続く本を読み進めるのは苦痛でしかない。

興味を維持するための工夫がないことが、挫折を生んでいるのだ。

写経がつまらない

入門書で勧められるのは、「サンプルコードを丸写しする」、いわゆる「写経」という方法だ。

確かに、写経には一定の効果がある。筆記体を書くのがうまくなる、タイピングが早くなる、勉強した気になれるなど、多数のメリットがある。

問題は、何の説明もなく「ただ写せ」と指示されることが多いことだ。
もしくは、説明が書いてあってもそれを理解するためには別のページや書籍を読む必要があり、結果として移すこと自体が目標となることだ。

結果として、自分が何を作っているのかさっぱりわからず、ただコードを打ち込むだけの単調作業となる。

このやり方では、コードが動いたとしても「なぜ動いたのか」を理解するチャンスを逃してしまう。サンプルコードを入力し終わった後に感じるのは、「で、これがどうしたの?」という虚しさだ。

そもそもサンプルコードを入れるだけなら猿でもできる。今ならOCRで読み取ればタイピングする必要すらないだろう。

実際に自分がやりたいことや、身近に感じる問題と結びついていないから、学習意欲も下がる。応用するための「考える力」を養う機会がほとんどないのだ。

また、本来学ぶべきものは、どのように作るか、つまり、サンプルコードを作るための過程だ。ここはソフトウェア工学的な考え方を使うので、一朝一夕で学べるようなものではない。

つまり、入門書は、異国の言語で書かれた「魔法の呪文」を模写する作業を何十時間も続けることを要請しているため退屈で、かつその入門書にかかれているサンプルコード以外のコードを作れるようにはならないのだ。


内容がすぐに陳腐化する

さらに追い打ちをかけるのが、プログラミングという分野の変化の速さだ。

プログラミング言語自体はそれほど頻繁に変わるものではないけれど、ライブラリやAPI、開発環境のアップデートは頻繁に行われる。

数年前に発行された入門書を開いてサンプルコードを写経しようとしても、エラーが続出するケースは珍しくない。そうなると初心者は「自分が悪いのか、コードが古いのか」すら判断がつかず、途方に暮れてしまう。

実際、1年前に書いたコードを自分で使う場合、パソコンの環境が変わったり、使っているプログラミング言語やライブラリ、フレームワークのバージョンが変わってしまったことで、大抵の場合は修正を要求される。

これ自体は、職業エンジニアにとってはさほど難しい問題ではない。エラーを見ながら一つ一つ問題を明らかにしていけば解決できるものだ。しかし、通常入門書にはそこまで書いていないし、無数にあるエラーコードを覚えるのは無理なので、自分で調べて解決するしかない。

また、このことが「入門書を買う」こと自体への抵抗を生む。学習意欲はあっても「この本、1年後にも役に立つのかな?」と疑問を持つことで、購入を躊躇するようになってしまう。初心者向けのはずが、すぐに使えなくなり価値を失ってしまう入門書に手を出すことを躊躇するのは、当然の反応だろう。

私のアプローチ

入門書でプログラミングを学べなかった私は、全く別のアプローチを取った。それが「#100日チャレンジ」である。

私はChatGPTといっしょにソフトウェア開発を進めることで、プログラミングを学んだ。ChatGPTが出力するプログラムは完璧ではない。ChatGPTが出力したプログラムが動かないと、私はChatGPTに相談しながら問題解決をした。

ソフトウェア開発は「OOを作って」では作れない。作りたいものを思い浮かべ、それをいくつかのモジュール(プログラムの部品)を作り、それを組み合わせる必要がある。大きくなれば大きくなるほどその部品の数は増え、1つの部品を作るための小さな部品が必要になっていく。そういった概念を勉強しながら、プログラミングを学んだことで、エンジニアになったのだ。

このやり方は、作りたいと思ったものを作ることができ、かつ、実際に起こる問題を一つ一つ解決するための方法を教えてくれる。

入門書が役に立たなかったのは、それが「使う側のリアルなニーズ」や「実践的な面白さ」を十分に反映していなかったからだ。文法だけを覚えることも、単純な写経も、すぐに陳腐化する知識を追いかけることも、私の求めていた学び方ではなかった。

初心者に本当に必要なのは、自分の手で試し、間違い、直しながら、「生きたコード」を書く経験だったのだ。

私の経験は、本になったので、見てください!



私の記事を読んでくれてありがとう!これも読んでみて!


noteで書いて欲しいことがある方は、こちらのコメントかXのツイート、DMなどでお願いします。
(できる限り対応します。)

いいなと思ったら応援しよう!

Ami Otsuka「生成AIに育てられた第1世代 | 研究者x SE」
よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!

ピックアップされています

#エンジニア 系記事まとめ

  • 1,219本

コメント

1
p-san
p-san

中高と、少なくとも6年は勉強したはずなのに、英語が話せないのに似ています

著者が、初学者の目線になっておらず
何がどう、どうして理解できないのかを、著者が理解していないからだと思います

ログイン または 会員登録 するとコメントできます。
プログラミング入門書は、なぜ初心者に役立たないのか?|Ami Otsuka「生成AIに育てられた第1世代 | 研究者x SE」
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1