見出し画像

プログラミングできたほうがいいですか?

「私もプログラミングできるようになったほうがいいですか? そのためには工学部や計算機科学を出ないといけませんか?」

と、インターンに尋ねられた。「はい、できたほうがいい。いいえ、大学での工学教育は必ずしも必要ない」と、答えた気がする。とはいえ、ちょっと補足したいなと思ったのだけれど、打合せのもうひとりの参加者が「お待たせしました」と現れたので、プログラミングの話題はそれっきりになった。

インターン期間はもう過ぎて、その人は職場にいないんだけど、似たようなことを親戚とかから聞かれることがあるので、書き残しておこうと思う。

だるい作業

そのインターンの仕事の一部に「つぶやき系サービスのグループチャットにたまった情報を抽出する」というのがあった。そのサービスのグループチャットのデータを取得する API というのがない。なので手動でやっていたのだ。

並行してインターンを指導していた同僚から、なんとかならんかと相談されていた。取得しやすいところに保存したらいいという正論はありつつも、すでにグループチャットにデータは溜まっているのだ。

というわけで、私は簡単な Chrome Extension を作った。地味なUIで、閲覧中のチャットログのテキストを抽出するだけだ。

インターンはよくできた人なので、私に謝意を述べ、冒頭の質問となった。場繋ぎの雑談だったのかも知れないけど。

プログラミングできたほうがいいですか?

たしかに私がやったことは、プログラミングと呼ばれる行為ではあるけれど、たぶん「プログラミングできたほうがいいか?」という質問は、インターンが知りたいことから少し離れていると思う。プログラミングの勉強と、チャットのログを取得する Chrome Extension の作成は、ちょっと遠いから。

本人に確認してないし、もしかしたら、本人も自覚してないかも知れないけれど、インターン本人が知りたかったことは「私の作業を機械にやらせる技能を習得すべきかか?」ではないか。知らんけど。

であるならば、ある程度できたほうがいい。平社員として会社員キャリアを始めるならば、なおさらだ。スプレッドシートの不整合を、目で見つける、などというどうしようもない作業が、世の中には存在し、それは機械にやらせることができる。多くの場合、機械のほうが正確だ。

ただ、そのために必要なのは、映画なんかのステレオタイプ的な、キーボードパチパチ叩いてるプログラミングではない。たぶん、プログラミングの入門書を買っても、すぐには実現できない。と思う。

この記事から引用すると……

アスキー若手: ここまでずっと話を聞いてて思ったんですが、そもそも、ここにあるJavaの入門書を読むと何が作れるようになるんですか?
遠藤: あー、それはぜひ聞きたいよね。一冊ずつ、これを読むと何にができるようになるのか。
矢澤・高橋・鹿野: いや、どの本も、そもそも何も作れるようにはならないですね。
アスキー若手: え?  

Javaというプログラミング言語の入門書が役に立たないということではない。ただ、ちょっと遠いのだ。

じゃあ何をすればいい

Excel とかスプレッドシートを使う機会が多いなら、まずは基本的な関数、VLOOKUP、ピボットテーブル。その後、気が向けばマクロだろうけど、そうなると、だいぶプログラミングっぽい。

所属する組織が許すなら、IFTTT や Zapier あたりを使うと、仕事が便利になりそう。iPhone ならショートカット、mac なら Automator とか。

Trello みたいなのを使うと、プロジェクト管理という問題ドメインに必要な情報をそこそこ構造化して扱えるようになるだろう。Trello の Butler を使えば、簡単な自動化もできたりする。

大学レベルの理工学教育は、かならずしも必要ではないと思う。そりゃあると便利なこともあるかも知れないけど。それよりも、自分が解決しようとしている課題を分解できるとかいう、基本的なことが大事だと思う。ダイクストラおばちゃんほどの素質なんていらない。

理工学部教育って何の役に立つの?

じゃあ工学部の知識は役にたたないかと言うと立つ。立った。計算機科学はサイエンスなので、いちおうここでは理工学部って書いておく。あと、応用数学なる分野は理学部だろうけど、工学的アプローチの分野だと思う。つまりは「理系」の話だ。

私はエンジニアリングという活動を「科学的知識や方法論を使って、実世界の問題を理解、解決、運用する」と定義している。異論は認めるけど、この記事では、この定義でいく。

私が受けた工学教育というのは、たとえば原子力工学だったら、核反応、放射線防護、熱流体力学を使って、安全で効率のより原子力発電設備を設計・評価できることが主たる課題だった、と思う。もちろん建築とかプロジェクト管理とか、いっぱい絡んでくるんだけど。とにかく抽象化と具象化を行ったりきたりする必要がある。

そのへんのことは、 @tokoroten がまとめている。

現実の問題を、形式的に表現して(数式にして)、数学領域で解いて、現実の問題として解釈する。ソフトウェアなら、問題をモデル化してプログラムで解く、って感じ。

りんごを165個持っていて、2つ追加で買いました。りんごは何個ありますか? という現実の問題を、数学的に表すと、

165 + 2

となる。で、この数式にしてしまえば、りんごのことは一旦忘れて、数学的問題だけで考えればよい。

165 + 2 = 167

で、現実に戻ってきたら、これは 167 個と解決する。

別の問題を考えよう。私の去年の身長は 165cm でした。今年は2cm 増えました。今年私は身長は何cmでしょう? 数式にすると、

165 + 2

である。りんごと身長で同じ数式になってしまった。数学領域で解いている間は、りんごも身長も忘れていい。

この例はあまりにしょぼいんだけど、工学っていうのは、そういうことをやってる。数式化・モデル化するときに、現実世界、つまり科学的知識が必要になる。それをモデルに変換する。数学やプログラミングで解く。結果を現実世界に戻してくる。

学校教育の数学でやってる「直線L上を移動する点P」とか、プログラミングの入門書というのは解法をカバーする。その解法を役立てるには、モデル化が必要なのだ。「たかしくんが出かけて10分後に、追いかけるはなこさん」というのはモデル化の練習だ。と思う。

工学教育は必要か?

工学教育を受けることの最大の恩恵は、まとまった時間をかけてモデル化の練習を真剣にする機会があり、かつ、その評価を得られることだと思う。それは他の方法でも得られるだろうし、そんな人はいっぱいいる。人文科学系の教育だって、似たようなことをやってるだろう。

(日本のプログラミング教育っていうのが、どこに行くのかよく知らないんだけど、こういう考え方ならいいんじゃないかなーっと、漠然と思っている)

モデル化と解法の両方がそろったら、計算機で解決できる、っていう感じが分かってると、発注する時なんかも便利じゃないかなーって思うんだけど、どんなもんでしょう。

あとまったく別方向の考え方として、政治とか経済の力で、人を動かること振り切る人だっていると思う。この場合は、必ずしもプログラミングは役に立たないかもね。知らんけど。

メリークリスマス

pyspa  Advent Calendar に書こうかと思ったんだけど、もはや最終日の 12/25 しか残ってなかった。トリを飾るような内容でもないので、だらっとここに公開する。


この記事が気に入ったらサポートをしてみませんか?