高校专业大揭秘︱计算机(上篇)
文话童心隆重推出系列讲座——
“高校专业大揭秘”
隔行如隔山。某个专业未来的方向到底是做什么?孩子长大以后可能从事什么方面的研究?如果不是业内人士的话,很难了解。事实上,这样的困惑不只是在小娃的家长身上有,很多家庭到高中生高考报考志愿的时候都有这个问题。这些专业是做什么的?孩子能从小进行哪些铺垫?家长要想心里有数,就来听听专业人士怎么说吧~
COMP UTER
高校专业大揭秘——计算机专业
第一期,我们很荣幸地请到清华大学计算机系张敏副教授来讲讲现在大热并且会辐射未来很多年的计算机和人工智能方向。小朋友们也可以一起来了解一下哦~
主讲人:张敏
清华大学计算机科学与技术系副教授
智能技术与系统重点实验室(人智所)副主任
清华大学教育部-微软网络与媒体技术重点实验室副主任
ACM Transaction on Information Systems (TOIS) 主编
主要研究领域:信息检索,个性化推荐,用户行为分析,机器学习
01
计算机专业是干什么的?
02
关于计算机专业的特色
03
我们的孩子应该从小需要具备什么样的素质
04
简单的聊一聊,学计算机专业可能会让你获得什么?
05
如何避坑
计算机专业是干什么的?
有几个很有趣的段子:我们当年读书的时候,有人听说我们正在读计算机系,就会问我说,我想买台电脑,请你告诉我哪个牌子的电脑比较好?还会有朋友们来问我们,能不能帮忙攒一台机器?(所谓攒机就是自己去买个显示器,买CPU,买硬盘,买内存,然后把它们拼到一起。)或者我电脑坏了,请问怎么修?这是大家眼中对学计算机的人的第一个误解。就好像问一个建筑设计师“你说我应该买哪个房子,是学区房还是郊外的别墅”“我家房子漏雨了/下水道堵了/门锁打不开了,请问怎么修”一样。
大家的第二大经典误解就是:学习计算机,毕业以后出来就做码农,永远都是工作时间996、一天到晚穿着花格衬衫牛仔裤、永远不修边幅的样子。这些真的不是计算机研究以及计算机行业的全部。
那么,计算机专业到底在研究什么呢?大方面来说分成两个部分:第一是研究计算机本身,第二是研究计算机相关的应用,以计算机为载体的应用。
计算机本身,从硬件上来说就是造计算机,也包括超级计算机等,以及对应的网络体系结构,我们现在的互联网IPv4、IPv6,大家听说过的4G、5G等等,是我们的无线通讯网络,它们都在高速发展中。
大家看到的这两张图片是世界上第一台电子计算机。这是1946年2月14号在美国宾夕法尼亚大学研制出来的。事实上计算机就是用于计算的机器。这台电子计算机长15米多,宽9.14米,占地139.36平方米,需要一个很大的地方。它重达30吨,耗电150千瓦。有一个形象的描述,当时人们说每当这台计算机启动的时候,整个费城的灯都会变暗。但当时的计算速度一秒只能做5000次加法运算,而现在我们家用的普通笔记本计算机大概每秒能计算50亿次加法运算,所以你看,计算机的发展变化是非常快的。
这是神威太湖之光,是清华在无锡运行的。它曾经是世界上运算速度最快的超级计算机,这两年刚刚被超越。它的运算速度是多少呢?每秒12.5亿亿次加法运算,这里的亿亿就是两个亿,是非常非常快的。
计算机专业要研究的计算机本身的内容,不只是硬件,还有相应的如何让计算机运行起来,也就是我们如何去设计相应的操作系统、相应的编译器等,能够让计算机顺利地跑起来运,而不仅仅是一个死的设备。
所以总结一下,计算机专业在研究计算机本身时,会包括计算机的硬件、高性能的计算机、计算机体系结构、网络体系结构;以及让计算机运行起来的操作系统和编译器等。例如在清华大学计算机系的五个研究所中,它们就分别属于高性能计算、计算机网络技术两个所。
COMP UTER
那么,计算机专业只研究这些吗?远远不止。除了上述的对计算机本身的研究以外,基于计算机的各种应用和服务也都是计算机专业研究的重点内容,例如清华大学计算机系设立的五个研究所中的另外三个方向:人工智能、计算机软件、人机交互与媒体集成等。
我们生活中各种互联网服务,也都是计算机应用。例如你用手机支付去买一个东西,扫描二维码进入一个网页,或者在路边拍的一朵花儿,想知道它的名字,于是用APP搜索一下就知道答案……这些其实都是有相关计算机应用的研究在背后支持的。
人工智能,现在大家听说的非常多了,对小朋友们来说其实也不陌生。例如家里如果有一些自动交互的小机器人,甭管是“小x小x,今天是什么天气?”还是对着手机说:“请你告诉我最近的地方哪里可以买棒棒糖啊?”或者爸爸妈妈开车时对着手机导航系统说“请导航到xxxx”…… 这都是和人工智能相关的计算机应用。
这张图片是在1997年5月11日,IBM的计算机深蓝战胜了当时的国际象棋世界冠军卡斯帕罗夫,也是第一次计算机战胜了人类,而且是在国际象棋这样益智类的、以人类智慧引以为荣的领域。后来,又有我们知道的AlphaGo完胜人类的围棋冠军。这个时候人们就会觉得“计算机太牛了”!它背后运行的其实就是计算机的程序,是我们所说的人工智能应用的一部分。
诗的文学创作,这种我们觉得人类最了不起的语言文化结晶,目前也有人工智能相关研究正在进行着探索。
上面这个图片是我们清华计算机系自然语言处理组的一个“九歌”系统,它是一个自动作诗系统,曾经参加过“机智过人”电视节目,和几个非常有才华、国文素养非常高的大哥哥大姐姐们一起来比赛。在现场所做的几首诗里,观众和专家们完全猜不出哪一首是“九歌”系统所做的。当时专家也评论说,古诗写得有模有样,从押韵和意境上胜出了大多数人类选手。
现在清华计算机系人工智能所,也有老师带着学生做计算机自动作曲研究。给大家听几个做出来的乐曲的片段,分别是民族风和摇滚风,你看同一个计算机程序,可以做出不同风格的作品来。
当前人工智能发展得已经非常繁荣,进入了一个高潮期,似乎所有人都在谈论人工智能,它似乎已经无所不在了。但其实在我们从事人工智能研究的人们眼中,人工智能研究的发展尽管取得了很大进步,但是还远远没有达到顶峰,在很多方面,仍然算是刚刚起步,还有太多的问题没有解决,智能化的程度离人们的期望还差得很远。
总结一下,在计算机应用方面,远到航空航天器上的软件,近到我们手机上每天都会用到的扫一扫健康宝,扫一下支付码等,从文本、图形、图像、语音、视频等的处理,到智能机器人(包括人形或非人形的机器人),这些全都是计算机专业在研究的内容。
计算机本身和计算机应用,其实还应该再加上计算机理论——这个我们今天因为时间关系就不多介绍了,它们构成了计算机专业研究的内容。
计算机专业的特色
计算机专业跟别的专业相比,主要的特点是什么?从我个人的体会来讲,一共有四个特别明显的特色。
第一个就是创新性。这是一个高度变化和发展的领域,从我前面给大家看的图片例子里面就能看到,从最早的计算机需要140平米的房间才放得下,一直到现在我们的pad一个手掌就可以拿得住,而运算速度是以前的上亿倍,无论是硬件还是软件技术,都是在高速发展变化的。
编程语言也会有很大的变化,很有趣。我最早在初中时学的编程语言叫作VB(VisualBasic)。VB这个语言现在应该已经没人用了。后来等到我上大学一年级的时候,学的语言是Pascal和DelphI,现在大多数人都没有听说过了—— 我还曾经用它编过一个图书销售记录程序,给家里的一个书店实际使用。当时也学了C语言,到现在人们还在用,后面还发展出了C++、C#。还有我们大学里面还学过Java,这个语言现在也还在使用。当前人们也大量使用python来编程等等。
不知道你有没有被这一连串的名字绕晕。你会发现二十年时间里,生成计算机程序所使用的编程语言本身都发生了巨大的变化,写程序时你写的东西都完全不一样了,每换一种语言,就需要重新学习一次。我们所处理的任务也在快速变化着。因此如果选择了计算机专业,就意味着可能直到你退休或转行之前,都永远是在学习新东西的状态中。这其实是特别有趣和特别能让人感到兴奋的一个点。学习和工作中有趣的全新的事情在促使着你不断发展,而且你会看到这些东西在越来越完善、越来越好用,路上的风景越走越漂亮,然后你会有一种感觉:就在我自己的手中,在我的努力之下,让这个世界变得越来越好一点。
第二点是它的开放性。计算机相关领域的发展总是走在社会的最前面、在技术的最前沿、也在我们生活应用的最前端,而且它们是在动态变化的。这也就意味着,对一个问题我们往往有不止一个答案。它不是像数学一样一加一就是等于二,我们在同一个基础上解决同一个问题,可以有很多种不一样的思路,都能取得很不错的效果。
这样的开放性也是这个领域非常独有的特色。当我们在计算机研究中走得越来越深的时候,就越来越不会说那些绝对的话:这就是对的,那就是错的;或者只能走这条路,我们没有别的选项…… 我们永远会告诉自己可能还有别的选择,甚至自己写出来一个算法的时候,还会在想还有没有更好的方法 —— 一般来说一定有,于是我们就有了下一步前进的方向:我们还可以怎么做?这种开放性也是计算机专业非常宝贵的特色。
第三个特色就是确定性和不确定性的融合。确定性是指,有一些东西在计算上面非常精确。现在有很多的精密计算都是交给计算机来做的,因为人已经算不过来了,例如在我们航空航天领域的精密控制,比如调整飞行角度 —— 小朋友们要知道,飞行角度的调整,一定不是航天员坐在飞行器里用手来操作的 —— 不是因为他们太懒,而是由于人工操作的精度达不到要求,这样的精度必须要由计算机来控制。这是非常重要的、确定性的精准。但同时另外一方面,我们还需要去解决那些模糊的、不确定的东西。我们在很多不同的场景下经常用的算法,输出的结果其实是一个概率。比如说我们在辅助医生诊断的时候会说,这是疾病A的概率可能是98.5%,或61.3%等等。
说起这个,我给大家看两张图片:
上面这张图片是很著名的笑话,大家看上面这个字写的是什么呢?有很多人说“杜甫能动”,特别好玩儿,但其实应该从右向左念,是“勤能补拙”。但这个如果给计算机去识别,很有可能也是识别不对的(当然也说不定是OK的,我自己其实没有试过)。下面这张图是一个实际的例子,就是让计算机去自动识别一段话。你单独看每个字,计算机都会根据可能性的高低给出前十选答案,你看,其实前十选里面有三个都是不对的,这就是我们所说的模糊的意思,就是不确定性。就是我们往往能够猜测出一些答案来,但是这个猜测不一定是对的。不过有趣的是,经过后处理程序的自动纠错过程,就能识别出来正确的那句话,就是“我们要振奋精神”。
第四个特点是学科交叉性与可扩展性。计算机专业越来越发展,与其他不同的专业结合得也越来越多,形成了很多交叉学科。比如在我自己的研究中,就有不少借鉴心理学和经济学的内容。它们这些学科有很多著名的说法和原理,例如沉默的大多数、边际效应递减等等,都被我们用起来,作为我们建立计算模型的一部分。我也和水利系有合作,水利系的老师说想要做精准的水流量控制,比如说上游的闸门要开多高,下游的水量能够刚好可以用来灌溉农田又不浪费?这其实是一个挺复杂的任务。以往他们就是靠人去控制闸门的高度,误差一般在零点几米,而我们希望把这个误差控制在几厘米甚至几毫米。在这个过程中,我也学习了很多水利方面的知识,例如稳态和非稳态流量等等。
我们的孩子应该从小具备什么样的素质?
这也是家长们最关心的,就是如果我们的孩子未来有可能会选择计算机专业的话,应该从小需要具备什么样的素质,才能让他以后的选择比较顺利?所以接下来,我们就要说说学习计算机专业需要什么素养,对孩子们的培养应该从哪些角度来入手。
第一个,数学基础。如果你想要学好计算机,一定要数学很好。计算机专业和数学是密不可分的,如果没有很好的数学基础,在后面研究的过程中就很难建立足够好的数学模型。没有这些数学模型,就很难把它转化成合理的计算机模型,得到有用的应用结果。事实上在清华的计算机系,我们上的数学课是A类的最高难度的,跟清华所有的理工科专业比起来,计算机系的数学都是最难的之一。
所以孩子们如果未来想要往计算机专业发展,你的数学基础一定很重要。我们需要非常扎实的基础和解决问题的能力,就是给你一个问题,你自己去想出相应的数学模型和解决思路的能力,而不是应试的你只要记住这个规律、背了这个公式,然后就算出来 —— 这反而是计算机专业不那么需要的,因为对于计算机来说,很多公式是可以查得出来的现成的。所以你光是会背公式不行,你要能推导出公式,能知道这个公式是怎么来的,你才有可能很好地应用它,并且改进它。
第二个能力,理解能力。在计算机的研究里面有非常多的东西,涉及到的是对前人已有的算法的改进和改善。在计算机专业学习,你要读非常多的东西,读历史资料——就是读经典的算法、数据结构等等,这些都还不够;除此以外,你还要经常读最新的论文。这些最新的论文有国外的、国内的,有英文的也有中文的,所以英语能力也要非常强。
理解能力还包括什么呢?还包括你读别人的程序和代码要能读得懂,你得知道他的这个程序是怎么写的,他这一段代码是用来做什么样的事情的。在一些非常规范的计算机行业的公司里,写代码的工程师们的日常工作之一是code review,就是代码审查。张三写的代码,李四要去读一下,然后李四在读张三的代码的过程中会发现其中的问题,例如逻辑是否通顺,是否处理了所有情况等等。只有经过李四的审核觉得可以了,代码才可以上线运行。下一次李四的程序要上线之前,可能换做张三来做检查。这种交叉的code review是很常用且很必要的。
刚才我们说的这种理解能力是写程序方面的,此外还包括大家在工作中对要解决的问题的理解能力。就是当一个人告诉你说“我想干这么一件事儿”,你听到对方的这个需求时,怎样理解它背后到底是想要做什么?这个能够理解得足够清晰了,才有可能真正想到办法解决它。这是一个特别特别关键的环节,也是我们在跟合作方讨论项目时首先要解决的环节。
比如对方说:我想让更多的人买我的东西。那么你就需要理解“更多的人买我的东西”背后代表的需求是什么呢?他是想增加卖出去的商品数?还是想增加来买东西的人的数量?还是想提升他的营业额,即一共卖出去多少钱?是想留住老客户,曾经在这儿买过的人,我希望你还能继续在这儿买;还是说我想要吸引新的客户来买东西?你看就是这么一句话,事实上背后蕴含着的可能是五种或六种不一样的需求,每一种需求背后都需要不一样的方法来解决。
理解能力非常非常重要,它其实也隐含着对沟通能力的要求。有个实际的体验,我早期跟心理系的老师一起讨论,大家很开心地聊了20多分钟之后,突然发现我们俩说的根本就不是一回事儿。我们用的词是一样的,但是我们说的话背后的含义是完全不同的,因为有的词在他们领域和在我们领域是不一样的,颇有点鸡同鸭讲的意思。
第三个能力就是抽象能力。还是刚才的例子,对于 “我想让更多的人到我这里来买东西”的自然语言表达,你怎么把它抽象成一个数学问题,然后再把它抽象成计算机语言中的问题?这其实是一步又一步的抽象能力的发展。我特别喜欢现在这几年小学数学的考试题目,和往年比有很大变化 —— 很多人说,如果小学语文不好,那数学肯定考不好,因为现在的数学考试题,都变成了一段话描述的应用题。其实我觉得这是真正在考察一个孩子的能力,也是计算机专业特别需要的基本素质。因为你首先需要把这个题读懂,理解这种复杂的应用题在考什么样的数学问题,是在考加法还是减法,还是乘法。当你抽象出这个问题之后,后面的问题才能迎刃而解。所以大家一定不要忽略孩子们对这部分能力的培养。
第四点是逻辑思维能力。在计算机专业中逻辑思维是特别重要的,因为它的程序代码的写作就是在考察逻辑。我想起来一个例子,是在我女儿双双还在上幼儿园小班的时候,她玩儿滑梯,爬到上面时我顺口叮嘱了一句:“双双你要先看下面有没有人啊.”结果双双就坐在滑梯的上面问我:“妈妈,下面如果有人是不是就不能滑?”我说对。她又问:“那如果我滑到一半儿的时候,下面来了人怎么办?”我想这很有意思,这是一种例外情况呀(就是计算机程序中要处理的特殊情况)。我说:“那你就要大声喊,说'小心请让开'!”然后双双又继续问:“那如果我滑到一半儿的时候,上面来了人,我怎么办呢?”我就想,哈哈,这又是另一种例外情况啊。我回答“那你滑下来就赶紧跑。”当这三种情况都想完了,小姑娘心满意足地滑下来。我当时就对双双说:“双双你不错呀,你其实已经是写了一个小的计算机程序了—— 就是滑滑梯的程序,关于'有没有人’这件事情的处理,你已经考虑了各种情况,真不简单!”其实这就是一种逻辑思维的能力。大家从这个例子里面应该就能够体会到,并不是只有编程时才能得到学习和锻炼的,在日常生活里完全可以培养孩子这样的能力。
再举个例子,在孩子四五岁时我们还做过进电梯的安全教育游戏。我们跟孩子讨论,你不要自己单独进电梯,否则会怎么样?如果不小心自己进去了,爸爸妈妈没进去,你要怎么样?如果爸爸妈妈进去了,你没来得及进去,你要怎么样?这也是一种计算机会用到的逻辑思维能力。如果我们平常多和孩子做一些这样的讨论,他的逻辑思维能力就会逐渐构建起来,对他未来学习计算机有特别大的帮助。
最后一个是分析能力。分析能力是什么呢?就是你看到了一个结果之后,你觉得它可能代表着什么?这件事情挺重要的,在计算机专业上面特别常用。例如当你的程序跑出来一个结果之后,你一看我的这个精度只有70%,还有30%是做错了的。这个时候你就不能到此为止,而需要修改完善自己的算法,要想怎么样把剩下的那30%也做好,分析所有出错的可能的原因,进行归类总结,逐一想到解决的方案,然后才能做出相应的修改,这个依靠的就是分析能力。
这种能力其实在我们的日常生活中也特别重要,也是在生活里就能培养的。比如你跟孩子一起出门玩儿,走在路上本来挺高兴的,孩子手里拿着的一个雪糕突然啪一声掉到地上了,这是特别郁闷的事儿。在响应了孩子的郁闷情绪,不难过之后,你会不会对孩子分析一下说这件事儿是怎么发生的?是手没拿稳吗?还是天气太热,雪糕化了支撑不住了?甚至也许还是因为这个雪糕的设计不合理,你不好拿?等等。这样的过程,在计算机专业中叫做debug。bug是程序里的错误,小虫子;debug就是“抓虫子”,是找出来错误出在哪儿了,要把它改过来,下一次程序才能正确运行。这个能力是计算机专业特别需要的。事实上,它也是在各个领域——不仅仅是计算机方向——都特别需要的能力,也是我们生活中所需要的。所以建议大家平时在跟孩子聊天的时候能多做一些这样的分析,多“抓抓虫子”。
COMP UTER
解读大学专业是系列讲座,欢迎大家继续关注后续的讲座。讲专业不是重点,打掉家长们的专业局限和认知局限是关键。文话童心所有的活动,都旨在着眼于孩子未来一生发展。
扫码加客服 | 欢迎一起聊育儿
● 微信号 : wenhua_mengmeng ●
新浪微博/抖音:@文话童心