プログラムを書き直すべき時

fushiroyama.hatenablog.com

とは逆方向な意見を書いていこう。というのも僕自身は結構な回数で書き直してきた人間で、おおよそはいい結果になっているからだ。

そもそもブログで「9割」というのはなにかしら統計をとったのかな?と思ったけど主観的な数値っぽいのであんまりそれはよくないかなと思っているが、まぁ細かいことだろうむしろ「ほどんどの結果で間違い」と言われると僕はそうでないと思うので、やっぱり反対の方向である。

そもそも、元のブログを読むと「コードが汚いから」とか書いてあった。「なにかいてあるかわからない」とかあるので、たぶん僕がプログラムを書き直したきっかけとは異なる状況な気がする。その状況ではおそらく失敗するだろう。だが、しかし、書き直しが有効な手である場合も多くあるので、「ほとんど」や「九割」と言ってしまうと、書き直しダメぜったいになる風潮はいやなのでやはり、選択肢にはちょっと入るべきなので、そのことについて書いていこう。

 たまに時々、書き直さざるを得ない時がたくさんあった。たとえば、そもそもライブラリが古くなりすぎて動かなくなったり、別の言語とかでより良いライブラリがあって、そっちのほうに移行したりとかね。その場合いったん古い設計を見直して、新しいライブラリを考えつつ書き直していく。この場合は、書き直さないって選択肢がないので、あまり参考にならないかもしれない。

 意味が分からないというより、このままだと絶対にまずいってときもある。コードは確かによく動くんだけど、でも、もっとこうしたら、早くなったり、コードの量が短くなるみたいな、「読みやすくする」などの主観的ではなきう、ある程度客観的な提案ができるときに書き直したりする。だいたいうまくいってるので、すごくよかった。

 とここまでかいてふと思ったのが、そもそも書き直し方が悪いだけかもしれない。もし、テストがなければ、テストをまず書くことからやるべきだし、全部一から構築するというよりも、そもそも古い実装をあるていど参考にして、新しくより良い方向に改善していくというやりかたで、書き直すってことがある。ある意味、リファクタリングに近いことをよくやるのだ。一つのプログラムに責務が集中しているのであれば分離し、単一の責務にもっていくようにしたりするとかね。

 そもそも、元のブログも僕の意見と似たようなことがかいてあった。

ここで取るべき行動は、注意深く辛抱強くコードを読み、解きほぐし、チームメンバやテックリードに相談し、リファクタリングすることだ。安易に「書き直す」なんて言ってはならない。少なくともそこに「何書いてあるか分かるまで」書き直すなんて言えないはずだ。

よくよく考えたら、僕がやっていることはリファクタリングなだけで、書き直しとは言えないかもしれない。でも、書き直しとリファクタリングの違いってなんだ?

「車輪の再発明」を単純に否定することで失なっているもの

anond.hatelabo.jp

ソフトウェアの世界では、基本的には「車輪の再発明」は否定されている。しかしながら、本当にそうなのだろうか?と思うことが、最近、いや、ここやってきてずっと思っていることがある。そして、この匿名の記事を読んで、またなんとなく思うことをがんばってかいてみる。

車輪の再発明はなぜ否定されているのか?って、既にそれがあるのに、自分で開発したり発明したりするのが無駄だからだ。ここで、「無駄」って考えてみれば、社会全体として無駄であるだけで、個人の主観ではないのだ。既にある製品だったり、機能だったり、それを、再び開発するって行為は、その全体としては無益だが、もしかしたら、個人では、有益なものかもしれない。その製品の使い方が分からなかったり、そもそも知らなければ、その個人にとって「もう既にあるよ」は、まったく意味が無いのかもしれない。だって、その問題にあたったときにはその人には知らなかったか、もしくは理解できなかったのだから。「車輪の再発明」ってのは、そういった個人に関する問題を、全体主義的なもので無視している気がするのだ。個人の視点をつぶしているのだ。

