コーディングの極み
- ここで質問してよいのか解りませんが、共通フォーラムだと判断しました。
早速ですが、プログラマには
初級:プログラムの組み方を理解してきた頃
中級:ほとんどのSE・PGが適用される範囲
上級:ソースを見ても、動作の検証に時間がかかり解読が難しいソースを組む人
と、おおざっぱに解釈しておりますが
上級とは、一体どのようなコードを書くのでしょうか?
オブジェクトだろうが、構造化だろうが、解読が難しいというのがよく解りません。
どうか、よろしくお願いします。
回答
わけのわからんソースという点では、CRT(C/C++ のランタイムライブラリのソース類)が一番身近で一番わかりにくい実例じゃないかと。。。
MFCもその設計思想はすげーわけですが、あれはしがらみ多くてまた違った意味で読むのが大変なソースですね。
ATLはその点若干すっきりしてますけど、なんだかんだと10年たったらずいぶんとぶよぶよになってきてる気がします。
変態コードが良ければ、Boostなんかも。。。初歩的なところでは、STLでしょうか。
Boost以外は、VSのスタンダード以上を持っていれば、どれもこれもソースが見れます。サンプルプログラムを書いてデバッガで潜っていけば、動きも把握できます。
これほど手頃なサンプルはなかなかないわけですが、大半の人が見向きもせずにわかりませんと質問してきたりします。
ステップインすれば、そこには別世界が待っているんですがねーw
わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/- 回答としてマークコーベル 2009年11月5日 1:24
- 例えばPerlという言語をご存じでしょうか?
あのソースは相当なものです。ANSI C対応してだいぶ変わったとは思いますが、対応以前のコードは更にすごかったかと。
# Perlで書かれたソースではなく、Perl自身のソースです、念のため。
boostといえばlambdaやTMPかな。- 回答としてマークコーベル 2009年11月5日 1:24
そんな天才さんのソースが、天才さんには解り易い最適化されたソースで
読み解くのに時間がかかるんだろうな。
そういうのを、見てみたいです。
ではお勧めな本を一冊。
Modern C++ Design
http://www.amazon.co.jp/Modern-C-Design/dp/4894714353C++ の究極の一冊です。
この本を読んでいると、あまりのジェネリックの裏技に、
これって C++と違う言語じゃないの?という錯覚に陥ります。(@@)ちなみに、いまだにタイプリストの用途が判らない。。。orz
- 回答としてマークコーベル 2009年11月5日 1:24
すべての返信
上級:ソースを見ても、動作の検証に時間がかかり解読が難しいソースを組む人
逆ですね。
真の上級プログラマとは、「変更が容易で、動作の検証がしやすく、保守しやすいコード」を書ける人だと思ってます。- ご回答ありがとうございます。
今、業界で要求されているコーディングが
おっしゃっている、「変更が容易で、動作の検証がしやすく、保守しやすいコード」で
引継ぎも容易で、最終的には工数を減らせる。
それらを組んでいるのが、ほとんどのSE・PGの中級者と解釈しているのですが。
上級者のコードは、中級者にとっては、難しく理解出来ず
初級者のコードは、中級者にとっては、余計なコードが入っていたりで理解に苦しむ。
つまり、中級者のコードが最適で、上級者のコードは専門的で簡単には
解析できないと理解しております。
そうなると、それはどんなプログラムなんだ!?
ってことになりまして、質問させていただいております。 - 私もひらぽんさんの意見と同じです。
上級と言える人こそ「変更が容易で、動作の検証がしやすく、保守しやすいコード」を書けると思っています。
感覚的にですが、適切にメソッドに処理を分割することができ、メソッド・クラス・モジュール間で依存関係が少ないとか、
プログラムとしての設計も関わってくる感じでしょうか。
部分部分を見るのであれば、中級も上級も大差ないのかも知れませんが、全体の構造として見た場合に差が出てくるのだと思います。 - ご回答ありがとうございます。
申し訳ありません、私の言葉不足でしょうね、議題があらぬ方向へ進んでいる気がします。
中級・上級の定義付けは、個々あると思いまが、私もひらぽんさん、Ahfさんと同様
その条件をクリア出来る人が"上級者"だと思います。
ただ、今回皆さんにお聞きしたいのは【"上級者"の組むプログラム】ではなく
【中級者にも理解が難しい、専門的なプログラム】とは、どんなものなのかと、ご理解ください。
言葉足らずで、申し訳ありませんでした。
既に、1つの答えは頂いておりましたね
>感覚的にですが、適切にメソッドに処理を分割することができ、メソッド・クラス・モジュール間で依存関係が少ないとか、
>プログラムとしての設計も関わってくる感じでしょうか。
部分部分では表現できない事なのかもしれないですね。 ご回答ありがとうございます。
申し訳ありません、私の言葉不足でしょうね、議題があらぬ方向へ進んでいる気がします。
中級・上級の定義付けは、個々あると思いまが、私もひらぽんさん、Ahfさんと同様
その条件をクリア出来る人が"上級者"だと思います。
ただ、今回皆さんにお聞きしたいのは【"上級者"の組むプログラム】ではなく
【中級者にも理解が難しい、専門的なプログラム】とは、どんなものなのかと、ご理解ください。
言葉足らずで、申し訳ありませんでした。
既に、1つの答えは頂いておりましたね
>感覚的にですが、適切にメソッドに処理を分割することができ、メソッド・クラス・モジュール間で依存関係が少ないとか、
>プログラムとしての設計も関わってくる感じでしょうか。
部分部分では表現できない事なのかもしれないですね。
>感覚的にですが、適切にメソッドに処理を分割することができ、メソッド・クラス・モジュール間で依存関係が少ないとか、
>プログラムとしての設計も関わってくる感じでしょうか。
そうですね。
できる人のコードは、簡潔かつ内部で使われているメソッドや変数名も意味が理解しやすく、
クラス間の関連も疎結合・・・結合度が低く変更容易性が高いといった感じでしょうか?
逆に
>ただ、今回皆さんにお聞きしたいのは【"上級者"の組むプログラム】ではなく
>【中級者にも理解が難しい、専門的なプログラム】とは、どんなものなのかと、ご理解ください。
一般の業務アプリケーションとかじゃなく、ドライバの開発や、3D関連で特殊な数学計算等が要求されると厳しいでしょうね。
たとえば3D関連で一般に知られていない独自のライブラリを使っており、しかもリファレンス英文のみとか
さらに使用上パフォーマンスの最優先を要求されちゃったりすると厳しいです!(><)
たとえばこんなの。
http://acesekkei.com/forum/wforum.cgi?mode=allread&no=1715&page=320
http://acesekkei.com/forum/wforum.cgi?mode=allread&no=2302&page=180
http://acesekkei.com/forum/wforum.cgi?mode=allread&no=615&page=160
ちなみに ↑ の WEBMASTER とは私です。σ(^^)
でもここの会議室の話題って、あくまで 「マニアック」 というだけで、決して上級者じゃないんですよね。orzついでですが、Visual C++ フォーラムに行けば
【中級者にも理解が難しい、専門的なプログラム】の話題が大量にあるかと思います。(^^;
Visual C++ フォーラム
http://social.msdn.microsoft.com/Forums/ja-JP/vcgeneralja/threads- ご回答、ありがとうございます。
やはり、VC++ですよね。
私は、未だにVC++のソースを見ると眩暈が・・・
また1つ答えを頂きました。
これらのソースをスラスラと理解出来る方はパソコンの動作をより詳しく理解しておられるのだと
おもいます。
>たとえば3D関連で一般に知られていない独自のライブラリを使っており、しかもリファレンス英文のみとか
>さらに使用上パフォーマンスの最優先を要求されちゃったりすると厳しいです!(><)
特に、パフォーマンスを追及して最適化されたコードなどが
中級者には、難しいのかも知れないですね。
大変、勉強になりました。
ありがとうございます。 - > 初級者のコードは、中級者にとっては、余計なコードが入っていたりで理解に苦しむ。
余計なコードというのは具体的にどういうものかよくわかりませんが、
経験が少ないと冗長なコードを書いてしまうということはあるかもしれません。
でも、個人的には「必要なコードが不足していて理解に苦しむ」ことの方が多いかもしれません。
正しく動くことを前提にプログラムを組んでしまい、必要な例外処理がないとか…。
私のことなんですけどね。
どうでもいい話でした。 - 余計なコードとは、何を指すのか明示出来ませんが。
例えば、1ステップで書けるコードを4ステップで書いていたりとか。
三項演算子などは、良い例かもしれません。
「必要なコードが不足していて理解に苦しむ」、私も同意見です・・・
制御系に多いと思われますが、bit操作等になるとコメントが無いと
理解に時間がかかったりします。 面白そうなので、収束しちゃったようですが出てきました。
「ソースを見ても、動作の検証に時間がかかり解読が難しいソースを組む人」
という部分の解釈ですが、
拡張性に優れ、ポータビリティが高く、なおかつ誰もが使えるような汎用性の高いライブラリを作れるような人じゃないですかね?
そのソースのメンテナンス性は決して高いとは言えない気がしますけど。
別に C や C++ だからとかではないと思いますが、自由度が高いほうが得体のしれないコードが出てくる確率は高いと思いますよ。
わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/- 収束したようで、収束してなかったりします。
色んな有識者の方の意見が聞けて、とても参考になっております。
>拡張性に優れ、ポータビリティが高く、なおかつ誰もが使えるような汎用性の高いライブラリ
素晴らしいですね。理想ですが今まで見た事ないです;
それこそ、その最適化されたライブラリは、私の様な中級者には解読するのに時間がかかりそうですね。
ありがとうございます、勉強になりました。
P.S.
余談ですが、わんくま同盟の方々には、プログラム面でいつもお世話になっております^^ しかし、何をもって 「初級」・「中級」・「上級」 と線引きをするのかってのは難しい問題で・・・
プログラム的には 「初級」 でも、業務仕様の詳細を掴んでいるならそれだけでも戦力になる場合があるし、
逆にプログラミングは 「上級」 でも、性格に棘があって、チーム内で厄介者になり弾かれちゃうケースも見ました。
最近
My Job Went To India オフショア時代のソフトウェア開発者サバイバルガイド
という本を読んだのですが、これ読んでると
「技術が優れ知識が豊富なら優秀なエンジニア」
っていう時代はとっくに終わってて、今後は、
・ クライアントの無茶な要求にも笑顔で応対しつつ、お互いに利益になるような方向に誘導するよう提案できたり
・ 運送関連の案件を請け負ってるなら、宅急便やバイク便の業務知識を抑えるとともに、時には実際荷物を運んでみたり
・ Windows だけでなく、Linux も勉強し、たまには自分でPCを組んでみたり
・ 時には顧客やマネージャを笑わせるネタを考えたりw
ということも、エンジニアとして生き延びてくため必要だなと、つくづく感じてます。(汗- >逆にプログラミングは 「上級」 でも、性格に棘があって、チーム内で厄介者になり弾かれちゃうケースも見ました。
大きな声では言えませんが、この業界にはそういう方が多い気がします。
やはり天才は、何か独特の観念があるのでしょうね。
そんな天才さんのソースが、天才さんには解り易い最適化されたソースで
読み解くのに時間がかかるんだろうな。
そういうのを、見てみたいです。
それにしても、SEは大変ですね。
もうSEとPMの境界線が、あってないようなものですね。
私の上司のPMは、朝から朝まで働いてて、いつ寝てるのかずっと疑問です。。。 そんな天才さんのソースが、天才さんには解り易い最適化されたソースで
読み解くのに時間がかかるんだろうな。
そういうのを、見てみたいです。
ではお勧めな本を一冊。
Modern C++ Design
http://www.amazon.co.jp/Modern-C-Design/dp/4894714353C++ の究極の一冊です。
この本を読んでいると、あまりのジェネリックの裏技に、
これって C++と違う言語じゃないの?という錯覚に陥ります。(@@)ちなみに、いまだにタイプリストの用途が判らない。。。orz
- 回答としてマークコーベル 2009年11月5日 1:24
わけのわからんソースという点では、CRT(C/C++ のランタイムライブラリのソース類)が一番身近で一番わかりにくい実例じゃないかと。。。
MFCもその設計思想はすげーわけですが、あれはしがらみ多くてまた違った意味で読むのが大変なソースですね。
ATLはその点若干すっきりしてますけど、なんだかんだと10年たったらずいぶんとぶよぶよになってきてる気がします。
変態コードが良ければ、Boostなんかも。。。初歩的なところでは、STLでしょうか。
Boost以外は、VSのスタンダード以上を持っていれば、どれもこれもソースが見れます。サンプルプログラムを書いてデバッガで潜っていけば、動きも把握できます。
これほど手頃なサンプルはなかなかないわけですが、大半の人が見向きもせずにわかりませんと質問してきたりします。
ステップインすれば、そこには別世界が待っているんですがねーw
わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/- 回答としてマークコーベル 2009年11月5日 1:24
- 例えばPerlという言語をご存じでしょうか?
あのソースは相当なものです。ANSI C対応してだいぶ変わったとは思いますが、対応以前のコードは更にすごかったかと。
# Perlで書かれたソースではなく、Perl自身のソースです、念のため。
boostといえばlambdaやTMPかな。- 回答としてマークコーベル 2009年11月5日 1:24
ひらぽんさん、ご回答ありがとうございます。
『Modern C++ Design』 私のスキルで理解出来るかどうか・・・
今度、見付けたら "立ち読み" してみます(笑
とっちゃんさん、ご回答ありがとうございます。
CRT ATL Boost ですか、情けない話 "ディスプレイ"か!?
としか理解出来ませんでした・・・
サンプルソースをググってみたのですが、まだまだ深いソースにたどり着けません。
>Boost以外は、VSのスタンダード以上を持っていれば、どれもこれもソースが見れます。
>サンプルプログラムを書いてデバッガで潜っていけば、動きも把握できます。
>これほど手頃なサンプルはなかなかないわけですが、大半の人が見向きもせずにわかりませんと質問してきたりします。
すごい、そそりますね!
すごい眠気が襲い掛かってきそうですが、ステップで追いかけてみたいと思います。
佐祐理さん、ご回答ありがとうございます。
Perlは、言語部分のソースは見た事ありますが、そのもの実態をじっくり見た事は無かったですね。
私の個人の意見ですが、Perlは大嫌いです・・・
組み方色々、ルールは有って無いような、変数を明言しない、コメント書かない
等、素人考えかも知れませんが、本当は奥深い言語なのかも知れませんが
嫌いです^^;
でも、確かに私の質問しているコードとは、このような物なのかも知れないですね・・・
みなさん、ありがとうございます。
大変勉強になりました!


