• 締切済み

プログラムを始めるなら

C言語をある程度知っている人なら、プログラミングは大丈夫だと言われる理由って何でしょう? 別にC言語を元に全てのプログラムができたわけでもないし、 オブジェクト指向のプログラムとは毛色が違うし。 私自身C言語,javaなどのソースが読める程度しかできませんが、 プログラミングが出来るとはお世辞にも言えません。 何故このような事が言われているのでしょう? また、最初に学ぶべき言語としてはやはりC等の言語がいいのでしょうか? それともアセンブリ言語のような物の方がいいのでしょうか?

みんなの回答

回答No.4

> >作るものによって学ぶ言語を選択するのがいちばん健康的 > 作るものが何になるか分からない時はどれが一番でしょうか? Ruby, Python, Java, C#, あたりだったらどれでも良いと思います。 あえていうなら、(かなり偏見ですが)その中で純粋に勉強しやすいのは Java かなと。Pythonは書籍不足、Rubyはやり方が多彩、C#はウィザードやプロジェクトの設定等が問題になることがあり厄介。

回答No.3

まず、Cは大体の事が出来るので、一度のめり込んでしまえば、 長く勉強できる。また、その課程でOS、メモリ、シェル・・・等、 プログラミングに当たって今後重要になる知識が自然と身に付いてきます。 一番大きいのは、開発環境でしょうか。 VCを購入せずともgccやbccといったコンパイラで十分勉強できます。 JAVAに比べると開発環境も比較的軽量ですしね。 さらに、書籍やウェブページなど勉強するに当たっての環境が豊富なことも挙げられるでしょう。 No2の方が仰るとおり、デバッグは面倒ですが、 逆に考えると、Cの面倒なデバッグが身に付いてしまうと、 他の言語でのデバッグは比較的簡単に思えるかも・・・いやそうでもないか? アセンブラはCの後にやった方がわかりやすいかと。 というよりも、最近の言語と形態が違いすぎるので、 アセンブラは、言語と言うより"アセンブラ"とういう認識の方が良いかもしれません。 ただし、知っておいて損はありませんし、職によってはアセンブラやCOBOLが役に立つ事が多いのも確かです。

miniture_min
質問者

お礼

回答ありがとうございます。 私の職自体ではアセンブラを直接使うことは皆無なのですが、 言語の理解として必要かどうかが気になっていたのです。

回答No.2

C言語を "最低限" 勉強すると、ポインタについての知識がつくと思います。ポインタを理解していると、他の言語で「参照渡し」「値渡し」などの概念が出てきたときに、即座に(そしてわりと正確に)理解することができます。また変数とヒープ領域の関係について理解していることも強みです。 C言語を "ある程度" 勉強すると、メモリについての知識やシェル、OSとそのインターフェイスについても知ることになります。これはなかなか他では得られない利点でしょう。(もちろん、知る意思がないと知ることはありませんけどね) RubyやJavaしか知らない方がC言語を独学する様子を見ることがあるのですが、そういった方がよく引っかかるのが意外にも変数とヒープの関係だったりします。Javaでも学習すると思うのですが、プログラムの本筋でないと思われ、見過ごされてしまうのでしょうか。 ただし、入門言語としてC言語には問題点があります。とりあえず二つ。 ひとつには、デバッグがしにくいということ。C言語では本来望まれる形以外でメモリを参照することが出来るので、潜在的にバグとなりうる箇所が激増します。加えてC言語ではプログラムのソース自体には関数以上の構造がなく、また#includeがそのまま他ファイルを読み込むという仕様であるため、バグが出た位置の特定が難しいことすらあります。あとポインタを用いると(ポインタじたいは汎用的すぎるので)コンパイラによるエラーの発見が困難になるという、言語仕様から来る問題もあります。 またもうひとつは、変数などの概念がまるきり抽象化されていないこと。もともとC言語はOSを書くために設計されたため、低レベルな部分についても触りやすい、「高級アセンブラ」という位置づけのものです。ですからC言語における変数とは本当は「メモリ上のある領域」という意味づけでしかなく、そこにどのような値を導入し、どのような値を取り出すかという単位で考えることが可能になってしまいます。つまり「変数」という概念の枠を越えてしまえるのです。 その他の高級言語では変数自体に(型情報など)何らかの意味づけが加えられ、安全性が増しています。また変数も変数という抽象的なものであって、「何か」を出し入れするための名前であり、その中身についてメモリ上のマッピング等を考えることはありません。良くも悪くも、より抽象的にとらえられるのです。 はじめてのプログラミングの学習において本来大事なのは、プログラムのアルゴリズムやデータ構造の作り方、もう少しレベルを落としてフローといったことであると思っています。こういったことを学ぶ前に言語の落とし穴にはまりがちであるC言語およびC++は、はじめての言語としては私はあまり適しているようには思いません。そういう意味ではRubyなどが良いのかも知れませんね。 なんにせよ、作りたいもの次第で使う言語は変わるものなので、作るものによって学ぶ言語を選択するのがいちばん健康的だと思います。 アセンブリ言語は知ると幅が広がりますが、今の時代、初めての言語としては意味があるように思えません。 RubyやPython, Javaなどの高級言語で学ぶことの方が圧倒的に多いはずです。

