今年の4月から大学でC言語を学び始めたものです。
夏休みに入ったため自分で学習を進めてみようと思い、ソースコードが公開されている簡単なゲーム(あみだくじのシュミレーションなど)のコードをうつして理解しながら勉強する、という方法をとっています。
(既にリズムゲームなどがつくれる友人から、「目的がないと挫折するから、ソースコードが公開されてるゲームのコードをいじりながらやるといいよ」という助言を受けたため)
しかし、ネットで個々の関数の意味を理解できても、ゲームの中でそれがどうさようしているのかぼんやりとしか理解できませんでした。
授業で教わったのは関数あたりまでだったため、ポインタ以降の知識はネットで調べて理解しています。
そこで質問です。
この学習方法は、C言語の専門書の半分を身に着けた程度で挑むのは難しすぎたのでしょうか。もしはやすぎたのであれば、どの程度書籍で知識を増やしてからのほうがいいのか教えていたできたいです。ほかに良い学習方法があれば、それも是非教えていただきたいです。よろしくお願いします。
※追記
書籍名:新・明解C言語 入門編
ソースコード:https://saeki-ce.xsrv.jp/C_src/amidakuji01.html
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/19 05:52
回答12件
0
投稿2019/08/20 09:56
編集2019/08/20 11:45総合スコア16614
0
この学習方法は、C言語の専門書の半分を身に着けた程度で挑むのは難しすぎたのでしょうか。
専門書の半分であれば、十分だとと思います。
入門書であれば、全部理解してからです(もちろん、全部暗記はしなくて良いですが)。
投稿2019/08/18 15:06
総合スコア84529
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/18 15:12
2019/08/18 15:58
2019/08/19 03:08
0
直接的な回答は既に複数あるため重複するんで避けますが、このサイトで学習方法というキーワードで検索するだけでも山のように回答があるんで、参考にされると良いでしょう。(言語問わず参考になる回答が多数あると思います)
対象をこのサイト以外に広げると、更に多くの意見が出てきます。
どれが正解、というわけではないですが、多様な意見を読んで取捨選択されると良いんじゃないでしょうか。
実際のプログラミングでも「どうしたらいいんだろう?」と思ったら、まずやるべきことは「調査」です。
ググる力がない人は、いつまで経っても成長しません。
投稿2019/08/18 22:58
編集2019/08/18 23:04総合スコア8949
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/19 05:17
2019/08/19 14:56
2019/08/19 21:59
2019/08/20 13:44
0
友人の助言に関して言えば
目的がないと挫折するから、 ←わかる
ソースコードが公開されてるゲームのコードをいじりながらやるといい ←ハードル高いかも
という感じかなぁ.
人の書いたコードを読む&変えるってのは,自分で書くのに比べて倍くらいは難しい行為なので,「挫折」を心配する行動としては微妙感みたいな.
言語の文法以外の要素に慣れていない段階で踏み込むのは個人的にお勧めしないです.
まずは,自身が知っている事柄だけで何かオリジナルの物を作ることから始めてはどうでしょう.
キーボードからの何かしらの入力と画面への何かしらの出力,それとifあたりがあれば,「対話的な何か」をとりあえずは作れますよね.
最初に出来上がる物の内容はあまり興味深いものではないだろうけども,とりあえずそのコードは全て自分が知っていて理解できる要素だけで構成されているハズ.
→そこから少しずつ発展させていく.すなわち,{未知,新規,試行的…}な要素を少しずつ取り込んでいく(=段階的に学ぶ).
投稿2019/08/19 01:19
総合スコア11656
0
ベストアンサー
まず、プログラミングに正解なんてありません。
例えばC言語で"Hello World"と表示するだけでも、
// main関数内だとして printf( "Hello World" );
が一般的ですが、考えようによっては、
// main関数内だとして char str1[] = "Hello"; char str2[] = "World"; printf("%s %s", str1, str2 );
とか、
// main関数内だとして char str[] = "Hello World"; int i; for( i = 0; i < strlen(str); i++ ){ printf("%c", str[i] ); }
とかみたいにもできる。
なので、写経はあまり好きじゃないです。
写経に慣れてしまうと、答えがないと不安になる。不安になるから、答えクレクレ君になる。
という風に悪循環になります。
よって写経は好ましくないなぁと。
実際に、自分の力で何か作ってみてください。
もちろん、初期段階からすべて。です。
私はこれで学びました。(独学)
例えば、ランチャーソフト。(ソフトを起動するソフトみたいな)
少なくとも
■ 外部ファイルを起動すること ■ どのファイルを起動するかを入力させること (オプショナルな場合もあるが)
は必須ですね。
これを実際に組む...みたいに。
そういう風に、構想段階から自分でやる。他人のコードだけを読んでも、構想はできません。
ほとんどpepperleafさんのやり方に同じですね。
入門書の最初の部分だけやってあとは辞書代わり。っていう感じ。
参考: ロジック
[追記0]
一応、一通り入門書を読んで、「どういう概念があるか」を学び、
実際に何か作る。その時、入門書やリファレンスは辞書代わりにする。
余裕があれば「データ構造とアルゴリズム」を学ぶ。
あとはPaizaとかのような競技プログラミングっていうやつをやってみるとか。
とにかく、自分で考え、自分で作ることが大事かも。
投稿2019/08/20 03:39
編集2019/08/20 03:43総合スコア4958
0
あまり参考にならないかも知れませんが、
自分の場合、使えてる言語は、参考書は半分くらいしか読めてなくって、後は辞書代わり。(最近は、ネットで検索)
で、最後まで読んだ(目を通した)本は使えてない(使う機会が無い)という状況。
何か作りたい(仕事でも趣味でも)という目的がある場合、覚えて使えるという感じです。
ソースコードが公開されている簡単なゲーム(あみだくじのシュミレーションなど)のコードを
個人的には、好きな書き方ではないですね。インデントとか、空白の入れ方とか。 こういう時、自分的には、(手作業で)インデントとか空白とか、書式を書き換えながら、コードを追うことが多いです。はっきり言って、効率悪いかも知れませんが、内容の理解が早い気がしてます。
参考までに。
投稿2019/08/19 15:11
総合スコア6383
0
たとえ話をしましょう。
- 右手で握りこぶしを作ってください。
-
- の状態から、右手を、じゃんけんのパーの形に開いてください。
これ、2. をやるのって簡単ですよね。「手を開く」って意識しただけで、たぶん勝手に手が動きます。
でも……この「手を開く」動作の中に、どれだけの細かな動作が詰まっていると思いますか?
少なく見積もっても、
- 親指の付け根を開く
- 親指の第1関節と第2関節を伸ばす
- 親指が人差し指の可動域から離れたところで、親指以外の四本の指の第1関節から第3関節までを伸ばす
- 各指を適当な角度に開く)
となってきますが、ここにさらに細かな動作も含まれてきます。(例えば 3. で四本の指を協調動作させているはずです。意識しなければ指を順に動かすようなことはしないでしょう?)
この「細かな動作」を全て書き記すのが、プログラムです。コンピュータはプログラムとして記載された通りのことしかできません。記載されていないことはしないし、できないのです。
そしてプログラミングとは、やりたいことを事細かく書き記すことに他なりません。
ソースがあるならば、そのソースを段階を踏んででもいいから読み解いて、「プログラマは何をしたくてこんなコードを書いたのか」を読み取りましょう。それができれば、逆に「何をしたいなら、どんなことをすればいいのか」が分かるようになり、結果的にどんなコードを書けばいいのか分かるようになっていきます。
余談:握りこぶしですが、乳児の場合は親指が他の四指に被せられる(親指が握りこまれる)ようになります。どこかのタイミングで親指が外に出るのですが、不思議なものですね
投稿2019/08/18 23:59
総合スコア13703
0
... ソースコードが公開されている簡単なゲーム(あみだくじのシュミレーションなど)のコードをうつして理解しながら勉強する ...
コードを写して動作させてからが勉強の開始点になります。
- debagger の使い方をまなび、ステップ実行させて動作を追ってみる。
- 機能を変えずに、コードを書き換えてみる。(変数名、関数名をわかりやすいものにするとか、プロブラムの後続そのものを変更するとか)
- 機能変更をしてみる。
投稿2019/08/23 22:18
編集2019/08/24 03:30総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
この学習方法は、C言語の専門書の半分を身に着けた程度で挑むのは難しすぎたのでしょうか。もしはやすぎたのであれば、どの程度書籍で知識を増やしてからのほうがいいのか教えていたできたいです。
入門書は一通り読み終えてからにした方が良いと思います。
また、他人の書いたコードを読むのは大変な作業なので、すべてを理解しようとせず、あくまで参考にする程度に考えておいた方が良いと思います。
ほかに良い学習方法があれば、それも是非教えていただきたいです。よろしくお願いします。
ご友人の言われている「目的がないと挫折するから」というのは、確かにそうだと思いますので、まず目標を決めて、できるだけ手を動かしながら学習することをおすすめします。
手を動かしながら学ぶ入門書(実践入門書)というのがありますので、そういうので学習してみるのはいかがでしょうか。
投稿2019/08/19 05:33
総合スコア6500
0
何のプログラムを書くかを考えるのが最も難しいと思います。
何のプログラムを書くか考えプログラムを完成させましょう。
目標が難しすぎたら完成しないので自分のレベルに合ったものがいいです。
ソースコードが公開されているソースを見ると未知のものに出会います。
未知のものがそのときは分からなくても専門書やネットなどで日々調べているといつかわかるときが来ます。
何のプログラムを書くかを考え、公開されているソースを読み、未知のものを専門書などで調べ、プログラムを書きまくりましょう。
これらは並行して行いましょう。
プログラムは英語が主戦場ですので英語の学習も必要になるでしょう。
いつまでも無限に学習しましょう。
そのようにして難しいプログラムを完成させられたらあなたはすごい人です。
たいていの人は途中で挫折します。
投稿2019/08/18 15:49
総合スコア777
0
デバッグ環境を整えて、実際にコードを書きまくりましょう
投稿2019/08/18 15:01
総合スコア87774
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/18 15:09
2019/08/18 15:13
2019/08/18 15:23
2019/08/18 22:21
2019/08/18 23:28
2019/08/18 23:39
2019/08/18 23:44
2019/08/18 23:57
2019/08/19 00:56
2019/08/19 03:04
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。