为什么应届生觉得学校教的东西没有用,毕业以后依旧做不出东西,其实背后有一个最本质的原因:
教师和学生的思维方式都错了。
大学是想要给社会输出韭......人才的,但大学里教学的目的就只是教学。企业想要的是能用技术解决问题的人,而非能解出问题答案的人。所以,学习计算机应该抱有的,最基础的思考方式就是:
所有的东西都是为了解决某种问题而存在的。
因此,在学习任何计算机领域的东西时,首先思考那个东西能解决什么问题,而非它是什么。
我认为:错误的思维方式,就是学习编程时觉得枯燥,难以理解的真正原因。
这么说可能太抽象,我举一个例子: MD5
假设我并不知道MD5是什么,于是上网查询MD5,以下是维基百科的定义:
MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 中被加以规范。
MD5是一种密码散列函数,我对密码散列函数也没有概念,于是继续搜索:
密码散列函数(英语:Cryptographic hash function),又译为加密散列函数、密码散列函数、加密散列函数,是散列函数的一种。它被认为是一种单向函数,也就是说极其难以由散列函数输出的结果,回推输入的资料是什么。这样的单向函数被称为“现代密码学的驮马”。[1]这种散列函数的输入资料,通常被称为消息(message),而它的输出结果,经常被称为消息摘要(message digest)或摘要(digest)。
好的,彻底懵逼,已经不想学了。
这个时候应该换一个思路,不去纠结MD5究竟是什么,而去思考它能解决什么问题。这样一来,很容易得出结论:MD5可以用于验证文件完整性。
如果不是密码学专业的话,这种程度的理解就足够了,某天有验证文件完整性的问题就可以考虑用MD5解决。而且如果你想的话,从MD5能够验证文件完整性是可以反推出它的定义的,这样比直接去理解概念要容易得多。
可能有人觉得这种思维是理所当然的,但很多新手其实是不具备这种思维的,也没有任何一本编程的书籍会提出这一点。计算机领域的东西更新很快,但新的东西一定是为了解决旧的问题而诞生的,只要找到那个问题学习起来一定事半功倍。
前些天我开发了一个软件,然后软件需要有注册登录的功能。
我不是后端程序员,所以首先想到的是云数据库,但仔细思考以后发现还是需要一些api接口,于是开始寻找解决方案。我下了一个Apache Tomcat的安装包,试着用jsp来实现功能,然而为了防SQL注入我得写一大堆过滤的代码,除此以外还有一堆问题。
然后我下载了Springboot,用了一个星期学习并把注册登录找回密码等等一堆功能做完了。
后端领域算半个小白的我,其实搞不懂那些所谓的控制反转,面向切片编程的概念。但是我通过简单的操作实现预编译从而解决了Sql注入的问题,代码被强制MVC的缘故摆脱了耦合,也不用再去折腾服务器的配置文件......
总之,在很短的时间我对Springboot就有自己的一套理解了,这些理解都是基于它帮我解决了哪些问题,可能并不全面但够用。
我认为,去研究某个事物解决了什么问题,是计算机领域学习新东西的捷径。