第37回「思考を変えろ!!作る観点から運用する観点へ」

更新日:

ジーテック森川2

こんにちは。森川です。今日はプログラミングについて


前回までは、

これまでの流れ



今回は、「思考を変えろ!!作る観点から運用する観点へ」というお題で書いてみたい。


こんな悩みをよく耳にします

・オブジェクト指向(OO オーオー)を勉強したけど難しい
・デザインパターンが何のためにあるのかよくわからない
・疎結合とかオブジェクト指向でてくる専門用語の意味がわからない

今回の記事では、なぜオブジェクト指向が難しく感じるのか書いてみたいと思います。
私の経験から書いているので間違っていても悪しからず。

■答え
「オブジェクト指向でシステム構築を考えるA君」と「そうでないB君」は、視点が180度違います。そもそも考える視点が180度違うので、B君はとても難しく感じのです。

B君は、システムを「作る」ということについて一生懸命考えています。
でもA君は、システムを「運用する」ということについて一生懸命考えているのです。

A君はこう考えています。
システムを「作る」という期間はわずか数カ月の短い期間です。でもその後にはシステムを「運用する」という下手すると10年以上という長い期間が待っています。
システム開発時に何かバグが発生しても、「ごめんなさい。すぐに修正します。」で済みます。
でも運用時にバグが発生すると下手すると損害賠償です。実際にそうなった会社を知っています。同じバクでも重大性が全く違うのです。

ゆえに、「作る」を一生懸命になってもしょうがない。しっかり考えないといけないことは「運用する」である!!

「作る」と「運用する」は全く違う

「作りやすいコーディング」と「運用しやすいコーディング」は全く違います。

■例1
コードをなんでもかんでもコントローラーに集約させる。
「作る」の観点から見ればずっと同じところに書けるのでやりすいし見通しよいです。
でも「運用する」の観点から考えると一カ所に集約させることはリスクが高くなるのでよろしくないです。
運用時に改修が入った場合、改修する人はおそらくそのシステムの構築にたずさわった人ではありません。
そんな場合、知らないので先頭から全部コードを読まないといけないコードは大変なんです。改修する一点だけが見れて、その部分だけで完結できればよいのです。

オブジェクト指向で作られたシステムは、細かく細かくパーツ化して、それをネットワークのように連動させていきます。
一つのクラスが何千行になることはまずないです。
決して「作りやすいコード」は「運用しやすいコード」ではないのです。

■例2
A君は、こんな考えをもってシステムを構築しています。
このコードは将来的に改修が入る可能性が高いのか?低いのか?
でもおそらくB君はそんな考えはないです。

改修が入る可能性が高いのであれば事前に対策が必要です。
運用時に対策しているとバグが発生するリスクが高くなるからです。

逆に改修が入る可能性が0に近いのであれば、極端な話、スパゲッティになっていても大した問題ではないです。
だって一生いじることはないんですから、どっかに隠蔽しておけばいいんです。

このように「作る」という観点と「運用する」という観点は全く異なっています。
オブジェクト指向は「作る」ではなく「運用する」という観点に照準をあてた技術です。
だから「作る」という観点のまま、オブジェクト指向に取り組んでも、「コードは書けるけど意味が分からない・・・・」になってしまうのです。

運用するという観点を身に付けるには

嫌というほど毎日コードを書いて悩んでください。
リファクタリングしてください。
そしてシステムを運用してください。
一番大切なことはたくさん悩み多くの経験を積むことです。一番大切なことは知識ではありません。



オブジェクト指向の世界は、本を数冊勉強したから理解できたとかそんなことはないです。
経験がベースにないと理解ができません。
運用したことのない人が「運用する」の観点で考えろといっても無理な話なのです。

フレームワークありきの今のシステム開発は昔と比べハードルが下がっています。
おそらく「作る」というだけならプロのシステム屋でなくてもセンスのある趣味でプログラミングをやっている人でもできると思う。
でも「運用する」という観点はプロのシステム屋しか身に付けるのは難しいです。
なぜかというと、経験を積むために多くの時間が必要で、それだけの時間を費やせるのはプロのシステム屋だけだからです。

私がこのジャンルをマスターとしたいと思って取り組んだのが10年ぐらい前、アホほどコード書いて経験してなんか見えてきたなぁと感じたのがここ3~4年というところです。
やればやるほど感じるのですが、まだまだ未熟なところはたくさんあります。この世界は本当に奥が深い!!
やりがいがあってすごく楽しいですよ。ではでは。

システムコンサルティングの詳細はこちらから

システム開発の詳細はこちらから
システム開発へ