第10講: 映画『バッドジーニアス 危険な天才たち』に学ぶ、ワールドワイド・カンニングの技術。

映画『バッドジーニアス 危険な天才たち』ってご覧になったこと、あります?

これ、大学入試→プログラミングの仕事に置き換えて観てください。そして、大学入試ではルール違反ですが、
プログラミングでは合法です。
今日は、そんなカンニングのお話です。
***

こんにちは。
寝起きにまずkindleとプロテイン片手に散歩している、黒田道哉です。

ちなみに、
白クロックスに、白ステテコに、白Tシャツで、白キャスケットです。

見かけても、

白装束のパナウェー*研究所員

じゃないんで通報しないでくださいね!笑

 

関数を使う前の注意点→定義をしないといけない

関数を使えるようになることが大事!
という話は既にしました。
車輪を再発明しないようにしよう、という話でしたね。

 

ただ実は…
関数は、使いたいときに、いきなり使えるもんじゃないんです。
関数を使う前に、「あること」をしておかないといけません。

その「あること」というのは、

 

関数を定義(・宣言)すること

 

です。

 

最近YouTubeで、おぎやはぎさんとミスターボブサップが出てる広告を観ました。

 

「BIの分析結果使って、MAでシナリオ作っといて」

 

「それから、MAとWEB接客のデータをDMPで統合して新しいセグメント作っといて」

ってやつです。

 

普通の人には意味がわかりませんよね?

 

MA→マーケティングオートメーションかな?

DMP→なんかの拡張子かな?

BI→ベーシックインカムかな?

 

ってなりますよね。笑

 

こういう言葉って、相手も意味がわかってて初めて伝わる言葉です。

 

関数も同じで、最初に

「これは、関数です」
「引数は何で、返り値は何です」

ということを、決めておかないといけないのです。
プログラミング言語ちゃんに伝わらないのです。

 

 

 

マクドナルドのレジで勇気を振り絞って

「ふるりれろ〜」

 

って言ったものの、店員さんにキョトン?とされたら、
勇気振り絞った意味ないですよね。w

 

きちんと
『「ふるりれろ〜」って言うとマックフルーリーがタダになります』
というルールを設定していて、

お客さんと、お店の人で共通認識があるからこそ、通じるわけですね。

同じことを関数でも、やってあげます。

 

 

このアルファベットの羅列は関数やから、覚えといてな。

この関数には、コレとコレを渡すから、こんな計算をして、
その結果を返してね。

とパソコンちゃんに伝えてあげるのが、関数の定義・宣言です。

 

そうやって、定義・宣言してあげさえすれば、
関数が使えるようになります。

 

この世をば、我が世とぞ思ふ!

さて。
もしかすると、ここでワクワクした疑問が出るかもしれませんね。

 

関数の定義?

定義すりゃ使えるってことは…
自分が定義さえすりゃ、好きなようになんでもできるの?
望月の欠けたることもなしと思うほどに?

はい、その通りです。よっ天下人!

文法を守って、別にルールを破っていなければ、
自由に、好きなように、あなただけの、オーダーメイド関数がつくれます。
(ただし、オーダーするのも、つくるのも自分ですw)

 

 

例えば、
数値(税抜金額)を渡すと、数値(税込金額)を返してくれる

shouhizei()

という関数だって、つくれます。

 

金額と人数を渡すと、割り勘した時の金額を返してくれる

ichino_kuraimade_shikkari_warikan(金額,人数)

という関数もつくれます。

 

必要に応じて、自由に定義できます!!!

なので、重要なポイントなわけです。
しっかり定義できるようになりましょう!

 

どうやって定義するの?

関数を(コード上で)定義するときの流れは、ざっくりこうです。

1. 関数名と引数 を決める。
2. 関数の中身  を決める。
3. 返り値    を決める。

この流れ自体はどの言語でも同じです。
(なので、覚えておいてください。)

 

シェフで言えば、こうです。

 

1. シェフの名前と、材料を決める。
2. シェフの調理手順を決める。
3. シェフが作る料理を決める。

 

ちょっと変な流れですね。
ただ、これはあくまでコード上で”書くとき“の流れです。

 

“書くとき”ではなく、
コードを”書く“に

「どんな関数にしようかな?」

