100年后的编程是什么样子的?(上) (2)

从前端构建工具的趋势来看,grunt是先烈,但是日渐式微被 gulp 赶超,原因一是基于文件IO的流程比基于 stream 的流程慢很多,二是因为 grunt 的基于配置的方式比 gulp 的基于“正常 JavaScript 代码”的方式更固化,风格上不讨人喜欢。

img

而 webpack 兴起是因为 JavaScript 模块化编程这一趋势。webpack 和 Browserify 差不多是做一样的事情,就是把一个一个的 JavaScript 模块打包成一个文件(这一过程称为 bundle),然后在浏览器环境中使用。其实在服务器端的 JavaScript 模块也可以打包,不过没有太大必要。本来 JavaScript 原生不支持模块,所以就有了第三方规范(CommonJS之类的),后来 ES6 新增了模块功能(就叫 ES6 Module),所以各种各样的模块要在一起协作就是要解决的一个问题。Webpack 和 Browserify 就是解决这一问题的。

img

我想,可以得出一个结论是,无论是编程语言,还是配套的框架,和对应脚手架,都长期处于变化之中。有一些框架和脚手架能够顺应一时潮流和风格,也许能暂时拔得头筹,但很容易就会被后起之秀(vue、webpack)超越,这样的迭代变化在未来也不会停止。

所以,唯一能面向未来的知识只有“又快又好地学习”的能力。

img

说到学习,我收到一个读者邮件。这个读者硕士毕业之后找了一份C++的工作,但是产品方面不太喜欢,希望转行做 Python Web 开发。

我认为这个读者焦虑的主要原因在于两点:

从 C++ 到 python 转型学习的时间其实还比较短,远远不到10000小时。技能还不是很熟练,这时看到一些招聘要求出现大量不理解的词,就觉得理想与现实的差异太大。

学习过程比较独立,没有从做中学。

img

我说一下我理解的“编程”,可以分解为三点:智力、知识和经验。

img

具体如下:

img

具体到“编程”这门手艺而言,这三者都不可能单独去提升。也就是说不可能只提升经验,而不去学习;也不可能只是学习,而不去动手提升经验。

好的学习方法是循环式地,学习一些新的知识,然后边做边学(learn by doing),在这过程中再加入一些思考,提升智力。

img

对于有一些工作经验的程序开发者来说,可能已经进入这个循环中,遇到了一些瓶颈,这时候可以对照上图来看,现在卡在了什么地方。

对于初学者,或者从新开始学习一个技术栈的有经验者,就需要有一个学习路径。也就是“地图”,以及“我在哪里”。下图是一个学习React-Native的蓝图示例:

img

开启循环之后,就采用下面模式来循环。

img

我在2010年读到Outliers(局外人)的时候,学习到了一个终身受用的概念,就是10000小时定律。

这个定律大家都听过,好像很简单嘛,一句话就概括了一本书。

其实不是的,这本书里有很多发人深省的内容。比如讲了比尔盖茨和乔布斯都是同一年代出生,周围的环境和他们自己的兴趣给了他们练习10000小时的机会,才会有机会成为微软和苹果的创始人。

10000小时也不是重复重复再重复,而是要持续在learning zone去练习。不是在comfort zone枯燥地重复已经会了的事情,更不是在panic zone去恐慌。

img

我就这样跟这位读者说明了我的观点:

放松焦虑心情,工作才一年多,要成为python web开发的大师需要10000小时;

要找到一个python工作不需要10000小时,基本上1000小时可能就够了,但是要边学边用才有效;

开始用,而不是一直学。我看到你fork的awsome-python,里面的工具很多,不要一昧追逐,可以看一些好的项目,自己去搭建博客、爬虫、CMS等;

持续提交你的github代码,看到项目的功能越来越多,也能减少焦虑;

每天2小时也有点少,最好能增加到4小时。

过了一天,这位读者竟然给我送了一张亚马逊礼品卡表示感谢。所以我把这个故事分享给大家,也希望大家有所收获。

img

再讲一个我亲身经历的例子。

我为了保持对算法和数据结构的“感觉”,偶尔会在 LeetCode 上找一些题目来做,特别是网站现在支持 JavaScript 了,就更加方便。

有一天我看到这样一个题目。

img

大家先不要看我的答案,来想一想这个题目怎么解。

我的第一次解法很直白,每次需要计算 i 到 j 之间的和的时候,就循环计算一次。心算了一下,感觉应该没有问题,就提交了。

img

然而,系统提示计算超时!

我看了一下超时的测试案例,是一个超长数组。更重要的是,系统对这个对象进行了多次求sumRange运算,导致超时。

img

唔……所以怎样才能不要运行那么多循环呢?各位开动脑筋想一想。。。

重点是题目中的“提示”部分。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyyzgz.html