很多大学都有“计算机科学与技术”系,而计算机这门学科,技术性远高于科学性,
有人会问,这种区分会影响学习吗?
我的回答是:肯定会,影响思考问题的方式。
在科学领域,比如化学,如果你问:为什么“苯”的分子结构是这样的?
这个问题实际上是没有答案的,因为大自然造物就是这么设计的,
所以,要掌握这个知识点,没有别的办法,你需要背下来。
在技术领域,尤其是计算机下的软件开发这个分支,人就是至高无上的造物主,
所以软件世界里的任何一个存在,都有其特定的“原因”而不是必须如此。
比如,为什么计算机选择二进制数而不用更加直观的十进制?
那是因为硬件最擅长的是表示0和1.
任何技术的出现,都是为了解决特定问题的,一定有它所擅长的领域,没有万能的技术。
学习一门技术,可以分成两个阶段:
第一个阶段是在问中学,第二个阶段是在用中学。
问中学,在对新技术一无所知的时候,先要解答一系列问题:
为什么会有这样的技术存在?
这项技术能够做到什么?
如何做到的?
有什么限制或者例外吗?
以 ajax 为例:
问:为什么会有这样的技术存在?
答:因为传统的HTTP 请求-应答 模型要刷新整个页面,给用户的体验很差,需要一种不刷新页面就可以从后台获取数据的方式。
问:这项技术能够做到什么?
答:通过这项技术,可以使用程序(javascript)发起和处理HTTP请求,然后根据收到的数据更新页面展示。
问:如何做到的?
答:在浏览器中,javascript可以创建一个XMLHttpRequest对象,使用此对象发出请求并侦听应答的数据。
问:有什么限制或者例外吗?
答:ajax是异步通信模式;ajax只是对现有技术的一种重用,依然是拉模式,而不是推模式。
以 CSS 为例:
问:为什么会有这样的技术存在?
答:HTML擅长定义页面的内容结构,不擅长定义展示效果,CSS是为了更加灵活的定义HTML页面上元素的外观和布局。
问:这项技术能够做到什么?
答:可以针对一类、一组或者一个对象定义其展示效果。
问:如何做到的?
答:定义抽象类,由标签有选择的使用;使用selecter锁定作用范围;直接在标签上写Style属性。
问:有什么限制或者例外吗?
答:CSS只是定义外观,不影响被展示对象的内容和行为。
用中学,是为了求证细节。
在第一阶段,你掌握的知识足以告诉你,什么样的问题应该用什么技术解决,
比如:
改变界面上所有 <DIV>的背景颜色用CSS而不是ajax,
具体怎么写、怎么配,语法格式,相关属性名是什么等等,这些都在用到的时候,现查手册并慢慢熟悉即可。
以 正则表达式 为例,
在第一阶段,应该了解正则表达式的能力:有通配符、有分组(group)、可以限制匹配长度、有lookahead/lookbehind等,
在第二阶段,有具体匹配需求了,再去查相关的记法即可。
在职业生涯中,多数人需要掌握大量的技术手段,然而我们的大脑是不适合精确记忆的,
对一门技术做到无所不知,无所不晓的精通是非常困难的,更别说样样精通了。
所以我并没有哪样技术,学到了可以称为精通的境界,
我一般认为,能够正确使用一项技术的时候,学习过程就告结束,
接下来所要做的,就是用和查。
最后,还是要强调,做技术工作,有没有兴趣,决定了工作是天堂还是地狱。
有兴趣的朋友,可以再看看姊妹篇:
改造我们的学习:有钱不会花,抱着金库抓瞎