今天为大家分享的是提升学术竞争力之第二期「Python 算法基础坚实计划」,本文会为大家分享计算机科学、人工智能、Python的内容。
计算机科学(computer science)顾名思义,就是一个与计算机相关的学科,发展至今,实际上已经变成了一个非常庞大且复杂的知识体系,它的下面仍然是有很多的小分支。这些分支,它可能每一个都对应着我们在日常生活和工作中的应用场景。
比如说软件工程,研究的是我们如何用编程的方法去搭建出有具体功能和使用的软件,这就是计算机科学领域下的一个比较重要的分支。还有像信息安全,研究的是我们在互联网上如何保护我们自己的信息,包括防火墙、抵抗黑客信息加密的工作以及杀毒软件,这些都是属于信息安全研究的范围。再比如数据库人工智能、大数据这些方向,它属于是这几年比较新兴的,在计算机科学下面的分支学科。
一提到计算机科学,可能很多同学和家长的印象就是“敲代码”,要在电脑上编程。首先,这个印象是没有错的,计算机科学确实需要学习很多的编程部分,但是,在我们专业的学习当中,可能要学的就不止是编程,传统的CS学科还需要我们学习一些硬件方面的知识和原理,比如计算机原理,它可能是CS的必修课。讲的就是我们的计算机,作为一台机器,硬件是如何运转的,都有哪些部分、哪些结构,各个部分的功能。还包括我们要学数字电路、模拟电路、还有信号传输的原理,这些都是硬件和软件的知识。
所以简单概括一下,如果我们想要去学习计算机科学,在学校我们学的课程可能主要会分三大板块。第一板块,数学,要把数学算法的基础打好,你才能够熟练地用编程语言去实现你想要实现的功能。第二个板块,硬件方面的原理。第三个板块,也是现在大家学得比较多的或者是大部分人会认为的重头戏是软件编程,我们会学习一些编程的语言,学习一些常见的编程当中的算法以及数据结构。在编程当中,我们一般是如何使用这个计算机的逻辑去实现我们想实现的功能的。
很多同学刚开始接触计算机科学或者刚开始学习编程的时候,很容易认为学好编程语言的语法规则是最重要的。但实际上,可能并不是因为编程语言的语法规则,它的逻辑实际上是你编程的一个基础,语言本身是一通百通的,但是如何运用这个语言去实现它背后的数学算法和逻辑才是核心,就好像我们学习人类的语言,你学到了英语的语法背了很多的单词,但是你仍然要有写作上面的思路和逻辑,甚至有好的文笔,你才能写出好的文章,所以实际上背后的算法和逻辑才是最重要。
同时,计算机科学它是一门实践为主的学科,仅仅有理论知识是不够的,它需要我们多去实践、多实打实地在键盘上敲打代码。在这样的一个学科当中,我们如果要做科研,那研究的目的其实就是我们想要试图找到一种更好的方法去解决某一个问题,它是一个方法导向的一个思路,比如说如果我做一个游戏,游戏里面的某一个功能,我可以使用怎样的算法,怎样的结构去实现,能够把它更进一步的优化,把它实现的更好,这往往是我们在计算机科学里面比较关注的问题。
学习计算机科学我们能做什么?
学习学科之后,将来的科研或就业方向都包括哪些?
第一个可能在大家的认知当中,比较主要的就是软件编程,很多互联网公司的技术岗位都是属于软件编程的范围,也是我们经常说的程序员。广义上的程序员,主要工作的是软件编程,日常工作就是要进行某一个软件或者某一个应用的功能搭建,用程序把这些功能写出来,比如说微信的发语音、打字功能,需要微信的程序员用编程的方法把这个功能搭建起来,除了功能搭建,也包括前端的视觉呈现、交互的方法,也是需要编程去实现的。
除了软件编程,在互联网公司或者在技术公司,可能还会有很多其他的技术类型的岗位,也需要编程。比如数据处理,我如何建立管理这个公司的数据库,把数据和信息,保管得井井有条,并且用数据去进行业务场景的算法分析,帮助公司做出更好的商业决策。技术岗位的工作还包括信息安全,如何搭建防火墙,保护公司或者是某个人的隐私,像银行或者有机关就很需要这方面的工作。
再一个大方向不得不提的就是人工智能(AI),AI是近年来最流行的方向之一,无论是选择科研还是就业,实际上都是比较流行,也比较广泛的。
和上面讲的技术岗位以外,其实计算机科学出身的学生也可以去互联网公司或者科技公司里面从事一些非技术类的岗位,比如说TM、产品经理、测试、运营、UI,这些都是技术背景的同学们可以去尝试的工作,而且当你有了这种技术背景,有了编程知识,实际上你在从事这些非技术岗位的工作过程当中,你能够比没有这方面背景的同学对于业务有更好的理解。
既然我们讲到计算机科学,它未来可发展方向,不得不提的一个大趋势就是AI。可能有很多的家长或者同学,对于AI只有一个模糊的概念,如果提到AI,可能大家会想到科幻电影里的机器人,会思考对话、有自己的意识,但其实这只是人类对于AI的一个终极幻想,和我们目前的现实技术的发展还是有很大的区别。
在我们的日常生活中,其实AI是无处不在的,它不一定像电影中的机器人一样,拥有一个实实在在的身体,更多的时候,它是以一种无形的方式存在我们身边,它是一种算法,一段程序,一个模型,甚至是一个系统。
举例,比如我们手机上很常用的支付宝人脸识别。此功能,实际上它就是AI算法,它能够做到识别出每一个人具体的长相。再比如苹果手机上面的Siri,它能够听懂你说的话并且根据你所说的内容,做出一些具体的回应,它实际上也属于人工智能的一个算法。
人工智能的应用领域,在我们生活当中现在是越来越多了,这里列举几个比较主流的应用领域,第一个,计算机视觉,它主要研究如何让一个程序去识别出图片,那具体的应用包括人脸识别、自动驾驶、驾驶辅助,再包括物体识别比如我们现在的百度、淘宝都可以搜索图片,识别出具体的图片和内容,属于智能的图像处理。
第二个比较常见的,也是近两年比较流行的一个领域,叫做自然语言处理(NLP),自然语言是我们人类日常使用的语言,包括我们的文字和我们口头的语言,那现在世界上所有的语种语言都属于自然语言。我们在微信上打的文字和语音,实际上它都是属于自然语言处理当中研究的范畴,NLP的终极目标,是计算机或者我们研究出来的人工智能算法,能够真的理解人类的语言和人类进行自然的对话。
在日常生活中,我们可能会看到有一些翻译软件比如说谷歌翻译,还有一些能练口语的智能机器人,它都是属于自然语言处理的研究范围,那还包括大规模的数据检索,最常用的就是我们的搜索引擎,百度,谷歌都是能够智能的处理我们输入的文本。那还包括像智能客服,对话系统其实都是机器人,有的时候在淘宝或者某一个银行的APP上面,在与客服沟通中,你会发现它都是一些机器人在同你进行一些智能的回复,对话系统,也是属于自然语言处理的研究范围。
第三个比较常见的人工智能应用领域,就是推荐系统,推荐系统包括我们在生活中会使用的各类软件,实际上他们都会搭载一些推荐的算法比如说淘宝,会自动给你推送一些你可能会喜欢的东西,它就是根据你的浏览数据。某一个商品的页面停留的时长、具体的操作、行为来进行分析,然后一些内容类的网站比如说小红书、微博、B站,他们都有各种各样的基于内容的推荐算法,在每一个网站,每一个应用,他们的推荐算法,根据具体的功能以及用户群体都会有细微的差别。
那既然计算机或者说人工智能,它有这么多的应用领域,我们在日常生活中的学习当中,它是具体是怎样进行学习和研究的?
首先我们在每一门课里或者在每一个小项目、每一个课题里,先要做的第一步就是选定一个研究领域,如果你想做图像处理的课题,选择一个非常具体的领域,图片的搜索、人脸的识别等等,先把这个非常具体的话题确定好。
我们的课题,可能是直接由老师定题,但有些时候,我们需要自己去看很多的文献,然后从文献中发现一些,还没有被研究或者是有待解决的问题。
比如在学习计算机视觉的时候,老师给我们留的作业,如何用他办公室的100张照片合成一个3D的实景模型,然后我们的任务是搭建一个计算机视觉的算法模型,把这100张照片,从一个平面的形式转换成一个三维的立体模型。
那在面临这样一个任务的时候,第一步我们需要确定我们的数据源,在这个具体的课题当中,数据源其实就是图像数据库当中的这100张需要的照片,我们要把这些图像数据输入进我们的程序里,还要把这些数据当中无用的错误部分去掉。那么问题就出现了,照片和照片之间的部分是不是重叠了,这个部分是不是需要被删去?
下一步,就是我们要通过课堂的学习或者是读文献,去寻找一个适合我们当前这个情境的算法。比如查阅文献时,我发现有一个算法,它在2D转3D的图像处理方面表现的效果是很好的,那我找到这个算法之后,它肯定是不能直接拿过来用的,因为每一个课题具体的应用场景是有很大差异的,我们需要在这个算法的基础上去搭建我们自己的算法模型,根据我们课题的实际情境去编写一个的模型。
算法搭建好了,程序都写完了之后,我们就要开始实验了。计算机科学当中的实验,一般是我们有了算法模型写好了,我们把准备好的数据输入到这个模型当中,然后程序运行,如果是很大的算法,他甚至可能会跑很久,算完会反馈给你一个结果,你要看这个结果他符不符合你的预期,如果不符合,有哪些方面是可以优化、调整的,那我们根据这个结果不停的去优化调整,直到满意的结果。
那如果没有接触过编程的同学,可能对于这个过程的认知会感到有些抽象,老师会告诉大家,在编程的过程当中,实际上就是你使用某一种计算机能够听懂的语言,去和计算机沟通的过程。也就是我们常说的编程语言,其实编程语言有很多种比如说C++,Java可能有同学听说过,在我们现在的计算机科学当中,尤其是很流行的AI领域当中最流行的是python语言。
Python在英语当中是蟒蛇的意思,大家可以看图中官网上python的logo,像两条蟒蛇缠在一起,那这么多的编程语言,它其实各有各的特点和用途,python的特点实际上就是比较简单,容易学习,而且它被广泛的应用在AI、统计、云计算等比较新兴的领域里面。
所以大家可以发现python这门语言的功能很强大,它可以应用在各种各样的专业领域当中。但同时,它的语法又相对简单,很容易学习。同时,给我们提供了很多现成的工具可以使用,非常适合初学者进行学习。
上图都是特优生学生的作品,第一个动漫里的人物,左边这段代码的功能是加载这张图片,然后在这个图片上面输出一些文字,类似于做一个表情包之类的功能。那后面的两张是编写程序,用python来画画。
因为计算机科学它的里面的领域和分支是很多的,所以大家在学习的前期实际上应该是先广泛的去接触,充分的去了解每个分支方向,了解了之后,你才能确定你对它感不感兴趣,然后我们确定了感兴趣的方向之后在读研的过程或者读博的过程中或者求职的过程中去专攻一个方向。
我们在校期间如何有效的学习,用各种技能来武装自己,根据未来职业规划这里分享两个方向:
第一个方向,学校给你提供的整个选课的体系里面,是能够看得出后续的职业方向有可能是纯AI的各种算法或数据库和数据的处理,以及统计层面以及倾向前端的设计,人际交互和用户研究。
第二个方向,我们可以去下载招聘软件,提前看看现在的市面上的职位描述,对于能力的要求,根据岗位职责的描述来选课去学习。比如打开一个数据分析师或者数据库研究员的岗位,那他的要求可能是你需要熟练的使用SQL、Hive,那就在选课的时候去朝着这个方向去选,当你学了之后,就会比别人更有这方面的优势。