考え僕は最近、なぜ良いものを作らないといけないのか、いい加減なものを作ってはいけないかを体験したのでその話をします。今日はたわいない雑文なのでリラックスしてほしいです。例によって色々な立場や考え方、思想には配慮して書いてるけど、至らぬところはあるかもしれない。1、2年死ぬ気で作り続けてる。今日はそれに最近リリースした「質問と回答機能」ってものについて話そうと思う。この機能はオンライン上でプログラミングを学んでるお客様の疑問を解決するすごいもので、ブラウザーでコードを書いて学習しているときに「質問する」というボタンを押すと学習サポートをしてる僕たちやチームのメンバーに質問ができるというもの。すごいのが、そのときに書いてるコードや実行結果、テストの結果も自動で収集して質問に含めてくれるということ。これがあるおかげで、質問者の人はよけいな手間なく質問ができるし、回答者も疑問にすぐに気づいて答えてあげられる。質問回答機能についてはこっちのPyQブログもみてほしいhttp://blog.pyq.jp/entry/news_question_180318よくある話だけど、質問に「なぜか動きません」とだけ書いちゃって、プログラムも実行結果も添付し忘れちゃうという状況はあるよね?この問題は往々にして回答者を困らせるし、場所によっては怒られちゃう(メーリングリストとかでね)。このPyQの質問と回答機能を使えばそんな心配は微塵もないんだよね(PyQが自動でコードと実行結果、エラーを共有してくれるから)。回答者も怒らずに済むし気持ちがよい。質問を書くときに「質問のコツ」、回答を書くときに「回答のコツ」を読めるから、質問や回答そのもののスキルまであがっちゃうすごいものなんだよね。エンジニア人生で一生大切にできるスキルだと思う。この機能を作ろうと思いついたとき、これはヤバいものになるぞって予感がしてた。これは作らないと死ねないぞって。質問だけじゃなくてコードや実行結果も共有する方法とかアイディアを色々検討した。スクリーンショットを使う案を考えたこともあったけど、技術的にも難しかったし今思えばイマイチだった。naknurayさんに相談してて「PyQはすべてオンラインでコードも制御できるなら、すべてプログラム上でやればいいじゃん」って案をもらったのよね。うわーまじかよ、天才かよってメキシコ料理を食べながら思ったのを覚えてる。この二人に相談して良かった。いえ、どうUIを組み立てるかとか、既存のコードを内蔵から変えてどう作るかとかは本当に悩んだ(かなりの修正が必要だった)。そのとき、「まぁ、ここまでできたら良いし、こんなもんにしとこうかな」って何度も思ってしまった。実際それでも悪いものにはならなかったし、よくあるエンジニアQAフォーラム程度のものならできてたと思う。なくて、かなりこだわってコードとか実行結果の共有とか、それの見やすいUIとかがちゃんと出来るようになった。UIも何度も考え直したし、デザインも情報量が多いのをどう配置するかかなり悩んだ(質問、コード、実行結果やら公開範囲の設定やらで情報が多い)。プレビューをつけたり違和感なく回答できたり、メールや通知がキレイに表示させるようにも凝りに凝った。チーム内でもこまめに見せて反応をもらってたのは良かったと思う(この機能については開発もデザインもコーディングも仕様も僕がすべて自分で作ってるんだけど、案はチーム内のharuoさんとかkameko、nanaとかにもたくさんもらった)でも、人に使われ始めて思ったのが、まったく妥協しなくて良かったということ。使ってるうちにアレコレ要望は出てくるだけど、それでもかなりよい使い勝手で使えてると思う。ここで、なんで人間はこだわって良いものを作らないといけないか、いい加減なものを作っちゃダメかが深く分かった気がする。無駄で意味のないこだわりには全く意味がないと思う。こだわりが大事と言うと、ライブラリーの検討やくだらない技術上の宗教や主義思想の主張のことと考える人もいるので、そうではないと付け加えておく。仕事が遅いのを「こだわり」で言い訳するのもいけない。この主張は僕の人生の総括的な意見であり特定個人や一つの事象を非難するものではない)。こだわってものを作る1つめの意味は、それが人に与える印象が製品を決めるからだと思う。この機能は不完全なものだなと思えば使う人もその程度にしか使わない。不完全だと思えばチームメンバーも真摯に向き合わないし、広報もいいかげんになっていく(みんなちゃんと仕事してくれるのは当たり前なんだろうけど、もっと深い心の底でのモチベーションみたいなのがダメになるという意味)。作った人間の心と印象に不完全という事実が残る。一度そう思ってしまうと僕自身が誰かに話すときも一歩引いたものになるし、最悪「僕じゃなくて誰かが広報するものでしょ、それが分業ってもんでしょ」みたいな訳の分からない論理を自分の中で構築しまう。質問と回答機能についてはPyQブログに書くときも本当に楽しかったし、お客様やメンバーが使って良さを感じてくれるととても嬉しい。いい加減なものだと自分の中に残ってしまうから、これが2つ目。いい仕事をしたかどうかは自分の心が知ってる。それには嘘は絶対ついちゃダメだと思ってる。自分の気持ちにもそうだし、チームメンバーにも嘘をついちゃいけない。人間、聞こえの良いことを言うために気持ちに蓋をしたり小さな嘘をついたり、言わない嘘を使うことがあると思う。誰かと衝突しようが、自分の考えは伝えないといけないし、嘘をついちゃいけないと思う。僕は(入社したときから)激しい人間だけど、どうしようもないし、それも才能だと最近思うようにしてる(普段の心根は自分的にはかなり穏やかなんだけど、プログラミングのことになると、いつものようになる)。自分の製品を好きになれるかどうかは自分の仕事にかかってる。枕を高くして、堂々とした気持ちで今晩眠れるかどうかは自分の仕事にかかっている。こだわりをもって、いい加減な仕事をしないのは、他でもない自分の自尊心や美意識、安心感のためにも大切なんだと思う。1つ目はいい加減さは人に伝わるし、伝わればいい加減な気持ちにみんながなるということ、2つ目は自分自身が一番仕事の良し悪しを知っているから、よい眠りにつくためにやり切らないといけないということ。人間は「どこかの誰かの他人のため」と思うと、意外にもいい加減になってしまう。「仕事だから」と思うとなおのこといい加減になってしまう。それが目の前の大事なお客様だったり、この機能を使うチームメンバーだったり、何よりも自分のためと思えるなら、もっと良いものを作れると思う。ものを作るってそういうことなんじゃないかな。