几个月前,有一位演讲者来到公司谈论优美的代码,他的论点是优美的代码以许多不同的形式出现。简单中有优美,折衷中有优美,稳定性上有优美,功能上有优美,坚固性上有优美等。您可能无法在每段代码中找到所有这些内容,但是通过学习每件事,您可以在着手编写新代码或查看他人的作品时,请牢记越来越多的内容。
-
好的代码有点主观。您可以学习一些好的做法,但是即使有好的做法,也无法理解为什么某些事物是这样的,只能根据具体情况分配好/美丽/坏/丑等字眼。在公司查看代码需要一些业务环境。
-
一种方法是阅读别人的代码,并尝试找出可以从中汲取哪些好主意,发现哪些丑陋的事物,分析为什么某些事物运行良好而其他事物运行不佳,以及如果您处于其中,则如何改进它们鞋子。有很多关于良好做法和需要注意或避免的东西(难闻的气味)的书。但是,没有什么是一成不变的。
-
与“知名”程序员一起进行代码审阅(其中“知名”是作者或审稿人)。我们强调“坐在”部分。这很耗时(如果您在一小时内不讲太多代码,不要感到惊讶),但是当坐在同一个房间里看着相同的屏幕时,作者和审阅者都可以学到很多有关用例,标准习语,样式,测试用例,设计等。诸如“为什么不使用...编写该功能”或“应该将这一种方法分解为两种方法之类的问题”引发了评论中的对话。比仅阅读良好的代码更有价值。
-
熟练使用标准API /库。
-
找到好的Java代码的另一个地方是核心库集。(例如,位于http://openjdk.java.net/groups/core-libs/的Java Collections和其他核心库)
Java的标准库中有一些好的设计思想,但是也有很多非常糟糕的设计思想。例如,在Collections API中,我相信具有add和remove引发异常的方法UnsupportedOperationException是一个非常糟糕的主意。因此,与其仅仅阅读核心库并接受那里的一切都是“好的”,还不如与学习伙伴或小组一起学习,并对设计进行讨论。
- 许多“良好编码”实践都是通用概念,几乎适用于每种语言。例如,“好的设计”和“简单”(*)与编程语言无关。您可以在Perl中编写非常漂亮,设计良好且易读的代码,而在Java中则编写糟糕的代码。当然,有一些特定于语言的构造仅适用于某些语言(对于Java / C ++ / ML / SmallTalk,请考虑OO;对于功能语言,请考虑使用Lisp)。即使这样,一个好的设计也至少可以借鉴一些概念。例如,您可以将Unix设备驱动程序模型和VFS模型视为基本的OO方法。
- 成为一个更好的程序员主要是一种社交活动。与其他聪明人讨论/推理您感兴趣的代码时,您将获得最大收益。参与开源是一个好方法。也许这听起来很愚蠢,但是我建议您找到一个非常活跃的Java IRC频道。(IRC是一种用于聊天的老式Internet协议,至今仍广泛用于开源软件开发人员和其他事物)。您可以从编程渠道中学到很多有关最佳实践和大量其他有用信息的知识。您还可以遇到很多在大型知名公司工作的人。这是巨大的社会资源。
- 成为一名优秀的程序员的另外50%正在积累大量知识。您不必记住东西,但是您必须知道在哪里可以找到它们。如果您从事许多不同的项目,最终您将只是顺便听说了该领域的每个主要软件产品,并且可能对它们的API和设计决策有所了解。如果您想成为一名出色的Java程序员,那么也可以学习许多其他编程语言。它可以帮助您以新的方式思考事物,并实现您原本不会想到的事物。
- 全面学习一种语言。超级超级好。了解所有有趣的小事情,以及为什么要这样做。找到该语言的标准文档(如果有的话),然后阅读。如果您想挑战自己,请尝试理解C ++的全部语义。如果您习惯以这种高精度和高知识的方式学习事物,那么您最终会为那些(例如)自称精通C ++之类的语言而又不了解其所有基本含义的人感到惊讶操作员;-)许多人不像他们认为的那样了解语言(包括我自己)。不要因为他们认为这并不重要而让他们不愿珍惜某些知识。
最后再提一个要点:“写代码”。不要仅仅依靠阅读有关做某事的事情,要编写很多代码。
网友评论