プログラミング学習とインデント
TL;DR
研修講師とかやっているとプログラミングを学んでいる人のソースコードを見る機会があります。その結果、コードのきれいさと実力には相関関係があるのでは?と感じることがあります。
コードのきれいな人はそれだけ理解しているのではないかと考えています。
経験則:コードがきれいな人はレベルが高い
デスクトップがきれいな人はスキルが高い?
昔、パソコンのデスクトップがきれいな人はできる人、みたいなことが言われていたことがあります。自分の周りだけかもですけど。もちろん、どこに何があるのかが自分でわかっていれば、デスクトップが一見乱雑に見えても当人的には問題ないのかもしれません。
ただ、それで本人も目的のファイルを探すのに時間がかかったりしているようでは言われても仕方ないかもしれません。
ソースのきれいさと理解度の関係
それと同じような感じかもしれませんが、プログラミング研修でちょっとした問題に引っかかってしまう人はインデントがぐちゃぐちゃだったりします。逆にちゃんとインデントしている人、適切なコメントを書いている人はその程度の問題で詰まったりはしないことが多いです。あくまで、プログラミングに慣れていない段階での話ですけど。
具体的にありがちなのは、インデントがぐちゃぐちゃな人はクラスや関数、ifやforなどのブロックの範囲をきちんと把握してないことが多い傾向が見えます。例えば、メソッドを追加するときに誤ってメソッドの中に追加してしまうとか。
まあ、インデントがおかしいのですから、そりゃ間違うよねと感じます。逆に言えば、インデントがきれいな人はそういう問題にはあまりひっかかりません。そりゃ、インデントが揃っている方がその手の問題は見つけやすいですよね。
/* よく見るインデントぐちゃぐちゃコード */
public class Foo {
public void func1() {
if (/*condition*/) {
// なんかのコード
// ...
}
public void func2() { // 本人はfunc1の後にfunc2を追加したつもり
// なんかのコード
// ...
}
}
}
コピペプログラミングの弊害
もちろん、今時のエディタはある程度自動的にインデントを整えてはくれます。が、テキストやネットなどからコードをコピペする人はインデントが崩れがちで、それを放置しているとぐちゃぐちゃコードのできあがり。
その結果、上に書いたようなエラーコードを書いてしまうのかと思います。
本当にコードがきれいな人のレベルが高いのか?
コピペでもいい、その後の行動がポイント
別にコピペでも生成AIでもなんでも、中身を理解していればよいと自分は思います。その点、インデントを整える人は、貼り付けたあとのコードを理解しようとしているのかな、と思います。
まあ、絶対そうだとは言い切れないですが、少なくともぐちゃぐちゃな人は貼り付けた後は適当に変数名やメソッド名を直しているだけなんだろうとは想像できます。
そうすると、エラーが起きても何が原因かわからないということになるのかと。その点、コメントまできっちり書く人は中身を理解している率が高そうです。
まずはインデントから
最近はIT関係の企業の新卒や中途で採用された方々も文系出身の方が多いです。プログラミングは初めてという方も当然多いです。そういう人でも、伸びる人はインデントやコメントがしっかりしています。
もちろん、ただインデントをつけるだけでは意味がないです。インデントするだけなら大体のエディタやIDEにはそういう機能が用意されてますし、手作業でインデントを整えることにあまり意味はないです。
ただ、インデントを整えればブロックの範囲の間違いなどに気づきやすくなりますし、整えないと中身を理解するのもやりにくいはず。
その上で何をやっているかを理解することが大事で、それをコメントとして残すのも有効な学習法です。
インデントは三文の徳
そんなわけで、インデントを整えてる人は比較的理解している人が多いのではないかという話でした。ただインデントしてるだけではあまり意味がないのも確かですが、インデントを整えてない人は理解できていないことが多い印象はあります。
結局、インデントをすることで三文ならぬ3点のメリットがあるのかと思います(メリットがあると言うより、そうしないとそもそもやりにくいよね?という話ですけど)。
ブロックの範囲の間違いに気づきやすくなる
それ以前に間違いを起こしにくくなる
そもそもプログラムを理解しやすくなる
蛇足:タイトル画像
「インデントを整えるプログラマ」の画像を生成するようにMicrosoft Copilotに頼んだ結果、なんか不思議な画像が出てきました。
やはり海外のプログラマはピザ好き?(日本はカレー好き?)と思いつつ、なんで画面が横で正面がピザなのやら。ああ、ピザボックスタイプのコンピューターか!(そうじゃない)
拙い記事でございますが、サポートしてもよいよという方はよろしくお願いします。著者のやる気アップにつながります。