程序员进阶攻略
胡峰
京东成都研究院技术专家
33679 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 65 讲
蜕变:破茧成蝶 (3讲)
结束语 (1讲)
程序员进阶攻略
15
15
1.0x
00:00/00:00
登录|注册

11 | 三阶段进化:调试,编写与运行代码

真实生产环境中的运行数据分析
基准测试的重要性
程序运行效率和效果的评估
从 “达” 到 “雅” 的追求与差异
代码的可读性、可理解性和可维护性
“信、达、雅”在编程中的应用
单步调试的过程
初学者的困惑
编程是把用自然语言描述的现实问题,转变为用程序语言来描述并解决问题的过程
阶段三:运行代码 Running
阶段二:编写代码 Coding
阶段一:调试代码 Debugging
编程的进化过程
刚开始学编程写代码,总会碰到一些困惑
你正处在编程的哪个进化阶段?

该思维导图由 AI 生成,仅供参考

刚开始学编程写代码,总会碰到一些困惑。比如,曾经就有刚入行的同学问我:“写程序是想到哪写到哪,边写边改边验证好,还是先整体梳理出思路,有步骤、有计划地分析后,再写更好?”
老实说,我刚入行时走的是前一条路,因为没有什么人或方法论来指导我,都是自己瞎摸索。一路走来十多年后,再回溯编程之路的经历,总结编程的进化过程,大概会经历下面三个阶段。

阶段一:调试代码 Debugging

编程,是把用自然语言描述的现实问题,转变为用程序语言来描述并解决问题的过程;翻译,也是把一种语言的文字转变为另一种语言的文字,所以我想编程和翻译应该是有相通之处的。
好些年前,我曾偶然读到一篇关于性能的英文文章,读完不禁拍案叫绝,就忍不住想翻译过来。那是我第一次尝试翻译长篇英文,老实说翻得很痛苦,断断续续花了好几周的业余时间。那时的我,之于翻译,就是一个刚入门的初学者。
初次翻译,免不了遇到不少不熟悉的单词或词组,一路磕磕碰碰地查词典或 Google。一些似乎能理解含义的句子,却感觉无法很好地用中文来表达,如果直白地译出来感觉又不像正常的中文句子表达方式。
如是种种的磕碰之处,难道不像你刚学编程时候的情形吗?刚开始写代码,对语法掌握得不熟,对各种库和 API 不知道,不了解,也不熟悉。一路写代码,翻翻书,查查 Google,搜搜 API 文档,好不容易写完一段代码,却又不知道能否执行,执行能否正确等等。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

