程序员进阶攻略
胡峰
京东成都研究院技术专家
立即订阅
7497 人已学习
课程目录
已完结 65 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 程序行知:走在同样的路上,遇见自己的风景
免费
征途:启程之初 (4讲)
01 | 初心:为什么成为一名程序员?
02 | 初惑:技术方向的选择
03 | 初程:带上一份技能地图
04 | 初感:别了校园,入了江湖
修炼:程序之术 (10讲)
05 | 架构与实现:它们的连接与分界?
06 | 模式与框架:它们的关系与误区?
07 | 多维与视图:系统设计的思考维度与展现视图
08 | 代码与分类:工业级编程的代码分类与特征
09 | 粗放与精益:编程的两种思路与方式
10 | 炫技与克制:代码的两种味道与态度
11 | 三阶段进化:调试,编写与运行代码
12 | Bug的空间属性:环境依赖与过敏反应
13 | Bug的时间属性:周期特点与非规律性
14 | Bug的反复出现:重蹈覆辙与吸取教训
修行:由术入道 (24讲)
15 | 根源:计划的愿景——仰望星空
16 | 方式:计划的方法——脚踏实地
17 | 检视:计划的可行——时间与承诺
18 | 评估:计划的收获——成本与收益
19 | 障碍:从计划到坚持,再到坚持不下去的时候
20 | 执行:从坚持到持续,再到形成自己的节奏
21 | 信息:过载与有效
22 | 领域:知识与体系
23 | 转化:能力与输出
24 | 并行:工作与学习
25 | 时间:塑造基石习惯(上)——感知与测量
26 | 时间:塑造基石习惯(下)——切割与构建
27 | 试试:一种“坏”习惯
28 | 提问:从技术到人生的习惯
29 | 偏好:个人习惯的局限与反思
30 | 写作:写字如编码
31 | 画图:一图胜千言
32 | 演讲:表达的技术
33 | 定义:阶梯与级别
34 | 晋升:评定与博弈
35 | 关系:学徒与导师
36 | 核心:安全与效率——工程技术的两个核心维度
37 | 过程:规模与协作——规模化的过程方法
38 | 思维:科学与系统——两类问题的两种思维解法
徘徊:道中彷徨 (15讲)
39 | 职业倦怠:如何面对?
40 | 局部最优:如何逃离?
41 | 沟通之痛:如何改变?
42 | 技术停滞:如何更新?
43 | 无法实现:困扰与反思
44 | 完成作品:理想与现实
45 | 代码评审:寄望与哀伤
46 | 人到中年:失业与恐惧
47 | 该不该去创业公司?
48 | 该不该接外包?
49 | 技术干货那么多,如何选?
50 | 技术分歧,如何决策?
51 | 技术债务,有意或无意的选择?
52 | 选择从众,还是唯一?
53 | 选择工作,还是生活?
寻路:路在何方 (7讲)
54 | 侠客行:一技压身,天下行走
55 | 江湖路:刀剑相接,战场升级
56 | 御剑流:一击必杀,万剑归心
57 | 三维度:专业、展现与连接
58 | 三人行:前辈、平辈与后辈
59 | 三角色:程序员、技术主管与架构师
60 | 三视角:定位、自省与多维
蜕变:破茧成蝶 (3讲)
61 | 工作之余,专业之外
62 | 跨越断层,突破边界
63 | 成长蓝图,进化跃迁
结束语 (1讲)
尾声 | 始于知,终于行
程序员进阶攻略
登录|注册

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

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

阶段一:调试代码 Debugging

编程,是把用自然语言描述的现实问题,转变为用程序语言来描述并解决问题的过程;翻译,也是把一种语言的文字转变为另一种语言的文字,所以我想编程和翻译应该是有相通之处的。
好些年前,我曾偶然读到一篇关于性能的英文文章,读完不禁拍案叫绝,就忍不住想翻译过来。那是我第一次尝试翻译长篇英文,老实说翻得很痛苦,断断续续花了好几周的业余时间。那时的我,之于翻译,就是一个刚入门的初学者。
初次翻译,免不了遇到不少不熟悉的单词或词组,一路磕磕碰碰地查词典或 Google。一些似乎能理解含义的句子,却感觉无法很好地用中文来表达,如果直白地译出来感觉又不像正常的中文句子表达方式。
如是种种的磕碰之处,难道不像你刚学编程时候的情形吗?刚开始写代码,对语法掌握得不熟,对各种库和 API 不知道,不了解,也不熟悉。一路写代码,翻翻书,查查 Google,搜搜 API 文档,好不容易写完一段代码,却又不知道能否执行,执行能否正确等等。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《程序员进阶攻略》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(16)

  • third
    心得如下:

    1.我对三个阶段的理解是,调试代码-独立,编写代码-合作,运行代码-事业



    2.独立,你需要掌握编程的知识,并熟练掌握(一个人)



    2.合作,你要需求与他人的合作,并降低合作成本。(一群人)



    3.主要方法是,信达雅



    4.信:理解真实的用户需求



    5.达:方便维护和使用



    6.雅:有一种美的感受和体验



    7.事业,所有的道理和方法,都需要在现实中得到验证,同时保持进步(一群人和事物)



    8.老实说,我觉得我在第一段的前边,属于刚入门的新手,要努力学习。



    顺便请问一下老师,一个相对比较模糊问题。

    以一个普通人的资质,编程2500小时左右,成为一个基本合格的新手程序员,是否是一件大概率事件呢?

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

    2018-08-27
    12
  • godtrue
    恩,现在处在一个什么阶段还真定位不好,我们现在的开发模式,基本是先弄清楚整体流程再动手,每天必开早会,代码开发完了自测、测试、review、完善这么个流程。
    就个人而言,也比较喜欢将所有代码都搞定再验证,有问题再调整和优化。

    编程之于翻译,确有异曲同工之妙。
    业务-将现实问题翻译成需求
    产品-将业务的需求翻译成PRD
    研发-将产品的PRD翻译成代码
    测试-验证研发的翻译工作信否
    压测-验证研发的翻译工作性能好不
    架构-检查研发的翻译工作达否
    编译器-将Java源码翻译成Java字节码
    JVM-将Java字节码翻译成机器码
    cpu-将机器码指令执行起来,真正去解决现实的问题

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

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

    作者回复: 哈哈😄

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

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

    2018-08-27
    2
  • 刘士涛
    老师文中的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
  • 忆灬星辰
    第一阶段,新手的时候熟悉代码的过程通常是使用debug。一步一步去看 第二阶段写代码的时候开始从需求上深入理解,把代码融会贯通。甚至更进一步。到第三个阶段的时候开始代码的功能性测试基准测试
    2019-01-03
  • 苦行僧
    现阶段走在达这条路上 希望能把核心业务做到测试驱动开发 雅对我来说是最高要求
    2018-12-25
  • 北风一叶
    我能说我还在第一阶段吗

    作者回复: 那继续加油^_^

    2018-11-13
  • 小白
    峰哥,那个是阀值还是阈值啊😂

    作者回复: 我理解意思差不多一样

    2018-09-09
  • June Yuan
    正在阶段二努力,有时会滑落到一。
    2018-09-03
  • 艾尔欧唯伊
    努力向三阶段进军。。。
    2018-08-27
收起评论
16
返回
顶部