31
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

そろそろHello Worldやめないか

Last updated at Posted at 2021-09-20

はじめに

本記事は初心者がHello Worldから学習を始めることを否定するものではありません。
プログラミング学習の本来の目的に立ち返って考えたとき、より本質に迫ったスタートの選択肢を提示するものです。

9/24追記

多くのコメントで指摘を頂き、以下の内容はコンパイル言語その他環境構築の手順が複雑な言語、或いは構文そのものが高度な言語においては不適である可能性を考慮していなかったことをここにお詫び訂正させていただきます。
以下の内容はPythonやJS等比較的優しいインタプリタ言語の想定で読んでいただくと真意が誤解少なく伝わるかと思いますのでご承知おきください。

そもそもHello Worldとは

標準出力で「Hello World!」あるいは「Hello (言語)」と表示させることを目的としたもので、プログラミングの入門における課題中で最も簡単なものです。
例えばKotlinでは

println("Hello World!")

このHello World課題、プログラミング学習のスタートとしてはド定番です。
入門書の第1章、プログラミングスクールの1時限目、入門指南ブログの1ページ目、だいたいHello Worldです。

発祥は諸説ありますが、ブライアン・カーニハンの「A Tutorial Introduction to the Language B」(1973)が有力ではとされています。技術書由来なのは間違いなさそうですね。

Hello Worldはなぜ悪い?

悪いとまでは言いませんが、はっきり言って無駄ではないかと思います。

皆さんはなんのためにプログラミングを学び始めましたか?
突き詰めればその目的は、プログラムに任せたほうが速い作業やプログラムにしかできない作業をさせたいためではないでしょうか

プログラミングに限らず学びを始めるときには学ぶ対象物の魅力を感じられるようなものでないといけません

最初に感じた魅力がモチベーションという起爆剤となって快調なスタートダッシュを切ることができるからです。

そんな大事な時期に、人間でもできる、何なら人間のほうが速くできるというような作業をプログラミングするというのは極めてナンセンスでしょう。

**「Hello World!出力できたぞー!ウォー!」**って起爆剤に出来るならいいですよ。
でも大体の人はもっと「プログラムならではの動き」を最初でも見たいはずです。違いますか?

じゃあどうしろと

FizzBuzz良いと思います。
あれこそプログラミング課題のスタートダッシュにふさわしい。

  1. 1から100までの数字を出力しなさい。
  1. 出力される数字が3の倍数のときはその数字の代わりに「Fizz」、5の倍数のときは「Buzz」、どちらの倍数にもなる場合は「FizzBuzz」を出力しなさい。

というものです。
初見では題意を読み解くのに苦労するかもしれませんが、やることは単純です。

1
2
Fizz #3は3の倍数
4
Buzz #5は5の倍数
Fizz #6は3の倍数
7
...中略
13
14
FizzBuzz #15は3の倍数であり5の倍数
16
...

FizzBuzzの良さを見ていきましょう。

FizzBuzzのここがいい: プログラミングならではの作業を見ることができる

人間が前述の課題を解決するには実直に1から100まで3で割り切れるか、5で割り切れるか調べて書いていく必要があります。
暗算が速くても書いていくのにはシンプルに時間がかかりますね。

こういった**「手順は決まりきっているけれど量が多い」作業こそ、プログラムの出番なのです**。
プログラムが活躍すべきところで活躍している姿を最も簡単に見る手段の一つがFizzBuzzです。

FizzBuzzのここがいい: プログラミングの制御構造が入っている

リファクタリング抜きにした実直なFizzBuzzの実装は、

for(n in 1..100){
    if(n % 3==0){
        if(n % 5 ==0){
            println("FizzBuzz")
        }
        else{
            println("Fizz")
            }
    }else{
        if(n % 5==0){
            println("Buzz")
        }
        else{
            println(n)
            }
    }
}

あたりでしょうか。(こちらもKotlinでの実装です)
このプログラムの中にはforループとif-else分岐が入っていますね。
ループと分岐はプログラムの三大制御構造**「順列、反復、分岐」**の2つを占めており、この概念を把握することはその後の学習の効率に大きな好影響を与えます。

FizzBuzzのここがいい: Hello Worldの上位互換

言うまでもなくFizzBuzzの結果を出す方法は標準出力です。
Hello Worldの課題も同時に満たすことができます。

FizzBuzzは初心者には難しい?

まあHello Worldに比べりゃ難しいでしょう。

しかしプログラミングで一番重要で一番難しいのはロジックの構築と実装方法の模索です。
構文はググればいくらでも出てきますから、エディタとブラウザの往復作業です。

ロジックを組む過程を身を以て体験すること、そしてコードを書くときに調べる力を会得することこそがプログラミング教育の入門に期待される重要な要素ではないでしょうか。

結論

本当にHello Worldにワクワクできますか?
本当にHello Worldは身になりますか?

31
8
25

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?