プログラムの基本であるインデント

Pocket
LINEで送る
GREE にシェア
LinkedIn にシェア

プログラムスクールで講師をして、初心者に対してプログラムを教えていると、人がプログラム思考になっていく過程を見ることができますが、プログラム初心者はインデントを理解できない人が多いことに気がつきました。
 

プログラムのインデントとは、行の書き始めを段落に揃えて記述する方式ですが、文章を書く段落と同じ感じで、見た目良く書く事を目的としています。
 

もちろん、スクールの最初にインデントについては、しっかりと教えているのですが、プログラム初心者はこうしたインデント記述を何故理解することができないのでしょうか?

初心者プログラマーの書き方サンプル

スクールで書かれたプログラムを少し見てみましょう。
javascriptで九九の掛け算を表示するプログラムを書いた時のソースコードです。
 

こちらは、正解として書かれたプログラムで、問題なくインデントが書き込まれています。
これを初心者が書いた場合どうなっているかというと・・・

または、

このように書きがちなのはいくつかポイントがあり、まず、基本的にプログラム初心者は改行するポイントが分からないようです。
 

改行していてもしてなくても実行されてしまう言語においては、インデントを入れようが入れまいが、何の問題もないため、自分で気がつかない限りこのままの状態になってしまいます。
 

もちろん、こうしたプログラムを初心者が書いた後で、ソースレビューを受けて、インデントを入れるように指摘されることで、体感していくのでしょうが。

インデントを理解すると不具合が見つけやすくなる

インデント記述は、見た目が綺麗になるというだけではなく、不具合検知や、書き間違いなどが軽減する効果があります。
 

初心者エンジニアは、プログラムを実行した時に不具合が発生すると、パニクります。
これは、エラーが発生した時に、エラーが出た原因が分からないからパニクるのですが、プログラム上級者は、エラーが出てもサクッと修正して、何事もなかったかのように振舞います。
ドットインストールの動画を見ていると、講師の人が記述ミスをしてエラーが出る場面などを何度か遭遇すると思いますが、すぐに原因を見つけて修正するのがよくわかります。
 

初心者からしてみたら、まるで台本に失敗することが書いてあるかのように感じるようですが、ほとんどがぶっつけ本番で行なっているらしいので、台本ではないでしょうね。
 

ここで注目したいのは、初心者は不具合発生の時に、自分の書いたコードが悪いとは思わず、何かが悪いかもしれないが、少し修正すれば治るはずなのに、何をすればいいかが全く分からず頭が真っ白になるという状態のようです。
 

初心者がfor文を書くと、”i<=10″などの判定箇所が”i=<10″と書いてしまったり、if文で”==”を”=”と書いてエラーが発生する事は、普通によくある事ですが、こうした時にインデントをつけて書かれていないプログラムは、不具合を見つけづらいものです。
 

階層(ネスト)が深いプログラムになると、迷宮化してしまう事は必須です。
 

プログラムにおけるインデントなどの見た目の整理は、不具合検知や、アルゴリズム変更などの際の目安をよりわかりやすくするポイントなので、見た目と同時に思考も整理された状態という事が理解できます。

Pythonはインデントが命

Python言語を使った事がある人であれば、よくご存知ですが、Python言語は、javascriptやPHPのような{}(括弧)でくくるのではなく、インデントによって、プログラムのネストを制御しています。
 

Ruby言語などは、 {}(括弧)ではなく、”if thne ~ end”や”for end”というように、”end”という記述で括弧閉じを行うので、インデントを整えておかないと、ソースコードがわかりにくくなってしまうという特性もあります。
 

こうして、インデントを重要視する言語を使うと、否が応でもインデントを整えないといけないのですが、どの言語でもインデントが重要である事は間違いありません。
 

僕の行なっているスクールの目安として、インデントをきちんと整えないといけないとわかる事で、プログラムスキルが上がったことを評価するようにしていますが、実際に初心者がスキルアップする過程で、インデントがきちんと使えるようになると、自分のソースコードから不具合を見つけて修正する時間も短くなる事も体感しています。
 

プログラム初心者の人は、一度インデントの重要性を考えて見ると、それだけでスキルが少し上がるかもしれませんよ。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です