このサイトについて

みんなのIoTみんなのIoTは,IoT+Pythonの入門書です。

新著「みんなのIoT」は,いちばん分かりやすいPython入門書です

新著「みんなのIoT」は,いちばん分かりやすいPython入門書です

「みんなのPython」はおかげさまで大好評を頂いているようで本当にありがとうございます。外国語版が出るとか出ないとかいう話があって,渾身のネタの数々がどう料理されるのかが目下の感心どころです。

「わかりやすい」「読みやすい」と好評を頂いているみんPyですが,たまにプログラミング初心者には難しい,というご意見を頂くこともあります。それが気になっていたので,プログラミング経験がなくてもエントリーしやすい万人向けのPython入門書を書きました。

みんなのIoT

9割くらいの人は何を言っているのか分からなくて口をあんぐりと開けてると思うけど,まあおじさんの話をもう少し聞いてくれ。「IoTと言えばハード」と考える人が一定の割合いると思う。それは少し合ってるけど概ね間違いだ。なぜならハードをコントロールするにはソフトウエアが必要だからだ。最近は指先大のセンサーにも通信用のソフトが内蔵されている。純粋なハードウエアなんてほとんどないのだ。世界はソフトで動いている。ハードだけだとIoTデバイスから送られてくるデータをAIに繋げられない。電子工作失敗すると高いしヘコむしはんだはカメムシ臭い。回路を設計するために必要となる論理的思考を,痛みが少ない状態で失敗しながら学べるプログラミングで獲得するのだ。そのためにおじさんは「プログラミングとはなにか」ということについて,初心者にも分かりやすいように一生懸命説明を書いた。昔初心者だった頃のことを思い出しながら書いた。

Python+IoT本なので当然Raspberry Piを使うんだけど,ラズパイはとりあえず買う必要がない。Anacondaをインストールしてある人は,「pip install miniot_7seg」してノートブックを開き,「from miniot_7seg import *」してから「start()」「on(0)」してみてくれ。↓なのが表示されてパソコンだけでIoTな雰囲気を味わえるようになっている。

おじさんJavaScriptで頑張っただろ。書籍で使ってる温湿度センサー用ライブラリだって,センサー繋がってなかったらスクレイピングして温度と湿度取ってくるぞ。インターネットは広大なセンサーなのだ。

何かを学ぶために必要なことは何だ? そうだ,モチベーションだ。IoTを体感してもらうための仕組みを満載したのも,すべては読者のみなさんにモチベーションを高めて欲しいからだ。書籍の最初の方には「IoTってすげえ」って思ってもらえるように魂込めて書いた文章が載ってるぞ。書籍を書くに当たって若い子にリサーチしたんだけど,みんなけっこう「ムーアの法則」とか「チープ革命」知らないんだよ。歴史知らない人でも,正しい文脈でIoTをとらえられるように,おじさん頑張って原稿書いたぞ。10年ぶりくらいの完全単著だしガッツリ子育てしながらだしでいろいろ大変だったけど。Raspberry Pi買ったり電子工作するのは,モチベーションを高めた後で十分だ。

プログラミングとは何だ? データと繋がり操るための最高の道具だ。人間は情報を取り込んで体系化したいという根源的な欲求を持っている。Wikipediaでアイドルとか声優とかアニメとか特撮とか戦国武将とか歴史の情報が異常に充実しているのはそのためだ。「情報への欲求」は「食欲」「睡眠欲」「性欲」に次ぐ第四の欲望だ。

チープ化で安くなりあまねく世界へ広がってゆくネットワークレディなデバイスは,データの入口となって人間の知覚を拡張してくれる。インターネットが我々に外部記憶をもたらしたように,IoTは我々の環環境の外部に無限に広がる拡張された認知をもたらしてくれるはずだ。その情報を操るために必要なのがプログラミングだ。「みんなのIoT」を読んで,そんな未来の一端を感じてくれたらおじさん嬉しいぞ。

プログラミングの学習から始まり,IoT制御,AIやデータサイエンス,果ては重力波の検出にまで使えるPythonは,情報への欲望を満たすために用意された最高のツールだ。Pythonを使いこなして未来への旅へ出よう。

2018-02-15 12:00 Read More
Python初学者向けビジュアルデバッガ birdseye

Python初学者向けビジュアルデバッガ birdseye

