初級その1

コンピュータサイエンスと
魔法のYコンビネータ

Lunchbox
スライド 1 / 15

自己紹介と本稿について

こんにちは、上杉周作と申します。米国在住のプログラマ兼ブロガーです。2019年に日経BP社から発売された『ファクトフルネス』の共訳者でもあります。詳しいプロフィールとブログはこちら。

ファクトフルネス『ファクトフルネス』

本稿「コンピュータサイエンスと魔法のYコンビネータ」は、プログラミング未経験者向けの、邪道なコンピュータサイエンスの入門書です。どういう意味かは、すぐに説明しますね!

プログラミング未経験者向けの、
邪道なコンピュータサイエンスの入門書

ちなみに、本稿は最後まで無料で公開しており、スマホからもパソコンからも閲覧できます。

最後まで無料。スマホからも
パソコンからも閲覧できる
スライド 2 / 15

目次

本稿は、初級・中級・上級それぞれ5ページずつ、それにこのページと「エピローグ」を加えた全17ページで構成されています。記事というよりは、電子書籍に近いかもしれません。

大半の方は、読了までに約2〜3時間ほどかかると思います。長いので、少しずつ読み進めてくださると嬉しいです。

↓ クリックすると各ページに飛べます。

公開日:
ソースコード: GitHubで公開中
英語版: 英語版はこちら
Twitter: @chibicode

スライド 3 / 15

前置きはいいから早く読みたい!という方へ

「前置きはいいから早く読みたい!」という方は、下のボタンを押して先に進んでください!

次のページへ進む初級その1へ

反対に「本稿についての説明を聞いてから読むかどうか決めたい!」という方は、そのまま下に読み進めてみてください。

説明を読んでから始めるには
下にスクロールしてください!
スライド 4 / 15

コンピュータサイエンスって何?

本稿のタイトルは「コンピュータサイエンスと魔法のYコンビネータ」ですが、「そもそもコンピュータサイエンスって何?」 と思われる方は多いでしょう。そんな方向けに、非常に単純化したコンピュータサイエンスの定義を書いてみたいと思います。

そもそもコンピュータサイエンスって何?

わたしたちの身の回りには、パソコンやスマホといった「コンピュータ」と、そのコンピュータ上で動く「ソフトウェア」がたくさんあります。身近なものでいえば、 グーグルなどの検索エンジン、 地図アプリのナビ機能、 カメラアプリの顔認識機能は、どれも「ソフトウェア」です。

グーグルなどの検索エンジン、
地図アプリのナビ機能、
カメラアプリの顔認識機能は、
どれも「ソフトウェア」

アプリ・ウェブサービス・ゲーム・AI・組み込みシステムやITシステム・仮想通貨など、「コンピュータプログラムによって機能するもの」はすべて、「ソフトウェア」と呼ばれます。

そして「コンピュータサイエンス」とは、こういったソフトウェアを開発したり、またはソフトウェアを用いて情報を処理する際に、根幹となる学問のことを指すのです。

ソフトウェア開発や、
ソフトウェアを用いた情報処理の
根幹となる学問がコンピュータサイエンス
スライド 5 / 15

プログラミングと何が違うの?

コンピュータサイエンスという言葉をはじめて聞く方に、コンピュータサイエンスについて説明しようとすると、「プログラミングと何が違うの?」というご質問をよくいただきます。

コンピュータサイエンスって
プログラミングと何が違うの?

非常に単純化して言うと、「コンピュータサイエンスは、プログラミングを支える『学問』」です。この『学問』の部分が重要なのですが、そう言ってもピンと来ないかもしれないので、例えを用いて説明します。かなり乱暴な例えなのですが、わかりやすさを優先しているのでご了承ください。

スライド 6 / 15

医学に例えると

まず、コンピュータサイエンスは「医学」に、プログラミングは「治療」に例えることができます。お医者さんは、患者を治療することができますが、その治療法は医学に基づいていますよね。「こうすれば治る可能性が高い」と医学的に根拠があるからこそ、それに基づいた治療法を選ぶわけです。

お医者さんの治療は「医学」に基づいている

