11

さて、私はDelphiで3〜4年間プログラミングを行っており、自分自身を概念を十分に理解している中級レベルのアプリケーション設計者だと考えています。しかし、どうすれば良くなりますか?私はよく使用するいくつかのコンポーネント(virtualtreeview、asynccalls)のソースを調べていましたが、そこにあるコードは私を困惑させます。はい、私はそれの一部を理解することができます、しかし他のものはちょうど私の頭の上に行きます。

では、プログラミング能力を向上させるための最良のリソースはどこにありますか?本、ブログ、またはその他の情報源?

4

10 に答える 10

11

プログラミングスキルは筋肉のようなものです。それらを改善するための最良の方法は、それらを行使することです。より優れたコーダーになることを学びたい場合は、以前よりも難しいプロジェクトに取り組んでください。書きたいもののアイデアを思いついたが、どうしたらいいかわからないので、書き始めてください。理解できない概念に出くわしたら、それらを調べてください。そうすれば、新しい概念やスキルをレパートリーに追加することになります。

于 2011-02-16T01:10:58.157 に答える
10

なじみのない概念を使用するコードを理解するのは困難です。私のアドバイス:

  • 理解できないプロジェクトを1つか2つ選び、それらを再実装します。質問から、独自のツリー(またはリスト)コンポーネントを作成してみてください。また、ジョブをディスパッチして特定の時点で作業を取り戻すことができる単純なスレッドフレームワークを作成してみてください。これらは、あなたが言及した2つのプロジェクトの簡略化されたバージョンです。

    プログラマーとして、あなたはを行うことによって学びます。問題に取り組み、解決した経験を補う理論はありません。[*]

    これらの両方の問題に取り組むと、 VirtualTreeviewAsyncCallsの作成者が行ったのと同じ問題のいくつかに遭遇します。(問題が発生した場合は、SOでここに質問してください!)彼らが学んだのと同じことを学ぶだけでなく、おそらく戻って彼らのコードを読み直し、彼らがしていることのいくつかを理解するでしょう。

    (元のプロジェクト)の周りの概念の実装が機能しているという事実に惑わされないでください。コードをコピーしてください。インスピレーションを得るために自由に見てください。ただし、コピーしないでください。自分で書いてください。

    MikeLischkeとAndreasHausladenはどちらも非常に賢い人であることを忘れないでください。大変な作業でもがっかりしないでください。多くのプログラマーは、(あなたがそうであるように)有能であるだけで、もっと難しいことを試みたり学んだりすることなく、キャリア全体を進んでいます(したがって、私がそう言っても構わないのであれば、質問をするのは良いことです!)

他のいくつかのアイデア:

  • 別の言語を学ぶ。Delphiは素晴らしいですが、あなたはある言語で「考える」ので、別の言語を上手に学ぶと、他の概念や考え方、または同じことを行うさまざまな方法に触れることになります。これは本当にあなたの心を開きます。

    たとえば、C ++は、RAIIテンプレートメタプログラミング(これはDelphiのテンプレートで許可されているものよりも強力です)、ブーストなどのさまざまな追加ライブラリの非常に驚くべき機能の使用に最適です。あなたの考え方を完全に変えてください(そして私はここで少し偽善的であることを認めなければなりません:私はそれらにさらされましたが、私自身は何も知りません。私は知りたいです。) 目的Cは別の見方に適しているかもしれませんオブジェクト指向の意味(itとC ++はどちらもオブジェクト指向のCベースの言語ですが、非常に異なります)。

  • それらの特定のプロジェクトを見るために:このページの1つの答えはそれを行ごとに調べることを勧めました。これが圧倒される前に、私が使用したことのないコードを理解することがわかりました。私はかつてEmbarcaderoのスタッフのブログで、プロファイラーを使用するためのアドバイスを読んだことがあります。プロファイラーを使用すると、(a)プログラムのすべてのクラス/メソッド/パーツ、および(b)最も一般的なものの概要がわかりやすくなります。使用された、そしておそらく最も重要な部品、そしてそれがどのように一緒にフックするか。私はその提案を信用することはできませんが、それは良いアドバイスだと思います。AQTimeの使用をお勧めします。

    このため、「Fooを見つけて、ソースを調べてください」のような答えは役に立ちません。あなたはコーダーです。もちろん、ソースを確認します。 ソースをどのように見るか、それはもっと興味深い質問です。

  • 最後に、「いくつかの[プロジェクト]のソースを見ていて、そこにあるコードが[あなた]を切り刻んでいる」ところまで来た場合、または上記のいくつかを実行して何かを理解していない場合、SOでここに聞いてください!

