仕事と晩飯とその他

日記です。

今日はまとめて勉強する時間を作れなかったけどfopenとかfprintfとか  やっぱり語学と似てる

今日はまとめて勉強する時間を作れなかった。

昨日は苦C第16章の構造体。配列と違って色んな型の変数をまとめられるのは便利な気がするけど、んー、自分で練習課題を解いた後に色々やってみると全然覚えられなくてエラー頻出。型もそうだけど、関数の引数として指定する際に間違えたり。やっぱり型っていうのが身についてない感じ。

今日は第17章の練習課題。表のデータをCSVファイルとして出力。解答例を見ないで考えてみる。なんだかどうしても、PHPみたいに文字列つないで変数に代入して、とか、そんな感じで考えてしまう。まとめて考える時間が作れなかったので諦めて解答を見る。fprintf、そんなのあったっけ。昨日読んだどころか大喜びで簡単なHTMLファイルを出力してたのに完全に忘れてる……。あと、一行のレコードを構造体として扱おうとしてはまったり。構造体、概念としては分かったと思うけど、実際に書けるかって言われると現状は厳しいな。ポインターもそうだな。エイリアスとして、とか、配列はそもそもポインターを渡して、とか、概念は多分ある程度理解できたと思うけど書くとなると全然ダメだ。

この感覚、なんとなく語学と似てる。

自分の場合、語学の課題は「言いたいことはわかってる(ある)にも関わらず、それを言う(書く)ことが出来ない」という点に要約される。「○○が言いたい! でも言えない!」という状態。

プログラミングも似てる。自分の場合、やりたいことは明確に思い浮かぶ。苦Cで今日まで読んだところだと、「C言語でHTMLを書き出す」とか、先の目標だけど「C言語XML(ONIX)をパースしてCSVで出力する」とか(PHPではできるんだけど遅いし重いしあまり使いたくない)。なんだけど、「やりたいことはわかっても、どうやるかがわからない」、いや、そどうやるかもぼんやりとはわかってるんだけど、最終的な形に出来ない。

具体例を挙げると、今日はまったのは、変数の型を宣言するのに、「FILE = *fp;」とか書いてしまって間違いに気づかない。コンパイルするとエラーになるからそこで初めて「どっか違ったっけ?」とか思う。

これって、多分、「型宣言をするよ。型は、「型 変数;」だよ」と考えていなくて、なんとなく型と変数を並べてるんだけど、その時になんとなくイコールを置いているだけなんだろうな。つまり、トークンの意味とかはぼんやり考えていても機能を考えていない。だから、構文が滅茶苦茶になる。

まさにオレの英語の課題だよ。言いたいことはあるのに言えない。いや、言えないんじゃなくて文章にならない。単語しか出てこない。単語も出てくるのは名詞と形容詞と副詞だけ。動詞が抜けてる。動詞が出てきても変化しない。

語学の場合は単語の「機能」というものを思い描いていないんだな、きっと。主語+述語+目的語で、人称や時制の変化ってことを考えていない。いや、少しは考えていると思うんだけど、文章を組み立てる機能として考えていない。だから平気で「I go.」とかそういうことになる。中学英語だけで話せるようになるという猛者がけっこういるらしいが、そういう人たちは単語の機能と変化を考えて文章を組み立てるということができるんだろうと思う。オレはできない。

どうも根は同じようだ。ということはCを頑張れば英語もなんとかなるのだろうか。そんなことないか。まあ、慣れの部分もあるんだろうな。プログラム書いている絶対量が足りないよ、とりあえず。英語もそう。切羽詰まって話したり書いたりの絶対量が全然足りない。

それはさておき、PHPのfopenの使い方などを調べていると変数がfpと置いてある例が(そこそこ)あって、「これってなんだろうなあ」とか思っていたのだが、「file pointer」だから「fp」だったのね。なるほどね。Cを勉強すると他の言語も分かりやすいって聞くけど、多分そうなんだろうなあ。既に構造体のおかげでjavascriptのオブジェクトとプロパティとかオブジェクトとメソッドを.でつなぐっていうのがようやく腑に落ちた。あと、引数を必要としない関数(メソッド)に()付けるっていうのも。Cだと「関数名(void)」ってなるのをvoidを省いたってことか。なるほどなあ。

あと、コマンドプロンプトを使うのやめて「Windows Power Shell」にしてみた。gccコンパイルは問題なし。UNIXは触ってないからlsでもdirでもどっちでもいいんだけど、「どうしてexeファイルを実行するのに.\ファイル名.exeって書かないといかんのだ!」って思ったけど、こっちのほうがUNIXライクなのね。勉強になりました。