みなさん、こんにちは。前回はITエンジニアの世界の「シェアする文化」がどれだけ素晴らしいものなのか、勉強会を例に書かせてもらった。

筆者は、エンジニア特化型Q&Aサイト「teratail(テラテイル)」の運営に関わっているのだが、まさにteratailもそうした「シェア文化」の上で成り立っているWebサイトの1つである。今回は、そのteratailに投稿された実際のQ&Aのうち、Webサイト内をおおいに沸かせた「名回答」がついたものをいくつかピックアップし、シェア文化の実例として紹介していきたい。

質問自体はいずれもシンプルな疑問ではあるが、回答欄を見ると「え!? こんなに丁寧に答えてくれるの……??」「ふ、深い……!!」と思わずうなってしまうほどの名回答が生まれており、非常に多くのプラス評価がついている。

<br>と<br />の違いとは?素朴な疑問がきっかけで語られたHTMLの歴史

まずご紹介したい質問はこれだ。

htmlを書く時、改行タグが<br>ではなくて<br />と書かれてある場面によく出くわします。なぜ、<br />と記述するのでしょう?<br>と書くのと、一体何が違うのでしょう?

なんともない、シンプルなHTMLタグの違いに関する質問かとおもいきや、回答欄を見ると、なんとも細やかな解説が!

「htmlの改行タグを<br>ではなくて<br />と書くのはどうしてでしょう?」

[回答内容]

HTMLは当初、SGMLで作られました。しかし、SGMLは自由度が高すぎたため逆に実装が難しく(特に当時の非力なコンピュータでは)、HTMLを唯一の例外として、あまり普及しませんでした。

(ブラウザなどのHTMLの実装は、SGMLとしての解釈はせず、HTMLの仕様決め打ちの解釈で実装することにより、SGMLの難しさを回避していました。ただし、このことがブラウザ間の非互換性の元にもなりました)

そこで、SGMLの仕様を見直して、自由度を下げる代わりに、仕様を簡便にして実装しやすくしたものがXMLです(したがって、XMLはSGMLと別のものではなく、SGMLの「サブセット」として規定されています。SGMLを処理できるプログラムでは XMLも扱えます)。

「自由度を下げる」ことの代表的なものが、「開始タグと終了タグがペアになっていなければならない」というルールです。このルールを導入することで、これを扱うプログラムでは、閉じるのか閉じないのかがわからないタグを扱うために次々と予備の変数を用意して待たせておくといったような処理をしなくてよくなりました。SGMLではHTMLに見られるように単独のタグを定義することもできました。

その後、「XMLとして扱えるHTMLを作ろう」という試みが行われるようになり、その中で既に定着している <br> などの単独タグをどうするかが問題になりました。単独タグを許すと、XMLのメリットである実装のしやすさが失われてしまいます。しかし、使い慣れた <br> が使えなくなるのも問題です。そこで1つの妥協として <br /> という記法が考案されたのです。上記の記法を使えば、単独タグであっても終了タグの登場に備えなくてもよいため、従来のXMLの処理をそれほど大きく変えなくても扱うことができます。

(以下略)

<br>と<br />について、単にHTMLとXHTMLの文法上の違いだけでなく、その裏にある歴史的背景まで説明がなされている。このように、求めていた回答をはるかにしのぐ「学び」を得られるのは、Q&Aサイトならではかもしれない。

Rubyistが2500字超えで語る"Pythonの良さ"

他にも次のような質問がある。

*「Python の良さを知りたい

Pythonを始めたばかりで、その魅力がまだいまいち分からないという質問である。これまたとてもシンプルでストレートな質問ではあったのだが、35票ものプラス評価(2016年3月11日時点)が集まる「名回答」が生まれるQ&Aとなった。その回答がこちら。

「Python の良さを知りたい」

これまた見事な名回答がそこにあった。

Rubyistがここまで熱くPythonを語っている点や「…うわなにをするやめr」のところなど、ツッコミどころ満載なのも気になるが、いくつか回答の中身をピックアップすると、単に質問に答えるだけでなく、質問の背景に隠れているであろう投稿者の悩みにまで寄り添ったアドバイスが随所に散りばめられているのが分かる。

例えば、以下のようなところだ。エンジニア初心者がよくぶつかるであろう英語に対する客観的なアドバイスが述べられている。

