私は最近Cを学びました、そして私の知識を固めるためにプロジェクトを始めたいです。 vimのような非常にシンプルなテキストエディターを作成することにしました。私が直面している問題は、テキストエディタがどのように機能するかさえまったくわからないことです。また、それについて学ぶために何をググググするかわかりません。
それについてグーグルすると、vimのGitHubリポジトリが作成されました。コードベースが巨大で、コードが混乱しているので、私にとっては役に立ちません。また、vimのように機能するテキストエディターをCで作成するためのチュートリアルも見つけました。
チュートリアルに従うことを考えましたが、ごまかしのようです。 vim開発者は、特定のチュートリアルなしでvimをコーディングする方法をどのように理解しましたか?それとも、より単純なテキストエディタから始めたのでしょうか。言語とそのドキュメントの知識だけからどうやってそれを理解したのでしょうか?
チュートリアルに直接従わずにこのテキストエディタの作成を開始するために正確に何が必要ですか?私が考えたいもう1つの例は、デニス・リッチーとケン・トンプソンがUnixをどのようにコード化したかです。 OSの機能についてはわかりましたが、コードに組み込む方法はわかりません。何が欠けているのですか?この言語の知識を実際に実際に使用する方法を教えてください。
これが最初のプログラミングプロジェクトである場合、単純なテキストエディターでさえ複雑すぎる場合があります。 vimやOSのようなものは完全に問題外です。
問題への取り組み
一般に、開始する方法はほとんどのプロジェクトでほぼ同じですが、
例
テキストエディタの例を見てみましょう。
テキストファイルの一部を画面に表示し、文字を挿入および削除して、現在のバージョンを保存します。
ファイルを読み取ってその内容を表示することから始めます。
(特に)次のサブ問題を特定します。
要件(ファイルの読み込みと表示)が完了した時点で、画面に収まる部分のみを表示する方法、ファイル内を移動する方法などを検討できます。
次のステップ
時間の経過とともに、ますます複雑な問題に取り組むにつれて、問題を分解する適切な方法を見つけることがますます困難になることに気づくでしょう。また、コードの変更は時間の経過とともに面倒になる可能性があることにも気づくでしょう。
その時点で、基本的なアーキテクチャーと設計の概念を学ぶ時が来ました。
あなたはしません。
どうすればよいか漠然とした考えさえない場合、それは現在のスキルを超えていることを示しています。どうやって始めればよいかわからない場合は、アプリの最も難しい部分に関しては、まったく何もわからないでしょう。
あなたがあなたテキストエディタをどのように動作させるかを決める必要があります。
これは、独自のプロジェクトを最初から最後まで開発する上で最も悪化し、やりがいのある経験の1つです。誰からもビルドの要件が送られることはありません。独自の要件を開発する必要があります。
つまり、コードの最初の行を記述する前に、非常に多くの設計作業を行う必要があります。インターフェースの外観を決める必要があります。含める機能を決定する必要があります。上記の質問はどちらも、自分が実行できると感じていることに基づいています。 「理想的な」状況(インターフェースをどのように機能させるか)を考えても、それをコーディングする能力がないと感じた場合は、別のアプローチを検討する必要があります。これをどのように機能させることができますか?これは、あなたがもっと学びたいかもしれないコーディングアプローチに集中するのに役立ちます。
他の人が言ったように、vimは大規模で複雑なコードベースであるため、vimをコピーするのは最善のアプローチではないかもしれません。また、私の考えでは、開発者としてあなたを締めくくるのに役立つ設計作業を否定しています。
これは、コードの最初の行を記述する前に、アプリケーション全体を最初から最後まで設計する必要があるという意味ではありません。詳細は、時間の経過とともに要件が変化しても問題ありません。自分のアプリケーションをテスト/使用していて、「もし…いいのではないか」と思うまで、思いもよらない新機能を追加してもかまいません。単純なものから始めてもかまいません。
プログラミング経験のないフル機能のテキストエディターを最初から作成するのはばかげています。多くを学ぶ前に落胆し、それを放棄することになります。
いくつかの選択肢が思い浮かびます:
vim
に習熟している場合は、それをよく読んで、データをどのように表すか、またはf
コマンドを検索するなど、小さくて孤立したものを理解してください。cat
コマンド、次にwc
、次にgrep
、次にsed
のようにします。