现在的位置: 首页 > 综合 > 正文

学语言究竟学什么?

2013年10月13日 ⁄ 综合 ⁄ 共 3621字 ⁄ 字号 评论关闭
有位朋友的问题在我信箱里面压了两周了,我呢,一直没有回答,包括上周一次回答三位朋友的博文,也没有回答他的。这里对这位朋友说声抱歉。
倒不是我有意拿大,关键是这位朋友的问题,看似简单,其实很难回答,属于典型的开放式问题,而且很模糊,不好回答啊。但又不可否认,这个问题,很多人都问过的。
我本意也是本周末来回答这位朋友,不过呢,说实话,我呢,水平有限,恐怕回答不好,只有尽量答答看,如果不满意,也请见谅了哈,我回去继续学习,什么时候学好了,继续回答。
这里我也说明一点啊,本周准备要写的博文,其实是这一篇,额外那两篇,其实是因为意外事件插入的哈。我是《0bug-C/C++商用工程之道》的作者,读者来信肯定要优先回复的,这是原则,不能变。还有就是有人乱来,我拍回去,这是私人恩怨哈,大家别参与。
还是那句话,一家之言哈,欢迎拍砖。
原文如下:
肖老师,看过您写的文章,对您是相当的佩服啊。我有个问题想请教请教您,我是一个网络工程专业的大一学生,然后师兄经常跟我说要学好C语言,我也在努力地认真学C语言,可是最近有个问题很疑惑,大家说的“学好C语言”到底是说学好C语言的什么???我学来学去感觉总是在学那些语法什么的而已,麻烦肖老师帮我解惑一下,谢谢老师了。。。
我的回答:
这位同学你好,嗯,说实话你的问题很“大”,很不好回答,我呢,试着答答看哈,不满意别见怪,不是我不想回答好,确实是水平不够。
但是呢,我也要说,你的这个问题很普遍,几乎每个学习计算机软件开发的朋友,包括我自己,其实在开发之初,都有过这类疑问,慢慢的,学会了,这个疑问会淡一点,但是,过几十年,回过头一想,发现这个问题还是有点模模糊糊的,呵呵,不知道我这么说,大家同意不?
这个问题就是:“我们学计算机编程语言,到底学什么?
 诚然,如你所说,师兄让你学C,大家也都说学好C语言,但是,我们到底学C语言什么呢?
