[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:13931] Re: plamo でc言語の勉強



木村です。

田原さん said:
> うー、すみませんが、なんか全然話が噛み合ってないっぽいです。
> 何でもいいので一度、解説書の類を購入されて、基本的な概念というか何とい
> うか、そのへんを理解されたほうが、長い目でみて近道かもしれませんよ。

その通りです、けど、まずはアドバイスされる側のスキルレベルを知ら
ないと、どんなアドバイスも役に立たないという現実があります。
まあ、間さんのスキルレベルは、読んだ感じではC言語以外のプログラミン
グ言語についても知っているとは思えないので、ほぼ初心者と考えて良い
だろうな、とは思いますが。

コンピュータを理解するには、理解してしまった人では既に思い出せない程
たくさんの積み重ねが裏に存在していて、例えばそれはコマンドの知識で
あったり、ハードウェアやCPUの内部に関する知識であったり、プログラ
ミング言語の知識であったり、OSの知識であったり、アルゴリズムの知識
であったりするわけです。

それらをトータルに理解して初めてまともなプログラマができあがるので
あって、決してC言語の文法を知っているからカーネルハッカーができる
わけではありません。
だからコンピュータプログラマを目指したり、プログラマと言わないまで
もプログラムを書けるようになりたいと思う人は、言語以外の部分、特に
アルゴリズムに関する知識や、ハードウェアの知識を持つ必要があると思
います。

C言語って良く使われているけど、決してやさしい言語ではありません。
実際にそれを理解するには何か一つでもいいからCPUの仕組み(個人的には
x86はお勧めできませんが)やアセンブリ言語も理解しておく必要があると
思います。特にポインタの話になった時には絶対にCPUの動作に関する知
識がないと混乱することでしょう。
# 他にもコンパイル後に生成されたマシンコードを読むとか....

> 一般的に「ソースが読める」ってのは、イコール「読むべきツボを探せる」と
> 考えてもいいですよ。知りたい機能から grepとかで検索してアタリをつける、っ
> てのが常套手段なんですが。

それがいわゆる「経験と勘」ってヤツですね。
たくさんプログラムを作って、時にドツボにハマって鍛えられた結果とし
てそういうものを身に付けていくので、一朝一夕にはできません。修羅場
を経験せずにスキルなんて上がるわけがありません。
# 天才プログラマというのはこの辺の勘が抜群に優れているんだろうな

> でっかいプログラムなんてのは、たいていきれいに構造化されて部品化されて
> ますので、ホントにいじりたい部分のひと関数(のごく一部)だけ、それも「だ
> いたいなんとなく」のレベルで読めれば、プログラムの修正とかもけっこうで
> きてしまうんですよ。

エンジニアリングの話としては、このような「構造化」の手法などが重要
で、流行のオブジェクト指向も底辺では繋がっていたりします。
# つまり必要なのは「言語の理解」だけじゃないってこと

> さて、話を元に戻して、Cの勉強をしようと思ったら、できるだけ小さいプロ
> グラムのソースに取り組んだ方がいいのでしょうね。相手があまりにもでっか
> いと、読みたくてもどこ読んでいいかわからない、なんてこともありますし。

LinuxをC言語の習得の土台に据えるのは正しい判断だと思います。
WindowsなんてC++などが標準言語になってるけど、Windows用のプログラム
はウインドウを操作するためのAPIがプログラムの中心になってくるので、
本質を見失いやすいだろうと思います。
C言語の初心者へのアドバイスとしてよくあるのは「標準関数」と同じ働き
のプログラムを作れ、というのがありますね。strcpyとかstrcatとか。
入力された数字を数値に変換するのを1文字ずつ処理するプログラムを書い
てみるとか。
デバイスドライバなどのソースは目的のデバイスのハードウェアの情報が
ないと「なんでこんなことする必要があるのだろう」なんて無駄なことで
悩んだりしますから、ハードウェアに依存しない部分の、ある程度仕組み
の想像がつくものをターゲットに選ぶと良いでしょう。
# Xのウインドウを操作するプログラムなんてずっとずっと後回し

> Linuxカーネルだと、Linux Japanにずっとカーネルの実装記事が載ってました
> が、私はほとんど途中で睡魔に負けてしまったクチです。ホントは OS カーネ
> ルのソースなんてのは、教材としては最強の部類なんですが、どちらかという
> と Cを極めるというよりは、OSのデザインとか動作原理とか、そっち方面の教
> 材になってしまいますね。

私の本業はVAX/VMSだったりしたのでUNIXのデザインなどを見てシンプル
すぎたり機能がなさすぎて不安を覚えたりする方です。
プログラマ(に限りませんが)なんて柔軟発想が求められたりしますから、
いろいろなものを見て「こんな世界もあるのか」というのを知っていると
役に立つことが多いです。
# 言語はCの他にForthやLispなんかも教養程度にお勧めです

/木村

Follow-Ups
[plamo:13932] Re: plamoで c言語の勉強, Shun-ichi TAHARA (田原 俊一)
References
[plamo:13920] Re: plamo でc 言語の勉強, Masao Katayama
[plamo:13927] Re: plamo でc言語の勉強,
[plamo:13930] Re: plamoで c言語の勉強, Shun-ichi TAHARA (田原 俊一)

[検索ページ] [メール一覧]
Plamo ML 公開システム