ボクココ

少人数でのサービス開発運営に関するテックブログ

プログラミングの前に、徹底的に考えよう

ども、@kimihom です。

f:id:cevid_cpp:20170922223431j:plain

プログラミングをかじった初心者は、思いついたらすぐにプログラミングを始めてしまう傾向にある。やがてプログラミングに慣れてくると、いきなりプログラミングを始めることを止め、根本の設計ミスをどう防いでいくかという点に重点が映るようになる。そうすると初歩的な部分でつまづくことがどんどんと減っていき、より良いプロダクトを生み出すことができる。

そこで今回はプログラミングをする前に実施したいことについて書いてみるとする。

その実装はそもそも必要か?

これが本当に大事だ。わざわざ作らなくてもいいものを時間をかけて作ってしまうほど無駄なことはない。初心者ならそれは “勉強” と思ってやるのはいいかもしれないけど、"単に時間を消費するだけだった" みたいなオチは熟練者ほど陥りやすい。

それを実装することよりも、もっとやらなきゃいけないことはないだろうか。これはプログラミングがいくら得意な人でも、"何を作るか"を考えられない人は優秀なプログラマーではないと言える。なぜなら無駄な開発、無駄な時間を浪費することに危機感を感じられないからだ。

では “そもそも” を知るにはどうすればいいか。それは、作っているプロダクトの全体的な思想を理解するところから始まる。顧客はどんな人たちでプロダクトのどこを気に入っているのか。これから作り始める場合でも、思想をしっかりと前もって考えておかなければならない。

「作ってからどんどん修正すれば良い」 という意見も確かにある。しかし後で修正することに時間をかけるよりも、事前に考えることに時間をかけた方が圧倒的に時間の無駄を省くことができる。調査して考えた結果「これはやらない方がいい」と判断すれば、開発してしまった時間よりも圧倒的に短く軌道修正が可能だ。

改めて書くが、"なんでもいいから作り始める" ってのをやっていいのはプログラミング初心者だけである。

実装が全て通るまで、頭の中の糸が通っているか

実装を始めようとなった時に、それが全て作りきれる・いけると実感できるレベルまで落とし込めているか。ここも大事な点だ。

全ての糸が通っていないと、その合間で確実に詰まることが発生する。最悪の場合、設計し直しまで戻らなければならない。どんだけ色々な種類の開発手法が出てきたとしても、開発手法に頼らずに頭の中で設計する能力を磨き続けていかなければ、手戻りはどんどん発生する。

もちろん頭の中だけじゃなくてドキュメントに落とし込むことも時には必要だろう。ただこの段階では頭の中やノートに書き殴ったレベルの成果物を推奨する。試行錯誤の段階なので行き戻りが頻発するために、最初からドキュメントに落とし込んでは手直しが多発してしまうからだ。

上級者であればあるほど、明確にリスクを想定して細かいところまで落とし込むことができる。1つ1つの処理を頭で思い描いて、最終的に実行結果がどうなるかを繋げていくことができる。そして完璧に設計できれば、ほとんど詰まることなく一気に開発を終えることができ、無計画で作り始めた時の何倍もの速度で成果物を生み出すことができるだろう。

フィードバックをもらえる環境を用意しよう

徹底的に考えることは、開発した後も続く。その開発したものが本当に正しかったのか検証するためにも、すぐにフィードバックが得られる環境を用意しよう。そしてそのフィードバックを元に、どう改善していけばいいのかを"考える"のである。

以下のような決め方は全く考えていないので、決してやってはいけない

  • 競合他社がこんな風にやってるからうちもこうしよう
  • こっちの方が作りやすいからこうしよう
  • 多数決や上司が言うことに従おう
  • なんとなくあった方がいいと思うからこうしよう
  • 一部の顧客がこう言うからこうしよう

フィードバックはあくまで参考意見にすぎない。その参考意見を元に、どう改善していくかは結局また自ら考えなければいけないのだ。例えるなら、マックで顧客がサラダ欲しいって言ってサラダの盛り合わせを用意しても誰も買わないような、そんな話に近い。

改めて大事なのは、最初に書いたプロダクトの全体的な思想である。思想さえブレなければどんなフェーズにいても徹底的に自らが考え抜き、あらゆる仕事において(当然プログラミングも含)、最も効果の産む結果を得られる。

終わりに

今回はプログラミングのさらに上位の考え方、プロダクト開発の基本的な内容をまとめてみた。

「プログラミングだけしてれば良い」と言う立場の人は今後どんどん立ち位置が低くなっていくと思う。それだけしかできないなら、海外の安くて優秀な開発者に任せても変わらないからだ。今後のプログラマはそのさらに上位概念、プロダクトについてしっかりと理解し、正しいものを正しく作ることが求められることだろう。

そんなエンジニアが増えて、より良いプロダクトがどんどん出てきてくれることに期待したい。