車輪の再発明」また、思うことがあって、それは何か?って言うと、古参と新参の格差である。新規性を求めると、分野によっては、新規から見ると、開拓されつくして、膨大になりすぎてて、もしかしたら、飽和されている状態のように思えてしまうことがあるのだ。新規を求めるためには、既存のものを知らなければいけない。そのところで、既存のものが大量にあるところでは、参入障壁がすごく高くなる。新参はつらいだろう。しかしながら、その分野と一緒に成長できた、古参はすでに知識が経験があるので、新しいものがつくり続けられる。その古参が新参だったときには、その分野はなにもなく、「車輪の再発明」の必要性が低かったかもしれない。

新しいなにかをつくるために、既存のものが多くなっている状況はすごくマズイかもしれない。なにも生まれなくなってしまうかもしれない。なにかをつくるためには、既存のものを知らないといけないってことは、負担が増えるのだ。そうすると、そこまで登るのに必死になって、その上になにかを積むための、「積み方」をわすれてしまうかもしれない。ものづくりでいえば、簡単には新しいものをつくるために調べごとばかりして、肝心の「手の動かしかた」みたいなものが身につかないかもしれない。

「なにか新しいこと」をつくる方法が必要なのだと思う。「その人が知らない」新しいものをつくる方法を否定するべきではないと思う。「もう既にあるよ」は、あまりにも全体主義すぎてなんというか暴力にも感じられる。なにか大切なものを見落してるのではないだろうか? もし、「新しいもの」をみつけたりつくったりできる方法がみにつけば、いつか全体でも良いものになるかもしれない。そのためには、そこまで車輪の再発明を否定するべきではに。「発明する技術」が必要な気がしてならない。

優秀なプログラマになるためには?

すまんが分からん。僕は優秀じゃないからな。

なぜUSよりJISキーボードをおすすめするか。

なぜJISよりUSキーボードをオススメするのか、というお話 | coardware

この記事をよんだ。

これはまぁ、一つ一理ある意見として尊重してもらっておいてよい。USキーボードをつかうための理由づけとして非常に有用だと思っている。

しかし、ぼくはそれでもJISキーボードをつかい続けている。それは単につかいやすいからだ。正直なところ人それぞれで、人合う合わないの問題がある。それは元記事にも、最後の方にそう書かれている。ちなみに、JISキーボードなMacbookとかのAppleのキーボードのことに限定させて頂く。

では、僕はなぜこの記事を書くのかと思ったのは、僕がJISキーボードを使うために考えているメモ的なものでもあり、他方、JISキーボードを使っている、これから使う人への意見の共有でもあるのである。

「キーボードは本質的に使いやすい」とは?

これは、ちょっと反論というか疑念なのだが、そもそも、記事中に書かれていることであるが、「本質的に使いやすい」とはどういうことであるか? 意味不明であるのだが。

そもそも「使いやすさ」というのは、主観的な事柄で自分が使いやすいかどうかがそのユーザにとって使いやすいか?というのが本質ではないだろうか? 客観的なものとして、たとえば、アンケート調査などをして、100人のうちに、99人が「使いやすい」といって、のこり1人が「使いやすくない」と言えば、たしかに大多数は「使いやすい」ということを共有できるだろう。しかしながら、その「使いにくい」という1人にとっては、それは「本質的な使いやすさ」ではないのだ。

つまりは、その程度のものでしかない。ということを補足しておきたいのがまず最初にあるのである。ユーザ一人一人は目的があり、その目的を効率よく達成できるかの度合いによって、「使いさすさ」は異なるというのが僕の一つの意見ではる。

ちなみにISO 9241-11の定義によれば、これは使いやすさというより、ユーザビリティの話ではあるが、

ユーザビリティ (usability): 特定の利用状況において、特定のユーザによって、ある製品が、指定された目標を達成するために用いられる際の、有効さ、効率、ユーザの満足度の度合い。

とある。

あと、元の記事には、1972年がどうたらと書かれているが、国際標準のQWERTYってのは、そもそも「タイプライターの時代のに使いやすい配列」もので、それが人間が慣れちゃったら、みんなでQWERTYにしようってなったようになったと記憶、解釈としている。だから、そもそもQWERTYはそもそも、訓練が必要なある意味「使いにくい」配列のように思える。

僕は一時期dvorak配列に感動し、一時期つかっていて、今でも使いやすい配列だと思うのであるが、しかしながら、一般に勧めらるものでは無い。また、SKKを利用して>いるが、これもまた、勧められるものではない。しかし、ながら僕にとって本質的に使いやすいのがこれである。それで大多数が使いにくい印象があるのかもしれないが、僕にとって本質的なのだ。それ以外何があるんだろうか?

