没有人对Java开发人员“竭尽全力”改变世界的速度感到满意。每个人都希望代码像消防水带里的水一样流出来,但没有人愿意为开发人员提供更好的条件来完成工作。就像老板昨天想让我们把工作做完一样,他不愿意再雇人,买更快的机器,或者做任何其他能让Java程序员专注于编程的事情,想马上跑,但是不喂马。这是现实世界中的15个编程障碍。对会议最常见的抱怨是打断了开发人员的编码思路。如果老板信任程序员,他们会被要求去那间光线昏暗的会议室数周或数年,时不时地八卦一下细节。虽然程序员通常会责怪经理破坏会议,但他们偶尔会责怪其他程序员不断提出有关错误、功能或架构策略的问题。虽然有些抱怨很愚蠢——如果他们的老板让他们在没有一点沟通的情况下在黑暗中摸索,程序员仍然会抱怨——让他们把头埋在抽象的软件世界中,独自面对各种困境。快餐厨师和咖啡师或许能够兼顾不同的需求,但通常需要时间将他们的大脑切换到正确的模式来运行抽象算法。从会议模式切换回编码模式可能会浪费一个小时左右的工作时间。回复所有电子邮件如果会议很糟糕,那么这次会议可能更糟:需要检查收到的没完没了的电子邮件。回复电子邮件需要时间,而且没有人对结果满意。那么最没有耐心的开发者可能会选择简单的回复——“tl;dr”(即太长,没看。太长,没看)。一些团体正试图创建每周一次的禁令日。其他团队根本不使用电子邮件。在解决电子邮件超载问题的同时,它是以牺牲沟通为代价的。如果突然不一起工作。这是个好主意吗?试图衡量生产力的管理团队总是会受到书中所说的“你无法管理你无法衡量的东西”的启发,并开始衡量提交或代码库或软件代码行或错误修复。他们认为计数就是测量,测量一定是一件好事。但是程序员不是瓦工,数不清砌了多少块砖就知道自己的效率。相反,为了写出更好的代码,程序员要么专注于编写的代码行,要么解决bug,要么提交代码库,要么做一些数不清的事情。如果错误修复值得加分,那么小错误的报告就会激增,错误修复也是如此。有人因报告错误而获得奖励,然后其他人因修复错误而获得奖励。或者,如果计算代码行数,可以用10行代码解决问题的程序员可能会说5,000行代码会更灵活或功能兼容——任何可以添加到5,000行的代码。添加它。衡量效率实际上会使您的代码库变得更糟,因为它鼓励使用过度设计的代码来编写冗长的、功能丰富的文件。此问题没有真正的解决方法。我们需要跟踪错误。我们需要组织工作流程并协调软件的创建。这种优雅是无法估量的。狂妄自大的开发人员对于程序员来说,没有比创建代码的最后一次迭代并不再从事该项目的老板更能容忍的同事了。就像每个家装承包商都贬低最后一个木匠的技能一样,每个程序员都会迅速指出上一代人可怕的、不可原谅的、完全没有脑子的行为。当然,这可能是真的,但它很少像程序员所说的那样糟糕。如果有的话,问题通常也不是由于缺乏技能。主要区别在于风格,风格会随着时间而改变。上一代与我们今天访问的图书馆不同。他们也没有阅读有关***实践的最佳书籍。自我重要的编程态度往往会减慢项目的速度。骄傲和利己主义的混合发酵可能导致程序员丢弃完美的代码,以便以他们认为的“正确方式”重建它。“稍后修复”的心态,又名“技术债务”我们总是觉得我们没有足够的时间按照计划在项目中构建我们想要构建的东西。所以我们偷工减料,修补代码,并将其包裹在虚拟磁带中。一位明智的经理曾将此称为“技术债务”,因为“债务”必须在以后偿还。即使他们不懂代码,他们也知道“债务”是什么意思。每个项目都有一定数量的技术债务。有时它会很快得到回报,但通常直到下一代才意识到它已成为一个陷阱。他们需要构建上一代没有的东西。就像滚雪球一样,越滚越大。非程序员经理总会有那些笑容满面、身材匀称的非计算机专业、不懂编程项目的人成为经理。也许他们娶了老板的女儿;也许他们只是碰巧在“正确”的时间出现在“正确”的地方。但是老板让他们成为经理,尽管他们对此一无所知。更糟糕的是,他们通过外行人的眼光看待事物,即使它们是难以描述和无关紧要的。一些程序员欢迎这样的管理者,因为他们很容易被愚弄。他们还承受着来自上级管理层的炮火。但它也承认,这些人只是不断开会,这只会妨碍编程。他们几乎不能提供任何有用的指导,他们所能提供的只是一点质量检查。程序员经理虽然程序员可能会抱怨不得不与非程序员经理打交道,但他们经常窃窃私语说程序员做经理会更糟——有时甚至更糟。他们以前是天才,可能会决定对项目进行微观管理,然后果断地删除大块代码,因为他们有了新的前景。或者,也许他们八卦说他们是如何用8080汇编或C或Java编程为同一件事编写一半代码的。无论如何,他们更着迷于技术细节而不是大局,尽管他们受雇关注后者。善于交际的程序员,又名“brogrammer”虽然程序员可以将每个问题和任何中断归咎于说话流畅的销售团队,但程序员也必须承认一些问题出在他们自己身上。雇用程序员是因为他们的计算机技能,而不是他们的人际交往能力。程序员通常不善于沟通,不懂得表达自己的感受和想法。他们能够准确把握技术参数,就像一头丁洁牛游刃有余。客户想要更改什么并不重要:程序员总是在考虑技术参数,即使是在公司野餐时也是如此。虽然程序员经常可以过滤掉彼此的特质,但当程序员彼此偶然发现时,它也会让团队失望。当同一个团队中的两个人有不同的政治观点时,比如动态语言或NoSQL,那么团队永远不会平静。一切犹如战场,战火熊熊,硝烟弥漫。自私或牛仔程序员你在他的代码中发现了一个空指针?捕获空指针就成了你的工作。你最好三思而后行传递一个零,因为自私的程序员不会检查被零除的错误。它也成为你的工作。牛仔程序员有一份又酷又快的工作,但那是因为他的代码在其中留下了很多漏洞并且没有经过测试。所以这也是你的工作,因为如果你不处理这些琐事,代码就会出错。当许多团队最终意识到这一点时,为时已晚。代码块在早期测试中运行良好,但当输入真实数据时,各种问题开始浮出水面。这悲剧。糟糕的文档编写文档需要时间。但是因为老板招我们来写代码,而且通常以我们写的代码行数来衡量我们的效率。所以既然你要结果,我们就做你想做的。当然最后还是会写文档,只是质量有好有坏。有时,文档虽然内容广泛,但却是几个月或几年前的旧代码版本。我们只是没有时间修改这些旧文档,但是,将来我们会同步-相信我。成为文档的奴隶虽然我们都经历过没有文档的项目,但项目因过多的废话和过少的编码而失败的情况并不少见。几个人已经指着一个放满文件夹的书架向我吹嘘:“我特地请了人写文件。”但是,看那么多文件,需要一年的时间。程序员通常在处理需求时写注释和注释,这些注释和注释后来用作文档。因此,此类文件都是细枝末节,没有仔细总结或没有提到要点。这在文档中可能是致命的,因为他们只是编写代码日志而没有提供太多的抽象和理解。这样的文档没有启发性,只是代码的翻译。一个容易导致分心的环境我有一个客户坚持要我每天去他们的办公室,并坚持要我使用他们的电脑。然后,他们没有提供任何办公场地,我只能在一个会议室和六个实习生一起写代码,实习生还要求我花半天时间回答他们前一天晚上的问题。一天的另一半时间用于指示今晚做什么。结果,我基本上无法完成我的工作。虽然销售和营销团队可以在背景噪音的环境中茁壮成长,但程序员通常需要安静的图书馆。闲聊、令人分心的敲门声或铃声会将程序员的思绪从抽象的工作空间中带回现实。然后,花几分钟时间让自己重新沉浸在工作区中。一位开发人员告诉我,他讨厌他的新办公桌,因为它的声音大得令人难以置信,以至于它就在空调通风口旁边,这让他很难集中注意力。这可能有点夸张,但这是事实。许多企业在为程序员提供乒乓球桌娱乐的同时,往往忘记了开发者需要能够在安静的氛围中集中精力。他们甚至把程序员搬到一个大房间里,认为这样可以促进协作,结果一有任何麻烦的迹象就会扰乱整个房间的程序员。“文化契合”您想拥有自己的办公室吗?还是您更喜欢可以大声说出问题的团队办公室?你喜欢一大早就开始工作,还是喜欢熬夜?风格相似。然后团队往往会更好地工作。找不到共同点的团队很快就会失败。没有交流,性只会适得其反,不知其意何在。坚持传统技术许多捍卫者认为,古老的技术仍然很棒,仍然可以完成工作。所以对于为什么要重写代码有很多疑问。他们是对的,但他们忘记了维护这些古老代码的成本。通常都需要使用自定义代码进行翻译。有些代码甚至是在ASCII之前编写的,这意味着转换输入和输出。旧系统通常会计算空白字符,只是为了在数据库中指示它是什么。这需要更多的转换。当然,程序员可以通过抓屏、重新格式化、临时搭建系统等方式做很多工作,但过一段时间后,他们往往需要花费更多的工作来清理混乱的逻辑,以至于没有时间去写新的.逻辑。对创新的渴望最新的工具自然很有趣,但如果没有大量时间对过去的工作进行重新编码,它是不会被开发工作室采用的。那些走在时代前面的人,总会把整个API部分扔掉重写,逼着我们下游的程序员跟着重写代码。当我不得不将Python2.7代码与Python3.0代码进行斗争时,我感到很恼火,因为就目前而言,Python已经是一个相对稳定的代码库。在许多情况下,新工具并没有受到打击。例如,Node.js虽然速度相当快,但只有当您重新学习所有关于死锁的课程并知道线程优先时,它才会起作用。天下没有免费的午餐,工具再好,也是有代价的。
