• ベストアンサー

使いこなせてプログラムを作れれば、言葉は覚えなくても良いんじゃないの?

皆さん、Javaでオーバーロードやオーバーライドや継承など、言葉は知ってっても意味はどういったものか覚えていますか?また、覚えていないと駄目なんですか? 僕は、名前は知っているが意味的なものは「大体こんな感じのものじゃなかった?」程度にしか覚えていません。 なぜなら言葉とその意味は覚えていなくても、使い方がわかっていれば良いと思うのです。 その使い方がオーバーライドだよ、とわかっていなくても、それを使いこなせていれば問題ないと思うのですが、皆さんはどう思いますか? それとも、やっぱり「オーバーロードとはこういった事で、オーバーライドとはこういった意味だよ」と 説明できるように覚えていないといけないものなんでしょうか? 説明が上手くできないのですが、 「~~このような使い方をオーバーライドと言います」と誰かがこう説明したとします。 その使い方をオーバーライドだと覚えていないといけないのですか? オーバーライドと言う事を知らなくても、その使い方がわかってれば良いと思うのですが。 i++ これは1づつプラスされますよね。その名前をインクリメントという事を知らなくても、その1づつプラスされると言う意味がわかっていれば良いと思うのですが。また前置、後置についても言葉知らなくても、意味がわかっていれば良いと思うのです。 そんな感じで、オーバーライドやオーバーロードやその他結構言葉が出てきますが、使いこなせれば、その事を●●と言うって事を知らなくても良いと思ういますが、皆さんどう思いますか?

noname#114571
noname#114571
  • Java
  • 回答数9
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
noname#10771
noname#10771
回答No.7

開発の場を経験した私からすれば、 用語について、開発者としてしばらく経験すれば覚えようとしなくても、いつのまにか全ての用語を覚えている、という事がいえます。 確かに、勉強したての頃は、新しい用語がたくさんでてきて、「なんだこれは、いちいちうるさいな」と思うかもしれませんし、意味がつかめないうちは、何がなんだかわかりませんが、 やっていくうちに自然と覚えます。覚えざるを得ない状況になるといったほうが自然でしょうか。 相当の天才プログラマーで、一人で大規模システムも作れてしまう人なら別ですが、普通ならプログラムを組んでるうちに分からないところがでてきます。それをホームページなり本を読むなりして、解決しようとするときにそういう用語が使われているのです。もちろん他人に聞いたときも同じでしょう。 つまり言葉の意味など知らなくても結構なんですが、 結局知るようになってしまうのです。今無理に覚えることもありません。半年もやってればいつの間にか覚えています。 ちなみに、「オーバーロード」は会話の中でほとんど出ませんね。「~の引数を~にすればぁ?」とかそういう感じで会話されてます実際。「オーバーライド」の方がよく聞きます。「コンストラクタ」「インクリメント」は毎日のように会話されます。

その他の回答 (8)

回答No.9

恐らく質問者は、コミュニケーション云々、常識、一般論について聞いているのではないと思う。プログラミングの本質は、何かを問うていると思う。 2種類の人間がいる。 1.実践的な方法でプログラミング能力を身に着けた人間。 2.書籍から順序だてて体系的に”学習”した人間 私の経験からすると優秀な技術者は1に多い。つまり、自分で答えを見つける能力に長けているからだ。プログラミングはクリエイティブな仕事である。この世に存在しないものを生み出さないといけないときがある。そのとき、技術書に載っている言葉を知っていても役に立たない。 一方2はどこかで限界がやってくる。専門書は実は古かったり間違っていたりする事があるからだ。専門家は、現場でそのまま使える、きわめて高度な内容の書籍はこの世に無い。なぜかって?それは売れないからだ。そこでタイプ2の人間はタイプ1に切り替えなくてはならなくなる。それか、出世して足を開発の現場から洗うかだ。 質問者は、センスがあり周りの技術者より良い腕を持っていると推察する。言葉があって技術があるのではない、技術を説明するのに言葉がある。技術力は必須だが言葉は必須ではない。 ただ、いくらセンスと技術力があっても技術者は孤独では寂しい。他人と情報交換しないといけない。そのときに用語を定義すると便利だ。 プログラミング中にはその手の”定義”は嫌になるほどやってるしその便利さはわかっているだろう。それは人間世界でも同じさ。 #defineを使った事があるだろう。まさかこれを使わずに、プログラムは単に動けばいいなんていわないだろう?

  • unibon
  • ベストアンサー率47% (160/340)
回答No.8

名は体を表す、というように物事の名前は大事だと思います。たとえば「デザインパターン」もパターン化するとともにパターンに名前を付けた、というところにも意義があるはずです。 巷に溢れているコンピューター用語辞典に書いてある説明の文章は覚える必要はないとは思いますが、自分の頭の中にある使い方・やりかたを名前で指し示せたほうが良いです。名前で指し示せる、ということは少なくとも、分類はできているということになります。逆は必ずしも成り立つわけではありませんが、名前で指し示せないとするともしかしたら分類があいまいなままになっている恐れもあります。

