プログラミング未経験で新人研修でプログラミングをやらされている皆様へ（1）

新人研修の季節ですね。いろいろな会社で、今までプログラミングをやったことがない新人に無理やりプログラミングを学ばせるという蛮行がまかり通ってしまう季節です。

でね、中学高校大学と英語を勉強してきた私が英語を喋れないことから明らかだと思うのですけど、わずか数ヶ月の新人研修でプログラミング「言語」をマスターするのは無茶だと思うんですよ。しかも新人の中にはプログラミング経験者という帰国子女がいて、それと同列に評価されるという無茶な状況です。

しかも、教える側は教育のプロフェッショナルではありません。文学部日本文学科卒業で、役に立たない学科なんだから取っておけと言われた教員免許を単位不足で取れなかったこの私ごときが、新人研修の講師をやっています。教材とかも、素人が作っているくさいしね。

というわけで、できなくて当然……なのですけど、将来に関わるかもしれませんから、どうにかして研修をクリアしなければなりません。このような状態に陥ってしまった皆様、お時間があるときに本稿を読んでみてはいかがでしょうか？

## 本稿の前提

* プログラミング言語は、Java SE 8を使用します。私が所属する企業の新人研修で使っているためです。
* なぜそのような機能があるかという理屈が中心となっています。どのように書けば良いのか「だけ」を知りたい方には向かないと思います。
* 本稿はJavaの機能を網羅しません。本稿で仕組みを理解した後に、新人研修のテキストやインターネットで詳細を調べるようにしてください。
* 私はArch Linux上でVisual Studio CodeとMavenを使用しました。が、本稿ではOSやツールの説明はしませんので、皆様は会社に指定された環境を使用してください。

# とりあえず、いろいろ表示してみる

プログラミング未経験者の皆様は、コンピューターは頭が良いと考えているかもしれません。

でも、よく考えてみてください。コンピューターが本当に頭が良いなら、「あれをいい感じにやっておいて」で済むはずでしょ？　それでは済まないから皆様はプログラミング言語を学んでいるわけで、つまりコンピューターは頭が悪くて、人間と比較して圧倒的に理解力が低いんです。

このような理解力が低いコンピューターでも理解できるようにプログラミング言語は作られていて、だからプログラミング言語は難しいんですよ。だって、頭が悪いコンピューターでも分かるように作られた言語を頭が良い皆様が学ぶには、頭が悪いコンピューターの気持ちにならなければならないんですから。

## 計算結果を表示してみる

では、どのくらいコンピューターが頭が悪いのかを、「1 + 1の結果を表示する」プログラムを作成して学んでみましょう。

~~~java
class OnePlusOne {
    public static void main(String[] args) {
        System.out.println(1 + 1);
    }
}
~~~

お題である「1 + 1の結果を表示する」の「1 + 1」に相当するのは、`System.out.println(1 + 1);`の中の`1 + 1`です。計算をしたいなら計算式を書けばよいというわけ。で、「結果を表示する」は`System.out.println(1 + 1);`の`1 + 1`以外の部分。何か表示したかったら、`System.out.println(`と書いて、表示したい内容（今回は1 + 1）を書いて、その後に`);`を書いてあげれば良いわけ。

じゃあ残りの`class OnePlusOne {`とか`}`は何なのかというと、コンピューターは頭が悪すぎて毎回同じ形式で指示されなければ理解できないので他のもっと難しいお題の場合でも使えるような複雑な形式に揃えるために存在しているだけ。今はとりあえず、`class OnePlusOne {`の`OneToOne`の部分に、お題を表現する文字を空白無しで書くことだけ意識しておけばOKです。

……世の中には簡単なお題の場合の理解の仕方を知っているプログラミング言語もあって、たとえばPythonというプログラミング言語だと、同じお題を以下の一行で書けるんですけどね。

~~~python
print(1 + 1)
~~~

じゃあPython使えば良いじゃんというのはもっともなのですけど、ごめんなさい、その疑問は封印でお願いします。私だって、なんでJavaなんかを新人研修で使っているのか分からないんですから。

## メッセージを表示してみる

計算の次は、メッセージの表示をやりましょう。お題は「こんにちは、と表示する」です。先程の「1 + 1の結果を表示する」から考えてみれば、`1 + 1`の部分を`こんにちは`に変更するだけで良さそう。こんな感じ。

~~~java
class PrintHello {
    public static void main(String[] args) {
        System.out.println(こんにちは);
    }
}
~~~

と思ったのですけど、残念なことにこのプログラムは動きません。人間であれば`1 + 1`は計算式で、`こんにちは`は表示するメッセージだと分かるのですけど、そんな複雑なことはコンピューターには分かりません。だから、これはメッセージなんだよ、文字がつながった文字列なんだよとコンピューターでも理解できるようにしてあげなければなりません。Javaの場合、コンピューターに文字列として認識させるには`"`で囲って`"こんにちは"`としげあげればオッケー。

というわけで、Javaでも理解できるように修正した結果は、こんな感じになります。

~~~java
class PrintHello {
    public static void main(String[] args) {
        System.out.println("こんにちは");
    }
}
~~~

これでメッセージを表示できるようになりました。

## メッセージと計算結果を表示してみる

あれ？　ここまでできたなら、「1 + 1は2です」を表示できるんじゃないかな？　そう、こんなプログラムで。

~~~java
class PrintOnePlusOne {
    public static void main(String[] args) {
        System.out.println("1 + 1は" 1 + 1 "です");
    }
}
~~~

……残念ながら、このプログラムも動かないんだけどな。

というのも、`System.out.println();`の`(`と`)`の中には、値を一つしか書けないんですよ。`1 + 1`は計算をすればその結果は2という一つの値になるので問題なし。`"こんにちは"`も一つの文字列という値なのでオッケーでした。でも、`"1 + 1は" 1 + 1 "です"`は3つの値なのでどうにかして一つの値にまとめなければなりません。

というわけで、足し算しちゃいましょう。`"1 + 1は"`という文字列に1 + 1の結果の2を足すというのは無意味に思えるかもしれませんけど、Javaでは、文字列への足し算は文字列の結合の意味になります。`"こんにちは" + "Java"`は`"こんにちはJava"`になって、`"1 + 1は" + 2`は`"1 + 1は2"`という文字列になるというわけですな。

早速やってみましょう。

~~~java
class PrintOnePlusOne {
    public static void main(String[] args) {
        System.out.println("1 + 1は" + 1 + 1 + "です");
    }
}
~~~

……ごめんなさい、失敗しました。「1 + 1は11です」と表示されちゃった。足し算は左からやっていくので、`"1 + 1は" + 1`がまず実行されて`"1 + 1は1"`という文字列になって、それに` + 1`したから`"1 + 1は11"`という意味不明な文字列になっちゃったんですな。

というわけで、この部分の計算を先にしなさいという意味で`()`を使用してみます。こんな感じ。

~~~java
class PrintOnePlusOne {
    public static void main(String[] args) {
        System.out.println("1 + 1は" + (1 + 1) + "です");
    }
}
~~~

はい。これで正しく「1 + 1は2です」が表示されました。以上を活用して、四則演算や文字列との結合をいろいろ試してみてください。お疲れさまでした。

[プログラミング未経験で信じ研修でプログラミングをやらされている皆様へ（2）](https://qiita.com/tail-island/items/5f1b5771533c9d2a7918)に続きます。