プログラミングの基本にあるもの

English version

以前、ブログで書いたように、プログラミングスキルはどう身に付いていくものなのか、身につけていくべきものなのかに興味があります。プログラミングはスキルとして難しくて、プログラミング言語、フレームワーク、コンピューターの仕組み、ネットワークの仕組みなどいろいろな知識が必要です。成果物が「動く」「動かない」の二値ですし、コードにちょっとでもミスが、コンパイラに怒られたり、クラッシュしてしまいます。

Fizz Buzz問題

難しいとは言いつつも、どこかからは学習をスタートしないといけないわけで、多くの人は基礎から始めると思います。「Hello World」、変数、条件分岐、ループなどですね。そんなプログラミングの基本を考えていく中で、今回のブログ記事を書くに当たってJeff Atwood氏(有名なプログラミング関連のブロガー、Stack Overflowの創業者)の有名なブログ記事を思い出しました。

この投稿で有名になった(と筆者は理解している)のがFizz Buzz問題」です。ちなみにFizz Buzz問題は元々Imran Ghory氏が自身のブログ記事で書いたのが最初みたいです。

ここでは問題の詳細な説明は省きますが、解となるプログラムは if と for を使うシンプルなものです。 上記のブログ記事によると、このシンプルな問題をエンジニアの面接時に聞くことにより、 プログラミングができない 候補者を見抜けるとのことです。

Fizz Buzzの内訳

自分自身はFizz Buzz問題を面接では使っていません。コーディングの質問は候補者を評価するために優れた方法だとは思っていませんし、自分も得意ではありません 🤫。
しかし、候補者がプログラミングできるか確認するためにこの手の問題を使う意味はあると思います。これが解ければ、 プログラミングに必要な基本的な概念を理解しているかどうかが分かるからです。

典型的なFizz Buzzの解は以下のような感じです。

for i in range(1, 101):
  if i % 15 == 0:
    print("FizzBuzz")
  elif i % 3 == 0:
    print("Fizz")
  elif i % 5 == 0:
    print("Buzz")
  else:
    print(i)

このコードを見て分かるように

  • 条件分岐: if

  • ループ: for

  • 算術演算子: %

など、プログラミングの基本となるような概念が入っています。プログラミングがある程度できる人なら、すぐに解が浮かぶと思いますし、書けると思います。

その他の例

こういう問題は他にも存在していて、例えば以下のような問題があると思います(カバーしている概念のも併せて記載しています)。

  • フィボナッチ数列を求める問題

    • 条件分岐

    • ループ

    • 再帰

    • メモ化(必須ではありませんが)

  • 二分探索を行う問題

    • 条件分岐

    • ループ

    • 再帰

他にもシンプルなコーディング問題が頭に浮かんだのですが、いずれも上記と同じような概念が含まれていました。みんなが「基本的な」プログラミングの概念として扱うものは実際にはそこまで幅が広くないことを示している気がします。

それ以外の面ももちろんある

上記の問題はシンプルで、ある程度の基本的なプログラミングの概念をカバーしているだけで、もちろんもっといろいろな要素があります。システム設計、クラス設計、アルゴリズム、データ構造などを知る必要がありますし、使用する言語とフレームワークも知る必要があります。最近はすべてを自分たちで書くことは稀で、そのため開発するものに合うようなライブラリを選定する能力も必要です。
今回のブログではプログラミングできる人なら知っているはずの本当に核となる概念を考えてみたいなと思って書いていました。これらの概念はプログラミングをする人であれば身に付いていて、いつでも使えるはずだと思っています。

書いてみて結構当たり前のことを書いている気がしてきました。プログラミングに必要な能力が何かはまだまだ奥が深そうです。 また何か気付いたら書きたいと思います。

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