一、目标驱动
在flask实践系列的第一篇文章工程初始化一文里,我并没有说明为什么要安装那些软件以及相关的依赖,这是因为我之前自学的时候容易掉入一个坑:我很想按我们线上标准做一个网站上线,然后发现需要用到很多技术,每涉及一种技术,又去了解它背后的原理,以及它的一些依赖知识,再去挖掘同类产品,再去对比选择,挨个试一遍,就此步入苦海无涯的处境,迷失在知识的海洋里丢失了最初的方向。
所以在实践系列,我们的第一目标是用flask + vue开发出一个可用的小网站上线使用,探索期间会了解到linux、mysql、redis、sqlalchemy、ansible、docker等等各种东西,但我们只关注跟我们目标相关的。
给自己的教诲:做任何事前,先确定目标,并把目标放在最显眼的地方,加上时间期限。
二、要适当地不求甚解,而不是刨根究底
拿开发一个网站举例:
首先,一个网站的整体架构,是一个公司的技术团队经过数年时间的迭代与进化,不断地积累得来的,一个人不可能在短期内积累这么多知识。这里要注意哦,技术团队里面的人,往往在最初就已经是这些领域的资深人士,所以这个积累还应该包括他们之前的学习与经历。为什么公司花高价招一个技术专家?其中很重要的一个原因是买他们的经验、买他们的积累嘛。所以不要妄想你可以以一顶百、可以全盘消化整个公司比较完美的线上方案。
其次,一个网站往往至少包括:开发(前端、后端)、测试、运维三个大工种,数十种小岗位,不同岗位的人术业有专攻。所以在多年的迭代过程中,还包括了他们根据经验做的一些舍。而一个人的经历是有限的,如果你想要把这些都学透了,知道怎么取和怎么舍,再来开发你的网站,黄花菜都凉了,到头来还是啥都不会(因为你学到的东西,在对应的领域已经过时了,一个人几乎不可能在所有的领域都能跟上时代前沿)。
所以如果有教程(网上教程或官网示例)教我5分钟把一个东西用起来,就第一时间用起来,先不要太过深究细节。
给自己的教诲:在实现目标的过程中,要从外界找工具,而不是找解剖对象。
三、动手做一个可用的产品,把它当作考试
精益创业这些年越来越受创业公司青睐,精益创业主张快速上线快速迭代,践行MVP原则(最小可用原则)。我这里也跨学科地借用一下精益创业的理念,将它应用到我们的学习当中,叫精益学习。
精益学习,追求快速做一个可用的产品,不追求面面俱到,用我们学习到的东西,使之可用即可。因为我们只是学习技术,这个产品不需要很有创意,可以是老掉牙的博客或其他你在市面上能看到的任何东西。
很多人(包括我自己)毕业之后也在不断地学习,但总觉得不能像学生时代一样,在短期内学会多门知识。我后来思考为什么会这样呢,想到的原因有两个,第一是工作占用大量的时间,学习时间变少;第二是没有课后习题与考试。
其实学校里面的学习方式是非常高效的——学习一个知识点后做作业加以巩固,再阶段性地通过考试加强对整体知识的记忆与应用。为什么在学校要以这样的方式学习,总是有它的道理的。
给自己的教训:学习一项新技能的过程中,给自己考个试——做一个可用的产品。
四、先最小可用,再逐步完善
目标太大,往往被吓倒,导致还没开始就放弃了。
比如我要做一个在线笔记本,过程可能应该是这样的:
- 能录入与编辑:编辑其实就是查看,所以就起到笔记的作用了
- 只读查看:对外展示的话,直接显示一个编辑框显然不太合适,所以再增加查看页面。
- 现在markdown很流行,也确实很方便,所以我们可以加入对markdown的支持
- 随着笔记越来越多,我们需要分组的功能
- 笔记进一步增多,我们需要搜索的功能
- ... ...
五、阶段性的总结与重复
我们有了前面的目标驱动,不会一根筋地扎到无尽的知识深渊里无法自拔。但如果只是一味地走马观花,知识积累程度太浅,对个人的长期发展不利。
所以我们要学会取舍,学会专注。不要什么都做,在做完一个东西之后,可以总结一下:
- 期间遇到了哪些问题?这些问题怎么解决的?有没有更好的解决方案?能给我带来什么哪些经验?
- 如果再来一次,哪些东西是可以舍弃的(或者少花点时间与心思)?
- 如果再来一次,哪些东西是可以抽象出来共用的?
然后,再来一次吧。
六、阶段性的探索
有了阶段性的总结与重复后,我们已经熟练掌握了某项技术的使用,这时候我们就可以更深入地去探索它的实现原理了。
- 这项技术底层原理是什么?该原理有没有其他的应用?
- 它产生的理由是什么?解决了什么问题?它出现之前,市场上是怎样解决那问题的?
- 当前市面上有没有其他类似的产品?彼此之间有什么差异?
这个探索阶段,我们可能会顺便把其他领域的知识也学会了。也能将这项新技术诞生的思路应用到我们以后的开发工作中。
到此,一次学习螺旋完成。我们已经能从更高层次看待上一个螺旋的自己,以及期间的进步。然后再整理心情出发,开始下一个螺旋吧。
七、保持与外界的联系
大家都知道闭门造车是不可行的。其实呀,闭门造车,不只是说从无到有自己一个人琢磨,还包括对某个领域有一些了解,但脱离与世界的交流而埋头去做研究或工作。
比如很多人会钻牛角尖说:能用就行嘛,以前java6时代,不照样可以搞定所有的事情嘛,java6我已经使用10多年了,用得比较熟练,没必要追求花哨去学习java7、8、9、10嘛。对于有这样想法的人,我不打算说啥,庆幸自己不是这样的人。
外界新鲜事物不是凭空出现的,有一天突然某个东西进入你的视线,并不表示它刚诞生,它往往已经经历过多次迭代,接受过市场的检验,并且正慢慢兴起。我们为什么不去尝试一下呢?虽然你用牛能耕地,但换上机器能更高效,让你不那么累,为什么不用呢?
八、不要独自学习
我们接受过前人的教诲:不要单打独斗,要注重团队合作。工作上如此,学习上也应如此。
所以不要独自学习,组织或加入一个团队,一起完成一件作品吧。
如果我是学生,我将找一份实习,而不是一味呆在图书馆
为什么呢?因为公司与市场最近,最知道哪些东西是实用的。想想我毕业之前学习java,在图书馆里面找书看,找了一堆讲述怎样用jdbc跟数据库打交道,随便写一个表的增删改查都得折腾大半天,没入门就放弃了,最终啥都没做出来。现在想想,我天啦,这世界还有哪个公司会直接写jdbc的,这样的公司不死才怪。那公司都不用,你学那些东西又有多大的价值呢?
过了一段时间整理好心情重新再来,又往前走了一点,接触了SSH。随便一本书都是500页以上的大块头,对于我那样的新手,简直是天书,直接给跪了。费了大把的时间,也没学会个啥。现在想想,还学什么SSH,现在都用spring + mybatis。。。唉,最后毕业了,也没有学会个啥。。。
在公司实习,公司不会给你大量的时间学习乱七八糟的东西,基本是直接找人带你干活,干活的过程中再充电,学习的都是当前需要的东西。并且,你有机会接触到一个完整的项目代码,这些东西书上是没有的。书上很难有一套完整可用的优秀代码,基本都是各种级别的hello world,很少有能直接上生产环境的。
网友评论