[*]脚注:私は、根底にある理論を知らないことを主張しているのではなく、本質的なことを自分で行うことによって得られる知識/自信があるというだけです。

于 2011-02-16T03:32:03.567 に答える
7

あなたはスティーブTrefethenからこれらの記事を読む必要があります:

Delphiの優れた開発者が処理する必要のあるトピックの優れた要約を提供します

  

于 2011-02-16T03:57:42.577 に答える
4

次の場合、デルファイの能力が大幅に向上すると思います。

  1. コンポーネントの構築方法を学びます。カスタムデルファイコンポーネントに関するレイコノプカの本、または彼のEDN記事を読んでください。

  2. JEDIJVCLおよびJEDIJCLソースを調べてください。Jedi APIライブラリとJWSCLも、情報源として価値があります。対話する必要のあるさまざまなWindowsサブシステムのプラットフォームドキュメントのソースとして、MSDNドキュメント(Microsoft)も非常に貴重です。

  3. MarcoCantuの巨大なMasteringDelphiの本、またはTexeiraとPachecoのDelphi開発者ガイドのコピーを入手してください。

  4. テスト駆動開発、単体テスト、バージョン管理(Subversion、Git、Mercurialなどのいくつかのシステムを学ぶ)、継続的インテグレーション、およびその他のプロフェッショナルグレードの手法について学びます。

于 2011-02-16T01:34:10.483 に答える
4

(私にとって)コードがどのように機能するかを理解するための最良の方法は、コードだけを見ても理解できないことですが、降りて汚れて、問題のコードを観察することです。いくつかのブレークポイントを下に置き、実行中にコードのトレースを開始します。

これを実行すればするほど、後でコードを見るだけでコードを追跡する能力が向上します。

また、まだ読んでいないので、次の本を一読することを強くお勧めします。

デザインパターン:再利用可能なオブジェクト指向ソフトウェアの要素(ISBN 0-201-63361-2)

1994年に書かれたもので、今日でも当時と同じように関連性があります(それ以上ではないにしても)。

それについての重要なことは、コード内の特定のパターンを認識することを教え、コードのセクション全体が1つの用語で何をするかを説明する語彙を提供することです。

複雑なコードの機能とその相互作用について頭の中で構築するモデルでは、細部をすべて保持する必要がなくなり、代わりに、コードを記述した場所でより高いレベルの抽象化を頭の中で構築できます。特定のデザインパターンに基づく機能ブロックの相互作用としての自分自身。

これは当然、問題のコードが適切に設計されていることを前提としています。時々、いくつかのコードは単にスパゲッティを嫉妬させる可能性のある完全に混乱していて、コードをフォローして理解することができないのはあなたの失敗ではなく、コードを書いた人の失敗です。

于 2011-02-16T04:38:14.320 に答える
3

自分のものではないコードを理解したい場合は、最初から始めて、降りて汚くする必要があります。理解したいコードの部分を「最小限の」プログラムに分割し、1行ずつデバッグします。ほとんどの場合、それは低レベルで何が起こっているかを教えてくれます。時にはそれだけであなたが必要とする理解を得るでしょう。

しかし、コード構成がどのように機能するかに困惑した場合は、問題のある行の一部をGoogleに入力して回答を求めてください。これにより、概念とコードの動作を説明する同様のコードについて説明しているブログ投稿や記事にたどり着くことがよくあります。

時々私はグーグルコード検索に行き、検索するためにパスカル/デルファイ言語を選択します。ここのコードは別の視点を与えており、アイデアを理解するのに役立つコメントやその他の情報が含まれていることがよくあります。

他の方法で理解できない場合は、StackOverflowにアクセスします。これは、非常に知識が豊富で経験豊富なDelphiプログラマーからのDelphi情報の素晴らしいリソースです。すでに中級のプログラマーが理解できないものであれば、おそらくここSOでかなり良い質問をするでしょう、そしてあなたはあなたの理解と学習に役立つと確信している短い順序でいくつかの優れた答えを返すでしょう。

于 2011-02-16T02:31:57.217 に答える
2

プログラミングは複雑です。

一般的なRADアプリケーションには、イベントハンドラー内のコードを含むフォーム、クエリを含むデータモジュールがあり、単一のクラスはありません。

そのようなアプリを何百も作成して、さまざまなコンポーネントとそのプロパティおよびイベントの使用方法以外は何も学ぶことができません。

