德尔福 - 我如何改进

时间:2011-02-16 00:32:43

标签: delphi language-concepts

好的,所以我已经在Delphi中编程了3到3年了,并认为自己是一个对概念有充分理解的中级应用程序设计师。但我怎样才能变得更好?我一直在寻找我经常使用的几个组件的来源(virtualtreeview,asynccalls),那里的代码只是让我感到困惑。是的,我可以理解它的一部分,但其他事情就在我的头上。

那么提高编程能力的最佳资源在哪里?书籍,博客或其他信息来源?

10 个答案:

答案 0 :(得分:11)

编程技巧就像肌肉;改善它们的最好方法是锻炼它们。如果你想学习成为一个更好的程序员,那就做一个比以前更难的项目。想出一个你想写的东西的想法,但不知道该怎么做,并开始写作。一旦你遇到了你不理解的概念,研究它们,你最终会为你的曲目添加新的概念和技能。

答案 1 :(得分:10)

理解使用您不熟悉的概念的代码很难。我的建议:

  • 选择一个或两个您不理解的项目,然后重新实施。根据您的问题,尝试编写自己的树(或列表)组件,并尝试编写一个简单的线程框架,您可以在其中调度作业并在某个时刻恢复其工作。这些是您提到的两个项目的简化版本。

    作为程序员,您从实践中学习。没有多少理论可以弥补解决和解决问题的经验。 [*]

    当你解决这两个问题时,你会遇到Virtual TreeviewAsyncCalls的作者所遇到的一些相同的问题。 (如果你遇到麻烦,请在这里问问!)你不仅会学到他们所学到的东西,而且你可能会回来重新阅读他们的代码并理解他们正在做的一些事情。

    不要被你对周围概念(原始项目)和复制代码的工作实现这一事实所诱惑 - 随意查看它的灵感,但不要复制它。自己写吧。

    请记住,Mike Lischke和Andreas Hausladen都是非常聪明的人。如果努力工作,请不要灰心。许多程序员只是在他们整个职业生涯中都很有能力(听起来就是这样)而没有让自己去尝试或者更难学习(所以如果你不介意我这么说,那么你就可以提出这个问题了!)

