编程语言之我见

如今的编程语言种类繁多,你是否因此而对要学哪种语言举棋不定呢?学C++, java,还是C#?你是否有某一种语言已经过时的想法?
在语言面前,你知道你何去何从吗?
    用音乐方面的东西来说明一下类似的问题。作曲家谱曲的时候会考虑将来这首曲子用什么乐器演奏吗?他会一只手弹奏某一种乐器,
另一只手谱曲吗?如果那样的话,贝多芬在耳聋以后就应该不会有作品了。再比如,是否高音乐的只懂一种乐器?是否一首曲子只
能用一种乐器来演奏?《梦中的婚礼》可以用钢琴演奏,但是用古典吉他有时效果更好。怎么样,如果把乐曲比作软件,把乐器比作
编程语言你会有什么发现,你又有什么想法?
    乐器是没有什么过时的说法的,拥有几千年历史的具有浓厚中国味道的乐器古筝仍然流行在乐器行当里。 学音乐的也不是只会演奏
一种乐器,她们往往精通一种,但是却有能力演奏其它的乐器。比如汪峰在本科是学小提琴的,但是后来他搞了摇滚这条路。小提琴与
摇滚看似有很大不同,但是它们却有共同的本质:乐器。乐器,必然有共同的乐理,这就是其间的联系。乐理懂了,学什么乐器是一样
的,只不过是熟练与否的问题。钢琴的c和弦与吉他的c和弦是一样的(135),等等。每种乐器各有特色,同一曲子,用不同的乐器演奏
效果也不一样,因此,如果懂得在适当的地方用适当的乐器会带来意想不到的效果。这也是为什么一般乐队要有5个人组成(1个主音
吉他, 1个节奏吉他,1个低音贝司,1个鼓手, 1个键盘)。
    其实,编程也是如此,没有那一种语言会过时。汇编早吧,或许你认为它都过时了,但是我曾经看到过一个汇编工程师的职位,年薪
近百万。你说java流行,但是世界上,哪个java程序员能有年薪近百万的薪水。编程语言仅仅是编程的一种工具而已,如何去实现目
的思想才是编程的核心。木匠喜欢把时间花在如何使用刨子上呢,还是喜欢把时间花在研究如何打造一套精美的沙发呢?因此编程语
言,只要会用即可,至于技巧,那是在长期的使用中自己摸索的,不是看几本书就能学会的。编程语言各有个的特点,各有个的使用
范围,只有了解到这一点,你才不会盲目。一个软件,全部用一种语言写,不是不行,但是不好;这就好比一支乐队只有一种乐器,
很单调的。在最合适的地方用最合适的语言,这才是编程的最高境界,不局限与语言,而用把每种语言划分开来,这样写出的软件
才有更好的效率。因此要明确各种语言的特点,要熟悉每种语言的使用条件,只有这样,你才能避免花时间考虑类似如何用java来控制内
存的问题。
    如果学习一门语言要花7天的时间,那么用2天看语法就够了,剩下的5天要思考这门语言的特性,使用范围,缺点等。至于技巧,
我已经说过,那是长期的过程,是思想方式的产物。正因为对语言的语法花的时间太多,比如5天亦或6天,因此你才会有文章开篇的
问题;你才有如下的想法:学了这么长时间了,想学另一种语言吧,又舍不得,不学吧,又感觉不行;你才会在语言的海洋中挣扎;你才
会在语言面前举棋不定。 比如:java与c++的相似程度达90%左右,学完c++再学java只需要学那10%就好,没必要从头学起。我们要学
的是java对c++做出改进的思想,以及java相对于c++在那些地方好,那些地方不好......因此如果你说你只会一种语言,那我想说,你会
的这一种语言也不会学的很好。因此很多大师是不局限与某中语言的,他们懂的在最合适的地方用最合适的语言(首先他们了解这些语言
),并且他们还会吸取语言的优点应用于另一种语言,使语言间做到优势互补。
    一桌菜,有鱼有虾、有素有荤、有汤有水,这才丰盛,鱼是好东西,但是做上一桌子鱼也会使人发疯的--太单调。
    下面我们举个小例子来说明如何对待c++与java。众所周知,c++可以多重继承,但是java是不能多重继承的。在java中,如果一个
类要从很多类继承属性,那怎么办?显然,java用的是接口技术。接口是不分语言的,任何语言都可实现接口。那么,能否把接口的概
念应用到c++中,以消除java攻击c++的一个证据呢?答案是肯定的:定义一个接口类型嘛(即可以完成哪些工作的类),
    typedef Interface struct; 或//typedef Interface class;
显然,没有使用class这个关键字,显然,对与只完成功能的类本身就应该定义成接口,只是c++没有区分接口与抽象类的关系,并不是
说c++不能区分接口与抽象,关键看用的人有没有这种想法;也要看你是掌握了java的思想,还是java的语法,你能否做到优势互补。
    另一个例子,我们知道c++中类的数据成员有不同的权限修饰,private,protect,public.所有的c++教程都会说一但数据被定义成
private类型的,那么只有类的成员函数和类的友元访问。然而,你有没有提出过异议,难道对类实例化时,内存中的数据还有区别?
但是在内存中,对类进行实例化的时候,每个字节都是一样的,没什么区别,内存中的每个字节都有相同的访问权限。造成不能访问
private成员变量的原因仅仅是因为编译器不让代码通过而以。下面我们以C++为例来说明,如何访问private的成员变量。
    class CTest
{
private:
 int m_data;
public:
 CTest():m_data(0){}
 void Display()
 {
  cout<<m_data<<endl;
 }
};

void main()
{
 CTest test;
 test.m_data = 10; //不能用实例访问private属性
 test.Display();
}

上面的代码是通不过编译器的,因为我们试图用实例访问private属性

但是我们可以用汇编来访问private属性

void main()
{
 CTest test;
_asm
 {
  mov eax,10
  mov test.m_data,eax
 }
 test.Display();
}
现在应该了解到语言与编程的关系了吧。编程语言再多能比得上汽修师傅用到的工具多。好的汽修师傅的特点就是,能抓主问题的本质,
并且在适当的地方用适当的工具来解决问题。因此,无须在语言面前徘徊,把时间用在刀刃上,扎住编程的思想才是最终要的。当然,
还是要多少会写点代码,如若不然,思想领会的在深又有何用。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值