【超初心者向け】プログラミング0章

どうもみなさん、大学で化学を勉強しながらプログラミングで生計を立ててる竜太朗です。

今回のnoteでは、プログラミングを勉強してみたいけど、そもそもプログラミングって何?って人向けに、基本的な考え方や概念を説明して、なんだプログラミングって簡単じゃんって思ってもらえることを目標にしてもらいたいと思います。

このnoteでは具体的なコードはあまり記述しないで、できるだけ図を多く使って説明していきたいと思います。

プログラミングとは

もうわかっているという人は読み飛ばしてもらって大丈夫です。

プログラミングとは、人間が機械に対して書く命令文です。たとえば、皆さんがみているスマホやパソコンも多くの命令からできていますし、このnoteというプラットフォームも多くの命令からできています。

じゃあどのようにして命令するのか。実は、そのときに書く命令文のことをコードといい、コードを書いたり実際に命令を実行したりすること全般をプログラミングと言います。

プログラミング言語には大きく二種類あって、一つはコンパイル言語、もう一つはスクリプト言語です。

コンパイル言語は、コンパイルといって人間が書いたコードを機械語に翻訳する処理を行ってから実行します。プログラミングのコード自体機械語だ!って思う方がいるかもしれないですが、コードは一応人間が読みやすいもの、という扱いです。大丈夫です、なれたらすぐに読めるようになります。ちなみに機械語は0と1だけで記述されたものをさします。

もうすでにわけわからないって人がいるかもしれないですね。確かに、コンパイル言語はそもそも難しい上に、実行するまでにややこしかったりするので、初心者にはおすすめできません。その代わり実行速度は早いので、科学計算やOSなどによく使われます。主なものとして、C言語やJavaが挙げられます。

一方、スクリプト言語はコンパイル(=翻訳)を必要と必要とせず、比較的書きやすいのが特徴的です。実行も簡単にできるので、初心者にはおすすめです。その代わり実行は比較的遅く、webアプリから人工知能に到るまで多くの分野で利用されています。主なものとして、Javascript, Ruby, Pythonなどがあげられます。

初心者が躓きやすいところ

もちろん、プログラミングの概念で詰まることもあるのですが、それ以上に多いのが、そもそもプログラミングを実行する環境が作れない、エラーが出てるけどどこが間違っているのかわからない、この二つだと思います。

前者はprogatecloud9といったブラウザ上でコードを実行できるサービスをまずは使ってみることをオススメします。実は、プログラミング上級者でも環境構築は詰んで1日潰れるなんてことも珍しくありません。そんな難しいことをできる初心者はなかなかいません。ここで詰むと最悪1行もコードをかけないまま終わってしまうので、プライドは捨てて上記のサービスを使うといいと思います。

もう一つは、エラーが無限に解決できなくて、詰んでしまうというパターンです。これは、プログラミングをしていく上で常に戦わなくてはいけない敵です。エラーはほとんどが正しい手順を踏めば簡単に解決できます。これをデバッグというのですが、これは後の章で解説していきたいと思います。


ここからは実際にプログラミングに共通する概念について説明していきたいと思います。

変数

これはプログラミングをする上で外すことはできません。変数はよく箱に例えられます。なぜかというと、変数という名の通り中身を状況に合わせて変えられるからです。変数の一番ややこしいところは、"="が代入という意味なところです。特に理系の人ほど戸惑うかもしれませんが、"="は等しいという意味ではないのです。(等しいを表すのは一般に"==")

イメージとしては、図のように矢印で理解するのがいいかもしれません。変数という箱に1を入れ、次に10を入れ、最後に3を入れる。右側の矢印は処理の順番を表していると思ってください。
ここで重要なのが変数は中身が上書きされる、ということです。

では、上の処理が終わった後にこの変数の中身はなにになっているでしょう?正解は3ですね。これをコードライクな書き方をすると、

(変数) = 1      1を代入
(変数) = 10     1を上書きして10を代入
(変数) = 3    10を上書きして3を代入
(変数)を出力すると... => 3

厳密な書き方ではありませんが、イメージとしてはこのような感じです。

関数

いわゆる数学の関数と考え方は同じです。

まず、理系の人向けの説明をしてみます。数学無理!って人は一旦飛ばしてみたてください。

まず、数学の関数と言うと、何か変数を受け取ってそれに対応した値を(一意に)返すものをさしますよね。例えば、f(x) = x + 3という関数があったとしたら、任意のxに対して、それより3だけ大きい数字を計算して返すという処理をまとめたものになります。

プログラミングにおける関数は、この考え方を拡張したものです。まず、xを引数と呼び、f(x)の値を返り値と呼びます。そして数学では、数字しか扱わなかった文字列や真偽値(trueかfalse)を引数や返り値として使うのがプログラミングにおける関数です。

言葉だけではわかりにくいので、コードでみてみましょう。

f(x) {
    "xの中身は" + x
}

f("文字です。")     => xの中身は文字です。

少しプログラミングチックな書き方になりましたが、{}内がf(x)の右辺に当たります。先ほどの例とは違って、文字列と文字列の足し算の結果を返していてもでもプログラミングでは関数と呼べます。


では次は、数学が苦手な人でもわかるように解説してみましょう。

変数が中にものが入るだけの箱だとするならば、関数は工場です。

工場に材料を渡すと製品を作って出荷してくれます。これをプログラミングに置き換えると、材料が引数で製品が返り値です。工場は常に一定の処理をし続けています。そして、材料の特性(例えば色)に応じてアウトプットを柔軟に変更することでしょう。

関数はこれに似ています。何度も使うような処理を一つにまとめておいて、それに様々な情報を入力してそれに対する処理結果を得るというものです。

今度はプログラミングっぽい関数をみてみましょう

といっても、ちょっとふざけた内容にしてみました。アラフォー女子かどうかを判定する関数をつくってみましょう。アラフォー女子の定義を30 ± 2歳かつ女性としましょう。

このとき、条件を満たすのは最後のともみさんだけです。これを関数内に判定するための処理を書いてその結果を出力する、というイメージです。

引数は、名前と年齢です。引数はいくつでも渡せます。返り値はYesかNoの二択です。

では、なぜ関数という考え方が必要なのかを説明します。

確かに、三個ぐらいならコピペで十分ですが、百個あったらどうでしょう。もし、途中で定義を3歳差までに変更したくなったら、アラフォー男子の判定に変えたくなったら、変更の可能性は大いにありますよね。このときにコピペでコードをかいていたらどうでしょう。百個のうち一個でも間違えるだけでエラーです。しかもどこで間違っているのかわからないですよね。でも、関数にまとめておけば、一箇所直すだけで全部に対応できます。

これはプログラミングにおいて重要な考え方でDRY(Don't Repeat Yourself)と呼ばれています。二回以上実行する処理は関数化して、共通処理をまとめるというのが一般的です。


この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

これでなんとか明日もあったかいご飯が食べれそう、、ありがとうございます
8

宮川 竜太朗

コメントを投稿するには、 ログイン または 会員登録 をする必要があります。