新年立个小目标!代码写得更规范!

知乎作者@叶小飞:
作为Oppo Reno2 超级夜景核心开发人员和奔驰San José Pilot落地工程师之一,我写代码基本尽可能地遵循Google Style. 在这里写几个自己的习惯+Google Style里面几个常用的要点。

自己的习惯

  1. 动手写代码前尽量做到胸中有丘壑。现在这世界讲究格局,写代码亦然。 我写代码前一般要先回答这么几个问题——这段代码的核心功能是什么?实现它的核心功能需要实现哪些functions? 这些functions需要设计哪些相应的class?这些class如何尽量做到hierarchy, 能否从已有的代码库里进行继承来避免重复开发?回答了这些问题后我才会动手写,这样避免写代码时东写一块,西写一波以及重复作业。

  2. 能高效一行写完的绝不写两行。 举个简单的python 例子,有人通过if else总共四行代码来判断return A or return B, 其实完全可以缩成一行:return A if something else B

  3. 做好文档规整。 程序员的工作不是学完代码就拉倒的,还包括整理好自己代码的文档介绍,一方面方便工作交接,让领导更实质性地看到你的功劳,另一方面方便给自己理清思路,同时为很久以后温习这份代码做准备。

  4. 坐姿端正,保护好你的颈椎。 老程序员都懂,颈椎不好多么影响工作效率。写代码时尽量用大屏,这样不用低头去写,坐姿正确对颈椎、老腰都好,可持续输出才是王道。

  5. Setup好用的IDE事半功倍。 我写C++一般用Visual Studio, 写Python用Pycharm

C++ Google Style 里几个常遇到的要点

  1. 头文件引用:一般来说,每个cpp文件都要对应一个头文件。在你的.cpp 或者.h file里只引用你用得到的头文件,以此减少compilation时间。另外,尽量避免transitive inclusion(比如你引用的某个头文件A引用了头文件B,所以你的cpp文件虽然需要用到B的函数,但没有单独引用头文件B也可以正常compile 和运行,这就叫transitive inclusion)

  2. Struct只用于passive object, 其他一律用class

  3. 变量命名法则: 变量名称一定要反应它的用途。变量名字太长没关系,首要让人明白它是做啥的。尽量不要使用非常见缩写,例如,digital_signal_processor可以缩写成dsp, 但是不能写成dig_sig_process。

  4. 注释尽量保持风格一致,比如你上一段用了//,下一段代码用/**/注释就属于风格混乱。每个函数下面都要有注释代码,来解释input/output 是什么,这段函数用来做什么

  5. 如果你的函数不需要改变argument里某个变量的内容,那么记得加const. 方便读者一目了然这个函数做什么用的,方便compiler更好的做type checking.如果你代码里有大量的指针,建议使用smart pointer, 以防你漏删指针造成内存泄漏。

知乎作者@平凡:

写文档能力很重要

团队作战会发现很多时间华仔写文档上,我之前实习的那个军工保密单位,一个项目会由好几个兄弟单位一起齐头并进,所以保持文档一致是非常重要的,二我再那段时间写过一个100多页的文档,并最终600多页的文档是由我和一个小伙伴合并完的,其中很多工作花在命名一致上,那段时间真让人头秃。

结对编程

有能力的话要结对编程,既可以让你精神愉悦

还能在你休息的时间review代码


干净整洁的编程环境

其中也包括了愉悦的心情,如果桌面脏乱差,非常影响心情。

心情愉快的前提下编程效率会大大提升。

习惯去看源代码

网上的攻略再好,也是二手资源

不要重复造轮子

要相信前人的智慧和尊重大家的鉴别能力

知乎作者@王哲:

关于代码本身

“要懒惰,不要懒惰”:如果发现重复的模式,思考如何抽象出来,避免重复的写类似的代码。不要”懒得“抽象。懒得及时抽象,会让代码重构变得越来越困难。

最简单的例子是写function抽象,复杂一点的可以通过meta programming,既写生成function的function抽象。这个各种语言提供的方法不一样,有些语言更加灵活,比如Clojure一类,几乎可以通过宏随意构造新语法的;有一些比较不方便,比如Java只能通过设计模式实现某些抽象。

通过写Generic operator抽象,就是可以动态dispatch的函数。

不要的代码及时删除,不要变成注释。你的git会帮助你找回你删除的代码。

一个函数如果超过了50行,考虑拆解成多个函数。

