专栏首页灯塔大数据探秘 | 写了一百万行代码是什么体验?

探秘 | 写了一百万行代码是什么体验?

搞程序的累计写到一百万行代码到底是什么体验呢?

如果一百万是标量的话,来和大家研究一下这个数据,假设最好的情况,一天100行高质量代码,一年36500,100/3.65=27年多。即便从20岁开始编码,要到50岁左右方可完成。但实际上关于平均代码量的问题,即便把所有工作日都算上,大概也就是20-30行的样子;如果仅讨论集中的开发期,高峰也不会超过200行。

一百万代码就像找女朋友一样不靠谱。。。。

当然,老师口中的100万行老师并不是技术指标,只是说明了自己的经历而已,告诉我们多练,练多了总有收获。

关于代码的量,有一种说法是要从初学者成长为程序员,需要10万行代码的积累。入门阶段确实需要多敲代码,才能积累经验。不过到一定程度后,就不是代码量的问题了,数学功底和编程思维的深化更加重要。 曾经的一位老师这么对我说:“写十万行代码没什么,我手头这个东西(一个开源的可信计算平台,我不是信安方向的,搞不太懂),第一遍写的时候也差不多十万行代码,后来每一次优化,总代码量都会减小,现在也就三四万行代码了。” 至于一百万行代码,也许需要十年从业经验才能达到,如果都是高质量的代码,那你肯定已经成为小有名气的专家了。

当然了,码代码的过程中,追求量并没有任何实际意义,通常,越核心的部分代码量越小,越容易写大量代码的,大概是没什么技术含量的 UI、业务逻辑。而一些部分,用脚本或DSL实现可以更精简。

追求代码量就好像写小说凑字数。我们要做的是追求代码品质,追求技术,写有价值的代码。

毕竟,写代码和高考一样,做题最多的不一定是成绩最好的。

关于怎么做高质量的代码,给你提供一些解决方案

1. 打好技术基础

写出高质量代码,并不是搭建空中楼阁,需要有一定的基础:这里我重点强调与代码质量密切相关的几点:

掌握好开发语言,比如做Android就必须对Java足够熟悉,《Effective Java》一书就是教授大家如何更好得掌握Java, 写出高质量Java代码。

熟悉开发平台, 不同的开发平台,有不同的API, 有不同的工作原理,同样是Java代码,在PC上写与Android上写很多地方不一样,要去熟悉Android编程的一些特性,iOS编程的一些特性,了解清楚这些,才能写出更加地道的代码,充分发挥各自平台的优势。

基础的数据结构与算法,掌握好这些在解决一些特定问题时,可以以更加优雅有效的方式处理。

基础的设计原则,无需完全掌握23种经典设计模式,只需要了解一些常用的设计原则即可,甚至你也可以只了解什么是低耦合,并在你的代码中坚持实践,也能写出很不错的代码。

2. 代码标准

代码标准在团队合作中尤为重要,谁也不希望一个项目中代码风格各异,看得让人糟心,即便是个人开发者,现在也需要跟各种开源项目打交道。标准怎么定是一个老生常谈的话题,我个人职业生涯中经历过很多次的代码标准讨论会议,C++, C#, Java等等,大家有时会坚持自己的习惯不肯退让。可现如今时代不一样了,Google等大厂已经为我们制定好了各种标准,不用争了,就用这些业界标准吧。

3. 想好再写

除非你很清楚你要怎么做,否则我不建议边做边想。你真的搞清楚你要解决的问题是什么了吗?你的方案是否能有效?有没有更优雅简单的方案?准备怎么设计它,必要的情况下,需要有设计文档,复杂一些的设计需要有同行评审,写代码其实是很简单的事情,前提是你得先想清楚。

4. 代码重构

重构对于代码质量的重要性不言而喻,很难一次把代码写得让自己满意、无可挑剔,《重构》这本书作为业内经典也理应人人必读,也有其他类似的教授重构技巧的书,有些也非常不错,遗憾的是我发现很多工作多年的同学甚至都没有了解过重构的概念。

5. 技术债务

很多问题归根结底都是技术债务,这在一些大公司尤为常见。技术债务话题太大,但就代码质量而言,我只想提一下不要因为这些债是前人留下的你就不去管,现实是没有多少机会让你从一个清爽清新的项目开始做起,你不得不去面对这些,你也没法完全不跟这些所谓的烂代码打交道。

因此我建议各位:当你负责一个小模块时,除了把它做好之外,也要顺便将与之纠缠在一起的技术债务还掉,因为这些债务最终将是整个团队来共同承担,任何一个人都别想独善其身,如果你还对高质量代码有追求的话。

作为团队的技术负责人,也要顶住压力,鼓励大家勇于做出尝试,引导大家不断改进代码质量,不要总是畏手畏脚,停滞不前,真要背锅也得上,要有担当。

6. 代码审查

我曾经听过一些较高级别的技术分享,竟然还不时听到一些呼吁大家要做代码审查的主题,我以为在这个级别的技术会议上,不应再讨论代码审查有什么好,为什么要做代码审查之类的问题。同时我接触过相当多所谓国内一线互联网公司,竟有许多是不做代码审查的,这一度让我颇为意外。

