ホーム

スタッフブログ

2021年11月4日

開発手記(6)高速化全般

こんにちは

システムチーム プログラマー / マネージャーのAです。

 

前回までの

サーバー増強に関する開発手記ですが、

意図して自分本位に書いたこともあり、

後学になり辛い文章になったと思います。

※その分、リアリティはあります。

 

今回は読み手を意識して、

パフォーマンスチューニングに対する

心構えを共有します。

 

厳しい話になりますが、

心構え1つで仕事の精度が変わります。

担当者は心に留めてください。

 

 

何倍速くなったか、に執着してはいけない

基本的に

「X倍早くなった」「X秒早くなった」という情報には、

意味が無いです。

 

例えば20倍の高速化に成功したとして、

 

元が0.1秒 なら 0.005秒(-0.095秒)。

 0.095 秒の差は、人は気づけません。

 

元が20秒 なら 1秒(-19秒)。

20秒かかる処理が1秒になれば、人は気づきます。

 

元が 60分 なら 180秒(-57分)。

180秒かかる処理の変化に、人は関心を持ちません。

いずれにせよ遅い。他のタブ開いて別の仕事をしてます。

 

というように、

「パーセンテージ」「秒数」と「人がどう感じたか」は、

基本的に関連しません。

 

だから大事なのは、

「見た人がどう思うか、何を感じるか」

であって、

「何倍速くした」「何秒速くした」

ではないことを、心に留めておいてください。

 

 

着手前に、明確な前提を作るべき

今まで担当してきたチューニングには、

大きく分けて以下の2パターンがありました。

 

① ボトルネックが周知されている前提のチューニング

② ボトルネックが周知されていない前提のチューニング

 

ボトルネックが周知されているか否かだけですが、

この違いが、難易度を分けます。② の方が圧倒的に難しいです。

 

① の場合、

“◯◯の処理が、△△だけ時間を要しているので、負荷軽減のために、◇◇だけ改善する”

といった内容の仕事になります。

具体的な数値が周知されているので、

「僕は速いと思う」「私は速いと思わない」などの、

認識のズレが発生しません。

技巧的にはテクニカルですが、気はラクです。

結果的にコストに見合わなかったとしても、

それは、タスクの選定・仕様・承認に問題があった

という話になります。

 

一方で②の場合、

“具体的にはよく分からないけど、遅いので、速くする”

といった仕事になります。

これは

曖昧な内容を一手に引き受けて、

「なんとかします」と宣言しているのと同義です。まず無理です。

こんな無責任な仕事はやってはいけません。

 

だから、

“◯◯の処理が、△△だけ時間を要しているので、負荷軽減のために、◇◇だけ改善する

という前提を作ってから対応しましょう。

そのために

調査の時間が必要であれば、割いてください。

 

 

高速化の不具合は、目も当てられない。

似た話をしましたが、

ウェブサイトの表示速度について、

「速くなった」と感じる人は少ないです。

 

そもそも、

人がページを開く時、

「速い」とか「遅い」とか考えていません。

「◯◯見よう」「△△しよう」と考えています。

計測すらしていないので、速度の変化に気づく”きっかけ”がないです。

 

ただし、

「遅い」に関しては、突然、違和感となって現れます。

違和感が出てくると、計測して、確かめたくなる。

計測して、「やっぱり遅いよねコレ」と認識します。

 

少し話がそれました。

 

人は「速さ」のありがたみを体感し辛いので、

不具合等の不利益が起こった時に、納得が難しい、という話です。

 

リッチで便利な機能の追加が伴っていれば

納得の余地もありまですが、

速くなったかどうかも分からない改修に、

自分の作業や欲求を邪魔されることに、納得はし辛いです。

 

だから、

チューニング系のタスクの不具合は

絶対に避けなければいけない。と心に留めてください。

 

 

とても大きな糧になる。

厳しい話ばかりなので違う話を。

チューニングは、技術力を猛烈に向上させます。

1度チューニングを行うと

1レベル上がるようなイメージです。

 

基本的に、

チューニングを行うということは、

現行の処理を、より良い処理に変更する ことと同義です。

そもそも

現行の処理だって、

誰かが考えて、「コレが良い」と思って、一生懸命書いたものです。

それを受け止めて、解釈して、否定して、

「でもコッチの方が良い」と責任をもって宣言するんです。

誰かの考えと、自分の考え、考える量が2倍です。

仕入れる情報量も、自分が好き勝手書くより多いです。

強制的にレベルアップします。

 

あとは

書くコードが、無意識のうちに変わります。

平たく言うと、

基本的に「テクニカル」なコードになります。

 

 

あとがき

厳しい話ばかりになりましたが、

実際、それなりに厳しい仕事だと思います。

 

途中で一度書きましたが、

「遅いな」と感じるタイミングは突然来ます。

そして一度でも「遅いな」と認識してしまうと、

その認識は、簡単には覆りません。

「先入観」「思い込み」は強烈です。

だから、

「遅いな」と感じられないように、

いつでも、気張って開発する必要があります。

 

チューニング系の仕事は

世の中の「当たり前」を支える仕事の1つだと思います。

水道・電気・ガスなどは「インフラ」と呼ばれますが

サーバーだって「ITインフラ」です。

誰かの「当たり前」を支えています。

 

少なくとも、初級者が出来る仕事ではありません。

携わる機会があれば、

任せられるようになったんだと、少し誇ってください。

 

 

 

求人バナー

このページの上部へ戻る