LoginSignup
3
0

More than 1 year has passed since last update.

仕事で例えるプログラミング

Last updated at Posted at 2022-12-03

はじめに

皆さん、「プログラミング」をやったことはありますか?

最近では小学生も「Scratch」を触っていると聞いて、「時代変わったな…」と思ったりもしましたが、
今回は特に「CUIプログラミング」の方についてお話しようと思います。

「CUIプログラミングって何?」って思った人へ。あの「文字がダーッと書かれてるヤツ」です。
(CUI は Character User Interface の略です。Characterが『文字』の意味なので、「使用者側が文字ベースでやり取りする」ということです。一方で「Scratch」の方はGUI(Graphical User Interface)プログラミングと呼ばれ、使用者側が図で直感的にできるプログラミングとなります)

C言語やPythonといったプログラミング言語が、CUIプログラミングの方に当てはまります。

上二つの言語を習ったことがある人の中には、

「結局プログラミングって何?」
「課題で書いたことあるけど、何やってるのか分からなかった」

と思っている人もいると思います。

今回はそんなプログラミングを「仕事」に例えてお話してみようと思いますので、興味のある方はぜひご一読ください。

(個人的にプログラミングしていて思ったことを、つらつらと書いています。あくまでも例えなので、内容の正確性を保証できません。ご了承ください。)

プログラムは命令文の集まり

プログラミングしたいと思うときは、多くの場合「コンピュータにこんな事をさせたい」という要望があると思います。

プログラミングはその要望を叶えるために、基本的な命令文を組み合わせて一つの大きな命令「プログラム」を作る作業の事です。

コンピュータができる処理は

  • データ(数字、文字など)の記録
  • 基本的な演算
  • 外部機器との通信or操作

ですので、上の3種類の処理を上手に組み合わせて、要望通りの処理を行うようプログラミングしていきます。

プログラムを「企業の業務」で例える

例えばあなたが、ものづくりサービスを提供するA社の従業員だとします。

今回、あなたにはA社から新しく「オーダーメイドで自動車を提供する」サービスを作る仕事が与えられました。

一言で自動車を作ると言っても、やることはとても多そうですよね?

まず動力部分やボディ、タイヤなどのパーツが必要ですし、各パーツごとに分解していけば、最終的にはネジなどの機械部品がたくさん出てくると思います。ここで話を簡単にするために、主な仕事内容は

  • 依頼者から注文を受け取る
  • 注文に合わせて自動車の設計図を考える
  • 必要な部品を揃える
  • 組み立てる
  • 依頼者に自動車を渡す

としましょう。さて、あなたなら、どのようにサービスを作りますか?

実はこの「サービスの設計・構築」こそが、プログラミングなのです。

仕事で例える「関数」

サービスの中身を考える

さて、A社から仕事を与えられたあなたは、

「部品を一から作ろう」

なんて考えるかもしれません。

もちろん、A社やあなたに「金属を集める能力や加工する技術」があれば、十分にあり得る選択肢でしょう。

しかしA社が新しく自動車製作サービスを始めている以上、そんな高度な能力や技術はないと考えた方が自然ですね。

自動車を制作する仕事を与えられたら、普通、

「部品は注文して手に入れよう」

と考えると思います。

さて、この「注文して手に入れる」という選択ですが、これはつまり「自動車部品を提供するサービス」に依頼をする、ということです。
仮に、この「自動車部品提供サービス」の運営会社をB社としましょう。

よってあなたが構築する自動車提供サービスの中身は、

  • 依頼者から注文を受け取る
  • 注文に合わせて自動車の設計図を考える
  • B社に必要な部品を注文をする
  • 組み立てる
  • 依頼者に自動車を渡す

となります。

ここで、注文を受けているB社の「自動車部品提供サービス」の中身を見てみましょう。

  • 依頼者から注文を受け取る
  • 注文に合わせて自動車部品の設計図を考える
  • C社に必要な材料(金属)を注文する
  • D社にネジなどの機械部品を注文する
  • 加工して自動車部品を製作する
  • 依頼者に自動車部品を渡す

A社とやっていることがすごく似ているのが分かりますか?

