云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!

所有开发人员都认为自己写的代码完全能让人看懂,然而,他们却无法解密彼此的代码(更不用说维护代码了)。

原因在于他们写的代码都是有效却草率的,看起来很干净,但实际上却很凌乱。草率代码是指就是那些可以正常运行,但因凌乱而不能很好地拓展或通用的代码。

计算机科学家与之不同——他们写的是无法正常运行的漂亮代码。

原因何在?以下的四大理由将为你揭秘。

四大理由

理由1:对于计算机科学家来说,编码是一项艺术。而对于其他人来说,编码是一种工具

计算机科学家编码是因为他们想编码,而其他人编码是因为他们想完成某件事。开发人员一般会根据自己的第一个想法来构建程序。之后,他们会以之为基础,直到最简化可实行产品出现,通常不会考虑其他方法。

而计算机科学家恰恰相反,他们会考虑实施的每一种选择,并权衡利弊。几周之后,他们会写出一段漂亮的代码,不过由于尚未确定输出格式,代码仍然无法完全正常运行。

开发人员使用简单的工具有组织地扩展代码,从而产生了大量草率代码;计算机科学家则会在一开始建立起一个结构,之后在结构中开展工作。

最有效的就是用有机方法避免编码器的阻碍并按时交付。但是,如果想要编写持久代码,则可能需要把结构放在首位。

理由2:开发人员写代码时不常考虑读者的感受

即使是在合作项目中,开发人员写代码时也往往只考虑到它的功能。实际上,代码也需要维护,不过他们经常会把这件事抛之脑后。

问题在于,这样的习惯会造成意想不到的后果。当三个月后,他们想给代码添加一个功能时,很可能会看不懂自己写的代码。这种情况经常出现,次数之多超乎想象!

其他开发人员按要求实施新功能时,则会更艰难。看懂别人写的代码可能需要几天或几周的时间,这取决于项目的大小。

理由3:即时奖励的谬论

被问题困扰了好几天,最后终于找到了解决方案,是不是感觉特别痛快?

这确实是激动人心的时刻。但问题在于,开发人员对快速修复的渴望往往会让他们忽略那些长期存在的问题。比如,他们可能解除了故障或添加了功能,但他们没有意识到代码结构已经过时了。

这意味着每添加一个新功能,他们都必须要开展更多的工作。相反,从长远来看,对程序进行一次重组会让功能的添加变得更容易。

宁愿快速修复而非解决根本问题的人不在少数。与长期的变化相比,人类的奖赏系统更容易受到短期修复的影响。但这样一来就会累积大量的技术负债。从长远来看,这会消耗人的很多精力。

理由4:风格也是一个因素

每个人的编码风格都不一样。有些人讨厌内嵌注释,有些人却很喜欢这么做。有些人在第一行代码上方添加函数注释,有些人却选择在下方添加。有些人喜欢单值判断,有些人却对此厌恶至极。

这就是为什么同一段代码对一个人来说仿佛洪水猛兽,而对另一个人来说却是小菜一碟。要是独立工作还好说,然而如今的很多软件都是通过合作构建的。因此,在项目的早期阶段确定好风格十分重要。

当然,确保所有开发人员遵守风格指南也是必须的。否则,最后产生的将是混乱代码,毕竟其中混杂着不同的约定。

干净的危害vs.凌乱的危害

一些开发人员声称自己一直在写干净代码的,他们要么是在撒谎,要么高估了自己。话虽如此,开发人员不想写过分干净代码也不是毫无理由的:

  • 有些开发人员整天都在清理代码,只是为了美观。如果是与其他人合作或者代码需要呈现,这当然很有用。但通常来说,完善代码与普通医疗保健提供的外科手术产生的效果一样——看起来不错,但没有解决深层次的问题。
  • 如果他的目标是从头开始编写非常干净的代码,那么他遭遇编码器阻碍的几率就会变大。为避免出现重大阻碍,最好从一开始就自然生成代码。初学者尤其适用。

但反过来讲,开发人员也并不想让代码过于混乱,这会让代码变得难以维护。缺少维护会导致代码腐烂,从长远来看,这样弊大于利,项目会被放弃。