Returnキーがでかい

僕にとってはReturnキーは小さいと使いにくい。以上だ。元の記事を書いた、彼にとっては、大問題じゃないかもかもれない。それだけだ。何をそこまで書く必要があるのだろうか?

なんか元の記事にはいろいろ書いてあるが、僕にはピンとこなかった。たとえば、

意見によっては「日本語は変換の確定をReturnで頻繁に行うからキーが大きい方が良い」というのがありますが、頻繁に行うからこそホームポジションを崩さずにReturnできることが大事なのではないでしょうか。

そもそも、ホームポジションを崩さずに日本語のReturnを押せる僕にとってはまったく無意味である。まぁ言うなれば僕は手がでかい。だから、JISキーボードが使いやすい。そして、Returnは日本語では変換の決定によく使うので重要であると思う。(最近ではSKKのおかげでそもそもReturnをタイプすることが少なくなったの、本心を言えばぶっちゃけ大きいとか小さいとかどうでもよい)

だから、そうだな、彼の都合だと、たぶん、Returnキーが遠いことが不都合なのだろう。それはそれで、彼にとって本質なのだろう。

左右の独立した英数かなキーがある。

さてさて、元の記事には、わりとごちゃごちゃ書かれているのだが、要約すると「Commandキーが押しにくいから、かなとか英数は無駄」みたいなことを書いていた。なるほどね? まぁ、ぶっちゃけると、JISキーボードでもCommandキーは慣れれば別にどうってことない。ということになる。

あと、そもそも「Commandキーはなんのためにあんの?」というわかりにくさが普通にある。一方で、「かな」と「英数」はああ押せば、かな入力になったり、英数入力になったりする分かりやすさがわりとある。それだけで、あれ? 英数かなキーめっちゃ使いやすくね?

僕とって独立した英数かなキーがあるおかげで、僕は大助かりである。間違いなく、かな入力と、英数入力をボタンひとつで切り変えられる。入力状態を現在の入力状態が何であるかにも関わらず、変更できるのだすばらしい。

元記事には、なにやらソフトを入れなければならないが、なぜ、そんなソフトをインストールして設定をしなければならないかね。それだったら、JISのままでよい。

などと、僕にとってはいろいろと使いやすいと思うことがたくさんある。これはなんどでも言っていることだが。しかしながら、彼にはそうは思わないだろう。たぶん、そういうことで、それが使いやすさの本質であるのだ。

もうちょっと書いておこう。これは、「日本人にとって使いやすいデザイン」であると思うのである。日本語入力をしない外国人にとっては不便で極まりないだろう。

controlキーが押しやすい。

これまでは、元記事に対する、反応でしかない。じゃあ、JISの利点をもうひとつ上げておこうか? USのキーボードにはないのだが、JISにてすばらしいなぁと思っているのが、controlキーがすごく押しやすいのである。

これはたぶんプログラマーならではの意見であろう。僕はemacsをよく使うのであるが、controlキーがそこにあるおかげで、emacsのコマンドが入力しやすいのである。これはすごく大きい。一方USの方はどうか? controlにある位置にはCaps Lockがある。これは無駄としか言いようがない。なんのためにあるんだろうか? emacsのUSのキーのユーザはわざわざ、Caps LockをControlに設定しなおしてるのだ。

しかし、たぶん、これはやはり僕都合の使いやすさでしかないだろう。

日本人のためにデザイン

USキーボードはアルファベットを入力するためのものだと考えている。それを考えると合理的だ。しかしながら、日本語を扱う日本人には向いてないように思える。ずっと、USキーボードは海外の人達がその人達のことを考えて作られているのであって、JISキーボードは日本人のためにデザインされているように考えている、ように思える。思えるだけで、そうだって根拠はなにもねぇのだが。

キーボードのレイアウトがどうであれ、作業効率は変わらない

ここまでの話、僕の主観でしかない。そして、いろいろ書いたけど、僕が「つかいやすい」ということを伝えきれてないと思っている。結局の話、僕が使いやすいから、使いやすいのだ。そしてたぶん、僕以外は違うだろう。これに尽きる。

