代码精进之路
范学雷
Oracle首席软件工程师,Java SE安全组成员,OpenJDK评审成员
立即订阅
6352 人已学习
课程目录
已完结 47 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 你写的每一行代码,都是你的名片
免费
第一模块:代码“规范”篇 (16讲)
01 | 从条件运算符说起,反思什么是好代码
02 | 把错误关在笼子里的五道关卡
03 | 优秀程序员的六个关键特质
04 | 代码规范的价值:复盘苹果公司的GoToFail漏洞
05 | 经验总结:如何给你的代码起好名字?
06 | 代码整理的关键逻辑和最佳案例
07 | 写好注释,真的是小菜一碟吗?
08 | 写好声明的“八项纪律”
09 | 怎么用好Java注解?
10 | 异常处理都有哪些陷阱?
11 | 组织好代码段,让人对它“一见钟情”
12丨组织好代码文件,要有“用户思维”
13 | 接口规范,是协作的合约
14 | 怎么写好用户指南?
15 | 编写规范代码的检查清单
16丨代码“规范”篇用户答疑
第二模块:代码“经济”篇 (14讲)
17 | 为什么需要经济的代码?
18丨思考框架:什么样的代码才是高效的代码?
19 | 怎么避免过度设计?
20 | 简单和直观,是永恒的解决方案
21 | 怎么设计一个简单又直观的接口?
22丨高效率,从超越线程同步开始!
23 | 怎么减少内存使用,减轻内存管理负担?
24 | 黑白灰,理解延迟分配的两面性
25 | 使用有序的代码,调动异步的事件
26 | 有哪些招惹麻烦的性能陷阱?
27 | 怎么编写可持续发展的代码?
28 | 怎么尽量“不写”代码?
29 | 编写经济代码的检查清单
30丨“代码经济篇”答疑汇总
第三模块:代码“安全”篇 (14讲)
31 | 为什么安全的代码这么重要?
32 | 如何评估代码的安全缺陷?
33 | 整数的运算有哪些安全威胁?
34 | 数组和集合,可变量的安全陷阱
35 | 怎么处理敏感信息?
36 | 继承有什么安全缺陷?
37 | 边界,信任的分水岭
38 | 对象序列化的危害有多大?
39 | 怎么控制好代码的权力?
40 | 规范,代码长治久安的基础
41 | 预案,代码的主动风险管理
42 | 纵深,代码安全的深度防御
43 | 编写安全代码的最佳实践清单
44 | “代码安全篇”答疑汇总
加餐 (1讲)
Q&A加餐丨关于代码质量,你关心的那些事儿
结束语 (1讲)
结束语|如何成为一个编程好手?
代码精进之路
登录|注册

03 | 优秀程序员的六个关键特质

范学雷 2019-01-09
上一讲我们从“五道关卡”的角度讨论了如何写出优秀代码这个话题。对我们每个程序员个体来说,其实第一道“程序员”关卡最重要。没有优秀的程序员,就没有优秀的代码。那么,什么样的程序员才是优秀的程序员呢?
如果去问一个程序员,得到的答案有可能是,“写的一手好代码,做过几个大项目,设计、编程样样不在话下”。如果去问程序员的同学,得到的答案有可能是,“刚毕业就去了大厂,中秋节发的月饼羡慕死个人” 。如果去问程序员的同事,得到的答案有可能是,“人挺好,干活挺快的” 。如果去问 HR,得到的答案有可能是“省钱、出活”。
你看,这些答案都没什么毛病,各有各的道理。你的答案是怎样的呢?我自己工作中见过特别多优秀的程序员,从他们身上发现了不少共性的特质,我总结为以下六项,下面一一给你介绍。

掌握一门编程语言

