我自己的一位大二学生,由參加ACM不安心。后来体会了应用的核心在算法,能在竞赛中坐住了。但如今,又有新问题了。
【来信】
贺老师,我想问一下,假设打算考研,在这四年里仅仅搞算法不搞应用,或者说仅仅是懂一点应用。这样合适吗。
【回复】
算法在计算机和软件project中都非常重要,但不是所有。大学期间的学习,是专业教育中的基础阶段。其它的也要好好学。研究生開始。要钻研详细的研究方向,须要对专业全面的了解作为支撑。对于应用,能够理解为要从事这方面的工作,但我觉得更关键的数据在于,为理解基础理论提供一个介质。让理论生动起来。感悟知道理论的价值。搞搞应用,让学习生动起来。
立即大三了,能够在一段时间内,专注某个技术。做个小应用,认真对待各门课的课程设计,这种学习也会更好玩一些。
不搞应用。或仅仅懂一点(不做是达不到懂一点的),远不够。
【学生答复】
老师解说的非常详细 跟我的想法也有非常多类似之处。我也想做一些小的应用,练练手。老师你说的研究生開始钻研详细的研究方向是什么呢,是详细的开发技术吗?
【我的长文回复】
这是一个非常好的问题。我发现我应该为你和广大同学普及一下关于研究方向和开发技术方面的一些常识了。
1 科学、技术、project
科学、技术、project是工科学生常见的关键词。
除了这三个词,我还想增加管理。随着工业(包含化工、建筑等传统工业,也包含IT类的新型工业)的发展,对科学、技术、project方面的管理日益重要。
以下一段的阐述来自《逆袭大学——传给IT学子的正能量》第2.3节“搞计算机的人干什么”的缩写,你们班有同学买了,你能够借阅深入了解。
对于主修计算机类学科的学生,以及从其它途径要进入到这个行业中的人员,学有所成之后要从事的本行业的工作范围非常广,却须要放开我们的视野,在科学、project、技术和应用四大领域中搜索一番了。
依照传统的说法:
- 从事科学的人是“发现者”,他们试图发现自然、社会等方面存在的规律。
- 从事技术工作的人是“创造者”,他们利用已发现的规律试图创造新的物品、工具、方法来满足人类的须要。
- 从事project的人是“实现者”,以合理的成本建造或生产稳定可靠的结构或产品满足大量人群的须要。
- 从事应用的人是“推广者”,将project师创造的产品。普及到须要的地方,为社会大众服务。
从科学的角度讲。计算是一项体现人类高度智慧的活动,计算机器是一种人造工具,故而计算机科学研究的并非自然现象,而是一类非自然结构的内在规律。
每一个科学学科都有其所谓的“终极”问题,计算机学科的终极问题是“什么能够被自己主动地计算?”。
project和技术的关系有些复杂。
技术是人在改造自然、改造社会,以及改造自我的过程中所用到的一切手段、方法的总和。技术人员是创造者。是开发、发现这些手段和方法的人。project师作为制造者、实现者。与发现者、创造者有非常大的不同。他们的工作目标就是产品,要为用户负责。在一定的制度与规范约束下开展合作。技术对project起着支撑作用。project的立项必须要在技术可行性分析的前提下开展。
最后说到应用。依照CC2004中对计算机学科中划分的方向,信息系统和信息技术两个方向划分为应用型。信息系统方向的任务是负责建立和维护信息系统。这是让计算机技术和project直接发挥作用的环节,是信息化社会的基本保障。
从事“信息技术”应用,是要在各个不同的专业领域内用计算机去实现特定的计算需求。
科学、技术、project和应用不仅须要不同的知识和技能背景,更重要的是他们具有不同的思维方式和工作模式。在不追求成为一个通才的前提下。搞清楚这里的区别,明白作为一个“搞计算机的人”。要做什么样的选择。
在《逆》书第5.2节“我们要什么样的知识和能力结构?”中。又讲:
计算学科,是研究计算机的设计、制造和进行信息处理等的理论、原则、方法和技术的学科。包含了科学、project和技术:计算科学側重于研究现象揭示规律。计算技术则側重于研制计算机和使用计算机进行信息处理的方法和技术手段。计算机project利用相关的方法和技术,生产出产品。这三方面互为依托。相互推进。计算科学中的研究成果转化为了技术。而计算技术的发展促进了计算科学研究的深入。用计算技术指导project实践,而project实践的发展转而作用于技术进步。因此,计算学科就是这样一门科学性与project性并重的学科。其理论与实践也经常紧密地结合在一起。
计算机要解决现实世界中的各种问题,模型构建和測试、评价,须要採用的是科学研究的方法。而设计和构建软硬件系统的过程,则属于project范畴,採用project学的方法。
2 研究方向
在了解了上面的背景之后。要知道对计算学科(包含了计算机科学、技术、软件project等相关专业),谈“研究”。研究内容包含计算科学,以及环绕着产品的开发技术、project、执行维护当中的问题,以搞清楚问题。并提出解决方式为主要目标;而“开发”,则意味着为了做出产品,让产品更好地执行所做的更直接的工作。
所以在研究生培养阶段,要在专业以下分研究方向,高校教师和科研单位的研究人员,也有研究方向,企业里的高级技术人员,也有研究方向。
举例说明,“计算机科学与技术”以下再细分“计算机系统结构”、“计算机软件与理论”、“计算机应用技术”三个二级学科。这是我们常说的研究生招生的专业。是由国家规定的。而研究方向的设定非常灵活,由招生学校自己确定。
以下是从网上搜索得到的描写叙述(应该是某校介绍其研究方向的材料,见《计算机专业研究方向详细解释》):
(1)计算机应用技术
研究方向:计算机网络、实时计算机应用、CIMS、计算机图形学、并行计算、网络信息安全、数据库、情感计算、 数据挖掘、分布式计算、知识project、计算机视觉、自己主动推理、机器学习、草图理解、网络性能分析与协议设计、网络管理与安全、计算机图形学、信息可视化、基于 GPU的高性能计算、复杂系统(应急、物流、海洋)领域project、基于SOA的空间信息共享与业务协同、语义搜索引擎、自然语言处理、机器翻译、搜索引擎、空中交通信息系统与控制、民航信息与决策支持系统、智能交通系统理论与技术等。
专业特点:计算机应用技术是针对社会与各种企事业单位的信息化需求。通过对计算机软硬件与网络技术的选择、应用和集成,对信息系统进行需求分析、规划和设计,提供与实施技术与解决方式。创建优化的信息系统,并对其执行实行有效的技术维护和管理的学科。
培养这方面人才所涉及的知识面包含:数学与信息技术基础、程序设计基础、系统平台技术、计算机网络、信息管理与安全、人机交互、集成程序开发、系统架构与集成、Web与数字媒体技术、project实施、职业操守等。培养目标是为企事业单位和政府机构提供首席信息官及承担信息化建设核心任务的人才,并提供为IT企业提供系统分析人才。
(2)计算机软件与理论
研究方向:计算理论、算法理论; 软件project、中间件、智能软件、计算环境;并行计算、网格计算、普及计算;password学、信息安全、数据理论;图形图象算法、可视化方法;人工智能应用基础;理论计算机科学其它方向
专业特点:计算机软件与理论专业涉及计算机科学与技术的基本理论和方法。强调计算、算法、软件、设计等概念,基本的领域包含计算理论、算法与复杂性、程序设计语言、软件设计与理论、数据库系统、人工智能、操作系统与编译理论、信息安全理论与方法、图形学与可视化计算、以网络为中心的计算等。
就业方向:本专业培养的研究生具有坚实的计算机科学与技术的理论基础,全面掌握计算机软件的理论方法,以及软件project、信息系统、并行计算、普及计算等等的软件系统开发技术。能非常好地胜任高等院校、科研院所、大型企事业单位、高新技术产业等的教学、科研、系统设计、 产品开发、应用系统集成等工作。
(3)计算机系统结构
研究方向:分布式计算机系统、计算机网络系统与全球个人计算系统、真实感图形生成与虚拟现实技术
专业特点:计算机系统结构(原名计算机组织与系统结构)专业全面研究各种类型的计算机系统(从单机到网络)的构 成、硬件与软件的联系与功能匹配、计算机系统性能评价与改进等。该专业的研究课题涉及高性能处理机系统结构、多机系统、并行计算与分布式计算系统、计算机系统性能评价、VLSL设计、容错计算技术、计算机接口技术、计算机网络系统与通信系统、移动计算、全球个人计算系统等。
就业方向:本专业培养的研究生具有坚实的计算机科学与技术的理论基础。全面掌握计算机系统结构、计算机project、网络project、嵌入式系统等的应用开发技术、能非常好地胜任高等院校、科研院所、大型企事业单位、高新技术产业等的教学、科研、系统设计、产品开发、应用系统集成等工作。
3 开发技术
开发技术,是为了做出产品,让产品更好地执行所须要的技术手段。
广义地讲。上面所提的各个研究方向中,都包含着开发技术的成份。
所谓研究,并不全是所谓纯理论。这种理论没有生命力。
不少的研究。直接针对的,就是要制造出产品来。在制造产品的过程中,关键的科学问题和技术难点。须要的是“研究”,而在制造出样品的过程,那就是开发,须要开发技术的支撑。开发技术,本身也能够是研究方向,当中的门道,须要专业技术人员去掌握和拓展。
在广大的本科学生中间,对开发技术的范畴往往是狭义化了,将开发技术限定为是终于实现产品的时候所用的详细技术。
比如谈到社交网络。研究人员脑中会想到这种网络中蕴涵着如何的规律;高级技术人员关心的是。海量的数据和用户同一时候訪问,瓶颈问题如何解决,这里有开发技术的成份;在我身边的不少同学。关心的是用PHP开发Web应用,还是用Android开发出移动应用,这也是开发技术。
想与更直观些的土木project做一个对照。在project设计阶段,考虑採用什么样的结构、计算受力,目标在于设计出project图纸的活动,须要开发技术;在设计方案的约束下进行施工,须要施工技术;而一线的建筑工人,钢筋工、木工、泥水工、外架工、水电工。他们终于实现project任务。我们也常说须要技术,当中技能的成份很多其它一些。
讲这些。是想引出一个话题,我们面对IT行业,和传统的project行业有区别。开发技术和施工技术以及实施技能之间的区分淡化了。在《逆》书第5.2节“我们要什么样的知识和能力结构?”中还讲:
在传统工业领域,产品设计和产品制造、生产之间的形态有比較大的区别,在生产链的不同环节须要的人员在知识结构方面区别较大。
比方土木project、规划、勘測、设计、施工、养护等技术和研究工作。往往由性质不同的单位实施。但在计算学科中,非常多时候学科的理论、技术和project之间的界限十分模糊。理论探索、技术开发和project应用之间的周期非常短,实验室产品和终于投放市场的产品之间差点儿没有太大的区别。很多产品,尤其是软件产品,一经开发、測试完毕,就能够通过复制或者通过在线的方式进行销售。计算机领域,科学与project素养兼具的人才也更常见。科学家和project师之间有比較明显的分工,但也有少数人既是科学家,也是十分出色的project师。非常多顶尖的公司,如谷歌公司,鼓舞研究人员的成果在自己的主导下进行开发,高速变为产品,极大地缩短了新产品问世的周期,表现出的是一种强大的竞争力。
传统行业中的好project师,能够完毕高级的设计工作。而一下工地,一进车间,干工人的活也不逊色。作为一个IT行业的高素养人才。须要具备能完毕各层次工作的能力。
4 对计算机类专业大学生的建议
对本科毕业生而言。能够在诸多详细的开发技术中能“有一手”。包含各种语言(C/C++/Java/Python)、各种应用技术(如桌面应用、Web开发、移动开发、网络project、执行维护、系统測试等),是基本的要求,这是大多数的人在就业时能够向人出示的名片,也是不少在入职后起步做的0基础技术工作中,能够直接使到技术。这能够归结为专业技能能的层面。
大学中设置的课程,除了相应“通识教育”的部分外,专业基础课和专业课,终于的落脚点就在这些技术上。
不要由于那些课程的形态与终于的技术呈现的形态不同就忽视它们。比如,程序猿终于的工作是代码,而学习和研究算法。其表现形态却不是代码。而算法在编程中的重要性。是不须要多说的事。这是大学中奠定技术基础的任务。
而立志在学术上往前要走一走,想将自己塑造成高级研究人员和技术人员的同学。上面的两项要求仅仅是基础。进一步知道一些关于研究方向的事。在报考研究生的决策之前能够据此定方向、定学校、定导师,不要再反复高考报志愿时的盲目。这也是一件须要做的事了。
==================== 迂者 贺利坚 CSDN博客专栏================= |== IT学子成长指导专栏 专栏文章的分类文件夹(不定期更新) ==| |== C++ 课堂在线专栏 贺利坚课程教学链接(分课程年级) ==| |== 我写的书——《逆袭大学——传给IT学子的正能量》 ==| ===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 ===== |