初学者にとってプログラミングを難しくしている理由の一つは,プログラムが動いている様子を想像しづらい,という点です。プログラムに,変数,ループや条件分岐があるので,状態によって実行結果が変わります。同じプログラムでも,与えられる条件や内部状態によって違った動きをします。

熟練したプログラマであれば,条件による挙動の変化や内部状態の境界値を巧みに脳内で想像しながら,すいすいとプログラムを作ってゆくことができます。しかし,初心者にはそのようなことが難しい。そのため,とりあえずプログラムを書いてみて動かしてみるのですが,内部状態の遷移による挙動の変化をうまくイメージできないので,間違えるし,また間違いの原因がどこにあるか理解できなかったり,結果として正しく動くプログラムを作ることができないのです。

プログラムを一行ごとに実行したり,変数の状態を確認すると,初学者がプログラム内部の動きをイメージするために大きな助けとなります。ソースコードデバッガを使うと,プログラムをステップ実行したり実行中の変数の変化を見ることができます。つまり,ソースコードデバッガは,プログラミングの学習に適したツールなのです。

今回紹介するbirdseyeは,手軽にPythonのソースコードデバッガのような機能を提供してくれるライブラリです。挙動を見たい関数に「@eye」のようにデコレートすることで,実行結果を記録し,後で確認できるようになります。

関数の実行結果の確認は,birdseyeが内蔵しているWebサーバを通じて行います。関数を実行した後に,Webブラウザを使ってlocalhost:7777のようなURLにアクセスすると,ASTを使って分析した関数の内部がHTMLのエレメントとして表示されます。見たい部分にマウスオーバーすると,情報が表示されます。

ループがある部分にはボタンが表示されます。ボタンを押すことによって,繰り返し変数の内容を変え,ループの挙動を変化させることができます。例外やエラーが発生した場合には,もととなった部分が赤く囲われ,原因なとが表示されます。

最近はPyCharmやマイクロソフトのVisual Studio Codeのように,Pythonのソースコードデバッガ機能を提供してくれる無料の開発環境も増えてきましたが,「pip install birdseye」でインストールでき,単体のライブラリで似たような機能を提供しているbirdseyeは,運用の手軽さが魅力です。複雑なコードに対して使うのはツラそうですが,データ分析や機械学習で使う程度のコードであれば,かなり便利に使えるはずです。Pythonを学んでいる,または学びたいと思っている方は,ぜひ試してみてください。

Jupyterでこの機能を使えるようになったら最強なんだけどなあ。

2018-02-06 12:00 Read More
プログラミングはなぜ難しいのか

プログラミングはなぜ難しいのか

4月19日(水)に開催される勉強会にお呼ばれして,お話をすることになった。10年間多くの方に読んで頂いているPythonの入門書を書いている関係もあって,つねづね「プログラミングはなぜ難しいのか」について考えたり調べたりすることが多いのだけど,当日はそのことも含め,どうすればよりよく学習できるのか,プログラミングとは何か,ということなどにも言及したいと思っている。

プログラミングが難しいのは,一言で言うと「ロジックの塊」だから,ということなんだけど,そうすると「じゃあ論理的な思考が得意な人だけがプログラミングやればいいじゃん」みたいな話になりかねないので,もう少し砕いて考えてみたいと思う。

たとえば,この手の話題でよく引き合いに出されるFizzBuzz問題

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

これを解くプログラムを作るには,二種類のハードルがある。

ひとつは,プログラム言語で実行できることがらの要素を知る,というハードル。演算(割り算の余りを得る),条件分岐,ループ,文字列の表示。

そして二つ目は,問題の条件を満たすよう,機能を組み合わせる方法を考えるというハードル。

一つ目は,言ってみれば暗記で乗り越えられるタイプのハードルなので,それほど難しくはない。問題は二つ目で,このハードルを越えるには,問題を要素に分割して,プログラム言語で実行できる命令に置き換え,問題の要件を満たすように組み上げてゆく必要がある。ここに論理的思考が必要で,このハードルは一般ピープルには容易に超えられない。プログラミングができる人は,この種の論理的思考になれているので,この種の問題を難なく解ける。

では,論理的思考が得意な人とそうでない人を分けるのはなんなのか? そう思っていろいろ調べてみると,面白いことが分かってきた。人間は「論理そのもの」を扱うのがそもそも苦手らしいのだ。

2017-04-14 12:00 Read More
マサカリが無かったらみんなのPython第四版も無かったよな〜,という話

