本文转载自公众号“读芯术”(ID:AI_Discovery)。
提高编程技术离不开大量的练习,这是在专业上有所提高的唯一途径。但在此之前,我们最好先掌握理论知识,再将其应用于实践,这样你的理解会更加深刻。
在软件开发行业中,人们常常通过阅读文章、书籍、参加会议、尝试新的库、模式和范例不断提升自我。笔者为了提高编程技能阅读了颇多书籍,本文为你精选了一份书单,能够帮助你编写简练代码,并在职业生涯中达到新的高度。
罗伯特·塞奇威克的《算法》
这本书讲解了基本的算法,如搜索、排序和绘图等。计算机科学的所有学生都要学习数据结构和算法,这是该领域最基础的部分。
本书中会解释搜索功能的实现和各种排序算法之间的差异。其中有一节是关于图论的,读完之后,你将清楚如何遍历树并找到最短的路径。认识这些算法并应用它们,会对你下次的求职面试大有益处。一位有经验的软件工程师需要有能力在特定的情况下使用合适的算法,并预知其性能。
如果你不喜欢读文字而更喜欢听课,Coursera 上有一门由该书作者提供的免费课程值得一看。(https://www.coursera.org/learn/algorithms-part1)
史蒂夫·麦康奈尔的《代码大全》
合上这本书时,笔者惊讶于自己从未听人解释过其中一些至关重要的基本概念。下面举几个例子。
例如,只在需要使用变量的地方声明和初始化变量;不需要声明变量时,只需要在代码中赋值。变量应该具有最低可见范围,这样做的好处是代码的可读性会得到很大的提高,队友将对此感激不尽。
另一个例子是如何有效地使用if 条件。它们用起来很简单,但能显著降低代码的可读性。
- if (paymentComplete) {
- if (errorCode != 0) {
- ...
- } elseif(errorCode ==422) {
- ...
- } else {
- if (showError) {
- ...
- } else {
- ...
- }
- }
- } else {
- ...
- }
示例中嵌套了太多的if条件,难以遵循和测试其逻辑。在学习编程时,人们总是关注if 条件如何工作以及何时使用,但没有人告知我们它被滥用的情况。本书对此给出了一些建议:避免太多嵌套块,考虑将代码分解为函数,并检查 switch..case 语句是否合适(编程语言是否支持)。
尼尔·福特的《功能的思考》
据维基百科,第一种函数式编程语言是在20世纪50年代后期开发出来的。从那时起,函数式编程的范例逐渐普及起来。这意味着数据开始通过函数进行转换,可以组成多层级数据。
不过,对初级开发人员而言,构建无状态序列很难。即使是对于经验丰富但从未使用过函数式编程的开发人员来说,编写高效且可维护的函数代码也是一个挑战。下面是科特林中对偶数的平方求和的例子:
- val input = listOf(1, 2, 3, 4, 5, 6)
- val result = input.filter { it % 2 == 0 }
- .map { it * it }
- .sum()
我们可以通过一般的声明式的方法完成,但这需要编写一些循环并保存其中间状态。以功能性的方式编写代码更简单清晰并愈发无状态。除此之外,认识到函数的顺序在性能中的作用很重要。看看示例,当前面调用 filter() 方法时,后面的函数已经在较小的数据集上操作了。
这本书解释了最普及的函数,并介绍了该如何有效地应用它们,以及如何以函数的方式编写简洁的代码。本书适合已经具有一些编码经验的开发人员。
图源:unsplash
软件工程领域从不缺少好书,笔者推荐的这三本书也是可以找到替代品的。但读完文中这些,足以让你交付可读可伸缩的代码了。