質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.45%

  • JavaScript

    21045questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Java

    16209questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • C++

    4544questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Node.js

    2430questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

  • オブジェクト指向

    332questions

    オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

C++とJavaどっちがおすすめですか?

解決済

回答 7

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 903

WeilSpinor

score -46

いま、JavaScriptとhtml、php、MariaDB(MySQL)を使ってプログラミングの勉強をしています。
応用の幅の広いDOMや、Node.jsの助けもあって、当分は、プログラム制作はこれで事足りると思います。

しかし、少し思うところがあって、C++かJavaをやろうかと思っています。

思うところとは以下の通りです:

・クラス型のオブジェクト指向を勉強してみたい

私が初めて「オブジェクト指向」という言葉を知った本では、クラス型のオブジェクト指向を前提に書いており、でも、今やっているJavaScriptはプロトタイプ型を採用しているようで「なんだ、違うのか」と思い、少しがっかりしました。

なんかJavaScriptでオブジェクト指向を勉強していると、
プロトタイプ型なのにも関わらず説明においてクラス型の作法を持ち出してくる説明や教材が多かったり、
「でもクラス型の方が定義が厳密で理解しやすいよな、わかるよ」という気持ちもあったり、
でも、記事によっては頑なに「クラス」とか「インスタンス」なんて言葉は使わないぞ、というものもあったり、(でも公式リファレンスでは「インスタンス」とか言ったりしている)
統一感がなくて気持ち悪い感じがぬぐえません。

まあ、どっちも広い目でみれば同じだと思うのいいんですが…(むしろDOMの勉強がそのままオブジェクト指向の勉強になってメリットではあるが)

でもクラス型にも触れてみたいと思いました。
(ECMA最新版ではシュガーシンタックスとしてclass構文が追加されているが、そこまで利用が浸透しているわけではないもよう…)

・Webサイト制作を前提としている情報が多い

HTMLやDOMが描画用のAPIとして優秀なこと、JavaScriptが連携性が高い、PHPが使っていますが、Webサイトの制作にはあまり興味がありません。

この間プログラミングにおける質問をしたところ、どうも、私がやっていることは、JavaScirptやhtmlの使い方として「不自然」なようで、「そんなことやるのなら、サーバー言語で書いた方がいいと思う」と言われてしまいました。
私の興味があることをやっている人は、JavaやC++のようなもっと汎用性の高い(?)言語をやっている人が多いようです。

・Web系言語だと、コンピューターそのものについての理解がしづらい

PHPを使っている時に思ったのですが、PHPでは、ポインタの仕組み、メモリやCPUの動き、といったものがブラックボックス化されていて、公式の仕様書にも詳しくは語られていません。
たとえば、ファイル操作をしているときに出てくるファイルポインタ、というものが、何を指しているのかが明示されていません。(ただ、「参照だ」「C言語とはちょっと違うんです」という言葉を使ってお茶を濁している)
舞台の全様がわからない、というのがあって、なんとも気持ち悪い感覚がありました。
そこらへん、C++言語だったら、「ポインタは、いま使っているメモリのアドレスを指している」という感じに、もっとシンプルな説明ができて、スッキリするのになぁ、と思いました。

・プログラミング一般的な情報についての記述に、JavaScriptはあまり使われていない

オブジェクト指向とか、プログラムの設計とか、そういったプログラミング一般のことを説明している本や記述は、JavaScriptよりもっと有名なJavaとかを使っていることが多いようです。そういうときに、Javaで書かれたコードをぱっとみてわからない、というのが、不便です。

どうするか

他にも、

・スマホアプリ(android)もそのうち作ってみたい
・Apacheのwicketを勉強したい
・やってみたいオブジェクト指向プログラミングの演習書にJavaで書かれている本が多い

というのがあって、Javaがいいかな?、と思いました。
でも、Javaは仮想マシンで動いているので、マシンのことがわかりづらかったりするし、
C++は過去にかじった経験もあるので、
もしJavaと同じくらい汎用性があるなら、
できればC++の方がいいかなと思いました。

ほぼJavaに軍配があがっていますが、あえてC++をやる理由はあるでしょうか?

まぁ、
覚える言語の違いなんてたかだか作法の違いなので、両方やればいい話ではありますが。

ただ、何か後押しがあればやる気もアップするというものなので、なにか言って頂けるとありがたいです。