それと同じで、プログラマも、プログラミングをすることでソフトウェアを作ることができます。そして医者にとっての医学のように、ソフトウェアを設計する際に指針のひとつとなるのがコンピュータサイエンスという学問なのです。

ソフトウェアを設計する際に、
指針のひとつとなる学問が
コンピュータサイエンス

医学の知識が浅い人が医者になってしまうと、間違った治療を施しかねません。それと同じで、コンピュータサイエンスの知識が浅い人が高度なプログラミングを行った場合、非効率なプログラムを書いてしまいサーバー代がかさんだり、セキュリティーが脆弱なものになってしまうかもしれません。

また、医学もコンピュータサイエンスも、日々研究が行われ、進歩しています。医学の進歩によって、昔はどれほど優れた医者でも治療できなかった病気が、根絶できるようになったりしますよね。

同じように、コンピュータサイエンスの進歩によって、以前はどれほど優れたプログラマでも作れなかったソフトウェアが、最近なら誰でも作れるようになったりします。最近だと、人工知能分野の進歩が著しく、以前は作るのが不可能とされていたようなAIアプリを、多くのプログラマが作れるようになりました。

医学もコンピュータサイエンスも
進歩している。
以前はどれほど優れた医者でも、
またはどれほど優れたプログラマでも
できなかったことが可能になっている

医学もコンピュータサイエンスも「学問」であり、日々の研究による学問の進歩が、治療やプログラミングといった現場の改善につながるわけですね。

スライド 7 / 15

コンピュータサイエンスを学ぶメリットはあるの?

先ほどの例えを使えば、「コンピュータサイエンスを学ぶメリットはあるの?」という質問にも答えることができます。

コンピュータサイエンスを
学ぶメリットはあるの?

医学の場合、まず大前提として、ほとんどの人が医者になることはありえません。その一方で、簡単な医学の知識は誰にでも身につけることができるし、身につけておくべきです。たとえば、「タバコは体に悪い」というのは、誰もが知っておくべき初歩的な医学的知識ですよね。

「タバコは体に悪い」というのは
誰もが知っておくべき医学的知識

これと同じ話で、ほとんどの人がプログラマになることはありえません。その一方で、世の中はソフトウェア無しには回らなくなっており、この傾向は人工知能の発展とともに加速するでしょう。

だからこそ、多くの人が簡単なコンピュータサイエンスの知識を身につけるべきだと思うのです。たとえば最近だと、人工知能や仮想通貨がどういう仕組で動いているかなどは、基礎的なコンピュータサイエンスの知識があればすぐに理解できます。

大半の人はプログラマにはならないが、
簡単なコンピュータサイエンスの知識を
身につければ、人工知能や仮想通貨などの
ソフトウェアについての理解が深まる

まとめると、コンピュータサイエンスを学ぶメリットは、簡単な医学の知識を学ぶメリットと似ていると言えるかもしれません。

余談 (読み飛ばしてもOK): コンピュータサイエンスと医学は似ている部分もありますが、似ていない部分もたくさんあります。たとえば、医者にはそう簡単になれませんが、コンピュータサイエンスの知識が無くてもプログラマになることはできます。

スライド 8 / 15

邪道なコンピュータサイエンスの入門書

誰もがコンピュータサイエンスを学ぶべきというわけで、このたびコンピュータサイエンスの入門書を書きました。それが、本稿「コンピュータサイエンスと魔法のYコンビネータ」です。

ただ、本稿はよくある入門書とは違い、邪道なコンピュータサイエンスの入門書です。

邪道なコンピュータサイエンスの入門書

わたしはアメリカの大学でコンピュータサイエンスを学んだのですが、当時から教育者気質・作家気質だった筆者は、「いつかコンピュータサイエンスの入門書を書いてみたい」と考えていました。

いつかコンピュータサイエンスの
入門書を書いてみたい!

ただ、もちろんコンピュータサイエンスの入門書なんて掃いて捨てるほどあるので、何らかの差別化をしないと書く意味がありません。そこで思いついたのが、「正統派の入門書ではなく、『邪道』な入門書を書く」ということです。