マサカリが無かったらみんなのPython第四版も無かったよな〜,という話

マサカリも受け方で血肉になるよ,という話をします。

しばらく前,みんなのPython第三版のAmazonレビューに誤字のリストを投げた人がいた。誤字があるのは著者として読者の皆様に大変申し訳ない。実際はコスト的に時間あんまかけられないとか諸事情があるのだけど,とにかく恥ずかしい話である。なお,誤字を報告しても連絡が無い,というのは常識的に考えても本当かどうか微妙だ。事実,読者からの質問や誤字の情報については,定期的に編集者の方から連絡をいただいていた。

そうこうしているうちに,今年の初め頃,SBクリエイティブ編集部から改訂のお話をいただいた。

2017-01-05 16:00 Read More
プログラミング力向上のコツ - みんなのPython第四版のオマケ

プログラミング力向上のコツ - みんなのPython第四版のオマケ

みんなのPython 第四版サンプルコードを公開に向け整備していたとき,ちょっとしたオマケの文章があるといいかなと思って書いた見たところ,一部に好評だったので公開してみたいと思います。

オマケ : プログラミング力上達のコツ

このNotebookでは,拙著を読んで,その後どうすんだ,ということについて,書籍には載せないような砕けたかんじで書いてみたいと思います。プログラミングを上達させるためのコツについて,つらつら書いてみました。どうぞ。

目標を設定しよう

まずは,Pythonを使ってなにがしたいのか,ゴールを明確にしましょう。

「Webアプリを作りたい」「Raspberry PiでIoTデバイスを作りたい」「人工知能を活用したい」「データ分析をしたい」など,できるだけ具体的な目標を立てましょう。

「世の中を変えたい」「お金を稼ぎたい」「異性にモテたい」「とにかくビッグになりたい」というような抽象的な目標をたててはいけません。

煩悩は知的成長を助けないのです。

2016-12-16 15:00 Read More
Pythonで嫁を見つけた話 - みんなのPython第四版に寄せて

Pythonで嫁を見つけた話 - みんなのPython第四版に寄せて

まもなく発刊される拙著みんなのPython 第四版の改訂向け執筆を終えた。

初版の発売は2006年で,今年はちょうど10年目になる。そこでふと,もしPythonを使っていなかったらどうなったろう,と考えてみた。そして重大なことに気づいた。

みんなのPythonを書く少し前,2005年ごろの僕は,今以上に後先考えないで行動するオッサンだった。当時まだ日本では無名に近かったPythonのより新し情報を仕入れ,本場のオープンソース関連カンファレンスに行って技術の成長点の雰囲気を味わうべく,ワシントンDCで開催されたPyCon USに行ってみよう,と突然思ったのだった。今以上に英語ができなかった僕は,頭がキレッキレの第一線級エンジニアが繰り出す早口の英語トークも聞き取れるはずもなく,おまけに機内で米国人のパーサーにコーヒーを頼んだらコーラが出てくるような始末であった。

2016-11-25 12:00 Read More
Pythonのプログラムをワンライナー化するOnelinerizerがいろんな意味ですごい

Pythonのプログラムをワンライナー化するOnelinerizerがいろんな意味ですごい

Pythonのプログラムを構成する要素には大きく分けて「式(Expression)」「文(Statement)」がある。式とは演算式や比較式,オブジェクトのリテラル,関数呼び出しなど。一方,文は,if文,for文や関数定義,クラス定義やモジュール/パッケージのインポート,そして代入,など。式は改行を要求しないので,一行にいくらでも連ねることができるけど,文は改行や,しばしばインデントを伴うブロックを要求する。

Pythonは文と式がきっかり分かれている。そんなわけで,Pythonではプログラムを一行で書くいわゆる「ワンライナー」がつくりにくいと言われている。Pythonでワンライナー作るとき,文をいかにして式に変換するか,というテクニックを駆使することになるんだけど,lambda式を駆使したり名前空間を無理矢理貪ったりするような技巧の数々はたいてい変態的で,だからこそプログラマの魂を揺さぶって一定の人々の興味を常にかき立てるのかも知れない。

ここで紹介するOneliner-izerは,Python2のワンライナーに斜め上から挑戦したツール。スクリプトを食わせると,文法解析して自動的にワンライナー化してくれる。

2016-11-09 17:00 Read More