因此,开发人员需要在立竿见影和可维护代码之间找到平衡。很多人都深陷混乱的困境,因此提高清洁度是必由之路。

五项技巧

养成一些良好的习惯,可能会对开发人员的清洁度和生产力大有益处。

技巧1:尽早测试,经常测试

有些开发人员对自己的技术很有信心,甚至到了不运行测试就构建整个项目的地步。但是,除非手头的任务完全微不足道的,否则会后悔的。

他们一开始编译或执行程序,屏幕上就会显示错误信息,情况可能还会更糟。几个月以后,用户发现程序无法正常运行,错误才被发现。

从事技术工作会获得如下经验:

“如果没有经过所有情况的测试,永远不要认为程序会正常运行。”

尽快构建可执行文件。只要有机会,就进行测试,一旦出现错误就可以立即进行修复。

技巧2:结构合理,格式随意

只要代码的基础结构良好,就可以进行快速修复。而现实是,开发人员常常面对的是结构凌乱或过时的代码。在这种情况下,最好花些时间重构代码。如果修复程式未正确注释或存在隐藏变量名,也没什么大不了。

但是,在错误代码中构建干净的功能完全是浪费时间和资源——开发人员可能必须要重写很多功能。

因此,保持清洁度和速度的折中方案就是保持基础结构的清洁和更新,在细节上尽可能让内容混乱。

技巧3:让代码保持干净状态

笔者称之为厕所法则。如果人们使用完的公共浴室(至少)像使用之前的一样干净,那这公共浴室的状态就堪称完美。从大多数公共厕所的状态来看,现实并非如此。维持厕所法则需要所有人遵守纪律——还需要一位优秀的管理者。

遵守这样的纪律是值得的,因为从长远来看获得的回报是巨大的。通过完成不可能的事情来实现不可能,这是天方夜谭——做出明智的决定,每天前进一一点点,不可能才会实现。

技巧4:为重构分配时间

每一次混乱都在产生技术负债。像金融一样,时间越长,产生的债务就越多。

对于普通开发人员来说,花上几天甚至几周时间清理代码听上去并不是那么美好。这就是为什么要养成每天偿还一点债务的习惯。

一开始可以每天抽出15%的时间进行重构,这是个不错的方法。笔者称之为时间规划,长此以往完善的代码数量将令人惊叹!

技巧5:要求审查

有时候,代码出现混乱是因为开发人员不知道该怎么完善。比如,某个代码可能使用了switch语句,但使用映射会容易得多。在这种情况下,高级开发人员的建议至关重要。

建立代码审查例程有助于创建反馈环路。这会帮助年轻开发人员改善学习曲线,形成健康的讨论文化。

例程是关键,这与厕所法则以及时间规划是一样的。初级开发人员应养成要求审查的习惯,而高级开发人员也应提供建议。理想情况下,审查时间应该是开发团队核心过程的一部分,每次讨论也应总结关键建议。

平衡结构与混乱

过多的清理会浪费时间和资源,编写草率代码比受到编码器阻碍而完全无法交付要好得多。但同时,草率代码不灵活且难以维护。

这五大技巧能帮助你有效清理代码同时节省时间,在混乱和结构之间找到平衡点。

快去实践一下吧!

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/zhibo

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-03-31
本文作者:读芯术
本文来自:“今日头条”,了解相关信息可以关注“今日头条”

如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

原文链接
本文为云栖社区原创内容,未经允许不得转载。