miniture_min
質問者

お礼

回答ありがとうございます。 >変数とヒープ領域の関係について理解していること なるほど。 >作るものによって学ぶ言語を選択するのがいちばん健康的 作るものが何になるか分からない時はどれが一番でしょうか?

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.1

>C言語をある程度知っている人なら Cじゃなくても、ある言語(特殊な物を除く)を知っていれば同じですね。 言語の機能を知っているかはあまり重要でなく(リファレンスを見ればいい)、プログラミングの概念が身についているかどうかが重要です。 >また、最初に学ぶべき言語としてはやはりC等の言語がいいのでしょうか? >それともアセンブリ言語のような物の方がいいのでしょうか? アセンブラはアセンブラで重要ですが、何を目的に学ぶかで違ってくるでしょうね。GUIアプリとかWebアプリを開発するのが目的なら、アセンブラは必須ではないでしょう。ただ、「アセンブラを学んだがさっぱり理解できなかった」という人は、プログラミングに向かないと思います。

miniture_min
質問者

お礼

回答ありがとうございます。 >何を目的に学ぶかで違ってくるでしょうね それもそうですね。

関連するQ&A

  • オブジェクト指向プログラミング学習向けのサンプルプログラム

    「これは参考になるよ」というような、 オブジェクト指向プログラミング学習向けのサンプルプログラムを教えていただけませんか? 言語はDelphiです。 Delphiに限らず、他言語(Java、C#、C++あたり)でも結構です (移植しますので、出来ればCUI、GUIが少ないものが理想です) よろしくお願いいたします。 Delphiにてオブジェクト指向プログラミングを学んでいます。 書籍等で、基本的なことは学びました。 理解度およびスキルを上げるために、実際にプログラミングしたいと思います。 (入門書を利用してや、 自分で考えながらのテスト的なプログラミングには限界を感じてまして^^;)

  • オブジェクト指向、理解しやすい?

     最近、Javaの解説書や解説サイトを見ていて、しばしば、「Javaは完全なオブジェクト指向だから理解しやすい」といった記述を見かけます。(「プログラムが見やすくなる」とかではなく)  Javaに限った話ではないのですが、個人的に、オブジェクト指向の概念は、プログラミング初心者の最大の関門ではないかと勝手に思っています。僕はPHPから入ったのですが、ある程度基本事項をマスターした後も、オブジェクト指向だけは長い間苦手としてきました。(最近やっと慣れてきたところです。)  そこで伺いたいのですが、最初にやったプログラミング言語がオブジェクト指向だったという方、オブジェクト指向の概念は、 1.わかりやすかった 2.そこでつまずいた 3.特に意識せずに通り過ぎた 4.その他 いずれでしょうか? ※最初にJavaについて書きましたが、これはただの例なので、オブジェクト指向言語全般についての質問であるととらえてください。

  • C++とJava

    オブジェクト指向を採用しているC++とJava。オブジェクト指向プログラミングに関連している部分で、二つの言語の大まかな違いは何でしょうか。

  • Cとjavaの違い

    学校でC言語プログラミングを学んでおり,新たにjavaも習うことになったのですが, C言語とjava言語の違いはどのような所なのでしょうか? java言語は「オブジェクト指向」ですが,C言語は何指向なのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • C++の将来性・・・

    昨年まで、C++プログラマをしていました。しかし恥ずかしながらぜんぜんオブジェクト指向じゃないコードを書いていました・・・ いまJavaで仕事していて感じるのですが、C++にはガベージコレクションがないので、実はオブジェクト指向プログラミングがとてもやりにくい言語ではないですか? そうなると、C++の必然性がなくなり、C Java C# に取って代わられてC++は消え去っていく言語なのでしょうか。 「いやC++はすばらしいオブジェクト指向言語だ!」というお叱りを期待しています。

  • 手続き型言語からオブジェクト指向型言語にコンバート

    COBOLで書かれたプログラムをC#、JAVAなどのプログラムに書き換えるって簡単ですか? COBOLは構造化プログラミングと呼ばれ、JAVAなどはオブジェクト指向でタイプが違うのではないかと思うのですがいかがでしょう?

  • アセンブリ言語は原始プログラムですか?

    質問(1) アセンブリ言語というのは、 add $S1, $S2 みたいなやつですよね? wikipediaで「ソースコード(ソースプログラム、原始プログラム)」の注釈1,2を読むと、 注1:【機械語の命令に記述するアセンブリ言語(アセンブラ)が存在するが、このアセンブラ用の文字列で記述されたプログラムはソースコードとは呼ばれないのが普通である。】 注2:【アセンブリ言語で書かれたプログラムはソースコードと呼ばれない】 と書かれてあります。 でも、 他の教材では アセンブリ言語で書かれたプログラム(原始プログラム) と書かれています。 どっちが正しいのでしょうか? 質問(2) 目的プログラム(オブジェクトプログラム)とは、 IT用語辞典によると 【オブジェクトプログラムとは、ソースプログラム(人間が認識できるプログラム言語で高水準言語など?)をコンパイラで機械語に翻訳したプログラムのことである】 とありますが、 ソースプログラムをコンパイラで翻訳するとアセンブリ言語になるんではないのですか? そのアセンブリ言語をアセンブラで翻訳して機械語になるのではないのでしょうか? どなたかご教授ください。 お願いします。

  • オブジェクト指向が先?言語が先?

    これからプログラミングを勉強するとして、オブジェクト指向の本と言語の本があるとすれば、どちらを先に読むべきなんでしょうか? オブジェクト指向って考え方ですよね? どんな分野も考え方の部分って、やる前に教わるより、ある程度経験を積んでからの方が理解できることが多いと思います。 となると、プログラミングもまずは言語を覚えて、ある程度いろいろ作れるようになってからオブジェクト指向に手を出した方が良いんでしょうか? それともオブジェクト指向を勉強してからの方が、言語を理解しやすくなったりするのでしょうか? そもそも個人が趣味レベルでプログラムをするのに、オブジェクト指向って必要なんでしょうか?

  • オブジェクト指向の教え方

    新入社員にJavaを教えているところなのですが、オブジェクト指向プログラミングをどのように教えていいか困っています。 全員がC言語研修を受講済みで、さらにJava言語も、継承やオーバーロード、例外まで一通り教えて、一応理解しています。 そこで、次のレベルとして、C言語風のプログラミング(「プログラム=関数の集まり」の考え方)から、オブジェクト指向(「プログラム=オブジェクトの集まり」の考え方)に意識改革させたいところです。 問題領域をオブジェクトの集まりとしてとらえ、そこからクラスを抽出していく、という説明がよくありますが、 「何をオブジェクトにするのか」「どのようにクラスを抽出したらいいのか」の部分を詳しく教えたいのですが、どのように説明したらいいでしょうか。また、参考になるWebサイトなどありませんでしょうか? 自分が普段作るときは、ほぼ「勘」でクラス設計していますので、それでは教えられなくて困っています。よろしくお願いします。

    • ベストアンサー
    • Java
  • 言語別(C/C++,Java等)の計算速度の違いが知りたいです。

    言語別(C/C++,Java等)の計算速度の違いが知りたいです。 巡回セールスマン問題を解く(よさそうな解を見つける)プログラムを書くことになったのですが、言語が自由です。 オブジェクト指向言語で組もうと思っているんですが、C++、C#、Javaなどの言語のうち、計算速度が早いのはどれでしょうか? 順番も分かれば、教えてほしいです。 また、もしC言語で組めれば、やっぱりオブジェクト指向言語よりも早いのでしょうか? 大体でもよいので、分かる方いたら教えてください。 よろしくお願いします。

専門家に質問してみよう