実際にどのように機能するのかわからないときに、どのようにコーディングしますか?[閉まっている]


14

私は最近Cを学び、知識を固めるプロジェクトを始めたいと思っています。vimのような非常にシンプルなテキストエディタを作成することに決めました。私が直面している問題は、テキストエディタがどのように機能するのか、まったくわからないことであり、それについて学ぶために何をグーグルで検索するべきかわからないことです。

それについてグーグルで調べた結果、vimのGitHubリポジトリが作成されました。これは、コードベースが巨大であり、コードが私を混乱させるため、役に立たないものです。また、C言語でvimのような機能を持つテキストエディタを作成するためのチュートリアルも見つけました。

チュートリアルに従うことを考えましたが、不正行為のように感じます。vim開発者は、特定のチュートリアルなしでvimをコーディングする方法をどのように見つけましたか?それとも、よりシンプルなテキストエディターから始めましたか?彼らは言語とそのドキュメントの知識からそれをどうやって理解したのですか?

チュートリアルを直接実行せずにこのテキストエディタの作成を開始するために必要なものは何ですか?私が考えたい別の例は次のとおりです。デニス・リッチーとケン・トンプソンはどのようにUnixをコーディングしましたか?OSがどのように機能するかはわかりますが、それをコードに組み込む方法はわかりません。私が見逃しているのは何ですか?この言語の知識を実際の実用に移すにはどうすればよいですか?


14
あなたは、長い歴史を持つプロジェクトと並外れた人々とを比較しています。Unixは、システムレベルのプログラミングの長年の経験を持つ研究グループで始まり、より複雑なMultics OSの経験から利益を得ました。Vimは、edに基づいたviに基づいていました。これらのプログラムは突然現れたのではなく、何百人もの人々によって構築された進化版でした。そのため、すべての履歴をスキップするのが難しい場合でも、イライラしないでください。誰もできません。代わりに、理解の端にあるプロジェクトを実行してください-ちょうどあなたの把握の範囲内で、まだ挑戦的です。
アモン

8
あなたは木琴でいくつかの曲を演奏することを学んだところで、今、あなたは大きな国際オーケストラで演奏したいですか?さあ、期待しすぎです。プログラミングは楽器を演奏するようなものです。小さなシンプルなメロディから始め、数年の練習の後、シンフォニーの演奏を学びます。
Doc Brown

3
同意した。多くの初心者が苦労して学ぶ何かを学ぶチャンスをあなたに与えてください。少し始めます。また、vimのコードも読んでください。既存のコードを読んで多くを学ぶことができます。
ライヴ

17
あなたの根本的な問題は、あなたの思考の明快さの欠如です。「vimのようなシンプルな小さなテキストエディター」と言った後、すぐにそのコードベースが巨大で紛らわしいことに注意してください。これは、vimに非常に似ているものは単純ではないという強力なシグナルです。経験豊富なプログラマでさえ、あなたが陥った精神的なtrapに陥ります。あなたがまだ理解していないことは簡単ではありません。彼らは複雑です。コンピュータープログラミングは、メンタルロジックを現実に変えています。プログラミングについてより明確に考えることから始めます。
エリックリッパー

4
また、「不正行為」を心配するのもやめましょう。これはゲームではありません。あなたには目標があり、それは良い目標です。それらの目標を達成するためにする必要があることをしてください。プロのコンピュータープログラマーは、何かがどのように機能するかを学びたいときにソースを見ていないと思いますか? あなたが書いていないソースから学ぶ方法を学ぶことは、最も重要なプログラミングスキルの1つです。
エリックリッパー

回答:


17

これが最初のプログラミングプロジェクトである場合、単純なテキストエディタでさえ複雑すぎる可能性があります。vimやOSのようなものは完全に問題外です。

問題へのアプローチ

一般に、開始する方法はほとんどのプロジェクトでほぼ同じですが、次のとおりです。

  • 要件を収集します。ソフトウェアは正確に何をしますか?
  • あなたは、で始まる非常にいくつかの要件と、ビットにより機能のビットを追加します。
  • 現在の要件によって引き起こされる問題をサブ問題に分解します。
  • 実装方法を知っているものが見つかるまで、サブ問題を分解し続けます。

テキストエディターの例を見てみましょう。

  • 画面にテキストファイルの一部を表示し、文字を挿入および削除して、現在のバージョンを保存します。

  • ファイルを読み取り、その内容を表示するだけで開始します。

  • (特に)次の副問題を特定します。

    • 表示するファイル名を知るにはどうすればよいですか?
    • ファイル名を指定して、ファイルの内容を取得するにはどうすればよいですか?
    • ファイルの内容を指定して、それらを表示するにはどうすればよいですか?

要件(ファイルの読み込みと表示)が完了するポイントに到達したら、画面に収まる部分のみを表示する方法、ファイル内を移動する方法などの検討を開始できます。

次のステップ

時間が経つにつれて、ますます複雑な問題に取り組むにつれて、問題を分解する適切な方法を見つけることがますます難しくなることに気付くでしょう。また、コードの変更は時間が経つと退屈になる可能性があることにも気付くでしょう。

