基础学科的知识如何转化成实际的技术生产力?
我相信,很多程序员都已经意识到基础知识的重要性,觉得要夯实基础,才能走得更远,但同时对于如何将基础知识转化成开发“生产力”仍然有些疑惑。所以,你可能看了很多基础的书籍,比如操作系统、组成原理、编译原理等,但还是觉得很迷茫,觉得在开发中用不上,起码在平时的CRUD业务开发中用不上。
实际上,这些基础的知识确实很难直接转化成开发“生产力”,但并不代表就没有用,今天,我们聊一聊为什么要学习基础学科知识,以及基础学科知识是如何转化成“生产力”的?
话不多说,让我们正式开始今天的内容吧!
# 没有直接用得上并不代表没有用
很多人反映,大学里学的很多基础学科都没用,工作之后都用不到。这种感觉是没错的。实际上,不只是基础学科,任何一门技术,能够经常用在工作中的那部分,都只占20%左右。这也符合我们常说的“二八法则”。
不知道你有没有听过这样一个故事:有一个人想要一个葫芦,于是他就种了一棵葫芦树。葫芦树叶子生了虫子,有人建议他赶紧杀杀虫。这个人却说,我要的是葫芦,管葫芦叶子干嘛。你可能会觉得,故事里的这个人的想法很荒唐,但其实我们也经常犯这种错误。比如说,类比到我们学知识,尽管常用的可能只有20%,但这并不代表我们只需要学习那20%就够了。要想得到那20%最有用的知识,我们需要学习很多周边知识做铺垫才行。
实际上,我多次强调,构建一个完善的知识体系、知识框架很重要。有些知识能直接转化成生产力,有些知识是为了学习其他知识充当“脚手架”。要想对应用层的知识学得比别人快、学得比别人透彻,铺垫性的基础学科知识就必不可少。
# 现在用不到并不代表以后用不到
你可能会说,我科班出身、基础扎实,但跟其他培训出身、只会使用框架干活的同事,在工作中的表现差不多啊,并没有感觉到有太多优势。实际上,如果只是做比较“低级”的CRUD工作,项目本身没有难度、没有挑战,那基础再扎实、技术再好,可能也都发挥不了你的优势,跟其他人拉不开差距。这就相当于跟大妈在菜市场比算账,你高数、微积分学得再好都没用,都比不上大妈算得快。但换个有挑战的工作环境、换个有难度的项目,又或者当你成为更高级别的工程师的时候,这些基础知识可能就会用得上了。
编程这件事本来就不难,随便培训3、5个月,就能上手干活。基础知识掌握得牢固,在工作初期,可能确实体现不出优势,毕竟大家都是从最基础、最没有技术含量的活干起的。在初期,那些框架、工具用得熟练的人,反倒更有优势,更容易出活、干得更快。但是,只会框架、工具的人,技术天花板是很低的,很多东西都只能学得一知半解、无法深入,很快就会遇到技术成长的瓶颈。相反,基础扎实的人更经得起时间的考验,技术研究的越深入,优势就会越明显。尽管基础知识短期内没法给你带来收益,但长远来看会持续发挥作用。
很多知识用不到,可能只是暂时用不到。书到用时方恨少。等到用到了,再去学习,就有点来不及了。基础学科知识学起来比较慢,所以,还是要在平时多下功夫,提前学扎实。学习基础学科的知识,不能太急功近利,只看重眼前的利益。
# 学了记不住并不代表就是白学了
对于知识的学习,特别是偏理论的基础学科知识的学习,有很多人说,学完之后,关上书啥都回忆不起来,学完不用,过不几天就忘得干干净净。其实,这些现象是很正常的。实际上,如果你一直追求“记住”“不忘”,那就还是应试教育的思维方式。
知识是用来解决问题的,而不是用来记忆考试的。说句实话,你可能不信,我在写这两个专栏的时候,写完后面的就忘了前面的,全部写完之后,基本就都忘得差不多了。不过,因为我在脑海里构建了整个的知识框架,并且大部分知识难点都已经被我攻克,所以,当工作中需要某块知识的时候,即便细节记不清了,我也只需要稍微查看一下资料,就能全部回忆起来。
除此之外,学习本身就是一种能力的锻炼。比如,我们在学习算法和设计模式这两个专栏的过程中,从最基础的自学能力、理解能力、逻辑思维能力,到时间空间复杂度分析能力、分析发现解决代码问题能力,都有锻炼到。所以,即便知识的细节忘记了,也并不妨碍我们编写出高性能、高质量的代码。这种对能力的锻炼,比单纯的知识记忆要有意义得多。
我之前还听过这样一个故事。给一个3岁的小孩每天读一篇希腊文写成的文章,坚持1年的时间。等小孩长大一点之后,拿之前文章里的内容再考他,他完全回忆不起来。但当他开始学习希腊文的时候,他比其他同龄人学得都要快。从这个故事中,我们可以发现,忘记并不等于就白学了,学习对于一个人的影响是潜移默化的。基础学科知识的学习更是如此。你要相信,它总有一天会发挥作用的,机会都是给有准备的人,我们要学会“延迟满足”。
总结一下,比起编程语言、框架、工具,基础学科知识确实很难直接转化成生产力,但它却是你构建整个“技能树”的根本,构建整个“知识大楼”的地基。基础掌握不牢,你对很多应用层技术的理解就会不够有深度,略知皮毛,只能做个技术熟练工。相反,基础扎实能让你学东西更快、更有深度、理解更透彻,也就间接地增强了你的开发能力。可以这么说,在一定程度上,基础知识本身,就是技术生产力。
# 课堂讨论
你觉得计算机的基础学科知识有哪些?聊一聊你对学习基础科学知识重要性的认识。
欢迎留言和我分享你的想法,如果有收获,也欢迎你把这篇文章分享给你的朋友。
# 精选评论
点击查看
前置技能不点足门槛,技能树最深层的大招是用不了的。 物理系毕业的码农表示数学是最重要的基础学科知识,不仅是很多其他基础的基础,锻炼出的思维能力也是受益终身的。
操作系统计算机网络原理数据结构与算法
“抓大放小”很重要。
操作系统,计算机网络,数据库,数据结构+算法,计算机组成原理+计算机体系结构基本上是科班的五大基石了
我觉得操作系统和算法是最好理解的了。
1.基础知识:数据结构与算法,计算机组成原理,编译原理,网络协议。 2.内功心法:编码规范,oo方法,设计原理与设计模式,ddd,分布式架构设计
3.《设计原理与设计模式》已经成了我的工具专栏,可以时常翻阅。
深有同感,就像家人都觉得学计算机的应该会修电脑一样,对于我们专业的人来讲,其实那个层次不高,体现不出我们的价值。 又比如一直苦恼的学了就忘,确实更应该关注的是分析问题解决问题的能力,要用的时候知道搜索什么关键词,并且很快能用起来也是能力。 最理想的面试应该给出个实际问题,让人设计实现,不限制用搜索引擎,考察解决问题的过程,而不是死记硬背一些知识和算法,一到工作还是只会拧螺钉
基础知识的学习特点:
可能不会直接用上,更多充当幕后角色。 可能一时用不上,是个长期投资。 学了容易忘,但不代表白学
刚进项目组,很多工具还不太会用。早上起来的时候纠结了一下是学学工具怎么用还是看专业基础书。最后还是选择二刷汤老师的《操作系统》。
操作系统,计算机网络,数据结构与算法……
这个说的太对了
罗马不是一天建成的,学习的过程也不是一个线性的过程,遇到瓶颈很正常,只要坚持学习,总会量变引起质变的,延迟满足感,向作者学习~
忘记不等于白学,说的很好