と考えるとき(設計する、といいます)は違います。

出来上がり料理となる返り値から、
逆算して材料・調理手順である引数や計算法を考えます。

 

設計の際の思考の流れと、コードを書くときのコードの流れは別です。
(中学数学が得意な方は、合同の証明とか相似の証明を思い出してください。
証明を書くときはあたかも、「条件を整理していくと証明できた!」かのように書きますが、
証明を考えるときは、先に合同条件・相似条件を選びますね。)

 

この流れを、具体的に、たとえばPythonの世界で表現するとこうなります。

def 関数名(引数):
    計算を自由に記述(ここは何行でもイイ)
    return 返り値

※Pythonの世界は、インデント(空白で行頭をずらすこと)も重要なので、
形で覚えましょう!

 

最初にあるdefってのはdefine(定義する)の略です。

…あれ?

こんなの初めてみたぞ?

 

今まで関数を定義したことなんてないぞ?

 

 

 

なのに、
あのときdivmod()が使えたのは
なぜ?

 

 

 

定義してもない関数が使えていたのはなんで?!

 

 

…。

何故かと言いますと、

実は、

 

地球上の誰かがすでに定義してくれていたから

 

です!

 

 

そしてそれを、Pythonちゃんが標準装備していてくれたのです!!

だからいきなりdivmod関数が使えたのです!

 

なんてありがたいんでしょう!

誰かの知恵を、タダで自由に使って良いなんて!

感謝するしかありません。

足を向けて寝れませんね。(どこに)

 

 

こういう、どこかの誰かがつくってくれた関数の「集まり」

ライブラリ

と言います。

それを、あなたのPythonちゃんでも使えるようにすること

インポートする

と言います。

import == 輸入する

って意味です。
インポートブランドとか言いますよね。

 

Pythonちゃんだとimportと言いますが、
C言語ちゃんだと「インクルードする」と言います。

include == 含める

って意味です。

 

言語によって呼び方は変わりますが、やってることは同じです。

 

ちなみに、機械学習とか統計で役立つライブラリとしては

・NumPy(なむぱい)
・SciPy(さいぱい)
・その他大勢

があります。

残念ながら、Python Shellちゃんでは、
標準装備のライブラリは使えますが、インポートまではできません。
そこまでやるのであれば、本格的な環境構築が必要です。
(追記:要らないの見つけました→解説ページ)

 

 

さぁ!
プログラミングに関する予習・事前知識はこれでバッチリです。
スキルセットはこれでバッチリです。

 

今日学んだ「ライブラリの活用」。
プログラミングで超重要な技術です。
これは歴とした技術です。

これができると、「ああでもないこうでもない」と
技術書や学術書を片手に自作関数を創り上げる手間が

一瞬で

省けます。

まじで、一瞬です。笑

 

一生懸命、自作で関数を創り上げたあとに、
既存のライブラリにそういう関数があることを知ったら、
ヘロヘロになります。

今までの労力何やったんやー、ってなります。笑

 

このように、

地球上のどこかにいる天才の努力を、一瞬で自分のものにすること。

顔も知らないどこかの誰かに感謝しながら、味方にすること。

地球レベルでカンニングすること。

それをやってのけるのが

 

「バッドジーニアス・危険なエンジニア」

 

 

なのです!

 

次回予告

地球上の誰かが作ってくれたライブラリを利用するのが優れたエンジニアです。

ってことは、地球上の誰かと意思疎通が必要ですね。

「うわ、まさか…。英語力が要るよねって話…?」

その英語について、次回はお話ししますね。

第11講: プログラミングで使う英語をカンタンに解説
プログラミング言語は英語で書きますね。ということは、英語は解らないといけないんでしょうか?よく使われる英語を解説!

 

 

おまけ:今日のエンジニアジョーク

プログラマにとって実際怖いのは
「何もしてないのにバグった」よりも「何もしてないのに直った」だよなあ

非プログラマは
「なぜか部屋にゴキ◯リがいる」と
「さっきまでいたゴ◯ブリがいない」で想像して

by @mirutb (twitter)

 

 

次の講座へ

第11講: プログラミングで使う英語をカンタンに解説
プログラミング言語は英語で書きますね。ということは、英語は解らないといけないんでしょうか?よく使われる英語を解説!