作者/ 徐凯强
很多同学问过我,毕业后想去腾讯、阿里等一些知名互联网公司工作,应该如何努力;另外一些行动比较早的同学,通过竞赛(ACM-ICPC)、实验室、实习接触到了计算机行业中的一部分领域,对下一步的发展又产生了更多的疑问。
今天这篇文章,我想为在IT行业发展的计算机专业学生,解决以下三个困惑[1]:
1、学了计算机专业,怎么还是做不出网站、软件、APP?
2、如果我想搞技术,那么学习计算机理论部分还有没有必要?
3、我现在应该如何提高技术水平?
1、学了计算机专业,怎么还是做不出网站、软件、APP?
小李想成为想成为一名开挖掘机的高手,有人告诉他,要先学习《机械动力学》才能开好挖掘机《柴油发动机原理》;还有人告诉他,深刻理解了“燃气涡轮发动机”的原理,对成为挖掘机高手有很大帮助。
初学者被高大上的名词击倒是一件很正常的事情,所以我们首先搞清楚,计算机专业学的究竟是什么。计算机专业的必修课有这么几个:
数据结构、计算机网络、计算机组成原理、算法分析与设计、数据库原理、软件工程
做网站、做APP是哪个课程教的呢?答案是,哪个也不是。计算机科学研究的都是非常基础的东西。即使有些名称看着和开发有关,教授的内容也不是开发软件,比如这里所说的“软件工程”,不是教你开发网站、App的,而是研究如何系统、规范化的开发和维护软件,以及结合管理技术和技术方法来管理项目的学科。
实际上,国内大学的计算机专业的名称往往是“计算机科学与技术”,包括了计算机科学、计算机技术两部分。做网站、做APP,就属于那个“与技术”。在学校里,“与技术”的部分往往只开设几门技术早已过时的课程,开发App当然不在其中,这也跟IT业界发展速度快有很大关系。
2、如果我想搞技术,那么学习计算机理论部分还有没有必要?
你选择学习内容的标准,就看它能否显著提高你的生产力。科学和技术的区别在于,科学追求尽量深入,探索原理;而技术追求尽量封装,提高效率。
当技术遇到效率瓶颈时,往往是因为依赖底层理论细节或原理,这时就应该尝试去透彻地理解它们。比如说如果你开发了一个网站,十分火爆,每分钟有几千个人访问你的网站,这时数据库没有办法同时响应这么多人请求,网站卡住了。数据库原理课上教给你的知识,举个例子说‘索引’,就是你解决的数据库性能问题的利器。
但具体到Web、APP开发,最能提高你生产力的,不是《编译原理》,而是那些前/后端框架和脚本,学完了你马上就能做产品。当然,上边说了,你要学挖掘机,一定要先学《机械动力学》,否则你就没有内功,永远不可能成为挖掘机高手,我并不反对这种说法,但是理论和技术没有高低贵贱之分,技术中也有很多理念需要学习,经验也需要积累,有良好的理论基础可以帮你更好的学习技术,但并不能取代技术的学习过程。
总而言之,技术和科学是不能完全分开的,如果你不懂得如何实现,那么你设计的时候就会陷入困局。编程当然不是仅仅决定如何开发实现那么简单,但是在最好的情况下,编程实现就是对理念的设计--因为最好的设计方式就是实现它。
3、我现在应该如何提高技术水平?
学技术的关键思路是两点:一个是模仿,一个是边实践边学[1]。以做网站为例,首先你可以看看w3schools.com,或者用Codecademy,学会HTML和PHP(或者Python)基本操作。然后找一些简单的框架,比如Bootstrap和Django,学习一下是如何用的,然后,你可以自己设计一个小网站,尝试把它做出来。
不要让完美主义拖慢了你,不需要把所有的东西都学会了再开始。做的过程中,遇到障碍再去针对性地去学习和解决,或者寻求帮助。这种边实践边学习的模式,才是学技术的正确思路,这跟搞理论研究的思路是不一样的。
当你对技术开发有了基本的理解之后,你就可以尝试去找实习了,最好找那种把实习生当正式员工来要求的公司,这样你就能很快的成长起来。
[1] 文中三个‘困惑’取材自苏椰老师的知乎回答(http://www.zhihu.com/answer/32455092)