应用程序开发可以成为您业务的关键因素,而可促进开发出市场主导的移动端应用程序的奇才或只是能编写正确的定制代码来使业务发展起来的奇才,这些人都非常值得公司进行投入。但事实是,我们的开发人员并不总是这样直率,并且有一些想要保守的秘密。
事实上,我们没有告诉你事情的全部,这都是可以理解的。毕竟,你是老板。难道你会把所有事情都告诉老板吗?如果您是***执行官,您是否会在董事会上就每个决定说出自己的想法?所以当我们这样做的时候你别这么吃惊。
有时候你知道的越少越好。您不需要知道我们隐藏Java更新的目录。只要备份进行了加密,您也不必关心其密码。如果我们没有征得每个利益相关者的批准就更换使用不同的工具,你可能并不会生气。
但其他事情可能会有所影响。其他一些情况或许只会影响公司的命运和我们的薪水。所以这里有9件事情进行披露,我们并没有告诉你,是因为这会使企业产生困扰。
1. 我们的工作思路并没有你们认为的那么多
开发人员都很聪明,并且我们中的一些人简直就是天才。但是,我们确实有一种倾向,让人觉得我们知道有关这些1和0的所有事情,这有时让我们感觉有些过头。
当然,我们掌握编程整个流程的基础知识。我们可以编写一个循环或向数据库发送查询。即使我们***次遇到某一种语言、代码库或开发工具,这些基础知识也可以让我们将工作向前推进,但是你很少询问我们的基础知识。您希望我们修复一个流程中的功能,如果我们知道该流程中涉及的所有代码实际的位置,那我们或许会很幸运。当我们找到代码的位置,再进行修复,这可能会变得很容易或者也很难。直到我们将代码下载,重新写几行代码,并执行一下,才能真正知道结果。这不只是工作范围的扩大,也打乱了你的时间表。有时在开始阶段,我们无法估计涉及的实际工作量。
但是在会议上谁想说“我不知道”呢?谁想告诉老板他们对如何开始工作或使用何种工具最适合毫无头绪呢?所以我们凭空进行了估计或制定了解决方案,并且希望我们是正确的。如果我们不正确,我们必须给出一些聪明合理的解释,如“磁通电容器过载”,并且着手去做我们最不喜欢的工作,即阅读手册。
2. 你的技术债比你想象的要大很多
在开发现有应用程序时,管理层会做出一个选择:催促开发团队想出对策,或者要求他们对整个堆栈进行重新设计。快速应对策略通常是不错的,似乎成本较低。通过快速应对策略,您可以立即解决问题,我们会尽力满足您的需求,大多数情况下我们都喜欢这样做。
但随着时间的推移,各种修修补补的地方逐渐累积。一些聪明的开发人员创造了一个词叫“技术债”,以涵盖那些本应该完成的全部实际工作,但是由于决策延迟而使用了临时性补救措施。
当然,这不是一个准确的术语。你不需要偿还债务。如果你很幸运的话,你可以始终保持软件的运行,而无需重新修改所有内容。但最终,一些重大事件的发生将会打破一切,并且不能轻易地进行修复。通常这些事件会涉及一个合作密切的业务伙伴,他们通过一些软件包最终升级到***版本,而突然我们的代码无法运行。突然间一切都崩溃了,我们的代码不再与我们的合作伙伴进行交互。有时候,我们的合作伙伴将对我们感到遗憾,并继续运行他们旧的通道,但这种情况只有在我们可以给合作伙伴带来收入时才可行。如果我们只是一个不创造价值或一个小账户,那么合作伙伴将会跟我们说再见了,这就是我们的工作。
3. 我们感到无聊,只是做一些无聊简单的工作
一个企业***的问题是拥有聪明的开发人员,他们知道代码的全部问题,但并没有兴趣为此做任何事情。在修复故障或做一个功能改进上,这样的开发人员可能会比那些聪明但不了解代码库的年轻员工快10倍。有无数的原因令我们感到无聊,有时代码是用几年前就过时的旧语言编写的,有时是我们忘记最初辛辛苦苦编写的代码,有时是将表格加宽一些或者背景更蓝一些,这样的简单工作,我们都想要一个新挑战。
一次又一次辛苦地钻研着相同的代码,对这种无聊束手无策。让开发人员在***和***的框架中重写代码会减轻这种无聊。正如艾兹拉·庞德(Ezra Pound)所说,诗人的工作就是让它重新变成新东西。也许这是管理者的工作。如果你们想让我们留下来继续工作,或许至少应该这样做。
4. 我们痴迷于自己的代码
你看到过我使用indexOf函数的巧妙方法了吗?只需一行代码,但它可以完全解析cookie字符串。如果你再给我几天时间,我可以用这个聪明的方法来解决更大的问题。
我们喜欢用我们自己特有的方式来编程。我们已经习惯于舒适状态,我们喜欢一次又一次地使用相同的语句。你知道这个笑话,当你去见外科医生时,每一种疾病都需要做手术切除,而每一项任务看起来像木匠带着一把锤子来处理一个钉子?这就像我们一样,但是我们自己拥有特别的语言角。函数语言?面向对象代码?汇编代码?我们已经选择了我们的语言,我们已经准备好实施我们喜欢的解决方案,无论该方案对公司是否有意义。
在***的日子里,这不是问题。优秀的开发人员不要让他们特定的选择变成教条。通常我们拥有很好品味,可以欣赏一个不错的点子。我们应该足够地灵活,并能认识到许多编程技术几乎是可以互换的。我们也应该足够聪明,认识到没有***的解决方案,每一个优秀的功能或很棒的方法都有缺点。
但在最糟糕的日子里,我们已经做好进行内战的准备了。我们中的太多人将那些做出不同选择的开发人员妖魔化,并进行诋毁。管理者需要谨慎处理此事,但这可能令人为难。当程序员随便地做出严厉的批评时,很难弄清楚这只是一种不同的技术,还是“脑子出问题”的技术。而当您不知道开发人员是否重新工作,或是对其工作固执己见时,可能很难为该业务做出***决策。
5. 我们痴迷于这个月的时髦东西
你看到在Slashdot上新的开源项目吗?你看过在InfoWorld上的这篇文章了吗?我们绝对需要下载那个代码,编译并将其集成到我们的堆栈中。这将使我们的软件运行得快很多,也会出问题。这比上个月写信告诉你的那个聪明的新想法好多了。昨天就这样,上周也是这样,这是实打实的。
进步是科技产业的重要组成部分。通常情况下,这是好事,会使设备运转越来越好。这一切您只需登上时光机器回到过去,就能了解科技进步了多少。
但是开发人员经常把这个做得更夸张。我们喜欢新点子和更好的代码,像一个新车主喜欢那些很棒的配置。谷歌公司命名其浏览器为“Chrome”并不是巧合。
控制这种本能是一项挑战。如果只是为了改进的话,你不想经常说“不”,因为我们的这种痴迷经常是基于一些实际的需要。但是,如果我们追逐每一个新的想法,那么我们都将无法把握什么是最适合我们的业务。或者更糟的是,我们会将一部分业务置于危险境地。
6. 我们经常太懒惰而不想推进业务发展
比起追逐每一个新想法,唯一一件更糟的事情是不追逐任何一个新想法。有太多开发人员变得如此愤世嫉俗,他们不会尝试改进任何事情或研究可以产生重大业务成果的新工具。
是的,这个月的时髦东西很快就会被取代。是的,通常这只是几年前的一个旧东西翻新一下,做了一些小的改进。是的,我们得到的代码运行顺利。是的,因为它是新的和有所改进的东西,我们就用其他东西替换现在运行良好的东西,这是很愚蠢的。但是,如果我们经常忽略发展进步,我们终究有一天会意识到我们已经落后了很远。
我们经常以自豪和过于专注于某些技术细节来掩饰这种懒惰。你知道Multics是***的操作系统,比Windows更安全吗?或者Solaris是Unix系统中***的版本?如果不是Mac用户只是喜欢点击图标,或许真正成功的是加州大学伯克利分校软件(BSD),而不是Apple的那个古怪的系统。我们知道我们初次尝试做的东西还是***的。
这种懒惰是“非我发明”的一个近似的表达,往往会拖慢发展进度。互联网上有很多聪明人,但不知何故,所有精彩的想法都来自于不太聪明的人。如果我们自己没有想到,那就不值得做。
对抗这种懒惰的方法是使偶尔有野心的开发人员专注于其中。即使采用一些新技术的规划,也没有太多的商业意义或没有希望真正改变任何东西,但这会让办公室内的所有人兴奋起来,这就可以了。让大家兴奋一点,毕竟,这种事情,可以使公司在机器学习、物联网互联网或其他方面取得成功。
7. 我们宁愿来创造新东西,也不愿做维护工作
我见过***的团队之一,每一年都会重写他们的应用程序。他们花了头三个月从头开始重写了所有程序。然后他们海边度假,到9月他们正在计划明年的重写工作。
他们为自己的代码深感自豪,他们的代码是精心设计且模块化的,通常是用“正确的方式”进行编写。他们对工作的自豪感也体现在代码中。代码并不是随意拼凑在一起,而是实实在在的工作成果。
但是这种方法在时间、金钱和情感能量上都付出昂贵的代价。团队的规模大于只是从事漏洞修复及维护的团队。他们始终在思考哪些东西可以进行改进,哪些会变得昂贵而导致无法持续。无论我们怎么说,有时***的方式是,创建堆栈并选择一小部分开发人员来进行维护,将其余人员转移到新团队从事新项目。
8. 不是每个应用程序都需要重写
我们中的一些人喜欢以“正确的方式”重新设计和重建一些东西,我们没有这样做。我们通常在只能通过完全重写才能解决故障时,才会这样做。有时候我们100%没有故障。
但是,只是因为它很好,但并不意味着它有商业意义。如果30岁的帕斯卡尔或科波尔正在做这项工作,为什么会搞砸呢?新功能是否增加了很多重要内容?更糟糕的是,没有什么东西是存在于真空中。修复了X就会破坏到Y和Z,因为他们依赖于X。这些又将引发A、B、C和D中的小错误,这就像一个连锁反应,造成好心没好报。
有时进步会使情况变得更糟。我记得有一位经理向那些挑剔的、痴迷于术语的程序员们做出让步后非常生气,这些程序员坚持认为现在是时候替换几十年前在绿色屏幕上显示大写字母的大型机代码了。新代码与******的开放源代码库兼容。二进制代码比旧版本代码好上1000倍,然而却速度慢了10倍。我听了一位工程师对速度变慢的解释,因为新的应用程序“做了更多工作”。而更多的是,他的意思是在彩色背景上生成了TrueType字体。
9. 我们不了解商业案例
我们可能对数据库、协议和新的编程语言非常精通,但是我们大多数人对普通人为什么会这样做并不太了解。这意味着制定一个让客户满意和进行消费的策略,我们不是***人选。我们可以维护数据库正常运转,但我们不知道如何能留住顾客。
一个明智的选择是利用大数据和有效的衡量指标。这些大数据和指标会将交易归结为数字,而数字是我们所能理解的。大数据和人工智能的真正好处是,它创建了一个语言框架,所以在一线工作的商务人士可以与后台开发人员进行沟通。
不要害怕对这些指标进行扩大。原始销售数字是显而易见的。寻找一下诸如品牌参与度和品牌认知度等方面的衡量指标。这些指标并不总是***无缺,但可以帮助我们了解产品外观和情感联系的重要性。