新人プログラマよ、困ったときはこう聞け!~エンジニア特化型Q&Aサイト「teratail」トップランカーたちが語る、確実な力を付けるための“質問力”

エンジニアにとって最も重要な力の1つとなるのが、⁠課題解決能力」です。コードを書くよりもバグの原因調査などのほうに多く時間を費やしてしまうというのも、時折耳に挟む話です。そんな課題にぶつかったとき、あなたはどのように対処していますか? Webで情報を検索したり、あるいはまわりにすぐ聞ける先輩エンジニアなどがいれば、質問を投げかけたりするでしょう。

しかし、もしWeb上に情報が出ていないニッチな課題や、まだ十分に情報が出回っていない最新の技術に関する課題だったらどうしますか? さらに周囲にも聞けそうな人がいなかったり、そもそもどのようなキーワードで検索したらよいかもわからなかったり、どうにも解決の糸口が見えない……そんな状況になったときどのように対処しますか?

そういった、どうしても解決できない課題に直面したときに頼れる存在が、エンジニア特化型Q&Aサイトteratail(テラテイル、図1⁠」です。サービス開始から1年半で、会員数は3万6千人を突破し、これまでに投稿された質問数は3万件以上。現在の回答率は約93%、平均回答スピードは90分前後となっているので、質問を投稿してちょっとコーヒーでも飲んで一息ついている間に回答が返ってくるという、かなり活発に盛り上がっているサービスです。

図1 teratail(テラテイル)トップページ
図1 teratail(テラテイル)トップページ
トップランカープロフィール

argius

https://teratail.com/users/argius

エンジニア歴15年以上、現時点でteratailランキング総合3位のベテランエンジニア。教えることで社会貢献したいという思いからteratailに心血を注ぐ。

ryunix

https://teratail.com/users/ryunix

若手ながらteratailの黎明期から参加しているトップランカー。社内の閉じた環境でなく、オープンな環境で腕試しをしてみたいとの思いからteratailに傾注する。

ShoheiTai

https://teratail.com/users/ShoheiTai

子供のころからシステムエンジニアが夢だったという若手のエンジニア。teratailユーザ会「集まっtail」にも積極的に参加し、毎回LTを行うなど、リアルの場での情報発信力も強い。

インタビュアープロフィール

SoftwareDesign 池本公平編集長

2012年よりSoftwareDesign誌編集長に就任。⁠さくらインターネットを基準にデータセンターの未来を考える⁠⁠、⁠ポインタ再入門⁠⁠、⁠なぜ関数型プログラミングは難しいのか』など、読者の思いを 形にする特集を企画。未曾有のIT雑誌不況をサバイブするために日夜奮闘中。

レバレジーズ 武藤大佑氏

teratailのディレクター/UXデザイナー。サービス全体の設計を担当している。

レバレジーズ 木下雄策氏

teratailのDevRel/広報担当。teratailユーザ会「集まっtail」を始め、さまざまなエンジニア向け勉強会を企画・開催している。

課題解決のスペシャリスト「teratail」トップランカーによる座談会を開催!

盛り上がりを見せるteratailの中にも、過去1000件近い回答を投稿していたり、月100件以上の質問に回答していたり、あるいは1つだけでなく複数の技術についてランキング上位に君臨していたりといった、いわゆるトップランカーたちがいます。

今回は、そのteratailのトップランカーの方々に集まっていただき、座談会を開催しました。いったい彼らはどのような人物で、どのようにして現在のようなさまざまな課題を解決できるスキルを身に付けたのでしょうか? また、teratailに投稿される質問をどのように捉え、どのように解決していっているのでしょうか?

新人エンジニアはこれからの業務の中で、さまざまな困難な課題に直面するでしょう。そんなとき、どう立ち向かっていき、どう乗り越えていくのか? 彼らの話から、ぜひレベルアップしていくためのヒントを学びとってください。

トップランカーってどんな人たち? 仕事や環境に迫る

編集部:今日はお忙しい中を集まっていただき、ありがとうございます。まずは自己紹介を兼ねて、トップランカーの皆さんの日常についてお聞きしたいと思います。普段はどのようなことをされているのでしょうか。

argius:初めまして。argiusと申します。普段は個人事業者としてプログラミングなどをしています。得意分野はJavaなどサーバサイドで、Javaの基本機能を調べて試してみたりといったことを趣味的にやっています。あとは広く浅くゲームも好きで、それがプログラミングを始めたきっかけの1つでもありますね。

ryunix:ryunixと申します。今日はよろしくお願いします。普段は、Javaなどで企業向けのWebシステム構築をするような仕事をしています。今はお客様の社内で使う業務系システムをC#で構築する案件に取りかかっています。プログラミングは趣味でもあり、いろいろ勉強しています。

ShoheiTai:初めまして。ShoheiTaiといいます。幼いころからシステムエンジニアになりたいと思っていまして、最初の会社ではシステムエンジニアとして業務システムなどをやっていました。でも、Webの進化の速さ、HTMLの表現力の高さに興味を持って、Web系の会社に転職しました。そこで代表の方と新しい会社を3月から始めています。言語はもともとJavaを勉強していましたが、社会人になってからはPHP、JavaScript、HTMLなどをやっていてフロント指向です。基本はPHP、趣味でHTML、JavaScriptをゴリゴリ書いているって感じです。

編集部:皆さんのプログラミングのルーツに迫ってみたいと思います。初めて使ったコンピュータは何でしたか?

写真1 argius氏
写真1 argius氏

argius:初めては相当昔です(笑⁠⁠。BASIC時代のMSXやPC8801で、日本のPCの黎明期ですね。あとはゲームを作ったりとか。最初はBASICをいじっていましたが、ゲームを本格的に作ろうというときにはマシン語もいじってました。その後ブランクを経て、再び戻ったときはWindows 3.1、MS-DOSという時代でした。

編集部:90年台初頭ぐらいですね、懐かしい。では、ryunixさんはどうですか?

ryunix:初めてのPCは10年ほど前、Windows XPでした。最近は、知り合いにFreeBSDを勧められて使ってみてけっこう好きだったので、その流れで2013年ごろにMacを買って触り始めました。それまではずっと基本Windowsでしたね。

編集部:FreeBSDを勧める知り合いって、すごいですね(笑⁠⁠。ShoheiTaiさんはいかがです?

ShoheiTai:小学校3年生とかなので、15年以上前ですね。初めてのPCはWindows 98、MS-DOSでした。ゲームのことを調べたり、単純に自分の遊びのことや趣味のことを調べたりしていて、当時はダイアルアップでつなげていたので、電話代が高くなって怒られましたね(笑⁠⁠。ネットをつないでる間は電話ができなかったですし。

編集部:ませた小学生(笑⁠⁠。デジタルネイティブ世代ですね。

ShoheiTai:そうですね(笑⁠⁠。小学校の調べ学習とかもネットで全部調べて、プリントして持っていくみたいな感じでした。

図2 困ったときにすぐに回答を得られるスピード感
図2 困ったときにすぐに回答を得られるスピード感
図3 アクセス数と会員数の推移
図3 アクセス数と会員数の推移

「プロになった」と意識した瞬間

編集部:teratailのトップランカーに至る経緯として、どこかのタイミングで自分が「プロになった」という意識を持ったと思います。それを感じたエピソードはありますか?

ShoheiTai:無駄なコードをなくすっていうのは当たり前にやっていたんですが、記述方法とか重い関数を使っていないかなどをすごく気にするようになったところでしょうか。あとフロント側の技術も好きで、表示速度を突き詰めるために、Qiitaの関連記事なんかは常にチェックしていますし、⁠海外SEO情報ブログ」ってサイトをよく参考にしています。

けっこうストイックに、この画像の読み込みが無駄だとか、読み込みにどれだけ時間取っているかとか、ミリ単位のギリギリの戦いをするのが楽しくて、GTmetrixやWebPageTest.org、GoogleのPageSpeed Insightsなんかで評価項目を確認しては、それをベースに調べて改善して、といった感じでフロントエンド高速化を研究しています。

編集部:フロントの速度はUXにも大きくかかわってくることもありますしね。表示される順番や、ミリ秒単位の速度にまでこだわってユーザビリティを追求するのは、フロントエンドならではの醍醐味かもしれないですね。ryunixさん、argiusさんは?

写真2 ryunix氏
写真2 ryunix氏

ryunix:私はけっこういろんな案件を転々とすることが多いので、案件の途中で参画しても、新規の参画でも、なんとなくパッと全体が掴めるようになったときですかね。まったく初めてみるようなコードでも、こう動いているんだろうなとか、全体にどう影響するかなどが見えてきた気がします。

argius:私の場合は、コードを動かさなくても、ある程度動きが読めるようになったことですかね。

編集部:頭の中でシミュレーションされるような感じですか?

argius:まぁそうですね。その精度が上がっていく感じです。いきなり上がるというよりは、徐々に精度が良くなっていくって話ですけど、それを実感できるようになったときですね。

編集部:なるほど、やはりargiusさんにはこれまでの経験の重みを感じますね。

トップランカーたちの情報収集・情報発信方法

編集部:皆さん、最新のプログラミング動向をどのように追っているんですか?

argius:昔は割に雑誌が多く出てたので、月刊誌とかをよく読んでいましたが、最近はgihyo.jpやInfoQなどの技術系サイトをRSSとかで定期的にチェックするようにしてます。

ryunix:私は、がっつりやりたいときは書籍を購入して勉強します。あとオンライン上の「vimrc読書会」っていうのがあるんですが、それにはもう3ヵ月くらいずっと参加していて、毎週鍛えられています。

編集部:vimまわりはオンラインでの読書会が行われているんですね!それは鍛えられそう…!ShoheiTaiさんはいかがですか?

写真3 ShoheiTai氏
写真3 ShoheiTai氏

ShoheiTai:僕もRSSですね。ferretなどの技術系メディアとか。あと、それこそteratailやStackOverflowで話題になっているQ&Aを見たりしていますし、勉強会とかのイベントにも積極的に参加します。

編集部:勉強会への参加、いいですよね。旬な情報も得られますし、新しい人と出会うのもいい刺激になりますし。ちなみにどんなイベントに行ったりするんですか?

ShoheiTai:最近だと「IoTLT」とか人気が出てきていますよね。あとは「ヒカ☆ラボ」とかに行きます。多いときは月に3、4回は勉強会に参加しますし、自分が最近やってみたことなどをネタにしてLT(ライトニングトーク)で登壇することもあります。teratailユーザ会の「集まっtail」でも毎回LTさせてもらってたり。やはり、自分の得意分野を外に向けてアピールするのは大切ですし、しゃべることもけっこう重要なスキルだと思うんです。なので、なるべくそういう機会は増やすようにして、プログラミング以外のスキルも高めていっています。

写真4 レバレジーズ 武藤大佑氏
写真4 レバレジーズ 武藤大佑氏

編集部:ShoheiTaiさんはリアルの場でも幅広く活動されているんですね。情報を吸収するだけでなく、積極的に外へ向けて発信していく姿勢は、今後のエンジニアにとっても重要な能力になってくるので、ぜひ新人エンジニアにも真似してほしいなと思います。

スキルアップのための勉強方法

編集部:最新技術もそうですが、スキルアップをしていく上では、いろんな技術を学んでいく必要があると思います。皆さんはどのように勉強しているんですか?

argius:やっぱり、いいコードをたくさん読むってことですかね。それこそ今はGitHubなどで世界中のいろんなコードを見れるので。あとこれは、昔の自分に自戒の念を込めてって感じにもなるんですが、各技術について、仕様や、仕様まではいかなくてもせめてリファレンスをしっかり確認することが大事だと思います。リファレンスを読みつつ、手を動かして慣れる。できれば每日手を動かすのがいいんですが、まぁ書かなくてもせめて読むってのをやっていけば自然とプログラミングは上達するのかなと。

ryunix:確かにそうですね。あとは聞ける先輩がいれば、どんどん聞いたほうがいいです。入社したときって、とにかくもうわからないことだらけだと思うので、私はどんどん聞きまくって吸収するようにしてました。とにかく聞く、聞くなって言われるまで聞く、私はそれが一番の近道だと思います。

編集部:聞くのは一時の恥、ですよね?

ryunix:そうです(笑⁠⁠。

ShoheiTai:逆引き系の本を読むのがすごくいいです。特に、⁠逆引き大全」のシリーズが好きで、PHPを始めた当初は「PHP逆引き大全516の極意(秀和システム⁠⁠」とかを読んでいました。逆引き系の本を読めば、このプログラミングで何ができるかっていうのが1発でわかるんです。僕が勉強する上で一番重要だと考えているのが、いわゆる「お勉強」にならないようにするっていうことなんですよね。受験勉強みたいに嫌々やらないっていう。僕がプログラミングをやり始めたのは「おもしろい」と思ったからなんですが、本を真面目に最初から読むと、難しい用語がいっぱい出てきて、あれもこれも理解しなきゃってなると、その結果この技術つまんないってなりそうなんですよ。それは一番怖いなと。

プログラミングは今後も仕事としてやってくことなので、楽しくなければ話にならないし正直勉強もはかどらないと思うんです。最初はコピー&ペーストでいいから逆引きからやって、とにかく動かしてみる。そしてある程度書けるようになったら基礎のところを勉強してく、というのがいい方法なんじゃないでしょうか。

写真5 レバレジーズ 木下雄策氏
写真5 レバレジーズ 木下雄策氏

編集部:動いたっていう感動が大事ですよね。

ShoheiTai:そうなんです。そうやって楽しくやったほうが没頭できます。

argius:やっぱり興味がある分野で楽しくやるっていうのはとても重要ですよね。

現場に出ても役に立つ、質問をするときの心得とは?

編集部:ここからはteratail開発チームのお2人も交えつつ、⁠質問する」ということについて話をしていきたいと思います。

勉強方法として、⁠とにかく聞く」というのが出てきましたが、うまい聞き方や、質問の仕方のコツなどもあるかと思います。例えばteratailで回答する場合だと、答えやすい、あるいは答えたくなるような質問はどのようなものなのでしょうか? また、質問方法についてアドバイスがあればお願いします。

argius:重要なのは質問のタイトルとタグですね。その2つで、質問の内容がだいたい見当がつきそうなものは答えやすい。とくにタイトルで要約を語ってくれる質問が一番いいですね。

ryunix:あと、質問する前に、自分がどこまでわかっていて、どこからがわからないのかを整理して質問するのは重要かなって思います。そこを自分でもはっきりわかっていない状態で質問してしまうと、回答する側としても、どこから手を付けていいのかわからないので、結局、逆に回答が得られないことになってしまうと思うんです。まぁ多分そこが難しいところだとは思っているんですけど。

argius:確かに(笑⁠⁠。整理とか説明する能力ってなかなか難しいですよね。でもやっぱり、技術的な能力はさておき、最低限の質問能力は鍛えてほしい。それは仕事にもつながることだと思うし、質問する人に頑張ってほしいところです。

ShoheiTai:知識を深めるって意味では、質問する前に自分でできるだけ調べることをお勧めします。結局これも整理するということにつながるのですが、いろいろ調べてみて自分なりにまとめる。単純に用語がわからないのか、ソースコードのバグなのか、しっかり自分の言葉でまとめるっていうのは勉強にもなるし、ちゃんと整理できれば回答も集まりやすいと思います。あとは開発環境をできるだけ詳しく書いてほしいです。

写真6 Software Design 池本公平編集長
写真6 Software Design 池本公平編集長

編集部:できる限り自分で調べて、問題を整理して、自分の言葉でまとめて要点を質問するといった感じですね。では逆に、回答するときに工夫していることはありますか?

ryunix:コード系の質問だったら、1回手元で動作確認したものを載せます。用語系や考え方を問うものなら、参考になるページやこっちが検索した結果を貼って、こんなふうに見てくださいとか。

argius:内容によりますが、私もコードであれば実際に動かしてみます。動作確認はできるだけしていますし、そのための最低限の環境は作ってあります。コードの場合は誤字の可能性も多いですから、校正ツールとして動かしてみるわけです。用語の場合は検索して、URLを貼り付けたりします。あとは客観的な情報として引用したりしますが、なるべく対話になるように気を付けています。

編集部:なるほど。皆さん動作確認までしっかりされているんですね。優しい(笑⁠⁠。

ShoheiTai:私が答えるのはPHPフロントエンド系が多いのですが、やはりお二人と同じように自分のところで動かしてみます。JavaScriptならば実装してみます。それらをベースに自分の言葉でポイントやできることを答えています。引用する場合も、なるべく自分の言葉でかみ砕いて書くようにしています。

質問は、する側にもされる側にもメリットが

編集部:最後の質問です。⁠質問する」というのは、質問者だけでなく回答者にもさまざまなメリットがあるのではないかと思っているのですが、皆さんは質問者や回答者のメリットについてどのようにお考えですか?

ryunix:まず質問者にとっては、課題解決にかかる時間の短縮ですよね。後輩が悩んでいるわからないことって、多分先輩にとってはすでに通ってきた道なので、聞けば一瞬で解決することが多いと思うんです。なので、1人で悩むんじゃなくて、やっぱり質問する、聞いてみるっていうのが一番速いですよね。

そして逆に先輩側としては、ただ答えを伝えるだけじゃなくて、どうしてそういうことになっているのかまで伝えることで、その問題について再確認できるのはいい点なのかなと思います。

argius:先輩としても質問してくれないことには、その後輩がどう思っているかわからないんですよね。後輩のスキル感とか、どれくらいの指導をするのがいいのかとか。そういうのって質問をされることで方針が定まってくると思うんです。

編集部:確かに。Q&Aってコミュニケーションを生みますもんね。そうやって質問を重ねていくことで、こういう質問をしてきたから、今度はここで躓くんじゃないかとか、そういう関係性ができていくとベストなのかなと。

argius:そうですね。二者間でそのリレーが続くようになるとおもしろくなってきます。

編集部:けっこうリアルな場でのQ&Aの話をしてきましたが、Web上でのQ&Aだと何か違うんでしょうか?

teratail:そうですね、teratailで回答してくださるユーザの方々にいろいろとインタビューすることも多いんですが、⁠回答することがいい復習になると」いった意見や、⁠使ったことがない技術についての質問を調査しながら回答していくのをきっかけに新しい技術を使い始めるようになった」といった事例はよく聞くので、Web上でも回答者側に生まれるメリットはそんなに大きく変わらないかもしれないです。

ただ、オンライン上でのQ&Aの特徴としては、質問1つに対して、いろんなバックグラウンドを持った回答者たちが回答を投稿する「1対多」の関係になることが少なくない。だから、説明の仕方や解決策の視点が違ういろんな回答が出てくるんです。すると、回答者どうしで、⁠あ、こんな回答もあったんだ」とか「こういう視点で考えたことなかった」みたいな、新たな気づきが生まれているようです。

ShoheiTai:そういうQ&Aって、第3者的に見てもおもしろかったりするんですよね。週1くらいでteratailのメルマガで「最近話題になった質問集」みたいなのが送られてきたりするんですけど、素朴だけどこれまで考えてみなかったことに対する質問とか、見えていたようで見えていなかったなっていうところを突いた問いかけやその回答とかって、けっこう見ちゃったりします。いろんな人のいろんな考え方を知ることができて勉強になりますし。

編集部:回答する側も、いい意味でまわりの目を気にして回答しないといけないので、自分なりのベストを出して来ますからね。良い質問には良い回答が集まって、よりQ&Aの価値が高まると。そういったものは、Q&Aだからこそ生まれるコンテンツなんでしょうね。

それでは皆さん、本日はありがとうございました。

一同:ありがとうございました。


いかがだったでしょうか? 会社に入ったばかりのこの時期だと、まだまだわからないことだらけで、⁠質問する」ということに抵抗がある方も多いかもしれません。しかし、質問しようとすることで自身の問題点が整理され、解決への時間も早まるのです。そのぶん次のことを学ぶ時間に充てられると考えれば、結局は「質問すること」がスキルアップへの一番の近道なのではないでしょうか。

また、⁠質問すること」は聞かれた側にもさまざまなメリットを与えます。あなたの頭に浮かんだその「?」は、もしかすると日本中のプログラマに新たな気づきを生む小さな種かもしれません。

現場の先輩や上司だけでなく、今回登場してくれた3名のように、あなたの課題解決と成長を加速させてくれる⁠先輩プログラマ⁠は日本中にいます。そんな先輩方にぜひ思い切って質問をぶつけてみて、確実な力を身につけていってください。

teratail(テラテイル)
http://teratail.com/
取材協力:レバレジーズ株式会社
http://leverages.jp/

おすすめ記事

記事・ニュース一覧