尽可能分离纯函数和非纯函数。纯函数就是那些无状态、无IO的,相同的call永远给你相同的结果。这些函数非常可靠而且容易测试;非纯函数就是IO、有状态的,他们的测试需要Mock,而且不稳定。所以,尽量把非纯函数推到程序的边界上,让内核尽可能的保持纯洁。

关于注释

写注释的时候应该记住,你的注释是写给其他人和未来的自己看的。不要写过多解释代码的注释,要写假设、注意事项、例子等等对用户有用的信息。这里用户包括两类:使用功能的人和将来维护拓展功能的人。

注释主要分成两种,一种是给接口写的,一种是给实现写的。

写给接口的注释,应该包括:input requirementoutput assumptionpossible raiseexamples写给实现的注释,应该包括:

  • Abstraction function,就是 实现是如何映射到目标数据结构的

  • Representation invariant,就是 实现的时候那些数据结构是有效的

关于测试

写函数的时候问自己,这个函数容易测试吗?如果容易,写几个test case。如果不容易,拆解函数成容易测试的。

新的一年,小夕给大家拜年啦!

祝小伙伴们在新的一年里,

算法如巧克力般硬核,

代码如牛奶般丝滑。

告别996,

拥抱财富自由!

<<<  滑动打开信封,查收祝福吧  >>>

后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手把手教你用Keras实现英文到中文机器翻译 seq2seq+LSTM

原文链接&#xff1a;https://blog.csdn.net/qq_44635691/article/details/106919244 该模型实现的是英文到中文的翻译&#xff0c;下图为了更好展示模型架构借用大佬的图(这里没有用到Embeddings)&#xff1a; 本文完整代码:Github 目录 一、处理文本数据 1.获得翻译前后的句子…

LeetCode 45. 跳跃游戏 II(贪心/BFS,难)

文章目录1. 题目2. 解题2.1 贪心2.2 BFS1. 题目 给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 示例:输入: [2,3,1,1,4] 输出: 2 解释: 跳到最…

深度剖析开源分布式监控CAT

CAT&#xff08;Central Application Tracking&#xff09;是一个实时和接近全量的监控系统&#xff0c;它侧重于对Java应用的监控&#xff0c;基本接入了美团上海侧所有核心应用。目前在中间件&#xff08;MVC、RPC、数据库、缓存等&#xff09;框架中得到广泛应用&#xff0c…

论文浅尝 | ​ADRL:一个基于注意力机制的知识图谱深度强化学习框架

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士。来源&#xff1a;Knowledge-Based Systems 197 (2020) 105910链接&#xff1a;https://www.sciencedirect.com/science/article/abs/pii/S0957417419306839概要与动机知识图谱推理是图谱构建的关键技术之一&#xff0…

新年第二弹|卖萌屋私藏书单大公开

夕本尊 &夕小瑶 推荐作为一个互联网人&#xff0c;不仅要懂技术&#xff0c;还应该了解行业的基本运作原理。这其中一个重要的问题是&#xff1a;为什么互联网产品&#xff08;基本&#xff09;都是免费的&#xff0c;甚至纷纷给用户送钱&#xff0c;它们却能有这么强的盈利…

LeetCode 437. 路径总和 III(双重递归)

1. 题目 给定一个二叉树&#xff0c;它的每个结点都存放着一个整数值。 找出路径和等于给定数值的路径总数。 路径不需要从根节点开始&#xff0c;也不需要在叶子节点结束&#xff0c;但是路径方向必须是向下的&#xff08;只能从父节点到子节点&#xff09;。 二叉树不超过…

论文浅尝 - ESWA | 知识图谱的自动扩充方法

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士。来源&#xff1a;ESWA141(2020)链接&#xff1a;https://www.sciencedirect.com/science/article/abs/pii/S0957417419306839为了使计算机理解人类语言&#xff0c;并且实现推理&#xff0c;人类知识需要被表示并储存…

美团大脑:知识图谱的建模方法及其应用

作为人工智能时代最重要的知识表示方式之一&#xff0c;知识图谱能够打破不同场景下的数据隔离&#xff0c;为搜索、推荐、问答、解释与决策等应用提供基础支撑。美团大脑围绕吃喝玩乐等多种场景&#xff0c;构建了生活娱乐领域超大规模的知识图谱&#xff0c;为用户和商家建立…

全栈深度学习第2期: 开发套件与工具篇

一起追剧鸭简介Berkeley全栈深度学习追剧计划是由夕小瑶的卖萌屋发起的优质公开课打卡项目&#xff0c;通过微信群为同期追剧的小伙伴提供交流平台。关于该计划的详请见这里。1. Berkeley深度学习追剧群目前已有1000小伙伴加入&#xff0c;公众号后台回复口令 深度学习追剧 入群…