noname#49664
noname#49664
回答No.6

(※すいません、長文になってしまいました) 私自身も、あんまり固有名詞を覚えるのは苦手だったりします。また英語をカタカナにしたものだと、例えばガベージコレクタかガーベジコレクタか、みたいに人によって微妙に違ってたりすることもよくありますよね。だから、「単語を暗記する」ということがそれほど重要か、ということは疑問に思います。 ただ、質問者さんが「意味を知っていれば・・」「使い方を知っていれば・・」ということを強調されていたので、そこにちょっと、うーん、と感じてしまいました。  私がこういう勉強をするときに一番重視するのは、「それはどういう働きをするものか、どう機能しているのか」といったことです。――Javaを使い始めた頃、一番ショックだったのは「Stringはオブジェクトだ」ということでした。だから==では比較できない、と。ところが「Stringリテラルは==で比較できる」という。なぜなら、Stringリテラルはnew Stringされたインスタンスではないからだ? 頭の中を???がぐるぐる回りました。  それから、リテラルというものがJava仮想マシンの中でどのように扱われているかといった働きを理解して、初めて「リテラル」がどういうものかわかりました。が、働きがわからず「リテラルはソースコード内に直接記述された値のことです」という定義だけを暗記していたら、なぜStringリテラルは不思議な動きをするのか理解できなかったでしょう。  こういうことって、プログラミングではよくあります。 なぜ、0.1を10回足すと1にならないのか? i++と++iは何が違うのか? "A"+"B"でなぜ"AB"というStringが得られるのか? なぜコンストラクタでcreateImageすると実行に失敗するのか? なぜユーザが取得したGraphicsインスタンスだけは使用後に破棄するのか? こういうことは、「オーバーライドとはこれこれこういうことです」といったような言葉の定義だけでは理解できません。それがどう機能しているかという仕組みを理解して初めてわかることです。  これらが重要になってくるのは、こうしたことを理解していないとわからないバグなどに遭遇したときです。こうした機能の仕組みを理解していないと、なぜ問題が起こるのか、内部で何が起こっているのか知ることは難しいでしょう。  「これはこういう意味だ」という言葉の定義を知っていても、その機能を知ったことにはならない、ということを私は肝に銘じるようにしています。そうした部分まで理解しようと考えたら、「固有名詞を暗記しないといけないか」などは、とるにたらない些細なことのように思えるような気がしませんか??

回答No.5

これは私の体験談ですが。。。 私も2,3日前まで用語なんて覚えなくてもいいよ。って思っていました。 この時期、新人教育で今年、とうとう新人教育をしなくちゃいけなくなったんです。新入社員たちは勧めた本を読んで「オーバーライドってよくわかりません。」とか「コンストラクタがよくわかりません。」って言ってきます。 私は今まで小規模開発しか参画したことがなかったので、用語なんていらないよ~と思っていたので、新入社員にそう聞かれてちょっと焦ってしまいました。人に物を教えたり説明したりするにも用語は必要だと言うことがわかりました。

  • seasoning
  • ベストアンサー率25% (182/713)
回答No.4

こんにちは。 すでに回答が出ていますが、個人でプログラムをするのであれば問題ないと思います。 中には複数の会社で開発をする案件なんてものもありますので、打ち合わせの場で言葉が分からないと恥ずかしい思いをするかもしれません。 もちろん社内のメンバーだけで開発するときも然り。 話についていけなくなりますよ。 スキルアップを目指すのであれば、必要だと考えます。

  • Swordline
  • ベストアンサー率42% (291/688)
回答No.3

確かに、自分の中だけであればそれで十分。 しかし、人にそれを伝えるときはどうするのです? 私は昔上司に「仕様書などに難しい専門用語は使うべからず」と いわれたことがあります、どう言う事かというと・・・。 たとえば、設計書に「~がオーバーライドして~」みたいなことを書いたとします。 その設計書をレビューしていて「オーバーライドって何?」と聞かれたときに 「何?おまえオーバーライド知らないの?」と相手に言えますか? そこで説明できなければ、相手には理解もしていない言葉を設計書で使ってるの? そんなやつに任せて大丈夫なのか?不安だな~、などと思われてしまうのです。 そういうことを避けるために、わかりやすいドキュメント作成を心がける。 そのためには、知識が必要となるのです。 よって、覚えておくに越したことはないと思います。

回答No.2

