选自medium

作者:Daniel Anderson
机器之心编译
编辑:陈萍

在代码中用一堆嵌套,花大量时间写出漂亮的代码但最后才发现无法运行,不给任务留缓冲时间…… 这是很多新手程序员都踩过的雷。在这篇文章中,一位全栈首席开发者总结了高级开发人员的 19 个编码原则,可以帮助新手少踩些坑。

进行软件开发,整天敲代码、好不容易调试成功,但是代码的质量堪忧,可读性不是很高,反过头来还得对代码进行完善。也许这不是你的编码能力问题,很有可能在你进行代码编写时,一些看似不重要的编码注意事项没有遵守。这有一份高级开发人员经常遵循的 19 条原则,其中很多与实际编码无关,而是与流程以及如何处理任务有关,可能对你有帮助。

1. Rule Of Three 原则

这是一条代码重构的经验法则,用于决定何时将复制的代码段替换为新的代码 / 过程 / 方法。

它的含义是,第一次用到某个功能时,你写一个特定的解决方法;第二次又用到的时候,你拷贝上一次的代码;第三次出现的时候,你要着手「抽象化」,写出通用的解决方法。

该原则的主要思想是使代码 / 过程 / 方法更加通用,从而保证在其他地方可以重复使用。

2. 应用程序结构与编码方式保持一致

应用程序结构与编码方式保持一致有助于提高其可读性和可维护性。

尝试制定编码标准,这有助于保持编码一致性。编码标准应该与变量的命名规则一样少。另一大问题是应用程序的结构,开发人员进行更改或添加新内容的地方应该很明显。

3. 减少程序嵌套

if 里面嵌套 if 会使得程序很混乱,代码很难读。在编写代码时可能无法绕开这些问题,但你需要经常查看代码结构。

else if 同样如此,因此需要尽量避免嵌套。

一种有效的解决方法是卫语句:卫语句把复杂的条件表达式拆分成多个条件表达式。

不使用卫语句的编码方式:

