因为上一篇文章《误导程序员的喧嚣:评CSDN引导Java和Ruby之争》,引起了一些争论,我回了一些质疑,不过始终觉得没把问题讲清楚,因此再写一篇。
十几年前,我是从C++开始计算机编程的。(不算那些在课堂上学的FORTRAN,Pascal,Basic,Z80和单片机(51)汇编,因为除了在学校安排下的上机——有的连上机都没有——敲过几行程序,没真正用它们做过软件。)那时我在一个电脑公司兼差。老板是学校的老师,想法挺不一样,看我能写几行程序,就让我专门写点小东西,装在286、386的机器上,卖机子比别人快。
后来老板的公司有了一点名气,就开始承接软件项目。有一个项目,是在几个相隔几百公里的地点传数据。这几个数据点,一起共享一根电话线。传输是通过只有可怜的14.4Kb的传输率的Modem进行的。电话线路质量似乎也不太好。开始这个项目也不是我做,因为一些变故,就落到我头上了。
我拿到项目时已经有了一个框架。前面的人用Borland C++在DOS下,写了一部分UI和通讯层。UI是用Turbo Vision(不知道有没有人知道)——Borland的一种库——通讯层是用Modem的AT指令,另外还用Code Base库访问数据库。我那时是糊涂胆大,反正也没什么可怕的,学生嘛,也不存在怕丢工作,接手就做。昏天黑地了一个月,逃了不知道多少课,以致一门课的老师当堂指名道姓宣布,考试必抓我。但郁闷的是,系统还是一会工作一会儿不工作。也不敢跟老板明说,只是含糊说,还行吧。
到了上线那天,下大雨,我带着一个师弟和半成品,上路了。老板大概心里明白着呢,就没去。那是我生平第一次出差。渗着汽油味的长途汽车出行200多公里地,晚上的时候,进了一个山窝窝。那里的人倒也热情,几桌子菜,每桌子都堆到三层,大鱼大肉,我还看见一块生平未见的大蹄膀。接着又有一些酒气熏天的家伙逼着我们喝酒。想来我们的到来刚好成了他们的“巴浦洛夫”,大大地让他们奢侈了一番。
第二天调试当然不顺。于是,我开始怪天气,说大雨影响了传输,总之,不是我们的错;)。对方似乎也挺相信。最后实在不行了,就约好那天天气好了再来。回来的路上,我的心情很是阴沉。期末考试就要近了,我还没抱佛脚。说实在的,对那个程序,我也没什么信心了。不要说很快天气就要晴了,而我不能这么快就能改好,就再改一个月也未必行……
回来以后,老板也没责怪我。他找了一个老师,说他能搞定。三天后,那个老师回话说,做完了!
我大为震惊。刚好老板让我帮忙测试,我赶紧看那老师到底是怎么做的。
只见那老师根本不用C++,他用Foxpro。他做了一个软盘,里面是Novell的拨号网络,直接可以拨到一台服务器,这就是通讯部份;剩下就是:拷贝文件和在数据库里插记录。还用说,项目当然成功得不能再成功了。
我舒了一口气,同时也有点不服气。总觉得老师的实现技术含量不高,难度不大。在剩下的大学生涯,我把几本C++的大厚本书里的代码全敲了一遍,自以为是高手了。
毕业后去了南方。那时胆小如鼠,听从父母的安排去了一家传统企业。因为不甘心,周末总在电脑公司晃荡,和老板们混熟了。有一天,一个老板闲聊时对我说,有个桑拿管理系统,想不想做?500块。我当然想做,要不我在电脑公司晃荡干什么?我做了一个开发计划:30天。那老板睁大眼睛看着我,“老大,别人两个星期就做完了!”我说:“怎么可能?”生意当然黄了。后来一打听,有个老兄用VB,这种系统还不是小菜?
这事对我打击很大。我每天学到12点,对C++,Window API,自以为掌握地很好,想不到还赚不了钱。看来C++是不行,我还是弄点别吧。我于是辞掉了工作开软件公司。此后数年,从VB,VF到PB,从PB到Delphi,中间还用过Developer 2000,Java,Netscape的服务器端Javacript。从通讯程序、ERP系统,什么烂MIS,写了一个接一个。当然,钱嘛,还是没挣着。
后来实在挺不下去了。只好去打工。开始到一家很大的外企面试,面试官出了一道题:不用库函数用C++实现字符串比较。我那时有三四年没用C++了,答案写了一页纸。面试官最后说:标准答案是三行。
我又开始疑惑了,C++怎么又有市场了?后来找了家公司,老老实实从基层干起来了。PHP,Oracle数据库,Java,C++,公司要什么我就做什么;后来公司发展了,职位也逐年上升,而日子居然也一天天好起了。看看手上曾经做过的产品,已经有很多用户在用,也颇有成就感。而语言,突然发现它在整个过程中是很次要的事情:
管理团队,让大家工作得开心又负责任,才能把项目做好,和语言无关。
和客户或产品经理弄清楚需求,花的时间是整个项目的三分之一到一半:与语言无关。
产品设计最头痛的是前后版本兼容性问题,性能问题,冗余,故障恢复问题,在线备份问题……大部分还是跟语言无关。
产品代码出Bug,逻辑出错占一半:和语言无关。
最头疼的产品出错,都是什么产品环境配置问题,系统结构不佳啊,程序代码错误最多只有20%,而且大部份是最简单的错误。
而大部分语言问题,都是无论那种语言来做都会有的共性问题;而是不是某种语言的问题,就像吃饭的筷子是竹子做的还是木头做的,好像忘了它的存在一样。
这时,离我拿起第一本C++的教程,十几年过去了。
现在再回头看语言在我心中的变化:
刚出道时:什么难学什么。年少轻狂,把这个看成是智力挑战。
4-7年:什么流行学什么。学什么很功利主义,有时也很盲从,有时也是生活所迫。有时就像在押一个总是迟一步的宝,又总是押不着。这段时间是最痛苦的时候。
8-12年:忘了语言,只有产品。豁然开朗,也明白了为什么程序员可以是一个一辈子的工作。
我为什么反对CSDN引导Java和Ruby的争论?请注意,我是反对CSDN来引导此次争论,而不是反对什么其他人愿意在自己的田地里吵闹。除了我的个人观点外,我是希望CSDN引导一些更有价值的事情。语言之争多年前已经演练过了,被证明是愚蠢之举;今天再讨论,就像是在争执姓资姓社一样没有价值。其次,这种争执诱导了一些年轻程序员站队押宝,我看到或处理过多次这种案例:非要做某种语言或工具,这对程序员的发展相当有害。参见上文《误导程序员的喧嚣:评CSDN引导Java和Ruby之争》。
过去有位作家说,写东西就像拧身上的一个痦子,拧出了就舒服了。好吧,我想要说的也说得差不多了,估计表达漏洞也多得很,各位网友尽管板砖。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1325152