一个月前, 我在和团队的一位前端同学One On One中, 得知他目前对自己的成长非常困惑, 工作中大量重复的页面制作, 没有太高的技术含量, 业余时间的学习, 一方面感觉比较零散, 另一方面感觉学来学去, 好像就是那么点东西.
这位同学刚毕业半年, 自身的主动性是很不错的, 我就问他平时都学哪些东西. 他提到了ES6, Javascript设计模式, 以及一些时髦的框架. 以前的聊天中, 我了解他阅读过Javascript高级程序设计, 我就问他在这本书上花了多少时间, 他告诉我花了大概10个小时左右.
我给他列了一份大概的学习计划, 第一条就是希望他尝试在Javascript高级程序设计这本书上花费掉500-600小时.(如果掌握好基础, 那些花哨的技术, 可以很低成本的学习到; 如果不掌握好基础, 那些花哨的技术, 也只能学习到表面)
前两天, 我又和他进行了一次One On One, 他仍然很困惑, 花了4周左右时间, 读到了Javascript高级程序设计的第5章, 但是感觉仍然没有获取到什么新的知识. 我问了下面几个问题:
回答大概如下:
* 最大值好像是个14位左右的数字
* Number的方法列举了一些, 基本完整
* 因为Javascript中所有对象都是继承自Object.
* 这个真没有想过.
我跟他讲了Number是一个double, double应该取找对应的规范取了解它的设计, 计算机中存储的只有二进制数据, 类型是我们理解数据的依据, 不同的场景需要不同的理解方式, 所以才要有类型转换. 但并不是存储在计算机中的一个int, 当做字符串读取, 就能得到它的字符串形式. 涉及到字符串, 我跟他提了字符编码的一些基础, UTF-8编码规范的一些东西.
他似乎有一些懂我的意图了.
于是, 我问了最后一个问题, “你是不是在读书的过程中, 其实是有碰到一些挑战, 只是把它们给忽略掉了”. 他肯定了我的猜测.
16年年底, 我写过一篇文章-工程师成长之路:工作1-3年工程师如何突破瓶颈期? 文中, 我主要从软性素质角度, 分析工程师成长前期, 可能会面临的一些问题, 以及一些解决的思路.
在碰到上面这个问题之后, 我回想了过去自己的经历, 以及周围的同事. 其实, 从事工程师这个职业的同学, 大部分都是有很高的学习热情的, 尤其在刚工作的那两三年. 只不过, 后来他们的热情被逐渐的消磨, 才有了”三十五岁危机”, 才有了我在那篇文章中提到的”可能很多人终生都停留在成熟期”.
是什么消磨掉了他们的热情呢? 我觉得至少其中有一部分原因, 和前面这位同学的Case是吻合的. 他们以为自己努力了, 但是甚至都没有得到自己的认可.(这位同学努力的花费大量精力去阅读Javascript高级程序设计, 但4周后自己觉得没有进步)
所以, 我想写这篇文章, 分享自己在自学提升这条路上的一些经验心得.
总结我的自学经历, 我认为有五点是比较重要的:
一万小时定律, 是<异类>中提到的, “1万小时的锤炼是任何人从平凡变成世界级大师的必要条件。”.
这是一个现成的理论基础, 但是, 并没有看到哪个领域因此而量产大师.
因为, 一万小时意味着, 每天付出3小时专门的训练, 我们需要坚持10年时间.
正常本科毕业是22岁, 28岁左右就需要考虑成家, 30岁左右该有孩子了. 留给我们的时间非常有限. 所以, 如果你期望在工程技术领域, 有所成, 就应该趁年轻的时候, 最好从大学就开始实践一万小时定律.
因为, 越年轻的时候, 能够自主支配的时间越多.
我们对这几个阶段进行分析:
做个总账吧, 大学四年, 你可以轻松的拥有8000小时的时间去提高自己, 婚前6年, 可以有6000小时提高自己, 育前2年左右, 大概有1000小时, 育后, 每年应该就只有一两百小时的样子了.
所以, 如果你希望有所成, 如果你还年轻, 请慎重的规划好自己的这15000小时, 这是你最重要最有价值的资本.
一万小时定律, 其实也有质疑者.
“家庭主妇每天在做饭上, 投入约为1-2小时. 婚后生活约为40-50年. 所以, 家庭主妇在做饭上投入的时间大概有小两万小时. 但是, 他们并没有成为大师.”
所以, 一万小时定律也有额外的限定条件, 其中一条, 就是”长期处于学习区学习”.
“学习区”是一个美国人提出的概念, 人们要学习的事物, 可以分为三个等级:
家庭主妇的例子, 只是在重复相同的工作(舒适区), 所以不能成为美食领域的专家. 而在文首提到的例子中, 那位同学最后也认可我的猜测, 他在看书的过程中, 其实原本是有挑战的, 只是被忽略掉了.
其实, 这很常见, 当我们碰到有挑战的问题时, 总是希望用最短路径解决它. 这是人类的本能. 当碰到有挑战的问题时, 伴随着心理的不适, 我们本能的就希望尽快的摆脱这种状态.
而对于学习来说, 那个小的挑战带来的收益是很难评估的, 而忽略掉它其实并没有什么成本. 自然而然的, 我们就会选择放弃了. 当一个又一个小的挑战被放弃之后, 逐渐形成了习惯, 以至于, 每次学习, 好像并不能获得新的知识.
所以, 在学习的过程中, 我们需要刻意的训练自己, 让自己的潜意识, 就能够克服放弃挑战的本能.
这一点, 与”离开舒适区”息息相关. 我们的目的, 其实是进入”学习区”, “离开舒适区”只是一个步骤.
下一步, 就是要避免进入恐慌区.
前面提到我在正则表达式的学习上, 花费过超过200小时, 这200小时是怎么花费的呢?
再后来, 就是现在了, 在这个方向上, 我仍然有想要解决的问题, “学习编译原理, 能够掌握一种编译工具, 可以让自己更自由的描述规则”.
这是一个循序渐进的过程, 我认为这不单纯的是正则表达式的学习, 而是在逐步加深对字符串处理的理解. 从最开始只能粗浅的使用正则, 到后来理解它的原理, 再逐步涉及到到编译体系的边缘.
如果一开始, 我面临的就是”解析HTML标签”这样的问题, 那估计我早就被干迷惑了. 而这种循序渐进, 逐层深入的方式, 在不断让我进步的同时, 一次又一次激励让我产生更高的兴趣.
所以, 当你进行一项技术学习的时候, 也请仔细的拿捏, 到底哪里才是自己的学习区, 离开舒适区, 也不要进入恐慌区.
前面算过了, 从大学时代开始, 到你没有精力可用之前, 你一共有大约15000小时的资本.
这15000小时的使用, 应该需要你慎重的考虑, 当做一种投资去做这件事.
我到现在为止, 花在编程这件事上的时间, 应该在7000小时左右. 时间分配大致如下:
按照我投入的7000小时来看, 应该至少接近大师了吧, 然并卵.
我觉得这是我的投资失误. 我在Java体系和其他语言的学习上, 花费了5000小时. 但是, 在操作系统/网络/体系结构/数据结构与算法等核心基础方面, 投入的精力太少. 这些基础的相对薄弱, 就导致我现在做一些事情心有余力不足.
所以, 在你下定决心, 在学习区度过10000小时时, 请一定规划并经常Review自己学习的体系.
如果能够从头再来, 我会这么做这份投资:
当然, 青春一去不返, 空悲切.
关于一万小时定律, 有两个限定条件, 其一是上面提到的”长期处于学习区学习”, 另外一条, 就是”有效反馈”.
有效反馈的意义, 我觉得主要有三点: 1) 激励并培养更高的兴趣; 2) 修正不足; 3) 调整学习区.
第一点, 其实是建立对自己的心理暗示, 让自己持续的保持对所做事情的高度兴趣. 这一点, 不仅可以通过学习过程的正向结果来激励, 也可以通过其他方式来培养. 比如, 刻意的培养, 让自己更多的在兴奋状态下写代码, 身体形成习惯之后, 你就更容易在写代码时处于兴奋状态, 有更加积极的思考.
第二点, 以学习正则表达式为例, 学习了正则表达式的一条规则之后, 应该尝试用大量的实例去测试, 验证自己的理解是否正确, 每一个无法通过的case, 可能正好能为你带来新的知识.
第三点, 前面提到处于学习区非常重要, 有效反馈是调整学习区一个非常重要的途径. 当你在目前的学习中, 已经无法得到负向的有效反馈, 那就代表当前已经处于舒适区了, 应该尽快调整.
不过, 当你判断自己在某个方向已经处于舒适区时, 可能很难直接找到这个方向的下一个学习区. 此时, 建议换一个明确自己处于学习区的方向进行学习. 在你整体学习体系之下, 不同方向的知识应该是相辅相成的. 这就像盘山公路的S形设计一样, 即可以看到每个方向的风景, 缓解视觉(心理)疲劳, 又在不知不觉间, 用一种省力的方式, 攀至高峰.
本文的核心观点, 就是一句话: 有效规划自己的时间, 通过有效反馈, 让自己持续一万小时处于学习区学习成长.
我是几乎从零基础自学成长的, 成长过程中, 受到无数散布在网络上, 由陌生人发布的信息的帮助. 虽然最终没有大成, 但我也渴望能够帮助别人成长, 成为开源共享传承中的一个节点.
所以, 如果你认为这篇文章对你身边的朋友, 能够有所帮助, 请转发给需要的人.
nice是一家很酷的移动互联网公司,我们正在招聘后端工程师、Android工程师、iOS工程师、高级运维工程师、高级算法工程师、大数据高级工程师,相中nice可以发简历到([email protected])。