走出程序员的悲哀+自己的一点感受

本文转载自:http://topic.csdn.net/u/20100524/13/f5cf8430-4bae-4b02-9421-e36bc318ea0f.html

外加自己的一点感受


《走出程序员的悲哀》


  首先我想说的是,如何选择编程语言,在做出选择前,我们要先了解各种语言的优缺点:

  编译型的语言:
  ASM: 汇编语言,几乎接近机器语言,优点执行效率高,是助记符的语言,难学也难理解, 缺点可移植性差, 开发效率低。

  C: 相对汇编要高级的多的语言,结构化的语言,面向过程的,容易学,可移植性强,难点是它的指针(相对初学者);

  PASCAL: 高级语言,和C同时出来的一种语言,也是结构化,面向过程,后来扩展的有Object PASCAL语言和原始PASCAL一样,增加了面向对像的特性。难度是面向对像和它的指针,但相对C语言要好得多,PASCAL的语法优美是任何语言不能比的,数据类型丰富,又支持指针。缺点,被定位为教学语言(我想这是被Brian Kernighan的误导所致),其实PASCAL也能做很重要的系统。

  ADA: 源于美国军方的一个计划,旨在整合美军系统中运行着上百种不同的程序设计语言编写的程序,命名是为了纪念爱达·勒芙蕾丝而使用Ada, 不做细述。

  COBOL: 面向商业的通用语言,又称为企业管理语言、数据处理语言等,Common Business Oriented Langauge)是最早的高级编程语言之一,是世界上第一个商用语言。在国内不是很流行。

MATLAB: 是一种数学软件,是一种数值计算环境和编程语言,主要包括MATLAB和Simulink两大部分。MATLAB基于矩阵(英语:Matrix)运算,其全称MATrix LABoratory即得名于此。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。在国内不流行。

  C++ : C语言的扩展,兼容C的所有特性(但很别扭),主要优点面向对象,缺点,抽象难学,规则太多,其扩展到无所不能,无所不包了。

  省略若干不实用的语言介绍
  .....
  解释型的语言