本稿が「邪道」である理由は以下の2点です。

  1. プログラミングの必要なし
  2. 高度な内容

それぞれどういうことか説明しますね!

先に進みたい方へ:「前置きはもういいから早く読みたい!」という方は、下のボタンを押して先に進んでください!

スライド 9 / 15

邪道な理由1: プログラミングの必要なし

本稿がコンピュータサイエンスの「邪道」な入門書である理由のひとつめは、プログラミングを行わないからです。

プログラミングは行いません

正統派のコンピュータサイエンスの入門書は、「プログラミングを行いながら、コンピュータサイエンスを学ぶ」という教え方をします。

たしかにそのほうが効率が良いのですが、ほとんどの人はプログラミング未経験者ですし、将来プログラマになることもありません。またプログラミングは、スマホからだと非常にやりにくいです。

プログラミングは、スマホからだと
非常にやりにくい

だから、プログラミングをコンピュータサイエンスを学ぶための必須事項にしてしまうと、それだけで学ぶハードルがひとつ増えてしまいます。

個人的には、プログラマになる気がない、またはコンピュータサイエンスを専門として目指さないのであれば、プログラミング抜きにコンピュータサイエンスだけを学ぶほうがいいと考えています。

スライド 10 / 15

パズルで学ぶ

そのためにはどうすればいいかというと、プログラミングの代わりに、プログラミングに似たパズルを使って学べばいいのです。

プログラミングの代わりに、
プログラミングに似たパズルで学ぶ

本稿では、以下のようなパズルを解きながらコンピュータサイエンスの題材を学んでいきます。以下のパズルがどういう仕組みかは次のページで説明しますが、とりあえず実行 ボタンを押してみると、パズルが動くことを確認できます。

以下のようなパズルを解きながら学びます。
実行 を押してみて下さい!

上記のように、本稿で紹介するパズルはすべて、スマホからでもパソコンからでも行えます。

スマホでもパソコンでもOK

将来的には、「スマホから、プログラミング無しにコンピュータサイエンスを学ぶ」ことが当たり前になればいいなと考えています。

余談 (読み飛ばしてもOK): 「プログラミング無しにコンピュータサイエンスを学ぶべき」というのは、あくまで対象が忙しい大人である場合に当てはまります。

スライド 11 / 15

邪道な理由2: 高度な内容

本稿がコンピュータサイエンスの「邪道」な入門書である理由のふたつめは、高度な内容を取り扱っているからです。

高度な内容を取り扱っている

正統派のコンピュータサイエンスの入門書は、初歩的な内容を教えます。それはそれで良いと思うのですが、本稿では逆に、みなさんに高度な内容を学んでもらいます。

本稿は2〜3時間程度で読み切れる長さを目標にしているのですが、そのくらいの文量だと、コンピュータサイエンスのすべてを語ることは到底できません。 だから、わたしはその限られた文量の中で、「自分にもコンピュータサイエンスを学べるかも」と思うきっかけを読者に提供したいと考えています。

「自分にもコンピュータサイエンスを
学べるかも」と思うきっかけを提供したい

そのためには初歩的な内容ではなく、高度な内容を教えるほうが良いと思っています。

なぜなら、もし高度な内容を理解することができれば、それより易しい他の分野も理解できるということを自覚してもらえるからです。「わたしでも高度な内容を理解できた。だったら、他の内容も学べるはずだ!」と思ってもらいたいのです。それが、「自分にもコンピュータサイエンスを学べるかも」という自信につながると考えています。

高度な内容を理解できれば
自信がつくから、
あえて高度な内容を教えます

また、このページを開き、ここまで読んでくださったあなたは、おそらく知的好奇心がとても旺盛な方なのでしょう。そういう方々は、あまりにも内容が簡単すぎると、退屈で物足りないと感じてしまうかもしれません。だから、知的好奇心が旺盛な方にでも「面白い」と思っていただけるように、内容は高度にしています。


とはいえ、内容が高度すぎて、誰にも理解されなかったら本末転倒です。だから、内容は万人向けとは言えないものの、なるべく多くの方に最後まで読んでいただけるように、できる限り分かりやすく説明させていただきます。

