プログラミングは「暗記は不要、経験は必要」|1行の便利なコードより“素手で書けるコード”が大事な理由

「プログラミングは暗記は不要、経験は必要」の文字と、×印を付けた関数名の単語カード、書く・エラー・直すをくり返す循環図のイラスト

プログラミング学習では、「暗記」をしてはいけません!

プログラミングがほかの学習分野と決定的に違うのは、「プログラムを実行して検証できる」ことです。書いたコードが正しいかどうかは、覚えているかどうかではなく、動かしてみれば分かります。

また、実際の開発現場では、サンプルコードがあったり、その都度調べたりできるので、そもそも「覚える」必要がありません。

この記事では、1行で書ける「便利なコード」と、基本の文法だけで書いた「素手のコード」を比べながら、なぜプログラミングに暗記がいらないのか、そのかわりに何が必要なのかをお話しします。

暗記が不要な理由の全体像はプログラミングに暗記は不要!効率的な学習法と実践のコツにまとめています。

関数の意味は「覚える」より「動かせば分かる」

たとえば、Pythonの random.randint(a, b) は「aからbの間の整数をランダムに返す」関数です。でも、これを暗記する必要はありません。

import random
print(random.randint(1, 6))  # 1〜6のどれかが表示される

何回か実行してみれば、1から6の数字がランダムに出てくることはすぐに分かります。分からなくなったら、また動かすか、調べればいいのです。使い方の詳細は「Python random.randint()とは?範囲指定で整数の乱数を作る」にまとめています。

1行で書ける「便利なコード」

次のコードも見てみましょう。

hands = ['グー', 'チョキ', 'パー']

text = ", ".join(f"{i}:{hand}" for i, hand in enumerate(hands))

print(text)

実行すると、こう表示されます。

0:グー, 1:チョキ, 2:パー

enumerate 関数と join 関数を使えば、番号付きの一覧を1行で作れます。たしかに便利です。

でも、みなさん、ちょっと考えてみてください。

「薔薇」や「憂鬱」は書けなくてもいい

「薔薇」とか「憂鬱」とか、手で書けますか?

むしろ、書けなくてもいいですよね。読むことさえできれば、日常生活で書ける必要はありません。書けたら、周りの人が「すごいね」と言ってくれるかもしれませんが、それだけです。

プログラミングの世界でも同じです。enumerate や join を組み合わせた1行をすらすら書けたら、「すごい」と言ってくれる人はいるかもしれません。でもそれは、あなたの自慢に付き合ってくれているだけ。本音のところは「どうでもいい」のです。

教える側が「暗記させる」紹介をしてしまう

ところが、プログラミング教育の現場では、こういうことがよく起きています。

組み込み関数(基本関数)を、まるで暗記させるかのように次々と紹介してしまうのです。紹介された側は、読んでもすぐには覚えられないので、なんとか覚えようとしてしまいます。

こういうときは、「こういう関数が用意されているんだな」と知っておくだけで十分です。いざ使う場面が来たら、そのとき調べ直せばいいのです。enumerate なら「Python enumerate()とは?」、join なら「Pythonのjoin()とは?」を、必要になったときに開けば足ります。

同じ処理を「素手」で書いてみる

では、先ほどの1行のコードを、enumerate も join も使わず、基本の文法だけで書いてみましょう。

hands = ['グー', 'チョキ', 'パー']

text = ''
i = 0
for hand in hands:
  text += str(i) + ':' + hand
  if i < 2:
    text += ', '
  i += 1

print(text)

実行結果は、1行版とまったく同じです。

0:グー, 1:チョキ, 2:パー

たしかに6行増えました。でも、このコードを何も見ずに書けることのほうが、ずっと大事です。

このコードを書くには、次のことが分かっていないといけません。

  • for文:リストの中身を1つずつ取り出して、同じ処理を繰り返す(「Pythonのfor文の使い方」)
  • インクリメント:i += 1 で、番号を1つずつ増やしていく
  • 文字列の連結:数値の i は str(i) で文字列にしてからつなぐ
  • if文の差し込み:最後の要素のあとにはカンマを付けないよう、繰り返しの途中に条件分岐のブロックを入れる(「Pythonのif文とは?」)

特に最後の、繰り返しのブロックの途中にif文のブロックを差し込むという構造は、関数の名前をいくら覚えても身につきません。自分の手で組み立てた経験があるから書ける技術です。

「書いて、エラーして、直して」で体得する

この技術は、暗記ではなく「実際に書いて、エラーして、直して」の繰り返しで身につきます。たとえば、こんな経験をするはずです。

経験1:str() を付け忘れてエラーになる

str(i) ではなく、うっかり i のまま文字列とつなごうとすると、こんなエラーが出ます。

text += i + ':' + hand
TypeError: unsupported operand type(s) for +: 'int' and 'str'

「数値と文字列は、そのままでは + でつなげないんだ」。一度このエラーに出会って直した人は、次から自然に str() を付けるようになります。このエラーの意味は「TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’ の原因と解決方法」で解説しています。

経験2:手を増やしたら表示が崩れる

じゃんけんの手に「キツネ」を足してみましょう。

hands = ['グー', 'チョキ', 'パー', 'キツネ']

さっきのコードのまま実行すると、こうなります。

0:グー, 1:チョキ, 2:パー3:キツネ

「パー」と「キツネ」の間のカンマが消えてしまいました。原因は if i < 2: の「2」を、手が3つのときの数字のまま決め打ちしていたことです。手の数に合わせて変わるように直します。

  if i < len(hands) - 1:
    text += ', '
0:グー, 1:チョキ, 2:パー, 3:キツネ

こうして一度つまずいて直した経験は、「決め打ちの数字は、データが変わると壊れる」という感覚として残ります。教科書で読んだ知識よりも、ずっと長く役に立ちます。

プログラミングは「知識」ではなく「技術」

プログラミングは「知識」ではなく「技術」です。決して暗記する必要はありません。

正しいのは、「コーディングしているうちに覚えちゃった」というアプローチです。

ここで言う「覚え」とは、頭に定着させた記憶のことではありません。「身に覚えがある」の「覚え」、つまり「経験した」という意味です。自転車の乗り方を、説明書を暗記して覚えた人はいないはずです。何度も転びながら乗っているうちに、体が覚えてしまった。プログラミングも同じです。

「覚えてください」は「経験してください」と読み替える

教える側は、つい「これは覚えてください」と言ってしまうことがあります。そう言われたら、「経験してください」と割り引いて受け取ってください。

関数の名前や書き方を頭に詰め込むのではなく、実際に書いて、動かして、エラーを出して、直す。その経験を重ねた人が、結果として「覚えている」状態になるのです。

プログラミングは「暗記は不要、経験は必要」。これだけは、ぜひ「覚えて」くださいね。

あわせて読みたい

ここまで読んで「なるほど」と思った方は、暗記に頼らない具体的な学習の進め方もあわせて読んでみてください。

テックジムでは、まさにこの「書いて、エラーして、直して」を繰り返す形で学べる無料のPython講座を毎週開いています。暗記ではなく経験でプログラミングを身につけたい方は、「プログラミング無料体験・無料講座|テックジムの無料Python講座・Claude Code講座」をご覧ください。

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら