アカウント名:
パスワード:
>> 初心者に変数がグローバル変数だけと思わせるような筋、stdio.hをインクルードする理由を解説しない点についてはタレこみ人はどうかと思うが
これね、教えたことがない人のセリフ。教えると、こうするしか無いのよ(main()の外にint宣言おいてあるのはいただけないが)。
関数の概念の前にmain()関数があって、メモリの概念の前に"やscanfの&があったり、プリプロセッサの前に#includeがあったり、とどめ、printf()なんて可変長引数をとる、どう考えても最初に教えちゃいけない関数だったり。
ある程度目をつぶって教えるしかない場所なんですよ。で、ポインタやってから戻って「実はscanfの&は・・・」というように教えるしかない。main()の引数char** argvなんて・・・じゃん。
新入社員にCを教える講座を持ったことがあります。プログラミング初心者対象で。「プログラミング初心者にC言語を教えるのは間違ってる」と再三にわたり進言したのですが「業務で使用する言語を最初に教えないと」と却下。なんとか講義時間を8時間(1時間を週2で全8回)確保して、以下の流れで教えました。
1コマ目:コンピュータの構造。CPU毎に機械語が異なる。コンパイラ。宿題は「C言語以外のプログラミング言語を調べてくること」2コマ目:なぜ複数の言語があるのか。同じソースから異なる機械語にするには。コンパイラの移植。宿題は「クロスコンパイラとはどんなものか調べてくること」3コマ目:適当に書いたテキストファイルをコンパイラに食わせる。なぜエラーが出るのか。宿題は無し。(だいたいシェルに慣れてなかったり質疑応答で潰れる)4コマ目:Cの解説スタート。変数について。数学と異なる記号の使い方。function(関数)について。C言語はfunctionを組み合わせて作る。
int sum(int x, int y){ int ans; ans = x + y; return ans;}
宿題は「なぜsum関数をコンパイラに渡しただけでは駄目か考えること」(だいたいは文の区切りだの宣言だので時間がなくなる)5コマ目:コンパイラはmain関数を決めうちで読み込む。mainでsum(4, 5)とかしてみる。コンパイラが困るのでプロトタイプ宣言がある。結果をディスプレイに出す関数は既にある。ソースコードにコピペする代わりにincludeしよう。.hについて。プリプロセッサとリンカの話。宿題は「プリプロセッサは何をしてくれるか調べること」6コマ目:printfで結果の出力。forでのループ。ifでの分類。偶数だけを出力してみる。7コマ目:配列の話。3で割り切れる数だけ配列に入れてみる。配列の出力。文字列が無い話。配列の先頭と\0の話。やっとHello World!8コマ目:fizzbuzzを作ってみよう。質疑応答。
教えることを絞り込んだので、きちんと理解してもらえたようで意外に好評でした。あとオマジナイを極力排除した組み立てにしたので「自分で理解してから使う」癖が付いたようで部署に戻ってからもスムースだったようです。目をつぶって教えなくて良いように考えたら、なんとかなるもんですぜ:-)
Cを教えるのに、コンパイラの説明から入らないのは無謀ですし、プリプロセッサの説明をせずに標準ライブラリは使えません。やる夫のは、せっかく前フリ長いんだからもっともっと丁寧にやって良かったんじゃないかなあ。# Hello World!までの距離が長い言語は初学者向きではないと思うのですが、いまだに中々理解が得られないのが寂しいところ:-P# たまにCに慣れたやつが居るのでその時は数独ソルバーかCのコメントを取り除くプログラムを書いてもらってました。
「プログラミング初心者にC言語を教えるのは間違ってる」と再三にわたり進言したのですが「業務で使用する言語を最初に教えないと」と却下。
これはどちらも一理あるとは思いますが、教える内容のレベルにもよるでしょうね。 例えば「やる夫の~」も読みましたが、プログラミングの基礎であってC言語である必要が全くありません。 この場合はC以外で教える方がいいかも。
kousokubusさんも書かれているように
Cを教えるのに、コンパイラの説明から入らないのは無謀ですし、プリプロセッサの説明をせずに標準ライブラリは使えません。
この辺の解説(ソースファイルの分割/リ
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
人生の大半の問題はスルー力で解決する -- スルー力研究専門家
とは言うけどね (スコア:4, 興味深い)
>> 初心者に変数がグローバル変数だけと思わせるような筋、stdio.hをインクルードする理由を解説しない点についてはタレこみ人はどうかと思うが
これね、教えたことがない人のセリフ。教えると、こうするしか無いのよ(main()の外にint宣言おいてあるのはいただけないが)。
関数の概念の前にmain()関数があって、メモリの概念の前に"やscanfの&があったり、プリプロセッサの前に#includeがあったり、とどめ、printf()なんて可変長引数をとる、どう考えても最初に教えちゃいけない関数だったり。
ある程度目をつぶって教えるしかない場所なんですよ。で、ポインタやってから戻って「実はscanfの&は・・・」というように教えるしかない。main()の引数char** argvなんて・・・じゃん。
-- gonta --
"May Macintosh be with you"
プログラミング初心者にCを教えるのが間違ってる(Re:とは言うけどね (スコア:5, 参考になる)
新入社員にCを教える講座を持ったことがあります。プログラミング初心者対象で。
「プログラミング初心者にC言語を教えるのは間違ってる」と再三にわたり進言したのですが「業務で使用する言語を最初に教えないと」と却下。
なんとか講義時間を8時間(1時間を週2で全8回)確保して、以下の流れで教えました。
1コマ目:コンピュータの構造。CPU毎に機械語が異なる。コンパイラ。宿題は「C言語以外のプログラミング言語を調べてくること」
2コマ目:なぜ複数の言語があるのか。同じソースから異なる機械語にするには。コンパイラの移植。宿題は「クロスコンパイラとはどんなものか調べてくること」
3コマ目:適当に書いたテキストファイルをコンパイラに食わせる。なぜエラーが出るのか。宿題は無し。(だいたいシェルに慣れてなかったり質疑応答で潰れる)
4コマ目:Cの解説スタート。変数について。数学と異なる記号の使い方。function(関数)について。C言語はfunctionを組み合わせて作る。
宿題は「なぜsum関数をコンパイラに渡しただけでは駄目か考えること」(だいたいは文の区切りだの宣言だので時間がなくなる)
5コマ目:コンパイラはmain関数を決めうちで読み込む。mainでsum(4, 5)とかしてみる。コンパイラが困るのでプロトタイプ宣言がある。結果をディスプレイに出す関数は既にある。ソースコードにコピペする代わりにincludeしよう。.hについて。プリプロセッサとリンカの話。宿題は「プリプロセッサは何をしてくれるか調べること」
6コマ目:printfで結果の出力。forでのループ。ifでの分類。偶数だけを出力してみる。
7コマ目:配列の話。3で割り切れる数だけ配列に入れてみる。配列の出力。文字列が無い話。配列の先頭と\0の話。やっとHello World!
8コマ目:fizzbuzzを作ってみよう。質疑応答。
教えることを絞り込んだので、きちんと理解してもらえたようで意外に好評でした。
あとオマジナイを極力排除した組み立てにしたので「自分で理解してから使う」癖が付いたようで部署に戻ってからもスムースだったようです。
目をつぶって教えなくて良いように考えたら、なんとかなるもんですぜ:-)
Cを教えるのに、コンパイラの説明から入らないのは無謀ですし、プリプロセッサの説明をせずに標準ライブラリは使えません。
やる夫のは、せっかく前フリ長いんだからもっともっと丁寧にやって良かったんじゃないかなあ。
# Hello World!までの距離が長い言語は初学者向きではないと思うのですが、いまだに中々理解が得られないのが寂しいところ:-P
# たまにCに慣れたやつが居るのでその時は数独ソルバーかCのコメントを取り除くプログラムを書いてもらってました。
Re: (スコア:0)
これはどちらも一理あるとは思いますが、教える内容のレベルにもよるでしょうね。
例えば「やる夫の~」も読みましたが、プログラミングの基礎であってC言語である必要が全くありません。
この場合はC以外で教える方がいいかも。
kousokubusさんも書かれているように
この辺の解説(ソースファイルの分割/リ