プログラミングの超基本の話をします。
これからプログラマーを目指す人は参考にして下さい。
凝った技術の話ではなく、プログラミングをする上で基本的な考え方です。
まぁ、すげぇ技術を知っているよりも遥かに大切な事なんですけどね。
もちろん、プログラム経験者やもう一皮むけたいと思っている人も読んでください。
プログラミングをする上で最も重要な事は「可読性」
まず一番最初にに伝えたいのは本記事のタイトルにもある「可読性」の重要性です。
プログラムの「可読性」を意識する事はプログラムを書く上で最も重要な事です。
この可読性を上げる努力をする事がプログラミング技術を向上させる最も近道になります。
えー?可読性って読みやすいだけでしょ?
そういう声が聞こえてきそうですね。そう思う人はまだまだプログラミングの神髄からは程遠いと思った方が良いです。少なくとも実践ではまだまだのレベルにいます。可読性の重要性を知る事が重要です。
「可読性」は単純なプログラムの見やすさだけを言うのでは無い
”可読性”と聞くと「読みやすさ」と変換する人がいます。
読みやすさ=キレイと勘違いをして、ブロックコメントを綺麗に装飾したり、インデントにこだわったりする人もいます。
それは読みやすさではなく、見やすさです。
本当の意味でのプログラムの読みやすさは”理解しやすさ”になります。
「可読性が高い」は「理解しやすい」と覚えて下さい。
素晴らしいプログラムは非常に可読性が高く容易に理解できます。
可読性の高いプログラムは処理が小さく簡潔なブロックに分かれている
処理がきれいに分割されていて理路整然と並んでいる事も可読性を上げるために必要な事です。
可読性の高いプログラムが処理が小さなブロックに分けられて理路整然と並んでいます。
初心者にプログラムを教える時にプログラミングの学習の前に「カレーを作る作業を洗い出す」事をやったりしています。長くダラダラ
カレーライスを作る作業を順番に並べていってもらう訳ですが、プログラミング初心者は色々思いついたままに出してしまいます。
ついつい初心者がやりがちな洗い出しです。
- じゃがいもを買う
- にんじんを買う
- たまねぎを買う
- 肉を買う
- お米を買う
- 米を洗う
- 米を炊く
- じゃがいもを切る
- にんじんを切る
- たまねぎを切る
- 肉を切る
・
・
・
順番に個別の作業が出てきます。
更にはあれが漏れた、これも必要と途中途中に追加されていくのでグチャグチャ。
では、まず全体の工程、大きな単位から洗い出せたらどうでしょうか?
- 材料を買う
- 下ごしらえ
- 調理をする
- 盛り付けをする
これだけで全体がわかりますよね。
そして、工程に作業を入れていく。
例えば「材料を買う」工程に作業を入れます。
- 材料を買う
- じゃがいもを買う
- にんじんを買う
- たまねぎを買う
- 肉を買う
- お米を買う
大分わかりやすい。
材料を買うと頃には材料を買う事しかないので安心して読めますよね。
まただらだらだら~と書かれているプログラムは突然突拍子もない処理が始まったりと読むほうも気が気じゃないんです
文章で例えると章、段落に書かれている内容で全てが把握できる状態です。
可読性の高いプログラムは処理が流れる様に進んでいる
可読性の高いプログラムは淀みなく処理が進んでいきます。
一連の処理のブロック内で一旦データを貯めておいて・・・の様な処理がないですし、当たり前ですが、コード内で複数の処理が同時進行していたりしない。
処理のブロック内なのに一旦データを置いておいての様な処理が出てくるという事は、もう少し見直すとこがある証拠です。
流れの中でデータを取っておいて別のデータを加工する様なプログラムは非常にわかりにくいです。
今、書いているプログラムがこうなっていたら見直す必要があります。
可読性の高いプログラムはフラグを多用しない
フラグは悪です。
仕方なく泣く泣く利用する事もありますが、それでも悪です。
そう考えておくと安易に使わなくなります。
ヤバイのは安易にフラグに逃げる事です。
ん?フラグ?と思った時は安易にフラグを使うのではなく、アルゴリズムを見直しましょう。
フラグって安易なんですよ。便利じゃなくて安易。
フラグ立てておいて、あとでフラグで分岐させるって安易に思いつく方法なんです。
フラグを多用するとプログラムが複雑になるだけでなく、可読性が著しく下がります。
安易に使った代償が大きいんですよねぇ。
同様にモードも悪。
メソッドにモードを設けて内部で動作を切り分ける事をする人が多い。
もはや悪の権化です。
可読性の高いプログラムは適切なコメントが書かれている
プログラムを読む為の手助けとなるのがコメントです。
可読性の高いプログラムは処理に迷う隙を与えずに適切なコメントが書かれています。
コメントが必要なのはアルゴリズムの全体像と、コードからアルゴリズムが読み取れない様なイリーガルな処理がある場合です。
適切な場所に適切なコメントがあるのは、必要な時にスッと手を差し伸べて導いてくれているのと同じくらいありがたいです。
逆に不必要なコメントほどうっとおしいものはありません。
なんか横でぐちゃぐちゃと余計な情報まで言う話の長い人を想像してください。
嫌ですよね。コメントは多すぎても可読性を下げます。過ぎたるは猶及ばざるが如しですね。
可読性の高いプログラムは理解してもらうために細部にまで気をつかっている
可読性の高いプログラムというより、可読性の高いプログラムを書く人の特徴と言って良いでしょう。
可読性の高いプログラムを書く人は、ありとあらゆる所まで気を使っています。
心構えですね。これはいつも心に忍ばせておきたいものです。
可読性を高める事の重要性を知っているからこそ、細部にまで気を使ってコードを書いている。
当たり前の様ですが、「マジックナンバーを使用しない」「変数名に気をつかう」などもそうです。
これらに気を遣う事の本質を知っているからこそ、使わない訳ですね。
本質を理解できている。ただ単純に使ってはいけないと覚えている訳じゃないんですね。
可読性の高いプログラムで最も重要な事はセオリー通りのアルゴリズムで記述されている
プログラマーがプログラムを記述する上で最も重要な事です。
アルゴリズムがセオリー通り記述されている事がとてもとても重要です。
プログラムは論理を手順化したアルゴリズムをコードに落とし込んだものです。
プログラムの世界だけではなく、世の中の常識的な事は大体手順が決まっていますよね。
ジェスチャークイズは手順を示す事で何をやっているかを当てる、おおよそ常識の範囲で手順が画一化されているから成立する訳です。
プログラムも同様で、ロジックに対してのアルゴリズムにはセオリーが存在しています。経験のあるプログラマーは実行する処理を聞いた瞬間におおよそのアルゴリズムを頭に思い描いています。多少のズレはあっても大枠で流れが同じなので理解が早いのはそのせいです。
では、このアルゴリズムがセオリーから外れていた場合どうなるのか?
パニックです。何をやっているのか理解できない状態ですね。
トリッキーな事をやってくる人がいる訳です。驚くほど意味不明な事が書かれていたりする。
なぜ?の嵐になります。
よくプログラム上級者が初心者のコードで出た障害を修正するのにキレているのを見た事ありませんか?
「なんでこんな事してんだよー!!」
完全にセオリー無視のアルゴリズムで書かれている。独自の謎アルゴリズムを記述して余計なバグを作りこんでいるんですね。
当然誰もが理解できるコードが理想ではありますが、高度なプログラムになるとアルゴリズムの前提となった理論を理解していなければ理解はできません。例えば学術的な理論などもありますよね。この様な高度なプログラムを理解できるできないの問題は可読性の前に、各個人のベース知識の差もある事を知っておきましょう。
この辺りに上級PGと通常のPGの壁の様なものがあります。
ただ、今回の内容は普通誰でもかけるプログラムでも大切な事です。
こちらの記事で書いてあります。
新しいアルゴリズムを開拓し、更にセオリーに出来る人が今後プログラマーとして生き残っていく事になります。
アルゴリズムのセオリーを沢山身に着けるために
アルゴリズムのセオリーを身に着けるにはどうしたら良いのでしょうか?
独学だけではなかなか身につきません。
多くのコードを見る、多くのコードを触る。
単純な事ですがこれが一番役に立ちます。
特にオープンソースなどは多くの人の知恵と知識が詰まっています。
これらを見て理解する事でより多くのアルゴリズムのセオリーを身に着けましょう。
まとめ
プログラムの可読性について書いてみました。
実際の現場では可読性の低いコードを書く人が大量にいます。
技術力、技術力と口にしている人でも理解しがたいコードを書く人が沢山といます。
小手先の技術に飛びついたり、トレンドの用語に飛びつく前に、基本をしっかりと身に着ける必要があります。
一番最後に書いたように可読性を高めるためには、セオリーとなるアルゴリズムで記述する事が最も重要です。
そして可読性の高いプログラムを書く為の最短の近道なんですね。
可読性の高いプログラムにはセオリー通り書く必要があって、セオリーを身に着けようとするとより多くのプログラムに触れる必要があり、必然的にプログラムが上達していく。さらにはセオリーも身についているので、ほとんどセオリーの組合せでアルゴリズムが組める。
是非ともセオリーのコードを覚えてください。
コメント