その時点で、いくつかの基本的なアーキテクチャと設計の概念を学習します。


アドバイスをありがとう このアプローチを取ると思います。私は気が変わったときは少し頑固なようですが、あなたが提案したことから、ファイルビューアの作成方法を試してみると思います。ファイルのメタデータを何らかの方法で表示する方法を追加することもできますか?おそらく自分で理解できるでしょう。どうもありがとう!
フェイスレス

2
これに追加するために、「コマンドラインエディタについて話している場合」「画面の特定の位置に特定の文字を書き込む」にさらに分割することができます。オンラインで簡単に答えを見つけられます。
ダケリング

2
「単純なテキストエディタでさえ複雑すぎる」テキストエディタは驚くほど複雑です。20 MBのファイルを編集することを想像してください。バッファリングを必要とするのに十分な大きさですが、最新のコンピューターに負担をかけるほど大きくはありません。スクロール、テキストの挿入と削除、テキスト自体のリアルタイム再配置、スクロールバーマーカーの背後のモデルの変更に応じたリアルタイムの更新が可能である必要があります。フォーマットの種類がある場合、これはさらに複雑になります。

15

あなたはしません。

どうすればよいかわからない場合でも、現在のスキルを超えていることを示しています。開始する方法がわからない場合、アプリの最も難しい部分についてはまったくわからないからです。


それから始めるのに良いプロジェクトは何でしょうか?私はすでに(ターミナルで)自分の絞首刑執行人のゲームを作っており、三目並べゲームも作っています。続行する方法がわからないので、テキストエディタを使用することをお勧めします。
フェイスレス

3
@faithlesss-ファイルを読み書きするものは、基本的な中間ステップのようです。
Telastyn

9
ファイルビューアは、次に良いプロジェクト、のような例えばページャかもしれないlessmoreまたはviewプログラム。可変編集バッファーの複雑さなしに、エディターのいくつかの側面を共有します。
アモン

@Telastyn私はあなたを得た。次に、おそらく基本的なテキスト形式を読み取ることができる単純なファイルビューアを作成し、次にjsonファイルまたはcsvファイルなどの読み取り方法を考えます。それを解析するのはそれほど難しいことではなく、ただ私が推測するstring.hのドキュメントを実際に見なければなりません。アドバイスをありがとう!
フェイスレス

2
@Faithlesssもの特徴を見ていラインエディタを、テキストエディタプログラムの前身
Bergi

2

あなたはどのように決定する必要があり、あなたが欲しいあなたの仕事へのテキストエディタを。

これは、最初から最後まで独自のプロジェクトを開発する上で最も厄介でやりがいのある経験の1つです。誰からもビルドの要件が送信されていません。独自の要件を作成する必要があります。

つまり、コードの最初の行を記述する前に、非常に多くの設計作業を行う必要があります。インターフェイスの外観を決定する必要があります。含める機能を決定する必要があります。上記の質問は両方とも、あなたができると感じることによって導かれます。「理想的な」状況(インターフェースをどのように動作させたいか)を考えているが、コーディングする能力がないと感じている場合は、別のアプローチを検討する必要があります。これにより、詳細を知りたいコーディングアプローチに集中できます。

他の人が言ったように、vimをコピーしようとするのは、大きくて複雑なコードベースであるため、最良のアプローチではないかもしれません。また、あなたは、私の謙虚な意見では、開発者としてあなたを締めくくるのに役立つ設計作業を否定しています。

これは、コードの最初の行を書く前に、アプリケーション全体を最初から最後まで設計する必要があるという意味ではありません。詳細を確認するにつれて、要件が時間とともに変化することは問題ありません。独自のアプリケーションをテスト/使用するまで考えもしなかった新機能を追加しても問題ありません。「…ならいいのではないか」と思ったら、簡単に始めても構いません。


1

プログラミング経験のないフル機能のテキストエディターをゼロから作成するのは愚かです。多くのことを学ぶ前に落胆して捨ててしまうでしょう。

いくつかの選択肢が思い浮かびます:

  • 使い慣れた製品のコードを調べてください。に習熟している場合はvim、それをよく見て、データを表す方法や単一の文字(fコマンド)を検索するなど、小さく孤立したものを理解してください。
  • :非常に簡単なプログラムのコードを勉強し、そこからあなたの方法を動作し cat、コマンドwcその後、grepその後、sed例えば。
  • エディターの単一の機能のみを実行するプログラムを作成してみてください。ファイルの各行の2番目の文字を(書き戻さずに)削除するか、ファイルの50〜70行のみを表示する場合があります。

1
一般的なパターンについて少しも知らずに、vimのような大規模プロジェクトのごく一部であっても理解することは無駄になると思います。ただし、非常に小さなオープンソースプロジェクトを確認することをお勧めします。そのようなプログラムに的を絞った変更を試みることは、学ぶための素晴らしい方法だと付け加えます。利点:実際のプログラムで使用されるいくつかのパターンを学習します。欠点:同様にアンチパターンを学ぶかもしれません。
-doubleYou
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.