加餐六 | 什么才是所谓的编程能力?如何考察一个人的编程能力?¶
什么是编程能力?¶
所谓编程能力,指的是把“逻辑”(或者说“功能”“业务”)翻译成代码的能力。所谓编程能力强,指的是,不仅能编写正确的代码,而且编写代码的速度很快,写出来的代码 bug 很少、性能很好、质量很高。
编程能力强的特征¶
- 能熟练使用编程语言、开发类库等工具,
- 思路清晰,面对复杂的逻辑,能够编写出 bug free 的代码,
- 能够合理地利用数据结构和算法编写高效的代码,
- 能够灵活地使用设计思想、原则和模式,编写易读、易扩展、易维护、可复用的高质量代码。
编程能力差的特征¶
- 往往逻辑思维能力比较差,面对复杂的逻辑,编写代码的速度很慢,而且容易考虑不周,写出来的代码 bug 很多,
- 更没有性能意识,不懂得如何分析代码的时间复杂度、空间复杂度,
- 更不懂得如何借助现成的数据结构和算法来优化代码性能。
- 除此之外,写代码的时候,几乎不考虑代码的可读性、可扩展性等质量问题,只追求能运行就可以。
如何考察编程能力?¶
从上述编程能力的定义及描述中,能很清楚地了解,考察一个人的编程能力的几个要素 —— 主要包含这样三个方面:
- 编程语言
- 数据结构和算法
- 设计思想、原则和模式。
白板编程¶
白板编程在外企面试中比较流行,国内有些候选人不怎么能接受,特别是工作年限比较长的候选人,一听说要写个代码,就觉得这是在“羞辱”他,觉得不应该从这么基础的东西考起。
只要是应聘一线技术研发岗的候选人,不管是资深工程师、架构师,还是技术 Leader,都要求他现场写一段代码。因为这是最直接、最有效检验这个人基本技术素养的途径。
考察重点¶
一般来讲,编程语言都可以快速掌握,所以,一般不把它拎出来单独考察,只是顺带着考察一下就可以了。 需要重点考察后两个方面:数据结构和算法,设计思想、原则和模式。
如何提高编程能力?¶
实际上,两个专栏《数据结构与算法之美》《设计模式之美》,就是为了提高编程能力而设计的。
- 《数据结构与算法之美》专栏教你如何写出高性能代码
- 《设计模式之美》专栏教你如何编写易读、易扩展、易维护的高质量代码。
数据结构和算法的练习¶
对于数据结构和算法的练习,推荐多刷 LeetCode 上的题目。
刷题不仅仅能加强你对数据结构和算法的掌握,还能锻炼你的逻辑思维能力、写出 bug free 代码的能力、快速实现复杂逻辑的能力,也能锻炼你的性能意识。所以,刷题不只是为了面试,刷题对这些能力的锻炼,都有助于你在平时的业务开发中写出好的代码。
设计思想原则和模式的练习¶
对于设计思想原则和模式的练习,就不像算法练习那样有现成的题库了。所以,要在平时的开发中进行练习。
比如,拿到一个功能需求的时候,先去思考一下如何设计,而不是上来就写代码。
写代码时,我们时刻思考代码是否遵循了经典的设计思想、设计原则,比如是否足够可扩展、是否满足 SOLID 原则、可读性如何等等。
写完代码之后,我们再思考一下,代码是否有进一步优化的空间。
做 Code Review 的时候,看到别人的优秀的代码,我们就去思考一下,有哪些值得借鉴的地方。
总之,在平时的开发中,我们要刻意地去做这种跟代码质量、代码设计相关的思考训练。时间长了,这种思考就能成为习惯、本能反应,慢慢地,你的代码能力也就不自觉地提高了。这一部分内容可以回过头去再看下第 100 篇,前面有非常详细的讲解。
总结¶
Tips
实际上,不管从事什么行业,要积累的东西都可以分为“变”与“不变”两类。“不变”的是内功,“变”的是招式。
我们要善于发现、持续积累那种“不变”的能力,而不是要去盲目追逐一直都在“变”的招式。