编程的进化过程可以分为三个阶段:调试代码、编写代码和追求“信、达、雅”。在调试代码阶段,编程者需要不断查阅资料、调试代码,验证变量和执行结果是否符合预期。这是编程学习中的磕磕绊绊时期,需要逐渐降低使用Debug功能的频率。在编写代码阶段,程序员需要深刻理解用户的原始需求,同时追求程序的可读性、可理解性和可维护性。最后,追求“雅”则是从技艺上升到了艺术的追求,要求选用的词语得体,追求文章本身的古雅、简明优雅。文章通过对翻译经历的类比,生动地描述了编程初学者的困惑和摸索过程,为读者呈现了编程学习的真实情景。在编程实践中,程序员需要在一个行业长期沉淀,才能慢慢搞明白用户的真实需求。此外,文章还提到了编程规范和风格的约束,以及如何让程序在未来的生命周期内更优雅地演变。通过这些阶段和实践经验,程序员可以逐渐提升自己的编程水平,实现更高质量的编程作品。文章还强调了程序员需要深刻记住并理解程序运行各环节的效率数据,以便准确评估程序运行的最终效果。基准测试是开发人员自己做来帮助准确理解程序运行效率和效果的方式,对于程序员来说,这是一个重要的环节。文章通过实例说明了如何进行基准测试,以及在真实生产环境中如何分析和思考运行数据与预期之间的差距。整体而言,本文深入探讨了编程的不同阶段和实践经验,为程序员提供了宝贵的学习和成长指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《程序员进阶攻略》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(22)

  • 最新
  • 精选
  • third
    心得如下: 1.我对三个阶段的理解是,调试代码-独立,编写代码-合作,运行代码-事业 2.独立,你需要掌握编程的知识,并熟练掌握(一个人) 2.合作,你要需求与他人的合作,并降低合作成本。(一群人) 3.主要方法是,信达雅 4.信:理解真实的用户需求 5.达:方便维护和使用 6.雅:有一种美的感受和体验 7.事业,所有的道理和方法,都需要在现实中得到验证,同时保持进步(一群人和事物) 8.老实说,我觉得我在第一段的前边,属于刚入门的新手,要努力学习。 顺便请问一下老师,一个相对比较模糊问题。 以一个普通人的资质,编程2500小时左右,成为一个基本合格的新手程序员,是否是一件大概率事件呢?

    作者回复: 2500小时应该很熟练了,应该跨过新手阶段了

    2018-08-27
    14
  • 恩,现在处在一个什么阶段还真定位不好,我们现在的开发模式,基本是先弄清楚整体流程再动手,每天必开早会,代码开发完了自测、测试、review、完善这么个流程。 就个人而言,也比较喜欢将所有代码都搞定再验证,有问题再调整和优化。 编程之于翻译,确有异曲同工之妙。 业务-将现实问题翻译成需求 产品-将业务的需求翻译成PRD 研发-将产品的PRD翻译成代码 测试-验证研发的翻译工作信否 压测-验证研发的翻译工作性能好不 架构-检查研发的翻译工作达否 编译器-将Java源码翻译成Java字节码 JVM-将Java字节码翻译成机器码 cpu-将机器码指令执行起来,真正去解决现实的问题

    作者回复: 你们有个不错的流程^_^

    2018-08-28
    9
  • 维维
    理清思路,行云流水的敲完代码,一气呵成。然后第一个闪念就是我的代码根本不会出问题。😄😄😄

    作者回复: 哈哈😄

    2018-08-29
    2
    3
  • Franklin.du
    在第二阶段,到第三阶段还有好远的距离!!

    作者回复: 2,3阶段不是完全串行的,只是为了方便写作表达,可以是穿插迭代进化的

    2018-08-27
    2
  • Tachone
    老师文中的latency图有链接吗?

    作者回复: 有,Google一下图上的英文你就能找到

    2019-05-03
    1
  • helloworld
    关于基准测试部分的经验不错,不过工作中真有真多时间为了使用一个来源工具,先研究其源码的时间吗?直接压测看效果不就行了?

    作者回复: 一个新东西引入到核心服务中,不理解实现原理,是用不好的,还可能埋坑,这是必要的成本

    2018-10-25
    1
  • 朱月俊
    "实际一个服务在类似基准测试的环境下单实例所能承载的 TPS 极限不可能超过 RPC 的上限,因为 RPC 是没有包含业务逻辑的部分。加上不算简单的业务逻辑,我能预期的单实例真实 TPS 也许只有 1 千 ~2 千。" 意思是JAVA rpc 单实例上限tps只能达到1000-2000? 这个能详细说下嘛?

    作者回复: 不是,例子中说的是Java业务服务的TPS,包含了业务逻辑的

    2018-10-18
    1
  • 天师
    想讲个有点炫技的关于雅的经历,做OpenGL渲染的时候,有个同事提出个练习题,使用OpenGL实时渲染一个转动着的魔方,在各个轴各个层上都能够自由旋转,当时存在一个问题,需要确定旋转以后的小方块移动到了哪个位置,同事他们的处理方式是人工穷举,比如2x2x2的魔方里面,顶层旋转了90度,那么顶层1号的小方块就变成了旁边的2号小方块。 我觉得这种穷举不太舒服,而且不通用与3x3x3,4x4x4甚至更高阶的魔方,后来想出了个招数,用三维向量替代小方块的数字编号,这样每次旋转,实际上也是对小方块三维向量编号进行旋转,旋转后的向量就是小方块新的编号,这样的算法只需要用数学库构造一个旋转矩阵就可以完成,并且无论对于几阶的魔方,算法上都是通用的,并且也不需要人工穷举。这个招数,无论什么时候想起来,都觉得是挺舒服的一个思路。 相应的,见过的让我觉得舒服,欣赏的架构与代码,还有Akka的Reactive Stream,Scala的trait特性等等

    作者回复: 感觉这不是炫技,而是用了更通用的方法解决问题😊

    2018-10-11
    1
  • funky的两斤K仔
    现在在工作了,还是戒不掉写两行代码就想debug的习惯。怎么把代码模型整个放进脑子里好像也是个挑战。

    作者回复: 那还需要多想,多写代码

    2018-08-27
    1
  • Aliliin
    目前处于第一阶段,正在努力学习中。。

    作者回复: 加油💪😄

    2018-08-27
    1
收起评论
显示
设置
留言
22
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部