其他一些想法:

  • 了解其他语言。德尔福很棒,但你会用一种语言“思考”,所以如果你学好另一种语言,你就会接触到其他概念或思维方式,或者做同样事情的不同方式。这真的打开了你的想法。

    例如,C ++非常适合使用RAIItemplate metaprogramming(这比Delphi的模板允许的更强大),在{{3}等各种额外的库中有一些相当惊人的东西。一个功能性的语言会彻底改变你的想法(我不得不承认在这里有点虚伪:我已经接触过他们,但我不知道'我自己。我想要。)boost可能对于面向对象意味着什么不同(它和C ++都是面向对象的基于C的语言,但却非常不同。)你明白了。

  • 查看这些特定项目:此页面上的一个答案建议逐行进行。我发现要理解我之前没用过的代码,这可能是压倒性的。我曾经在Embarcadero工作人员的博客上阅读了使用分析器的一些建议,因为它将为您提供(a)程序的所有类/方法/部分的良好高级视图和( b)哪些是最常用的,可能是最重要的部分,以及它们如何挂钩在一起。我不能赞同这个建议,但我认为这是一个很好的建议。我建议使用Objective C

    正是由于这个原因,我找到了像'找到Foo,研究来源'这样的答案:你是一名编码员,当然你会看看源代码! 如何查看来源,这是一个更有趣的问题。

  • 最后,如果你到了“你正在寻找几个[项目]的来源并且那里的代码只是残留[你]”或者如果你做了以上某些事情的那一点并且不明白的东西,请在这里询问!

  

[*]脚注:我不是在鼓吹   只知道基础理论   有知识/信心   你自己做的事情   这是至关重要的。

答案 2 :(得分:7)

您必须阅读Steve Trefethen中的这些文章:

提供了Delphi中优秀开发人员应该处理的主题的精彩摘要

答案 3 :(得分:4)

如果您:

,我认为您的delphi能力会增长很多
  1. 学习构建组件。阅读Ray Konopka关于Custom delphi Components的book或他的EDN article.

  2. 研究JEDI JVCL和JEDI JCL来源。作为信息来源,Jedi API库和JWSCL也很有价值。 MSDN文档(Microsoft)也是非常宝贵的,作为您需要与之交互的各种Windows子系统的平台文档源。

  3. 获取Marco Cantu巨型Mastering Delphi书籍,或Texeira和Pacheco的Delphi开发人员指南。

  4. 了解测试驱动开发,单元测试,版本控制(学习几个系统,如Subversion,Git,Mercurial等),持续集成和其他专业级技术。

答案 4 :(得分:4)

最好的方法(对我来说)理解代码是如何工作的,我单独查看代码就无法遵循这种方法,就是潦倒并观察相关代码。放下一些断点,并在代码运行时开始跟踪代码。

您执行此操作的次数越多,您稍后关注代码的能力就越高。

此外,您还没有这样做,我强烈建议您阅读以下一本书:

设计模式:可重用面向对象软件的元素(ISBN 0-201-63361-2)

写于1994年,它仍然与当时的情况一样重要(如果不是更多)。

重要的是它教会你识别代码中的某些模式,并为你提供一个词汇表来描述代码的整个部分只用一个术语来完成。

在模型中,您构建了一些复杂的代码片段以及它们如何交互的内容,您不再需要保留所有细微的细节,而是可以在您描述的内容中构建更高级别的抽象代码作为基于某些设计模式的功能块的交互。

这自然会假设有问题的代码设计得很好。有时一些代码完全是混乱,可能会使意大利面嫉妒,并且你无法跟踪和理解代码不是你的失败,而是编写代码的人。

答案 5 :(得分:3)

如果你想找出不属于你的代码,你必须从头开始肮脏。将您想要理解的代码部分分解为“最小”程序,并逐行调试。大多数情况下,这会告诉你低水平发生了什么。有时候,仅凭这一点就能为您提供所需的理解。

但是当你对代码构造的工作方式感到困惑时,请将部分违规行输入Google以获得答案。这通常会引导您访问讨论类似代码的博客文章或文章,这些代码解释了概念以及代码的工作原理。

有时我会去Google Code Search并选择要搜索的Pascal / Delphi语言。我发现这里的代码提供了不同的视角,并且经常有评论和其他有助于理解这些想法的信息。

如果我无法通过其他方式解决这个问题,我来到StackOverflow,这是一个非常有经验的Delphi程序员熟悉Delphi信息的资源。如果它是你的东西,作为一个已经很中级的程序员无法弄清楚,那么它可能会在这里提出一个非常好的问题,你会得到一些很好的答案,我会肯定会帮助你理解和学习

答案 6 :(得分:2)

编程很复杂。

典型的RAD应用程序的表单包含事件处理程序中的代码,带有查询的数据模块,而不是单个类。

您可以编写数百个这样的应用程序,除了如何使用各种组件及其属性和事件外,我们只学习。

这是Delphi的主要问题,以错误的方式做事容易且自然。 RAD =坏。 可悲的是,大概有90%的应用都是这样写的。

这种方法有什么问题?它缺少任何架构。为什么那么糟糕? 它没有变化抗性。当您的需求发生变化时,您需要进行更多更改,而不是使用设计合理的应用程序。

现在已经很好地接受了应用程序应该构建成层。

层的典型分离是

  • 业务对象/规则
  • 数据映射/持久性
  • GUI

通过完全分离的业务层,您可以拥有Win32 GUI,Web GUI,移动设备GUI ......

使用干净分离的持久层,您可以拥有相同的业务和GUI层,但从Interbase切换到Postgress。

编写测试也更容易。

现在让我来警告你,这是一条漫长而艰难的道路。掌握需要数年时间,你永远不会完全完成。

如果你的应用程序设计得很好并且设置了这些图层,并且你可以让它工作,并且你兴奋地向同事展示它们,它们会给你一个奇怪的表情然后说:好吧我只是放弃这个查询表单,执行和它看起来一样。但你会更清楚。

我不同意学习另一种语言的建议。也就是说,恕我直言,只是绕过了这个问题。正确组织和构建应用程序的技能与语言无关。任何真正的OO语言就足够了,所以此时不​​需要学习另一种语言。

我也不认为查看VirtualTreeView或类似控件的来源会教你很多。您将了解Winapi,但虽然有用,但这对应用程序设计没有帮助。

总而言之,谷歌了解有关应用程序设计,业务对象,架构,OPF,模式和测试的资源。

答案 7 :(得分:0)

我不确定你的问题有一个简单的答案。

不断磨练你对基本原理的一种方法是通过练习和重复。实现这一目标的一个有趣方式是所谓的code kata,它从武术中获得灵感。

概念本身与语言无关,我非常重视TDD。 Julian Bucknall似乎也是粉丝。有些人甚至record their katas。快速谷歌搜索会提供许多不同的参考资料。

答案 8 :(得分:0)

如果您是团队的一员,请使用Code Collaborator或ReviewBoard等工具参与同行代码审核。您不仅可以向他人学习以及他们对您的代码的评论,而且您将对自己的工作形成批判性的眼光,并且可以更快地开始编码。

答案 9 :(得分:-2)

virtualtreeview的代码非常糟糕。别担心。

要真正擅长面向对象编程,您可能需要尝试Smalltalk一段时间。对于完全不同的内容,请添加Seaside Web框架。

[edit]为什么选择Seaside是一个好主意有几个原因。它是在html,css和javascript之类的暴行中创建优秀抽象的一个主要示例,从而可以以合理的方式进行Web开发。它展示了如何创建流畅的界面以及如何使用它们提高效率。

经过20年的Turbo Pascal和Delphi,我的编码风格通过Smalltalk的使用得到了显着改善。应该早点找到它。

另一方面,Virtualtreeview包含大量结构严重的代码。没有抽象,方法太长,数据结构不好。它唯一的优点是它被广泛使用,所以如果你留在使用良好的部分,你就不太可能遇到错误。

[edit2]在您熟悉Smalltalk和Seaside之后,尝试在Gemstone(一个面向对象的数据库)上运行它。这将向您展示数据库应该如何(不可见),并使您在以后对争论关系数据库。