Feb. 2020

Last Modified: Sat Mar 7 00:43:05 UTC 2020

Oops! Not again! 2020-03-07 [Sat] 08:58

…とかなんとか言ってるうちにまた書く時間がなかった。 クセつけないとダメだな。

よく数学とコンピュータプログラミングの関連性について言われるが、 新山は「数学が得意」なのと「プログラミングが得意」なのは それなりに相関があると思う。 しかしそれは世間の人々が考えている理由ではない。 おそらく世間一般の論調というのは、 「プログラミングに数学が必要だから数学は重要」 ということなのだろうが、それはプログラミングの経験がない素人の考えである。 通常のプログラミングで数学的な知識を使うことはほぼない。 実際の因果関係は「数学 → プログラミング」ではないのだ。 むしろ、これは「2つの分野になんらかの共通する 基本スキルがあって、それが数学とプログラミングを両方得意たらしめている」 と考えるべきだ。つまり、因果関係はこうである:

…しかし、実はこの認識も正しくない。 なぜなら「数学」は比較的狭い (よく定義された) スキルであるのに対して 「プログラミング」の定義はかなり曖昧で、 「設計」も含んでいる可能性があるからだ。 より正しくはこんな感じである。

新山の理解では、コーディングはプログラミングの一部ではあるが、 ものすごく低水準のスキルである。これより上のスキルとしては:

  1. アルゴリズム、データ構造の設計能力
  2. 問題を定義し、サブ問題に分割する能力
  3. 不具合を追跡し、原因を発見する能力
  4. 人間に理解しやすいコードを書く能力
  5. ソースコードの書式や名前の一貫性を保つ能力
  6. 大規模なソースツリーを管理する能力
  7. プロジェクトの進捗を管理する能力
  8. 複数人のチームをまとめる能力
  9. ステークホルダーの利害関係を考慮する政治的能力
…等々が必要である。最後のほうは「プログラミング能力」とは言えなくなっているが、 これらはどんなプログラミングにも必ず (程度は小さくても) 存在する。 Weinbergは「バグを発見する能力と、 (単なるハックではない) 正しいfixをする能力はまったく別」 といっていた。これ以外にも、データベースや セキュリティ関連のためにはさらに別の能力が必要だが、 さすがにそれは「プログラミング能力」に含めなくてもいいだろう…。 で、実際には、数学と共通する「なんらかの基本能力」がサポートできるのは 一番低水準のコーディング能力だけであって、それより上の能力は 保証されていないわけだ。だから「数学ができる」人がみんな 「よいプログラマー」になるとは限らないのである。 (むしろ、高水準なスキルがないプログラマーは非常に悪いプログラマーになりうる。)

で、結論はなんなのか? 「数学がある程度できれば『プログラミングの基礎』でつまづく危険性は低いだろう」 とゆうこと。だがそんだけだ。 しかし、たとえ数学が苦手でも e.〜i. のような高水準のスキルがある人は いるかもしれない。なぜならこうした能力は「パズル的な思考力」のようなものとは かなり違っているからだ (とはいえ、ある程度の論理的な分析力はあいかわらず必要だろうけど)。 つうことで「数学が苦手でも SE にはなれるかもよ」ということになる。 問題は、「プログラミング」と一言でくくられる作業にはこうした沢山の 要素があることを世間が知らないことである。これは、CS業界の啓蒙不足であると思う。

あああ 2020-02-13 [Thu] 10:22

またしばらく時間がなかった。 ところで (てくるで)、ヒッコシについて今回学んだこと:


Yusuke Shinyama
Document ID: e7e0eaba32e068a3969b7dd9a033945e