- 締切済み
プログラミングの入門書について
ある事情でC#の勉強をすることになり入門書を買ったのですが全体的に抽象的過ぎて(オブジェクトをリス、クラスを遺伝子に例えて説明するなど)とても分かりづらいです。 この際言語は問わないので 変数を定義したときメモリ上では~が起こっていて、参照をするということは~をすることで~ みたいな説明が書かれた本を探しているのですが何か良い本があったら教えて頂きたいです。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- weavaest
- ベストアンサー率15% (157/1020)
No.4です まだ閉じてなかったので、お礼コメントで気になったこと書きます。 せっかく抽象化されたものを具象化してしまうと、C#の理解が深まる方向にはいかないと思います。Cを勉強するにしても、ハードウェアを制御するための技術は、C#に役に立つ部分は少ないように思います。確かに言語としてはCから進化した言語かもしれませんが、構文が似ているだけで、言語としてのアーキテクチャは別の方を向いていると思います。ですからCとC#は構文が似た別の言語として勉強した方が良いと思います。 そもそも論ですが、C言語で直接メモリをアクセスすることやI/Oポートをコントロールすることは可能ですが、C#の場合だと、.Netフレームワークを介して、OSを介して、ドライバを介してしかできません。見かけ上同じように見せられているにしか過ぎないのです。
- weavaest
- ベストアンサー率15% (157/1020)
メモリ上の状態みたいなハードウェアに近いところを抽象化する目的で、高級言語が出来た訳ですから、その入門書は間違っていないと思います。 C#を勉強するにはアセンブラやC言語を勉強するのとは違う感覚が必要なのかもしれないですね。
- sukeken
- ベストアンサー率21% (1454/6647)
こんにちは。 >変数を定義したときメモリ上では~が起こっていて… こういうのを勉強したいのであれば、C#ではダメですね。 そういうのを意識しなくても良い…と言うことで考えられているような言語ですから。 言語はどうでも良いのであれば、C言語やアセンブラの本を読んでみるのが良いかも知れません。
お礼
アセンブラについて一通り学んだので次はCの勉強をしてみたいと思います。ありがとうございました!
- catpow
- ベストアンサー率24% (620/2527)
>>ある事情でC#の勉強をすることになり入門書を買ったのですが全体的に抽象的過ぎて(オブジェクトをリス、クラスを遺伝子に例えて説明するなど)とても分かりづらいです。 オブジェクト指向プログラミングについて、リスや遺伝子の話を持ち出して説明する書籍が、昔からありました。 オブジェクト指向プログラミングに対して、間違った考え方、害悪を流し続けている説明のやり方だと私は思っています。 建築設計を勉強するとき、施行図や構造図の勉強をしたいのに、デッサンとかラフスケッチの書き方を教えているって感じがしますね。 >>変数を定義したときメモリ上では~が起こっていて、参照をするということは~をすることで~ みたいな説明が書かれた本を探しているのですが何か良い本があったら教えて頂きたいです。 「コンピュータはなぜ動くのか」とか「プログラムはなぜ動くのか」といった日経ソフトウエアから出ている入門シリーズで、まずは勉強されたらいいと思います。 (でも、C#にたどりつくまでは、長い道のりになりそうですね。でも、近道はありません。一歩ずつ歩むしかない・・・) ちなみに、C#って言語は、それまであったC言語やC++、さらにJavaなどの良いとこどりをした言語です。 さらにメタプログラミングなどの知識も要求されます。 そしてオブジェクト指向ってのは、モジュール化プログラミング、構造化プログラミング、複合設計など、多くのプログラミング技術をマスターした土台の上に覚えるべきものです。 いきないC#言語を勉強するってのは、建物の建設に例えたら、基礎や土台を作らず、柱を立てたり、梁を渡そうとしている感じになりますよ。
お礼
「プログラムはなぜ動くのか」一通り読みました。まさに求めていた書籍で、変数の宣言や関数の参照などがどの様に行われているのか分かり非常に参考になりました、ありがとうございました!
- SPROCKETER
- ベストアンサー率26% (2125/7982)
私もC言語を勉強していたことがありましたが、命令のスペルが長くて、解説がわかりにくく、途中で挫折しました。やはり、アセンブラやBASICの方が理解しやすいですね。 機械語にオブジェクトを落として実行するプログラム言語を覚えたいのであれば、アセンブラから始めた方が良いでしょう。アセンブラは命令と処理が1対1で対応しているので、非常にわかりやすい言語です。命令のスペルもせいぜい3文字ぐらいで覚えやすいです。 アセンブラで変数を定義すると、メモリー上の特定のアドレスがメモリーアドレスとして設定され、そのアドレス上のメモリーに読み書き出来るようになります。メモリーを参照する時は、直接アドレス、間接アドレス、インデックスアドレスなどがあり、それらもアセンブラ言語の解説書に詳しく書かれています。 アセンブラに関しては以下のリンク先を参照してください。
- 参考URL:
- https://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%AA%E8%A8%80%E8%AA%9E
お礼
実際にアセンブリ言語の勉強をしてみてメモリやレジスタなどの動きが分かってかなり勉強になりました。ありがとうございました!
お礼
高級言語の存在意義を考えてみれば確かにそうですね。でもC#も急に現れたわけではなく、CやC++などの土台の上にあるものだと思うので理解を深めるためCなどから勉強をして行きたいと思います。ありがとうございました!