プログラミングに関する資質(について思う事)

プログラマとして重要な資質は何か、といったことを考えながら記事を読んだ。

以下の記事が僕の周辺で幾らか流行った。

プログラマに向かない人によくある6つの特徴 | LifeHacker
http://www.lifehacker.jp/2014/12/141210programmer_signs.html
原文:6 Signs That You Are Not Meant To Be A Programmer|MakeUseOf
http://www.makeuseof.com/tag/6-signs-meant-programmer/

この記事を僕は、プログラマとして重要な資質は何か、といったことについて考えながら読んだ。
確かに誰にでもその資質が充分にあるわけでないと僕には思えるが、しかし職業的に僕は入学してきた学部学生の全員に必修としてプログラミングを教えている。つまり資質が無い人はそれを無理に強いられていることになる。

なお、元の記事にあった 6 つのサインは、

  1. 実験的創造性に欠けている
  2. 自主的に行動するタイプでない(成果を得るために作業を厭わない内なる情熱が必要だ、といったこと)
  3. 論理的な問題解決が好きでない
  4. 長時間座っていられない
  5. 普通の勤務時間を望んでいる
  6. すぐに大金を稼ぐつもりである

で、このうち後半はどうにも説得力が無い、というコメントが当初ついたが、僕はそれらについてはほぼ無視して、1. 2. 3. で語られたことにだけ集中して考えていた。これ以降を読む人もどうか後半のことに引っ掛からないで進んでほしい。

なおこのノートは2014/12/11 に投稿した(アクセス制限あり)以下の記事から再構成したものである。
https://www.facebook.com/yutaka.yasuda/posts/10203843812908607
例によってツラツラと書いているが、なるべくそのままここに収めておくことにする。 (当時コメントいただいた何人かの方はお名前を出すことを快諾いただきました。感謝です。)

======

Yutaka Yasuda :
  1. はまあちょっと放っておきましょう。
  2. は普遍的な話、あるいは絶対的に正しい話ではないでしょうが、ありがちなことだとは思います。特にこの人の周辺では良くあったのでしょう。1. - 3. までのことを考えるに至った動機だったのかもしれません。
    いずれにしても僕はこの種のものは「全てが正しい場合にだけ全てを受け入れる」態度では読まないので、あまり気になりません。
    それより 1. - 3. までのことについてうーんと考えてしまいます。。。(職業上の理由で)

僕が気になるのはつまり自分がやっている「全員」に「必修」で「専門」としてプログラミングを教える、ということです。
この時代になってもプログラミングについてほぼ経験が無い状態で情報系学部に入ってくる率は高いです。とても高いです。
「ほぼ経験が無い」というのは例えば言われたとおりに書いたら動いたことを「観測」した、とか、「縦のものを横にした」ことを「プログラムを作った」と思っている、というものを含めています。
それらは「操作」であって「プログラミング」というものが求めている「思考」とは質が異なるはずだ、と思うからです。

なお、僕が学生だったとき、指導教員だった先生から面白い事を教わりました。量は質に転化できる、ということです。その時と文脈は異なるでしょうが、例えば「操作」も一万回やれば「思考」に相当するところに到達するだろうといった話です。読書百遍。
(二十台の僕は「質が異なる」ことは決定的だと思っていたが、実はそうでも無いらしい、というおはなし。。。)

Kenji Rikitake :

アルゴリズム作らないと×ですね. > プログラミング
原文はわりとまともに見えます http://www.makeuseof.com/tag/6-signs-meant-programmer/

Yutaka Yasuda :

専門として教える、というのはつまり 1. 2. 3. の裏側にある(恐らくはプログラミングを創造的な作業として肯定的に取り組んでいる人たちの多くが感じているであろう)重要な資質について真正面から問いかける、ということになります。これを抜かしてしまうとそれはただの手習い、体験、操作、にしかならない。(*1)
言葉として直接的に言う事もあります。デモ(提示)を通じて、あるいは課題(体験)を通じて感じさせる(させようとする)こともあります。

*1 に、しかならない、と言っていますが、定量化してゼロになる、という意味ではありません。値がとても低くなる、という意味です。比較の対象も明確ではないので曖昧に読んでください。(たまにそのあたりで食いついてくる人が居るので)

Kenji Rikitake :

1~3って,プログラミングに限った話ではなくて,今の時代に社会人やるなら,ないと生きていられない話じゃないかなあ.

Yutaka Yasuda :

力武さん:そこを僕は気にしています。少し書きます。

こうあります。

優れたプログラマになるには、目的に向かって自主的に行動しなければならず、他の道はありません。本質的でない細かいものをすべて取り除けば、プログラミングは基本的に反復作業です。書いているコードに、何か個人的な情熱や野心がないのであれば、みじめな気分になるだけです。 このことは、あらゆる創造的な取り組みに対して当てはまります

