春は始まりと諦めの季節

no extension

私,こういう話好きです。 いや,話の内容じゃなくて,こう果てしなく話が横滑りしていく感じ。 これって「喫煙室トーク」や「居酒屋トーク」なんかの原点じゃないのかなぁ。 こういう,一見中身がなさそうに見える「おしゃべり」の中から「情報」の上澄みを漉し取るのが「読解力(literacy)」ってやつだよね,と思ったり。 容易に横滑りするので,会話を誘導するのも楽だったり(笑)

さて,「新社会人へのアドバイス」だが,私も特に語るようなものは持ってない。

まぁ,場末の「流しのプログラマ」に過ぎない私が会社の歯車たろうとする新入社員たちに語る言葉など持ち合わせてる筈もないのだが,それ以上に私は今でいうところの「就活」なるものを経験してない。 いわゆる「同期」や「同僚」はいないし,それゆえに「先輩」も「後輩」も存在しない(もちろん生物年齢としての「目上」や「目下」,またヒエラルキーの上位者や下位者の知り合いはいるけど)。 私には語るべき対象が存在しないのだ。

でも,他の方が書かれていて「ほほう」と思うものはある。 たとえば

みたいな話。

プログラミングができない人に共通することは、「自分のできないことをやっている」ことでした。教科書に乗っているコードを書き写してはいるのですが、それが何を意味するかがわかっていません。ただ、教科書に書いている文字をタイプしています。そんな方々は、コードが動かなくなった時は対応しようがありません。「なんか動かないんですけど、どうしたら良いですか?」と、自信をなくした目で周りに助けを求めるしかありません。
やっと分かった。プログラムができるようになるためのたった一つの方法。プログラミング入門者に向けて。より

たとえば学生時代,必死で数学の公式を覚えようとする人がいた(私は理数科にいたので,クラスメートにはそういう非効率なことをする人はいなかったが)。 仕事でも,どこかから拾ったコードを丸写しして「動かない」と悩んでいる人がたまにいる(そういえば昔,すでに辞めた人が書いた一見それっぽいソースコードが動かないので中身をよく見てみたら「それっぽい」だけで,まるきりでたらめなコードだったという「怪談」があった)。

今まで,なんでそんな無茶をするのか不思議だったが(私は薄情な人間なので,そういう人に助けを求められたら「向いてないから止めた方がいい」と言っていた。いや,出口のない悩みで悶々とするくらいなら,すっぱり諦めて他のことをしたほうが生産的だし),

対して、プログラミングができるようになる人は、うまくいかなくなった場合、自分のできるところまで戻ることをします。教科書を書き写していて、コードが動かなくなった場合も、自分がわかるところまでコードを消し戻し、不完全でも動くようにしてから課題となっているコードに再度とりかかることができます。応用の課題が出た時でも、まずは自分のわかるところまでプログラミングし、その後に必要な要素を積み重ねていくことができます。できる事を積み重ねていくことにより、できる事が広がっていきます。
やっと分かった。プログラムができるようになるためのたった一つの方法。プログラミング入門者に向けて。より

と書かれていて何となく納得してしまった。

大昔はコーディングのコストが高かった。 そりゃあ紙テープやパンチカードに「書く」のだから高コストで当たり前である(当時は「コーダ(coder)」という職業が実在した。エンジニアが組んだコードを書くだけのお仕事である)。 今は「書く」コストは(当時に比べれば)すごく低くなった。 書いてすぐ試せるし,間違っていればすぐやり直せる。 しかも最近はバージョン管理ツールや仮想環境もよくなってるので,何かの拍子に「やっちまった」場合でも簡単に巻き戻せる。 誰だって最初は Hello World から始めるのだ(GitHub には Hello World だけを集めた repository が存在する)。

最近,暇を見つけて Go 言語の基礎学習をしているのだが

まぁ,こんなもんである(笑) いや,もちろん仕事ならちゃんとした評価をしますよ。

ちなみに,たったこれだけの記事を書くのに,載せているコードの3倍くらいのコードを書いている(もちろん書いている記事の通りに考えているわけではない。文章書いてる人は大概そうだと思うけど)。 更に仕事でちゃんとした評価が必要なら,最低でもこの10倍くらいはコードを書く。 私は頭が悪いので書いてみないとわからないのだ。 どんな道具も手に馴染むまではいろいろと試してみるものである。 そんなもんだ。

なぜならプログラム・コードの大半は異常系,つまり「してはいけない」ことに関する記述だからだ。 今まで何度も書いているが,優れたシステムとは失敗しないシステムではなく上手に失敗するシステムである。 上手に失敗するためには「○○をしてはいけない」ことの意味を正しく理解する必要があり,正しく理解するためには「してはいけない」ことを試してみるしかないのである。
だから大量にコードを書くことをお勧めする。 良いコードも悪いコードも書いてみなければ理解できない。 また「「してはいけない」ことを試してみる」というアプローチをとれるのはソフトウェア・エンジニアリングの優れた特性であり,その行為に(罪悪感ではなく)享楽を感じないようならプログラマとか止めたほうがいい。 そしてそのことさえ押えておけば,どんな言語にも適応できる。 ソフトウェアなんて簡単なのである。
私はこうしてプログラミングを覚えた — Baldanders.infoより

というわけで,これから何かを始める全ての方々に幸いあれ!