您的位置:首页 > 其它

我们学程序语言,到底是学什么?

2011-11-21 00:58 344 查看
  每一个人在选择自己主要的程序语言的时候,肯定有各自不同的故事。平台、成本、习惯、影响力等等,都会左右着我们对程序语言的选择。

  我在最初开始学习程序开发的时候,首先接触的不是某一门程序语言,而是伪代码。写伪代码让我很兴奋,能够把现实中的思考和动作转换为机器执行的步骤,这是一件很有意思的事情。一个动作开始到结束,中间再加上判断和循环,感觉很轻松、很有成就感。我就觉得软件就这样很容易了。

  可是让我接触的第一名程序语言却是JAVA,这个在使用的过程中,我感觉和伪代码不一样了。什么东西都要放到一个类里面,怎么创建类,为什么要创建这个类,类有什么用,在程序的执行过程中充当什么角色。这些我统统搞不清楚,不知从哪里下手。试着写一些程序片段的时候,需要调用API,当时根本不知道什么是API,为什么要调用,这些调用的代码是从哪里来的,如果我要实现另外的功能,那么去哪里找?这些问题在当时完全形成了一个十万个为什么,百思不得其解。我的老师还是一名博士,可是他的博士头衔并没有让我更容易更快速地搞懂这些问题。

  后来我接触到了VB和C++,感觉这两门语言的风格更符合我的思维逻辑,像Java那样的纯面向对象,全局变量都不可以创建的语言,对于当时的我来说实在有点跳出了我的理解范围。(对于这点很多人的体验不一样,比如我之前的一个下属,他一开始也是学习Java的,他和我的感觉就相反,对于Java很容易理解,但是对于C和C++理解起来就比较困难了。)于是我就自己主要自学VB和C++,Java就是应付应付老师得了。当我用VB调用出系统的记事本和计算器的时候,展示给还在做加减乘除的同学看的时候,这又是一件很有成就感的事情。

  到后来我开始做项目的时候,又转移到Java上面来了,不过这次可不是因为对语言的了解而主动选择,而是因为项目需要。在使用的过程中,所有的语言在我手里都是一样的使用方式,只是全部或部分代码放在类里或者不放在类里的区别而已。

  到后来再用了C#,面向对象的基本编程能力也掌握了,封装、继承和多态也会用了,但是对于一门程序语言到底是什么,为什么要用面向对象,面向对象到底有什么好处?这一切一直没有去思考,也没有想到要去思考。程序语言,对我来说完全是个工具而已,会用就可以了。一些书籍的标题某某编程思想,在我看来什么思想不思想的,不就是解析得深入一点而已么。

  国外有大牛这样说,每年应该学习一门新语言。也有大牛说,如果一门语言不能改变你的思维方式,那么这门语言就不值得去学习。这两点我看了都无法理解,只是在想,谁说得对,我听谁的呢?不过现在我比较倾向于后一种观点。这得源于我的一次醒悟。

  某一天,我不经意地在随意地了解F#这门语言,仅仅是随意的了解而已,因为我觉得学的语言多了也没多大的意思。但是在查阅资料的过程中,突然脑袋里就有一种震撼,突然就让我觉得我之前的许许多多的观点是那么的稚嫩和可笑,猛然发现自己的思维开阔了很多。请原谅我用了这么多的突然和猛然,这的确是当时我脑袋里的思维碰撞的一种生动的感受。

  这次让我不得不重新审视我所经历的C++、Java、C#这样的面向对象语言。为什么是面向对象?我们为什么要使用面向对象?在使用面向对象的过程中,如何把握住面向对象的精髓,开发出优雅的面向对象程序来?

  面向对象的概念,也许很多人能够倒背如流,可是我从来说不出什么是面向对象,什么对我来说都是工具。可是这工具不是那么容易使用得顺手的。如果在一个项目中,有良好的架构师规划好了程序架构,有项目组长执行项目计划,自己只是一个小小的码农,那么一切都无所谓和很简单了。在这样的角色上,可以和别人一起高谈阔论程序的执行效率,可以讨论问题的解决方案,甚至可以抨击另一门语言,就像以前很流行的什么.net垃圾,Windows垃圾,效率怎么怎么的,如此的话题,呵呵。

  但是假如自己处在架构师的角色上,一切都抓狂了,找不到北了。为什么?项目的第一要素是可维护性,其次是可伸缩性、可扩展性、安全性,如果没有前面的要素再来谈执行效率,完全就是扯蛋。

  如何做好一个优秀的项目?答案很标准,高内聚、低耦合,面向组件、面向服务,分布式等。但是如何实施?如何实施??

  我的观点是,首先掌握得掌握思想。比如我们用面向对象语言构建系统,简单地说,首先的找出一个个的关注点,然后再细分到一个个的类。可是怎么划分类?如何创建一个类和对象?那么就要搞清楚什么是面向对象。

  面向对象是把一切都抽象为对象,每个对象都有自己的完整属性和方法,程序中的对象是现实中的对象的完整的抽象,并且是一一对应的抽象。显示中的对象,有自己完整的属性和动作,有自己的独立性,和外界的联系是松散的,这些都得对应到程序的对象上,因为是面向对象。

  可是我们现在很多的对象是残缺不全的,要么是对象的属性不全,要么是对象的动作不全,要么自己的属性和动作放到别的对象上去了,要么把别的对象的属性和动作放到自己的身上来。这些都违背了面向对象的思想。

  学一门语言就是要学会这门语言的思想,学会这门语言的思维和解决问题的方式,如果一门语言不能给自己的思想带来改变,那么就不值得去学习。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: