シアトル生活はじめました

20年以上すんだ東海岸から西海岸に引っ越してきました。MicrosoftのUniversal Storeで働いてます。

プログラミング言語の「関数」をお手軽に学べる動画を作成しました!

www.youtube.com

 

「関数?なんか数学っぽくて難しそう」
「やっぱりプログラミングはガチの理系じゃないと無理ってことでしょ?」

そんな反応が返ってきそうですが、確かに「数学の関数」を基礎にしてますが、ソフトウェア開発であつかう「関数」はもっと広い意味での「機能」や「仕事」のことです。

英語で function と呼ぶものですが、その日本語訳は「機能」です。例えば、フェイスブックで「投稿する」という「機能」も裏では「関数」がその仕事をやってますが、数学とは関係ないでしょう?そういう関数もたくさんあります。

とはいっても「関数の基礎」は数学っぽくはなってしまいますが、大丈夫です。「数学の関数」が良く分からなくても「プログラミングの関数」は理解できます。なぜかって?プログラミングの関数は「動くから」です。動かしてみると人は理解できるんです!

ぜひ、ブラウザの開発者向けツール機能を使って「プログラミングの関数」がどんなものか体験してみてください。

動画では、中学3年生の娘が実験台(?)になってワークシートをやっていきます。(気を使ってくれたのかもしれませんが「簡単だった」って言ってくれましたw)

内容はワークシートという形でGitHubに上げてます

https://github.com/LazyLabo/cs-excercise/blob/master/function.md

前回は「式」についての動画でしたが、今回は「関数」に関して、作りました。私個人が信じる、優先順位と学習する順番です。

[以下ちょっと技術的内容が続きます。動画&ワークシートは「未経験者」でも分かるように作ってますので、下はスルーでオケです]

内容にはちょっとした、思い切ったことをやってます。関数型プログラミングに「カレー化」という書き方があるんですが(本当にそう呼ぶんです冗談じゃなくてw)、それを「さも当たり前」のようにワークシートに盛り込みました。

カレー化は純粋な関数型プログラミング言語だけでなく、この動画で使ったJavaScriptもそうですが、超人気のPythonや、そこそこ人気のJavaC#、それにもちろんScalaやF#などでも使えます。

入れ子になった関数が親のスコープを参照できるクロージャも、「さも当たり前」のように、クロージャという専門用語を使わずに実践してます。

このワークシート程度でも、一度やったとやらないとでは将来、ラムダ式や、部分適応、非同期プログラミング、などを学ぶ時に「すんなり」理解できるんじゃないかと期待してます。少なくとも伝統的なプロシージャスタイルの関数だけ、を知っているよりも習得スピードは速くなる、と信じてます。

難しそうな言葉を並べましたが(承認欲求満たされました!)、ワークシートで学ぶ上ではそういう言葉は一切知らなくてもいいです。ただ、例に従ってやるだけで「少し分かるように」なると思います。