短絡的に上の記述のプログラミングに関する部分を、○×△などの伏せ字にして潰してみただけでも、なるほどかなり多くのことに当てはまりそうです。

僕は余り職業体験が多くなく、趣味的にも頑張ってやり続けたことが少ないので何ともなのですが、例えば(趣味的な、事務的でない)文章を書く、とか、絵を描く、といったことで考えれば、確かに僕はそれらの作業に非常な長期間(特に若いとき)、大量の時間を突っ込んでおり、ヘタクソでもなんでも、とにかくその成果物や、その作業過程にとても強い情熱を掛けてやっていました。

もしあれが自分の中からわき上がるそうした情熱なしに誰かから強いられ、時間を突っ込まされた体験だったとしたら、僕は確かに「みじめな気分になるだけ」だったでしょう。 そして僕はいま、学生たちにそれを強いているのでは無いか、と思ってしまうのです。

Kenji Rikitake :

あえて高尚な話ではない方向へ持っていくと(すみません),最近は「恐怖」と「怒り」が原動力なんですよねえ.馘が飛ぶ恐怖,お客さんからの信用を失う恐怖,そして最近は正当と思えない手段で高い地位を得ている人達への怒り,かな.でも,本当の原動力は,面白いと思って時間を忘れて取り組めるかどうかなんだろうと思います.

Masahiro Mizuno :

プログラムにかぎらず教育とはそういうものだ。というのは暴言?

Yutaka Yasuda :

学生の誰もが 1. 2. 3. に挙げられた資質について positive であるとは限りません。というかまあ有り体に言うと、資質が疑われる学生が相当数います。当然です。
(入り口(入試)ではそこを重視せず選抜し(ほぼランダムサンプリング?)、出口(卒業)では企業(*2)はそこを見て選抜する(資質の無い奴は振り落としたい)わけなので、その間に挟まれる人が相当数居るのは必然)

*2 元の記事は職業プログラマが対象だと僕は解釈しているので企業からの評価を重視して書いていますが、もちろん大学で学ぶ意義は就職競争上優位に立つことが第一ではありません。

Yutaka Yasuda :

力武さん:だははは。いや実際そうで、教室で幾ら僕が言っても(分かりやすく言っても、優しく言っても、励ましても、厳しく言っても、圧力を掛けても、突き刺さるような言葉を選んでも)まあ聞かないですね。
でもそんな人たちも仕事に就くとどえらく上司の言うこと聞くみたいですね。

社会科学系学部の教員から昔に面白い事を聞きました。
「学生は就活が終わるとずいぶんちゃんと言う事を聞くようになる。(命令に従順に従うようになる、という意味ではなく、話を理解して反応する、という(当たり前の振る舞いをするようになるという)ことです)だから四回生じゃ無くてもう一回生とか二回生くらいにあれやって(人間が変わって)くれれば、もっとちゃんと学べるし良いことづくめなんだけどなあ」 と。(半分冗談ですよ)

Yutaka Yasuda :

水野さん:ある程度そうだと思います。で、僕が気にしている(書こうとしている)ことはつまり、それが一般的なことだとしても、プログラミング、という分野はその「強いてしまう」ことが「より強い」分野だったりしないか?という点です。
つまり資質の差がより大きく出てしまう分野なのではないか、と。

Masahiro Mizuno :

わたしは英語の授業も学校休みたいほど辛かったからなあ。つらいねえ。なんらかの正解があって(構文とか)それを組み立てなければいけないけど、それができない恐怖とかだな。それはつらいのよ。目的がなにかを動かすだったり伝えるだったりでそれが達成されればそれでいい。という状態にならないとつらいかもしれない。

Yutaka Yasuda :

さっき上に自分の例として挙げた「文章を書く」「絵を描く」といったことと比較してみても、どうも他の人の能力(成果)と 10 倍違う、100 倍違う、という印象は無いです。でもプログラミングってそういうのが強烈に出てしまうのではないか、と。

コンピュータがもつ(特に個人の)知的能力を拡大するメディアととしての性質をアラン・ケイは強調していましたが、まだインタフェイスも未熟で、そこまで達 していない今のコンピュータを前に、その性質に最も直接的に触れているのがプログラマなのではないか、と思えてしまうのです。

Yutaka Yasuda :

水野さん:僕は体育とか音楽とかが嫌だったですねえ。。
英語も中学ではじめて this is a pen とか言わされた時からずーーーーっと 3 (五段階評価)でした。
ああ、そうか、自分がニガテだった例えば英語で詩を書けとか言われていると思えば良いんですかね。資質の無い学生が「必修」で「専門」として「やれ、お前はやるしか無いんだ」と言われている気分を理解するには。