BASIC: (Beginner's All-purpose Symbolic Instruction Code,又译培基),意思就是“初学者的全方位符式指令代码”,是一种设计给初学者使用的程序设计语言。BASIC是一种解译式的编程语言,在完成编写后不须经由编译及链接等手续即可运行,但如果需要单独运行时仍然需要将其建立成运行档。

  JAVA: SUN公司的基于C/C++的扩展,风格似C/面向对象的像C++,做了很多优化的工作,并在虚拟机上运行,可以说是其优点也是其缺点,具有跨平台的能力。

  C#: 也叫C Sharp,是ms发明的超级语言(何为超级,就是傻瓜都会用的编程语言),是结合JAVA的模式创造的,也可以说是为了对抗JAVA,ms特此发明 C#,语法也和JAVA差不多,但只运行在Windows平台上的.net 环境下,linuxSUSE上支持.net平台所以也可运行在linuxSUSE平台上。其缺点不能通用的跨平台,不能像JAVA那样,但比JAVA的运行速度快。


  脚本语言这里就略了,不讲了......


 如果要选择的话:
  按操作系统平台来学习的话,建议:如果只在windows平台直接学习C#它傻瓜式的,快速开发爽啊;若在unix/linux平台上的话,学习C /C++;

  如果游走在Windows/Unix/linux等多平台上,学习C/C++/java;

  如果只想学习编程找乐趣,学习PASCAL,BASIC两种非常合适。


  下面说说关于专业的程序员,该如何选择以及未来的行业发展趋势,我们该如何把握主动权(方向)不能跟着技术潮流,被“淹死”。

  我知道有很多专业程序员,做了多年程序开发,感觉自己技术还像个刚出生的婴儿,没有更很好的技术积累,新技术来临不知道如何选择取向,然后只有慢慢等着被新技的潮水淹死;然而,新的程序员又如洪水般的涌进来,然后又这样的后浪赶前浪的牺生在沙滩上。不是说中国的程序员是吃青春饭的,30岁以后要么做管理,要么转行。其实,我们广大程序员都是在一个恶性循环中转悠;先说个慨念,中国人多程序员也多,当然需求的也多,需求的技术类型也多,所以我们的广大程序员队伍中什么样技术类型的人都有,但学习的编程类型却很单一几乎全是windows平台开发,当然linux也有不少,多的是Web上的开发。为什么会这样,一来是十多年来盗版太猖狂(ms纵容的),windows垄断了中国的操作系统平台,几乎影响了一代人,可以说是学电脑就是学windows了,那么就可以100%说,学编程就是学Windows API(windows上编程就是调用Win32SDK API了); 去年,ms开始收网了,打击盗版,对我们广大程序员也是非常振撼的,也很郁闷的,用了多年的盗版突然不能用,还出具体措施打击个人盗版,程序员的我们会不会有这样的想法,枉我追随ms这么多年,我们学到的东西也还给他了,要知道我们学他的东西就是间接的给他挣银子。现在还要受打击,早不打晚不打,全民都用上了windows就开始打,这不是居心叵测嘛。但也不能怪他什么,10年前盖茨都说让你们盗版,最终还是要还的。别人先警告在前吗。话说回来,盖茨还是有功的,如果没有windows很多人是不会用电脑的,也不会有现在这么发达的IT科技的。记得2004年的一个老项目经理对我这样说,如果95年没有出来win95他是不会加入IT行业的。可见windows带给人们的变化是多么大的,可以说对ms我们都有这样一种既爱又恨的心情,但他是商业性的公司不是慈善机构,我们不能永远免费的用别人家的东西,这就像你自己家的东西,借给别人用一天两天没事,时间长了你心里是怎想的呢?
  上面扯远了,在windows上编程,我们有个误区,只知道ms和borland的开发工具,又快又容易的,完成一个不大不小的项目,三下五去二,搞定,完成后,那成就感不用说,大家心里应该有数的。于是,一个接一个的项目就这样就摆平了,慢慢的成就感也消失殆尽,但还是一个接一个的项目,并重复写同样的代码,做同样的事情。几年下来,大家都觉越学越难,越学越不精,越学越没有信心。更可怕的是ms的技术平均两年更新一次,从win9x到NT, 其他的COM、ACTIVEX, 到现在的.net, 等等,学都学不完,每次更新的技术又只用能管两年,又得更新。ms的开发语言也是损人的主,当初的VB就如同现在的C#,是他们的主打产品,现在怎样么呢?可怜的VB程序员,还有VFP,用VFP的程序员也不在少数,后来的VJ++都是忽悠人的东西,跟错了方向的直接倒下了,没有跟错的,也九死一生。也难怪,商业性的公司,不更新是没有利润进来的,这次打盗版也是利润的驱动下才有所作为的,不然ms可能不会打的。那么我们之前在9x下的学到的东西,到 nt下我们还有多少可以用呢?不言自明,再到现在的.net 我们之前学的东西,又月多少可以用呢?这就是我们广大程序员的恶性循环,不断的跟在ms的屁股后面跑,跑一次就会损一代的程序员,他们倒下(30转行,或其他),后面呢,还很多新的程序员补上,然后又这样倒下。现在windows vsta还没有用,就来了windows 7, 技术又有了新东西,当然新的东西那绝对是吸引人的,但最重要的是让ms 能营利,他营利是小我们广大程序员惨了,不知又要多学多少西,不知又要多写多少无用的代码。所有说,商业就是商业,不营利,他是活不下去的,那么他只有牺牲众人的利益(大家的时间)来成就自己。记住,在商业公司面前,客户(程序员也是客户)只有被宰的份,要牺牲也只是客户的利益,它不会牺牲自己的利益的。
    
  再说说开发语言及开发工具之争吧,曾经的开发工具之争,那战争的销烟,可了不得。在开发工具之争中,ms既是运动员也是裁判,为什么这样呢?我们来了解一下,在windows平台上,系统是ms的,主要的技术方向(主动权)发展趋势,掌握在自己手里,它自己又开发IED开发工具。在2002年以前,比较有名的IDE工具开发商,borland的IDE、编译器算是主流的,delphi便是其中最响当当的杰作之一,delphi出来后几乎是borland的天下,后来ms的VB与之抗衡但根本不是一个量级上的东西;到了2002年以后,ms新技术出现,其中诸多原因,borland就开始走下坡了,天平倒向了ms,值到现在,ms一直统治着windows上的开发IDE。在ms的垄断下,他带领着广大程序员朝左,程序员们就不敢朝右,一且就是按照ms设计的路线走,掉队的就被淘汰出去。在这样的环境下,程序员们没有选择,没有他路可走,除非不在windows上做开发。因此我们只站在windows平台上这个圈圈里,看到的天空,也只有window这么大一块,和坐井观天没有任何区别,那么该如何跳出这个恶性的环境呢?当然,操作系统平台,其他语言的开发的选择还是多的是,要不要出来,看自己了,或许你会说,UNIX/linux平台难啊,没有比windows更简单的了,在这我要说的是,unix /linux是操作系统入门难,入门后, 是比windows还要容易,那有windows那么复杂的东西,其实windows是最复杂的系统。用过其他操作系统的人都知道,不光是编程还是操作系统的使用上,只是unix/linux没有习惯,windows已经习惯多年了。
  说说unix/linux编程吧,在unix/linux平台下编程,用的最多是C语言,C++做GUI库界面的多。IDE集成开发环境就少,有名的有 KDeveloer ,但都是没有windows上的方便易用,在unix/linux下用VI(代码编辑器)的人也不在少数,GCC编译,GDB调试;也有自动化工具来简化工作,但比较麻烦抽像,和windows下编程有质的不同。在windows下可不用写一句代就可以运行一个很好的程序框架来,linux下现在也有可行的,QT就行。那么有了unix/linux编程的选择,自己可以不倒在ms的技术浪潮下了,因为我们在unix/linux上会有更多的选择,并且不会出现像去年那样的盗版尴尬局面。只在windows上跟着ms做开发,它束缚了我们视野,阻碍了我们的发展,无论我们怎么学习它(windows)自己只能算是一个小小的蚂蚁,给ms积累粮食(给它赚银子),因为学会windows编程就是间接的为ms挣利润了,而更坏的却是,我们永远有学不完的新技术,永远积累不到经验,永远像个新人一样的在学习它(windows)。
    
  我们反观unix/linux平台上的编程只有c/c++,几十年不变,技术更新也是开源的,只要掌握了就不会像ms那样永远在它指定的路线上听话的走,但在unix/linux上我们的选择更多,linux大致内核一样,变化不太大,容易积累经验,且编程也就是c/c++其他的就少了,只要精通c语言,可以说在unix/linux平台下便是天下无敌了。不管是在windows/unix/linux下面,c语言几乎通吃,win32内核,SDK接口都是c语言实现的,这才是“真正的程序员是C程序员”的真正意义。在windows上编程的当然也有很多选择,这里需要说的就是,如果要快速的开发,borland的delphi是最好的选择,指delphi7版本以前的,delphi7以后的版本,就跟ms是一个鼻空出气的,就是ms忽悠过来,borland就忽悠过去,在windows上的程序员转来转去的大有人在,不相信,会有很多程序员是从borland转ms,后来又转向 borland上去了的。他们两家开发商也是打的你死我活的,最终borland倒下,当然这也伤不少borland fans的心,又转向ms的开发平台。想想这部分转来游去的程序员是多么的悲哀,是谁害的?

  说来也怪,国内的delphi陈营曾经风华正茂时,不知有多风光,但没有几个人用FreePascal,在国外freepascal发展的很不错,有名的 Lazarus(基于freePascal)跨平台集成ide开发工具并和delphi极像,而且是开源的,国内没有人使用,感觉现在的 freepascal 比delphi还更有潜力,lazarus是跨平台的,支持linux。我想其中最重的原因,是因盗版delphi太多击失败了开源的软件,毕竟 lazarus没有delphi智能易用。话又说回来,dephi7版本以前的真的很不错在2002年以前,大家可能还记得“聪明的程序员用 delphi”这个美好的雅号,也就是这个时代的borland赚到钱了,如果后来的程序员还拿这个雅号来激励自己学习delphi那将是最大的误区和悲哀,因为此时的delphi不在是当年borland的delphi了。
  ms,也没有什么东西好到那儿去,vc++到现在的vs的VC++一直沿着MFC,说它和delphi的VCL比,它简直是个垃圾,但有人还拿它当个宝,晚上枕着,白天抱着, 到现在的VS里面来MFC又扩展了不少东西,应该说是又加了更多的“变态的东西”进去,还不如直接使用SDK来得容易方便。C#是个例外,但按照片ms的营利游戏规则C#的寿命能有多长,我们只有拭目以待,我相信不太长,太长不符合ms的规则,VB可能就是他的前身,VB的今天就是C#的明天。想想当初的 VB那时的风光及程序员们的狂热和现在的C#有过而无不及也,现在VB怎样,没落了,又有几个旧人用,新人去学呢?当然VFP,VJ++是同样的命运。那些曾经用VB+VFP的程序员们是不是现在已经转向了C#或java呢?还是其他呢?



  再来看看,JAVA吧,辉煌的时刻,只要是编程培训点的课程,全部只有JAVA了,现在的JAVA培训也不在少数,可能只会引诱那些不懂编程的初学者。 java又是怎样的一翻风景呢?相信在传出甲骨文收购SUN消息的时候,我们广大的java程序员们有没有郁闷或是信心受到打击呢?就连我这个不是 java的拥趸都感觉震惊和痛惜,sun会被收购。sun竟会沦落到被人收购,只能说,他会慢慢的像borland一样被这个时代没落掉。java本身定位是“一次编写、到处执行”的目标初衷, 但给人的感觉是“一次编写,到处调试”,现在怎样呢?没有多大的改观,那么失败是必然的,java是跨平台的运行在虚拟机环境上的,与其说他与平台无关,其实java本身就是一个平台,是基于操作系统的平台。为什么java程序会慢,就是因为是基于操作系统平台的,解释一次,执一次,要比编译性的程序慢一倍,是绝对的。就个人体会,如果广大java程序员想写跨平台的程序,倒不如选择一个比较好的跨平GUI库,如GTK, QT, wxWidget , 它们可以“一次编写,到处编译”要好的多。另外它们做嵌入式的开发也行。

  C++程序员不要太高兴了,还没有说到这儿来呢?
  C++我想指出的是,目前大多数系统,包括windows,没有使用C++写的,顶多就是上层/应用层的如GUI库,界面,用的C++多,可是看到市面上,却把C++神话了,面向对象是C++的强项,也是唯一的优点,但又是其缺点,相信我们大多数C++程序员有这样的感受,用了几年的C++居然还有很多功能自己没有用到,或是不会用,其中的规则太多,乃致学都学不完,简直是又臭又长的条条框框。就如一段匿名但又非常著名的评论描述,C++就像“狗被钉上了软肢,而变成的章鱼”,章鱼是什么,不仅让人联想到,很多舞牙扒爪的东西,到处延伸的感觉,但就做GUI(比较成功的如QT GUI库非常不错),应用方面,其他领域,C是更好的选择,更方便易用。


  总结,只在ms平台上的程序员,几乎没有什么好的出路,几年下来不是转行就是做管理,很少能长期坚持做下来的。这就是大部分人说程序员是吃青春饭的原因所在。在开发语言上没有什么可争论的,算法数据结构几乎每种语言都能实现,学什么语言都一样,不一样的就是你所在的开发环境与开发平台。另外就是开源平台与非开源平台,有着很大的关系,开源的话,枝术你能基本全掌握,不开源,你就只有跟着别人走,按别人的路线为别人创收,自己只得那么一丁点儿而已。


评:以上作者写的其实我也都明白,感同身受,只是我写不出来这么多;明白是明白,但是我仍然定位不明,技术路线也有合理的指定,但问题是,我靠什么来继续坚持这条技术路线,Linux平台,C语言,QT GUI库,OCP认证,精通oracle,Linux C网络编程;我也坚信这些技术也会经久不衰不会像微软平台的一样;但是业务领域问题,选择哪个领域,是否一定要一直坚持把这条路走下去,微软平台的技术是否需要再接触,这些问题才是我真正要苦恼的东西,我甚至已经要丧失了对做程序员的信心,对自己的学习效率,已经畏难情绪感到非常不满意;技术平台的怪圈走出来了,却又陷入另一个怪圈,又无法自拔

你可能感兴趣的:(行业心得)