また、
今やっているHTML+JavaScript+Node.js+phpだけでは実現が難しいが(面倒だが)、JavaやC++の力を借りることで解決可能なこと
があれば、併せて教えて頂けると幸いです。
ご回答お待ちしております。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2019/04/21 00:18

    複数のユーザーから「問題・課題が含まれていない質問」という意見がありました
    teratailでは、漠然とした興味から票を募るような質問や、意見の主張をすることを目的とした投稿は推奨していません。
    「編集」ボタンから編集を行い、質問の意図や解決したい課題を明確に記述していただくと回答が得られやすくなります。

回答 7

checkベストアンサー

+5

こんにちは。

クラス型のオブジェクト指向を勉強してみたい

このためには、恐らくJavaの方が向いていると思います。
C++もオブジェクト指向プログラミングの学習は可能ですが、それ以外の非常に様々な機構(豊富な型修飾、テンプレート、STLなどなど)もあります。なかなかオブジェクト指向プログラミングに注力し辛いかも知れません。

Web系言語だと、コンピューターそのものについての理解がしづらい

確かにJavaでは厳しいでしょうね。コンピュータの仕組みの基本を学ぶならアセンブラやC言語がベストと思います。C++は既にそれらをマスターした上で学んだほうが学びやすいと思います。

プログラミング一般的な情報についての記述に、JavaScriptはあまり使われていない

やはりJavaScriptはスクリプト言語ですから、巨大なプログラムを書くのには向いていないですからね。
動的型付け言語はお手軽なので小規模プログラムを書くのには向いているのですけどね。

というのがあって、Javaがいいかな?、と思いました。

WeilSpinorさんの目標的にはその方が良さそうな感じはします。
他にC#も意外に良いと思いますよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/21 01:31 編集

    ご回答ありがとうございます。
    >やはりJavaScriptはスクリプト言語ですから、巨大なプログラムを書くのには向いていないですからね。

    そうなんですね…。

    では、javaにしようと思います。
    C#ってよく聞きますが、C言語に毛が生えたようなものなんですかね?
    頭の片隅に置いておこうと思います。

    キャンセル

  • 2019/04/21 01:49

    WeilSpinor さん
    C#はマイクロソフトが Java に対抗して作った言語と言って良いと思いますす。設計が新しいことと、ずいぶんアグレッシブに言語を発展させているので面白みも結構ありますよ。
    最近はWindows以外のプラットフォームでも動くように成りつつあるようです。

    キャンセル

  • 2019/04/22 21:26

    > C#はマイクロソフトが Java に対抗して
    J#(MS版Java?)で裁判に負けたので、C#を作ったと聞きました。(当時の情報なんで、記憶が? ですが) それで似ていると共に機能アップしてると。
    今、MSは、C++ を余り推奨して無くて、C#ですね。 (少し前の VisualStudioから、C++は、標準インストールでは入らない)

    キャンセル

  • 2019/04/22 21:37

    pepperleaf さん
    なるほど。J#って字面くらいしか見たことなくてなんなのか知りませんでした。

    MSがVC++を標準から外したのは、プログラマ人口の差と思います。生産性ではC#に軍配があがりますし、C#もC++程ではないにせよかなり速いので普通の用途には十分ですから、無理して生産性的に劣る言語を使う理由がありません。
    しかし、例えばC#のVMを作るとか、OSのカーネルを作る等のインフラ開発にC#等の言語を使うのはナンセンスですし、ハードウェアの進化が鈍りつつある今C++の重要性は増していると思います。
    MSは今もVC++を積極的にアップデートしているようです。積極的なアップデートをしなくなるのはOSベンダーの地位を諦めた時ではないかと思っています。

    キャンセル

  • 2019/04/22 23:41

    VC++が非推奨というのは、Windowsアプリとしての話です。

    また、MSの場合、C++は二種類あって、MSIL上で動くC++(.NET版) とネイティブコードとしてのC++。.NET版は、C++も C# も速度的には大差無いと思っています。(人の差の方が大きい) で、アセンブラコードを出す方が速い。 (MSDNなど見てると、全く別物と言う人もいます)
    > 生産性ではC#に軍配があがり
    これは確かに感じます。C++ は Cの発展形と思いますが、落とし穴も多く、最近の仕様は結構、複雑に感じます。
    > プログラマ人口の差と思います。
    これは、MSの誘導が成功したと思っています。裁判には負けたが、Javaと同じかそれ以上の使い勝手(MS基準)のC# ですね。
    これはあくまで Windows上のアプリの話。OS内部とかは別で、適材適所でしょう。最近のネット上の情報を見ると、OS内部は、昔からのコードも多いので C/C++が大半という情報もありました。
    時々、VC++も使いますが、Windowsアプリとしては、*.h (ヘッダファイル) だけで済むんじゃない ? という妙な書きにくさを感じています。
    (理解が不足しているだけかも知れませんが)

    キャンセル

