剑客
关注科技互联网

软件开发技艺精进之路

软件开发技艺精进之路

简评:作者用一个易于理解的结构来描述编程的技艺层次,以强调编程基础的重要性。作为非 CS 科班出身的我表示,要找时间补一补数据结构与算法了。

软件开发的复杂度在一天一天地增长。几乎每年都有新的框架出现(像 AngularJS, ReactJS),有新的构建工具(像 Webpack, Rollup)。即使是 Javascript 也是每年都有新版本(ECMAScript 2015, 2016, 马上就来了 2017)。

同样的情况也出现在软件开发的其他领域。

例如移动应用开发。2 年前 Apple 推出了新的编程语言 Swift。iOS 操作系统几乎每年都会放出新版本,有新的功能与 API。

这对软件行业是好事。但是对于我们软件开发者来说,是个巨大的负担。

很遗憾,人的智力的可能性是令人佩服的,但也是有限的。你不能(也不应该)懂得所有的新框架与构建工具。

软件开发者能够做什么呢?答案是 – 采取有效的学习策略:选择编程基础。

编程基础包括算法、数据结构、编程语言知识。

如果你想要成为牛 B 的程序员,毫无疑问你应该持续地掌握流行的技术(像 React, Redux, Angular)。与此同时,放同样多的精力在常规基础上,如算法、数据结构、编写可扩展与清晰代码的原则。

这篇文章是我本人(原文作者)在处理开发复杂性方面的思考。你也会找到对于软件精进过程的有意思的划分,我把这些叫做:倒三角形、矩形、正三角形。

1. 概念

编程基础的一个重要部分是算法。算法是对操作的逐步描述,这些操作应该被执行以得到结果。

具体地说学习算法是个有价值的体验。学习与精通算法可以培养解决复杂问题的直觉。

强大的直觉是牛 B 程序员的标志。当然这与经验与原则与训练是分不开的。

数据结构也是另外一个基本的部分。学习数据结构让我们知道如何正确地表达一个应用中的信息。

恰当选择的数据结构有非常大的好处。它使得管理数据的代码更加简单,易于维护。数据处理、存储查询的操作更加易于实现。

优质代码由有效的算法与方便的数据结构组成。

2. 初学者:倒三角形

为了易于表达,我们把编程能力划分为简化的场景:

  • 基础:所有相关于算法、数据结构、计算机科学问题、应用设计原则(SOLID, KISS, DRY, SoC)、扩展性。
  • 语言:所有相关于编程语言(Javascript, Swift, Java),语法、操作符、变量、编译器。
  • 框架:所有相关于框架(AngularJS, ReactJS, Cocoa Touch)与平台(Browser, NodeJS)。

第一个软件开发能力水平是初学者,他们可以表示为倒三角形。

软件开发技艺精进之路

3. 熟练工:矩形

软件开发技艺精进之路

4. 专家:正三角形

软件开发技艺精进之路

5. 建议

流行框架甚至编程语言迟早会过时。他们将会被更好的工具所替代:这是进化的必然结果。你能够做的事情就是把重点放在基础上。

当然基础学习起来有些难。有些算法难于理解与记忆。我的建议是「玩得开心」:你可以多次去阅读一个算法。想着其好处可能导致一个特殊的数据结构(翻译得不对?)。挑战自己,变得越来越牛。

不管基础是难的这个事实,有个愉快的奖励:它不会经常改变。从 80 年代甚至 70 年代创建至现在,算法与数据结构没有什么重大的改变。一次性学习透了,然后不断重复,你就在正确在道路上了。

建议阅读原文。

以上内容编译与节选正 The path of software development craftsmanship .

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址