技術記事を書いただけなのに

割とキレ気味で書いているので閲覧注意です。

別に晒し上げる意図はありませんが、Qiitaというサービスに技術記事を投稿したところなかなか嫌な気分になるという体験をしたので、現時点の私の感覚を記録するという意味で書いておきます。Qiitaに書いても良かったのですが、技術的な内容を含まないためQiitaの趣旨にそぐわないと判断し、個人的なブログに公開します。

該当の記事はこちら。

LINQ のメソッド名が SQL っぽいからラップする
https://qiita.com/apashoni/items/77556e0bd2558cb6427e

私が投稿した内容は、私にとっては良い(この内容に価値を見出す第三者がいる可能性がある)と思えた内容でした。もちろん世界中のありとあらゆる人間にとって有益かと問われればそんなことはありえませんが、少なくとも誰かの役に立つかもしれないなと思って投稿したものでした。

一方、すでに技術的に習熟した人であれば不要どころか、混乱の原因になるからいらないというような内容でもあったように思います。そういうエクスキューズを入れなかった私にも落ち度はあるかもしれませんが、技術的に習熟した人間であれば自分にとって有益な記事かどうかは判断できると思っておりました。

個人的に技術記事のスタンスとして、どんなことでも自分が学ぶきっかけになるのであれば書いてみれば良いと思っています。それが役に立つかどうかを判断するのは個々の読者であって、自分が書く内容が読者にとって有益かどうかというのは、書く側の責任の範囲を逸脱していると思います1

技術記事を読む際に「自分の技術レベルにマッチした記事を探す能力」はある程度必要だと思っています。技術的に誤ったことを意図的に公開するのはモラルに反すると思いますが、何が良いか/悪いかというのはその人の置かれた環境や考え方などにも深く関わることであり、一概にありとあらゆる全ての人間にとって、良い/悪いの烙印を押せるものではないと考えます。その点、Looks Good To Me や Not For Me という考え方は良いと思います。

この記事を書いている時点で、私が書いた技術記事に関して批判のコメントが2人のユーザーから来ています。どうも、このコメントをしてくださった方とは考え方がずれている気がしますので、改めて反論します。勘違いされたくないので明記しておきますが、私は批判されるのが嫌だという主張をしたいのではありません。

まず私は上記の通り「役に立つ情報なら拾えばいいし、そうでないならスルーすればいい」と考えています。自分にとっては役に立たなかったり、あまり良くない考え方であったとしても、その技術記事がこの世から消えてほしいとまでは考えません。なぜなら、自分にとっては不要であっても他の人にとっては有益な情報であるかもしれないからです。

上記の記事を公開した時も、心境としては「あまり見てもらえないかもしれないな」と思っていました。上記記事の内容が役に立つという人の範囲はかなり狭いと予測できたからです。

とはいえさすがに、「この記事の内容は誤っているので取り下げろ」みたいな書き方をされると嫌な気分になります。はっきりとそう明記されている訳ではありませんが、言外にそういうニュアンスを感じるようなコメントでした。まぁ「取り下げろ」というのは私の考えすぎかもしれませんが。

以下のようなコメントをいただきました。

読み手が混乱する可能性があるコードは、好ましくありません。

「これも読み手が混乱する可能性があるコード」なんて言ってしまえば、新しく追加された構文や初めて使うライブラリなどは混乱の元になり得るので好ましくないと言っているのに等しいと思います。これは少し意地悪な解釈ですが、真意としては「標準のメソッド名のままでも一般的に十分可読性があるのに、わざわざラップするのは読み手が混乱する原因になり得るので好ましくない」というところではないでしょうか。でしたら変に言葉を省略したりせずにそう書けば良いと思います。このように中途半端に省略したコメントは、読み手が混乱する可能性があり好ましくないと思います。

それに対して私は、上記の真意(?)のように解釈し

「LINQの構文に慣れている人にとっては読みづらい」「読み手が混乱する可能性のあるコードは好ましくない」いずれもその通りだと思います。
そのような考えももちろんあると思いますし尊重しますが、であればこの記事の内容を反映しなければ良いだけだと思います。
私の場合はやってよかったと思っています。

とコメントを返しました。すると

そのコードを第三者の誰も読まないのであれば、全く問題ありません。

とコメントをいただきました。

「この記事で紹介されているコードは好ましくないと感じる」というのは正当な感想の範囲だと思います。その点を私が否定するつもりはありません。ですが、「第三者の誰も読まないのであれば問題ない」というのはあまりにも過剰な表現だと考えます。なぜなら、第三者の中にはこのコードが読みやすいと感じる人もいるかもしれないからです。自分の経験だけをベースに、第三者全体がどう思うかを判断するのはあまりにも軽率であると思います。自分がそう思ったのであれば、主語の範囲は自分に留めておくべきです。せいぜい、自分が所属しているチームや組織、くらいのものではないでしょうか。第三者全体の意見を代弁しますことはできない筈ですし、そんなことは求めておりません。

「読み手が混乱するコード」のくだりもそうですが、このコメントをされた方は言葉選びがあまり得意ではないんだろうな、という印象を受けました。日本語で書くコメントでさえ適切に言葉選びができていないと思われるのですが、そんな方がどうやって「読み手が混乱する可能性がない(低い)コード」を書いているのでしょうか。不思議でなりません。

