在互联网的圈子里,技术更新速度之快,有时新兴了某种技术,还没完全掌握,另一种可以将其替代的技术又产生了,有的时候,所学的甚至毫无用武之地。那么,我们学习是为了什么?单单是为了多掌握一种编程语言还是为了去解决实际中所遇到的问题?当然这里没有否定任何一种语言,存在即合理,每种语言会有自己的优点。这里强调的是解决问题。生活中的每一项发明,每一种技术的产生,都是为了方便人们的生活,解决人们生活,生产中所遇到的种种问题。而在互联网中每一个软件,每一个网站都是从需求中开始,不断的迭代,不断的完善。正是我们需要使用到它,才来创造它,学习它。
但是人脑不是电脑,如果将一些有用无用的知识全部灌输到大脑中,那么在真正使用的时候很难将有用的知识检索出来。人脑虽然发明了电脑,但是在大数据的处理上,人脑的速度就赶不上电脑了。那么如何鉴别哪一部分是有用的知识,就是把握问题本质的能力。就好比同样是用Google来搜索,描述问题所用的关键字不同,解决问题的时间也不一样。
当我们遇到一个问题,迅速的把握问题的本质,了解解决这个问题所需要的知识并迅速掌握,才是一个优秀程序员应该具备的素质,也就是为用而学。在实际工作中遭遇了其他人曾经遇到过并解决的问题,首先想到的不是学习新知识来重复造轮子,而是使用其他人制造过的“轮子”,并且让这些“轮子”能够为己所用。结合wide来说,如果我们的整个代码比喻成一辆车,那么每一次插入的代码模块就好比“轮子”,我们不需要明白轮子的构造,不需要明白每个代码块中每句代码的意思,仅仅是按照注释来将其补充完整,稍加改造,让其能够合适的“安装”在车上,让其到达目的地。这个过程中,我们要理解页面逻辑,明白什么时候使用“山地胎”,什么时候使用“雪地胎”。比如一个修改的页面,我需要先通过一个查询的模板,可能使“根据ID获取node信息”的模板,然后需要一个“标准新建”模板来修改获得的信息。
为用而学,在自己脑中建立一个索引,它索引的不是某个具体的知识点。而是通过自己曾经所解决过的问题的索引。这不仅仅是理论上的知识,更是每次遇到问题之后解决问题的方法和实践。一次次的积累,解决问题的能力就越强,每次解决问题的时间也会渐渐缩短。
20世纪初,斯坦门茨在福特公司用粉笔画了一条线,拆除了多余的16圈线圈,解决了福特公司燃眉之急,赚了一万美元的故事相信大家都听过,用粉笔画一条线,这就是最初级的解答,掌握了基本知识就会。线圈多绕了几圈,这就需要读模的能力。在哪里画那条线,便需要掌握建模的能力,以及对整个知识体系的把控。这就需要一个长时间的知识累计,拥有自己的知识树。在一次次使用轮子的过程中,轮子的适配能力渐渐增强,这个时候就掌握了读模的能力,轮子使用的多了,自然明白轮子为什么设计成了圆形。当然,并不仅仅是这么简单,从掌握数据库基本概念,到理解表,再到理解每个表中的属性之间的依赖,逐步掌握关系型数据库的6个范式,并理解如何使用这些范式来对实际问题建模,只有把握住上面这些知识,才能深入的理解“轮子”的设计及原理,最后,甚至可以自己制造适用的“轮子”。
当然,我们在“升级”的过程中,要把为用而学的原则融入到其中,从解决基本的问题开始解决,一步一步来完善自己的问题索引树。在这个过程中需要不断的随记和整理,这个过程中或许可能走了许多的弯路,错路。但是每次纠正自己的错误,就会不断的提高抓住问题的本质,提高为用而学的能力,从而扩充自己的学识,深入对问题的认识。