残念なことですが、ライブラリの多くは英語でしか説明がありません。しかしながら、これは他の言語も同様です。これからプログラミングを学び、その技術力を高めるには、技術英語が読めることは必須の技能です。英語だからと言って敬遠せずに慣れてください。しかし、多くの人が使っている有名なライブラリであれば日本語で使い方が書かれたサイトがあります。Pythonは日本でも多くのユーザーが使用していますので、情報はすぐに見つかると思います。

他にも、今後のスキルアップのために常識となってくることなど、非常に丁寧なアドバイスを示してくれている。

一般的なWindowsユーザーにはコマンドプロンプトがなじみがないものに思えますが、それは一般ユーザーで終わる人だけの話です。プログラマーだけでなく、IT関係の技術者にとってコマンドプロンプトなどテキストベースであるCUIの操作は当たり前のものであり、その操作は一般的です。今のうちにこれも慣れてください。

自分で調べるだけでは知り得なかったかもしれない副産物的な知識に加え、アドバイスまでもらえたのは質問者にとって(いい意味での)大きな誤算になったであろう。

ほかにも、さまざまな方々が各視点から回答してくれており、ググっただけでは見つかりづらい「今」の声がリアルに反映されているように思える。

以下、多くのプラス評価がついた回答があるもの、話題になったQ&Aをいくつかピックアップするので、もし気になるものがあればぜひ見ていただきたい。

■「変数とかを英語にするとわかりにくくないですか?

プログラミング歴2カ月ほどのユーザーから出た素朴な疑問に対して、『クラスを作ったり関数を作ったりするのは「プログラムを作る」ことであると同時に「言語を拡張している」と考えています』や『私からの回答は「役割をはっきりさせましょう」です。チームや数カ月後の自分が分かるように書くことです 』といった、ベテランの方のプログラミングに対する「感覚」がリアルな言葉で返ってくるのはおもしろいところ。

また逆に、『どれがプログラム特有の命令で、どれがプログラム記述者が自由につけた変数名なのかがわかりにくいのです』といったプログラミング入門者の感覚だからこそ気づきやすい視点が、ベテランの方にとっては新鮮だったりするようだ。

■「1日に100万レコード増える場合のテーブル設計

現状、最もはてなブックマークがついているQ&Aである。ビッグデータを取り扱う際のテーブル設計についての質問だが、最も高い評価が付いている回答には、ソーシャルゲーム会社で実際にデータ分析基盤を作っているユーザーが現場での経験を基に実用的なアドバイスが書かれている。

■「最近のプログラミング言語にgetter/setterがないのはなぜ?

Javaで使われるgetter/setterメソッドが、なぜSwiftやKotlinなどの比較的新しい言語では使われない設計になっているのか、という質問である。質問文に対して、ひとつひとつ丁寧に解説がなされた回答から、他のユーザーも巻き込んで議論が発展し、プロパティという仕組みの起源の話にまで至っている。

■「【C++】なぜヘッダと実装はわけるべきなのでしょうか(.hに実装を書くことは邪道か)

『時々C++を学び始めたばかりの後輩から「なぜヘッダファイルに実装を書いてはならないのか」「なぜC++は2度も同じコードを書くことを強いるのか」と質問を受けます』と話す質問投稿者。いつもはそれらの疑問にお茶を濁して回答つつも、自身でも納得のいく答えがなかったということで今回この質問を投稿したとのこと。このような「そういえばなぜだろう?」という疑問には皆各々の見解を持っていて、読んでいるだけでも非常におもしろい。

さて、ここまでteratail内で話題になった秀逸な回答がついたQ&Aを紹介してきたが、ここでひとつ疑問が残る。現状、回答することに対してとりわけ直接的な見返りがあるわけではないのだが、それにも関わらずなぜここまで回答してくれるのだろうか?

実はこれ、teratailのナカノヒトたちも、長い間疑問に思っていることだったりする。

teratailに限らず、ブログ文化や、勉強会文化もそうだが、他業種と比較してIT業界において「圧倒的にシェアしあう文化」がここまで根付いている根幹に一体何があるのだろうか?

次回は、teratailをよく活用してくれているユーザーへのインタビューを通じてその点を少しでも明らかにしていこうと思う。

執筆者紹介

木下雄策

1988年生まれ、福岡県出身。エンジニア特化型Q&Aサイト「teratail」のDevRel(技術者向け広報)担当。2013年にレバレジーズに新卒で入社し、1年でトップ営業マンとなった後、現在のteratailチームにジョイン。年間30以上のエンジニア向けイベント/勉強会を開催している。好きなものはJavaScript(ただしド素人)とスノーボード。