そうですね。個人的にはちゃんと使えてれば、それがどういう呼び方だろうがかまわないと思ってます。 個人的には。 1人でプログラムを作るだけなら。 という限定条件がつきますけど。 けど、仕事でチームで開発したり、またはこのような掲示板などで質問したり、回答したりといった場合には、お互いの意思の疎通が取れなくなりますよね。 例えば A:~はどうすればいいですか? B:オーバーライドすればいいんだよ。 A:おーばーらいど???ってなんですか? B:~を~することだよ。 A:あっ、それ知ってます。 となった場合に2回目のA以降は無駄なやりとりですよね? ですので、他人とコミュニケーションをとるのなら、基本的な単語くらいは覚えておくべきだと思います。

noname#114571
質問者

お礼

早々のお返事ありがとうございます。 確かに、pcbeginnerさんの言う通りなんですよね。 コミュニケーションが取りやすくなるし、 まさに、AさんとBさんの会話の内容なんですよ。 知ってるほうが良いようですね。

  • keroro001
  • ベストアンサー率23% (71/304)
回答No.1

まぁ一人でちまちま作ってる分にはいいですけどね。 大きなプロジェクトになるとコミュニケーション取る時に問題になると思いますよ。 後輩が部下について、1から教えることも出てきますしね。 ま、そのときにこっそり用語の意味だけ勉強しなおせばいいんですが(笑)

参考URL:
http://www.wakhok.ac.jp/~tatsuo/kougi99/
noname#114571
質問者

お礼

早々のお返事ありがとうございます。 確かにコミュニケーションとるときには問題になりますよね。やっぱり知ってる方が良いのかなー。