正直なはなし、キーボードがなんであれ、どうであれ、たぶん作業効率は変わらないと思う。如何にそれに習熟するかそれだけであって、習熟すればするほど、こだわりが出る。愛着が出る。元の記事も、この記事も、その道具の愛着故のことであって、その愛着を正当化しようとするだけの行為にしか過ぎないと思う。

あと、今後のコンピュータを考えるに、そもそもキーボードの需要さ薄れていくかもしれない。現に今の子供達はほとんど音声入力にまかせてしまって、キーボードの訓練をなかなかしなくなってきている。

最後に言わせてもらおう、USキーボードは使いたければつかうが良いけど、僕はJISのキーボードをおすすめする。ていうか、たかだがキーボードの選定のためにそんなに悩むな。以上である。

マンガログその1:「36.5度の天使 1巻」

はじめに

ちょっとマンガレビューを書こうと思う。

ここ2~3年、マンガを読むようになった。

読むようになったキッカケを述べておこう。いろいろ、飛行機で行ったり来たりするときに、乗り物の乗っている間暇なのだ。携帯やPC弄くっても良いが、電波がなかったり電源が切れると怖い。そもそも飛行機の中では使いにくい。なので、乗る前にコンビニや本屋で雑誌や小説などを買って読んだりしていたのだが、本だと眠くなるし、そもそも乗っている間に読むと酔う。雑誌のマンガだと酔いにくいのだが、途中から読んでも面白くない。だから、単行本を買って乗っている間に読むのだ。大体3~5冊程度買う。

そうすると、家に帰宅するときには、大体6冊~10冊ぐらい持って帰ることになる。まぁ、その後大体電子化するのだが。そんなこんなで、気がつくと沢山マンガを買っていた。すると困ったことが最近おこる。間違って既に買っているマンガを買うことが多くなったのだ。

マンガは1巻で完結することはまれである。大体、とあるマンガの単行本には、ある程度巻数があるのだが、そのたびたびいろんなマンガを雑多に読むので、あれ?僕どこまで読んだっけ?ってなる。そうすると、間違って、既に読んだことがある巻を読んでしまうのだ。

これは困ったなということで、まぁ、エクセルかなんかで読んだ本、購入した本を管理しようかと思ったけど、なんかそれではつまらないので、ブログのネタにしようってわけだ。ついでになんとなくレビューをしようと思う。

レビューの方針

レビューするときにちょっと僕なりの気遣いを表明しておこう。基本的にけなすことはしない。 どうやったら、楽しめるか?みたいなことを書いていく。というか書いていきたい。また、ネタバレはしない程度に。するときは白字で書くかな。

これは、毎回のっけておくかな。

さて、レビューをしていこう。

マンガログその1:「36.5度の天使 1巻」

今回読んだのは、「36.5度の天使」である。

これは、まぁ、基本的に表紙で買った本だ。

絵が綺麗だなと思った。すごく綺麗。わりと好き。わりと好み。

話としては、隕石が落ちて、なんかウィルスが蔓延している世界で、主人公とヒロインがなんか抗体を持っていて、なんたらかんたら。けれども、話としてはよくあるかなと思ったがなかなか面白い。

あと、エッチいシーンが多いのは好き。個人的に。というか基本的にエロいマンガは好きである。というか、表紙がエロかったから買ったんだが。

結構満足したのである。

そして、続きはどうなるのか?面白くなりそうなのでこれは期待できる。2巻は出てるみたいだが、まだ購入していない。

これからのUXデザインに行ってきたのでレポート

uxf-basic2017.peatix.com

僕のなかで「これからのUXデザイン」はブログ書いてないので、終了していない。 最近、終わってないイベントが多い。つらい。

あんまり僕は忙しいとか、そんなことは言わないのだが、なんというか、どんどんとやることが増えてるので、いろいろ遅れている。決定が間に合わないって感じの週だった気がする。

さて、ちゃっと、レポートを書いていきます。

イベント自体は、気楽に参加できた。というか、久し振りの「単純なる参加者」になったと思う。気楽。

f:id:Nobkz:20170630213130j:plain

写真はビアバッシュのもの。