続いて、別の方からこういうコメントをいただきました。

メソッド名が SQL っぽくて、いまいち直感的ではない上にダサいです。
例として、JavaScript と比較してみましょう。

https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/linq/
統合言語「クエリ」という名前通り、SQLっぽいのは当たり前です。
唐突にJavaScriptとの比較が出てくるのも意味が判りません。郷に入っては郷に従いましょう。むしろ標準の文法に馴染めないからと、使い慣れた別の言語の文法に無理矢理合わせるのはダサいと思います。

一方、map, filter, sort というのは直感的で意味がわかりやすいです。
LINQ にあまり慣れていない人でも、よりスッと入ってきやすいコードになったのではないでしょうか。

これも完全に主観ですね。全然知らない人なら、それこそ標準でもラップしても覚える労力は変わらないでしょう。むしろ標準から外れる事で、標準を覚え直す必要があるので害悪です。

これもまた、頓珍漢なコメントであると感じます。返信する形でも書いたのですが、改めてこの場で書いてみます。

まず「SQLっぽいのは当たり前です。」というコメントについて。そもそも、記事をしっかりと読んでいただければわかると思いますが、この記事の趣旨は「SQLっぽい構文になっていて、少し分かりにくいからラップします」というものであって「なんでSQLっぽい名前なんだよ!ふざけんな!」という趣旨ではありません。SQLっぽいのは当然ですとドヤ顔で言われても困ります。そんなこと知っています。書いてあることをしっかり読んでほしいです。書いていないことを脳内で勝手に付け足して、私の主張を捏造・歪曲して反論してくるのはやめてください。

次の「唐突にJavaScriptとの比較が出てくるのも意味が判りません。」というのは、この人にはJavaScriptとの比較が出てくることの流れが理解できなかっただけなので置いておくとして(それは個人の感じ方の問題であり、私の知ったことではありません。感性が合わないだけです)、私が噴飯したのは「これも完全に主観ですね。」というコメントです。

主観に決まっています。私が主観で書いた記事なのだから、私の主観に決まっているでしょう。

腹を抱えて笑いました。ひろゆき氏の「あなたの感想ですよね?」を思い出しました。

議論の場で数字を使った具体的なデータを提示すべき場であるならまだしも、「意味が分かりやすい」かどうかなんてのは人それぞれ違うのだから主観に決まっています。明記するまでもないことだと思っていましたが、明記しておかないと「主観ですよね。」って言われるんですね。勉強になりました。

SelectMap どちらが分かりやすいか、十分な数のC#erに訊いて回らないと客観的な評価はできないと、少し考えればわかると思います2。そんな大変な労力のあることを、「匿名の個人」が「無料」で公開している記事に対して求めているのであれば、インターネットリテラシーとか情報収集能力が著しく欠如しているのだろうな、と私は判断します3。もしかしたらそういうデータを収集している人はいるかもしれませんが、私はそうではないので、私に求められていても困ります。

明らかな主観であるのを「主観ですよね?」と質問して、いったいどういう返答を得たかったのでしょうか。ぜひ教えていただきたいです。主観であると指摘して、主観であると認めさせれば満足するのでしょうか?言外に「あなたの主観ですよね?はい論破」みたいな、ひろゆき氏の似非論破ゲームのような、まったく不毛な行為を感じます。そういう行為に興じるのは勝手ですが、私を巻き込まないでいただきたいです。

害悪という言葉を使うほど私の記事が明らかに誤りであると主張するのであれば、反論記事の一つでも書けば良いのです。「LINQ のメソッド名が SQL っぽいからってラップするな」みたいなタイトルで、私の記事を引用しつつ論理的にご自分の主張を展開する方が余程有益であり、私も誠意を感じます。あるいは、何かエクスキューズがあるといいと感じるのであればそういった内容の編集リクエストを送っていただいても良いのです。

今回の件、以前Twitterで見かけたこちらの主張と同じように感じられました。

あまりTwitterで見たことを書きたくはありませんが、でも書きますが、

上記のようなことを感じました。4

Not for me と思うのは勝手ですが、それを Not for all と思い込むのはやめていただきたいです。自他の区別はしっかりと付けていただきたいです。この世には「自分」よりも「自分ではない人」の方が明らかに多いです。

良かれと思って技術記事を書いたのに、筋の通っていない変なコメントをもらうのではやってられません。読み手にとって有益でない情報というのは沢山ありますが、有益でない情報はスルーすれば結構でしょう。コメントで「言葉を選ぶ能力の低さ」や「日本語読解能力の低さ」を晒すくらいなら、もっと生産的なことにリソースを使ったらどうですかね。

有益な情報だけを得たいのであれば匿名の個人が無料で公開している記事ではなく、著名な方が書いた本を読んだ方が、有益な情報を得られる確率は高いと思われます。お互いの時間を無駄にしないためにも、ご検討ください。


  1. もちろんある程度意識するのに越したことはないと思います。アウトプットの目的によります。(自分の学習のメモとして残したいのか、Contributionを集めたいのか、など) 
  2. 私の主観です。 
  3. 私の主観です。 
  4. 「オタクは」という主語や「多数派らしい」という点には同意しません。