LeetCode 700. 二叉搜索树中的搜索

1. 题目 给定二叉搜索树&#xff08;BST&#xff09;的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在&#xff0c;则返回 NULL。 2. 解题 class Solution {//递归写法TreeNode *ans NULL; public:TreeNode* searchB…

iOS系统中导航栏的转场解决方案与最佳实践

背景 目前&#xff0c;开源社区和业界内已经存在一些 iOS 导航栏转场的解决方案&#xff0c;但对于历史包袱沉重的美团 App 而言&#xff0c;这些解决方案并不完美。有的方案不能满足复杂的页面跳转场景&#xff0c;有的方案迁移成本较大&#xff0c;为此我们提出了一套解决方案…

论文浅尝 - WSDM20 | 基于弱监督及逐步推理的多关系知识图谱问答

论文笔记整理&#xff1a;刘晓臻&#xff0c;东南大学计算机科学与工程学院本科生。来源&#xff1a;WSDM ’20链接&#xff1a;https://dl.acm.org/doi/abs/10.1145/3336191.3371812动机知识图谱问答(KG-QA)系统大多包含两个步骤&#xff1a;链接问题中的topic entity到KG&…

算法工程师的落地能力具体指的是什么?

文 | 桔了个仔知乎本文已获作者授权&#xff0c;禁止二次转载大家好&#xff0c;这里是桔了个仔&#xff0c;目前是一名Data Scientist(不太想翻译成数据科学家&#xff0c;毕竟感觉自己就是个工程师&#xff09;&#xff0c;过去几年在做基于机器学习的风控与合规系统&#xf…

Android官方开发文档Training系列课程中文版:网络操作之网络管理

原文地址&#xff1a;http://android.xsoftlab.net/training/basics/network-ops/managing.html 这节课将会学习如何对网络资源的使用情况拥有更细粒度的控制力。如果应用程序经常执行大量的网络操作&#xff0c;那么程序应当提供一项设置&#xff0c;以便用户可以控制应用的数…

LeetCode 728. 自除数

1. 题目 自除数 是指可以被它包含的每一位数除尽的数。 例如&#xff0c;128 是一个自除数&#xff0c;因为 128 % 1 0&#xff0c;128 % 2 0&#xff0c;128 % 8 0。 还有&#xff0c;自除数不允许包含 0 。 给定上边界和下边界数字&#xff0c;输出一个列表&#xff0…

论文浅尝 - AAAI2020 | 通过句子级语义匹配和答案位置推断改善问题生成

论文笔记整理&#xff1a;王春培&#xff0c;天津大学硕士。链接&#xff1a;https://arxiv.org/pdf/1912.00879.pdf动机本文主要聚焦问答系统&#xff08;Q&A&#xff09;的反问题---问题生成&#xff08;Question Generation&#xff0c;Q&G&#xff09;。问题生成的…

美团深度学习系统的工程实践

背景 深度学习作为AI时代的核心技术&#xff0c;已经被应用于多个场景。在系统设计层面&#xff0c;由于其具有计算密集型的特性&#xff0c;所以与传统的机器学习算法在工程实践过程中存在诸多的不同。本文将介绍美团平台在应用深度学习技术的过程中&#xff0c;相关系统设计的…

一个程序员的理财观

文 | 王喆你好&#xff0c;我叫王喆&#xff0c;看过我技术文章的朋友知道&#xff0c;我是一个搞推荐系统的机器学习工程师&#xff0c;不熟悉的同学也没关系&#xff0c;就当我是一名普普通通的程序员就好。但今天我们不谈技术&#xff0c;也不谈996这些烦人的话题&#xff0…

2020年最值得收藏的60个AI开源工具

原本链接:https://www.infoq.cn/article/2uabiqaxicqifhqikeqw 本文&#xff0c;InfoQ梳理了60个2019年至今GitHub上热门的开源工具&#xff0c;献给那些对新征程满怀期待的开发者们。Flair (顶级 NLP 库&#xff09;2018 年是 NLP 井喷的一年。像 ELMo 和谷歌 BERT 这样的库层…

LeetCode 942. 增减字符串匹配

1. 题目 给定只含 “I”&#xff08;增大&#xff09;或 “D”&#xff08;减小&#xff09;的字符串 S &#xff0c;令 N S.length。 返回 [0, 1, …, N] 的任意排列 A 使得对于所有 i 0, …, N-1&#xff0c;都有&#xff1a; 如果 S[i] "I"&#xff0c;那么…