注文を受ける > 製作する(必要に応じて他社に注文する) > 製品を渡す

つまり、
「A社のサービスにはB社のサービスが必要で、B社のサービスにはC社とD社のサービス必要で…」
という風に、サービスの中にまたサービスが入っていることがよくあります。

よく「下請け」と呼ばれるようなものも、外からは見えないような、サービスの中にあるサービスでしょう。

サービスはものづくりに限らず、

依頼を受ける > 仕事をする > 結果(報告・完成した製品)を渡す

という流れとなります。

「関数」はサービス

プログラミングも同じです。

プログラムを「要望通りの処理を行う」ようなサービスだと考えると、その中の処理で、プログラムを簡単にするために他のサービスに頼ることが頻繁にあります。

そこで、

依頼を受ける > 処理をする >結果(情報)を渡す

という一連のまとまりを、プログラミングでは「関数」と呼びます。

さて、関数はどのように使うのでしょうか。実は、サービスと全く同じ考え方が適用できます。

例えばプログラム内に、「複数行にわたる一連の処理」が度々現れるとき、その度にいちいちコードを複数行書くのは面倒ですよね? 部品を一から作ると大変な作業になるのと同じように、プログラムが長くなって見づらくなったり、エラーを生み出しやすくなります。

そこで別会社のサービスとして、新たに一連の処理を行う関数を作ります。

def 関数名 (引数)
{
    処理内容
    return 返り値
}

関数名(サービス名) :一連の処理の名前
引数(依頼書・注文書):一連の処理に必要な情報
返り値(結果の提供) :関数呼び出し元(依頼主)が求めている情報・データ
処理内容       :一連の処理のこと

これらを決めて、プログラム内に定義する(サービスを立ち上げる)ことで、プログラム内で関数が呼び出せる、つまりサービスを利用することができるようになります。

関数の呼び出し方は、例えばこんな感じでしょうか。

関数名(引数)      #関数の返り値がない場合
変数 = 関数名(引数)  #関数の返り値を受け取る場合

プログラミングはサービス委託だらけ

関数は自分で作るだけではありません。

PC上で文字を表示させたい、あるいはキーボードに入力した文字を読み取りたいとき、C言語だとprintf関数、scanf関数、pythonだとprint関数やinput関数を使いますよね。

これは「あらかじめ用意されている関数」なのです。
これがないと、文字を表示させたり、キーボードの入力を読み取る処理を行うのは難しそうですよね。

また、複雑な数学の計算や時間に関する処理など、たくさんのプログラムに使われそうな関数は、
予め用意されていたり、なければ誰かが作って公開してくれてたりします。

こういう「何かに関してよく使いそうな関数」をまとめて、関数セットのようにしたものを「ライブラリ」といいます。(本当は関数以外にも、定数やその他いろいろが入っていたりします)

プログラムは基本的な演算以外は関数による処理なので、そういう意味ではサービス委託だらけですね。

例えばA社の「自動車提供サービス」を無理やりプログラムで書こうとすると、
大体の業務は基本的な演算で書けなさそうなので、関数を用いてこのように表せます。

def car_provide(order) # サービス名[自動車提供], 引数[注文]
{
    # [設計]サービスを引数[注文]で依頼し、[設計図]をもらう
    blueprint = design(order) 

    # [自動車部品調達]サービスを引数[設計図]で依頼し、[自動車部品]をもらう
    car_parts = car_parts_procure(blueprint)

    #[組み立て]サービスを引数[設計図]と[自動車部品]で依頼し、自動車をもらう
    car = assembly(blueprint, car_parts)

    # 依頼者に自動車を渡す(返り値[車])
    return car
}

(あれ、A社って何もやってない…?)

関数はサービス委託と同じで、手っ取り早い分、中身を知らずに実行できてしまうので、問題があったときに自分でどうにかすることが難しいです。

もし自由度やカスタマイズ性を求めるなら、ぜひ自社製の関数をご使用ください。

おわりに

始めて記事を書いてみましたが、うまく伝えたいことが伝わってるかどうか…。

次回があれば、こんどは「仕事で例えるオブジェクト指向」をやってみたいと思います。

3
0
0

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
3
0