Contents
  1. 1. 成长足迹
  2. 2. 思维模式

最近,李笑来写了一本书「自学是门手艺」,还开源了。这本书是以学习 Python 的切入点来教如何自学编程。

回顾了一下自己自学编程的经历,我也想补充一下自己的观点。

成长足迹

我还很清楚记得,在第一家公司,CORESOLUTIONS,最开始承担的工作任务。因为,当我问 Leader 我做出来的页面是不是他想要的效果时,他脸上的那一丝惊讶的表情,和我内心的那份窃喜,深深烙入我的内心。

这个工作任务是在公司内部打造的 ERP Web Application 的中实现某个页面。那个系统的页面,是由公司通过 JAVA 自研的 UI 渲染组件,在 JSP 里生成 HTML 来实现的。所以,网络外面完全查不到参考资料,我只能参考系统已有的页面和代码。不过,大概只花了半天,我就把页面模仿着做出来了。

之前我可没怎么写过 JAVA,我真正的编程生涯可以说是从进入这家公司后才开始的。因为我是非科班出身,底子差,怕被他们发现我太搓,所以不敢轻易问问题。全靠自己不断尝试,憋着劲自学 Java,JSP,JavaScript 和 DOM 等语言和技术。

虽然不是计算机科班出身,但是相比很多同事朋友,我学习新东西的速度算是比较快的。所以,我在这个公司待了差不多 8 年,期间公司经常让我参与不同的项目,接触的东西很杂,学了很多技术,也做了很多项目。而且很多情况下都要现学现用。

我带过测试小团队;在公司资深顾问集体跳槽后,当过技术支持;用 BI 和 Crystal Report 做过数据仓库的项目;用 Powerbuilder 做过 CS 架构的系统;当然也用 J2EE 做 BS 架构的 ERP 系统,等等。

最近的 2016 年中去了北京帮笑来做一块听听,用 Node.js。目前回到珠海,在企业内参与联盟链相关的项目开发,用 Hyperledger Fabric, SpringBoot 等技术。

虽然和外面很多大神相比,我还是差很远,但是通过对自己,同事,和带过的新人的观察,我发现影响学习速度的其中一个因素是思维模式。

思维模式

我说的模式其实就是:

  • 整体到局部
  • 局部到整体

除了编程,很多其它技能的学习,也都可以运用这两种不同的模式的。比如说,画画。

儿童最开始画画的时候,都是粗线条,大轮廓。随着年龄的增长,线条,轮廓慢慢变得精细,也有更多细节的填充。这个过程,是由人的感官,和肢体控制能力的发展水平决定的。所以,不少学习画画的教程,也是从构建物体的轮廓开始。这就是从整体到局部的过程。

但是,一本很出名的书,「Drawing on the right side of the brain」,里面教授画画的技巧,则是把要临摹的图像上下倒置,强迫自己不看整体,只是从一点点的局部画起,最后才构成一个整体。是不是有点难以想象,或者不可思议?但是,如果尝试过,你会发现此方法的效果竟然会出奇地好。因为,每次只专注于一个小局部,把握好相对比例,偏差就不会太大,最后出来的整体效果也肯定八九不离十。这比一下子要掌握大轮廓更容易。

所以说,同样的技能,是可以运用不同的模式来学习的。只是,不同的技能,某种模式可能会稍微占有优势,至少在刚起步的阶段。而且,每个人习惯使用的思维模式是不一样的。那么,如果能够顺应技能的特点和自己的习惯,自学就很可能事半功倍了。

前面提到的我自己的第一个工作任务,之所以能那么快完成,是因为我懂得从整体理解代码结构,猜测局部的功能,然后套入自己的需求,只更改相关的部分,来做出自己的页面。相反,如果我深入查看每一个类和方法调用的细节,就会迷失在庞大的代码库,和错综复杂的相互引用之中。

自学编程,我认为应该从整体到局部,再从局部回到整体。这两个模式看起来是反着来,但对于编程来说,却又相辅相成。

只盯着任务细节,没有整体的概念,很容易形成只是按指示工作,不考虑对错,或忽略了其它方面的思考。而只看整体,不深入细节,又会导致知其然,而不知其所以然

那如何才能把握好整体呢?这和我之前写的关于编程学习能力的文章也有关,有兴趣的朋友可以看看:

学习编程需要具备的基本能力 - 抽象
学习编程需要具备的基本能力 - 问题分解
学习编程需要具备的基本能力 - 正确提问

Contents
  1. 1. 成长足迹
  2. 2. 思维模式