Skip to content
This repository was archived by the owner on Oct 16, 2024. It is now read-only.

C言語を学ぶためにはどうしたらいいでしょう? #8

Open
wakita opened this issue Oct 17, 2016 · 11 comments
Open

C言語を学ぶためにはどうしたらいいでしょう? #8

wakita opened this issue Oct 17, 2016 · 11 comments

Comments

@wakita
Copy link
Contributor

wakita commented Oct 17, 2016

標記の質問を受けました。

質問された方は、すでに C 言語に関する入門書を読み終えているので、基本的な知識は定着しているようです。あとは実践的なプログラムに触れることと、自分でプログラミングするとよいと思います。

みなさん、アイデアを提供して下さい。

@3tty0n
Copy link

3tty0n commented Oct 17, 2016

  • OS を作ってみる
  • Unix カーネルのソースを読んでコミットしてみる
  • C言語で書かれた OSS を探して PR を送ってみる

@wakita
Copy link
Contributor Author

wakita commented Oct 17, 2016

彼には話したんですが、私の場合はCは三番目に学んだプログラミング言語でした。図書館で Scientific American のなかの Computer Recreation を読みながら、そのアイデアをプログラムにすることを楽しみにしていました。Life Game、植物の形態を文法的に記述できる L SystemMandelbrot 集合などを知りました。自宅のマイコンで BASIC を使って Mandelbort 集合の可視化プログラムを書いたんですが、計算に一週間以上もかかり高速化したかったのが C 言語を学び始めたきっかけです。あと、サークルの活動でプラネタリウム(ハードウェア)を制作したんですが、その設計のシミュレーションのためのプログラムも作りました。後にそれが転じて学園祭での星占いのプログラムにもなったりした。。。

森先生とも対話したんですが、自分の側に作りたいものがあって、それを作るために知識を求めるのが一番、勉強になるんじゃないでしょうか。

@wakita
Copy link
Contributor Author

wakita commented Oct 17, 2016

プログラミング言語の実装に興味があるのならば、

  • Scheme48
  • Portable Forth
  • Boehm GC

などはいいと思います。Boehm GC のアルゴリズムには感動しました。

@wakita
Copy link
Contributor Author

wakita commented Oct 17, 2016

組込み系もいいと思いますが、ぼくはあまり経験がありません。今どきなら、GPGPUプログラミングだと普通は C 言語ですよね。CPU よりも数十倍の速度の性能が得られる場合があります。

@wakita
Copy link
Contributor Author

wakita commented Oct 17, 2016

オペレーティングシステムの構造に興味がある場合は xv6 をお薦めします。

いずれにせよ、興味のある人で数人で勉強会を開くといいです。

@wakita
Copy link
Contributor Author

wakita commented Oct 17, 2016

競技プログラミングも勉強になりますね。

https://www.amazon.co.jp/gp/product/4839941068/

@wakita
Copy link
Contributor Author

wakita commented Oct 17, 2016

あと、知人のマニアがやっている怪しい世界もあります。

あなたの知らない超絶技巧プログラミングの世界
https://www.amazon.co.jp/dp/B015R0GNXK

一例を挙げると、不動点プログラムというものがあります。プログラムを実行すると、そのプログラムのソースコードを出力するというものです。で、遠藤さんがやったのは、プログラムを実行すると 3D Printer から、円筒形の物体が出力されます。で、その物体は実は凸版印刷の版になっていて、それを使うとプログラムが印刷できる。で、それを Scanner と文字認識装置を用いると、ソースコードが再現できるという不動点なんです。さらに、3D 印刷の費用(印刷にかかるお金)を最小化するための工夫とかもしれいます。

@wakita
Copy link
Contributor Author

wakita commented Oct 17, 2016

そういえば、 @3tty0n のコメントを見ていて思い出しましたが、こんな本がありました。

30日でできる-OS自作入門
https://www.amazon.co.jp/dp/4839919844

こちらで簡易にやって、xv6 にステップアップするという方法はありでしょうね。

@wakita
Copy link
Contributor Author

wakita commented Oct 17, 2016

デバイスドライバを書くのもありだと思います。昔、自分がもっている特定の USB メモリを挿すとログインできるような仕掛けを作ったことがあります。完全に忘れてしまったけれど、案外、簡単でした。

@wakita
Copy link
Contributor Author

wakita commented Oct 17, 2016

@3tty0n くんからのお薦めは HTTP サーバ(ウェブサーバのこと)です。ネットワークプログラミングで、通信のための API を使うので C らしさが出ます。

以下が参考になるみたいですよ。案外、短いでしょ?
http://qiita.com/edo_m18/items/4ba1837cf9182005370a

@wakita
Copy link
Contributor Author

wakita commented Oct 18, 2016

関数型言語の OCaml の VM のソースコードを読んだことがあります。2,000行くらいかな?バイトコードインタプリタとしては非常に効率のよいもので、C のプログラミングテクニックを学ぶのにもよい例だと思います。手始めにはよいかもしれません。

VM は OCaml のソースの byterun ディレクトリにあります。
https://github.com/ocaml/ocaml/tree/trunk/byterun

現在、大学院の Functional Programming という授業で OCaml のサブセットにあたる MinCaml というネイティブコードコンパイラのソースコード (OCaml) を解説しています。みなさんが大学院にやってくるときに継続しているかどうかは??だけど。

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants