2011-02-16 134 views
11

好了,香港专业教育学院在Delphi现在已经被编程为3 - 4年,并认为自己是一个中间层次的应用设计师的概念有正确的理解。但是我如何变得更好?我刚在看一对夫妇我经常(virtualtreeview,asynccalls)使用组件的来源,并在那里的代码只是树桩我。是的,我可以理解它的一部分,但其他的东西只是在我头上。德尔福 - 如何提高

那么,是提高我的编程abililty最好的资源?书籍,博客或其他信息来源?

+0

这个问题是“主观的和无法回答的”。 – 2011-02-16 01:38:23

+4

也许是这样,但我认为这将是有用的信息,不仅帮助我自己而且帮助其他人。 – Simon 2011-02-16 02:52:48

+0

这很有用,但不能客观回答。投票结束并转移到程序员SO,在这些主观问题属于。 – 2011-02-16 08:07:14

回答

11

编程技巧就像肌肉;改善它们的最好方法就是锻炼它们。如果你想学习成为一个更好的编码人员,那么你需要完成一个比以前更艰苦的项目。想出一个你想写的东西的想法,但不知道该怎么做,并开始写作。一旦你对你不理解的概念,跑起来,研究他们,你会不断地添加新的概念和技能,以您的剧目。

-2

virtualtreeview的代码是可怕的。别担心。

为了获得在面向对象编程真的很不错,你可能想尝试的Smalltalk一段时间。对于完全不同的东西,请添加Seaside Web框架。

[编辑]有几个原因,寻找到海边是一个好主意。这是对像HTML,CSS和JavaScript的暴行创造卓越的抽象,使得由此可以做web开发以合理的方式的一个很好的例子。它展示了如何创建流畅的界面,以及如何使用它们来提高效率。

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

Virtualtreeview另一方面包括严重的结构化代码的巨大量的。没有抽象,方法太长,数据结构不好。它具有的唯一优点是它被广泛使用,所以如果你继续使用那些使用得很好的零件,你不太可能遇到错误。

[EDIT2]而你舒服Smalltalk和海边后,尝试宝石,一个面向对象的数据库运行它。这将向您展示数据库应该如何(不可见),并让您从此之后反对关系数据库。

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等多种系统),持续集成和其他专业级技术。

3

如果你想弄清楚那些不是你自己的代码,你必须先从脏兮兮的开始。将您想要了解的代码部分分解为“最小”程序,并逐行进行调试。大多数情况下,这会告诉你在低层次上发生了什么。有时候,只有这样才能让你明白你的需要。

但是当你被代码构造工作的难以理解的时候,然后输入违规行的部分到Google的答案。这通常会引导您阅读博客文章或讨论类似代码的文章,以解释这些概念以及代码的工作原理。

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

如果我不能找出其他方法,我来到StackOverflow,这是一个很棒的资源,从Delphi知识渊博,经验丰富的Delphi程序员的Delphi信息。如果这是你的东西,作为一个已经中级的程序员无法解决的问题,那么它可能会在这里提出一个很好的问题,你会在短时间内得到一些很好的答案,我肯定会帮助你理解和学习。

10

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

  • 挑选一个你不明白一个或两个项目,并重新实现它们。从你的问题中,尝试编写你自己的树(或列表)组件,并尝试编写一个简单的线程框架,在这个框架中你可以派遣工作并在某个特定时间恢复工作。这些是你提到的两个项目的简化版本。

    作为程序员,你边干边学。没有多少理论能够弥补解决问题的经验。当你解决这两个问题时,Virtual TreeviewAsyncCalls的作者会遇到一些相同的问题。 (如果你遇到困难,请在这里提问!)你不仅会学到他们学到的东西,而且你可能会回来重读他们的代码并理解他们正在做的一些事情。

    不要因为你有工作实现周围的概念(原始项目)和复制代码而感到试探 - 随时看看它的灵感,但不要复制它。自己写。

    请记住,Mike Lischke和Andreas Hausladen都非常聪明。如果工作很辛苦,不要气馁。许多程序员去他们的整个职业生涯只能够胜任(因为它听起来你)不推自己去尝试或学习更难的事(所以如果你不介意我这么说的话,对你有好处的问这个问题!)

一对夫妇的其他想法:

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

    例如,C++是伟大的使用RAIItemplate metaprogramming(这比什么德尔福的模板,让更强大的),颇有些令人惊奇的事情在各种额外的库如boost,并搬起石头砸自己的脚:)一个功能语言将彻底改变你的想法(我必须承认在这里有点虚伪:我已经接触到他们,但不知道'我自己',我想。)Objective C可能会有所不同采取什么面向对象的方式(它和C++都是面向对象的基于C语言,但非常不同)。你明白了。

  • 查看这些特定项目:此页面上的一个答案建议逐行检查它。我发现要理解我以前没有用过的代码,这可能是压倒性的。我曾经在Embarcadero工作人员的博客上看过一些建议,使用profiler,因为它会给你一个很好的高级视图(a)程序的所有类/方法/部分和(b)哪些是最常用的,可能最重要的部分,以及它们如何结合在一起。我不能赞扬这个建议,但我认为这是很好的建议。我建议使用AQTime

    因为这个原因我找到了'find Foo,study the source'这样的答案,无益:你是一个编码员,当然你会看到源代码! 如何查看来源,这是一个更有趣的问题。

  • 最后,如果你已经到了“查看几个[项目]的源头并且代码在那里只是树桩[你]”,或者如果你做了以上的一些操作,不明白的东西,在这里问!

[*]脚注:我不主张不 知道基本的理论,只是 ,有一个知识/信心 你这样做你自己,非常必要的东西 得到。

4

的最佳方式(对我来说),以了解代码是如何工作,我不能看着单独的代码遵循的是获取下来,脏,观察有问题的代码。放下多个断点并在代码运行时开始跟踪代码。

您越是这样做,您越能够从后续跟随代码的能力提高。

此外,你还没有那么做,我会强烈通过以下本书的建议读:

设计模式:可复用面向对象软件的基础(ISBN 0-201-63361-2 )

写于1994年,它是今天仍然是相关的,因为它是当时(如果不是更多)。

它最重要的是,它教你识别代码特定的模式,给你一个词汇来形容整个代码段做,只是一个单一的术语。

在模型中,您可以深入了解一些复杂的代码片段以及它如何交互,您不再需要保留所有细节,而是可以在您的脑海中构建更高层次的抽象将自己的代码描述为基于特定设计模式的功能块的交互。

这自然假设有问题的代码被设计得很好。有时候,一些代码简直是一团糟,可能会使意大利面条嫉妒,并且无法遵守和理解代码并不是你的失败,而是编写代码的人。

2

编程很复杂。

典型RAD应用程序具有与在事件处理程序代码的形式,数据模块使用查询,而不是一个单一的类。

你可以写几百个应用程序一样,学习无非就是如何使用各种组件和它们的属性和事件等。

这是德尔福的主要问题,它很容易和自然做的事情错了。 RAD = BAD。 不幸的是,大概90%的应用程序都是这样写的。

那么这种方法有什么问题?它缺少任何架构。为什么那么糟糕? 它不会变化。当您的需求发生变化时,您将不得不进行比正确设计的应用程序更多的更改。

现在人们普遍认为应用程序应该被分层结构化。

层的典型的分离是

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

随着分离干净商业层可以具有的Win32 GUI,Web GUI中,移动设备图形用户界面...

干净分离的持久层,你可以哈相同的业务和GUI层从Interbase转换到Postgress。

写测试也容易得多。

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

当你让你的应用程序设计良好,具有这些层设置,你得到它的工作,你兴奋地展示给你的同事,他们会给你一个奇怪的表情,说:嗯,我刚落,这个查询在表单上执行,看起来是一样的。但你会更清楚。

我不同意学习另一种语言的建议。也就是说,恕我直言,只是绕过这个问题。正确组织和构建您的应用程序的技能是语言不可知的。任何真正的面向对象语言都是足够的,所以在这一点上不需要学习另一种语言。

我也不认为看VirtualTreeView或类似的控制源会教你很多。您将了解到Winapi,但尽管有用,但这不会有助于应用程序设计。因此,总结一下,google了解关于应用程序设计,业务对象,体系结构,OPF,模式和测试的资源。

0

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

不断磨练你对基础知识的掌握的一种方法是通过练习和重复。一个有趣的方法就是所谓的code kata,它从武术中获得灵感。

这个概念本身是语言不可知的,而且我非常喜欢TDD。 Julian Bucknall好像也是粉丝。有些人甚至record their katas。快速谷歌搜索变成了很多不同的参考。

0

如果您作为团队的一员工作,请使用Code Collaborator或ReviewBoard等工具参与同行代码审查。您不仅可以从别人那里学习,也可以从代码中学习他们的意见,但是您会对自己的工作产生批判性看法,并且会很快开始更好地编写代码。