Lean Baseball

No Engineering, No Baseball.

退屈なことはPythonにやらせる...前に考えるべきこと

機械学習, データサイエンスを志向してPythonを勉強したり,この辺のエントリーで本を読み漁ったりすると*1,

もしかして, 私の仕事ってプログラミングで楽になるのでは!?

と気がつく(もしくはそういう記事・本を読んで触発される)瞬間があるかと思います, この本とかあの本とか.

このエントリーではそんな素晴らしい学び*2に対して,一つの回答を示してみたいと思います.

TL;DR(ここは読んでほしい)

言いたいことは以上で,なんとなく合点が行ったら本を読んで勉強しましょう(真顔)

おしながき

ノンプログラマー向けPython本 #とは

ここで言うノンプログラマーは,

  • プログラミング(またはPython)初心者・初学者
  • プログラミングを通常業務としない方々

を対象にしています.

退屈なことはPythonにやらせよう

巷では,オライリーの「退屈なことはPythonにやらせよう」という本が流行っています.

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

実際にとても良い視点の本なのですが,

  • メールアプリ(Mailer)の自動化っていまどきニーズあるの?とかユースケースに多少疑問がある*3
  • マウス&キー操作の自動化で切り抜けるのって「ノンプログラマー」的に無駄にリスクあるんじゃね?*4
  • 途中, 「sudo ほげほげ」ってコマンド出てくるのやばくね!?*5

いうのがメッチャ引っかかっています.

ってことで,私としては「できる仕事がはかどるPython自動処理 全部入り。」の方を合わせてオススメしたいなと思っています*6.

できる 仕事がはかどるPython自動処理 全部入り。 (「できる全部入り。」シリーズ)

できる 仕事がはかどるPython自動処理 全部入り。 (「できる全部入り。」シリーズ)

  • 作者: 森本哲也,中野正輝,池徹,岡田幸大
  • 出版社/メーカー: インプレス
  • 発売日: 2019/05/24
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

Python自動処理 全部入り。

この本はちょっと興味あって(&筆者も知ってることもあり*7)手にとってみました.

個人的に「いいなあ」と思ったのが,

  • 最新のPython(3.7)ベースで紹介&書かれている.
  • カラーかつ大きい字で見やすい,コードも読みやすい.
  • ユースケースが普段からやるようなことに注力しており,現実的に使うイメージが湧きやすい.
  • 危険な設定・インストール作業,特にsudoしたりするところがなく安心して真似を勧めることができる.

一通り,手元の仕事をPython(に限らず他のプログラミング言語)で自動化してる方(私もです)には退屈な内容かもですが,

初心者やプログラミングに興味を持った方には自信を持ってオススメできる内容です.

できる 仕事がはかどるPython自動処理 全部入り。 (「できる全部入り。」シリーズ)

できる 仕事がはかどるPython自動処理 全部入り。 (「できる全部入り。」シリーズ)

  • 作者: 森本哲也,中野正輝,池徹,岡田幸大
  • 出版社/メーカー: インプレス
  • 発売日: 2019/05/24
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

というわけで,「退屈なことはPython〜気になる」方はぜひ合わせてこちらもチェックするといいんじゃないかなと思っています.

退屈な作業とプログラミング

とまあ,プログラミング(Python)の視点でいうと本の感想だけでもいいのですが,

そもそも「退屈なこと」ってなんやねん?(&ホントにみんなプログラミングする必要あるの?)

という疑問が湧いたので,ちょっと整理してみました(=このブログの真に言いたいことでもあります).

f:id:shinyorke:20190715122226p:plain
作業とプログラミングを整理するマトリックス

自分はいつも「作業が退屈かどうか」「プログラミングをやるべき(教えるべき)かどうか」をこんな感じで整理してるよ!っていうマトリックスです.

その作業は退屈ですか?

