サービス志向で進めるプログラミング勉強法のすすめ
プログラミングを勉強する時、どんなことを考えながら行っていますか?
本に書いてあることをとりあえず写経してみる?
一つ一つキーワードを調べている?
とりあえず言われた問題を解く?
今回は、プログラミングの勉強の目的をどこに据えるか、と言う話です。
学習の姿勢として、次の4つに分類し分析してみました。
- 原点志向
- タスク志向
- プロダクト志向
- サービス志向
なお、これらの"〇〇志向"は後にあげるように、この記事内で定義しているものなので、
他の記事なので解釈違いがあってもそういうものとしてご了承ください.
志向ってなんだよ
エンジニアをやっていると、結構"志向"とか"思想"とか"コンセプト"という言葉が出てきます。
"オブジェクト志向" とかですね。聴き慣れている人は事項まで飛ばしてください。
この"志向"ですが、"何を目的にしているか"とされていると捉えるとわかりやすいです。
"オブジェクト志向言語"だと、「オブジェクトサイコー!全部オブジェクトでプログラミングしようぜ!」という考えのもとで
オブジェクトベースで開発するための言語がいくつも開発されています。
フレームワークでも、所謂プログラミング教室で人気のRuby on Rails(Rubyでは無いですよ、フレームワークの方)は「同じことを繰り返すな(DRY:Don't Repeat Yourself)」を基本理念としてますしphpのフレームワークであるCakePHPは「」
全体構成でもMVCやFLUXデザインパターンやあるんですが、
要するに「こう言う時を想定した」
プログラミング学習で目指すべきもの
さて、前提として、学習の動機はボトムアップ型とトップダウン型の大きく2パターンあります。
ボトムアップ型:プログラミングの勉強が先にあり、その学んだ技術で開発できるものをつくる
トップダウン型:作りたいものが先にあり、それを実現するために必要な技術を学ぶ
最初にあげた4つ、
- 原点志向
- タスク志向
- プロダクト志向
- サービス志向
これらで言うと、原点志向型がボトムアップ型でその他3つがトップダウン型になります。
ざっくり言うと、学ぶこと自体が好きな方は前者、成果の方が欲しい方は後者で進めたほうが良いでしょう。
それぞれについて定義をしていきます。
- 原点志向 ボトムアップ型で、1から本を読んでいくやり方です。学校で勉強する場合はこの形態が多いでしょう。 「javascriptとは、オブジェクト志向スクリプト言語で〜」から始まり、 オブジェクト?スクリプト?javaと違うの?と悩むところからスタートします。
最も体系的に学びやすく地力をつけやすいですが、基礎が多く成果物を形にできるようになるまで時間がかかるため
0から始める独学の場合一番挫折しやすい方法でもあります。
- タスク志向 トップダウン型で、この機能を作りたい!と言うところからスタートして 最低限要件を満たすものを作れることを目的とします。
例えば、足し算をする機能を作るとしましょう。
完成品は足し算ができるけれど、式の最初に + を押したり、空の状態でエンターを押すとエラーになって止まるとか
そういう"普通やらなさそうな行動"の例外はさておいて、とりあえずできれば満足、という考え方です。
機能を実装することが第一目的なため、検索してきたコードをコピペしたり
理解していないライブラリを導入して自分の知らないブラックボックス部分を増やしていきがちですが、
"とりあえず動かし"てその場を乗り切るのは最も早く、"動くシステムを作れた"という達成感をいち早く感じられる勉強法です。
- プロダクト志向 トップダウン型で、こういったシステムを作りたい!と言うことからスタートして、 そのために必要な機能を整理し統合した、 他人が使うことを意識したものを作れるようになることを目的とします。
自分以外のユーザーを想定した
挙動を理解している自分以外のユーザーが使用しても
予期しないエラーが出ないような例外設計やUI設計を含み、
安定したロジックを組むことが求められます。
- サービス志向 トップダウン型で、このサービスを作りたい!と言うことからスタートして、 そのために必要なシステム要件を整理し、 ローンチ後の運用まで意識したものを作れるようになることを目的とします。
作って終わりではなく、自分が作ったものをユーザーがどのように使っていくか、
それをどのように運用してけばユーザーに評価されるサービスになっていくかまで
意識した開発になります。
ユーザーが増えた場合のスケール設計や機能拡張も含めた
将来的な改修も見込んだコーディングとなるでしょう。
参考資料を見ながら、「これはあの機能に使えそう」「これがあればサービスをもっと良くできるかも」ということを考えながら進めていれば
サービス志向の勉強法は身についています。
この意識が持てると、ビジネス視点での試行錯誤を含むため開発メンバー以外とも意思疎通ができるようになるでしょう。
このように4段階に分けてみました。
上に行くほど"研究開発"寄り、下に行くほど"ビジネス"寄りというイメージですね
開発者に求められるサービス志向
さて、この分類の中で、どれが良い、どれが悪いと言うものでも無いのですが、
プログラミングをこれから勉強しよう、という方に一番おすすめの勉強法は
サービス志向での学習です。
このサイトに訪れている時点できっとベンチャー・スタートアップでの働き方や
起業・独立に興味がある方だと思いますので、"ビジネス感覚を持った開発"を意識するようにしましょう。
「営業と開発は正反対」という言葉は、もはや過去の言葉と言って良いでしょう。
もはやプログラミングが一般教養となった今、ビジネスを実現するために開発する、という一つの手段として扱われるのは特殊なことではありません。
大学に残ったり、完全に研究部門として就職を目指すのでなければ、
- 社会にインパクトを与えているサービスを担っている技術は何か
- 自分が考えるサービスを実現するために必要な技術は何か
- その技術を使って他にどのようなビジネスが展開できるか
というビジネスとの関連付けをする癖をつけましょう。
それが、これからの未来を担う技術者のあり方です。