Cを学ぶにはどうすればよいですか? [閉まっている]
-
06-07-2019 - |
質問
Cの学習に興味があります。 K&を読みました。 R 、そして私はRとPythonでいくつかの簡単なC拡張の作業を行ってきました。 Cでもっと充実した何かをする価値のあるプロジェクトのアイデアは何ですか? Dive Into Python に似たオンラインリソースはありますか?特に、Cを学習しようとしている新しい言語を既に知っているプログラマーに焦点を当てたリソース(「Cで配列の長さを求めるのは意味がありません、怠け者のPythonista」など)に言及しています。
私の背景:
数学/統計、Pythonでの日々のプログラミング、R、主に自然言語処理、アルゴリズムなど。
解決
他のヒント
数年前、私の友人から同じ質問がありました。「Cを学ぶにはどうすればよいですか」私は彼にデバイスドライバーを書くように言った。
彼が実際にやったときの驚きを想像してください。
やや話題から外れていますが、バックグラウンドは数学と統計に言及しているので、Project Eulerで試してみてください。 200を超える数学/統計関連の問題を解決できます。さらに、解決策を見つけたら、問題フォーラムを表示して、他の人が同じ解決策をどのように解決したかを確認できます。他の人がどのように問題を解決するかを見るのに非常に便利です...そして起動するのが楽しいです!
あなたに似た背景があります。私はPythonを使用して、博士課程の研究のために、またWebプログラミングのために、多くの数学およびデータ分析を行います。違いは、90年代に遡ってCを最初に学んだことです。
Python用のC拡張機能を記述できる場合、Cの利点についてかなり適切に対応していると思います。私の意見では、今日のCは次の2つのことに最適です。
- ハードウェアとやり取りする低レベルのソフトウェアの作成。
- 反復的で退屈でCPU集約的な処理(数学、XML解析など)を行うコードの記述...おそらく高レベル言語の拡張として。
もちろん、多くの高レベルのアプリケーションもCで書かれています。特に私が見つけたLinuxでは、大部分は「裸の骨」では書かれていません。 K& RのCまたは標準ライブラリ。むしろ、Glib、wxWindows、Apache Portable Runtimeなどのフレームワークを使用します。これらはすべて何らかのオブジェクト指向の構造または規則を使用し、Cの基本的なメモリ管理の詳細の一部を抽象化します。 / p>
だから、今日のプログラミング言語環境であなたのCスキルを役立てるのは、主に低レベルの仕事をすること、またはこれらの高レベルのフレームワークの1つに慣れることだと思います。個人的には、GlibおよびGTKライブラリが非常に好きです。なぜなら、Cの低レベル機能を使用することを妨げることなく、非常に動的オブジェクト指向モデル(Pythonによく似ています)を使用しているからです。
単純な言語のインタープリターを作成できます。フレックス/バイソンを使用します。マルチスレッドなどにします。これは楽しく、ポインターを頻繁に使用する傾向があります。 学校プロジェクトのためにそのようなものを書きました。コレクター、TwoSpace、および並行バージョン。それは楽しかった。そして、「こんにちは、世界」より大きい最初のcプログラムとして実行可能です!
Cの学習は難しい方法です。無料の電子ブックで、Cコードの多くの例と演習を通して学習することができます。
日々の作業で問題を見つけるか定義し、Pythonの代わりにCを使用して強制的に解決するようにします。そうすることで、あなたが普段何をしているのかという問題との関連性を保ちながら、言語を学ぶことを余儀なくされます。
仮想マシン(JVMなど)を実装します。