🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

9回答

1912閲覧

C#の勉強方法を教えてください

shifish

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2019/12/19 08:00

編集2019/12/20 02:45

前提・実現したいこと

C#研修を行っており1ヶ月程度です。
現在書籍で主に学習していますがいまいち理解できない部分や忘れてしまう単語が多く存在します。

発生している問題・エラーメッセージ

該当のソースコード

試したこと

書籍の例題を見ながらわかる部分を少しずつ理解できるように戻って再度用語を調べています。
またわからない部分は答えを見てもわからない箇所があるので、飛ばしてしまっています。

勉強の仕方的には
用語をある程度頭にいれ、例題の一文が理解できるまで次の問題に入らないほうがいいでしょうか。
また答えを見て勉強になるのでしょうか

追記

書籍を読み返して頭に入れている時間が多くプログラムも例題のままうついていることが多かったです。
回答をいただいた上で再度質問ですが
プログラムをとりあえず書いてみることが大切とありますが、それは例題を写しながら一文ずつ理解するという方法でも問題ありませんでしょうか。
問題を何も見ずにとけることがほとんどありません。

補足情報(FW/ツールのバージョンなど)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/12/19 08:02

例題から始まる書籍は無いと思います。かなり読み飛ばしているようですね。
m.ts10806

2019/12/19 08:08

やりかた、英語の勉強と間違えてませんかね。
takabosoft

2019/12/19 08:32

ちなみにその研修で学習したC#を実際にはどんな仕事で使うのでしょうか? また、過去に他のプログラミング言語に触っていた経験はありますか?
m.ts10806

2019/12/19 09:26

目標はなにでしょう。
shifish

2019/12/20 02:41

目的は将来ゲーム作りに参加することです。 そのため経験をつむ為に入社しています。 プログラミング経験はありません
m.ts10806

2019/12/20 02:42

業務のためであればなおさら「勉強する」「記憶する」という考え方は捨ててください。
shifish

2019/12/20 02:49

回答ありがとうございます。 それはなぜなのでしょうか。
Zuishin

2019/12/20 03:03

研修なら担当者に相談するのが一番いいはずですし、本は前から順に読んでいかないと言葉の意味がわかりません。今読んでいるところがわからないのは、わからない言葉を調べず飛ばしているからだと思います。例題関係なくコンパイラを目の前に置き、新しく学んだところのコードを自分で書いて試すのが「本を読む」ということで、頭を抱えながらあちこち目を走らせているのは「本を読む」とは言いません。
Zuishin

2019/12/20 03:07

そしてここで質問してベストアンサーを決めるのは誰ですか? 何もわからない初心者であるあなたじゃありませんか? その回答は本当にベストですか? ここでは誰もあなたを知りません。ただ自分の経験を話すだけです。しかし回答者とあなたでは長所も短所も経験も性格も違います。同じことをしても同じ結果は得られないでしょう。担当者に相談し、「自分の状態を見てもらって」判断してもらうことを勧めます。
shifish

2019/12/20 03:16

回答ありがとうございます。 おっしゃるとおりわからないところを後回しにして、答えを見て期限どおり提出してしまっているため、立ち止まっています。 会社的に担当者に聞かないで自分で調べろという環境であるため、研修材料はネットと書籍で行っています。 そのためほぼ独学と変わらない状態です。
Zuishin

2019/12/20 03:33

とりあえず研修が終わった時、本に書いてあることは理解できるものとして扱われます。何も見ずにコードが書ける必要はないので、最低限言葉が通じる、そしてわからないことは自分で調べられるくらいにしておかないと。 「勉強しなくていい」と仰っている人は、自分で調べられる人です。言葉がわからない人に調べ物はできません。
BluOxy

2019/12/20 05:00 編集

2019/12/20 11:42のm.ts10806さんのコメントについて疑問に思われているので1つ。 「覚えた」と「理解した」は違う意味だと認識してください。 「覚えた」 - その言葉や意味を文章だけ覚えて、応用が効かない状態 「理解した」 - その言葉の本質を知り、応用が効く状態 ある特定の部分を理解していれば、それについて人に説明も出来ますし、それを利用したコーディングもできるようになるはずです。「経験を積む」には「理解を積み重ねる」という要素も含まれます。 書籍をただ読むだけでは、「覚えた」だけにしかなりません。
m.ts10806

2019/12/20 04:29

BluOxyさん フォローありがとうございます。 付け加えると、仕事は自分のためにする学校の勉強とは違い、サービス提供先のためにするからです。 なので、顧客満足のためにどのようなものを作るとの良いのか人のために考える力が必要です。 そしてC#もそれを実現するためのツール、道具のひとつに過ぎません。 「道具をどうやって使うと達成できるか」考える力を養うのは勉強ではなく、積み重ねていく経験です。
Q71

2019/12/20 05:28

C#でプログラミングの勉強をしているのか。プログラミングの勉強をC#でしているのか。 どっち? 後者なら、一旦C#からは離れて、プログラミングをする事に集中しましょう。
guest

回答9

0

最初に

Aを理解するにはBという前提知識が必要だ。ならば、Bを理解できない限りAを理解することはできないはずだ」
という前提で学習してください。

実際にはフィーリングで覚えてしまうこともあるかもしれませんが、その学習方法に頼ると後で痛い目に合います。

回答

書籍の例題を見ながらわかる部分を少しずつ理解できるように戻って再度用語を調べています。

書籍の例題(A)を見ながらフィーリングで覚えてはいけません。
用語(B)を理解してから次のステップに進んでください。

下記を人に解説できれば、解説できた分は理解したと言えます。

  • 用語の意味
  • その用語が存在することのメリット
  • もしその用語が存在しなかったとき、どのように困るのか

またわからない部分は答えを見てもわからない箇所があるので、飛ばしてしまっています。

わからない部分(B)を放置すれば、当然答え(A)を見ても分かりません。
飛ばすと放置した箇所に関連する物事は永遠に分からないままです。

勉強の仕方的には用語をある程度頭にいれ、例題の一文が理解できるまで次の問題に入らないほうがいいでしょうか。

その通りです。

また答えを見て勉強になるのでしょうか

もしフィーリングで全てを理解できるなら勉強になるかもしれませんが、初学者がそれを前提で学習を進めると、痛い目に合います。

追記に対する回答

プログラムをとりあえず書いてみることが大切

それは構文を頭である程度おさえたときの話です。
例えば、繰り返し処理を書きたい場合にはforを使い、カウンタ変数の初期化、継続条件、ループ中の処理、ループ後の処理などを記述します。

「概念レベルの知識」をある程度理解しておかないと、「とりあえず書いてみること」はできません。

なので、概念(B)を9割理解して、答え合わせとしてコーディング(A)をするという順序を踏む必要があります。

何度も言います。
Aを理解するにはBという前提知識が必要だ。ならば、Bを理解できない限りAを理解することはできないはずだ」
という前提で学習してください。

例題を写しながら一文ずつ理解するという方法でも問題ありませんでしょうか。問題を何も見ずにとけることがほとんどありません。

それは各行で使われている機能(B)を理解しないまま、例題(A)を読んでいるからではないでしょうか。

書籍やサイトなどで記載されているコードはほ前のページ辺りに技術的な機能の説明が載っているはずです。
むしろ、載っていなかったらそれは書籍やサイトとして良い評価はできません。
(高いレベルを持つ技術者をターゲットにした書籍やサイトならその限りではありませんが)

例題を見て「覚えた」人が誤った学習をするケース

Javaを勉強中の人がforを学ぶとき、機能を確認せずにいきなりコードを見たら、フィーリングで理解するしかなくなります。

java

1for(int i = 0; i < 10; i++){ 2 System.out.println(i); 3}

フィーリングで覚えたJavaの初心者はこういう事を想像してしまうでしょう。
forfor(変数の初期化;何かの条件;変数をインクリメントする){ 処理 }と書けば良いんだ。コードにそう書いてあるから、私の理解は間違ってないはず」

そんな架空の初心者に、私は突っ込みます。

  • 「何かの条件」って何でしょう。このfor文のループ回数は想像できていますか?
  • forはその形式で書かなきゃいけない決まりはありません。
  • 例えば、forの一番右の部分は、必ずしもインクリメントである必要はありません。そもそも省略も可能ですよ。って前のページに書いてありませんか?
  • 前のページの説明をきちんと理解してからコードは読みましたよね。

そろそろやめます。ただ、このようにフィーリングで覚えた人の知識に対して突っ込こもうと思えばいくらでも出来てしまいます。

とりあえず、サンプルコードを一文ずつ見ながら覚えてはいけない理由が何となく分かったと思います。

「コード上の書き方しか覚えていないため、その機能を理解した気分になってしまう

すなわち、
「機能の1部分(の書き方)しか覚えていないため、その機能の本質を正しく理解できない
ことが理由です。

コードを見て学ぶことは**「理解した」ではなく「理解したつもり」**にしかなりません。

上記ケースの解決法

さて、上記ケースではどう行動をしていくのが良かったのでしょうか。
くどいようですが、お分かりですね。

Aを理解するにはBという前提知識が必要だ。ならば、Bを理解できない限りAを理解することはできないはずだ」
という前提で学習してください。

つまり、前のページ辺りに載っている機能の説明(B)を理解してから例題(A)を見てください。

そしたら、仮に私のような人物から突っ込まれたときに、「○○ページの△行目にこの機能はこういう書き方ができるって書いてありますよ。知らないんですか?」とあなたは正しい根拠を持って言い返すことができるようになります。

言い返せられれば、大体の場合、正しい理解をできていると思います。

投稿2019/12/19 08:38

編集2019/12/20 04:05
BluOxy

総合スコア2663

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

プログラミングってカンニングができるんですよ。

受験のテスト勉強とはここが違います。

全部の単語覚えてるプログラマーなんてまずいないんじゃないでしょうか。(いるかもしれないですけど)

少なくとも、私はわからないことがあればその都度グーグル先生に聞いたり、まとめて置いたメモを読みます。

それでコーディングしたいようにできれば問題ないんです。

ただ、書いてあることの理解ができないうちは、先に進まないほうが良いですね。(レベルによりますが)

読むより、手を動かした方がよっぽど頭に入りますし、理解できるのでコーディングしながら学習するといいと思います

投稿2019/12/19 08:08

azuapricot

総合スコア2341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

azuapricot

2019/12/19 08:10

書籍で勉強しているということは、例題にあるコードはまずその書籍に書いてある=理解ができるはずです 読んでもどうしても意味が分からないコードがあればteratailを使って新たに質問をしてみればいいと思います。
guest

0

私の持論です。

・覚えない、理解しない、とにかくたくさん読む。
理解しようとしたり、覚えようとしたりして躓くのは時間の無駄です。
理解できない-覚えられないのは圧倒的に基礎が不足してるからです。
基礎を身に付けるには数をこなすしかありません。
1冊の本を完璧に暗記-理解するより、100のウェブサイトのページを読んで頭の片隅に置いたほうが
はるかに実践で役立ちます。
その中には、ご自身に合った解説ページもあることでしょう。

・動かないかもしれないプログラムは書かない。確実に動く自信があるプログラムだけ書く。
よくわかってないのに書いたプログラムを何故動かないか悩むなんて時間の無駄です。
それよりもチュートリアル通りに書いたり、サンプルを丸写しして動くプログラムを書いて、
どのように動くのか体感し、なぜ動くのか考えてください。
1行づつ実行して、変数に何が入っているか眺めるだけでも勉強になるはずです。

投稿2019/12/19 09:19

hihijiji

総合スコア4152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

書籍の例題を見ながらわかる部分を少しずつ理解できるように戻って再度用語を調べています。

それは良いことです。stringのスペルすら未だに覚えていないプロもいるぐらいですから、
理解さえ出来れば、用語なんてネットで調べればすぐに出ます。

またわからない部分は答えを見てもわからない箇所があるので、飛ばしてしまっています。

人にもよりますが、一番良いのは、理解できるまで調べることです。
いつまでも理解出来ないなら、teratailに質問してでも理解して下さい。

勉強の仕方的には

用語をある程度頭にいれ、例題の一文が理解できるまで次の問題に入らないほうがいいでしょうか。

プログラムで一番良いのは、例題の一文のフローチャートを作成してみることです。図で書くので理解が早まります。こちら等を使って書いてみるのも手ですよ。

また答えを見て勉強になるのでしょうか

全く理解出来ない状態で答えを見ても、「ふーん」としか思わないので、勉強になっているとはとても言えません。
すぐに答えを見る人もいますが、その人はその分答えを見た後に理解できるまで、ずっとそのプログラムと向き合っています。

投稿2019/12/19 08:43

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BluOxy

2019/12/19 08:46

> 理解さえ出来れば、 「理解したつもりになっていて、後で根本を間違えていることに気づいた。ああ、最初から用語を調べていればよかったのに」 ってならないでしょうか。
stdio

2019/12/20 00:46

そんな、知っている程度で勉強しているつもりになっているようでは、すぐに忘れますよ。 学校の試験さえ乗り切ればいいみたいな考えでいては、仕事は出来ません。 仕事は試験と違って、カンニングし放題なんですから。分からないならその都度調べたらいいと思います。
guest

0

息子が、学校の情報の授業でこういうことがありました。
「教室の入り口から、自分の席まで移動するプログラムを作りなさい」

まず、プログラムとはなんでしょうか。pro 前もって、gram 書かれたもの、行うことの予定表です。
教室の入り口から自分の席まで移動するには、何を行うことが必要でしょうか。他の生徒が座って頭をひねっているとき、息子は、入り口まで行って、何歩前進するのか、回ってから、何歩前進するのか、数えたそうです。
それを聞いて私は言いました。「で、右足から上げるの?左足から上げるの?」
息子の応えはこうです。「え?そこから?」

これの意味がわかるでしょうか。

あなたは、プログラムの勉強をしていて、プログラムをC#で作ろうとしているのでしょうか。
それとも、プログラムを作ることはでき、C#の勉強をしているのでしょうか。

おそらく、前者であると思います。マスコミで目にする「プログラミング教育」は、ほぼ前者ですから。
そうすると、我々の日常生活の中で、必要であるけれどもほとんど意識せずに手順を組み立てている、行う必要があることを見つけ出し、順序をつけると言うことと、C#という人間にとっては微妙に不可解な言葉を覚えるという2つのことを同時進行しなければなりません。
息子の学校では、「自分の席まで移動する」という自分の行動の予定表を書かせることで、プログラムだけに集中できるようにしたわけです。
私の、「右足から?」は、用意されていて使う用意ができているもの、ライブラリはどこまで用意されているのか、問うたのです。息子は「歩く」というライブラリがあることを前提していたので、歩くこともプログラムさせようとした私に「そこから?」と返してきたわけです。その答えを知っているのは教師で、仕様の確認をしなければプログラムはできません。

プログラムを作ることができないのであれば、コンピュータ向けのプログラミング言語ではありませんが、日本語というあなたや同僚にわかりやすい言語を使って、目的を達成するために必要な情報を集める手順を組み立てることから始める方がよいと考えます。その後、日本語をC#などのプログラミング言語に翻訳していきます。慣れれば、同時通訳ができるようになります。

投稿2019/12/20 12:26

Q71

総合スコア995

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

書籍の例題を見ながらわかる部分を少しずつ理解できるように戻って再度用語を調べています。

例題の前に基本的な説明が載っているはずなので、まずはそこを読みましょう。

またわからない部分は答えを見てもわからない箇所があるので、飛ばしてしまっています。

「わらない部分を飛ばす」という考え方はペーパーテストだけにしてください。
どうしてもわからない部分は、本来は教育担当の方に聞くべきですが、
それが難しいとのことですでの、ここのようなサイトを使って聞くと良いでしょう。
(本の説明を読まずに聞くのはナシですが・・・)

勉強の仕方的には
用語をある程度頭にいれ、例題の一文が理解できるまで次の問題に入らないほうがいいでしょうか。
また答えを見て勉強になるのでしょうか

答えを見て勉強にはなります。
他人のソースを見て勉強する機会はこの業界では多いです。
もちろん理解する気がなければ元も子もありませんが。

人に説明できるようになれば理解したと言えるレベルに達していると思いますので、もし同期がいるようでしたら、説明を聞いてもらってください。

書籍を読み返して頭に入れている時間が多くプログラムも例題のままうつしていることが多かったです。
回答をいただいた上で再度質問ですが
プログラムをとりあえず書いてみることが大切とありますが、それは例題を写しながら一文ずつ理解するという方法でも問題ありませんでしょうか。

例題によると思いますが、答えを脳死で写経しているだけではあまり理解したことにはなりません。
少し改造したり、覚えたことを使って「遊んでみること」が重要です。

目的は将来ゲーム作りに参加することです。

そのため経験をつむ為に入社しています。
プログラミング経験はありません

だったら以下のような本を一冊買って自宅のPCで遊んでみると良いでしょう。
Unityの教科書 Unity2019完全対応版 2D&3Dスマートフォンゲーム入門講座
本当にプログラミング自体がはじめての方にもやさしい内容になっています。
(C#の説明まで入っています。)

研修の課題はつまらないかもしれませんが、
「ゲームを作るため」と思えば、結構いろんな事を能動的に覚えようとするはずです。

投稿2019/12/20 06:40

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

読んで理解よりも、プログラムを打ち込む時間を増やすことがいいかと思います。

読んでいても覚えられないですし、実際に打ち込むことのほうが身になると感じました。

読めるようになっても、書けるようにはならないと思うので

投稿2019/12/20 01:53

ida

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

勉強の仕方的には
用語をある程度頭にいれ、例題の一文が理解できるまで次の問題に入らないほうがいいでしょうか。
また答えを見て勉強になるのでしょうか

分からない部分でずっと悩んでいても時間がもったいないので、答えを見たり、一度読み飛ばして後で学習しても良いと思います。

あまりにも分からない部分が多いのであれば、読んでいる書籍のレベルが質問者さんのレベルと合っていないかもしれません。
はじめは入門者向けの簡単な参考書を読むことをおすすめします。

投稿2019/12/19 08:33

nskydiving

総合スコア6500

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

一つ目の質問の答えからいくと、基本的な書籍は順を追って学びます。なので、出来れば飛ばさないほうがよいです。

二つ目は、答えを見てもよいかですが、すぐには見ないほうがよいと思います。いろいろと自分なりに苦労して頑張った後であれば、見てもよいと思います。苦労していると、その分頭に入りやすいですからね。

まぁ、出鼻をくじくようですが、プログラミングはあくまでツールですし流行り廃りも早いので、そんなに根を詰めないで楽しんで学習してください。

投稿2019/12/19 08:20

threeeverytwo

総合スコア49

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問