谈编程与编程语言

 

何谓编程,其目的是什么?又将怎样发展?这可能关系到每个程序员的职业规划之路。

 

如果要下一个严格的定义,就是我所不能及的了。所以这里我只是说明一下我的观点,错误之处在所难免。

 

总所周知计算机运行的是机器语言(二进制),如果让人们直接编写二进制,相信每天眼睛都会晕晕的,呵呵,都是01。于是有了助记符,产生了汇编语言,编译程序。编译程序根据字典直接将助记符转为二进制代码。但是汇编语言还是很低级,于是就有了我当年为了编写一个三色球的旋转,要写一大堆汇编语句的痛苦(痛并快乐着),例如求sin值,开根号都要自己写程序,写个大点的循环语句吧,麻烦的要命。为了解决我的这种痛苦,于是计算机科学家发明了中级,高级语言。也就是说写一句话顶别人好几句话。于是把程序员的工作量减轻了好几倍,呵呵。随着编程语言的发展,现在一句话能顶几十句话甚至更多(直接调用写好的函数)。 编程,就是把一些自然语言描述的事物翻译成编程语言描述的。程序员和翻译很相像。只不过可能一个是翻译英语到汉语,一个是翻译汉语到C语言。而程序员的翻译可能需要一些理工知识背景,一些创造性思想。

 

所以对于编程,我认为就是创造性的严密性的翻译。其目的是把大量重复的计算工作交由计算机完成。从程序的语言变迁来看,语言的集成度越来越高,一句高级语句=N*低级语句,N越来越大。但是万变不离其中,都是完成大量重复的计算工作。所以最重要的是for语句。但是仅有for语句,不会拐弯(遇见岔路不知道怎么办)也是不行的,所以要有if语句。再有就是你一个人不能完成所有的代码,所以说怎么调用其他人的函数也是一个重中之重。 会了for ,if, 调用函数,那么你就可以很快的上手任何语言。也即是说语言学精通了一门,懂了思想,其他语言自然可以很快掌握,都是类似的。

 

有人曰C语言好,亦有人云C++好,有喜欢C#,也有爱Java,于是大家争论不休。其实黑猫,白猫,你敢断定哪只猫更好?于是又有人举例:C/C++程序员平均工资高。我觉得这个不是编程语言决定工资,而是编写的内容决定工资。你知道C/C++程序员编的是什么吗?ASP程序员编的是什么吗?两者若是都编网页,我敢保证ASP程序员工资高,哈哈。 C/C++程序员编一些底层的,需要算法功底比较强的,或者逻辑思维强的,例如视频压缩,杀毒等等,编程的质量直接影响到产品的质量,需要精益求精,其工资自然就高了。现在也有一些招C#开发算法的,工资也很高呀。所以说工资不是由语言决定的,而是由内容决定的。象很多东西,例如视频压缩,防火墙要操作内存,自然首选C/C++,所以做这部分工作的人都用C++,所以C++工资高。但是不能说是因为用C++导致得工资高。

 

又有人问,编程真的这么简单,只是for, if , 调用函数。呵呵,非也。掌握了这些是保证你能编一个个程序,但是能编出一个系统呢? 却是不一定的。这就像一个木匠,可以做出凳子腿,凳子板,但是这个凳子就不一定了,呵呵,或者说做出来的不一定好。这个就是一个整体的构架能力了。也即是说你做多了凳子,桌子等家具,又善于总结思考,可能有个没做过的家具,你也能很好的制定他们的契合规范,使得每个零件能很好的组合起来。这个就是系统构架师的工作了。也是程序员要培养的另一个本领。掌握了这个,又会for, if , 调用函数, 那么可以说你的编程水平已经很高了。

 

所以说编程有2个方面,一:怎样用最少的语句完成一些复杂的功能。二:怎样把多个程序组合在一起。一个是从细节考虑,一个是从整体考虑。

 

编程语言的目的就是让人们更好的编程,所以他的发展也是从这两个方面考虑的。

 

从程序语言的发展来看,语言越来越高级,编程的创造性越来越少。当年我们编写一个图书馆管理系统用C语言,要操作很多链表指针等等。现在呢,呵呵,都现成的,谁还用那么原始古老的技术呢?但是并不是说这些技术就没有人使用了,编写数据库系统的人依然在用它们,只是说要自己编写数据库的人越来越少了。大部分人用更高级的语言编写东西了,直接调用一些泛型例如List, Dictionary等等。

 

同时编程的整体的框架也加入到了编程语言中。例如大家编C的时候,经常封装一些数据并把相关的函数写在一起,于是就有了面向对象编程。又因为怕函数重名或不好归类整理,又有了命名空间等等概念。这些东西都是从大的角度考虑的,从整体出发的。当有了这些东西之后,做一个大的系统就比以前容易很多了。

 

回顾历史,才能更好的展望未来。我们发现,编程真是越来越容易了。当年一提编程,都是C语言,如今各种高级语言满天飞。实际上这也是编程语言发展的必然之路,也就是说让编程越来越简单,简单到是个人,初中毕业,培训3个月,OK,去编程吧。以后估计是小朋友就可以编程了,呵呵。于是程序员越来越不值钱了,小朋友都可以和你抢饭碗了。呵呵。当然这是指用高级语言编程的人,用低层语言的人呢,例如做编译器,做操作系统等等,其地位还是不可撼动的。于是你说,我也要用底层语言,但是你要看你编的是什么内容,如果你编写网页,编一些界面程序,也要用汇编,估计你可以出名了 (至少是我的偶像)

 

于是,我们编程人员应该培养些什么呢?呵呵,希望大家能够深思一下。现在正处于一个IT发展的高峰期,编程语言日飞月进,如果你不做好准备,也许十年后就…..  呵呵,当然你可以说十年你就转行了。或者你不相信十年后,会有多大变化(想想十年前的编程技术吧,十年前软件公司用什么语言呢?)

 

编程越来越简单,其目标是能够理解人们的话,直接处理自然语言(这个目标当然短期内不能实现,但是其发展速度会很快)。程序框架也会越来越简单,当年编个网站要自己搭建框架,想我当年,自己要编数据库连接池等等一些底层代码并封装接口, 考虑很多东西,现在都是现成了,只要学会,能用即可。程序员要理解什么是程序的精髓,程序的思想,才能持续的在这行中发展下去,才能清楚自己究竟要学些什么? 过于追求新语言,过于追求新技术的使用等等都非深入之道。长久的乃是思想,是短时间内学不会的,是常常总结思考积累出来的。人不可忘本,编程也是如此。否则只能随风飘飞,随波逐流,永难扎根。而非咬定青山不放松,有朝一日终长成。

 

       一化万法,万法归一,抓住不变的精髓,方能以不变应万变。所以说学编程要多思考,多总结,不要停于表面的千变万化。

                   

                                                                                                                                           ------------- FEATHERSKY

 

posted on 2009-12-29 19:57  feathersky  阅读(378)  评论(0编辑  收藏  举报