初入开发组(3)--一个程序员的成长史(18)

来源:互联网 发布:csp绘画软件模型 编辑:程序博客网 时间:2024/06/05 05:57

在去食堂的路上,代是雄回忆了一下,自己从初中便开始住校,那时一日三餐便是在食堂里面解决的,高中是如此,大学也基本如此。这样算下来,代是雄和食堂已经打了十几年的交道了。“这个食堂会不会像学校的食堂那样,饭菜很难吃呢?”代是雄在心里想到。

进入食堂之后,代是雄左右看了一下,这个食堂的布局和之前自己所见过的食堂差不多,也是几个大的窗口用于卖主食,两个小的窗口用于卖面点。由于代是雄去得比较晚,现在每个窗口前面都排起了长队。代是雄排了将近五分钟的队才打到饭,这期间他没有看到有插队的人,看来,程序员普遍都是遵守规则的人。

很快,代是雄吃完了饭,便又回到了工位上。一走进办公场所,代是雄就发现里面的灯都被关掉了,之前宽敞的过道上摆满了小小的午休床。代是雄感到很好奇,便问旁边的同事这个是什么情况。同事告诉他,公司的员工在中午都有午休的习惯,他们会将办公区域的灯关掉,然后见缝插针地将午休床摆到空的地方,就可以做一个好梦了。代是雄也看到有很多人直接趴到桌子上便睡,有的睡觉时甚至仰着头。如果你在午间到程序员的办公室里面去看,会发现什么样的睡姿都有。

午休的时间大概有一个小时,之后大家便又重新回到了工作状态。也许是又有一段时间没有办公了,大家在午休之后又显得特别的忙碌,各自目不转睛地盯着自己的电脑,将代是雄遗忘在了某个陌生的角落里。代是雄感觉很无聊,不知道该做什么,就随便拿起放在旁边的一本旧书看起来。说来也巧,代是雄拿到的书是谭浩强那本影响了中国很多程序员的《C程序设计》。之前邹总也说了,以后的工作中要用到C语言,那么现在复习一下也好。

一提到C语言,大家可能要问这门语言到底有什么作用,到底能够开发什么样的产品?代是雄记起了自己之前在网上看到过的一个帖子,标题是:C语言主要做哪些方面的开发?有个人的回复是这样的:

C语言是计算机及其相关专业(如通信、电子、数学等)学生大一时的必修课程,也是很多人所学的第一门编程语言。要想了解C语言主要做的开发工作有哪些,我们先来简单回顾下C语言的产生历程。

美国的贝尔实验室在IT领域占有非常重要的地位,从这里面走出来的发明创造不计其数,C语言就是其中之一。话说在1970年,贝尔实验室的一个名叫 Ken Thompson的研究员设计出了一种很接近硬件的编程语言,取名B语言,并用该语言写出了世界上第一个UNIX操作系统。注意,B语言的特点是接近硬件。一年之后,另一位叫做Dennis M.Ritchie的研究员看到UNIX这玩意儿很有前途,便加入了Thompson的开发项目。然而,Ritchie并不是一位只会用B语言编程的“码农”,他对B语言进行了改进,并于1972年设计出了C语言,他也因此被誉为“C语言之父”。

C语言被发明出来之后,Ritchie和Thompson用之对UNIX进行了重写。直到现在,虽然C语言经过了多次标准的制定和修改,但基础都是Ritchie所设计的最初的那版C语言。而C语言是对B语言的改进,那么自然而然地继承了B语言的“基因”:接近硬件。

那么,这种“接近硬件”的编程语言可以做哪些方面的开发呢?由于任何软件都要运行在特定的硬件之上,我倾向于将当前的系统表示为如下图所示的四个层次。
这里写图片描述
对于软件开发工程师来说,关注更多的是上面的三个层次:操作系统层、中间层和用户层。

(1)操作系统层:包括Windows、Linux、iOS、Android等。它们的主要实现语言都是C语言,这和C语言“接近硬件”的特性是有关的。
(2)中间层:该层在操作系统层和用户层之间充当了一个桥梁的作用,它将很多对于操作系统的操作封装成了API,供上层(用户层)调用。既然操作系统几乎都是用C语言实现的,那么如果要使用其中的某些功能,C语言就是最佳的实现语言。因此,在中间层的开发中,C语言也是主流的语言。
(3)用户层:该层是直接与用户进行消息交互的层次,也是用户能够直接感受到的层次,如WEB界面、客户端软件操作界面等。目前看来,该层的主流编程语言是Java,这也与Java自身的特点有关。

现在来总结一下,C语言可以用于操作系统的开发或与操作系统很靠近的中间层的开发。具体到的软件种类就相当的多了,如本人之前开发过的支付业务接口和现在正在开发的通信接口机。

任何一门语言的产生,都有其特定的背景,也有其具体适用的场合,因此,并没有孰优孰劣之分,最主要看学习这门语言的人掌握到了什么程度。在大家学习的过程中,我的建议是可以学习不同的几门编程语言,但一定要有一到两门比较熟练或精通。

看了上面这个回复,代是雄觉得自己受益匪浅,他觉得自己明白了这几点:第一,每门语言都有其存在的价值,不能说哪门语言一定要比另一门语言更好;第二,C语言开发的东西大都是偏底层的,离操作系统和硬件比较近(这一点和Java语言相反);第三,不能单纯地学习某一门语言,还要顺带学习操作系统、网络等相关知识,也就是说,程序员的视野不能太狭窄。

5 1
原创粉丝点击