学软件技术一定要实战?

学习软件技术要实战,可能是多数从业者的共识。但为什么学习软件技术要实战?实战无论是寻找合适的实战项目还是进行实战需要的时间都要比阅读一本技术书籍或者技术博客的投入要高得多的多得多…所以如果不实战,就没有办法学好软件?不得不说,进行实战时,虽然会投入更多的时间和精力,但也确实能将知识掌握的更牢靠,或者说知识留存率更高,这大概也是学习软件技术要实战的共识由来。但这也并不意味着学习软件技术一定要实战。

实战能更好地掌握软件技术的原因在于,实战能给你提供更多的上下文,而不只是你想要学的。在实战中,你以为你只学到了一个知识点,实际上你学到了可能十几个甚至更多的知识点。而且这些知识点都围绕着同一个场景展开,可以更容易地被吸收进你自身的知识体系,从而就更容易被运用。最终就让人觉得实战能够将知识掌握得更牢靠,换句话说就是会用了。而你通过读书学来的东西,则直截了当得多,往往就只有那一个知识点,针对性很强。这些点状得知识,并没有那么容易和你自己得知识体系融合,进而被你运用。

之所以要实战,关键在于实战可以给你:

  1. 学到更多相关联的知识,形成知识网络,而不仅是知识点;
  2. 知识对应的应用场景信息,包括问题的发生原因、解决经过、解决结果。

那如果在阅读技术书籍和博客的过程中就能做到这两点,那是不是就能达到接近实战的学习效果呢?我认为答案是肯定的。

首先关于第一个关键点:学习知识网络,而非知识点。举个简单的例子,在学习一门新的程序语言的时候,与之前学习的程序语言做对比。根据对之前程序语言的学习经验,抽象一些需要掌握的模块,比如设计思想,亮点,基本语法,提供的方法库,著名的项目等。通过读书来了解这门新语言后,知识或多或少就和已经掌握的语言建立了一个连接,这可以帮助我们更快速高效地掌握了这门新语言。

当然这还不够,这样的连接还是相对较弱,所以关注第二个关键点,帮助我们促进新知识和已有知识网络的融合。可以在读书的过程中,不断地思考,向自己发问,诸如“这个程序语言用来开发这样的项目为什么会更合适?”,“为什么这门程序语言会更适合高并发?”等等。这些问题都是这门语言的应用场景,在不断地弄清楚这些问题的过程中,实际上也就是在不断地学习具体应用场景,进而不断地加强新知识与已有知识的连接。

实战并非学习技术的唯一途径,但实战绝对是软件从业者最重要的学习手段之一。只是在我们无法获得这些实战机会的时候,记得学习软件技术并非一定要实战。