回首往事:十八年的语言分支
当每个人走过一段路以后,都会有意无意的去回首一下自己的往事,这些往事有让你印象深刻的部分、也有让你一带而过的部分、有值得深思的问题、也有自己后悔过的问题。虽然这些让你觉得只是你生活中的一段插曲,但是你可能没意识到这些年的经验本身来说就是一件“瑰宝”,不如分享出来,让很多人得到宝贵的经验,让更多的人感受到你当时的心情。
菜鸟入“江湖”
也许很多人最开始接触代码是在大学里,但是我认为那不算是真正的开发,而我真正的所谓第一次也不是在大学里。我最早接触代码时我还是一个小学生,是和我姐一起买了一本关于Basic编程的书。由于当时没有计算机可以上机练习,所以只是看书而已,应该说没有什么收获。但是从时间上来说,那应该是第一次接触代码。
以后在大学里确实学习了编程,但是应该说我不是一个好学生,并且我的专业也不是与计算机相关的,所以我没有学的什么编程的东西,相反对编程在心理上还是有点畏惧的。所以这两次所谓的第一次对我而言应该没有留下什么正能量的东西。
后来工作以后从1994年起开始有机会使用电脑了,第一门使用的语言是FoxBase。应该说这是我真正意义上开始第一次接触代码。这次的效果非常好,是我开发生涯的起点。单就语言而言,我觉得Foxbase还是比较容易上手的,而且其中一些做法至今对我来说还有很好的参考价值。
编程语言的分支
在工作中我学过的语言可以说还是有一些的,按照先后顺序大概是FoxBase,C,C++,ASM,FoxPro,VC,VB,C#,少量的接触过java,cobol,KDE。很多人也许会觉得学这么多语言现实吗?其实是现实的,我们一起来看看这些称得上编程语言分支的情况:
1.Foxbase:这是第一次选择,也是我上述提到的真正意义上开始第一次接触的代码,事实上应该算得上是被选择,因为公司正在用这个东西,我没得选。学习使用Foxbase是我开发生涯的起点。我最初的编码经验就是从这里开始积累的,并且Foxbase中的一些内容至今对我来讲还是有影响的。比如Foxbase中一些命令的设计直到现在依然对我所开发Entity Model Studio这个产品在思想上有参考价值。
2.C/C++/ASM(包括BC++和VC++):C/C++/ASM的学习是我开发能力和经验真正意义上积累和成长的一个阶段。为了描述方便我把这些语言统称为C系语言。以后我成功转型为程序员就是VC的原因,这是C++编译器中的一个。最初选择C语言的理由应该说体现了我当时稚嫩或者甚至幼稚的一面。我没有从实用角度,也没有从自己实际的能力从发,而仅仅是听说C语言难学,为了证明自己很强很聪明,于是就选择了C语言。当时的我刚刚“成功掌握”Foxbase,所以正是气盛的时候,想法确实有点不太理性。虽然从后来的实际结果来看这个选择是对的,但是做出这个选择的过程和理由实在没有什么可取之处。另外一个选择C系的原因是当时存在一个说法就是所谓的高级语言和低级语言之说。而C系语言按照我老师的说法是属于所谓的“中级”语言,言下之意是什么都能干。在自己的学习中也确实体会到是如此。比如C系可以直接嵌入ASM做最底层的控制,也可以使用ODBC开发MIS,虽然界面做的慢一点,但不管怎么说算是可以做了,同样能做到这些事情的语言我当时确实没有遇到。
在选择C++时先后有两次选择,第一次是Borland的BC++3.1,第二次是后来微软的VC++。C++的使用是到目前为止收获最大的,编码学习投入最多的阶段,我对Borland公司至今仍有一种不舍的情感。选择BC++的原因是两个,第一个是想继续深入为今后转型程序员做准备。因为C++是很难学的,如果我掌握了C++那么软件公司聘用我的可能会高一些。应该说这个想法比之前学C语言的动机成熟些了也现实了一些。
另一个选择BC++的理由是当时能够获得的资料都是BC++的,比如书和软件。所以想学其他的编译器没有可能,只能选BC++,很幸运BC++没有选错。这里需要注意当时是上世纪的90年代中期,互联网没有那么普及,咨询的获得非常困难,软件下载远远没有现在方便,都是需要邮购盗版软件的。所以对我来说各类出版物是学习的主要途径,市面上流行什么出版物,基本上我就只能学什么了,没有选择的可能。
后来学习使用VC++(这里语言,编译器和开发工具混称了)的原因是大势所趋了,因为微软的Windows操作系统来了,DOS开发很快就没有市场了。当时最初的选择还是Borland的产品,是Turbo C++ 3.0 For Win。我的第一个Windows程序就是用这个编译器开发的。但是很快就放弃了,我最终决定投入微软的阵营,但是我对Borland的感情依旧,呵呵。
转向微软的理由是以下几个:
a.如果PC的操作系统的是微软的,那么开发工具为什么不用微软的?这个根本不用多想。是一家人就不要用两家的东西。事实上微软在此后的表现一直很争气,所以我很幸运没有选错。当然我也很希望看到Borland可以再次崛起。
b.我家里买了电脑,机器的配置允许我可以安装类似Visual Studio这样的软件了
c.盗版软件开始出现了,购买盗版软件的光盘很容易,所以搞到软件完全成为可能
d.出版物开始基本上和流行节拍吻合,虽然还有一点滞后,但已经不是一个问题了。
3.C#:选择C#的第一原因是因为C#是.Net开发的首选语言(至少微软是这么定位的),为了保持自己的竞争力和开发能力,我选择开始学习C#。当时记得是在2000年,我已经去了北京了,我是在中关村买到的盗版盘。这个选择从现在看也是没错的。
选择C#的效果从2006年开始显露,我用C#开发的第一个产品就是从2006年2月份开始的。还有现在开发的Entity Model Studio也是用C#做的。应该说如果不使用C#而是使用C系语言来做的话,当然也是可以的,但是效率会低不少,成本和风险会增加。所以到目前为止来看C#在.Net方向上的开发是一个非常不错的选择。如果不出意外的话,我相信以后的开发生涯会一直和C#相伴了。
学以所用
很多朋友会认为学了那么多语言,而且还是那个年代的,究竟对未来的发展道路有没有什么实质性的帮助?是否还要再次转型?其实大家从我的经历来看都是有所帮助的。这里面的原因可能是选择本身的正确,但是我觉得主要的是选择什么语言,然后再去选择该语言擅长或者应该这个语言去做的事情,从而保证从最终结果看每次语言的选择都是正确的。比如我选择了VC那我就会去应聘VC的开发职位,也会选择VC擅长的项目去做。公司在方面也有考虑具体一个员工的技能情况而有选择的安排开发法任务,所以基本上都是有帮助的,而且技不压身这句古话是没错的。
但是从长远角度来说,这个很难讲。由于时间跨度大了以后,很难说当初的选择是否有帮助,比如DOS操作被Windows替代后,那么原来的开发工具和语言就要考虑换了,那么当初若是我还在一味地坚持那么现在就会面临被淘汰的问题。当然这是反面的例子,正面的例子是我选择C#。2000年开始第一次用C#,而真正用来开发产品则是在2006年,所以这样的选择有点战略性的意味。其中原因是我定位自己在微软的平台上做开发,其二是.Net的趋势势必成为主流,当时的舆论认为这是微软向java的挑战,意欲平分Java的天下。当然今天看来是否做到了另当别论,但是.Net成为一个主流平台却是事实。那么掌握c#语言就是一个正确的选择,对自己做开发当然是有帮助的。
一旦选择了一个语言,那么势必会在比其他语言上薄弱一些。这在我的经历中也是有的。在C系语言的项目中我一般都是主力或者骨干,但是在参与的其他一些项目中,比如有一次被要求参与一个java(之所以选我是因为java的语法和c++类似,学习成本比较低)项目,在那个项目中我基本上是做下手,做最简单的事情。但是这不能认为自己选择的语言没有帮助,而是应该看到一个语言不能胜任所有的开发项目,也不可能满足整个开发生涯的技能需求。所以只要保证自己选择的语言有价值,那就可以了。
十八年中值得回忆的往事
其实我对语言本身来讲应该没有特别的感触,因为语言对一个开发者(至少对我是如此)来说是一个工具,适合的就用,不适合的就不用,没有太多的情感因素在里面。相反用某一个语言写下的具体的代码或多或少会有一些情感,因为有些代码是付出很多以后才得到的。还有是使用这些语言开发软件所度过的时光,这是颇值得回忆的。
做一个比喻,就好像我们会对一篇文字有想法或者感悟,但是对写下这篇文字的具体的语言(汉语,英语)未必会有什么想法。还有一部分是和开发语言先关的一些认识,比如语言用多了就会体会到不同语言之间的一些共性的东西和差异,这对语言的学习和掌握会有很大的帮助。对于这个问题,有兴趣的可以关注我其他的一些文章。(http://home.cnblogs.com/u/417670/)
其实我觉得选择编程语言的分支的出现不是必要的,而是正常的或者常见的。有些程序员一辈子有可能就只用过一门语言,那么对于这些程序员来说分支就不会出现。这是完全有可能的,只是不太多,对于大部分程序员都会遇到学习多门语言的情况。这就好象有些人一辈子只干一个工作或者只在一个公司工作,而有些人则干过几个工作或者为多个公司工作过。两者都是正常的。
为何有那么多种语言
相信看过编程语言排行榜的朋友都知道,每期榜单上的前二十名会有一个大的图,前十名还有一个走势图,然后二十到五十名会有一个细长的小图,五十到一百名就直接用文字进行概述了,再然后就没有然后了,并不是说没有一百名以后的语言,其实也有,那么为何有那么多种语言呢?我们先从项目的角度出发来说。
有时在项目中用到很多语言是一种正常的情况,毕竟每个编程语言都有一些缺憾,所以需要另一种语言来进行完善这个项目。在一些小的项目或者在大部分情况下,应该使用一种语言就可以完成开发任务的。但是在一些大型项目或者结构层次复杂的系统中,多语言同时使用是非常正常的。不同语言承担自己擅长那部分工作,然后配合起来共同完成工作。在我的记忆中经常看到VB做界面而VC做底层的情况,还有在FoxPro中调用C/C++的库完成界面中的部分工作。
若是说道为什么会有那么多的语言存在着,我觉得新语言的产生主要是为了满足新的开发要求,而不是为了弥补其他语言的不足,至少主要目的不是为了弥补不足。我们现在一般情况下所说的编程语言实际上是指通用编译器,这类编译器可以胜任大部分一般的开发任务。但是在某些特定的方向上特定的语言会有更显著的优势,比如银行数据处理会用COBOL,人工智能会用LISP,这些语言在特定方向上的优势,是再好的通用编译都无法替代的。
做一个比喻,公司需要招一个新员工(新语言),其原因应该是新的职位需求(新的开发需求),而不是主要为了弥补另一个员工(一门已存在的语言)的缺点或者不足。当然新员工的加入事实上对弥补另一个员工的不足也会起到积极作用,这个也完全是有可能的。
语言本无好坏
最后我觉得这世界上应该不存在什么所谓最好的语言。因为单纯比较语言的好坏是没有什么意义的。
所谓语言的优劣主要取决于你用一个具体的语言来做什么而不是语言本身,对于需要完成的开发任务需要选择正确的语言而不是一个好的语言。
其次,以当今通用编译器来说,语言本身是一个因素,但是一个好的开发集成环境也很重要。语言好了,但是没有好的开发工具,也是很令人头疼的事情。
第三是开发者对语言的掌握程度。用自己擅长的语言往往比用一个好语言更明智,当然这不是绝对的。