Yutaka Yasuda :

つまり音楽的感覚が全く無い自分が音大に(英数国で受験して)入学して、そこの演習で教員から「作曲して演奏できるようにしてこいよ、何でお前はやらないんだ?」と毎週言われるような状況になる、ってことだよねえ。。。うーん。。。
もし情報系が「資質の差が影響する度合いが大きい」分野だとすると、情報系学部は(音大ほどではないにせよ)自身に内在する情熱が無いと来ちゃいけないところなんだよ、とアピールするべきなんだろうなあ。。。

ここで僕は滋賀教育大が作っていた「君へ」というパンフレットを思い出してしまう。。。
https://web.archive.org/web/20130502044823/https://www.edu.shiga-u.ac.jp/topics/kimie2013.pdf (Internet Archive)

Masahiro Mizuno :

最近あった情報系大学院生はプログラム一行も書けなかったけど、大手メーカに入社が決まってました。(だからいいのかな?)

Yutaka Yasuda :

水野さん:そこはちょっと厄介な話で、

  1. 僕は何にせよダイバーシティ、あるいは振れ幅が大事だと思っているので、そういう学生がこの分野に居て評価されることは良いことだと思います。
  2. ただしそれらは少数であるはずで、それが大多数を占めるようになると話が別です。(水野さんもその院生を「少数派」としてここに取り上げてはると解釈しています。もしそれが(ストレートな情報系学部で)「多数派」という事であればまた話が変わります。)
  3. しかし多様性が大事と言いながら、全ての科目を「選択」にすると、学生は自分の興味や好奇心などと無関係に、むしろ「自分の能力が上がらない方向(≒自分にとって易しい内容)」で科目を選択します。結果的に大多数の学生の出口での能力はより低くなる(あるいは出られない)でしょう。(一部の大学では全く自由に学生に科目選択させていますが、僕のところでそれをやる勇気は湧きません。)
  4. 結果的にプログラミングのような「自分にとって未知の領域」で、「ヒーコラ言いながら時間を費やす演習」などは「必修」とせざるを得ません。

すると、このスレッドで僕が注目している「自分は(かなり多くの学生たちに)「みじめな気分になるだけ」のことを強いているのではないか」という点に着地するわけです。

Kenji Rikitake :

まあ,本来,情熱を内在できない人は,知識階級たり得ないんでしょう.言われたことだけをやる労働者になってしまうんだろうと思います.この(少なくとも西欧社会では当然の)価値観を否定し続けてきたことに無理があるのは事実でしょうね.
最近は「食うために」「学歴を必要としない」プログラマになる人達も多いので.

Tetsuji Koyama :

最近もなにも、私が就職した90年代からソフトウェア業界は「文系の墓場」と呼ばれてましたw

Kenji Rikitake :

最近は大学に行ってない人が多い印象があります.もちろんその中には非常に優れた人達もいるんですが,数としては少数だろうなあ.

Yutaka Yasuda :

小山さん:墓場!(^_^!)

Yutaka Yasuda :

力武さん:僕もその価値観に囚われているってことなんですねきっと。。。
(情熱は無いがしょうがないからやるんだ、それしかないだろお前、という気では居るんですが、学生がどうもそれを受け入れない、という印象がつよいです。。。僕が子供の頃は「つべこべ言わずにやれお前」でシバかれながらやらされたのですが、今はそれがダメらしくて。)
(たぶん水野さんが言う「**にかぎらず教育とはそういうものだ」というのはこの「つべこべ言わずに」が内包されているのだと思っています。僕はそれに対して肯定的ですが、なんせ相手のある話でして、、、)

Kenji Rikitake :

受け入れなきゃ落とされるだけですけどね.まあ落ちてから立ち上がるというステップが必要であれば,それはそれでいいんですけど.

Yutaka Yasuda :

ミクロに見るとその通りのこと(受け入れず落第)が起きているわけですが、全体として「充分有効にその方向に舵切りできる」ほど腹をくくって受け入れてもおらず、その境界線あたりを閾値に設定して落第させると留年者が多くなりすぎて経営上無理、というような(半端な)状況ですね。。。
まあ教学の方向性や閾値は今回僕が取り上げたような方向だけではなく(経営上とか言ったことを抜きにして純粋に教育面だけで見ても)、多様なパラメタを混ぜて煮た結果として出てくるので、必ず半端なものになるんですけどね。。。

今回の記事を見て、いま僕が思うのは、さて学生にこれを題材にして何か(自分の思うことを)伝えられないだろうか、ということです。
ふーむ。。。。



Yutaka Yasuda

2014.12.12