- ベストアンサー
Javaの授業において先生のおっしゃっていることがわからない
毎日、曜日に関係なく10時間、昼は専門学校、夜はPCスクールに 通ってJavaを勉強して4ヶ月たちます。 しかしながら、先生方の説明そのものが理解出来ません。 例えば、継承する、実装するというのは、あるクラスを利用するという 意味でしょうか。また、呼び出すというのは、日常会話では、 校長先生が生徒の親を呼び出したとか、呼び出しというボタンを押すことで使いますが、 メソッドやコンストラクタを呼び出すという意味がわかりません。 日本語なのに、教科書に書かれていることも、先生方の 説明も意味が通じません。 そして、ある時は変数といったり、インスタンス名といったり、 オブジェクトといったり、フィールドと言ったり、言い方がいつも 変わってしまいます。 AはBを見てるだけという説明も絵ではわかりますが、 実際にコードでどうあらわすかわかりません。 なんとかしたいのですが、何かアドバイズを頂きたく御願いします。 簡単なコードでよいので読めように、そして書けるように なりたいのです。このまま学校もやめてしまいたくありません。 どうか宜しく御指導下さい。御願い申し上げます。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
そのPCスクール、対象者が、あなたのような「プログラミング自体も初心者」向けではなく、「プログラミングはできるけど、Javaは初心者」向けなのかもしれませんね。 参考書にも上記の2種類があるので、前者を選ぶといいのですが、なかなか区別がつかないのが現状です。 プログラミングで使われる技術用語は、日本語っぽいけど日本語ではありません。 業界用語とかネット用語とか、一部の人達にしか通用しない言葉ってありますよね?あれと同じです。 コンピュータの動作や状態を、それと似た概念の言葉に当てはめたものです。「日本語」で理解しようとしてもわからないのが当り前です。 それに、大抵は英語の用語を訳したものです。そこに若干のニュアンスの違いが入っていることもあります。 例えば、「呼び出す」 「関数を呼び出す」とは、今実行中のプログラムから、一時的に別のところで定義されている関数へと実行を移すこと(そして、終ったら元のプログラムへ戻ってくること)を意味します。 この様子が、仕事中の「プログラム」氏が、「おーい、関数君、ちょっと来て、コレやってくれんかね」と呼び出す様子に似てる、ということで「呼び出す」という言葉を当てはめたのです。 ついでに、関数に引数を指定するのを「渡す」と言いますが、これも「資料はこれね」と渡す様子ですね。
その他の回答 (7)
- osu_neko09
- ベストアンサー率48% (56/115)
コンピューターにやらせたいことを、まず日本語で書けないと、プログラムなんて書けるわけがありません。まずはJavaのことを忘れて、日本語で書いてみればいかがでしょう。 たとえば「学校まで歩く」なら・・こんなふうにどんどん細かくしていくのです。(そのうち、一行一行がjavaの命令で書けるまで細かくなっていきます。) =>交差点まで歩く、交差点を左に曲がる、横断歩道を渡る・・・ => 交差点に着くまで{ 一歩前進する } 左に曲がる 横断歩道の信号が赤の間、または車が来ている間{ 待つ } 横断歩道を渡る
お礼
言われてみると、私は一度もやらせたいことを考えたことがありませんでした。 エクセルVBAを習っていたときは、「大量のコピぺを自動でやってほしい」等、作成したいものがたくさんありました。 しかし、Javaだと、せいぜいコマンドプロンプトに文字や数字を表示させる以外に使い道がわからず、今の段階では便利に感じる事はありません。 意味不明のサンプルを丸写しすることだけに終始していました。 ちょっときっかけがつかめた気がします。 ご回答を有難うございました。
- junkUser
- ベストアンサー率56% (218/384)
他のプログラミング言語は使用できますか? Java だけでは理解できなかったものが、他の言語を習得することで何が言いたかったのか理解できるようになることが多いですよ。 また、Java 関係の資格を取るトレーニングでも長くて1週間程度ですから、4か月かかってもわからないということは、教え方に問題があると思います。 講師が用語を理解しないまま説明していたり、わかりやすくしようとして返って理解を妨げる表現になっていたり・・・
お礼
Javaが始めてです。 確かに他の言語が既に出来る方は授業についていけてる様に見えます。 (中には居眠りされてる人もいますが)先生がテキストを朗読されて いる時間が長いので、集中力の欠如もひとつの原因かもしれないと 思いました。 ご回答ありがとうございました。
- buriburi3
- ベストアンサー率44% (353/792)
Java以前にプログラミングの初歩の段階でつまずいているように思えます。 プログラム言語は呼び名は『言語』ですが、日本語や英語などの『言語』とは意味合いが全く異なります。 コンピュータと言う【機械】を動かす為の歯車の組み合わせがプログラムであり、プログラムを構成する歯車の形がJavaであったりCであったりするだけです。 自動車がレーシングカーやダンプトラックと形状や用途が大ききく違っても基本構造は変わらないように、コンピュータも基本構造は変わらず、それを動かす歯車も基本的な構造はJavaでもCでもBASICでも同じです。 個々の歯車の組み合わせを覚える事には意味がありません。 カローラの作り方を暗記してもセレナは作れません。 全体の構造を理解して役割と意味を捉えることが必要です。 自動車であればタイヤとエンジンとハンドル、アクセルブレーキはどんな自動車であっても存在します。 形状や構造が異なっていてもこれが無ければ自動車ではありえません。 プログラムも同じで最低限の構成部品は存在します。 それだけ覚えておけば、どんなプログラムにも応用が出来ます。 ※逆にこの基本が理解できないと何をやっても無駄です。 英語学習者が日本語で呼ばれる関係代名詞や現在完了形などの文法用語に惑わされるようなもので、プログラミングにも用語自体には深い意味はありません。 特にJavaなどのオブジェクト指向言語の場合には上位概念のオブジェクト指向デザイン(プログラムではなくもっと上位の業務フローとかを表現するための考え方)の用語が混じっていて、あたかも人間が役割を分担しているような表現をしますが、プログラムでは概念的な区切りをつけるだけで実際には連続して動きます。 用語は覚えていないと人に説明するときに困るだけで覚える事自体には意味はありません。 概念としてはインスタンスもオブジェクトも同じものです。 プログラム言語は 1) 手続き言語 順番に命令を実行するだけ、小さなプログラムなら問題ないけど複雑なプログラムになると全体を把握するのがとっても難しくなる。 FORTRANやBASICがこの種類に属する 2) 構造化言語 プログラムを分割して階層構造を持たせる事で、複雑なプログラムにも対応出るように【改良】した。 PascalやC言語がこの種類に属する 3) オブジェクト指向言語 データとデータを操作するプログラムのセットを作って部品化できるようにし、複雑なプログラムの改造をやりやすく【改良】した。 JavaやC++がこの種類に属する このように進歩してきましたが、置き換わったわけではなく改良を重ねてきただけですので、Javaを理解するには手続き型処理、構造化を理解しなければ全体が分かりません。 逆にオブジェクト指向は理解していなくても手続き型処理を理解していれば不恰好ではありますがプログラムは作れます。 一旦Javaから距離をおいて手続き型のBASIC(VisualBasicではなくN88BASIC)で幾つかプログラムを組んでみてはどうでしょうか? Javaをある程度でもやってたならBASICは30分もあれば理解できるはずですので、そう大きな回り道にはならないと思います。
お礼
実はお恥ずかしい話ですが、プログラム言語と外国語が同じとは思っていませんが、『言語』という単語のせいか、最初に発明した人が機械語そのものを英語(人間の言葉)で作れば良かったのにと思っていました。ご回答のおかげでこの妄想はなくなりすっきりしました。 ご回答を何度も繰り返して読むほどに、「そうなんだ」と感じ、わかってくるのを実感出来ます。 御指導有難う御座いました。
- tom11
- ベストアンサー率53% (134/251)
ちょっと、どうなるかなと思い!!! コードにしてみました。 class seito { // フィールド 生徒の名前 String name; //コンストラクタ 生徒を作った時に最初に呼び出される関数 public seito(String name) { this.name = name; } } public class koucyou { // フィールド 校長先生の名前 String name; // コンストラクタ 校長を作った時に最初に呼び出される関数 public koucyou(String name) { this.name = name; } /** * @param args the command line arguments */ public static void main(String[] args) { // 校長先生の作成 koucyou kname = new koucyou("小泉"); //呼び出す生徒の作成 seito s1 = new seito("一郎"); //校長先生が生徒を呼び出すメッソドを呼び出す kname.yobidasi(kname,s1); // TODO code application logic here } //校長が、生徒を呼び出すメッソド、、、関数 private void yobidasi(koucyou k, seito st){ System.out.println("校長の"+ k.name+"です"); System.out.println(st.name+"君 早く校長室に来たまえ"); } } 実行結果 校長の小泉です 一郎君 早く校長室に来たまえ ちょっと、コードにしてみました。 日本語が出来れば、英語に翻訳するように javaに翻訳すると考えても、いい様な 気もします。
お礼
私の投稿した文が、コードになってしまってびっくりです。 不思議なものを見た様な感じがして、私にも、いつか書けるようになるんだろうかと思ってしまいます。 楽な道なんてないのだから、元気を出して、とにかく、投げ出さない事を目標に頑張ります。 本当に御指導有難う御座いました。
- tom11
- ベストアンサー率53% (134/251)
折角、この様な場があるんですから、 どんどん、質問してみたら??? >校長先生が生徒の親を呼び出したとか、呼び出しというボタンを押すことで使いますが、 >メソッドやコンストラクタを呼び出すという意味がわかりません。 自分なりの考えがあって、意味が解らないなら、 日本は、広いので、一人くらいは、答えてくれるかも 自分が、理解が出来る、考え方を探すのも良いことのような インターネットのない時代は、 自分の、理解できる書籍を探すしかなかったし 時間も、金もかかった。 メソッドというから、解らないのかも 正確な、言葉じゃないのかもしれませんが、 関数で良いのでは 呼び出すも、ボタンを押すで、駄目なのかな?? 校長先生という、プログラムには 生徒を呼び出すという、関数があります。 生徒を呼び出すためには、呼び出し関数を利用する必要が あります。そこで、インターホン(例えばボタンとかで) 呼び出し関数を、実行させます。 これが、呼び出しメッソドを呼び出すということかな? 変な、表現かな??? 結局、解らなかったら、わかる表現を探すしか 無いような気もします。 時間は、かかりますが。
お礼
小学生の頃、国語の教科書に出てくる言葉がわからなくて 国語辞典を引くと、その中に知らない単語があって、 もっとわからなくなっていた事を思い出しました。 関数や実行と言ってもらうと自分にはすごく自然に感じます。 ありがとうございます。
- hanabutako
- ベストアンサー率54% (492/895)
自分は高校生の頃に趣味でやっていた頃から数えればプログラミング歴は10年以上になります。オブジェクト指向についてきちんと学んでから5年くらいでしょうか。 No.1さんの仰っているように、まずは使うこと。 失敗や間違いを恐れずに話たり書いたりすることなしに語学の学習はできません。 小さくて他人から見ればくだらないプログラムでもいいので自分で1から手を動かして作ることですね。また、「日本人に英作文は無理だ、英借文をすべきだ」という誰かの言葉ではありませんが、プログラムを書くときは参考書などの書き方を真似ることから始めることです。誰かが書いた100行以下の小さいプログラムをプチ改良したときにどう動きが変わるかを試行錯誤しながら学びつつ、それを組み合わせて大きなものを作っていくとよいでしょう。 用語の概念と実際のプログラムは対応はしますが、どちらかだけでは理解しにくいものなので両方を並行して習得することが肝要でしょう。(これはプログラミングに限った話ではなく、新しいことを覚える際のすべてに共通することだと思います) あと、継承やオブジェクトというような言葉の理解は気長に捉えた方が良いかと思います。自分はよくわかっている人に教えてもらいながら勉強して3年以上かかりました。その際に使われた教科書はProgram Development in Java: Abstraction, Specification, and Object-Oriented Designという本ですが、読み下してくれる人がいないときついかもしれません。また、「呼び出す」などプログラミングの世界の言葉と日本語の言葉とでは概念が違うことも多いので、それも理解を妨げる一因ですね。
お礼
そう言えば、かつて、エクセルでマクロの自動登録して、それを一部プチ改良して色を変えてみたりして感動したことを思い出しました。 確かに、この4ヶ月間で、自分でちょっと変えたりして、実行結果を見てみるなんて一度もしませんでした。 授業に対して、受け身だけだったかもしれません。 御指導ありがとうございます。すぐやってみます。
- braun5
- ベストアンサー率50% (1/2)
プログラミング経験4年程度の者です. プログラミング上達の方法は,とにかく手を動かして本に載っているサンプルコードを書いて動かすということを繰り返すことです. Javaのような継承といった言葉が出てくるプログラミング言語をオブジェクト指向言語といいますが,オブジェクト指向の各用語の概念は理解が難しく,(私を含め)オブジェクト指向言語について正確な知識を持っている人はほとんどいないのが現状かと思います. 概念の理解に努めるのではなく,とにかくサンプルコードを書いて動かすというのが一番の近道ではないでしょうか. Javaですと入門書としては以下のような本があります. 高橋麻奈:やさしいJava 第4版,ソフトバンククリエイティブ (2009). http://www.amazon.co.jp/dp/4797355727/ 結城浩:改訂第2版 Java言語プログラミングレッスン (上),ソフトバンククリエイティブ (2005). http://www.amazon.co.jp/dp/4797332115/ 結城浩:改訂第2版 Java言語プログラミングレッスン (下),ソフトバンククリエイティブ (2005). http://www.amazon.co.jp/dp/4797332123/
お礼
ご回答を有難う御座います。 勉強を始めて4ヶ月、毎朝6時に家を出て帰宅は11時過ぎ、仕事も家事も一切しないでJavaにすべてをかけているのに、以前勉強を始める前と何ひとつわからない自分に、腹が立ち、泣きながら続けています。 教科書のコードを何度も入力しましたが、何かの暗号を打っているのと同じ感覚でスケールをあてて、入力し、次にそれを紙に印刷して、データ入力のチェックのように、入力ミスがないかチェックしています。最近は、入力ミスが減ってきましたが、コードの意味を知るすべがありません。暗記してしまったものもありますが、コードは解読出来ずにいます。サンプルコードを一行ずつ訳してくれている本はないか捜しています。教えていただいた本を今日すぐ見に行って来ます。精神的にまいってしまっているので、ご回答いただけたことを本当に感謝しております。有難うございました。
お礼
「世界一やさしい」とか「超入門」と書かれていても、やっぱり私には難しいと思う本ばかりでした。2種類あるとは・・・・・。 *****『日本語っぽいけど日本語ではありません』 そうなんです。 *****『英語の訳に若干のニュアンスの違いが入っている』 本当にそうなんです。だから、どんなに繰り返し説明されても理解出来ないんです、その言い回しが。 でも、やっと今「呼び出す」と「渡す」がはっきりわかりました。 何を言っていたのかやっとわかった事が、すごく嬉しいです。 「ちょっとやってよ」と呼んでたんですね。 いったいどこへ(誰に)何故渡すんだと、もう半ば怒りに近い感情でいっぱいでした。「資料はこれね」と渡す様子・・これなら、なんの引っかかりもなくわかりました。 どうして、学校の先生はそう言ってくれないのでしょうか。 この一言で、私は充分わかったのに、大変悔しいです。 他にも山ほどあるのですが、まず自分で充分に考えてそれでもわからないものだけ質問しようと思っておりますので、 どうか、今後とも宜しく御指導頂きたく御願い申し上げます。 引数に渡すという説明が感覚的に琴線に響いて自分の中でしっくりきます。 ご回答者様が現在、先生として御活躍されていらっしゃる方でしたら、そこへ転校したい程です。 心から感謝しております。ありがとうございました!!