+5

舞台の全様がわからない、というのがあって、なんとも気持ち悪い感覚がありました。

いいことを言いますね。

そうお考えならC++とか言わずに、アセンブリ言語をやりましょう。
私の若い頃は、アセンブラなんてなかなか手に入りませんでしたから、ニーモニック表を見ながらハンドアセンブルしたものですよ。それに比べて最近の若いやつらと来たら……

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/21 00:09

    > アセンブリ言語をやりましょう。
    確かに正しくはあるんですが、車の運転をするのに、エンジンの仕組みとか、等から勉強しろ、なので、学生のお勉強とか、リタイア後の趣味なら、良いですが、現実では無いと思います。
    車で言えば、今、ガソリンから、電気になった時、エンジンの仕組みは不要になります。アセンブリ言語も今後はどうなるのか?
    もっともアセンブラもCPUで違ったりするので、必要でなければ、泥沼。RISCにCISC, 古くは、スタックマシンとか、LISPマシンとか。必要がなければ、触るもんじゃない、と思います。まあ、Cのコードみながら、アセンブラでデバッグしたこともありましたが、今どき、通用しないのでは。

    キャンセル

  • 2019/04/22 10:39

    > pepperleafさん
    同感ですね。
    同様の理由で、スクリプト言語を学習している途中で「PHPを使っている時に思ったのですが、PHPでは、ポインタの仕組み、メモリやCPUの動き、といったものがブラックボックス化されていて、公式の仕様書にも詳しくは語られていません。」という理由で、別の言語に鞍替えするというのはおすすめできないと思います。
    今やっている「HTML+JavaScript+Node.js+php」を習熟してからでも遅くはない、という意見ですね。むしろ、これでも多すぎるのでは、と感じます。プログラミング初学者は「覚える言語の違いなんてたかだか作法の違いなので、両方やればいい話」とか甘く考えない方がいいと、個人的には思います。

    キャンセル

+4

JAVAにしましょう

#C++にするとどこまでも泥沼が広がります

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+4

クラス型のオブジェクト指向を勉強してみたい

Java。

コンピューターそのものについての理解

この本を買って取り組む。

コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方 | Noam Nisan, Shimon Schocken, 斎藤 康毅 |本 | 通販 | Amazon

それか、C++ではなくCを学ぶ。低レイヤを学びたいならCです。C++はCから上のレイヤの方向に向かって言語仕様を膨れ上がらせたものなので。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

ほぼJavaに軍配があがっていますが、あえてC++をやる理由はあるでしょうか? 

たぶんないと思います。C++はJavaに比べてできることが多い分学ぶべき事も多いです。オブジェクト指向以外の要素を相当程度学ばなければまともに使えないので、オブジェクト指向そのものの学習には不向きだと私は考えます。

ところで、C#という選択肢もありますよ。当然スマホアプリも作れます。これから勉強したいのなら、将来性が?なJavaよりもC#の方が相応しいかもしれません。ISO標準にもなっていますし(あまり関係ないか)。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

オブジェクト指向の観点ならばjavaですね。

C++はCの後方互換性機能があるので、これが逃げ道になってしまうところがあります(実用上では、これに助けられるところもありますが、勉強目的ならば望ましくない)。

計算機の原理を学びたいならばC++、より望ましいのはCやアセンブラです。

Cやアセンブラは計算機の動作原理に基づいて記述することができます。一方で、ユーザインタフェースやネットワークプログラミングのためのライブラリが標準でなく、アプリケーション開発には不向きです。

C++はCと互換性がありライブラリも(Cよりは)充実はしていますが、これのせいで非オブジェクト指向プログラミングスタイルを認めており混乱の元でもあります。

要するにケースバイケースです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

... Javaで書かれたコードをぱっとみてわからない、というのが、不便です。 ...

java コードが読めないのはデメリットが大きいですね。
まずは java を学ぶことをおすすめします。
(C++ よりは java での書籍のほうが多い気がするし)

http://proengineer.internous.co.jp/content/columnfeature/12511

...
1位 Go (37.20%)
2位 Kotlin (26.45%)
3位 Python (26.14%)
...

...
サーバプログラムはJavaかPHP、もしくはPythonがおすすめ
...

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.45%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • JavaScript

    21045questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Java

    16209questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • C++

    4544questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Node.js

    2430questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

  • オブジェクト指向

    332questions

    オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。