目の前の作業・タスクの整理という視点です.

  • 作業回数(頻度)が多い・少ない
  • 属人性が無い・ある(または,機械に置き換えできる・できない)*8

という視点でのマトリックスです.

かなり退屈な作業

「回数が多い」「属人性がほぼ無い」もの.

圧倒的に「退屈なことはプログラミングで解決すべき」領域です!

  • 毎週数百個のExcelファイルをコピってパワポを作る作業があるんだけどね
  • メーリングリストを決まったアドレスリストに送りたいなー

みたいな作業はまさにプログラムが得意な仕事です.

リスクある作業

「回数が多い」「属人性がある(と思われている)」もの.

この辺はリスクが潜んでいるので因数分解してみましょう

もっと言えば「リスクあるんで今すぐ解くべきイシュー」とも言えます.*9

というのも,

  • 「属人性がある!」と作業する本人は思ってるが実際そうでもない可能性がある*10
  • ホントに属人性がある場合,そもそも回数が多いことが問題.「今すぐ解くべきイシュー」である.

これを処置するだけで,

  • 属人性がなくなれば「かなり退屈な作業」になり,プログラミングによる自動化が有効になる
  • 回数が減れば「箸休め」的な仕事になり,そもそも問題・リスクになる可能性が低くなる

ので,真っ先に解決しましょうと.

あと,この手の仕事はもう一つのリスクがあって

実は「仕事ごっこ」なのでは?

という疑惑もあるので疑うようにしています.

「仕事ごっこ」の定義はこちらの本にあるのでぜひ読んでほしいのですが,

仕事ごっこ ~その“あたりまえ

仕事ごっこ ~その“あたりまえ"、いまどき必要ですか?

仕事のスピードを遅くし、時間をムダにし、成長機会を奪い、社外の人とのコラボレーションを邪魔し、優秀な人を遠ざける慣習やルール

これに「あっ」ってなったら行動を起こしましょう.*11

箸休め的な作業

「回数が少ない」「属人性がある」もの.

たぶんですが,大事な仕事じゃないのでそっとしておきましょう.

こういうのをたまにやる仕事として残すもの悪くないと思います.

「仕事ごっこ」じゃなければ.

そこそこ退屈な作業

「回数が少ない」「属人性がほぼ無い」もの.

プログラミング初心者の方だったら練習台としてちょうど良いはずです!

なぜなら,しくじっても対してリスクが無いかつ,作業もプログラミングも次の学びに活かせるから

ただ, 回数が増えたらリスクなのでそこのウォッチはお忘れなきよう.

プログラミングすべきですか?

プログラミングするかどうか?と迷っている本人的には「自分がプログラミングに向くか否か」

「プログラミング教えて!」と言われている方は「この人はプログラミングに向いてるか否か」

という視点で見ると良いかもです.

軸はシンプルで,

  • 学ぶこと(勉強すること)が好きか嫌いか
  • 自分は怠け者か働き者か

これだけです.

勉強好きの怠け者

圧倒的にプログラマー向けなのでプログラミングをやったほうが良い

プログラマーの三大美徳は「怠惰」「短気」「傲慢」とはよく使い古された表現ですが,その中でも重要なのはやっぱ「怠惰(怠け者)」で,コンピュータに仕事を任せるためプログラミングをやる!というのがやっぱ正しい姿かと思っています.*12

とはいえ「怠ける」ためにはたくさん勉強したりコードを書くのが必要なわけで...ってここまで書くと自明かなと思います.

勉強好きの働き者

じつはちょっと惜しい感じの人達です.

コンピュータに仕事を委譲するだけで楽になれます

忙しくて手が回らない...のであれば,「これってホントにプログラミングできないかな?」と思考を変えるだけで幸せになれる.

勉強好きであればきっとすぐ気がつくでしょう.*13

勉強嫌いの働き者

一番やっかいな人たちかもしれない.

「仕事大好き」はいいけど,それって「仕事ごっこ」かもよ?