【开发者成长】每个人都在编写草率代码相关推荐

  1. 你解决的问题比你编写的代码更重要!

    软件的目的有时会被遗忘 程序员似乎忘记了软件的真正目的,那就是解决现实问题. 50年前,在1968年,由北约科学委员会主办的软件工程工作会议召开.那时,人们开始注意到软件正在成为社会的基本组成部分.然 ...

  2. 微软想让所有人都成为开发者?

    "作为一家科技公司--我们的核心目标是,如何利用这项技术,使其平民化,让更多的人都能够掌握它,以便让所有人都从技术中获益." 作者 | Mike Murphy 译者 | 苏本如,责 ...

  3. L1-015 跟奥巴马一起画方块 (15分) 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥

    美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014年底,为庆祝"计算机科学教育周"正式启动,奥巴马编写了很简单的计算机代 ...

  4. 你到国外去旅游,那里的人都讲英语,虽然你的英语不怎么好,但你会编程,请编写一段程序,利用文件“dict.txt”,把英文单词译成中文,帮助与人沟通。

    1.你到国外去旅游,那里的人都讲英语,虽然你的英语不怎么好,但你会编程,请编写一段程序,利用文件"dict.txt",把英文单词译成中文,帮助与人沟通. 文件dict.txt是一个 ...

  5. 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正

    美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014年底,为庆祝"计算机科学教育周"正式启动,奥巴马编写了很简单的计算机代 ...

  6. JavaScript权威Douglas Crockford:代码阅读和每个人都该学的编程

    作者:Peter Seibel 关于JavaScript Seibel:在程序学习之路上有哪些令你后悔的事情? Crockford:我了解一些语言,但却一直没有机会使用.我花了不少时间学习APL并了解 ...

  7. NB!技术人都在关注的公众号~

    封面来自网络 提升自我的路很多,学习是其中最为捷径的一条.丰富的知识提升的不仅仅是你的阅历,更能彰显你的气质,正如古人云:"文质彬彬是君子." 今天为大家整理了9个公众号,分别为多 ...

  8. python语言发明者 google_谷歌的语言何以战胜Python?50%的人都应该立即学习Golang...

    全文共2623字,预计学习时长9分钟 图源:dailybtc 很多软件工程师视Python为最喜爱的语言之一,工作生活都和它死死绑定在一起.但Google, Uber, Dropbox, Soundc ...

  9. 月薪3W的人都在用的报表工具,Excel和python自叹:比不过

    众所周知,一到月末.月初或月中时,各职能部门.各管理会议.各管理决策等都在为报表绞尽脑汁.加班加点和操心操劳. 事实上绝大多数中小企业所使用的国外ERP软件,比如QAD Mfg/Pro, Exact, ...

最新文章

  1. AT24C0X I2C通信原理
  2. python需要编译器吗_是否需要“使用严格”的Python编译器?
  3. 【网上收藏】取得网卡mac
  4. ICCV 2019 | 华科提出对称限制的校正网络,显著改进场景文本识别
  5. Google Maps Android API v2 (2)- 地图对象
  6. 【剑指offer】最小的K个数
  7. YAF label getcookie() php加密函数 自己调用任意模板
  8. 矩阵的java程序怎么编写_如何编写Java程序以添加两个矩阵
  9. 关于Microsoft Edge主页被360劫持
  10. JS数组常用方法整理(14种常用方法)
  11. Nginx+Tomcat实现负载均衡、动静分离集群部署
  12. vue路由传参的三种方式/含页面刷新参数丢失解决方案(详细)
  13. git撤销commit
  14. 知识点滴 - 如何下载其他地区的iOS App
  15. 方法调用机制内存分析★
  16. 跟小静读CLR via C#(06)- 构造器
  17. lync服务器不响应或无法联系,Lync 2013 已知问题
  18. Windows7旗舰版 “宽带连接错误711”的根本原因及彻底解决方法
  19. 【手机下载Linux】
  20. elementui下拉选择框

热门文章

  1. bisect git 使用_Git使用过程中的一些常见场景问题总结
  2. python以运行效率高著称吗_提升Python程序运行效率的6个方法
  3. 计算机几何学论坛,现代几何学与计算机科学-中国计算机学会.pdf
  4. python ui自动化测试框架_Python自动化测试框架
  5. c语言 静态变量 初始化,c – 静态变量初始化两次
  6. mysql带参数的sql_MySql存储过程是带参数的存储过程(动态执行SQL语句)
  7. php按数字分页类,PHP简单实现数字分页功能示例
  8. 哈尔滨工程大学迎来80后副校长
  9. 真涨工资了:多所高校博士生资助标准大幅度提升
  10. 爱因斯坦谈教育,放在首位的该是什么?