プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

プログラミングが上手いって、どういうこと!?

難しいことをシンプルに分かりやすく書くことができる。それが優秀なプログラマ

マジでプログラミングcから始めたいんだけど意味が分かりません。
マジで上手いってどういうこと?
全部覚えたら皆同じなんじゃないの?
コードを書く速さなの?

プログラミングの上手さってどういう意味なの? : IT速報

この「プログラムは上手い」と言うのは、言い換えると「ソースコードがキレイ」かどうかで、両者はほぼ同義だ。で、何をもってコードがキレイかどうかと言うと、実はほとんど主観だったりする。

コードの書き方は、そのスタイルや自分なりの書き方のクセから始まり、プログラムのアルゴリズム、クラスやモジュールの分類方法、命名規則、コメントのスタイルに至るまで、プログラミングスタイルは人の数だけ存在する。そこに絶対的な基準や評価基準は存在しないので、大雑把に言えば好みの問題で片付けられることがほとんど。

以前書いたようにプログラマは技術者というより芸術家という側面があると思う。なので、ソースコードの上手い下手が主観的になってしまうのは、ある意味必然と言えるのかもしれないね。

大きく分けると

ソースコードのキレイさには二つの観点があると思う。一つは数学的に美しいことで、もう一つは論理構造が美しいということ。

何をもって「数学的に美しい」かは、本当に主観的だ。それは一切ムダのない計算をしているプログラムかもしれないし、難しい演算を非常に短いステップで実現しているプログラムかもしれない。延々と計算しなくては求められない数学の問題を、ちょこちょこっと数式を書くだけで実現してしまう、みたいな感じかな。

もう一つの「論理構造が美しい」というのは、プログラムが理論整然としているということ。これも主観が入ってしまうんだけど、一言で言うなら分かりやすいプログラムということかな。

分かりやすいプログラムというのは

実装がシンプルで素直なんだと思う。それは誰が見ても理解しやすい。そんなプログラム。

素直に考えてプログラムを実装するというのは、簡単そうに思えるかもしれない。でも、実は素直に考えるっていうのは、とても難しい。

むしろプログラムを難しく書く方が、実は簡単なんだ。プログラムの多くは何らかの入力に対して処理を行い、一定の出力を得ることなので、そこに至る過程は極端な話何でもいいわけ。でもそれが論理的じゃなくて経験則だったり、冗長な処理をしていると、後で何をやっているか分からなかったり、改造するのに一苦労だったりする。そんなコードには美しさは感じられない。

難しいことを、シンプルに、とても簡単そうにやっている。そんなプログラムを書くプログラマは、ぼくが知る限り、みんな優秀だったよ。

もちろんシンプルなだけじゃなくて、そんなプログラムは至る所に細かい配慮がされていて、関心させられる。ぼくは、そんなソースコードが「美しいコード」と思う。

そんなプログラムが書けるようになるには

月並みだけど、精進しかないんじゃないかな。良いコードを書くには悪いコードのことも知ってなくちゃならない。自分が書いたコードと、読んだコードの量だけ、キレイなコードが書けるようになれるんじゃないかと、yasuhoは思うんだ。



関連記事:
美しいプログラムとは何か - プログラマyasuhoの隠れ家
プログラマの考える美しいプログラム - プログラマyasuhoの隠れ家