if (account != null)
{if (order != null){if (order.term == Term.Annually){// term annually}else if (order.term == Term.Monthly){// term monthly}else{throw new InvalidEnumArgumentException(nameof(term));}}else{throw new ArgumentNullException(nameof(subscription));}
}

使用卫语句的编码方式:

if (account == null)
{throw new ArgumentNullException(nameof(account));
}
if (order == null)
{throw new ArgumentNullException(nameof(order));
}
if (order.term == Term.Annually)
{// term annually (return here)
}
if (order.term == Term.Monthly)
{// term monthly (return here)
}
throw new InvalidEnumArgumentException(nameof(order.term));

4. 了解全局很重要

了解全局有助处理较小的细节。一旦了解了全局,你就不会花很长的时间在小细节上。

5. 程序中的命名

在编程中进行命名是最困难的事情之一,包括为一个类、一个方法命名,甚至是为变量命名。优秀的开发人员会花时间考虑相关的命名方式,这样会增加程序的可读性。

6. 减少技术负债

技术负债指开发人员为了加速软件开发,在应该采用最佳方案时进行了妥协,改用了短期内能加速软件开发的方案,从而在未来给自己带来的额外开发负担。这种技术上的选择就像一笔债务一样,虽然眼前看起来可以得到好处,但必须在未来偿还。软件工程师必须付出额外的时间和精力持续修复之前的妥协所造成的问题及副作用,或是进行重构,把架构改善为最佳实现方式。

对于技术负债问题,提高预估时间有助于解决这类问题。尽自己最大的努力写好代码,否则你将不断地进行代码完善。

7. 提高预估时间

你会看到,高级开发人员总是给任务预留更多的时间,因为他们知道完成任务所需的时间总是高于预期,而且在评估阶段增加一个缓冲时间可以真正帮助你把事情做好。

这确实有助于解决技术负债问题。如果你低估了任务完成时间,你就可能会因为时间不够而写出仅仅可以运行的代码,简洁性、可维护性就顾不上了。

8. 文档和代码注释

文档和代码注释有助于保存上下文和共享知识。你会听到有经验的人一直在说,我们是否可以记录这个过程,或者代码审查失败,因为对接口之类的内容没有任何注释。

9. 删除不需要的代码

许多缺乏自信的开发人员会注释掉大量的代码块,而不是选择删除。但是代码版本控制是有目的的!优秀的开发人员会删除应用程序中不好的代码。

10. 花时间进行代码评审

优秀的开发人员会花更多的时间在代码评审上,代码评审的重要性包括:

  • 更早地发现错误;

  • 提高开发人员的技能,并让团队的其他成员参与到良好的实践中;

  • 共享知识;

  • 一致的设计和实现。

最好的代码评审过程是:

对于一个风险较小的任务,1 名开发人员评审就可以;

中型 / 大型更改或者是有风险的更改,应由 3 名开发人员进行评审,其中须有一位是高级开发人员;

风险极高的更改或者是正在开发的应用程序的新部分,应该安排一次会议,3 名开发人员中至少有一位是首席开发人员,他们一起完成每条线并提出观点。

11. 编写好的测试

你会注意到经验丰富、能力更强的开发人员花更多的时间编写好的测试。拥有好的测试可以帮助你更有信心地扩展应用程序,并减少错误。

12. 花时间设计程序

在真正投入写代码之前,开发者会经过一番思考并将代码分解成小块。这有助于他们更好地将所有内容组合在一起并创建更清晰的代码。

13. 关注基础原理,而不是语法

更多地关注基础原理,而不是语法,有助于开发者更快地发现问题,也能更好地理解问题并在搜索引擎上搜索解决方案。

14. 让搜索引擎成为你最好的朋友

高级开发者都是用搜索引擎来解决问题的专家。从上一条也可以看出,他们关注基础原理而不是语法,因此知道要搜索的关键词。如果你一直专注于语法,这将很难做到。

15. 首先确保程序能运行,然后再完善

你经常会看到一些相对较弱的开发人员,他们一开始花费大量的时间让程序看起来漂亮,但之后发现,程序不能运行。

优秀的开发人员会在更早的阶段找到愉快的工作方式。在他们把事情做好之前,尽早发现问题。这可以帮助项目进行得更加顺利。

16. 风险管理和问题解决

高级开发人员可以定义风险,能够通过应用设计模式提炼出复杂的问题,并且能够根据以往的经验独立解决不同的问题。

17. 多提问

高级开发人员什么都想知道。他们不介意问问题,包括技术问题和业务问题,尽管这些问题听起来非常简单。理解业务需求有助于开发者编写更好的代码!他们不害怕问问题,因为他们对自己的能力有信心。

18. 尽可能将逻辑排除在数据库之外

这一点可以归结为你正在构建的应用程序的类型,并且仅当它不会影响性能时才适用。

高级开发人员知道将数据库查询保留为简单的 CRUD 操作。CRUD 是指在做计算处理时的增加 (Create)、检索(Retrieve)、更新(Update) 和删除(Delete)。

接下来,业务逻辑层应将 CRUD 操作整合在一起。这有助于开发人员了解在哪里寻找业务逻辑。如果你在数据库查询和代码中有逻辑,这会很快变得混乱!

19. 保持代码简洁

保持代码简洁是最好的做法。即使这意味着要编写更多行代码。下面是相对较弱的开发人员编写的单行代码:

return dir.Keys.Any(k => k >= limit) ? dir.First(x => x.Key >= limit).Value : dir[dir.Keys.Max()];

这样的代码虽然可以运行,但可读性很低。

原文链接:

https://medium.com/javascript-in-plain-english/19-things-i-stole-from-great-developers-85511ff56570

© THE END

转载请联系 机器之心 公众号获得授权

投稿或寻求报道:content@jiqizhixin.com

我从高级开发者身上学到的19条编码原则相关推荐

  1. 从开源开发者身上学到的 5 种品质

    学习永无止境,作为一名在学习道路上不断行走的程序员,想要得到更多的挑战就得向比自己更优秀的人看齐,不断进步...... 作者 | Chen Ravid 译者 | 弯月,责编 | Elle 出品 | C ...

  2. Jchatting通过Sina SAE云开发平台高级开发者认证

    2019独角兽企业重金招聘Python工程师标准>>> 前几天刚收到中级开发者的证书,并且在上一篇博文Sina SAE云计算平台中级开发者证书中刚刚秀了秀证书~~~通过提交开源项目J ...

  3. 三入职场 - 你可以从我身上学到这些(附毕业Vlog)

    活动地址:毕业季·进击的技术er 写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观. ...

  4. 白左机器人_“学术放养”和“认真负责”并不冲突,芝大CS博士谈从导师身上学到的几件事...

    机器之心转载 来源:知乎 作者:褚则伟 Kevin Gimpel 是 TTIC 和芝加哥大学计算机科学系的一位助理教授.博士生导师.他不会手把手教你做研究,但总会留很长的「comments」.在这种「 ...

  5. 程序员如何从初中级历练为高级开发者?

    技术更迭速度之快的 IT 圈中,有的人从业数年之久依旧是一名初级开发者,有的人仅用了一两年的时间就已升级成高级开发者或架构师,而这其中,究竟是哪一环节产生了差异,而想要升级为高级开发者又需要具备哪些基 ...

  6. 女生从猫猫身上学到的.........||精品||

    1 女生从猫猫身上学到的.........||精品||   你的猫可能围着你转,不为了要吃的, 它只是想你陪它玩. 在感情上,你也可以理直气壮的要求关注. 要学会容忍,不过不要纵容.          ...

  7. 今日芯声 | 马云才是孙正义背后的男人!孙正义称从马云身上学到很多

    "今日芯声"是读芯术推出的一档简读栏目,汇聚每日国内外最新最热的AI应用资讯,敬请关注. 1.马云才是孙正义背后的男人!孙正义称从马云身上学到很多 是创业者真正成就投资者.在12月 ...

  8. 【十年磨一剑】我们能从阿里架构师的身上学到什么?

    前言 做技术的,一定不能放弃技术.在精进技术的同时完善其他方面的能力,十年如一日.不忘初心,方得始终. 正文 本文是看到阿里巴巴系统架构师黄勇的采访记录有感而发,如有侵权,请联系我.下面就一起来看看阿 ...

  9. 刘芹:我从雷军和周鸿祎身上学到的几点创业经验

    孤独是每一个创业者与生俱来的 做公司早期CEO创始人是非常困难的.因为你面对员工的时候,很难向他去解释,公司可能只有三个月发工资的钱,甚至三个月之后发工资的钱从哪里来,我都不知道.你无法和他们去分享这 ...

最新文章

  1. 《HTML5移动应用开发入门经典》—— 2.4 HTML5中的HTML语法变化
  2. source环境变量命令千万不能乱用
  3. 【完整代码】Scala AKKA实现两个Actor之间的通信代码示例
  4. 2修改字段名_DevExpress ASP.NET v18.2新功能详解(二)
  5. 续上篇---shiro从数据库获取动态权限-cjq
  6. How is assignment blocks of overview pages read from configuration
  7. linux服务器情况
  8. Leetcode--31. 下一个排列
  9. 全球首款乘云而来的存储产品CDS诞生!
  10. markdown语法简明笔记
  11. BubbleSort
  12. c++代码整洁之道pdf_别再问如何用Python提取PDF内容了!
  13. 谈谈编程器软件开发与设计
  14. ps显示暂存盘已满如何解决?解决photoshop暂存盘已满的五种方法!
  15. opencv读取文件夹下的所有图片
  16. 软件工程项目作业之网上书店项目
  17. opendns_如何在Mac上使用OpenDNS或Google DNS
  18. Rundeck基础:3:基础概念:操作Project
  19. 小米台灯突然自己亮了_升级版值不值得买?米家台灯1代1S对比测评
  20. 指定的网络文件夹目前是以其他用户名和密码进行映射的。要用其他用户名和密码进行连接,首先请断开所有现有的连接到网络共享的映射...

热门文章

  1. Emptyproject分析
  2. Linux的Unicon资料
  3. 电子学会青少年编程等级考试Python一级题目解析12
  4. 利用BP神经网络教计算机识别语音特征信号(代码部分SS)
  5. TOPSIS算法及代码
  6. AI时代的幕后英雄:谁在生产高质量的AI训练数据?
  7. 干货!用 Python 快速构建神经网络
  8. 快手日入数据量超 5120TB,数据管治如何做?
  9. 958毕业,苦学Java,竟被二本毕业生吊打!网友:确实厉害!
  10. AI不止能美颜,美妆迁移这样做 | 赠书