这里也不想多谈如何做好代码审查,只是就代码质量这点,不客气地说:没有过代码审查经历的同学,往往很难写出高质量的代码,尤其是在各种追求速度的糙快猛创业公司。

7. 静态检查

很多代码上的问题,都可以通过一些工具来找到,某些场景下,它比人要靠谱得多,至少不会出现某些细节上的遗漏,同时也能有效帮助大家减少代码审查的工作量。

Android开发中有Lint, Find bugs, PMD等优秀静态检查工具可用,通过改进这些工具找出的问题,就能对语法的细节,规范,编程的技巧有更多直观了解。

建议最好与持续集成(CI),代码审查环境配套使用, 每次提交的代码都能自动验证是否通过了工具的代码检查,通过才允许提交。

8. 单元测试

Android单元测试,一直备受争议,主要还是原生的测试框架不够方便,每跑一次用例需要在模拟器或者真机上运行,效率太低,也不方便在CI环境下自动构建单元测试,好在有Robolectric,能帮我们解决部分问题。

单元测试的一个非常显著的优点是,当你需要修改大量代码时,尽管放心修改,只需要保证单元测试用例通过即可,无需瞻前顾后。

9. 充分自测

有一种说法:程序员最害怕的是他自己写的代码,尤其是准备在众人面前show自己的工作成果时,因此在写完代码后,需要至少跑一遍基本的场景,一些简单的异常流。在把你的工作成果提交给测试或用户前,充分自测是基本的职业素养,不要总想着让测试帮你找问题,随便用几下就Crash的东西,你好意思拿给别人吗?

10.善用开源

并非开源的东西,质量就高,但至少关注度较高,使用人数较多,口碑较好的开源项目,质量是有一定保证的,这其中的道理很简单。即便存在一些问题,也可以通过提交反馈,不断改进。最重要的是,你自己花时间造的轮子,需要很多精力维护,而充分利用开源项目,能帮助你节省很多时间,把精力专注在最需要你关心的问题上。

从另一个方面来说,开源项目中的一些知名项目,往往是领域内的翘楚所写,学习这些高手的代码,能让你了解到好的代码应该是怎样的,培养出更灵敏的嗅觉,识别代码中的各种味道。

内容来源:网络 内容编辑:柯一

本文分享自微信公众号 - 灯塔大数据(DTbigdata)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-07-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 塔说 | 在编码过程中,这7 条捷径要尽量避免

    导读 本文分析了一些最广泛使用的软件度量标准,列举了一些在访问用户的过程中,得知用户后悔采用的捷径。 1. 复制代码 “我认为最有价值的规则是避免重复。有且仅有...

    灯塔大数据
  • 精选 | 10张图看AI趋势:投资AI将带来更大竞争优势

    前言 要求AI技能的工作岗位增长了4.5倍、AI创业公司的数量增加了14倍……本文,我们精选斯坦福大学AI Index报告中的10个具有代表性的图表,提供有关A...

    灯塔大数据
  • 塔荐 | 英国政府发布AI报告:欲领导世界AI,成为世界AI强国的18点建议

    导 读 英国政府网站上10月15日发布了报告《在英国发展人工智能》,对当前人工智能的应用、市场和政策支持进行了分析。同时,报告的重心放在四个方向的建议上:数据、...

    灯塔大数据
  • 告别狗屎代码,请记住这 11 条编码秘诀!

    我已经写了20年代码了,在此期间曾与17个团队共事过,使用不同的语言做过数百个项目。

    Java技术栈
  • 世间本无完美代码,不要苦苦追寻了

    一些代码比其他代码重要 通过研究代码如何随时间变化,Michael Feathers 确定了一个代码库的冥曲线。每个系统都有代码,通常有很多是一次性写成,永远都...

    BestSDK
  • 从条件运算符说起,反思什么是好代码

    那什么样的代码才是优秀的代码呢?对于这个问题,我想每个人心中都会有自己的答案。今天我就来和你聊聊我的思考。

    架构师修炼
  • 高级Python工程师教你如何正确写代码

    我接手的第一样东西就是React UI。我们有一个主要组件,它容纳了其他所有组件。我喜欢在代码中加入一点幽默感,我想把它命名为GodComponent。在cod...

    小小科
  • Dead Code为什么能在代码库中永生?

    在一些遗留系统中,经常会看到大片大片灰掉的代码(被注释掉了),这种代码是死代码吗?如果要我下定义,我认为这些不是死代码,因为它们连代码都称不上,如何又能叫死代码...

    袁慎建@ThoughtWorks
  • JS逆向时碰到了恶心的死代码怎么办?手把手教你解决!

    你是否也曾有过「跟着代码跳了很久之后,才发现那一大坨代码其实没有任何作用」的惨痛经历?

    青南
  • JS逆向时碰到了恶心的死代码怎么办?手把手教你解决!

    你是否也曾有过「跟着代码跳了很久之后,才发现那一大坨代码其实没有任何作用」的惨痛经历?

    崔庆才

扫码关注云+社区

领取腾讯云代金券