程序设计师真情忏悔录
本文转自台湾七年前的 JAVA 周报,该文是由台湾当时任职于 Sun Microsystems 的 王森 先生,回应当时 蔡学镛 先生所写的一篇文章「程序与香鸡排」。原文为繁体中文,本帖将其内容和用词转为简体中文。
JAVA周报: 程序设计师真情忏悔录
时间: Sat, March 30, 2002
标题: 【转载】程序设计师真情忏悔录(上)(中)(下)
------------------------------------------------
<不负责讲座> 程序设计师真情忏悔录(上)
Sun 教育训练中心 王森
前言 :
不久前,蔡学镛先生发表了两篇分别叫做「程序与香鸡排、再论香鸡排 」的文章,受到的回响之大,据说连作者本人都接到该文的转寄。足以见得该文的内容道出了台湾程序员心里最深处的想法。所以,本文想针对程序员来做讨论,看看身为一个程序员,究竟犯了什么过错,导致大家宁愿卖鸡排,也不愿再继续写代码。
本文 :
在台湾,大部分的人都有个认知,就是「搞硬件的比搞软件的要好赚」,「做 SA/SD 比 coding 地位要高」。那些做 IC Design 的家伙待的公司所发的股票,永远比搞 Software Design 的人待的公司发的还多,股价也高出好几倍。搞 SA/SD 的人,在公司地位好像也比单纯写代码的人高。于是我的父亲有一次问我:「是不是搞硬件的人智商比较高?」,「是不是搞分析、设计的人比较有地位?」
事实上,在学生时期我就认识不少人,有的人因为程序写不过别人,所以转换跑道专攻硬件;也有人觉得每天面对示波器和逻辑分析仪让他们头痛,工程数学也学不过人家,所以转行搞软件。到了实际面对许多前来接受教育训练的学员之后,发现有人是因为写了十几年 BIOS 和 driver,觉得乏味而没有前途,所以想试看看应用程序的开发;有人则是因为受不了客户每天改需求,而且写 BIOS 和 driver 的人好像比较少,价格比较高,因此想学习撰写系统软件。询问那些上高阶课程的朋友,有的人发现自己只会胡做 SA/SD 唬烂老板和客户,所以希望重新打好基础,从基本的 coding 做起;有的人则因为写代码写太久,觉得应该往上走向 SA/SD 的路子,毕竟老了代码就写不动了。这个世界上什么样的人都有,绝对不能以小羡大。就很像搞政治的老是骗我们台湾只分成外省人和本省人;搞帮派的人告诉我们警察是带着枪的流氓。实际上,每个族群大家在没有被分化之前都相处得和乐融融,而虽然有警察做 xxxx,上班时间跑去 xx,但是也有开我们罚单时酌情轻罚的警察,和保护我们身家性命的警察。
即使如此,身为一个程序员还是要问,那为什么写代码的好像地位就是比较低?笔者认为,这是进入门坎的问题,会做相同事情的人多了,就会削弱那样技能的价值。就很像考过 MCSE / MCSD 的人,通常比起考过 SCJP / SCJD 的人要来的没价值,前者因为考过的人实在太多,而后者考过的人少,仅是如此而已。但绝不是代表考过 MCSE 的人,素质就比考过 SCJP 的人要差;也不代表考过 SCJP 的人,实力真的比较高段。相信求学的时候您一定遇过一种人,他实力也不怎么样,可是考试的时候他 x 的就是考得比我们高。怎么我们心里就是不服,可是大多数老师偏偏就是比较喜欢分数高的人。因此,满坑满谷的人自称会编程,老板不愁找不到可以做项目的人,你要求的薪水和价格很高? 没关系,找个学校刚毕业的小子,写得比你快,写得比你好,用的技术比你新,更重要的,价格比你这个老屁股便宜一半,所以程序员在雇主心中的地位日益低落,自然有迹可循。
"那么,为什么写代码的进入门坎比较低?"
在各位 IT 从业人员的身边,非科班出身的比率非常高 (当然还没卖鸡排的高)。科班出身的学生,搞不好在老板眼中的地位,还比不上一个半路出家的自学者。那位自学者会 ASP、JSP、PHP、C/C++、Java、Linux、Windows、Oracle... 等,十八般武艺样样精通。而我们科班出身的学生,只会离散数学、数据结构和算法,Visual Basic 搞不好用得没有人家熟,网站的架设搞不好也没人家熟,更何况科班出生的学生,他的基础学问搞不好根基也不扎实 (问看看您身旁的科班学生),难怪最常见的就是很多非科班的「高手」看不起科班的学生,觉得他们无三小路用,连个 Windows 操作都比他们差,甚至有人还大言不惭地说 :「我这辈子写代码,从没用过书上的数据结构和算法,读那些干啥?」长期下来,科班的学生也开始质疑自己所学,甚至考虑转行;当然,也有曲高和寡,孤芳自赏之人。总之,没办法受到老板青睐,薪水永远那么少,想卖鸡排的念头就开始萌生。
之所以会有这种情况,笔者个人认为有两种主要原因,一是技术的流通性,二是台湾软件市场的需求。为什么技术的流通性可以产生大量半路出家的非科班生? 这都要感谢台湾大量的作者,写出大量的入门书籍,大幅减低进入编程领域的门坎。即使在各位眼中,中文的烂书很多,而且非常畅销。但是,大家眼中的烂书,常常是再版多次的入门书,对某些人认为是垃圾的东西,常常是另外一批人进入 IT 业的最佳踏脚石。不信各位到书店看看,是 "24小时学 C++"、"快快乐乐学 Java" 的书比较多,还是 "轻轻松松学微分方程式"、"21天学复变"、"电子学不求人" 的书多?两者的差距是 N : 0 。是微分方程式和复变比 C++、Java 难学吗?笔者两个都学过,至少我可以发誓,就一个有基本学习能力的人来说,难度是一样的,学成所需要的时间和功夫也是一样的。再看我们的公开论坛,我们可以看到大量的软件技术讨论区,却看不到硬件技术讨论区 (喔,请别跟笔者说那些每天问哪家主机板比较好,哪台烧录器较稳定,或者说 CPU 频率越高速度就越快越好,或是说 x86 的 Out-Of-Order Executon 是 "故障执行" 这一类浑话的讨论区,和我说的硬件技术讨论区是一样的喔!)。书籍和论坛促进知识的流通,造成了大量的软件人才,更何况学习编程只要一台 PC 就能写出好用的软件;而学习硬件设计,需要的设备则是天价。
更重要的一点,就是学软件的人,充分发挥儒家分享的精神,只要不是在论坛上冒充小妹妹,想要骗取大哥哥的同情来帮你写程序作业,只要不是很差劲地乱问一通,通常至少会有热心人士愿意留下一个 URL,让我们可以找到参考文档。更具热诚的人,还会用很多生动的比喻,让初学者体会技术的真谛。在这种知识充分流通的环境下,当然产生出非常多的 IT 从业人员;每买一台 PC,上头各种软件的需求是无穷无尽的,每天都有各行各业的人需要各种软件,所以程序员的需求有一定的量。难怪有人说:「写代码的人饿不死,但是也不会发大财。」
待续....
------------------------------------------------
═══════════════════════
王森专栏> 不卖鸡排也可以 - 程序设计师真情忏悔录(中)
(续上期)
再来就是台湾软件市场需求所引发的问题。
一般我们把软件分成「系统软件 (System Software)」和「应用软件 (Application Software)」。编译器、组译器、除错器 、操作系统、驱动程序,都是属于系统软件的一部分。
台湾除了硬件厂商、IC Design House 之外,甚少有撰写驱动程序的需求。前几年 Linux 被炒得热时,也有许多高手投入操作系统、编译器,以及简化 标准函式库 (API) 的研究。
而台湾所需求的软件,极大多数是属于应用软件,这些需求的应用软件,其中很大比例是和数据库有关系的 (其实不只是台湾,其他地方也是约略相同的情形)。
所以 VB、Delphi 和 Power Builder 这类 IDE 大行其道,因为他们容易上手,可以快速开发数据库应用程序,相关入门书籍很多,会的人更多。因此符合我们前面所说的:「会的人越多,价值就越低」的理论。
但是别忘了,系统软件有部分是偏向应用软件的,比方说开发软件用的 JBuilder 和 Visual Studio、制图用的 AutoCAD、一套 IC Design 用的 Xilinx 或 Altera、做 OOA/OOD 的 Rational Rose 和 TogetherJ,笔者习惯称这些软件为「软件的软件 (Meta Software)」。在一般程序员眼中,这类软件「理所当然」地被认为都是由国外所发展。
这类软件有极高的进入门坎,所以国外这类软件公司的获利率很高,所以该公司的程序员可是身价非凡。
要知道,先前在媒体上有报导过,能够让 Microsoft 买软件来用的公司,只有 Rational Rose (当然,不可能只买 Rose 来用)。如果做 IC Design 的人没有你的软件就没办法做事,身为一个程序员,你会觉得你的身价和地位比做 IC Design 的人低吗?
如果你做的软件像 SoftICE 或 DriverWorks 那样被做硬件的工程师大量地倚赖,你会觉得搞硬件的人比你厉害吗?问题是,知道该如何设计一套这类软件的人,恐怕才是真正的异数。而且需要跨领域的专才。
要不是许多 OpenSource 的项目 (例如 : KDeveloper) 正在进行,恐怕很少人知道该如何设计一套 IDE。既然会制作这类软件的人在台湾少之又少,那么他们的身价高吗?很抱歉,台湾没有公司发展出足以和外国大厂竞争的开发工具 。举 IDE 为例,台湾早期有家公司开发出一套名为 DBtools 的产品,勉强可算得上是这类产品,某计算机书籍出版社也曾为它出版过入门手册,可是使用这套软件的人好像... 没看过 (如果该产品有不错的占有率,请原谅我是井底之蛙)。没有市场,公司无法赚钱,即使你是少数能够制作某一类产品的高手,公司最后关门大吉了,您也只能算是「少数能让公司赔钱的程序员」罢了。所以我大胆假设, James
Gosling 或 Anders Hejlsberg,如果学李敖一样 50 年不离开这个小岛,大概早饿死了。
以上的讨论,真正优秀的高手看了之后,或许会产生有时不我予,不得已必须远渡他乡的想法。程序员的价值就如同书的价值一般,台湾和国外有不同的看法。在台湾,教科书比较便宜,应用的书比较贵;国外教科书比较贵,应用的书比较便宜。国外重内容,薄薄一本 How Debuger Work 可以卖 44.99 美金;而台湾都是看页数来计价 (侯捷 先生的书有努力在打破这个页数的迷思,也做得蛮成功)。有很多原因导致这两种文化之间的差异,但是市场因素肯定是其中重要的一项。
好了,程序员价值低落的原因讨论过了,如果您同意笔者的论点,那么不禁疑惑,大家彼此毫不保留地让知识得以流通,技术得以扩散,本意是好的,结果反倒造成自己和别人身价的低落 ,这样我们是不是从此不再和别人分享我们的心得? Java 高手 TAHO 先生看过本篇上半部之后,发表了底下内容:
------------------------------------------------
发言人: TAHO
> 哈 恭喜 TAHO 兄上 JAVA周报了...
> 通常至少会有热心人士愿意留下一个 URL,让我们可以找到参考文档,更具热诚的,如新竹师院 BBS 站 Java 版的 TAHO 先生,还擅用很多生动的比喻让初学者体会技术的真义。
@@".....
光看这一段 好像是褒奖
不过看了整篇文章...
突然发现......
原来我是让程序员不值钱的凶手之一....
真是罪该万死啊....
------------------------------------------------
但是 mue 先生接下来的发言,说却命中本文真正的核心价值观:
------------------------------------------------
发言人: mue
不会啦..要是每个程序员都死守自己所会的..让所谓的专业门坎更高的话.. 就很难进步了..就是让本来难的变简单..自然就会有更难更深入的东西出现.. 这样社会才进步得快丫..
------------------------------------------------
做应用软件的人真的没价值吗?有些靠应用软件赚了不少钱的朋友开始偷笑了。软件必须加上专业知识,才能够发挥价值;换句话说,如果您真的「只会写代码」,却没有配合各种领域的专业知识 ,「编程」这项技能本身根本毫无价值可言。
就很像你的计算机装了浏览器,可是却没有对外联机的网络一样。如果没有网络本身,浏览器一点价值也没有,更不需要一家公司大费周章地利用平台优势去整倒另外一家公司 。
我们可以把程序员比喻成架子上满满的 IT 相关书籍,而雇你的老板就是前来买书的读者。
你不能否认这么一堆书里头,有好书,也有烂书,你也不能否认你心中的烂书是一本书,但是你却不能说书里面教你如何写 Java 程序的内容是错的。
可是,购书的读者压根儿根本觉得某几本书一点价值也没有。我们只能说,太多只会「写代码」的程序员打烂了市场,就像一牛车的烂书一样。你不能说烂书没有价值,可是烂书会让你对架上其他书籍的价值大打折扣,除非,你之前听到别人口耳相传这本书是好书。
大家或许不相信「只会写代码」的程序员存在于这个世界上,所以笔者举个简单的例子说明之:很久以前,台湾某个论坛上有人发表了一篇 post,内容大概是说某 间公司在整理旧的源代码时,发现了一则奇文,奇文内容如下:
-----------------------------------------------
// 底下是一个判断某个整数是不是奇数的代码
public static boolean isOdd(int n)
{
while(true)
{
if(n==1) return true;
else if(n==0) return false;
n=n-2;
}
}
-----------------------------------------------
您说撰写这个代码的人不会写程序,他又好像会写;你说他会写程序,你又不服气,觉得这个家伙根本在胡搞一通。看过这则奇文轶事之后,当您下次听到某公司,抱怨他们的程序员写出来的软件一堆 bug,速度出奇的慢,产品永远卖不出去,害公司快经营不下去了,所以他们认为程序员一点价值都没有,只是一堆劳碌命的杂碎时,您会不会更加怀疑,是一堆莫名其妙乱搞的程序员,把你的行情给搞烂了?
待续....
升阳计算机教育训练中心 王森
----------------------------------------------
═══════════════════════
王森专栏> 不卖鸡排也可以 - 程序设计师真情忏悔录(下)
续上期
所以从今天开始,如果你对编程有一股热爱,那么我们一起努力,做个真正的程序员,而不要做一个杂碎且破坏别人的程序员;做一个真正写得出有用软件的工程师,不要做一个只会写代码的程序员。当然,如「意外的电脑王国 / 联经出版社」一书所言,很多技术都是用在原本没有预料到的地方而大行其道。许多科学研究无法有立即的贡献,但是影响深远,我们也期许有意从事基础研究的科班研究生,认真地作研究,不要老是研究一些别人已经研究过的研究,不要老是冀望骗台湾国科会等研究机构的经费,到了最后计划结案时,才匆匆忙忙交出另外一篇骗更多钱的计划书,或是拿不上台面的研究。
最后,我们反省自己是不是也是一个只会「写代码」的程序员呢?请自行测验底下几个问题,这些问题都不可能有客观的答案,所以每个问题都附上笔者主观的答案,作为笔者自己的反省。
Q1: 你尊重专业技术吗?换句话说,你认为术业有专攻吗?当你接受外面的教育训练课程时,你总是崇拜看起来什么都懂的老师?换句话说,你认为那些遇到课外问题就跟你说他不懂的讲师是烂老师?
-你老觉得真正的高手应该精通各门各派的技术 (?),如果你会 XML,他不会,你就觉得你比他厉害。你觉得他的履历上写的技能太少,证照太少,所以你认为你比他优秀?
有人老是觉得自己蛮会用 MFC 开发软件,所以直觉认为那些只喜欢,或是只会用 VB 的人程度应该不高。问题是,有人会用 VB,当他觉得组件不好用,会自己写程序处理 HTTP,因为他懂 HTTP 协议的运作方式。工具里附的浏览器太烂,就自己用功能语法不是很顶尖的 Basic 来写 parser。相反的,有人号称会用 MFC (版工注:或 .NET),但是除了靠 Help (版工注:或 MSDN) 找出名为 Cxxxxx 的 类 (Class) 来用,再自己补上事件处理的部分之外,其他什么事都做不出来。
有人认为写 Java 程序应该善用工具,用 UltraEdit 根本是重新造轮子的行为,所以一开始就学 JBuilder (版工注:或 Visual Studio) 的使用者,其实他用 JBuilder 写了老半天 GUI 程序,哪天回头叫他用文本编辑器写个简单的 Frame + Button 他却写不出来,因为他从没弄懂过 Java 的事件处理模型。他只会不断地:选择组件 -> 放在容器里 -> 调整位置和大小 -> 调整属性 -> 按两下 -> 填写事件处理函数,成为一个名副其实的「代码女工」。
有人觉得他精通各家厂商的数据库,所以看不起那些只会下 SQL 指令或是只会写 stored procedure 的人,因为他可是精通 ODBC、JDBC、ADO、ADO.NET 各种程序的写法。问题是,一个精通 SQL 的专家,和只会写 SQL 语句的人,在数据库表格交互参考、纪录量很大的时候,要从中取出我们需要的数据,所下的指令在效率上,是几秒钟和几个小时的差别。
SQL 也是个专门学问,要能够巧妙地操作它,必须下非常多功夫做研究,而且一研究可能就是十几年。如果贵公司的项目老是苦于数据库访问的性能不佳,你猜老板会花钱找一个有能力彻底改善所有 SQL 语句中性能问题的稀有专家,还是再找一个号称他什么都会,结果一点用场也派不上的「数据库女工」? 我们常常看到某人列出他的履历,好像会很多就是很厉害。但是当我们完全深入一项技术时 (喔,我是说你真正下过功夫的时候),通常我们会越来越感觉到自己的渺小。
蔡学镛先生就是一个非常尊重专业技术的例子.
我们看到他在 http://www.csdn.net/expert/cxy/ 上写的,他说他只精通 lots of Java APIs。我和学镛聊过三次,有一次,我听他说:「干麻叫我搞 Linux,我又不懂 Linux!」如果是你听到这句话,你会不会真的以为他玩起 Linux 来肯定比你逊色?笔者突然想起神雕侠侣里的独孤求败,晚年只会拿树枝和别人比武,可是你拿再厉害的刀剑就是无法打败他。所以,请尊重专业技术,不要以为人家没说他会,你就比他厉害,真正厉害的人很多都不在台面上,而是躲在后面偷偷笑我们呢!而我们一辈子也不知道我们被别人偷偷取笑了。中国文化数千年都是文人相轻的历史,够了,大家尊重专业吧!
Q2: 你觉得算法和数据结构无三小路用,因为你从没使用过?
-我们承认「无招胜有招」是内功心法的最高境界,但是在信手拈来之际,背后所代表的是对各家武功路数的彻底了解。由于台湾几乎只有应用软件的开发需求,没有系统软件的需求,所以大多数的程序员都是站在「代码女工」的角度看世界,只要有组件,有什么搞不定的。但是今天如果你想设计一个 XML parser,不懂数据结构和算法可以吗 ?好吧!你说我们不该重新造轮子,我们应该站在巨人的肩膀上看世界,如果什么都自己硬干,世界是会退步的。那么试问,当你在使用 Java (版工注:或 .NET) 提供的 Collection Framework 时,你了解 ArrayList、LinkedList、TreeSet、HashSet 之间的差别吗?
你知道他们的优缺点吗?你知道他的特性吗?不了解 ArrayList 和 LinkedList 的差异,用任一种去写代码,执行结果都一样,可是性能差很多。大多数的人连了解特性都谈不上,更别说很多每天想发展自己的语言、自己的编译器、自己的操作系统的人。没有基础学问的了解,如何去设计一个 Collection Framework 或 STL?你说数据结构和算法没有用,你去做看看现在 IDE 中普遍有的 code insight 功能看看 ?以 C++ Builder 来说,要在短时间内搜寻所有的标头文件,并找出某函数的 prototype,如果没有对数据结构和算法有充分了解,一样做得出来,只是产品会卖不出去罢了。我在课堂上常常举一个 scalability 的例子给学生看:我希望写一个 1+2+3 ... + 100 的程序,大多数的人都是写:
int sum = 0 ;
for(int i = 1 ; i < 101 ; i++)
sum = sum + i ;
而真正受到数学观念熏陶的人会写成:
int sum = 100(100+1) / 2
前者是 O(n),后者是 O(1),当 item 很多时,运算时间是不是差很多?这些都是我们的教育所产生的问题 (当然笔者也曾是受害者之一)。但是从今天开始 ,我们可以认真思考每行代码。
想想发展 MP3 算法的人和写 WinAmp 的人,哪个比较厉害?你会说都很厉害,可是没有前者就没有后者;前者搞不好还可以坐收权利金,后者只能苦哈哈的赚些小钱或等人购并。我们停留在崇拜应用程序技巧的阶段,而真正值得崇拜的是那些难得一见的创意。
笔者遇过一个朋友,叫他撰写一个「费式数列 (fibonacci)」的小程序,比请他写一个可以浏览数据库的表内容的程序还难 (请不要与我讨论费式数列的小程序没有实用价值的问题,这里讨论的重点不是这个)。前者需要稍微动点小脑筋,后者只要会拖拖组件,设定 property 就搞定。RAD 快速开发工具本身不是罪,但是没学好九阳神功就妄想几小时练成乾坤大挪移,最后只会走火入魔而死,彻底变成一个「代码女工」。
Q3: 你常常以科班或非科班自居?
-你是科班生,瞧不起非科班生?因为你是正统?你是非科班生,瞧不起科班生?因为你觉得你会的东西比科班生还多。烂学校会出现好学生,好学校也会有烂学生,因为比例一样多,所以我们不能以偏概全。
如果仗着受过几年正规教育,自己又从未好好深入学习,就自以为是正统,比较学术的说法这叫做「阳具文化」。
有些创新的 idea 是一般制式脑袋的科班学生很难想出来的,因为专家是训练有素的狗。如果你是学电信的朋友,你发现交换机是一个葬仪社的老板,因为生意被别人抢走而发明的,那你会不会气死?如果自学有成的程序员,仗着自己会的东西比较多,你说你精通 Java 的各种技术,但是却没想过发展 Java 的 James Gosling 博士,是一个正统出身的科班生,知道了这件事情,会不会让你更加尊重专业?
Q4: 你是学计算器科学的,可是逻辑能力并没有比较好,还常常受骗?
Q4-1: 你会被潮流所鼓动吗?你常常被别人的思考牵着走?人家鼓吹 Linux 多好多好,你的脑袋连转都没转过就发愤努力地考 Linux 认证?
-别人把公司里的 server 全换成 Linux,客户端也都改成 Linux,公司仍然正常地运作。结果你学了 Linux 之后,看到电视上 BSA 同法务部做的广告吓得你冷汗直流,深怕明天因为智慧财产权被捉去坐牢。
Q4-2: Sun 跟你说 Java 跨平台,你没试过也跟人家说跨平台的优点?
-Borland 已经可以做到一份光盘里,同时附上 Solaris、Linux、Windows、MacOS X 的 JBuilder,你却为了 EJB 无法部署到不同公司的 Application Server 忙得像无头苍蝇。
Q4-3: 之前一窝峰人鼓吹 XML,结果你盲目追求流行,做出来的东西 tag 比 data 还多?
-会用的人彻底改变了公司里数据交换的流程,而你整天只会 SAX 来、DOM 去地写 XML 数据库 (用 XML 来存储数据的数据库。)
Q4-4: 微软的广告告诉你 Windows XP 和 IE 将不支持 Java,你都还没试过就跟别人嚷嚷 Java 已死?
-套句 BBS 上 moga 先生的名言:「那我现在在 Windows 2000 上跑的 Java 程序是神迹?」 现在一票人每天宣传 Web Service 的好处,你连想都没想过,就急着把公司的旧系统全部改成 Web Service 来做,结果浪费一堆钱,糟糕的性能让你每天被客户臭骂。
Q4-5: Web Service 当然是美好的前景,但是并非适用于每个角落,目前世界上并不存在完美的 solution。人家说不能写代码一辈子,写代码的人,生命周期很短,你也跟着别人开始往 SA/SD 前进?
-如果世界上每个工程师,都可以经由经验就成为优秀的 SA/SD 人员,那么理论上咱们应该有些象样的软件产品才对。有些人写了几十年,还是一个优秀的程序员,你问问他,如果没有遇到糟糕的老板,糟糕的待遇和糟糕的制度,他愿不愿意写一辈子代码?
我愿意。
Q4-6: 技术高手告诉你要多用 RAD,不该重新造轮子,所以你努力的问 how 而不问 why?
-结果真正赚到钱的都是那些像 JReport 做软件组件的软件公司。微软说 J2EE Blueprint 的 Pet Store,用 .NET 技术做,比用 J2EE 做还要快许多倍,然后你就相信了;最近,IBM 和 Oracle 重新加强 Java 版的 Pet Store,让它比 .NET 版的还要快 18% ~ 22%,你又改口说 Java 比较好。
Q4-7: 一个系统在设计的时候有很多考虑,有人以可扩展性为主,有的以安全性为主,有人以性能为主。如果没有设计理念,大家程序里的 function 全部改成 inline 就好了,管他编译出来的执行文件有多大。系统只以性能做考虑,我们还需要 Design Patterns 做什么?
-那些王八蛋资料和选举时的民调一模一样,对一个脑袋清楚的人完全没有参考价值。当然,以情感因素来看民调的人例外。如果你没有经过自己的自主判断,就盲目地跟随技术潮流,那么下次当你看到有人排队买电视媒体鼓吹的产品、买蛋塔、抢购特价商品时,请不要投以排队的人们奇怪的眼光。
Q5: 你尊重老前辈吗?
我们都相信,世界上唯一不用努力就可以获得的东西就是老。所以吃过的盐巴比你吃过的米还多的人,没有任何值得尊重的。我们更相信,IT 产业永远是年轻人出头,而英雄少年也常在心里想:「李杜诗篇万口传,至今已觉不新鲜,江山代有才人出,各领风骚数百年。」
但是我们认真想想,从 Apple 2 的时代到现在随便一颗 CPU 都是好几 GHz 的时代,计算机的本质有什么改变吗?不就是一台不断对内存做处理和 I/O 动作的机器 。你笑那些只会用 Fortran 或 COBOL 的老前辈,那你学的 Java 或 C# 比起这些老语言又高明到哪里去?编程不过是「声明、循环和函数」三大要素。时间久了,产生了一堆新名词,配上一些新的发展理念,但本质上没有改变。如果你是推倒前浪的后浪,当你看到 李維 先生撰写的「[长篇] 我的回忆和有趣的故事」,或 侯捷 老师最近在 Run!PC 杂志撰写的「侯捷观点」这些老前辈的文章,你有把握写出比他们更高明、更有深度的东西吗?
最重要的问题,
Q6: 你骗过老板吗?
-你在履历上写的十八般武艺样样精通,结果是梧鼠技穷 (注: 比喻技能虽多,却不能专一),一录取之后什么东西都做不出来,笔者至少听过 20 个老板跟我讲过这件事情。
Q6-1: 你以为你的身价比较高,只因为你从事「软件研发」的工作?
-然而现实的生活中,「获利」是真正决定成败的关键。除非你的东西帮老板赚了钱,如果没有,你凭什么要求更多薪水?凭什么要求 50 张价值数千万元的股票?如果你写的东西质量很差、bug 超多,客户抱怨不断,老板赚不到钱,你还老是在外头痛骂老板不尊重技术人员。如果把行业换成色情行业 ,那老板不就等于被干洗?这样看来,程序员和诈骗团伙干的事情有什么两样?如果这样的人多了,真正要去卖香鸡排的,不是写代码的人,而是雇用了这些杂碎的老板才对。
............全文完
Sun Microsystems 计算机教育训练中心 王森