ソースを書くエンジニアと読み書きするエンジニア | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

エンジニアを単純に二極化してしまうと、ソースを書くだけのエンジニアと読み書きするエンジニアという風に分けられたりもします。
前者は自分のソースコードを書くだけに注力するタイプで他人のソースコードをあまり深く読もうとせず、後者は職人気質なのか挙動をちゃんと確認するためにソースコードを読むタイプ。
 
エンジニアとしての評価は当然、ソースを読む技術が備わっていた方が高いわけですけど、この辺はその人の性格やタイプにもよったりするところがあって、不具合が見つかった時に原因よりもそれを早く治すことに注力するのか、原因を探るために深く掘り下げて特定していくのか、というような違いもあったりするので一概に良し悪しを評価しづらいところもあったりします。
 
 

ソースを読む技術

 
当然、プログラムを書くことができるので読むこともできるわけですが、あえてそれをしないのはそれで動いていてそれで問題がないからで興味や探求心がそこでストップしてしまうからではないかと思います。
ソースを読む派のエンジニアは、元ネタをきちんと確認しておきたいということでライブラリやフレームワークの中身のソースコードまで読んで自分の技術力を高めたり実装における不安を払拭したりしようとします。
 
書いた通り普段は問題ないのでその中身まで確認をする必要性はないといえばないのですけど、隠れていたバグが顕在化した際にどこで何が問題なのかという点はソースコードを追っていかないとわからなかったりするんですけど、「ここで変数を初期化しておけばこの不具合はとりあえず解消される」というように一時的な対処でしのいだりして、また後日別の問題にはまることになったりします。
ソースコードを読む理由は、そういった挙動をきちんと理解してそれに対してどのように自分がコードを書くべきかを予め設計できる点にあるのできちんと読むべきだと個人的には思います。
 
ソースを読まないというのは、ソースを読まずに済む環境にあるというのも一つの原因だったりすると思うんですけど、現状開発するにあたっては全てを一から作るというより既にある資産を流用したり、豊富なライブラリやドキュメント、便利なフレームワークが利用できたりもするので、そういったものを使うことに慣れてしまうと自らソースを読むことをやめてブラックボックス化させる結果を招いたりもします。
ビジネスロックだけを作らせていると、仕様書とのにらめっこになるので他のコードを読む時間がなかったり、指示通りの使い方やロジックの組み立て方しかしなくなるというのも一因にあるかもしれません。
 
 

ソースコードを読むことに慣れる方法

 
コードを読むのに慣れる単純な方法はコードレビューをすることではないかと思います。
他人のコードを読んで問題点を指摘することで、コードを読むことに慣れてきますし、それだけでなくシステム全体を俯瞰してみることができるのでコードを読むことでわかる不具合も見えてきます。
 
コードレビューをしていると自分のコードは棚に上げて問題点を指摘したりもするんですけど、そうやって自分のコードの書き方の良し悪しもわかってきますし、その人の書き方の癖なども読み解けたり、自分の知らない書き方や作法を学べる機会にもなります。
また、コードレビューということで業務的な時間も確保しやすいですし、持ち回りでやることでメンバーの教育も兼ねつつスキルアップを図るメリットもあります。
 
コードレビューをしていると、そのプログラムの挙動から、こういったデータを与えるとシステムに不具合が出るのではないかという想像も働くのでテストがしやすくなったりもします。
実際、コードの中身を知っているのと知らないのとではテストで見つけられる不具合の数というのは大きく違ってきます。
OSS系のライブラリなどで、リリースからかなりの年月が経過しているものでも大きなセキュリティ上の問題が発見されるケースがあったりしますが、長い運用時間の中で露出していないような問題でもコードを確認していると初めてわかってくることがあったりします。
 
コードをきちんと読む技術があれば、業務の引継ぎや教育に無駄な時間を割かれずに済んだりします。
設計書を見ればシステム仕様はわかるでしょうけど、それがその通りに実装されているとは限りませんし(多くは乖離が出てたり設計書の内容が古かったりします)何にせよシステムはソースコードの通りにしか動かないわけで、コードを読んだほうが真実がわかるわけです。
もちろんソースコードの量が膨大だったりすると読み込むのにかなり時間がかかりますし、他人が書いたソースを読むのは慣れていたとしてもそれなりの労力がかかることなので、そんなに単純な話ではないんですけど。
 
何れにせよ、コードを読む技術というのはエンジニアにとっては必須となっていますし、もしそのスキルを持っていないメンバーが多いのであれば、コードを読む機会というのを増やしてスキルアップを図っていくことは重要なことではないかと思います。