さて、流れは、浅野先生のセミナー -> ビアバッシュな感じなので、印象に残ったり考えたりしたメモをちょっとまとめる。

まず、前半の方では、今のIoTやBigData、機械学習(AI)の時代になることによる、デザインについてだったと思う。この内容は、特にUXに関心のある、ない関係なく、聞いて言い話なんじゃないかな?

特に考えさせられるのが、「操作」についての話である。 この辺、最近僕は、Direct Manipulationに関する論文をひたすら読んでるので興味深い話であった。まだ僕はCLI からGUIになる時代の人間でしかない。もういちど自分の中で考えなおしたいのである。

後半は、いつもの感じだったが、バージョンアップしていた。考え直したのは、おにぎりの話。あれ、機械学習の「過学習」の話だなと思った。データが多ければ多いほど、機械は学習するのだが、学習しすぎると機械は間違ってしまうのだ。以前、梨を学習させた時、梨の画像を沢山処理させたが、洋梨を処理できなかった記憶を思い出す。

ビアバッシュ以降では、参加者がデザイナー、エンジニア以外にも広がっているのが面白かった。あとIoTの主婦が大興奮していた。

最後に、参加する前よりも、今後の時代が変わっていくんだろうと思った。僕は「エンジニア」だが、「エンジニア」であることは最早どうでもよくて、そのこれからの総力戦の時代の中で、いかにチームに貢献すべきか?ということを考えた方が良いと思った。まだまだ、学ぶべきこと、身につけるべきことが沢山ある。そんなことを感じるセミナーであった。

カタンの魅力と怖さ

最近、カタンをよくプレイすることが多くて、そして、ずっと思うことと、ちょっと思うことがあったので書いていく。

カタンは面白い。その面白さにはいろいろな意見があると思う。楽しみ方も人それぞれだ。僕は、「ゲームが勝ち負け関係なく、自分と『プレイしている面子』、そして『観戦者』も含めて、それぞれが楽しいと思える」ということを重視している。これは、そもそもカタンのみならず、僕がプレイするボードゲーム全般に言えることなのだが。

僕が最近気がついたのは、そういうプレイスタイルだから、僕はゲームに強いんだ。と思うことが良くある。ボードゲームってのは、一つに他人とのインタラクションを楽しむってのがあると思う。「自分がこういうプレイしたら相手が楽しいだろうか?」ということを考えるってことは、自然と相手の視点に立つことになる。そこには、「自分がこういうプレイをすると相手がどういう状況になるんだろうか?」「相手がそういう状況になったら、どのようなプレイが可能になるんだろうか?」とか自然と考えるようになる。また、相手を良く見ることになる。「相手の手札は何枚で資源はこれだけ持っていて」だとか「相手の資源の産出量は」とか「相手から見たら自分の手札は」とか、相手に関する情報を自然と把握するようになる。自然と相手の動き方を予測できるようになる。

あと、相手の動き方を予測できると言ったが、その期待に反する行動をして、なるほどってなるのも楽しいし、実は僕はそれが面白いなぁと思う。以外な動きをすると本当に面白い。学びがある。また、相手の演技や表情を見るのも面白い。「お~」とか「すごい~」とかよく喋っていたかと思えば、余裕がなくなると何も言わなくなるみたいな。カードを並べる癖だとか、沢山資源が出たときは、トレイからしれ~っと資源を取るとかね。

こう考えると、ふと、カタンの作者、クラウス・トイバーの言葉に「『また明日あなたと遊びたい』と、言われるようなプレイで遊びましょう。」を思い出す。それは、やっぱりゲーマーを強くする言葉だと最近思う。やっぱり、クラウス・トイバーは偉大だ。

あと、相手の動きのみならず、「観戦者が楽しい」というのも重要だなぁと思う。よく面白いと言わるゲームは観戦者が楽しくなる要素がある。それは、実は「負けても楽しい」と思える要素だと思ったりもする。そして、またこれもゲーマーを強くする。それは、一つに俯瞰的な視点を得られるということだ。 僕はこのゲームがテレビで放映されていたら、視聴者は楽しいだろうか?という見方をしている。やっぱりそれは、自分や相手の視点だけでない、客観的な視点を得られる。ゲーム上で何が起っているのか?というのが把握できるようになる。また、ゲーム上においてのマナーや発言が楽しくあるようにする。まぁ、僕は雑で気が聞かない性格なので、よく失礼を働いて申し訳ないと思うのだが。

