程序员进阶攻略
胡峰
京东成都研究院技术专家
立即订阅
7526 人已学习
课程目录
已完结 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讲)
尾声 | 始于知,终于行
程序员进阶攻略
登录|注册

10 | 炫技与克制:代码的两种味道与态度

胡峰 2018-08-24
虽然你代码可能已经写得不少了,但要真正提高代码水平,其实还需要多读代码。就像写作,写得再多,不多读书,思维和认知水平其实是很难提高的。
代码读得多了,慢慢就会感受到好代码中有一种味道和品质:克制。但也会发现另一种代码,它也会散发出一种味道:炫技。

炫技

什么是炫技的代码?
我先从一个读代码的故事说起。几年前我因为工作需要,去研究一个开源项目的源代码。这是一个国外知名互联网公司开源的工具项目,据说已在内部孵化了 6 年之久,这才开源出来。从其设计文档与代码结构来看,它高层设计的一致性还是比较好的,但到了源代码实现就显得凌乱了些,而且发现了一些炫技的痕迹。
代码中炫技的地方,具体来说就是关于状态机的使用。状态机程序本是不符合线性逻辑思维的,有点类似goto语句,程序执行会突然发生跳转,所以理解状态机程序的代码要比一般程序困难些。除此之外,它的状态机程序实现又是通过自定义的内存消息机制来驱动,这又额外添加了一层抽象复杂度。
而在我看来,状态机程序最适合的场景是一种真实领域状态变迁的映射。那什么叫真实领域状态呢?比如,红绿灯就表达了真实交通领域中的三种状态。而另一种场景,是网络编程领域,广泛应用在网络协议解析上,表达解析器当前的运行状态。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《程序员进阶攻略》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(27)

  • third




    心得如下:可能理解有误,望老师指点。



    1.炫技俗称装B,有句老话说得好,装B被雷劈



    2.炫技是指,为了展示自己的水平,人为的推高自己代码的复杂度和理解难度。(损人不利己)



    3.克制俗称低调有内涵。



    4.克制是指,为了程序的稳定,以及可读性,人为的降低代码的复杂度和理解难度(损己利人)



    5.符合三个重要特征:

       1,直观的,可读的,高效的

       2,结构干净整齐

       3,具有全局观



    6.B还是要装的,只不过得趁早,因为成本比较低。



    7.最后,每次我想要装B的时候,玩一下《绝地求生》这个游戏,感受一下



    杀人最多的人不一定能取胜,幸存才是最大的胜利,闷声大发财。

    作者回复: 哈哈,感谢third同学的总结心得,理解到位!喜欢第3条的阐释😊

    2018-08-24
    18
  • sprinty
    只有炫技不克制过,才能克制不炫技。

    作者回复: 嗯嗯,都是泪😂

    2018-08-24
    11
  • Dream.
    一句话道出真谛“手里拿个锤子,看见什么都是钉子”,真的是学了点新花样,就想立马运用在项目中,幻想着自己多么的牛逼。随意乱锤的结果就是换来各种坑以及加不完的班。真如楼上所说,只有炫技过后才能懂得克制。看见这篇文章,还不算太晚。

    作者回复: 😊,都是加班换来的经验教训

    2018-08-24
    6
  • 爪哇夜未眠
    不经历这些失败的尝试,可能也掌握不了这些技术

    作者回复: 恩,每次炫技后都是给自己挖了坑

    2018-08-24
    5
  • godtrue
    实现一个功能越简单明了越好,否则真会害人不浅的,现在我们项目组维护的代码最早都有10年的,早一点没什么,关键是代码中的一个功能,代码是一坨一坨的,一个方法接一个方法看都看不完,又是核心代码一直计划重构,但是首先要理清代码业务逻辑,真是件令人头疼的事。

    作者回复: 恩,理清再动手,此处坑多😄

    2018-08-26
    4
  • 湮汐
    胡老师,在这里想请教你一个问题。本篇中提到阅读代码,我们很多程序员也提议大家阅读有名的框架源码。
    可是,自己在阅读源码的过程中,有时候有点无从下手,一个框架的源码量太大了,不知道从哪读起。再就是因为自己基础的原因,很多源码读不懂,看了半天不知道那一块到底是做啥的。
    这里有没有读源码的方法呢?

    作者回复: 我读源码的方式是,发现这个框架实现了某个能力,我自己想不出怎么做,就会去看看别人怎么实现的。带着问题去读,可能有针对性一些

    2018-09-26
    3
  • 小名叫大明
    我倒觉得程序员初期可以考虑炫技(装B)代码。

    个人理解如下:

    1. 程序员历史上确实存在某些祖传代码不易动,不能动,只能某些人维护的情况,某些人确实得到了想要的效果,获得了利益。(这不是我的追求,哈哈哈)

    2. 炫,代表着复杂度,代表着更高程度的抽象,这对自己写代码的水平是一种提高的途径,将读到的东西,学以致用,才能是自己的,即使是个坑,也会有所收获。

    从中学会了,能与不能的界限,拥有了以后能够一眼甄别那些小年轻的想法的"超能力",哈哈

    3.像您说的,升迁,生存之技。

    作者回复: 就怕炫完了,坑挖完了,人跑了😂

    2018-08-27
    3
  • @XP
    之前一家小公司里做安卓独立开发,看到网上兴起kotlin写安卓,我就整合到项目中,一边学习一边开发,之后大量重写代码,然后就开始出现很多兼容问题,想反悔都没办法,硬着头皮修bug

    作者回复: 冲动了吧……

    2018-08-24
    3
  • 登高
    毕业时写了一个android app,那时对高层设计很感兴趣。在网上发现了MVP模式和clean架构,于是将它用起来。但是没想到这给开发增加了太多工作量,需要理解掌握的知识超出了预想,结果拖累了app一定的完成度。现在看当时有点冲动了
    面对新技术,基本态度希望是积极拥抱,但在实际工作中要有克制。

    作者回复: 恩,心态要开放,行动要克制😄

    2018-08-27
    2
  • 艾尔欧唯伊
    一针见血。。虽然干了四年多但是感觉有效代码量真的不多,哎。

    作者回复: 如果你能清晰分辨出有效代码,并重构迭代出来,就又前进成长了一大步了

    2018-08-25
    2
  • edcSam
    处处戳中我痛点,收获颇多,以后定当谨记克制与时机。

    作者回复: 👍赞

    2018-08-24
    2
  • 艾尔欧唯伊
    这一篇很有道理,但是读起来有点抽象。。不知道实践中怎么落实

    作者回复: 估计是代码写得还不够多,量到了就能感觉得到

    2018-08-24
    2
  • Hurt
    什么是状态机程序啊。 什么又是goto 语句呢

    作者回复: 哦……🤔

    2018-08-24
    2
  • 无聊夫斯基
    当时做用户模版,需求还是比较简单的,本可以自定义快速实现,但为了炫技直接引入没用过的shiro,大部分功能没用上不说,还增加了其他功能的复杂度,坑嘛是肯定很多的,爬了好一阵子

    作者回复: 哈哈😄

    2018-08-24
    2
  • 维维
    过度设计会增加代码的复杂度,增加维护成本。有时候一开始想的很好,让代码有很好的可扩展性,但过了很久,这份代码几乎不会怎么变。
    我们项目中也有些代码,一个方法两三百行,复杂度很高,谁也不敢动。

    作者回复: 几百行,还好,啃得动

    2018-08-24
    2
  • 忆灬星辰
    炫技和追新往往在自己的项目里,平时看看一些新书或是代码整洁方面的,全当练手。公司里比较老顽固。有的用的还是很早的技术。不过能够优化好代码就好,新技术往往要经过很长时间才会放进公司项目

    作者回复: 业务要稳定,技术可以渐变,不要突变

    2018-08-24
    2
  • 绿鲤鱼与驴。
    使用合适的架构,合适的需要去实现适合的需求,不炫技,不装逼,活的久

    作者回复: 务实

    2018-11-15
    1
  • 王超
    有时候自己压根没觉得那是炫技,是大义凛然,最后发现自己挖了一堆坑,看了老师的文章,才知道啥是炫技,啥是克制。。这就是年轻么。。

    作者回复: 年经时都挺大义凛然的,填坑到天明常有的事^_^

    2018-09-25
    1
  • 云学
    clean code: 代码干净利落,逻辑直接了当,叫缺陷难隐藏

    作者回复: 这是比较理想的状态了

    2018-09-01
    1
  • javaadu
    今年在一个三四年的项目中开发,对于一段代码不想进行修改,就进行了重写,现在回过头来想想,这个决策其实不对,应该在原来的基础上优化

    经验教训是:想清楚再动手
    2019-12-11
收起评论
27
返回
顶部