LoginSignup
2
1

More than 5 years have passed since last update.

業務の現場で求められる「美しいソースコード」

Posted at

業務の現場で求められる「美しいソースコード」とは?

何やら巷では、こんなことが話題になっているらしい。

★同じ動作をするプログラムでも、ソースコードの書き方は人それぞれで変わってきます。わかりやすく「美しい」ソースコードは業務の現場では、あまり求められません。動けばOKと気楽に♪

そもそもプログラマーとは「ソロアーティスト」か「オーケストラの演奏者」か。

「ソロアーティスト」的プログラマー

プログラミングという仕事は、職人や芸術家、ソロアーティストのように、その独自の発想性・創造性を発揮し、その人間にしか作れないものを生み出す仕事である、という側面がある。

ナーシャ・ジベリというプログラマが居た。もっとも有名なのは、ファミコン版ファイナルファンタジーにおいて、飛空艇の4倍高速移動を実現させたことであろう。

金子勇というプログラマがいた。Peer to Peer技術を利用したファイル共有ソフト Winnyを実現した。

天才というにふさわしいプログラマは存在する。そして天才は、天才にしかなすことのできない仕事をしてきた。その仕事は確かに「美しい」ともいえるだろう。

「オーケストラの演奏者」的プログラマー

プログラミングという仕事は、オーケストラの演奏者のように、与えられた仕事を確実にこなすこと、そして、その仕事を確実に次に引き継ぐ仕事である、という側面もある。

無論、一人ひとりに高い能力が求められることはある。だがそれ以上に、周囲から協力を引き出し、また、周囲へ協力をすることで、個々人の能力の総和以上の成果を、組織として引き出す仕事でもある。その仕事は確かに「美しい」ともいえるだろう。

相反する「美しさ」

これらの美しさは(完全にとは言わないが)相反する「美しさ」である。

その人間にしかできない仕事をしてしまえば、他の人間がその内容を理解する事もできず、保守もできず、そして問題が起きれば一人の人間に依存せざるを得ない。そしてその人間以上の才能を持った人間が出てこない限りは、それ以上の成果を見込むことができなくなる、

一方で、組織で仕事をしようとするならば、そのために無駄が生じる事もリスクになる。誰にでもわかるようにドキュメントを用意し、ソースコードをきれいに書き直し、あるいは、変数名をわかりやすくする。そうした努力は、直接的な成果とは違い部分であり、時として「そこまでは求めていないよ」となる。

じゃあ、どういう教育をすればいいのか?

  • 1) 失敗しても、何も壊れない。
  • 2) 要求を満たさねば意味がない。
  • 3) 他人に対して説明できる
  • 4) 優れているという観点は多数ある。

失敗しても、何も壊れない

まず、プログラミングは 成功パターンを見つけるために、失敗を何度でも繰り返すもの ということを教育に入れなければならない。

例えばプログラミングの試験を考えてみよう。プログラミングに関する知識については確かにペーパーテストでよいだろう。しかし、実技に関して言えばペーパーテストなど意味がない。 トライアルアンドエラーで、納得できる結果を残せ ばよいのだ。そのためには、プログラミングは コンピュータ内で行われる実験であり、何度失敗しても基本的にはそのままもう一度チャレンジできる ということを教えなければならない。

要求を満たさねば、意味がない

そのうえで、ソースコードに求められるのは、要求をしっかりと満たさねば、価値がない事である。

1~10までの総和を表示するプログラムを作りなさい

に対して、

int i,sum;
for(i=1,sum=0;i<=10;i++){sum+=i;}
printf("%d",sum);

とまじめにループで書いても、

printf("%d", ( 1 + 10 ) * 10 / 2 );

と公式を使っても、

puts("55");

で即値で回答しても、全部要求を満たしている。

求められている要求を満たしているならば、それは正解である。要求を満たしていないものは価値がない ということを学ばせるべきである。

他人に対して、説明ができる

「業務としてのプログラミング」では、他人に対してソースコードの内容を説明できなければならない。

その日1日で終わる仕事だったら、引継ぎなんかもいらない。しかし、1日で終わらない仕事ならば、次の日に別の人がその業務を引き継げなければ、誰もそれをフォローできなくなってしまう。

プログラミングにおいては他人とソースコードを共有する事が非常に勉強になる。ある結果を生み出すための過程は多様であり、その中で自分が思いつかなかったものがあれば、それをどんどん吸収するべきなのである。

自分しか保守できないソースコードは、機能性がどんなに優れていても、将来的にゴミにしかならない ということを学ばせるべきである。

優れている、という観点は複数ある

そのうえで、プログラミング教育で学ぶべき点は 優れている、という価値は複数あり、すべての価値を全うできる答えはごく少数。何を求めているのかに応じて、同じものが無価値になったり、最高になったりする 事であろう。

例えば、速度を優先するならば、精度を無視したり、扱える範囲を限定的にしてもよい 場合もある。 また、誰にでも読めるようにするために、 非効率でも丁寧に記載することが望ましい こともある。

例えば、図工などであれば、1人の人間がものを作る機材や時間は限られているので、1つの結果しか出せないだろう。そして、1つ作ると、それを改良することは難しい。

だが、プログラミングならばそれができる。 1つのソースコードを基に改良し、改善し、いじくりまわすことができる。なんなら、他人のソースコードをもらってきて、自分好みに改良することもできる。 このことがこれまでの教育課程にはなかった話なのだ。

まとめると

本当はこう書くべきだったのではないか。

★同じ動作をするプログラムでも、ソースコードの書き方は人それぞれで変わってきます。業務の現場では、"できる限り一番いいやり方"のソースコードが求められます。でもそれは、たった1回のチャレンジの中で見つけるものではありません。自分のソースコードを直したり、先生や他人のソースコードを見たりして、良いところが何かを学び、そして自分が満足できるソースコードを目指しましょう♪

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1