トップ回答者
コーディングの極み

質問
回答
-
わけのわからんソースという点では、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
-
そんな天才さんのソースが、天才さんには解り易い最適化されたソースで
読み解くのに時間がかかるんだろうな。
そういうのを、見てみたいです。
ではお勧めな本を一冊。
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関連で一般に知られていない独自のライブラリを使っており、しかもリファレンス英文のみとか
>さらに使用上パフォーマンスの最優先を要求されちゃったりすると厳しいです!(><)
特に、パフォーマンスを追及して最適化されたコードなどが
中級者には、難しいのかも知れないですね。
大変、勉強になりました。
ありがとうございます。 -
面白そうなので、収束しちゃったようですが出てきました。
「ソースを見ても、動作の検証に時間がかかり解読が難しいソースを組む人」
という部分の解釈ですが、
拡張性に優れ、ポータビリティが高く、なおかつ誰もが使えるような汎用性の高いライブラリを作れるような人じゃないですかね?
そのソースのメンテナンス性は決して高いとは言えない気がしますけど。
別に C や C++ だからとかではないと思いますが、自由度が高いほうが得体のしれないコードが出てくる確率は高いと思いますよ。
わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/ -
しかし、何をもって 「初級」・「中級」・「上級」 と線引きをするのかってのは難しい問題で・・・
プログラム的には 「初級」 でも、業務仕様の詳細を掴んでいるならそれだけでも戦力になる場合があるし、
逆にプログラミングは 「上級」 でも、性格に棘があって、チーム内で厄介者になり弾かれちゃうケースも見ました。
最近
My Job Went To India オフショア時代のソフトウェア開発者サバイバルガイド
という本を読んだのですが、これ読んでると
「技術が優れ知識が豊富なら優秀なエンジニア」
っていう時代はとっくに終わってて、今後は、
・ クライアントの無茶な要求にも笑顔で応対しつつ、お互いに利益になるような方向に誘導するよう提案できたり
・ 運送関連の案件を請け負ってるなら、宅急便やバイク便の業務知識を抑えるとともに、時には実際荷物を運んでみたり
・ Windows だけでなく、Linux も勉強し、たまには自分でPCを組んでみたり
・ 時には顧客やマネージャを笑わせるネタを考えたりw
ということも、エンジニアとして生き延びてくため必要だなと、つくづく感じてます。(汗 -
そんな天才さんのソースが、天才さんには解り易い最適化されたソースで
読み解くのに時間がかかるんだろうな。
そういうのを、見てみたいです。
ではお勧めな本を一冊。
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
-
ひらぽんさん、ご回答ありがとうございます。
『Modern C++ Design』 私のスキルで理解出来るかどうか・・・
今度、見付けたら "立ち読み" してみます(笑
とっちゃんさん、ご回答ありがとうございます。
CRT ATL Boost ですか、情けない話 "ディスプレイ"か!?
としか理解出来ませんでした・・・
サンプルソースをググってみたのですが、まだまだ深いソースにたどり着けません。
>Boost以外は、VSのスタンダード以上を持っていれば、どれもこれもソースが見れます。
>サンプルプログラムを書いてデバッガで潜っていけば、動きも把握できます。
>これほど手頃なサンプルはなかなかないわけですが、大半の人が見向きもせずにわかりませんと質問してきたりします。
すごい、そそりますね!
すごい眠気が襲い掛かってきそうですが、ステップで追いかけてみたいと思います。
佐祐理さん、ご回答ありがとうございます。
Perlは、言語部分のソースは見た事ありますが、そのもの実態をじっくり見た事は無かったですね。
私の個人の意見ですが、Perlは大嫌いです・・・
組み方色々、ルールは有って無いような、変数を明言しない、コメント書かない
等、素人考えかも知れませんが、本当は奥深い言語なのかも知れませんが
嫌いです^^;
でも、確かに私の質問しているコードとは、このような物なのかも知れないですね・・・
みなさん、ありがとうございます。
大変勉強になりました!