Webアプリ開発とプログラミング
プログラミングを使ったプロダクトで溢れているこの社会ですが、最も皆さんの身近なものの一つにWebアプリケーションが挙げられます。
いわゆる「ホームページ」と「Webアプリ(システム)」の違いは、Dynamic(動的な)機能を持つかどうか、という観点が、それらの違いの大きなものの一つとして挙げられると考えています。何気なく使っている検索エンジンのページも、もちろん立派な「システム」ですし、ゲームも、動画配信アプリもすべて「システム」です。
システム開発に初めて取り組むことは、難しそうに思えるかもしれませんが、少しの工夫で親しみやすいものに変わります。小さな工夫を重ねることで、いつの間にか大きな進歩を遂げることができ、システム開発はもっと身近なものへと変わります。
そのための工夫と、つまづきポイントのお話を今日はしてみたいと思います。
目標(アウトカム)の明確化が不十分
そのプロダクトは、何を成し遂げたいのでしょうか。
これは、通常は「短いタームで」表現が可能です。この部分の説明がやたらと長くなるようだと、「不明瞭な方向へ進んでるかもしれない」と考えたほうが良い可能性があります。
誰の何をどのようにどんなタイミングで解決する結果、どんなアウトカムがプロダクトにあるのか
上記を実現するために、プロダクトの手足(機能)はどのような姿をしてなければならないのか
この辺りの全体設計、アーキテクチャを決めていくことが重要です。
大きな目標はまだ遠くても、はっきりと見えていることが重要です。そういう視点であることが、迷路に迷わない、大切なことだと言えるでしょう。
機能のスコープを広げすぎる
プロダクト開発において、最も避けたい罠の一つが「機能のスコープを広げすぎること」です。これには2つの大きなリスクがあります。
1つ目のリスクは、開発そのものが終わらなくなることです。プロダクトのアイデアが膨らみ、どんどん新しい機能を追加したくなるのは自然な流れかもしれません。しかし、その結果、開発は延々と続き、最初に思い描いていたリリースの目標がどんどん遠ざかります。どのプロダクトにも完成がないという見方もできますが、リリース前にあまりにも多くの要素を詰め込もうとすると、最終的には完成を見ないままになってしまうこともあります。
2つ目のリスクは、ユーザーにとって複雑すぎるシステムになってしまうことです。多機能すぎるシステムは、ユーザーがどこから手をつけていいか分からなくなり、結果的に使われない機能が増えてしまうかもしれません。どんなに優れた機能であっても、ユーザーが使わなければ意味がありません。プロダクトはユーザーが直感的に使えることが重要であり、シンプルさが最大の武器となります。
機能のスコープを広げる誘惑に打ち勝ち、最初は「小さく、シンプルに」リリースすることを目指すべきです。基本機能にフォーカスして、それが確実に動作し、ユーザーに価値を提供できる状態にしてから、後で機能追加を検討するのが理想です。プロダクトはリリース後も進化し続けるものなので、最初からすべてを詰め込む必要はありません。むしろ、ユーザーのフィードバックを受けながら、柔軟に機能を追加していく方が健全な成長を遂げることができるでしょう。
技術選択で迷う
技術選定はいつも悩ましい問題です。
新しい技術が、フロントエンドなどは特に常に刷新されていき、時には「すでに実装要件を満たした機能があるのに別の実装を継ぎ足す」なんてことも起きたりする場合があります。
テクニカルに凝ることもまあ良いのですが、まずは『枯れた技術』(長年使われて安定している技術)から試す方が、堅実です。これは、「新しい技術」はその分「情報も少ない技術」であることで、「フレッシュであればあるほど、わからない難しさ」を内包してるとも言えるのです。
入門という意味で、バックエンドの小さなスクリプトを作りたいのであれば、私が好きなPerl も自由さの点でおすすめですが、残念ながらポピュラーさの観点からPythonをお勧めします。
Pythonは計算にも強いことが有名で、randomにも「メルセンヌ・ツイスター」を採用しています。
フロントエンドであれば、PHPあたりが良いでしょうか。Javascriptも一時期廃れましたがNode.js で勢いを取り戻し、現在では更なる境地を(是非は別として) 開拓しています。…一方で、進化のバランスを考えるとPHPの方が採用しやすいのは多くの人が感じている事実なのではないでしょうか。
情報量の多い、長いこと使われてる技術を選定することが初心者の段階ではおすすめと言えるでしょう。
まとめ
Webアプリケーションの開発は、一見すると非常に複雑で難しいものに思えるかもしれません。しかし、プロジェクトの目標を明確にし、スコープを適切に管理し、技術選定を慎重に行うことで、道のりをシンプルにすることができます。
ポイントは、「まず何を成し遂げたいのか」を明確にし、それを実現するために必要な機能にフォーカスすること。必要以上にスコープを広げると、開発が複雑化し、ゴールが見えなくなることがあります。また、技術選定も慎重に行うべきで、まずは「枯れた技術」から始めることで、無用なつまずきを防ぎ、スムーズに進行することができます。
大事なのは、初めてのシステム作りも「小さく始める」こと。そうすれば、一歩一歩進むことで、いつの間にか大きな成果にたどり着けるでしょう。小さな成功を積み重ねながら、自分のプロダクトを形にしていく喜びをぜひ感じてください。
Comments