离线下载
PDF版 ePub版

梦里风林 · 更新于 2018-11-18 08:00:36

技术评判

如何从不可能中找到困难的部分

解决困难,识别不可能是我们的工作。大多数职业程序员认为,如果有些问题不能从一个简单系统发展而来,或者不能评估,那它就是不可能实现的。然而,根据这个定义,研究本身就是不可能的。,大量的工作是困难的,但不必然是不可能的。

这种区别是滑稽的,因为你可能经常被要求做一些事实上不可能的事情,不论是从科学观点还是从软件工程观点。然后你的工作就变成了帮助老板找到一个合理的,仅仅是困难而非不可能的解决方案,去满足他们大部分的需要。当一个解决方案可以被自信地规划且风险可以预料时,它只是困难而已。

砍掉模糊的需求是不可能的,比如“构建一个系统为任何人计算最受欢迎的发型和颜色”。如果需求可以做得更加细致,它就经常会变成仅仅是困难,比如“构建一个系统去计算某个人的发型和颜色,允许他们预览与做出改变,让顾客在原始风格的基础上满意度变大,这样我们就可以赚很多钱”。如果没有清晰的成功的定义,你就不会成功。

如何使用嵌入型语言

把一种编程语言嵌入到一个系统对程序员来讲有着几乎与性一样的魔力。这是一种最具有创造力的可以表现的行为。这使得系统惊人地强大。这也允许你锻炼大多数创造性和有生命力的能力,把系统变成你的朋友。

世界上最好的文本编辑器都有嵌入性语言。这可以被用于预计的观众可以掌握的语言的范围,语言的使用可以变为可选的,正如文本编辑器里那样,这样在一开始可以使用它,而没有其他人必须使用它。

我和许多其他的程序员曾坠入创造特殊目的的嵌入型语言的困境里。我曾经历过两次。已经存在了许多为嵌入型语言设计的语言,在创造一个新的语言前,你应该三思。

使用嵌入型语言前,真实的需要自问的问题是:这种工作与我的观众的文化是一致还是相悖?如果你的目标观众都是非程序员,这会有帮助吗?如果你的目标观众都是非程序员,他们会更喜欢 API 吗?他会是什么语言?程序员不会想要学习一种新的使用范围很窄的语言,但如果这与他们的文化混在一起了,他们将不会花太多时间去学习它。创造一种新的语言是一种快乐。但我们不应该让这遮蔽了观察用户的双眼。除非你有一些真正原始的需求与想法,为什么不使用一个已存在的语言呢?这样你就可以利用好用户对它已有的这种熟悉了。

选择语言

喜欢程序员这份工作的独立的程序员可以为任务选择最好的语言。大多数职业程序员控制不了他们将要使用的语言。通常,这个话题会由执行行政决议而非技术决议的 boss 说出,他们缺少勇气去提升新型工具,即使他们知道,大多数时候使用最新的知识,最少被接受的工具是最好的。另一些情况下,这种团体中真实的好处,以及拓展一个更大的社区的好处,排除了个人的选择。通常管理者由能够雇用在给定的语言有些经验的程序员驱动。毫无疑问他们服务于他们所追求的,以成为工程或公司的最佳乐趣,而且他们会以此被尊敬。并且,我个人相信,这种最浪费而且错误的常见行为,你很有可能遇到。

但是,当然,事物永远不会是一维的。即使一种核心语言妥协了,超出了你的控制范围,通常的情况是,工具和其他程序可以且应该由另一种不同的语言来编写。如果一种语言需要作为嵌入型的(你通常都要考虑它!),语言的选择很大程度上会依赖于使用者的文化。一个人应该利用好这个问题来为你的公司或工程服务,为任务使用最好的语言,这样可以让工作变得有趣

一门编程语言,如果学习它比学习自然语言还要难,那它真的应该被称为符号。对初学者和一些门外汉来说“学习一门新语言”像是一个令人生畏的任务,但在你掌握了三种语言后,这只是一个熟悉可用的库的简单问题。一个程序员趋向于思考一个由三四门语言组成的一个大杂烩系统,但我认为这样一个系统在很多情况下要比单一语言系统要强大,理由有以下几个方面:

  • 不同符号编写的部分间,必要的松耦合存在(虽然可能没有干净的接口)
  • 通过独立重写每个组件,你可以轻松地写出一个新的语言平台
  • 只有一门语言可能对一个庞大的系统不太适合 - 你的多个模块由多种语言组成,能让你为任务找到正确的工具。

这些效应可能有些只是心理上的,但心理上的东西也很重要。最后要说的是,语言暴政的代价超过了它能提供的所有好处。

上一篇: 评判 下一篇: 机智地妥协