コーディングで気を付けるべきこと
新年度になってこれからプログラム開発を始める人もいるかと思います。
今回はコーディングするうえで、実務者として一番気にしないといけないと思うことを書いてみます。
昔のシステム開発
昨今のコンピュータの処理能力はCPU、GPUの性能向上やメインメモリなど記憶媒体の容量拡大、品質向上などのおかげで以前より断然向上しています。
以前はメモリ容量も少なくCPUの処理能力も低かったのでプログラムの実行速度を速くするために頭を悩ませたものです。おのずと使用する開発言語もコンパイラ言語が主でした。
開発言語(PGM言語)には大きくコンパイラ言語とスクリプト言語がありコンパイラ言語は作成したソースコードを事前にコンパイルという処理をして機械語に変換された実行モジュールを作成しておきます。
対してスクリプト言語は処理要求が発生してからソースコードを翻訳解釈しながら実行されます。スクリプト言語はその翻訳解釈しながらの分、実行時間が余計にかかります。
実行速度を上げることが第一に考えられた時代&現場では、コンパイラ言語での開発はもちろんですが、アセンブラやマシン語といった低水準言語で開発をしていました。
低水準言語で開発するときはコンピュータ内部での動作を考えながらのプログラミングが必要になってきます。もちろんコンピュータ内部の2進数や16進数でコーディングするのではなく
それなりに人間が理解できる命令があってそれらを用いて記述できますが、まるで関数のように動作してくれる便利な命令はほぼ皆無です。
低水準言語での開発でも高水準言語での開発であっても、ある処理を実現するためのコーディングの仕方は人によって幾通りか考えられることは同じです。
しかし低水準言語での開発の場合、それもとにかく実行速度を優先したコーディングをするときには言語マニュアル記載の命令ごとのステップ数を参考にとにかく総ステップ数が少なくなる処理効率の良いソース作成を考える必要がありました。
最近のシステム開発
マシンの性能が上がってきてからは、ステップ数を削ることを考えるより、開発効率やメンテナンス性を優先するようになり、人間の思考に近い高水準言語で開発するようになりました。
特にWebシステムでは短期間での開発が要求されるため、作成、修正の度にコンパイルしないで動作確認できるスクリプト言語が重宝されるようになったのも納得がゆくと思います。
Webアプリの開発(塵も積もれば山となる)
Webシステムが広まり始めたころのサーバー環境、ネットワーク環境は現在に比べるとまだまだプアな状況だったので、優先順位は高くないものの、効率的なコーディングも必要でした。
以下はPHPでの例ですが変数内値に1を足すというだけで
$a=$a+1;
$a+=1;
$a++;
++$a;
ぱっと思いつくだけでもこれだけあります。
他にも値を出力するためにechoという命令もあればprintという命令もある、繰り返し処理をさせるために while という繰り返し構造もあれば for という繰り返し構造もある。いろいろな方法があります。
特に繰り返し処理内に記述するコードを作成するときには、どの命令を使うと処理速度が上がるか気を使っていました。
今はそんなことを気にしないでも良いシステム環境なので、(と言っても無駄な処理はしてはいけませんが)処理速度より開発効率、メンテナンスしやすさが重要だと思います。
余談
以前一緒に開発していた後輩M君が効率優先で非常に凝った作りの
コーディングをしていたことがあったので一言注意したエピソードです。
私「これでは初見の人は理解できない、メンテナンス性が悪くなると思うぞ」
M「効率的に目的を達成していて問題ないと思います!」
私「確かに効率的ではある。だがこの状態で誰にでもメンテナンスできると思うか?」
M「できないとしたらその人が理解する努力をすればいいんですよ!」
私「…よし、このプログラムはこの先たとえ部署が変わってもお前が面倒みろよ。」
1年半後にM君が私の席にやってきて
M「以前私が作ったこのプログラムのことなんですが……ここの処理何してるか判りますか?」
ってそれ君が作ったプログラムじゃないのと笑ってしまいました。なんとか一緒に謎コーディングを紐解いた後に
私「これ作った時に俺が言った言葉覚えている?」
M「えーと、なんでしたっけ?覚えていません」
私はその時のやり取りをニヤニヤしながらじっくりと説明してあげました。
彼も少し照れ臭そうにニヤニヤしながら聞いていました。
まとめ
趣味のプログラミングならどんなに凝った作りをしても良いと思いますが、やはり業務でコーディングするうえでは読みやすさ、素直な処理手順ってのは本当に大事なことだと思います。
素直な処理手順ってのはおのずと効率も良くなっていると私は信じています。