プログラミングをしていると、必ず「これ、どう実装すればいいんだろう?」という壁にぶつかります。
市販のテキストやオンライン教材に載っている内容なら解答例もあるので作れるけど、初めて作るものになると、多くの人が「やったことがないから分からない…」と立ち止まるのではないでしょうか。

今は AI があり、質問すれば一瞬で答えを返してくれます。
しかし、それが自分が本当に求めている答えとは限りません。
ときには間違った回答を返してきたり、やたら複雑なコードを提示してくることもあります。

だからこそ、まずは 「自分が持っている知識で何とかならないか」を考える力 がとても重要になります。


プログラミングは数学の問題に似ている

僕は、プログラミングは 「数学の問題を解く感覚」 に近いと思っています。

数学という教科は、他の教科ほど暗記要素が多くありません。
正確には、理解した結果として自然と覚えることが多い教科です。

たとえば「微分」。
公式を丸暗記することもできますが、本質はこうですよね。

微分とは「ある点における接線の傾きの極限」である。

2点間の平均変化率を求め、点の間隔を限りなくゼロに近づける──。
この概念を理解したうえで自分の手を動かせば、自然と公式も身につきます。
そして微分は、なにも数学の世界だけの話ではありません。

たとえば実生活に近い物理でも、距離を時間で微分すると速度になり、速度を時間で微分すると加速度になるという関係が成り立ちます。
このように具体的に微分の定義に従って考えてみると、「ああ、そういうことか」と腑に落ちる瞬間があり、理解がぐっと深まります。
(車やメカに興味がある人なら、こうした概念を一度は考えたことがあるのではないでしょうか。)

しかし、ただ微分のやり方を覚えたり、よくあるパターン化された問題をいくら解いたりしても、
少しでも形が変わった未知の問題が出てきた瞬間、急に手が動かなくなることがあります。

その壁を越えるために本当に必要なのは、「基礎をどれだけ深く理解しているか」だと僕は思っています。

そしてこれは、プログラミングでもまったく同じです。

【例題】配列を逆順に並び替えるには?

では、実際にプログラミングで “数学らしさ” が出る例をひとつ。

次の配列の要素を逆順にするプログラムを書いてください。

let cities = ["Tokyo", "Yokohama", "Nagoya", "Kyoto", "Kobe"];

この問題を出されると、多くの初学者は戸惑います。
ですが、発想はとてもシンプルです。

逆順の考え方:両端の要素を入れ替える

ポイントは次の2つ。

  1. 両サイドのインデックスを入れ替えればよいと気づけるか
  2. 入れ替えるために一時的な変数を使うという発想があるか

この2つに気づけたなら、かなりセンスがあります。

実際のコードはこうです。(解答例)

let cities = ["Tokyo", "Yokohama", "Nagoya", "Kyoto", "Kobe"];

// インデックス 0 と 4 を交換
let temp = cities[0];
cities[0] = cities[4];
cities[4] = temp;

// インデックス 1 と 3 を交換
temp = cities[1];
cities[1] = cities[3];
cities[3] = temp;

仕組みはとてもシンプルです。

  • 左端と右端を swap(交換)
  • 内側へ一つずつ進んでいく

これが 「逆順」の考え方 です。

配列がもっと長くなれば、この処理をループで書くことになります。

reverse() を「丸暗記」するだけでは弱い

実は、reverse関数を使って一瞬で書く方法があります。

え、reverse() があるなら最初から教えてよ!

確かに reverse() を使えば一瞬です。

let cities = ["Tokyo", "Yokohama", "Nagoya", "Kyoto", "Kobe"];
console.log(cities.reverse());

しかし、ここで大切なのは

「なぜ逆順になるのか」「どういう仕組みが隠れているのか」

という基本の部分です。

数学で言えば、
「公式だけ丸暗記しても、少しひねられた問題に太刀打ちできない」
のと同じです。

reverse() は単なる 「便利な道具」 にすぎません。
道具を使いこなすためには、その裏にある 考え方の引き出し を理解しておく必要があります。


まとめ:基本が応用をつくる

未知のプログラミングに立ち向かうとき、
AI が即答をくれる時代であっても、自分の知識をどう組み合わせて解くか、という考えが欠かせません。

数学の難問が「基本の積み重ね」でしか突破できないのと同じように、
プログラミングの問題も基本の理解が深ければ深いほど、必ず解けるようになります。
暗記よりも思考力が大切です。

  • なぜこうなるのか?
  • 自分の知っている知識だけで再現できるか?
  • 応用するなら、どこをどう変えると良いか?

こうした “考える習慣” が身につくと、
プログラミングは一気に楽しくなります。

数学の問題を解くように、
「考える → 試す → 修正する」
このプロセスをぜひ楽しんでください!