関連するQ&A

  • オーバーロードされたメンバ関数のポインタをとる

    オーバーロードされたメンバ関数のポインタをとるにはどうしたらよいでしょうか? 具体的には前置インクリメント演算子 ++()と、後置インクリメント演算子 ++(int)の両方のをオーバーロードしたときに両方のメンバ関数ポインタがとりたいです。 環境はVC7.1です。 よろしくお願いします。

  • オーバーロードはオブジェクト指向プログラミングの枠組みで語られるべきか

    一部の書籍やサイトでは、オーバーロードがオブジェクト指向プログラミングの特徴であるかのような記述が見受けられるのですが、私はそれに疑問を感じます。 オーバーライドはクラス・継承に関わるためOOP特有のものであると思うのですが、オーバーロードはクラスとは全く切り離して考えられるからです。 確かにオーバーロードはクラスを作るときに有用な技術ではありますが、例えばC言語のような非オブジェクト指向言語でオーバーロードが使えたとしても、それなりに機能するはずです。 ひょっとしたら 「オーバーロードもオーバーライドもポリモーフィズムだろう」 ↓ 「ポリモーフィズムといえばオブジェクト指向」 のような話の展開でしょうか(いや、さすがに無理があるか…)。 皆様はどうお考えでしょうか。 ご意見お聞かせ下さい。

  • 後置インクリメントの計算過程について

    後置インクリメントの計算過程について Javaに関して初めての質問となります。よろしくお願いいたします。数日前に学習し始めたばかりの超・初心者です。 現在、基本的な演算について、インクリメント・デクリメントのそれぞれ前置と後置の違いを学習したところなのですが、どうも後置の理解が完璧でないようで、仮に変数をxとした場合、式内にxが二度出てくる場合の後置の計算が理解できません。 具体的には int x, y; x = 10; y = x++ + x++; 上記でコンパイルした結果、y=21となる過程を教えていただけませんでしょうか。 私の理解では、x++は計算に使用した後にxに1を加算するので、まず y = 10 + 10 で、y = 20 となり、その後にxに1を加算してx=11が私の理解です。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • SJC-Pについて

    SJC-P取得のため勉強しています。何年か前に購入した「サン技術者認定資格教則本Java2」という本で勉強しているのですが、amazonのレビューを見てみると「間違いだらけ」と叩かれています。 で、その本に載っていた問題に疑問があります。次のうち正しいのはどちらかという問題です。 A同じ名前、引数をもつメソッドがあった場合、オーバーロードされる B継承を定義しない場合Objectクラスが親クラスとみなされる 正解はAとなっていましたが、これはBが正解ではないのでしょうか?同じ名前、引数をもつメソッドはオーバーライドですし、クラスに対して何も継承しない場合はコンパイラによって自動的にextends java.lang.Objectが追加されると思うのですが・・・

    • ベストアンサー
    • Java
  • C#における++演算子のオーバーロードについて

    はじめまして。 いろいろ調べてみたのですが、わからなかったので、質問させてください。 C#における++演算子のオーバーロードについてなのですが、 まずは、以下のコードをご覧ください。 ================================================================ using System; class Test { private int Num; public Test(int x) { this.Num = x; } public static Test operator ++(Test t) { Test result = new Test(t.Num + 1); return result; } public override string ToString() { return this.Num.ToString(); } } class TestDemo { public static void Main() { Test t = new Test(0); Console.Write(t++ + "\n"); Console.Write(t + "\n"); Console.Write(++t + "\n"); Console.Write(t + "\n"); } } ================================================================ 実行結果 0 1 2 2 ================================================================ ++演算子のオーバーロード関数の実装が一つなのに 前置インクリメントと後置インクリメントが適切に行われています。 二つのインクリメントが行われるときに同じメソッドが 呼び出されていると思うのですが、同一の実装で、振る舞いが 異なるのは、なぜなのでしょうか?どのようなカラクリで 実行されているのでしょうか?全くわかりません。どなたか 教えてください。よろしくお願いします。

  • 後置インクリメントについて質問

    java解説書に以下のような説明がありました。この説明は、後置インクリメントについての説明です。 「xは10が代入されているとする。 y=x++ + x++ ; //最初の状態。xは10です y=10+ x++ ;//10をそのまま加算し、xを1加算します。xは11です。 y=10+ 11 ;//11をそのまま加算し、xを1加算します。xは12です。yは21になります。」 質問:上から2番目のコメント文の中で、「10をそのまま加算し」とありますが、これは何に加算するんですか?何も入ってないyに加算するということでしょうか?それとも それともxにxを加算するという意味でしょうか?参考書の書き手の意図がわかりません、、。 質問2:yが21、xが12になるプロセスは、 yにx(10)が加算される      ↓ yにx(10)を代入した(計算した)「直後」であるから、後置インクリメントによりxが1増えて、xが11になる      ↓ x(11)をyに代入 ↓ yは21になる ↓ yに11を代入した(計算した)「直後」であるから、後置インクリメントによりxが1増えて、xが12になる こういうことでしょうか? 質問3:質問2の計算プロセスのように、左辺の変数が、右辺の変数が+で繋がれていた場合、左の項から順に足されていくということでしょうか?

    • ベストアンサー
    • Java
  • インクリメント演算子の前置(++a)と後置(a++)の違い

    こんにちは、Java初心者です。どなたか質問タイトルの件で教えていただけませんでしょうか。 Javaのテキストで下のようなものがあったのですが、違いがテキストの説明ではよくわかりませんでした。この場合はどう違うのですか?初心者向けに、参照、演算の詳細なタイミングを一つ一つ教えていただけないでしょうか?前置の方が2になるのはなんとなくわかりそうなのですが、後置はさっぱりなのです。。。 int x, a=1; x=++a; ⇒xの値は2 int x, a=1, x=a++1; ⇒xの値は1のまま また、実例としてはどんな場合に前置又は後置を使うのですか? よろしくお願いいたします。

    • ベストアンサー
    • Java
  • オブジェクト指向なJavaプログラムとは?

     Javaで,キーボードから入力した8桁の文字列を出力するというプログラムを作成したい,8桁の文字列に対して,checkを行い文字列が未入力だとエラーが投げられる。  また,02345334,のように1文字目が0だとエラーが投げられ, 文字列が9桁や7桁になってもエラーが投げられるというプログラムを 継承、オーバーロード、オーバーライドを使って作成したい。 (文字列に入力する文字は全角英数字でも半角英数字でも出力されるようにする。 例: 1a2B3C4d )  まず,NyuryokuMainというメインクラスを作り,キーボードから入力した文字を出力するというプログラミング。  次に,NyuryokuCheckクラスでboolean型で文字列が未入力かどうかをif文で判別し,次に与えられた文字列が8桁以内かをboolean型で判別する。までを、NyuryokuCheckクラスで行い、  SubNyuryokuCheckクラスでNyuryokuCheckを継承し,8桁の文字列の1桁目が0かをbooleanで判別する。  というような,プログラムを作りたいのですが,どのようにしたらよいかわかりません。よいサンプルなどがあったら教えてください!

  • Javaでは多重継承ができない、の意味が分からない

    「Javaでは多重継承ができない」「インターフェイスでは多重継承できる」の意味が分かりません。 「インターフェイス」の多重継承とは、あくまでも擬似多重継承であって、本当の多重継承とは機能が異なる、ということなのでしょうか? それとも、多重継承はあくまでもクラスに対して行う言葉であり、それをインターフェイスで実現しているから、擬似なのでしょうか? つまり、機能としては完全に多重継承と同一? あるいは、それ以外? インターフェイスで可能なら、Javaで多重継承ができないという表現はおかしいように思うのですが…。 例えば、Javaのクラスでは多重継承できない、という言い方だと、また違った意味になるのでしょうか?

    • ベストアンサー
    • Java
  • 猫や犬が人の言葉を話すことを表す言葉

    猫や犬が子孫に継承されない人の言葉を話す事を表す生物学的な言葉もご存知の方はいらっしゃいませんか?Feral Tongueとかそんな感じだったと思います。

専門家に質問してみよう