都已经 2020 年了,但我们仍然在生产劣质软件。自从计算机诞生以来,已经过去了近 70 年,但我们似乎还没有吸取所有的教训,仍然在犯着重复的错误。
科技行业的变化日新月异,或许今天看起来有意义的事情五年后就失去了其意义。我认为,这正是软件的一个迷人之处,因为它的可塑性很强。但是有一件事是不变的,那就是劣质软件带来的糟糕体验,我们似乎短期内无法克服它。
现在,开源生态系统中的优秀软件多如牛毛,以至于人们误以为劣等软件已经成为过去。其实不然,尽管开源软件在过去十年里呈现出爆炸式增长趋势,但这其中依然混迹着不少非常糟糕的软件,我每天都在“深受其害”。
编写优秀的软件的确很难,但这不能成为产出劣质软件的借口。你每天都在使用优秀的软件,所以应该知道如何来编写优秀的软件。优秀的软件总是“润物细无声”,在你没有察觉时就已完成了工作,而糟糕的软件会把你逼向崩溃边缘。但是,通常情况下,你不会看到或使用到特别多的糟糕软件,因为我们日常生活中使用的大多数软件都是消费软件,糟糕的软件无法在消费市场生存,但糟糕的软件确实存在,这是不争的事实。
据我所知,糟糕的软件在企业生态系统中普遍存在。最主要的原因有以下几点:
糟糕的软件是缺乏思考和错误决策的结果。每一行代码都很重要,每一个接触软件的人都会对其产生影响,甚至每一个决策都会影响软件的设计走向。如果你不编写单元测试,而是利用编写单元测试的时间来进行一些新特性的开发,那么这时系统中的 Bug 就会无孔不入,这种目光短浅又无知的决定是对几十年来积攒的经验智慧的一种亵渎。
软件不只是一个冰冷的机械,它也有情感。你可能会问为什么?因为它是工程师的逻辑和情感状态的精确体现,工程师开发软件时并不是只有一种情绪,软件是在工程师的多种情绪和状态下编写而成的,或难过、或开心、或高兴、或生气、或激动、或厌烦、或充满斗志,抑或沮丧憋闷,软件既能反映工程师的情绪,还能反映出工作场所的文化氛围。糟糕的企业文化几乎总是会产生糟糕的软件,这是显而易见的,因为大多数组织在规模变大后却因为糟糕的企业文化而最终衰败。
糟糕的软件会陷入恶性循环。技术债务不断堆积,会议越来越多,完成的工作却越来越少。会议上净是些陈词滥调的方法和管理实践,却没有人懂。糟糕软件就像癌症,大多数时候在最后阶段才显现出来,它会带来非常严重的后果,它也会降低工作效率,让人失去动力。软件工程是一项充满创造性的工作,但糟糕的软件会把工程变成维护工作。花在 Bug 修复上的时间比花在为改善终端用户体验上的时间要多。公司内部的一些问题开始渗透进来。虽然糟糕的软件是源于失败的团队,但是没有人承担责任,大家开始相互指责,在此情况下很容易滋生腐败,最终让员工备受煎熬。简而言之,糟糕的软件就是糟糕的企业文化的缩影。
Bug 是软件工程中不可避免的存在,但是如果 Bug 一直存在下去,那就是危险的信号,它会产生连锁反应。由于没有动力和缺少奖励,情况会变得更糟,在一切以交付为首要目标的情况下,鲜有人会对软件进行改进或在其中增加新的特性。它变成了一个没人敢碰的、失控的烂摊子,后患无穷。
如何将糟糕的软件变成优秀的软件?这是个棘手的问题。我虽然不是专家,但我也愿意在这里与读者分享我的观点。首先,它变得如此糟糕,很大程度上说明了该组织的文化也出现了严重问题。改变文化比改变代码要难得多。文化是一个组织的支柱,即使有望改善它,也要面临很大的阻力,因为已经投入的资源是一个更大的问题,预防胜于治疗。
关于这个主题的文章不多。也许这个行业发展得太快了,以至于人们都来不及进行反思,或者与其把精力浪费在写作上,不如去解决其他紧迫的问题。总有更多的东西被发明,更多的问题等待着我们去解决,更多的工具要开发,但投入一点时间反思将有助于整个行业的发展。
一个系统可以维持5年,10年,甚至20年以上,但是代码和设计模式的生命周期非常短,当对一个解决方案使用不同的方法进行迭代的时候,通常只能维持数月,数日,甚至几分钟的时间
良好的编程习惯涉及到很多方面,但在软件行业内,大多数的公司或组织都不会把良好的编程习惯列为主要关注点。 例如,具有可读性和可维护性的代码比编写好的测试代码或使用正确的工具更有意义,前者的意义在于可以让代码更易于理解和修改。
减少嵌套会让代码可读性更好,同时也能更容易的找出bug,开发人员可以更快的迭代,程序也会越来越稳定。简化代码,让编程更轻松!
Google为了那些还不熟悉代码规范的人发布了一个JS代码规范。其中列出了编写简洁易懂的代码所应该做的最佳实践。代码规范并不是一种编写正确JavaScript代码的规则,而是为了保持源代码编写模式一致的一种选择。
程序员似乎忘记了软件的真正目的,那就是解决现实问题。您编写的代码的目的是为了创造价值并使现有世界变得更美好,而不是满足您对自我世界应该是什么的以自我为中心的观点。有人说:如果你拥有的只是一把锤子,那么一切看起来都像钉子一样
TinyMCE是一个轻量级的基于浏览器的所见即所得编辑器,由JavaScript写成。它对IE6+和Firefox1.5+都有着非常良好的支持。功能方强大,并且功能配置灵活简单。另一特点是加载速度非常快的。
函数式编程对应的是命令式编程, 函数式编程的核心当然是对函数的运用. 而高阶函数(Higher-order)是实现函数式编程的基本要素。高阶函数可以将其他函数作为参数或者返回结果。所以JS天生就支持函数式编程
朋友发表了一条说说:入职新公司,从重构代码到放弃”,我就问他怎么了?他说,刚进一家新公司,接手代码太烂,领导让我先熟悉业务逻辑,然后去修复之前项目中遗留的bug,实在不行就重构
页面实现关键词高亮显示:在项目期间遇到一个需求,就是搜索关键词时需要高亮显示,主要通过正则匹配来实现页面关键词高亮显示。在搜索结果中高亮显示关键词:有一组关键词数组,在数组中筛选出符合关键字的内容并将关键字高亮
软件工程学什么? 学计算机,写程序,做软件,当程序员。听说学计算机很辛苦? 是的,IT行业加班现象严重。在计算机世界里,技术日新月异,自学能力是程序员最重要的能力之一。选了这个专业,就要时刻保持好奇心和技术嗅觉,不能只满足于完成课内作业。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!