「働き者」なところのリソースを「勉強」に回すだけで幸せになるはず.*14

ただ,これができないとなると「圧倒的にプログラミング向きじゃない人」だと思っています.

勉強嫌いの怠け者

これもちょっと惜しい人たち.

勉強することでホントに「怠け者」になれるので勉強しよう

プログラミングの楽しさ・便利さを知ると一気に伸びる可能性が高い.

なお,「プログラミングの楽しさ」を教える際はこのエントリーが参考になります(手前味噌).

shinyorke.hatenablog.com

退屈なことはPythonにやらせる...前に考えるべきこと

私なりに,一言で言うと

「ホントにそれ,俺がやる必要あるの?(プログラミングでいけるorそもそもやらなくてもいい)」

っていう「入り(初球)」からはじめてみることかな?と思っています.*15

機械学習, データサイエンス, WebがやりたいからPython...の前に自動化を!...って熱く考える前に,目の前の事の真実をいくつかの切り口(今回は回数と属人性, 勉強好き嫌い, 働き者か怠け者か)で見てみるといいかもです,視点は人それぞれ合っても良いですし.

日々のお仕事・つまらない作業でバタついてる人たちの参考になれば幸いです.

おまけ「CSV・Excelでの作業を33分4秒で自動化させる」

のであれば,やはりpandasを使ったほうが早いです.

これは本を読んでもいいですがこんな参考資料作ったのでそっちをご覧いただければと思います(手前味噌パート2).

shinyorke.hatenablog.com

ホントに334で出来るかはアレですが(#NHK), 気になる方はぜひ挑戦を!

*1:当エントリー執筆者としては嬉しい悲鳴です,ほんとありがとうございます :bow:

*2:これに気がつくのはある程度プログラミングを実用できてる証拠なのでいいことです,ホントに素晴らしい

*3:エンジニアの作業だったらまあわかるのですが,「ノンプログラマー」がやる仕事としては高尚なのでは感ある&今どきであればG Suite使ってるトコ多いハズなのでAPIで良いのではというのもあり

*4:これもレベル的にはエンジニアがやったほうが良いと思いました,安易にキーボードとマウスの操作をノンプログラマーがプログラミングで解決って危ないなと

*5:ノンプログラマーに管理者権限って(震え)

*6:退屈なことは〜は悪い本じゃないのですが,前述の通り真似していいの!?っていうポイントや,ちょっと前の本なのでそのまま真似するリスクが若干あり自信を持って勧めるのはキツイなあと.

*7:信頼できる,腕が立つエンジニアな人たちの執筆というのも気になるポイントでした&さすがのクオリティに拍手!

*8:ノンプログラマーに耳慣れない言い方だと「再現性の有無」ともいえる.エンジニア的にはこっちのほうがしっくりくるかも.

*9:作業そのものというより,仕事の仕方やチームそのものに問題ある可能性があるので「イシュー」になるという認識.

*10:例えば,取引先数百社に書類を送付する仕事があったとして,プログラマー思考だと「送付先をExcelなりCSVで作ったら封筒印刷は自動化できる!」と考えるのですが,世の中には「住所が全部違うからここは俺がやらないと!」と考える人もいるわけで(両極端な例ですが世の中そんなもんです)

*11:「仕事ごっこ」の本筋はこのブログでは触れませんが,退屈なこと,との相性は高いと思います.

*12:残る「短気」と「傲慢」も実は大事.これが揃うとコミュニケーションどうやねん?的な疑念を持つ人もいますがぶっちゃけコミュニケーションは言語化力が高ければ短気な人でも傲慢な人でもどうにかなります.

*13:あとはマインドセットを変えることも大事.忙しいのは美徳じゃなくて恥だよ,的な

*14:仕事に喜びを感じてる人の多数がここのイメージなのでちょっとこわい

*15:つまり,イシューからはじめよと.