Hello,大家好。作为一个毕业一年的老学长,在科大学习计算机科学已经有一年的时间了,在这一年里我也接触到一些非常厉害的前辈同辈,在他们的影响下,我对计算机科学有了更深一步的理解与认识,于是打算写一篇文章来介绍一下计算机科学这个专业,同时可以对你们选择专业有一个参考。
ps:内含介绍与劝退
计算机科学也叫computer science,简称CS.
计算机科学,研究计算机及其周围各种现象和规律的科学,亦即研究计算机系统结构、程序系统(即软件)、人工智能以及计算本身的性质和问题的学科(来自百度)
其实计算机的本质还是计算,所有的程序在计算机底层都会变为二进制的计算,而如何在这一堆0101100中实现上层逻辑则是由离散数学支撑的。计算机能处理的只有离散的量,像微积分研究的是连续的量,极限、微分、积分等等都强调连续。而离散数学,这门课包含数理逻辑和集合论、图论、代数结构、组合数学和数论。都是整个计算机科学的支撑。哈哈,不知道你们有没有被这一连串数学名词吓到。为了不让你们在开头就被劝退,离散数学的重要性我放在数学篇和大家聊。
CS大体可以分成以下几个大领域:硬件、系统、软件、网络、计算理论、计算方法。
具体内容就不在这赘述了,总之,计算机科学是一门进可做理论,退可做应用的学科,对科研有兴趣可以去做科研,对具体应用有兴趣可以去工业界互联网企业!
CS 是不是主要就是编程?结论是否定的。说CS主要是编程,就如同说数学主要是解方程。
以下是编程和解方程的共同之处:
以下是区别:
世界上最无知的是一知半解的人,对编程半桶水的人或许会认为编程就那么回事,比较esay,但是编程实际上不是一件简单的事。我们至今仍然不知道我们设计程序能力的上限,我们知道我们的程序能够发射火箭控制卫星,调度全国的电网,支撑起整个互联网,构建电子金融和电商平台,完成比特币交易,控制核电站运转,调度整个物流系统,能放音乐能放电影能跑游戏,能跑在每一部智能手机上面,跑在(电子锁的)小黄车里面,能扫描二维码能水群能禁言,能识别物体能识别语音能翻译文字,能下围棋能完美驱动两个脚是轮子的机器人,能支持核打击系统和导弹防御系统,能让当代军用加密系统难以出现二战德国Enigma那样的事故,能处理引力波数据,能模拟化学反应模拟风洞模拟刚体形变模拟核反应模拟弹道轨迹,能画函数图像能P图能用数位板画画,能设计奥运会鸟巢钢架结构,能导航能规划路线,能“嘀!学生卡”,也能像 WannaCry 一样让人不能毕业。
我们用了什么魔法?或许正如《西部世界》中所说,只有魔术师才知道这不是魔法,而常人已经意识不到当今社会高效运转严重依赖各种各样的程序,人编出来的程序。而下一步一些人推崇的 IoT(物联网) 正是希望让 “万物联网”,让几乎一切都在程序的驱动之下。
人们不想随身携带那么多现金,于是出现了移动支付;人们不想出门吃饭、购物,于是出现了外卖和网上购物;人们不想到马路上等车,于是出现了滴滴;人们不想过很久才收到好友的信件,于是出现了聊天软件。
毋庸置疑,很多现实中的任务都是机械的、重复的,它们作为社会规律或者社会形式会存在相当长的时间;但是解决它们的方法,却是相对固定的;而解决解决问题方法的方法,目前我们知道的为数不多的东西叫编程,而被如此大批量的使用且如此成功的,恐怕也只有编程。
作为程序的存在,可以跑在光纤里,可以跑在无线电波里,跑在电缆里,睡在硬盘里,光盘里,U盘里;可以以光速移动,可以塞入细小的晶粒,可以随意复制,可以随意分享。
损坏的身体和机械,多数难以修复,但是损坏的软件或许只需要重装。
工厂(由于内部设计问题)出了导致生产全面停止的故障,一般很难在短期内恢复;但是一个宕机的网站,却往往能在几个小时内恢复。
解决现实问题,总是要费用的。但是相当一部分程序或者服务却是免费的。人们很愿意使用这些服务(比如各类搜索引擎,比如各类网上商城);开发者也很乐意使用其中的一些免费程序,特别是所谓的开源程序。
IT业界这些年发展推动的一个重要动力是,开源(open source)。即开放程序的源代码,这样我们得以知道写程序的具体流程,可以稍微修改以用于不同的问题。
就 Github 上面的开源的工程就超过 10,000,000 个,包含数亿万行代码;而 Linux 等操作系统上大部分组件都是开源的。很可能这些开放的代码的量级和 Wikipedia+百度百科 的文本内容总量相当。
在这些开源项目的推动下,整个IT业界的更新换代速度是极其快的,远远超过传统工厂设备更换的速度。
你要造一个瓷杯子,你需要什么?可能你需要锻造炉,一些黏土,燃料,钳子,模具…,这些都是实在的资产,并且需要你亲自接触它们。
你要写一个程序,你需要什么?无论何时何处,一台电脑,一个WiFi,一个电源,足矣。
你产出的是什么?不是一个证明和构想,而是一个解决方案。
然后后者却往往可以卖更多钱。
那有同学肯定会疑问,如果我们编写的程序一夜之间突然失效了怎么办?支付宝里面的钱突然清零,听歌发现一直循环播放同一首歌曲,高考分数出现了随机数(不知道你们是否喜闻乐见hhh)。。。
这可能会是一场灾难。
那既然我们这么放心的让程序替代以前人的工作,自然是相信它的稳定性,那我们凭什么相信它们会稳定的工作呢?答案回到了数学,数学是一门逻辑的学科,这保证了它的严密性与正确性。离散数学中的知识比如数理逻辑从根本上证明了一个算法的稳定性以及正确性,数学保证了程序会相对而言严密地运行,如果出现异常和错误,大概率是由人为操作引起的。
很多人初学计算机最头痛的是要学哪一门语言。
毕竟编程语言有那么多,比如C、C++、java、python、matlab、JavaScript、PHP、SQL等等
具体可见编程语言排行榜
那我们具体要从哪门开始学呢?或者说真的是学的越多越好吗?
这里我给的建议是,如果啥都不知道,是小白,那么学C是不错的选择,C语言比较接近底层,而且很多大学都是以C语言为入门课程。
其实各种编程语言并没有绝对的好坏之分,它们的确有受欢迎程度的区别,但那只能说明对某种编程语言能够比较好实现的应用的需求比较大。不同编程语言的差异当然有很多,可没有所谓的万能语言或者说最好的语言。在不同的应用场景需要不同的语言。比如说我们想编写嵌入式,想为无人机编程,那么C语言比较合适,因为它直接与底层打交道,能够比较好的操控硬件。如果我们想写个web,也就是网站,那我们前端可以用html、css和js,后端则可以用python、java、PHP;同样,操控数据库最常用的是SQL而不是其他。想编写个神经网络识别动物图片,那么最好用的应该当属python,不过matlab也是个很不错的选择;想要计算导弹的轨道,建立模型,可以使用matlab绘图、计算微分方程组等等
所以说,使用什么语言不是必要因素,学会一两门常用的,以后需要什么再去学是可以很快学会的。
当然有用!当然有用!当然有用!
先让我们看看计算机专业在大学四年需要学哪些数学课:
当我们只是学习数学的证明是无法意识到它们的作用的,这时候也许会觉得数学对未来的生活一点用都没有,更有可能会觉得数学枯燥无味,可当我们知道数学应用在计算机领域会有什么好玩的事情,可能学习兴趣就大大不同了。
综上所述,数学其实不会决定一个人能不能编程,不会数学同样可以写出一个web,写出一个微信小程序,也可以写个界面写个前端,会个排列组合就够了,但是数学决定的是一个人在计算机科学中的上限,不会数学将会寸步难行,要成为一个更加高级的开发者或设计师数学是唯一的敲门砖。所以不会数学是很难成为一个编程大牛的。
其实说这么多还是想强调数学在计算机科学中的重要性,数学是现代科学之母,这句话是没错的。
物理有没有用呢?其实还是有用的,比如做游戏开发的时候进行建模就需要仿真重力、质量等等。除此之外,还有一个例子,NLP的transformer模型被一个大牛学生刻画成多粒子模型,用常微分方程的知识改动了一点模型就成功优化,所以学好数理方程和热力学对计算机科学也是有用的。
计算思维建立在对计算这个过程本身的能力和限制的理解之上。
计算思维不仅是计算机学家,也是每个人的基本技能。为了更好地进行阅读、写作、算术我们需要将计算思维作为孩子分析能力的一部分。
恰如出版社促进了3R(阅读、写作、算术这种教育体系)的传播,计算和计算机加速了计算思维的传播。
计算思维透过计算机科学的基本观念解决问题,设计系统,理解人类行为。它包含一些理念上的能够折射出计算机科学纵深的工具。
(如果)需要解决一个特定问题,我们或许会问:它难度有多大?解决它的最好办法是什么?计算机科学基于坚实的理论基础来精确回答这些问题。
计算思维通过规约,嵌入,变换或者模拟的方法,可以将一个难题转变为我们知道如何解决的问题。
计算思维使用抽象和分解来对付一个大的复杂的任务或者设计一个复杂系统。这是一种对事务的分离。计算思维为问题选择合适的表述形式或者为问题各方面的关联建模来使得它易于处理。
计算机专业的学生最青睐的国内公司当属BAT(百度、腾讯、阿里),在业界一般把比较大的互联网公司称为大厂,计算机专业毕业的学生大部分都是去互联网公司。
就业方向按工种划分的话大概是:
软件工程师,具体可分为前端、后端、移动端等等。也就是写网站,写app。后端还可以细分类型。
测试工程师,通过各种手段测试现有代码,找bug,调优
运维工程师,也就是配置服务器,保证服务器的高可用性,现在的云计算就是在服务器端实现的。
算法工程师,小到一个新闻的排序算法,大到推荐算法都是算法岗做的事情。
架构工程师,技术负责人,技术选择以及架构层次设计
数据科学家,研究数据的科学家,大数据时代,变得越来越重要
网络工程师,与下到布线,上到组网,与网络相关的岗位
数据库工程师,维护和优化数据库,有时候在某个网站搜索个东西比较慢可能就是数据库搜索耗时间
项目经理,管理项目的人
产品经理,一般不懂技术的比较多。。。
在互联网时代,计算机专业毕业的学生可以去做应用,也就是去互联网公司做产品,无论是web还是app还是游戏,都属于应用。除此之外也可以去做科研,你想,做科研就是别人给钱给你做你自己喜欢做的事情,多好。当然还可以去做教育,比如现在比较火的少儿编程,教育这一块的前景还是很不错的。
有人可能会有疑问,互联网真的还像前几年那么火吗?会不会毕业即失业?
其实在当下这个互联网时代,需要大量写代码和维护代码的人,互联网+在不断展示它的巨大威力,如果是正统科班出身同时又基础扎实的程序员是不怕找不到工作的,只是会有工作好坏的区别。需要担心的应该是学历不高经过社会上培训班出来的学生。
那为什么程序员的工资那么高呢?反观一些传统行业可能混十年才能到程序员刚入职的工资,互联网行业和传统行业的一个非常大的区别是互联网有开源精神,技术壁垒不高,中国能够比较快地在软件这一块赶上美国。而且互联网技术仍然在蓬勃发展。
说了这么多,那到底什么样的人适合学计算机呢,又或者说在选择专业的时候又该考虑些什么呢?对于我来说,我很喜欢数学和物理,而且科大全校自由转专业,所以我来了科大,学习编程之后又觉得编程非常有意思,于是又了解了很多计算机领域的知识,发现CS浩瀚无比,有非常多有意思的领域,像是高性能计算、大数据、云计算、分布式、以及现在非常火的AI等等。计算机科学不是仅仅研究计算机,就像数学不是仅仅解方程;计算机科学也不仅仅是编程,或许叫它计算科学更合适,用计算的思维度量世界。
选专业还是要结合自己的爱好和特长,以及去可以自由转专业的学校是很不错的选择,比如科大。
ps:如果想要了解一个专业,可以去知乎,百度搜到的东西有时候很垃圾。。。或者能上Google更好。知乎上对计算机专业的一个很好的介绍戳这里
以上就是我对计算机科学专业的介绍了,如有不正确的地方敬请指正。