解決済み

プログラミングに詳しい方に質問です。

初めてプログラミングを、学ぶのですが、C++を最初からするのは無謀でしょうか?

任天堂は主にC++を使用していると任天堂のホームページに書いてあったのでそれをやろうかと思いましたが難度が高いらしく迷っています。また、C♯から始めるということも考えてますが、C++とどれほど異なるのでしょうか。

詳しい方よろしくお願いします。

ベストアンサー

ベストアンサー

主に C および Haskell を使っている者です。


C++ から始めるのが無謀とまでは思いませんが、なかなか馴染みにくい点があるのも事実だと思います。パッと思い浮かぶのは次の 3 点です。


(1) ポインタを介したメモリの読み書き

(2) メモリの確保と解放(OS 相手にメモリを借りたり返したりすること)

(3) オブジェクト指向プログラミング


(3) はさしあたり避けられるものです。必ずしもオブジェクト指向的にプログラミングしなければならない訳ではないので、入門時はいわゆる “better C” として C++ を使えば十分です。


(1),(2) は C/C++ を学び始めて比較的すぐに避けられなくなるものです。メモリ周りのことを正しく扱えるようになるには、プログラムを 1 万行以上は書きこなさなければならないでしょう。


よし扱えるようになったとしても、C++ はなかなか実装に手間のかかる言語です。「このアルゴリズムを理解したいから、ちょっと実装してみよう」と思ったとき、C++ を使うのが良い選択とは思いません。


そこで C++ よりお手軽にあつかえる言語をひとつ覚えておくのが有益です。それを入門用の言語とするのがよいと思います。


C# は入門用にどうかと考えてみると、ためらわれます。(2) は避けられますが、(1) は若干意識しなければならず、(3) のオブジェクト指向の毛色はむしろ C++ より濃く感じます。また C# は私企業の Microsoft が開発しています。C/C++ でディスプレイに印字する標準的関数は printf という名前ですが、C# では Console.WriteLine という独自の名前がついています。Microsoft 流の命名法に慣れると C/C++ とのギャップが煩わしいかもしれません。


たとえば Python なら (1),(2),(3) がすべて避けられ、入門用によいと思います。構文について言うと、C++ も、Python も、C 言語に似ていて、Python の方を覚えれば基礎的構文は C++ の方へ流用がききます。Python の利用者が多いお蔭で、資料や記事が充実しているのも利点です。


しかし (1),(2),(3) を避けるということは、C++ 向けのプログラミング経験が積めないということでもあるので、C++ の習得が目標なら、C++ にもボチボチ触れた方がよいと思います。


以上から、

・Python でアルゴリズムなどプログラミングの一般的知識を学ぶ、

・同時並行的に better C としての C++ を学ぶ、

・C++ の基礎が分かってきたら必要に応じてオブジェクト指向にも手をだす、

という感じにしてみたらどうだろうか、というのが私の意見です。


返信(3件)

回答ありがとうございます。

Pythonという選択肢もいいですね。

そこで、調べてみると、Pythonはゲームの作成には向いていないみたいなのですが、

PythonとCが似ているのにPythonだけゲームを作れないのはどういうわけなのでしょうか。


また、プログラマーの方は大体何個ぐらいの言語を使えるのですか?


まわりに聞ける人が一人もおらず、質問が多いですが、ご教授いただければ幸いです。

通知メールが迷惑メールフォルダにふり分けられており、返信に気がつくのが遅れました。大変申し訳ありません。


上でいう (2) のメモリ解放の問題ですが、Python で書かれたソフトウェアには garbage collector (GC) というプログラムが付属します。ソフトウェアの起動中、OS から度々メモリを借りますが、GC はそれら借りたメモリを監視して「これはもう使い終えたメモリだ」と判断すると OS に返してくれます。


GC は有益な存在です。しかし、GC が働く間はユーザからの入力に対してソフトウェアが応答できない欠点もあります。ユーザが入力するや否や応答を返さなければならないアクションゲーム等では、これは致命的な遅延になりえます。


それなので、Python を始め、作ったソフトウェアに GC が付属してくる言語はあまりゲーム開発に向かないといわれます。

補足

C# でも GC がついて来ますが、しかし Unity というゲーム開発環境では言語として C# が使われています。こちらではリアルタイム性の求められる場面で GC が動かないよう注意してプログラムを書いているそうです。


言語を使えるの「使える」の程度にもよりますが、実際のソフトウェア開発に使ったことのある言語しか使えないと言ってよいと思います。


使う言語にかかわらず、速度の要求される部分だけは C で書くということがあります。それなので、一番慣れた言語に加え、C を知っている他、雑事のためにいわゆるスクリプト言語 (Python など) をポツポツ覚えているというのがよくある例でしょうか。もっとも web プログラマなどは C と縁がないはずです。


構文が分かるというだけなら、それぞれのプログラミング・パラダイムでの代表的言語を 1 つ知っていれば、同じパラダイムの他の言語も大体分かるでしょう。C、Python はともに命令型といわれるパラダイムなので、基礎的構文が共通です。C、Python が似ているというのはそのくらいの意味です。


質問者からのお礼コメント

質問者からのお礼コメント

お二方ともありがとうございます。プログラミング言語の種類について疑問点が解消しました。

C#はunityの存在が大きいこと(tkmrさんの回答)も踏まえて、とりあえずC言語から始めることにします。その後、適切なタイミングでC#をして、またC++もしていきたいと思います。

また、もしCで詰まった場合、Pythonも考えてみたいと思います。

御二方ともありがとうございました。

そのほかの回答(1件)

私はプログラミングを初めてまだ年数が浅いですが、ゲームを作りながらプログラミングを学ぶなら、c♯という言語がおすすめです!


 なぜならunityと呼ばれるゲームエンジンがc♯に対応していて、初心者でもクオリティーの高い2d、3dゲームが作れます

 (ちなみにc++にもunreal engine というゲームエンジンが対応しています。)


また、c♯はrarara様が言っていたc++から派生した言語です。文法はかなり異なりますが、c♯の方が直感的で取っ掛かりしやすいと思います。


また、c#はjavaと言う言語と類似点が多くc#からjavaへと以降して勉強ができるのもおすすめです。