如果我们以发展的眼光来看待自身拥有的技能,
就会发现,
练习和使用是两个不同的概念。
我们可以不断练习,越来越熟练,
还可以花时间练习新的技能。
我们也可以越来越会使用已经学会的技能,
对自己的控制能力越来越强。
这其中隐含了一个客观事实在里面,
那就是技能是永远学不完的,
也永远练习不到足够熟练的程度。
因此,我们就需要在练习和使用之间找到平衡,
什么时候增加熟练度,
什么时候学习新技能,
什么时候练习如何使用它们,
怎样才能做到灵活运用。
能不能先上手
如果说计算机行业对比其他行业有门槛的话,
想必就只有一个了,
那就是,是否有能力把目前的疑问放下,以后再绕回来解决。
每个概念在第一次遇到的时候,
是依赖于以后某个未知概念才可以理解的。
因此,我们要首先把它们全都装入大脑中,
然后等时机成熟,触类旁通。
某个概念没有理解,就无法理解后续概念,
或者无法使用没有理解的概念,
这是软件从业者最大的障碍。
我们可以设想这样一个场景,
假如我们曾经理解过,但是现在印象模糊了,
那么还不是一样使用它吗?
直觉,和依靠不足的信息进行决策的能力,
也是需要锻炼的。
什么是基础
很多人都强调基础的重要性,
那么什么是基础呢?
对软件行业来说,哪些是基础呢?
基础,就是那些,
你感觉用不着,但如果成为专家是显然需要的知识。
是的,那些用不着的知识,
潜移默化的影响着你,
影响每一招每一式的施展,
这才是基础。
例如,我们在做Web开发,
那么网络技术,编译原理,算法,设计模式,等等都是基础。
它们能让我们跳出当前的场景看待问题。
那如果我们做编译器的开发呢,
那么形式语言理论,语义学,类型理论,数理逻辑,等等都是基础。
再深入下去还有,
可见,基础之下还有基础,像冰山一样隐藏在水面之下。
关键在哪
如果用一句话形容软件工程师的工作,
我想说,软件工程师,就是用DSL降低问题复杂度的人们。
各行各业解决问题的角度都有不同,
而软件工程师,独爱DSL——领域特定语言。
既然和语言有关,那就需要很强的表达能力,
像优秀的作家一样,词汇量固然重要,
但是如果要让人耐看,就必须表达的好。
因此重点在于设计这些DSL的描述方式上,
在于如何使用已有的知识,进行整合。
这是一种创造性的活动。
拿个篮球活动的例子来引出问题吧,
我曾问过高手们一个问题,
“你怎样保证失误率那么低的?”
“两个办法,训练时努力降低失误率,比赛时,不用失误率高的动作”。
这给了我很强的启示,
原来如何使用是一门艺术,
使用方式决定了最后的表现。
那么路线是什么
综上所述,我们得到了一个从入门到成熟的行走路线,
首先,我们要不求甚解的往大脑中塞下很多东西,
并强迫自己使用,还要有足够好的恒心让自己一遍一遍重新回来琢磨它。
然后,我们要向下挖掘那些看起来没用的,但成为专家显然需要的知识。
把这些知识放在水面下,用露出的那一点点“细枝末节”去应付浮躁的潮流。
这样就不会随波逐流了,水深才会心静,心静而气自闲。
最后,我们把重点放在表达上,
不要使用那些不熟练的知识,它们是训练时攻克的目标。
要有能力在紧要关头只用熟练的知识解决问题。
为什么会失误?是因为本来就没有多大可能它会成功。
那么为什么还要用它,而不去选择其他成功率高的方式?
因为没有成功率高的方式吗?那为什么不去训练?
没有什么好练的啊?把那些计划以后再练的练了吧。
这样就变成了一个以训练为本,重在表达的正向循环了。
结语
做到随机应变,并不是一件容易的事情,
要么基本功太弱,要么没有控制自己的能力总是想使用不纯熟的技能。
没有在比赛场上训练的选手,
也没有线上环境试错的码农。
大家都在打基础,练表达,
基本功诚然重要,但是打基础大家都懂,不是盲区,
重在表达,就很少有人意识到了。