在计算机这个领域...... (一)
一、如果你啥也不会......
我和大部分的你们一样,对计算机有一定的了解,但对计算机类专业是真正做什么的,却并不清楚。有人说,“计算机专业就是学习各种‘计算机语言’,学习如何编写程序”,这种观念是错误的!而只有建立一个清晰完整的“计算机世界观”,“计算机体系的大框架”,才能使你站得高看得远,看得远也看得真。 也有人急于学习各种计算机知识,怎么这个我也不知道,那个我也不知道?有些知识不知道没有关系(想知道,通过Google、维基百科一搜就可以),但最关键的其实是理解计算思维,要知道:
计算机这个机器是怎么跑起来的? 计算机组成原理
操作系统中你写的程序是如何跑起来的? 计算机系统基础:程序的表示、转换与链接
互联网时代,网络是怎样连接的? 计算机网络
大一入学时,你们总会发现,身边有很多有编程基础的大佬,或者已经开始学习一门编程语言,并能写出简单程序的天才们。当时我是很羡慕的,并且暗暗发誓,自学成才,“笨”鸟先飞,不过,因为对这个领域知识体系的不了解和大一时各种乱七八糟的活动导致的瞎忙碌,最后也是不了了之,并感叹一声:“自学真难,付出的代价太大,我还是老老实实的听讲吧......”。
大部分大一初学者有个很奇特的现象:首先是对编程语言的盲目崇拜,“啊,那个谁谁谁,会写Java,好厉害!”、“啊,那个谁谁谁,会用Python,是大佬!” “啊,JavaScript 前端后端都能写,天下无敌,宇宙第一语言!” 然后开始自怨自艾:“自己只会用一个破C语言,整天只能写出个黑框框进行无聊的 a+b ...... 哦,C语言自己都用不好,那些会更高级语言的人,真是大牛呀!” 这里我先纠正上面的错误观点,C语言并不简单,这个语言是用来写操作系统,网络编程(不是Web开发!),嵌入式系统,驱动程序等等这些比较底层,复杂的软件,只是由于它发明的早,历史给它开了一个玩笑,阴差阳错的成为了我们现如今的“入门”程序语言......
但是呢?学校的目的其实并不是要教你们C这个古老又强大的语言,只是想让你们了解“程序设计思想”(所谓程序设计思想,就是:我们写程序,是用来解决现实问题的,那么该如何把现实问题抽象出来,并用具体的程序语言实现、解决这个复杂的现实问题,计算出这个问题的答案(结果)的思想。),对程序设计有个大概的认知就行了,所以...我们大一其实根本没学全C语言,学语言有几个阶段(我自己的理解):
学词法(lexical)->学句法(syntactic)->学语义(semantic)->学优化(优化句法和语义) 其中词法就是单词(you,am,I,love等),句法就是怎么把单词组合成一个句子的方法(例如,把前面的单词构造成 I love you 这个句子的方法),而语义就是句子的意思,它的内涵。你们可以对照一下,其实大一时学的C语言,词法和句法都没有讲全,更别说上升到语义和C语言大型软件工程上了。 所以,你还觉得自己会C语言吗?你还能内心里沾沾自喜的觉得自己会写程序吗?你还觉得自己只会C语言而觉得自己是菜鸟吗?......
其次,就是对算法的盲目崇拜,以为算法就是最终极,懂算法的人就是大牛。我这里并不是黑 ACM 程序设计竞赛,搞算法竞赛的那些人,与其怨别人整天到处宣传算法,搞得自己以为计算机专业领域就只有算法,其实不如思考一下问题出在哪里,其实是因为:大部分新生都不了解自己的专业!计算机导论课没有抓住重点,上课没人听,学生不重视!说白了,就是学生们对以后的发展方向完全不知道,能干什么,有什么工作岗位,学习路径通通一片空白,而这时候,突然有人大力宣传算法,让学生们了解了算法工程师这个高工资的,也是学生们唯一知道的岗位,学生们会怎样?当然是一窝蜂的跑过去学算法,刷题,竞赛,嗯...,连一门程序设计语言都没学全,完全不懂怎么设计一个程序(没有程序设计思想),数据结构都不知道是什么东西的时候就跑去盲目的学算法了... ...
当然,算法不重要吗?当然不是!算法是每个程序员在编码,工作,面试时都要面对的。程序 = 数据结构 + 算法;而算法呢? 算法 = 逻辑部分 + 控制部分 ,有一定基础的可以参考《编程的本质是什么?》 ,通过这篇文章,你们应该可以清楚你们自己理解的算法到底是算法的哪部分了吧... ?
最后一点需要说明的是:开发(develop) 并不等于编码(coding),做一个项目,最重要的也不是编写代码,甚至编码只占一个工期工作量的 30% ,所以,放开你们的视野,千万不要只局限于编码 coding 那点事。
这些就是大一时一些学生的问题了,希望对初入大一,初学计算机专业相关领域的你们一点帮助吧 ... ...