また、高度な内容とはいえ、数学やプログラミングなどの事前知識は一切必要ありませんので、ご安心ください。

数学やプログラミングなどの
事前知識は一切必要ありません
スライド 12 / 15

Yコンビネータ

では、本稿で取り扱う高度な内容とは何かというと、タイトルにもある「Yコンビネータ」です。Yコンビネータとは、タイトルにもある通り魔法のような力を持つ、とあるコンピュータサイエンスの概念です。

魔法のような力を持つ
とあるコンピュータサイエンスの概念、
「Yコンビネータ」について学ぶ

Yコンビネータは、初歩的な題材では全くありません。わたしの大学だと、Yコンビネータはコンピュータサイエンス専攻の2〜3年生が学ぶ高度な題材でした。しかも、マニアックな題材で実用的ではなく、知っていても業務に役立つことはありません。

なぜそんなマニアックな題材を選んだかというと、Yコンビネータには、コンピュータサイエンスの面白さや魅力が凝縮されているからです。これについては、最後まで読んでいただくと分かると思うので、ぜひ楽しみにしていてください。

ちなみに: IT業界にいる方の中には、「Yコンビネータって、シリコンバレーにあるITベンチャー養成機関のこと?」と思われた方もいるかと思います。そんな方は、↓の「続きを読む」を押してみてください。「聞いたことない」という方はそのまま先に進んでください。

スライド 13 / 15

邪道なので無料

もし本稿が正統派のコンピュータサイエンスの入門書だったら、みなさんからお代を頂戴していたかもしれません。しかし、本稿は邪道な入門書なので、最初から最後まで無料で提供しています。

すべて無料で読めます!

だからというのも何ですが、内容には期待しすぎないでください。無料なので、有料の入門書に比べてクオリティは高くはありません。

無料なので期待しすぎないで!

さらに言うと、本稿は実用的な内容ではありません。最後まで読み終えても、日々の暮らしや、キャリアに役立つ気づきは得られないないでしょう。

ただその代わりに、もしかしたら読後に「コンピュータサイエンスを学んでみたい」という気持ちが芽生えるかもしれません。

コンピュータサイエンスを学んでみたい、と
読後に思ってもらえたら嬉しいです

あるいは、「難しすぎる。自分には向かない」と思われる方もいるかもしれません。そう思われたとしたらわたしの力不足ですので、申し訳ないです。

スライド 14 / 15

注意: プログラミング未経験者向けです

本稿はプログラミング未経験者向けです。プログラマの方にとって有益かどうかは、正直微妙かもしれません。

本稿で説明する内容は、プログラミングを使うと一瞬で説明できます。しかし、前述の理由から、あえてプログラミングを使わないで説明するので、プログラマの方にとっては非常に回りくどい説明に感じられると思います。数式を使わずに数学をやるようなものです。

プログラマの方にとっては
回りくどい説明に見えます

したがって、プログラマの方向けのYコンビネータの教材としては、本稿はおすすめできません。しかし、その代わりにおすすめできる教材があります。プログラマの方で、「Yコンビネータって何?」と思われた方は、↓の「続きを読む」を押してみてください。

スライド 15 / 15

さっそくはじめてみましょう!

はじめましょう!

もしも「とりあえず読んでみたい 」と思ってくださったのであれば、下のボタンを押して先に進んでみてください!

「あとで読む」前に

お願い:「時間がないからあとで読もう」とお考えの方にお願いがあります。

差し支えなければ、このページを閉じる前に下のツイートをリツイートしてくださると、宣伝になるので非常に助かります。図々しいお願いで恐縮です。

また、本稿の内容について質問がございましたら、上のツイートにスクリーンショット付きで返信してくだされば最優先で対応します。メール(shu@chibicode.com)でもお答えできますが、返事が遅れる可能性が高いです。

著者: 上杉周作 (ブログはこちら)
公開日:
ソースコード: GitHubで公開中
英語版: 英語版はこちら

読者の声 (抜粋)

みなさまコメントありがとうございます!

「読んでみたいかも」と思ってくださった方は、下のボタンを押してみてください!

初級その1
プライバシーポリシー · 当サイトについて · Twemoji