さて、最近のことを話そう。最近ちょっとカタンをプレイしていて、カタンの怖さと感じることがある。しかし、それは逆にカタンの面白さである。それは何か?というと、カタンが一つのミスですごくゲームが動くんだと思うのである。それは最近いくつかあった。

最近、てか、昨日の深夜、てか今日の午前か。10点、5点、5点、5点でゲームで勝った。それは、他がゲームの初心者ではなく、ゲームをある程度プレイしている経験者である。むしろ、強いと思う人達である。

僕はわりと、先行して逃げ切りたいタイプであって、先行して逃げ切るには、単純に生産量パワーやゲームの展開の最適化を行なうようにする。そのプレイだと、わりと叩かれる。飛び抜けてしまうので、みんなで、飛び抜けた人を叩こうとする。そして、1 vs 3になる。ちなみに、それが僕にとって楽しい状況である。他人が以下にして僕を苛めようとするのが観察できるからね。そして、わりと盗賊を置かれたりするのが気持ちが良い(笑)。とある人から、ドMと言われまくっている所以かもしれない(笑)。

んで、先の、10点、5点、5点、5点でゲームで勝ったときというのは、なぜそういう状況になったかと言えば、たった一軒の開拓地のせいである。一人のプレイヤーが、トップ目(僕)ではなくて、他の人が建てたいと思うところを妨害するようなところに開拓地を建てたプレイをしたのである。そのおかげで、3人が協力体制にならず、その人との生産力の勝負になってしまう。

f:id:Nobkz:20170603161902j:plain

ただ、その時僕は、すごくぞっとしたのだ。よく考えればそのミスは観戦者の視点からはありえない置き方かもしれないが、その人から見ると、ある意味最善手に見えるからだ。わりとしやすいミスであると個人的には思う。しかし、それで、このようなワンサイドゲームができるとはという感じである。僕は、その時は、勝ったときに嬉しさを感じるというより、ゲーム全体として、「こういうこともあるんだぁ」という思いである。

そして、その時は、その後にもう一戦やって、僕が勝ったのだが、僕の反省としては「どうしたら、もっと周りを楽しませられるんだろうか?」という点をずっと考えていた。しかし、競技である以上、ゲームの非情さってのは付きものなんだろうなと思っている。その非情さが、ゲームを面白いと思わせるものでもあるのだ。

また、もうひとつ話そう。僕が8点、周りが、9点、7点、6点の盤面である。6点の人の視点に立つと、やっぱり9点は怖い。だから、9点に集中してしまう。そのような状況である。しかしながら、僕は、7点を注目していた。なぜなら、9点の人は、道を2本建てて、家を建てないと勝てなくて、まだまだターンが掛るからだ。最大の生産力を持ったとしても、2ターンはかかる。そのような状況で、怖いのは7点の人である。騎士王か道王を取り、1点を稼ぐみたいなプレイが1ターンでできるような、最大生産力を持っている。それが起こる確率を持っていた。そして、6点の協力体制を築くかないといけない時に僕は築けなかったなと思うときである。どう説得すれば良かったのだろうか?と思うことがよくある。似たような事例で最近良く負けることが多いなぁと思う。

最後にもうひとつ、僕は、とあるところに開拓地を建てて…ってことを考えていたが、そこに都市化材交換する交渉を持ち駆けられた。僕の視点からは、その交渉で、相手に道材を渡して、都市化することが次のターンでできるような交渉だった。あとでその道を建てて、開拓地を建てれば良い。そして、そちらの方が強いなとも考えていた。しかし、その交渉で、僕が建てたいと思われる場所に開拓地を建てられてしまったのである。そして、生産力の差で負けてしまった。

カタンの非情さは、道や開拓地の建て方、協力体制の築き、相手との交渉において、一つのミスをすることによって、ゲームがすごく傾いてしまうことにあるのである。そのミスとカードの引き方や、ダイスの出目次第では、どうしようもないことが起る。それは、魅力であり、怖さでもあるのだ。