プログラミングとはなんぞや(総論)

6 min read読了の目安(約5400字

こんにちは、初投稿になります。
ITの世界はいろいろわけのわからん言葉が量産されて出てくるように思えるので、少しでもついていけるように自分の研究ノート的な感じで書いていきます。
いろいろトンチンカンな事を書くと思われます。何か僕の記事でトンチンカンな部分があれば教えていただければ嬉しいです。

新しく「これはプログラミングの基本なのかなー?」という物を発見したらこの研究ノートに書いていくつもりです。

プログラミングとは

茶番劇1
のびた  「スマホでしずかちゃんにLINEを送ろうかなー」
ジャイアン「俺様のパソコンにダウンロードした作曲ソフトで、今度リサイタルで歌う新曲を作るぞ」
スネオ  「パパにプレイステーション5を買ってもらったぞ!ゲームソフトも買ったぞ!」

我々の生活はパーソナルコンピューター(パソコン、pc)やスマートフォン、ゲーム機、超大規模な計算ができるスパコンなどコンピュータが支えております。この「コンピュータ」というのは、あらかじめ決められた命令(プログラム)に従って演算を行う機械です。コンピュータは与えられた命令(プログラム)に従ってデータを保存、検索、加工、削除、科学計算、事務処理、画像処理……などやれる事がたくさんあります。

このコンピュータに与える命令を作る事を「プログラミング」と呼びます。茶番劇1に出てきた、のびたのスマホに入っているLINE、ジャイアンの作曲ソフト、スネオのPS5のゲームソフト、これら全て誰かがプログラミングして作られた物であります。
法律用語だとコンピュータは「電子計算機」と呼称されております。コンピューターは電子計算機とも呼ばれるくらいですから、もちろん電気が通ってないと全く動きません。

プログラミングの基本となる処理は3つ。

処理 内容
順次処理 順番に処理を実行していく
分岐処理 条件によって実行する処理を場合分けする
繰り返し処理 同じ処理を条件が成り立つ限り繰り返す。ループと呼ばれる事もある

プログラミング言語

プログラミング言語というのは人間がコンピュータに命令を与えるプログラムを作る時に使用する言語です。
その時々で求められた需要に合わせて多くのプログラミング言語が生み出されていきました。

言語 登場 用途
COBOL 1959 事務処理用に開発された言語。大手メーカー、銀行、電力会社、官公庁など様々な場所で動いている。
C 1972 処理速度が速く汎用性が高い言語。OSの開発、ロボットの動きなどの組み込み系、ゲーム開発などに使われる。数多くのプログラミング言語に影響を与えている言語
C++ 1983 C言語を拡張した物。オブジェクト指向言語であり、OS開発や組み込み系など開発が可能である
Python 1991 ディープラーニング、機械学習、人工知能などの開発が可能である。WebサービスやWebアプリケーションの開発も可能である
Java 1995 PCのOSに依存せずに動作するオブジェクト指向言語。ゲーム開発、Webアプリケーション、スマホアプリなどに使われる。マインクラフトというゲームはJavaで作られている
PHP 1995 主にHTMLと組み合わせてwebの動的ページを作る事に使われる言語。お問い合わせフォーム、ECサイト、CMSなどに使われる
Ruby 1995 まつもとゆきひろ氏が開発した日本国産オブジェクト指向言語。webの動的ページを作ったりできる。Ruby on Railsと呼ばれるフレームワークが強力らしい
JavaScript 1995 webページを見る時に使うブラウザ上で動く言語。お絵描きツール、ゲーム開発、ブラウザ拡張機能、ポップアップウィンドウなどに使われる。Javaとは全く別の言語である
C# 2000 JavaのようにOSに依存せずに動作可能なオブジェクト指向言語。デスクトップアプリ、webアプリケーション、スマホアプリ、ゲーム開発などに使われる。CやC++とは全く別の言語である
Swift 2014 Apple社が開発した言語。iPhone搭載OSであるiOSやMacなどApple製品向けのアプリケーション開発、Webアプリケーション開発などに使われる

この表に記載したプログラミング言語以外に、PL/I、VBA、Objective-C…その他いろいろあります。

プログラミング言語と機械語

茶番劇2
ジャイアン 「ジャイアン語で書かれたプログラムだ。動け!」
コンピュータ「なんて書いてあるんですか?0と1だけで書かれた機械語じゃないと私ワカリマセーン」

プログラミング言語で書かれた物(ソースコード)をそのまま動かそうとしても、残念ながら動きません。ソースコードを実行するにはコンパイルというコンピュータが理解可能な機械語(オブジェクトコード)に変換する作業をする必要があります。
言語によってインタープリタ型とコンパイル型の2種類に分かれます。

種類 特徴 メリット デメリット
コンパイラ方式 ソースを一気に機械語に翻訳した上で実行する 動作時に翻訳を行わないので実行速度が速い 手動でコンパイルが必要、ソース作成中に動作確認できない
インタープリタ方式 ソースを機械語に翻訳をしながら実行する ソース作成中でも動作確認できて修正がしやすい 動作時に翻訳も行うので実行速度が遅くなる

プログラミングの文法が間違っていたり、変数の定義が間違っていたりするとコンパイルでエラーが出る。

プログラミング言語関係なく共通していそうな概念

1つのプログラミング言語を学習していれば、他の言語の習得がしやすいと言われております。
上記で上げた通り、プログラミング言語というのはいろいろあって文法も似ている物もあれば全く違う物もあったりしますが、どの言語も基礎的な部分は共通していると言えるのではないでしょうか。

変数、定数

変数というのは、データを保管しておく箱のような物。数学で例えるとxとかyとかzとかいうやつ? 中身がコロコロ変わっていくため、「変数」と呼ばれている。
どのプログラミング言語でもあるはずで、処理の中でデータを入れて保存したり、別の変数に渡したり、中身を書き換えたり、削除したりされる。
変数名は自由に決められる。

データを入れるのは変数と一緒だが、最初に入れた値を後から変更できない「定数」というのもある。

変数の型

プログラミング言語によっては変数の型を宣言する必要がある。変数の型というのは「その変数にはどんな種類の物を入れたらいいのか?」という事である。
数値(1,2,3...)しか受け付けない変数、文字列(すねお、じゃいあん...)を入れる事ができる変数、true,false(真,偽)が入る変数...などがある。
変数の型に合わない物を入れようとするとコンパイルエラーが発生する。(例:数値型の変数なのに日本語の文字を入れようとしたり…)

配列(Array)

変数というデータを保管しておく箱がまとめて複数くっついている物。繰り返し処理と一緒によく使われる。大量のデータをまとめて処理したい時に便利。要素数を指定して特定のデータを取り出すというやり方もできる。

名前 概要
要素数 配列は順番に0から始まる連番が割り当てられる、添え字とかインデックスなどと呼ばれる事もある。

配列には二次元配列や三次元配列といった物もある。三次元配列はルービックキューブのようなイメージ。

繰り返し(ループ処理)

条件が成り立つ限りひたすら繰り返し処理をするのが、繰り返しである。ループとも呼ばれる。

名前 概要
for 何回繰り返すかわかっている場合
while いつ繰り返しが終わるかわからない場合

条件分岐(ifとかswitch…)

条件分岐とは「条件によって処理を分けたい」といった時に使う。いろんなプログラムで凄まじく高い頻度で見られる。

条件 実行処理内容
ジャイアンが来た場合 空き地の土管に隠れる
上記の条件に当てはならない場合 空き地の土管に隠れない

ifと似ているswitchというのもあり、こちらは特定の値を順番にチェックするのに便利か。

ジャイアンフラグ 実行処理内容
1(ニコニコ) 普通に喋る
2(少し不機嫌 恐る恐る喋りかける
3(激怒) 全力で逃げる
4(リサイタル) 居留守を使ったり、隠れたり、栄養ドリンクを飲んだりする

関数(function)、引数(パラメータ)、戻り値(返り値)

関数とは「何かを与えると(引数)何らかの処理をしてくれて(処理)何かを返してくれる(戻り値)物」、「機能を部品化していつでも再利用できるようにした物」である。
プログラミングしている時に、同じような処理が何度も必要になってくる場合がある。関数を使えば何度も同じ処理を書く必要がなくなる。
引数はパラメータと呼ばれたり、戻り値は返り値と呼ばれたりする事もある。戻り値が無い関数もある模様。

イメージ:

関数名 引数(パラメータ) 戻り値
自動販売機 お金、飲みたいジュース 自動販売機からジュースという戻り値が返ってくる
料理人 自分が頼みたい料理 料理人がいろいろ処理してくれて自分が頼んだ物が返ってくる
計算機 数値 自分が入力した数値を計算機が計算してくれて計算結果という戻り値が返ってくる
空港の探知機 人や荷物 人や荷物に何か問題があれば警報をならしてエラーを出す

プログラミング言語によっては、いろいろな関数が既に用意されている事が多い。このいろいろな機能を持った関数を必要になった時に調べて理解する必要がある。

オブジェクト(物)

オブジェクト指向プログラミング言語でよく聞く言葉である。簡単に言うと、「プロパティ(属性、データ)と機能(メソッド)」が一塊になった物。引数とパラメーターをぶん投げると動く関数と似ている感じはある。(めっちゃ似てるような…)

”どこかの誰かがいつの間にか作って用意した既存のオブジェクト”を使ったり”オブジェクトを自分で作る”といった使い方がある。

JavaScriptだとdocumentという、どこかの誰かがいつの間にか作って用意した既存のオブジェクトがある。このdocumentオブジェクトを使って、HTMLファイルの情報を取得したり、入力したログイン情報をクッキー(Cookie)に保存したりする事ができる。ここに記載した事以外にもdocumentオブジェクトはいろいろな機能がある。
オブジェクトは便利そうだが、知らないオブジェクトの方がはるかに多いと思われるので、使い方を調べて理解する力が必要になってくる。

茶番劇3:
プロパティ:曲名、歌詞、リズム、音程(歌うというメソッドを実行するのに必要)
メソッド :歌う
ジャイアン「お~れはジャイアーン、ガ~キだいしょ~」