如何编写软件程序 怎样编写简单的代码


如何编写软件程序 怎样编写简单的代码


有一句广为流传的话:代码是写给人看的,而不是为了给机器执行 。然而,编写人类易于阅读的代码,这说起来容易做起来难 。这件事需要花费几年时间去学习,花费几十年才能掌握 。我也许可以提供一个捷径:像一名教育者一样思考代码质量 。
“捷径”这个词表达的能力很强大 。这并不是一个捷径 。但我认为,这种观点很重要 。Alan Kay说过,观点抵得上 80 点智商 。
了解你的受众
Rails
在工作中,我们使用 Rails、Node 和 Vue 。主应用程序是用 Rails 写的,前端的一部分是用 Vue 写的,然后我们还用 Node 编写了一些 lambda 函数 。在理想世界中,Rails 人员写 Rails,Node 人员写 Node,Vue 人员写 Vue,但实际情况并非如此 。实际上,我们会遇到这样的情况:Node 和 Vue 人员不得不阅读或编写 Rails 代码 。
委婉地说,Rails 是一个古怪的框架,会发生很多奇怪的事情,约定大于配置 。例如,如果你看到如下代码:
# app/controllers/api/foo/bar/baz_controller.rb def show end
复制代码
Rails 会自动在app/views/api/foo/bar/baz内部寻找show.html.erb或show.jbuilder来作为响应 。但如果你不是一个 Rails 开发者…你不会知道这些!你所看到的只是一个空方法,它似乎什么也没做!更重要的是,你没办法搞明白 。答案不是隐藏在一些父类或 mixin 中,而是藏在这种部落知识的书中 。
我不确定这个 controller actions 的示例是不是一个好例子 。实际上,这是你很快就能学会的,或者你团队中的某人可以马上发现并帮助你的 。但是在其他一些情况下,你可以用 Rails 做一些古怪的事情,而只有那些正好掌握这些部落知识的人能够理解 。
当你在一个拥有经验丰富的 Rails 专家的团队工作中时,这不是个问题 。事实上,这些古怪的东西能够帮助 Rails 专家变得更高效 。但是,如果你工作在一个对 Rails 都是新手的团队中时,这些菜鸟绝对会陷入绝望和沮丧中 。
这就是需要像一名教育者一样思考的地方 。假设你是一名教授 。如果你站在一小群博士面前,举办一个高度专业化、集中化的研讨会,你可以使用花哨的术语等而不用担心这些术语超出观众的认知 。但是…如果你发现自己站在一座演讲厅中面对一群本科生,那么,使用这些术语就不是一个明智的选择 。
对于 Rails 也是这样 。问题不在于某样东西是“最佳实践”还是“Rails 编程方式”,而是在于它对你的受众是否有意义 。
Angular
我过去犯过这个错误 。在以前的一家公司,我们使用 Rails、Angular 和 Python 。我是那个“使用 Angular 的家伙” 。团队的其他人大部分都是 Rails 人员 。
我对于自己对 directives 的使用感到少许得意 。但我的上司叫我停止使用这些东西,坚持使用正常的 controllers 。他甚至提到,他的理由是因为这是大部分软件开发人员如果进入一个代码库期待看到的编程方式 。
当时,我认为很明显,他错了 。我看到的 Anguar 专家撰写的所有视频和书籍,都告诉我这些是最佳实践 。他们都是专家,而且他们看起来比我的上司更了解 Angular,所以我认为我应该相信这些专家而不是我的上司 。至少我是这么想的 。
ELI5
在《函数式编程为什么重要》一书中,Eric Normand谈到了一个有关游戏树的程序 。他说,在大学里,他用一堆for循环写过一个类似的程序 。然后,他谈到了一篇论文作者采取的方法:
他的解决方案,当然更简洁,是…非常简洁 。非常简洁 。我也不知道我能不能读懂它 。

推荐阅读