粗看起来,C语言要学好,肯定要首先学好语法的啦,然后呢,需要学习算法语言,数据结构,很多数学,还要学习很多平台特性,Windows平台和Linux平台等,还要有一定的汇编知识,因为指针是汇编级的,还有什么呢?我想还应该学点并行开发的知识,这其实也是属于OS平台特性,但是,这和普通书本上的程序设计是截然不同的世界观,这个需要扭转过来。等等。。。
这里我谈点我的认识,我们是程序员,或者是未来的准程序员,我认为,程序员主要的工作目标,其实不是掌握很多很“酷”的语言,满嘴大家听不懂的英文,来显得自己也很“酷”。
我想程序员工作最本质的一点,就是把人希望计算机做的事情,翻译给计算机听,然后它照做。大家说是不是这样?
我们对比一下学语文或者学英语这两堂课,可能很多朋友会发现,其实学计算机语言和学人类语言,做的都是差不多的事情。首先要识字,背单词,背成语,为啥呢,语言要学得熟,起码你要知道这门语言能说什么话,不能说什么话,注意哦,不是每门语言都能描述这个世界上的所有事物的,很多现代科学里面的概念,单位,其实中文是没有对应的描述的,我们很多时候说英语,就是因为用中文描述不准确。我的理解,这叫做掌握语言的“边界”。
其次呢,语法很重要,你用哪门语言,就要遵守这门语言的语法,否则别人听起来费劲,沟通效果就差。比如我们很多时候,同时学语文和英文(至少初中以上的同学都这样,呵呵),就容易弄混,搞定经常说一些“Chinese English”,或者“English Chinese”出来,中国人听不懂,外国人不明白。呵呵,什么“horse horse,tiger tiger”,外国人就晕过去了。还有什么“正在热卖中...”,这明显借鉴了英语中的现在进行时,中文中没这个语法的。
当然,上面不绝对哈,当一些错误的语法,用法,大家都接受了,其实作为成语,最后也被语言正式采用了,比如上面的马马虎虎,嗯,很多外国人都开始用。还有,我们QQ里面打字,我也喜欢用“=ing”这类缩写,大家知道什么意思吗?“=”就是“等”,表示“我正在等你”,呵呵。这是开个玩笑哈,乱来了。
注意没有,学语言和学数学不一样,学数学是要做题,把题作对就是100分,而学语言,终极目的不是考试,是你以后的生活中,说的话别人要明白才行,语文考试100分,生活中不会说话的人大有人在的。大家想是不是这样?
所以说,语言没有考场,或者说,它的考试贯穿你这一生,只要你这一辈子,用这门语言讲话,有一次别人听不懂,或者听了不舒服,都叫做拿不到满分的。
那好,我的问题就来了,学语言,仅仅学会语法和基本语句,够用吗?是不是还要大量实践的经验啊?
还有一个问题我们可以讨论一下,我们学语言做什么?首先啊,语文和英语都是人类语言,我们可以用他做几乎生活中的任何事,与人沟通,请别人做事情,或者和人聊天,嗯,可能还有用来泡MM哈。
C语言显然不行,我们不可能凭借一段C代码,就把MM泡到手了的,呵呵,起码我没见过,大家有见过的,麻烦告诉我一声,我也开开眼哈。
嗯,因为写一段C代码,太专注,MM飞走了的我倒是见过。
C语言是计算机编程语言的一种,那很明显,它最擅长的,是和计算机沟通。那计算机能做什么事?是不是“计算”啊?所以,我说句话,学好C语言,学好任何一种计算机编程语言,最少有一个考试指标,就是“你能不能利用这种语言,指挥计算机完成你想要的计算!”大家说对不对?
因此,如果要我说,“学语言究竟学什么?”,很简单,学习让计算机听懂你话的能力。
我们前面说了,学习中文、英文,学习的目标是让别人听得懂我说话,能理解,不反感,还能按照我们的意思帮助我们,就够了。
学计算机语言其实一样的,让计算机听得懂我说话,能理解,不崩溃,没有bug,还能照做,就够了。
所以我这里再说一个道理,大家看同意不?“计算机是检验程序的唯一真理!
这里插句题外话,我的书《0bug-C/C++商用工程之道》,出来后,有很多人就骂,0bug,可不可能嘛,然后看了两天书就开骂,说里面程序这不对那不对,是垃圾,呵呵,弄得我很多朋友都跑过来问我,说你书里的代码,到底有没有问题?
我回答我朋友说,0bug是目标,不是说这本书里面的代码一定0bug,不过呢,书中的代码,最少都有公网两年的无故障运行历史,最长的9年,起码的稳定性还是有的。
可大家不信啊,还问,最后我说这样子,你把代码敲出来自己run一下就知道了,没必要自己在那琢磨,以及跑来问我。“计算机是检验程序的唯一真理!”,代码本来就不复杂,你自己敲敲看。
喏,敲完了,大多数人不说话了,这程序本来就是我自己的工程库,不敢说一定没bug,但也不是bug一大堆啊,不然,老板早就把我炒了,我也早就饿死了,轮不到我到这里出书给大家看。大家去想是不是这么个理儿?
起码,这堆代码出来见大家的时候,是经过了QA和计算机两道关审核的,呵呵。
因此,学C语言,学习其语法和关键字,常用库函数,我的理解,学到我们写的程序计算机能理解,就ok了。
不过呢,这样够不够?
要我说,不够的!
学语言,别人听得懂是一码事,能指挥别人做事,是另一码事,语言最难学的,我认为不是上面简单的语法,语句,更关键的是,我们需要用语言来描述逻辑。大家去想是不是这个道理?
那个谁谁谁,去把这件事做了,你先做什么,后做什么,最后做什么,听明白没?明白了就去做!
那个计算机,去把这件事做了,你先做什么,后做什么,最后做什么,听明白没?明白了就去做!
大家觉得对计算机说话和对人说话,究竟有多大差别?所以我在《0bug-C/C++商用工程之道》,第三章C/C++无错化程序设计中,特别强调,好的程序,从易读开始,把你的程序说得浅显易懂,你的程序就能在商用工程中发挥最大的效能。
说话,本来就是要让人懂的嘛!
因此,我要说,学语言,更要学习很强悍的逻辑描述能力,能把一件很复杂的事情,拆分成很多简单事情,并分别简要说明,让计算机一看就明白,这个很重要。
那么,我们前面说了,计算机,主要是做计算,它处理的事物,主要是数**算,因此,我们学语言要学好,要不要把很多数学学好?
其实,学数学,我的理解就是学习把一个很复杂的计算简单描述出来的能力,大家觉得呢?
所以,简单说一下,我觉得,学语言,首先要学好语言相关的知识,能熟练运用,别把意思表达错了,其次,要学习很多其他相关的知识,比如数学,比如操作系统,比如很多开发理念,这些都是前人总结出来的,更好地帮助你表达自己的意思的工具,同时,还要多练习,不断演练,才能逐步掌握一门语言的开发方法。
我们学习,只要学的是语言,其实很难说终点在哪里。考试得100分,可能仅仅是开始,并不是结束。大家去想。
当然,还有个利好消息送给大家,如果大家能把一门计算机语言,走完上面这个过程,其实,任何语言对你来说,都是一码事,为啥,最难的后面的开发思想掌握了,学新语言,也就只剩下学点语法和关键字了,只要考试100分,就能用它做事,大家说对不对?
好吧,先说到这里,有问题再问,也欢迎大家讨论。

抱歉!评论已关闭.