これがDelphiの主な問題であり、間違った方法で物事を行うのは簡単で自然なことです。RAD=悪い。悲しいことに、おそらくアプリケーションの90%はそのように書かれています。

では、このアプローチの何が問題になっていますか?アーキテクチャが欠けています。なぜそれが悪いのですか?耐変化性はありません。要件が変更された場合は、適切に設計されたアプリを使用する場合よりも多くの変更を加える必要があります。

アプリケーションをレイヤーに構造化する必要があることは、今では広く受け入れられています。

層の典型的な分離は

  • ビジネスオブジェクト/ルール
  • データマッピング/永続性
  • GUI

明確に分離されたビジネスレイヤーを使用すると、Win32 GUI、Web GUI、モバイルデバイスGUIを使用できます...

明確に分離された永続性レイヤーを使用すると、同じビジネスレイヤーとGUIレイヤーを使用しながら、たとえばInterbaseからPostgressに切り替えることができます。

また、テストを作成する方がはるかに簡単です。

さて、今すぐ警告させてください。これは長くて難しい道です。習得するには何年もかかり、完全に完了することは決してありません。

アプリを適切に設計し、これらのレイヤーを設定して機能させ、同僚に興奮して見せると、奇妙な外観になり、次のように表示されます。フォームにこのクエリをドロップするだけです。実行すると同じように見えます。しかし、あなたはもっとよく知っているでしょう。

私は他の言語を学ぶための提案に同意しません。つまり、私見では、問題を回避するだけです。アプリケーションを適切に編成および構造化するスキルは、言語に依存しません。真のオブジェクト指向言語であれば十分なので、この時点で別の言語を学ぶ必要はありません。

また、VirtualTreeViewまたは同様のコントロールのソースを見てもあまり教えられないと思います。Winapiについて学ぶことはできますが、それは便利ですが、アプリケーションの設計には役立ちません。

要約すると、アプリケーションの設計、ビジネスオブジェクト、アーキテクチャ、OPF、パターン、およびテストに関するリソースをグーグルで検索します。

于 2011-02-16T13:23:10.980 に答える
0

あなたの質問に対する簡単な答えがあるかどうかはわかりません。

ファンダメンタルズの理解を絶えず磨く1つの方法は、練習と繰り返しです。これを達成するための興味深い方法の1つは、武道からインスピレーションを得た、 いわゆるコードカタです。

コンセプト自体は言語に依存せず、TDDに重点が置かれています。これは私が気に入っています。 ジュリアン・バックナルもファンのようです。型を録音する人もいます。グーグルですばやく検索すると、さまざまな参照が見つかります。

于 2011-02-16T16:07:39.960 に答える
0

チームの一員として作業している場合は、Code CollaboratorやReviewBoardなどのツールを使用して、ピアコードレビューに参加してください。あなたは他の人やあなたのコードに対する彼らのコメントから学ぶだけでなく、あなた自身の仕事の批判的な目を開発し、すぐにコーディングをより良く始めるでしょう。

于 2012-04-30T02:19:08.240 に答える
-2

virtualtreeviewのコードはひどいです。心配しないでください。

オブジェクト指向プログラミングを本当に上手にするには、しばらくの間Smalltalkを試してみることをお勧めします。また、まったく異なるものについては、SeasideWebフレームワークを追加してください。

[編集]シーサイドを調べるのが良い考えである理由はいくつかあります。これは、html、css、javascriptなどの残虐行為に対して優れた抽象化を作成する好例であり、これにより、合理的な方法でWeb開発を行うことが可能になります。流暢なインターフェースを作成する方法と、それらを使用して生産性を大幅に向上させる方法を示します。

Turbo PascalとDelphiを20年間使用した後、Smalltalkを使用することでコーディングスタイルが大幅に向上しました。早く見つけたはずです。

一方、Virtualtreeviewは、大量の不適切に構造化されたコードで構成されています。抽象化なし、メソッドが長すぎる、データ構造が悪い。唯一の利点は、広く使用されていることです。そのため、よく使用されるパーツを使用し続ければ、バグに遭遇する可能性は低くなります。

[edit2]そして、SmalltalkとSeasideに慣れたら、オブジェクト指向データベースであるGemstoneで実行してみてください。これにより、データベースがどのように(見えないように)あるべきかがわかり、その後、リレーショナルデータベースに反対するようになります。

于 2011-02-16T01:01:43.223 に答える