第一点很重要,优秀的程序员需要写的一手好代码,再简单来说,最起码需要能够熟练操控一门编程语言。
我们都会使用筷子,吃饭的时候,我们不需要有意识地控制着筷子的力度、开合和角度,也能准确地使用它。这个使用筷子的效率,是我们小时候长期练习的结果。每个人拿筷子的方法可能会有些差异,但是都不影响我们现在精准地、高效地使用筷子。
编写程序也是这样。熟练了之后,很多语法、语句在我们编写程序的时候,会下意识地就流露出来。如果我们设计一个线程类,下面的代码里,我觉得至少 class 和 extends 这两个关键字的使用是不需要大脑有意识地参与的。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《代码精进之路》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(20)

  • Sisyphus235
    程序语言是人和机器的沟通语言,和汉语英语等自然语言的工具属性是一致的。不同的是机器更容易被理解,确定性更强,我们也更可能精确理解二进制背后的逻辑,而与人沟通的不确定性更强,每个人都不同。前者是硬技能,后者是软技能。
    沟通是工作最重要的部分,与机器沟通先存储大量不变的知识再结合实际任务处理,与人沟通要理解对方的特点和当下的心境再共同完成任务。

    作者回复: 这个角度很赞👍

    2019-01-09
    21
  • pyhhou
    感觉自己的硬实力还是不太够,然后时间分配上也不知如何是好,小公司没有一个很好的技术框架,也没有经验丰富的前辈加以指导,对公司整体的业务也不太清楚只清楚自己手头的任务,而且自己的任务的需求一直都在变化,太多的技术都觉得可能需要用上,但是学起来却不知从何下手,有些时候知道需求,但是从来没做过类似的东西,不知道每一步具体该怎么实现会遇到哪些问题,写代码之前的学习时间都比任何一个环节都要多,学完了还得思考怎么去用,毕业工作不到一年,自己一直处在这种迷茫的阶段,望老师指点

    作者回复: 我们都是这么过来的。先从手头的小问题开始,一点一点的把学到的用上。 比如说,我们以后讲标识符的命名,学完了,你就看看手头的代码,命名是不是合理的,能不能改进。 在后面,我们还会讲这么编写安全的代码,比如检查外部数据的有效性,也是可以立即用上的。 每一篇,我们都有一个检查清单,你也可以对照对照自己的代码,看看自己什么地方做的好,傲娇一下;什么地方,还可以更好,改进一点。

    不用着急,每次进步一点点,很快就变成优秀的人了。 最怕的是,停下来,没好奇心了,没怀疑精神了。

    2019-01-09
    11
  • beiler
    您好,请问会讲一下包的名字划分解决方案和模块归类的方法吗?

    作者回复: 这个问题没有讲到。你可以参考JDK的包的命名和模块归类。包名可以使用倒置的域名加模块名,比如:java.net, java.lang, com.sun.net, sun.security.ssl。模块的归类大原则是按照功能划分,工具类的,放在util下,比如java.util。需要注意的是,公开接口和内部实现,尽量使用不同的包,这样便于管理。比如,javax.net.ssl是公开接口,sun.security.ssl是内部实现。

    2019-02-22
    4
  • 秦凯
    “解决现实的问题“的观点特别认同,个人也认为程序员应该具备的是用计算机解决现实世界问题的思维,将现实世界的问题转化为计算机可解决的具体方案。而将方案落地的过程应该是,使用计算机、编程语言、数据结构与算法、协议等底层抽象工具封装成一个具体的用户可使用的工具的过程,这个具体的工具本质上是对用户问题解决方案的一个封装。

    作者回复: 赞!

    要盯着用户有效需求。 我们后面还有一小节讨论需求问题。

    2019-01-10
    3
  • 轻歌赋
    才参加实习,公司比较小,没有质量管理,是的,没有。完全是代码能跑就行。来这已经3个月了,虽然项目代码都能写,而且时不时还能使用一些新学到的jdk的新工具包写代码,但是仍然感觉对自己写的代码的稳定性不敢保证,虽然很少错,可是还是很担心。想问问老师,如何在身边没有其他评审的情况下,提供一些自己检查代码逻辑bug的方法呢?而且对业务分析不熟悉,经常会出现建表少了某个字段的情况,请问老师有没有什么相对系统化的设计方面的知识可以学习呢?

    作者回复: 每一篇结束,我们都会总结一个检查清单,你可以使用这三个清单检查代码。 有了三个检查清单作为基础,你可以扩展这个清单,遇到好的经验就加上去,过上一段时间,你就能积累大量的好习惯。

    另外,认真检查编译器的警告和IDE的警告,这些警告,一般都是验证了的编码经验,你消除了警告,就学到了新东西。

    编码规范,也有IDE插件,比如阿里巴巴Java编码指南的插件。找找看有没有你喜欢的插件。

    专栏的小伙伴们,能不能帮着推荐些设计的书籍?

    2019-01-11
    2
  • Neal
    要做自己才能做的事情真是醍醐灌顶,项目中总是前后端兼顾,导致自己后台进度一直很慢,很累,现在我终于放下前端,专心于后端的迁移工作上,渐渐发现,前端没了我也没什么要紧的。

    作者回复: 我自己花了很多年,才懂的。

    2019-03-10
    1
  • 小文
    文中说解决现实的问题,如果一直沉浸于解决现实的问题,总是解决手里这一摊也不行,哪天干着干着突然发现自己岁数大了,可是本事没长进,还是会那些个技能解决着自己的一摊,万一领导给你个别人任务,或者跳槽了接触了其他的一些任务不会点技能是真不行啊,程序员还是不能停止学习啊,唉……

    作者回复: 解决现实的问题,不能沉浸于只解决领导要求的问题。程序员是一个要终身学习的职业。

    2019-02-14
    1
  • 刘滨涛(陆逾)
    优秀的程序员能在团队里正能量影响他人,协同他人一起创造价值。不仅仅解决业务需求,也能去创造或者开发一些对公众有益的东西。能力越大,责任也就越大。

    作者回复: 责任越大,意味着大家越需要我们。 这就是竞争力的一部分,对吧。

    2019-01-17
    1
  • 堵车
    这篇文章讲到优秀程序员的对工作的选择。我记得前两年,我的工作就是不断地写业务,改代码,满足领导的奇思妙想。称之为小步快跑,多版本试验,快速迭代。两年时间里,没有沉淀任何东西。所以这样的环境不适合成为优秀的程序员吧?

    作者回复: 环境很重要,我觉得更重要的,还是自己要有改进环境的意识。小公司的存在很多很多的问题,可是这些问题,也正是我们的机会。把问题解决掉,就是自己脱颖而出的机会。

    有时候,我们常说一句话,就是,每一次危机都不应该浪费。 什么意思呢,就是危机虽然让人头疼,但是危机来的时候,就是我们打怪升级的时候,就是我们学习应对危机的时候。 解决小公司的问题也是这样的。

    如果刚毕业,我们就从解决一些小问题开始,比如怎么把代码写的更漂亮,然后琢磨琢磨让其他的人代码也漂亮,然后再琢磨琢磨让整个团队的代码更漂亮,然后再琢磨琢磨让整个公司的代码都漂亮。然后,再解决更大的问题。

    2019-01-12
    1
  • 小峰
    突然发现我师傅就是一个这样的人。

    作者回复: 👍厉害了,你的师傅!

    2019-01-12
    1
  • Aliliin
    深刻体会到沟通的重要性。
    需求沟通不明确,提问都表达不清楚,,总是会把时间浪费在无用功上。

    作者回复: 哈哈,看来是受过需求折磨的。有个说法我比较喜欢,信息传递会损耗,多几道环节,就变样了。 软件开发,要设计好沟通过程,减少损耗啊。

    2019-01-10
    1
  • Kai
    有一本书 程序员的软技能,写得很好。其中就说到写blog一是个非常好地锻炼沟通,表达,提升知名度和整理思维的过程

    作者回复: 是的,有时间多写写blog。

    2019-01-10
    1
  • Dream
    优秀的程序员,还需要一个优秀的上司,我习惯每次在编码前把思路理顺,发现潜在的问题和风险,其实正在编码可能占用不到工期三分之一的时间,但是目前领导一看前期根本没在编码,就觉得比较闲,拼命的压缩工期和增加任务,有点疲倦了

    作者回复: 是的,团队的氛围很重要。😄过程而不是目标导向的上司太操心。

    2019-01-10
    1
  • 王智
    自我感觉没有一个满足,哭.
    第一点,掌握一门编程语言,对于Java,基础功学过了,当时记住了,过一段时间就忘了,难受.
    第二点,我赞同,我感觉程序员就是现实和网络的桥梁,就是把现实的问题映射到网络上进行解决.
    第三点,身为一名刚刚工作的程序员,没有这个胆量和能力.
    第四点,不能坦然的面对自己的问题,这点一定要改
    第五点,只要在我会的知识层面,还算是可以依赖
    第六点,哭泣,定的计划都很难完成,一旦有了任务,计划全乱了套了.
    还得继续磨练,加油加油

    作者回复: 我们都在修炼的路上😊,先有意识和目标。加油💪

    2019-01-09
    1
  • C J J
    熟练甚至精通一门编程语言,再横向拓展其它能力,毕竟要先保证不丢饭碗;公司不养闲人或者说不养贡献值低的人,我们要能够为雇主带来收益,为公司排忧解难;对于个人发展而言,我们要做时间的主人,把时间花在重要且有价值的事情上,学会说不甚至是减法;另外,我们要学会抱团,与队友友好合作,帮助别人成长,同时也成就了自己。

    作者回复: 是的,有多赢思维的,走的更快、更远。

    2019-01-15
  • 落叶飞逝的恋
    不管是否熟悉这个系统,但是遇到问题,能够快速定位系统问题所在,并提出解决方案。就是优秀的

    作者回复: 这是超优秀的了😄

    2019-01-14
  • 小田
    优秀程序员的特质小结
    # 硬指标
    - 优秀的编程技能
    - 解决问题能力
    - 认知和发现问题的能力
    # 软指标
    - 为高效推进目标进程,作出合适的权衡和妥协
    - 团队协调能力
    - 时间管理能力
    2019-01-12
  • 赌神很低调
    时间还是没管理好,同时带两个小项目,做开发做管理走流程,杂事正事都多,同时还要调研技术。搞得有时候心里很慌。

    作者回复: 流程做好,研发过程也多些自动化。

    2019-01-09
  • Being
    掌握一门语言,能够解决问题,定位问题,沉静的前行者,可依赖的伙伴,时间管理者。每一点都互相关联,相互推进,形成优秀品质的集合,融汇在优秀程序员身上。
    谢谢老师,获益匪浅

    作者回复: 不谢,总结的很好👍

    2019-01-09
  • 虢国技匠
    打卡
    时间和精力有限,提高自身技术判断力,选择好方向,深入的干下去

    作者回复: 加油💪

    2019-01-09
收起评论
20
返回
顶部