30岁,开始实现我的程序员梦,从一个编程爱好者,从一个业余的程序员,一个水平不高的程序员,一个半道出家的程序员......
我的经历到这里就告一段落了,五年里跳了五次槽,不知道和大家比算不算多J,没有什么太多起伏,但我想很多朋友可能会和我有类似的经历,不知道能不能引起你们的共鸣。我想对我上面所说的话给一个总结:
1.如果你觉得自己应该追求什么,不管遇到什么困难千万不要放弃,一定要坚持下去。
2.不要因为自己年轻就找理由挥霍时间,少玩一点SC、CS、魔兽3、传奇、魔力或者 …….,多看点书,多练练题。
3.如果你还是在校的学生,英语很差,专业课也很差。没关系,想怎么学计算机就怎么学计算机吧。其它地只要能混到毕业证就行了。除非你对自己的未来没有信心。(当然,如果你的理想不仅仅是要做一个程序员,那你别丢掉英语。)
4.如果你不是科班出身,想要转行而不知该怎么开始的话,建议你先看两类书:(1)计算机原理;(2)数据结构和算法。(看数据结构之前先看C语言)。
5.什么时候努力都不晚,关键是你明白要努力了,大器晚成总比一事无成要好的多。
6.Java、.net、C++、PB、VB、Delphi、汇编到底应该学哪个?我的经验,哪个最简单就先学哪个、公司用哪个你就学哪个、哪个和你有缘(比如刚好你认识一个愿意帮助你的Delphi高手)你就学哪个,如果你都学,或者三天两头的换,我可以告诉你结果肯定是什么都不会,不要心浮气燥,他们都只是工具,学精一门其它的就相通了,重要的是掌握编程的思想。如果你问我面向对象(好像现在已经是面向需求了)、UML、 WebLogic、WebService、软件工程、XML…….应该怎么学呀,对不起,这些我也确实不是都会,但请相信,你先实实在在的写上十万行以上的代码以后,那些东西你自然就慢慢会了。
7.不要以为程序员的工资都很高,程序员之间的水平差异也大。公司衡量一个人的待遇标准是他能给公司带来多大的效益。如果你体现了自己的价值,公司会主动给你加薪的,当然你也可以自己主动提,但一定要在你表现出了自己的价值之后。
8.轻易不要跳槽,如果非要跳,也要保持工作经验上的延续,而不是从新开始,不然就会象我一样走很多弯路。
9.如果你以为程序员都是熬夜熬出来的,那么你错了,因为它的代价就是缩短你的青春!大家不要象我一样,真的,熬夜一点也不好!记住老毛的话:如有恒,何须三更起,半夜眠;最怕莫,三天打鱼两天晒网,竹篮打水一场空!
10.这一点是我觉得最精华的一点:“君子性非异也,善假于物也。”这句话的本意是一个水平很高的人本身并不一定很高明,关键是他善于利用别人的高明!我在这里做个借鉴,就是要充分利用自己身边的资源,不放过任何一个可以提高自己的机会。大家不要误会,这里的假于物可不是指抄袭别人的源代码,而是指通过学习别人的源代码把他的思想扩展到自己的思想里去。
注:上面的十大“精华”纯属我个人的“谬论”,您自己看着消化,有用的收下,没用的请拖入“回收站”。如果你觉得这些总结不过是一些浮华之词,那请你先问问自己: “是不是在行动上都真正做到了。”
这就是我,一个不算优秀,不算勤奋;玩能玩通宵,学也学能学通宵;对梦想的追求很执着;到了30才开始真正写程序;一个很平凡但又不甘于平凡的人……我的经历相信很多朋友都有过的,我现在也不能算是一个成功人士,但我相信我的经历却是值得大家借鉴的,因为我终究代表了一类人。
最后我还想说一点:现在很多朋友都抱怨中国的软件业环境太差,前途渺茫。确实是这样,我有同感。不过我想软件业不过是千万个行业中的一种,每一个行业总是会有起落的,中国的软件业环境差有她的历史原因,我们不要总是简单地和印度相比。抱怨没有意义,已经这样了,抱怨不能使她变好,希望我们每一个人多贡献一份自己的力量,总有一天她会变的比印度还好,甚至比美国还好。
最后:希望所有的程序员和拥有成为程序员梦想的朋友们在新的一年里心想事成,万事如意。请相信我:明天不一定更美好,但美好的一天一定会来!
###################################################
雷先生是一家开发网络软件的公司的程序员,在这家公司任职已有3年之久。因为能力出色,他颇得老总重视,也是公司的核心开发人员。但就在他30岁之际,老总决定不再同他续签工作合同。公司开发软件的平台已经从PB(power build)转向了.net,而雷先生是一位PB高手,对.net的知识却不甚了解。眼见他再无利用价值,被辞退也在意料之中。
在中关村,像他这样的编程人员不在少数,他们或多或少都面临着这样的难题——30岁,我该如何选择?
他的同事这样形容他的离开:默默地收拾东西,尽量不惊动任何人,慢慢地走出去,走出让他流了3年汗水的公司。
无独有偶。一年前,刚刚年满30岁的孔先生也面临了这个问题。公司是做项目的,每个项目做完,代码重用的机率很低,而每个项目几乎都是在赶工作,没黑没白地干,因此,当年龄偏大的孔先生忙完手边的项目时,老总把他叫了去,请他离开公司。孔先生回头看了看开发部,那里新来了一批年轻的新手,他们朝气蓬勃、跃跃欲试。在领了3个月补偿工资之后,孔先生只能黯然离开。
孔先生在3个月后找到了一份新工作,继续做程序员,而雷先生则不知去向。雷先生前不久才贷款买了房,准备长留中关村。
尽早寻出路
在中小型软件企业打工,尤其是在创业型企业打工,企业不愿意也没有能力养一些没有价值的员工。当程序员的价值被“挖空”时,企业便会无情地抛弃他。周先生1999年毕业于某名牌大学自动化系,刚好赶上网络热潮,他硬是自学了网络知识,进了一家在纳斯达克上市的网络公司做程序员。网络热潮中的年轻人热情也高,周先生干得拼命,天天加班,抓紧时间赶项目。“我几乎天天都是晚上10点钟以后下班,第二天一早就又按时来上班。”他说。
但好景不长,因为网络公司人员变动频繁,公司内高层领导走马灯似地更换,手下的“兵”也是换了一拨又一拨。因为周先生是技术骨干,尚能保住不被裁员,但在这种环境下,周先生感觉到了无形的压力。公司领导换到第五拨时,周先生感觉再呆下去只能是陪葬品,于是选择了离开。
周先生接着到一家开发ERP软件的公司从事开发工作。因为是针对网络的软件,所用的技术更新速度相当快,差不多一年一换。ASP、PHP、J2EE、.net……这些平台相互之间的关联又不是很紧密。几经折腾,公司业绩没见好转,周先生的加班可没少过。软件公司加班都是“义务”,公司充其量会提供一份盒饭。周先生感觉,再这样熬下去不是办法。“不知道哪天我累了,赶不上新技术的发展,做技术的就怕这个,那时候,我就玩完了。”
这一年,周先生25岁,公司倒闭,周先生成了“无业游民”。赶上网络业冷淡,周先生的技术经验又都是基于网络软件,因此再找一份像样的程序员工作并不容易,周先生也害怕了做程序员时玩命般的生活方式。“除了写软件,没有时间看书、读报,甚至没有兴趣进行正常的生活用品采购,更重要的是没有机会认识女孩子。”周先生不好意思地笑笑,“我决定放弃再找程序员工作,开始闭关思考。”
接下来,周先生花了半年多的时间反省自己,总之,网络开发的工作是不能再做了,程序员的活儿也苦,现在年轻还顶得住,等到顶不住的时候,想转行也难有机会了。于是,他花了3个月时间啃与网络相关的网管专业。因为网管所涉及的知识更新相对来说慢一些,加班工作也少,比较稳定。3个月后,周先生考取了思科公司的CCNA认证。然后凭着这张证书,他如愿以偿地找到了一个网管职位。虽然收入比起程序员要少一些,但至少比较稳定,也不用离开他喜欢的网络。
现在,周先生一般选择业余时间编一些软件。“纯粹是个人爱好,我是不愿意再当程序员了。”
创业的黄金时代
张先生今年30岁,刚好处于程序员的“坎”上。在这之前,物理专业出身的他已经做了5年程序员,换过3家公司。
“程序员工作,只要喜欢,就不会觉得苦吧。”张先生说,“我没有别的爱好,就喜欢编程,所以并不觉得这个工作枯燥,如果不让我编程,我反而浑身不自在。”
但张先生也感受到了程序员工作的辛苦。“平时工作,我都会忘了时间,经常一干就不知道到几点了,我现在的公司管理也比较开放,只要项目能完成就行。我经常是一抬头才发现天亮了。”张先生有些担忧地说,“我害怕了,这样下去,我会垮掉。于是就抽时间写了个小程序,每天晚上8点会定时响铃提醒我,这样我就知道该下班休息了。”
对于自己的将来,张先生早有打算,“我马上就要辞职了,在这个‘五一’之前。”张先生表示他准备继续编程。“我打算写共享软件,现在我已经有很多想法,可以自己实现它,然后挂在网上出卖。”
张先生已经和几位志同道和的哥们开办了一家工作室,利用业余时间编写一些小软件免费提供给用户使用。“我们对其中一款实行收费,效果还不错,没想到国内有这么多愿意为正版软件付钱的用户。”张先生欣喜地说。在他的计划中,如果效果好,编写出来的软件挣到了钱,就可以再投资成立公司,扩张人马、正式创业。
经验永不倒
戴先生今年31岁,是电信软件行业的资深开发人员,多年的程序员经历,便他迷上了程序员工作。对于程序员吃青春饭的问题,戴先生承认身边确实没有比自己年龄更大的同事了,但这并不一定说明程序员就不能做长久。“在国外,四五十岁的程序员都有,在国内应该也可以。”
戴先生多年来丰富的工作经验,使他成为被各公司争相挖角的焦点,他的薪水自然也处于高位。“我31岁,并没有感觉到精力不够,工作都能按时完成,并且经验积累多了,老程序员比刚入行的新手强得多。”
软件行业的技术更新虽然很快,但技术的相关性比较强,有经验的程序员学习新技术也很容易。戴先生已经开始从事系统分析员的工作,目前,他已经不用再编写大量软件代码。因此,如何管理项目进程、协调软件项目的开发流程这些需要丰富经验的工作,对他来说得心应手。戴先生认为,目前国内不少软件公司基础不好,又急功近利,讲究个人英雄主义,而软件是一项大产业,需要多人协同工作,这样才能做出优秀的产品。也正因为个人英雄主义的存在,一些软件公司就会选择对程序员竭泽而渔的做法,在短时期内迅速耗干了员工的精力。这样做,不但对员工不利,企业也无法做出优秀的产品。
而对于程序员自身,戴先生认为,一方面要抓紧时间充电,更新知识;另一方面,则要注意积累经验,向更高的目标发展。虽然随着年龄的增长,精力跟不上,但丰富的开发经验可以弥补这一缺点。此消彼长,只要有能力,年龄并不是问题。
出处:中关村在线
=========================== 2 =================================
事件回放:上海一36岁软件工程师因无力供楼跳楼身亡
2006年11月5日,上海一名36岁的软件工程师跳楼身亡。该工程师就职于一家日本软件公司,月薪一万,去年夏天该工程师为了结婚,贷款80万买入一套108平米的婚房,12000元每平米,现房。去年10月1日他与自己刚认识半年的恋人——24岁的漂亮售货员结婚了。婚后为了让自己年轻貌美的媳妇过上更加幸福的日子,为了每月按时还银行7000多的贷款,他每天都更加努力加班加点地工作。
天有不测风云,由于这家日本公司业绩下滑,公司做出了裁员三分之一的决定。虽然他工作积极,技术也不错,但由于一直只是一名技术人员,加上年龄过大,还是无情的被公司于今年7月份辞退。屋漏又逢连夜雨,由于他性格木呐,年龄已经超过35岁,连续3个月也没有找到一个能月薪一万的工作,最后连8000元/月的工资,也没有公司愿意聘用他。还贷的压力和失业的迷茫让他夜不能寐,茶饭不思。从事售货员的妻子当时也是爱上了他的房子和不错的工作,自己工资也不多,看到他长时间找不到工作,不仅没有安慰他、鼓励他,反而整天唠叨、数落甚至谩骂他,还一直喊闹着要离婚。他当时也想过把房子卖掉,众所周知,上海前几年的房价已经出现了大量泡沫,他当时买入时的房价几乎是最高点,在国家的调控下,房价逐渐回调朝合理的价位回归,现在的房价只值9000元每平左右,让他心理极度懊恼。
在失业、婚变、还贷的多种压力下,加上平时不会自我调节以致于精神恍惚的他终于承受不了这突如其来的一切,于2006年11月5日深夜从自家的阳台上跳了下去...
=========================== 3 =================================
马斯洛(A.Maslow)是人本主义心理学的代表人物,他首创了需要层次理论。该理论把人的需要分为五个层次,分别是生理上的需要、安全的需要、社交的需要、尊重的需要和自我实现的需要。
生理上的需要是人们最原始、最基本的需要,如吃饭、穿衣、住宅、医疗等等。如果得不到满足,则可能有生命危险。这就是说,它是最强烈的不可避免的最底层需要,也是推动人们行动的强大动力。显然,这种生理需要具有自我和种族保护的意义,以饥渴为主,是人类个体为了生存而必不可少的需要。当一个人为生理需要所控制时,那么其他一切需要都会被推到幕后。
安全的需要要求劳动安全、职业安全、生活稳定、希望免于灾难、希望未来有保障等,具体表现在:
(1)物质上的:如操作安全、劳动保护和保健待遇等。
(2)经济上的:如失业、意外事故、养老等。
(3)心理上的:希望解除严酷监督的威胁、希望免受不公正待遇,工作有应付能力和信心。
安全需要比生理需要较高一级,当生理需要得到满足以后就要保障这种需要。每一个在现实中生活的人,都会产生安全感的欲望、自由的欲望、防御的实力的欲望。
社交的需要(归属与爱的需要)是指个人渴望得到家庭、团体、朋友、同事的关怀、爱护、理解,是对友情、信任、温暖、爱情的需要。社交的需要比生理和安全需要更细微、更难捉摸。它包括:
(1)社交欲。希望和同事保持友谊与忠诚的伙伴关系,希望得到互爱等。
(2)归属感。希望有所归属,成为团体的一员,在个人有困难时能互相帮助,希望有熟识的友人能倾吐心里话、说说意见,甚至发发牢骚。
(3)爱。爱不单是指两性间的爱情,而是广义的,体现在互相信任、深深理解和相互给予上,包括给予和接受爱。
社交的需要与个人性格、经历、生活区域、民族、生活习惯、宗教信仰等都有关系,这种需要是难以察悟,无法度量的。
尊重的需要可分为自尊、他尊和权力欲三类,包括自我尊重、自我评价以及尊重别人。尊重的需要可以划分:
(1)渴望实力、成就、适应性和面向世界的自信心、以及渴望独立与自由。
(2)渴望名誉与声望。声望为来自别人的尊重、受人赏识、注意或欣赏。
满足自我尊重的需要导致自信、价值与能力体验、力量及适应性增强等多方面的感觉,而阻挠这些需要将产生自卑感、虚弱感和无能感。基于这种需要,愿意把工作做得更好,希望受到别人重视,借以自我炫耀,指望有成长的机会、有出头的可能。显然,尊重的需要很少能够得到完全的满足,但基本上的满足就可产生推动力。这种需要一旦成为推动力,就将会令人具有持久的干劲。
自我实现的需要是最高等级的需要。满足这种需要就要求完成与自己能力相称的工作,最充分地发挥自己的潜在能力,成为所期望的人物。这是一种创造的需要。有自我实现需要的人,似乎在竭尽所能,使自己趋于完美。自我实现意味着充分地、活跃地、忘我地、集中全力全神贯注地体验生活。成就感与成长欲不同,成就感追求一定的理想,往往废寝忘食地工作,把工作当是一种创作活动,希望为人们解决重大课题,从而完全实现自己的抱负。
大学刚毕业1~3年的学生的需求层次处于理论的最底层,即追求生理上的需要。这时的表现大都十分盲目,找不到人生的定位,工作只是“混口饭吃”的工具,一旦发现有个能够比现在多挣个三五块的工作,就会立即“扑”过去,往往考虑的只是温饱问题而很少顾及职业规划和个人发展空间。当企业给安排社会保险时,这些人就会说:“呵呵,领养老金,那太遥远了,还不如把钱直接打到我的工资卡上”。或许,这就是业界一直在说的“浮躁”,浮躁的根本原因在于生理需要未得到满足。人是如此,企业也不例外。
在IT界摸爬了3~5年之后,基本上到了快“奔三”的时候,于是,逐渐会考虑安全的需要。找工作时首要的条件就是需要“三保”之类的劳动保障,其次再是具体的工资待遇。在这个时候,就相当于人生的中学阶段,开始定性、定型。在这个阶段,容易出现两极分化:
(1)习惯了为三五块而工作的模式,继续频繁换工作,而工作时只是“卖身不卖心”。这样,就继续当代码工人(程序员)、搬运工人(硬件销售)或清洁工人(维护和支持)。
(2)在生理和安全需要得到基本保障的情况下,更渴望个人的发展和能力的体现。工作认真努力,不断学习,在给企业带来效益的同时,也给自己带来了发展的机会。这样,就不经意地走上了设计师、架构师、部门主管等位置,逐步向金字塔顶迈进。
工作了5~8年,那些工人级的人士就会成天在想、在讨论“30岁的程序员应该怎么办”、“30岁的程序员的出路”等一揽子问题。因为他们懒于学习,没有进步。从技术上来说,即将被行业淘汰和抛弃。从体力上来说,相对其他人员,他们已经年老体衰。这些人也会觉得很累,因为白天要上班,晚上要玩游戏,泡酒吧。
同样是工作了5~8年,那些已经处于企业中层的人士逐渐会出现第三和第四个方面的需求,即社交的需要和尊重的需要,他们需要的是归属感,渴望名誉与声望。但在这时,由于各方面的因素,有人能在小范围的、局部的满足这种需要,有人能在较大范围内得到这种需求。有人为了实现自己的目标和抱负,满足自己的自我实现的需要,竭尽所能,废寝忘食的工作;有人已经被社会和生活淘磨得棱角全无,感到很满足,安于现状。
十年之后,老同学聚会时就会发现,有人是开着宝马来的,有人是踩着飞鸽来的。有人已经是千万富翁,笑谈海外业务扩展;有人愁眉不展,抱怨现在的房价太高。
======================== 4 ===========================
在互联网的社区中,关于程序员浮躁的讨论帖子很多。那么程序员真的浮躁吗?他们为什么会浮躁呢?其根源是什么呢?
程序员已经是一个没有门槛的职业
随着开发工具的可视性、易用性的增强,程序开发变得越来越简单。特别是随着软件工程方法的深入人心,开发过程管理变得愈加规范,使代码编写变得类似于机械性的动作。这样,程序员已经是一个没有门槛的职业,各培训机构都可以号称2-3个月内打造一个软件蓝领。加之各种渠道的宣传和炒作,让公众误以为只要攀上IT,一定前途无量。我们到处都可以看到这样的言论和宣传,“中国每年缺程序员XX万”,这是谁统计的数字?什么时候的数字?却无处可查。我个人认为这些数字是有问题的,是有很大的水分的。根据本人了解的情况,从2003年开始,中国各类大学所招的计算机相关专业的学生数量就已经超过了IT行业所需的实际数量!
培训机构给程序员职业蒙上了阴影
一些培训机构的“粗制滥造”,给程序员这个职业蒙上了许多阴影。给人的总体感觉是现在的程序员越来越多,但真正有水平的程序员却越来越少了。特别是有个别培训机构滥发证书,滥发到什么程度呢?给大家举个例子。
早些年,当我还在企业做经理的时候,有一次招聘程序员,但有一个号称是系统分析员的年轻后生来应聘。出于对“系统分析员”这个名字的好感,我要求亲自面试该应聘者。既然是面试系统分析员,当然要从软件工程的话题谈起,遗憾的是,此人对软件工程一无所知。在这种情况下,我才提出要看他的证件,大失所望啊,原来是国内某知名IT培训机构所颁发的所谓系统分析员证书。经过交流才知道,不管什么基础的人(大部分是高中毕业生或中专毕业生),在该培训机构,只要学习一年,就可以颁发系统分析员证书的。既然不懂软件工程,那咱们就谈数据库和算法吧,结果也是一问三不知。我急啊,就直问,“你究竟会什么?”,答复是“我会一点asp”。无语,走人。
不久后,我给国家软考办提交了一份请示,以“有损系统分析员的名誉”为理由,要求取缔该培训机构颁发的系统分析员证书。得到的答复是“这个问题我们管不着,就好象中国有个著名的清华大学,北京却有人搞个华清大学。用人单位要注意识别李魁和李鬼”。“系统分析员”尚且如此之差,更别说他们的“高级程序员”和“程序员”了!这样,导致业界感觉整个程序员的水平在下降,特别是使一些老程序员对新程序员“不屑一顾”。
相当一部分程序员是浮躁的
现在的很多程序员真的是浮躁的,包括在校的大学生。主要表现在于:
(1)不扎扎实实地钻研理论,打好基础,而是成天浮在表面上。程序员不是不想上进,他们很多人也在读书。但读的大多是一些比较热门的所谓“技术”书,业界炒什么“单词”,他就读什么。但由于理论基础不牢,功底太浅,始终只是一些花拳绣腿而已。例如,我就发现一些程序员和一些大学生,成天在读.NET,J2EE,Ajax之类的书籍,但关于数据库原理、数据结构与算法等基础理论,却一窍不通。有些学生不好好学习学校规定的课程,却很有兴趣地到外面的培训机构去参加培训,似乎感觉这样更实在一些。
(3)程序漏洞百出,敬业精神比较差。晚上泡酒吧、搓麻将、玩游戏,白天工作带身不带脑,把工作只是当作为晚上玩而养好身体的一种手段。边写代码边网上聊天,程序漏洞百出。很少考虑程序问题给用户造成的损失,给公司带来的负面影响。很少去研究自己写的代码,看能否进一步优化,自以为是,认为代码只要通过编译就万事大吉了。
(4)过于频繁的跳槽,没有长期规划。为了三五块工资的增长而频繁跳槽,找工作时只看眼前的工资数量,而不考虑自身的长远发展和职业规划。尽管辞职信中都会写“由于自身发展”,但其实根本就没有认真去考虑过,只是作为一个借口而已。
(5)刚踏入社会,就成天想着房子和车子。由此而抱怨工资太低、待遇太差、老板太小气、房价太高,等等,感觉都是满腹牢骚,一肚子愤懑。很少结合自己的实际能力和水平去衡量自己的“价值”。只想轻松赚钱,不愿意付出,不想承担责任。成天喊工资太低,却从来不去想自己为公司带来了多少效益。
浮躁不是程序员的错
导致程序员浮躁的根源在于整个社会的浮躁,在于IT企业的浮躁。
(1)中国的IT企业绝大多数是作坊式或半作坊式的,招聘人员的要求就是“能做事”,很少有企业想过要真正培养一个程序员,使之成长。这样,企业在招聘过程中,面试时很少涉及到对基础理论的考查,而是看应聘者“明天来上班,能否写好这个代码”。这样,就会在业界传开,“IT企业需要什么什么样的人才”。如今高校扩招,学生就业压力大。为了就业,学生只得适应这个被扭曲的IT环境,学习一些表面性的技能而不是深层次的技术,拣了芝麻丢了西瓜。
(2)IT企业管理和运作不规范。例如,没有一套成形的管理制度,没有一个合理的软件过程。在对待程序员方面,希望“呼之即来,挥之即去”,往往为了一个项目就大量招聘,项目结束后就立即遣散。没有给程序员交纳社会保险,导致程序员心情浮躁,没有安稳感。
(3)很多老程序员一旦有点技术,就想单干。往往因为一个单就成立一个公司,单做完了,公司也就完了。这样,一个晚上就可以冒出数百个公司,第二天早上又倒闭了数百个公司。导致程序员被动地频繁跳槽,被动地浮躁。
(4)同样是由于企业规模太小,基本上以生存为惟一目的。没有研发投入,导致程序员没有进步,在工作中没有成就感,往往感觉很迷茫和无助。
(5)部分企业老板及管理人员信誉极差,招聘的时候承诺得很好,但从来就不会兑现。不停地要求程序员加班,却从来就不发加班工资。只知道“挤奶”,却装作不知道“牛要吃草”。只给员工讲奉献,却从来不给员工讲回报。这种企业如何叫程序员去敬业呢?
(6)IT培训机构不负责任的宣传和误导,导致很多人花高代价往IT行业挤。以为只要IT了,就房子、车子不愁了。工作后才发现并非如此,于是就总觉得自己的待遇太差(培训机构往往会说学员的工资会很高很高!),投入产出比太低。从而浮躁起来。
(7)我们高校的计算机教育确实存在很多弊病。例如,学生扩招,老师却没有增多,实习的机房却没有增多。教科书的内容十分陈旧,等等。诸如此类,问题很多。关键的是,老师的教学严重脱离实践,教授们大多是以学术著称,自身缺乏项目实践。例如,本人曾在某软件学院客座,就发现该院主讲软件工程的教授除做了一些科研型的项目外,就从来没有在企业呆过,从来没有做过一个称得上是“工程”的项目。主讲CMM的教授竟然拿着书问我“CMM在企业中究竟是如何实施的呢?”。
因此,我个人认为,浮躁不是程序员的错,而是我们整个IT环境的错!
[阅读全文(2304) | 回复(21) | 引用通告(1) | 编辑]
--------------------------------------------------------------------------------
上一篇:《软件体系结构》被选为“十一五”国家级教材
下一篇:软件架构的选择与应用
·Re:程序员浮躁,是谁的错? -|acqy发表评论于2006-7-15 17:25:00
的确,很多国内的公司,甚至是知名的大型IT企业(在此就不点名了)在招聘员工的时候都只知道谈奉献:为公司奉献,为中国的软件产业奉献,为祖国的软件事业贡献自己的力量。听起来很伟大,但脱离了实际:为什么别人要来你的公司工作?为了赚钱,为了生存,为了丰富物质生活。你为什么办公司?为什么要你的员工奉献?无非也是赚钱。你不可能为了一些大奉献大道理而损失自己赚钱的时间与机会,人家同样也不可能到你这里每天做义务劳动。我曾经和好友开玩笑说:“说奉献,我宁可去无偿扫马路,这样好歹人家还知道我为人很好,为社会义务劳动,做公益的事情”。
当然,我的这种说法偏激了,但讨论的确实是现在的现实问题。在这样的企业中工作,成天无偿加班到很晚,员工图什么?如果客户每次拿了你的货不给钱,你的感受是什么?光把无偿奉献作为企业文化而大肆宣扬是不明智的,就等于直接告诉别人:来我这里就是赤裸裸的被剥削。你要员工如何安心工作为你创造价值?要员工如何不浮躁?
[个人主页 | 引用 | 返回 | 删除 | 回复]
--------------------------------------------------------------------------------
·Re:程序员浮躁,是谁的错? -|汤汤(游客)发表评论于2006-7-18 9:31:00
几点分析都很中肯。
一般从社会学角度看,一种现象的产生都有它的社会根源,其中的个体或者群体(心理或者行为)都来自于社会环境,尤其是群体,更能说明社会环境的健康与否。
[个人主页 | 引用 | 返回 | 删除 | 回复]
--------------------------------------------------------------------------------
·Re:程序员浮躁,是谁的错? -|hlearning发表评论于2006-7-21 13:16:00
说的好,中国的IT企业就是这样
[个人主页 | 引用 | 返回 | 删除 | 回复]
--------------------------------------------------------------------------------
·Re:程序员浮躁,是谁的错? -|wuqianghong发表评论于2006-7-29 14:30:00
不知道其它学校是不是,我校的计算机系学生有一大部份计算机水平还不如非计算机专业的学生.
[个人主页 | 引用 | 返回 | 删除 | 回复]
--------------------------------------------------------------------------------
·Re:程序员浮躁,是谁的错? -|常常(游客)发表评论于2006-7-31 17:41:00
嘿没办法
[个人主页 | 引用 | 返回 | 删除 | 回复]
--------------------------------------------------------------------------------
·Re:程序员浮躁,是谁的错? -|charchar(游客)发表评论于2006-8-3 9:44:00
社会永远都不会是完美,存在问题是绝对,没有问题是相对。我们需要做的不是去抱怨,而是去改变,需要我们共同的力量去推进我国信息行业的发展。董占球老师做为我国第一台计算机103的设计者之一七十多岁了还来为我们上计算机体系结构的课,深为感动!
[个人主页 | 引用 | 返回 | 删除 | 回复]
--------------------------------------------------------------------------------
·Re:程序员浮躁,是谁的错? -|chixinmumao(游客)发表评论于2006-8-4 20:00:00
现在的程序员本身也有很多的问题.一.现在的开计算机专业的学校太多,已泛滥!二.目前一般本科院校在管理制度松散,导致大学生从大一就开始无所谓一直至大四.一无所学!三.现在一般院校开的课与顺序也不合理.从来没有人来认真研究一下这些东西.
[个人主页 | 引用 | 返回 | 删除 | 回复]
--------------------------------------------------------------------------------
·Re:程序员浮躁,是谁的错? -|不知道(游客)发表评论于2006-8-11 8:41:00
说的什么啊?迷糊
[个人主页 | 引用 | 返回 | 删除 | 回复]
--------------------------------------------------------------------------------
·Re:程序员浮躁,是谁的错? -|ppink(游客)发表评论于2006-11-10 16:15:00
很中肯
我也曾经试图找到原因,可能是因为太年轻的缘故,我老是看到那种会写几行代码就牛X完了的人就冒火,也没有想到是社会也有原因造成他们如此无知
[个人主页 | 引用 | 返回 | 删除 | 回复]
--------------------------------------------------------------------------------
·Re:程序员浮躁,是谁的错? -|蓝天(游客)发表评论于2006-11-26 12:44:00
我也觉得说得很中肯,这是从一定角度来讲是社会造成的 ,我想说要改变那时很难的啊。
[个人主页 | 引用 | 返回 | 删除 | 回复]
--------------------------------------------------------------------------------
·Re:程序员浮躁,是谁的错? -|菜鸟(游客)发表评论于2006-11-27 10:00:00
还是一个菜鸟,看了觉得很可怕呀
学通信的 ,不知道以后可以做软件反面的东西吗?
####################################
1、VC、VB、Delphi …… ,你该学哪个?
具体到编程而言,我要告诉你:任何一种计算机语言,都是计算机科学理论的载体或表现形式。C++很神吗?Java很酷吗?它们差距很远吗?是的。但从理论的层面上讲,它们没有区别,都是“面向对象”理论的一个具体形式而已。
现在的程序员们被发行编译软件(通常我们将其称为“系统软件”)的商家不断推出的产品搞得眼花缭乱,头痛欲裂。不断地跟在新语言后面跑,这条路还没跑到头,那边的“新路”又鸣锣开张了,于是再跟着跑……渐渐地有些人开始感叹:学海无涯、学无止境,或什么“程序员是青春饭,过了三十别想干”……
在此我不得不叹息:中国的教育真是一种“形而上学”的教育。早在高中时代我们就学过“辨证唯物主义”的基本理论:做事情要抓主要矛盾。这一条恐怕谁都知道,却鲜见谁能在实践中把这一理论运用得“炉火纯青”的。把这一理论运用到编程上来讲就是:
理论是主要矛盾,语言是次要矛盾,学会了理论,再具体到学一种语言时,你只不过是在进行某种消遣而已。
现在学VC的普遍看不起学VB的或学Delphi的。但如果一个用Delphi的人,在需要写web程序时,用TCP/IP做了一个构架,嵌入到应用程序中;而另一个用VC的人却只会把一个又一个的组件拖来拉去的做些个“例子程序”的翻版。你说他们两个谁历害?Delphi和VC谁历害?
真应了这样一段话,问:纽约好还是上海好?答:有钱哪儿都好,没钱哪儿都不好。上海的富人并不比纽约的富人少多少的优越感,而纽约的乞丐也不比上海的乞丐多多少幸福感。
现在你还会说学VC的人就一定比学Delphi的人水平高、“钱景”好吗?
2、“浅薄”绝不该是中国程序员的性格特征!!!
想问一句:中国程序员这么多,你们真地把基础理论学好了吗?别用你现有的编程经历告诉我:编程不需要数学,不需要数据结构,不需要编译原理…… ……说话得负责任,您知道吗?我之所以发表这篇文章,就是因为再也看不下去这种在中国编程界漫延的歪理邪说了!邪教害死的是人的个体,你们害死的是中国软件业的未来!如果再让这种理论继续毒害编程新手的思想,中国将在计算机领域失去民族的尊严!!!
请问,操作系统、编译软件、数据库系统…… 这些被称为“系统软件”的东东,中国有几样拿得出手的产品?也许是我孤陋寡闻,据我所知:我们国家一件像样的也没有。
不错,我们是有一些网站的股票在西方上市了,我们是有一些人被国外公司请去做高级职员了,我们也有一些人把西方的官方网站给黑了……但是,我们用的编译工具是谁的产品?我们微机里装得是谁做出的操作系统?我们的程序跑在谁的芯片上?
爱之深,恨之切。我爱的是中国,但我痛恨不是中国,而是在中国编程界普遍流行的“浅薄”和“自以为是”,这是我们民族软件业的一颗毒瘤!
是的,现在编程方面快速入门的书满天飞,让程序员的门槛越来越低。我这个外行就得益于这个“低门槛”,跑了进来。但进来后,我们就不能再这样浅薄下去了——我的兄弟们!
用他国提供的工具做几个网站,写几个应用程序,弄出几个病毒…… 是振兴不了民族软件业的。顺便说一句:我尊敬求伯君,但我不认为金山公司和其系列产品配得上被称为“民族软件业”的大旗,相对这个称号,它差得太远了。
…… ……
写flash软件的人会认为用flash做动画的人比他历害吗?Adobe公司真的认为考取Adobe证书的人是“人才”吗?MSCE、MSCD…… 通过这类考试得到微软徽章的人,在微软眼里是“人才”还是“义务推销员”?持这类证书以及其他一些大软件公司认证的人,你们还在以为自己是“中国软件业的精英”而感叹“怀才不遇”、工资太少吗?
醒醒吧,朋友。别再用编程不需要理论的话来自欺欺人了,别再用自己的浅薄来教导别人像自己一样浅薄了。我想问问那些称数学、数据结构等基础课程对编程没用的人:
请你们搞清一个概念:是这些理论“没用”,还是你们“没用到”;是你们“没用到”,还是你们的水平根本“用不到”;是你们“不需要用”,还是你们根本“不会用”?
举个例子,操作系统中的工作调度,若工作优先权相同,用什么方法进行调度?当然是“先到先做”——这就是数据结构中“队列”的应用。你们说“用不到”,只怕是因为到目前为止还没机会接触这类“高端编程”的挑战吧?这样的话,那就算了,挣你的钱去,但别再来这里误人子弟,吹嘘什么优秀的程序员不需要理论。
是谁说系统软件发展的黄金时代已经过去了?Linux不就是在MS操作系统雄霸多年的情况下一举成名的吗?中国难道就找不到这样一个机会? 不,如果我们的程序员克服了现在的浮燥与急功近利,我们一样可以在“系统软件”这一软件业的“高端”树立自己的品牌!
我很喜欢这句话啊:如果我们的程序员克服了现在的浮燥与急功近利,我们一样可以在“系统软件”这一软件业的“高端”树立自己的品牌!
是啊,为什么我们都在花心思在怀疑自己学的编程语言有没有前境呢?为何不多拿点精力在学精自己所掌握的工具上面呢?
#################################################
一忌:轻易言败,没有自信
没有永不放弃精神的程序员,只是一个有程序员名号的假程序员。一个真正的程序员,知道在程序设计的过程中,可能会遇到不计其数的困难和问题,可能有极多的挫折和失败,而成功只有一次。
就为解决一个问题,我们可能连续十几甚至几十小时的坐在计算机前不停的工作。一个问题解决了,可能又有其它的问题出现。而你要是不能坚持下来,可能从前的一切努力都流失了。轻易言败的人请不要做程序员,你不可能成功。执着是最可贵的。
执着的程序员都是相信自己的人,每时每刻都会鼓励自己,你做的出来,你能解决,你会成功。这样他才能坚持下去。
二忌:浮华不实,自满自大
夸夸奇谈的人不是优秀的程序员。整个程序设计的过程就是一个研究学习,应用,再研究学习,再应用的过程。一名优秀的程序员决不会认为自己足够好了,不需要再提高了。自满自足的人不会是好程序员,会很快落后以致落伍。所以越是优秀的程序员越是感觉自己懂得少,不会在人前故意卖弄,这并不是故作谦虚,而是实实在在的感受,亲自体会才能明白。
浮华的程序员会不懂装懂,不停的强调语言的优劣,平台的好坏。追求所谓最新最时尚的技术,停留在表面问题上。或假做深沉,用不适合的方式做不适合的事情。就像孔已己一样,以为知道"茴"字有四种写法就是学问。最后是简单的作不好,困难的也作不好。
三忌:死气沉沉,不求甚解
优秀的程序员是充满激情和活力的程序员。求知欲和创造欲是原动力。有求知欲你才能不停的学习,有创造欲你才能不停的超越自己。死气沉沉的程序员已经对程序设计失去了兴趣,很快就会主动或被迫离开。
创造不是指你要发明什么别人不知道的技术或方法,而是说不能仅仅知道怎么做,还要知道为什么这样做。之后你才能创造,其实程序设计的整个过程就是创造的过程。
四忌:强调客观,忽略自身
很多程序员都是在失败的时候强调客观因素,而优秀的程序员的程序员都是先反省自己。要明白自己缺陷,再努力去学习。没有人事事都做的成功,也没有人生来就什么会做。所以失败了,多想想自身的原因,这样你才会不停的进步,而不是留在原地抱怨。
==================== 6 =======================
第一阶段
此阶段主要是能熟练地使用某种语言。这就相当于练武中的套路和架式这些表面的东西。
第二阶段
此阶段能精通基于某种平台的接口(例如我们现在常用的Win 32的API函数)以及所对应语言的自身的库函数。到达这个阶段后,也就相当于可以进行真实散打对练了,可以真正地在实践中做些应用。
第三阶段
此阶段能深入地了解某个平台系统的底层,已经具有了初级的内功的能力,也就是“手中有剑,心中无剑”。
第四阶级
此阶段能直接在平台上进行比较深层次的开发。基本上,能达到这个层次就可以说是进入了高层次。这时进入了高级内功的修炼。比如能进行VxD或操作系统的内核的修改。
这时已经不再有语言的束缚,语言只是一种工具,即使要用自己不会的语言进行开发,也只是简单地熟悉一下,就手到擒来,完全不像是第一阶段的时候学习语言的那种情况。一般来说,从第三阶段过渡到第四阶段是比较困难的。为什么会难呢?这就是因为很多人的思想变不过来。
第五阶级
此阶段就已经不再局限于简单的技术上的问题了,而是能从全局上把握和设计一个比较大的系统体系结构,从内核到外层界面。可以说是“手中无剑,心中有剑”。到了这个阶段以后,能对市面上的任何软件进行剖析,并能按自己的要求进行设计,就算是MS Word这样的大型软件,只要有充足的时间,也一定会设计出来。
第六阶级
此阶段也是最高的境界,达到“无招胜有招”。这时候,任何问题就纯粹变成了一个思路的问题,不是用什么代码就能表示的。也就是“手中无剑,心中也无剑”。
此时,对于练功的人来说,他已不用再去学什么少林拳,只是在旁看一下少林拳的对战,就能把此拳拿来就用。这就是真正的大师级的人物。这时,Win 32或Linux在你眼里是没有什么差别的。
每一个阶段再向上发展时都要按一定的方法。第一、第二个阶段通过自学就可以完成,只要多用心去研究,耐心地去学习。
要想从第二个阶段过渡到第三个阶段,就要有一个好的学习环境。例如有一个高手带领或公司里有一个好的练手环境。经过二、三年的积累就能达到第三个阶段。但是,有些人到达第三个阶段后,常常就很难有境界上的突破了。他们这时会产生一种观念,认为软件无非如此,认为自己已无所不能。其实,这时如果遇到大的或难些的软件,他们往往还是无从下手。
现在我们国家大部分程序员都是在第二、三级之间。他们大多都是通过自学成才的,不过这样的程序员一般在软件公司也能独当一面,完成一些软件的模块。
但是,也还有一大堆处在第一阶段的程序员,他们一般就能玩玩VB,做程序时,去找一堆控件集成一个软件。
==================== 8 =============================
程序员以后的道路是怎么样的,如果我们那天不错程序员了又能做什么呢!???
[希赛推荐:欢迎下载《希赛顾问》电子杂志]
可乐泡咖啡 2006-11-23 22:07:17 [个人资料] [Blog][回复] [引用] 第1楼 得分:0
程序员是一种技术工作,在IT的发展中有相当重要的地位,从底层硬件通讯协议的建立, 到数据传输层的处理,到操作系统的建设,到数据库平台的建设,一直到应用层上各种数 据营销平台的搭建,程序员在里面都扮演着举足轻重的角色并为IT事业的发展做出了巨大 的贡献。
中国有很多精于编码的人,但是中国软件行业,尤其是网络应用开发方面误区很大,很难形成有规模的软件开发力量和产品能力,不但比美国差距甚远,和印度相比也是颇有不如。这些问题不是在于中国程序员的智商和工作努力状况,也不是在于国家和民间对开发的投入程度,而是很大程度上,有一些对技术,对程序开发,对项目设计方面的思想误区,这些误区,导致了软件行业的产品化能力不足,缺乏规模化和大型复用系统研发能力,可以说,改变认识误区,是解决软件行业小作坊模式和个体英雄模式所带来的局限性 的重要工作。
中国有很多小朋友,他们18,9岁或21,2岁,通过自学也写了不少代码,他们有的代码写的很漂亮,一些技术细节相当出众,也很有钻研精神,但是他们被一些错误的认识和观点左右,缺乏对系统,对程序的整体理解能力,这些人,一个网上的朋友说得很好,他们实际 上只是一些Coding fans,压根没有资格称为程序员,但是据我所知,不少小网络公司的 CTO就是这样的coding fans,拿着吓人的工资,做着吓人的项目,项目的结局通常也很吓 人。
程序员基本素质:
作一个真正合格的程序员,或者说就是可以真正合格完成一些代码工作的程序员,应该具 有的素质。
1:团队精神和协作能力
把它作为基本素质,并不是不重要,恰恰相反,这是程序员应该具备的最基本的,也是最重要的安身立命之本。把高水平程序员说成独行侠的都是在呓语,任何个人的力量都是有限的,即便如linus这样的天才,也需要通过组成强大的团队来创造奇迹,那些遍布全球的为linux写核心的高手们,没有协作精神是不可想象的。独行侠可以作一些赚钱的小软件发点小财,但是一旦进入一些大系统的研发团队,进入商业化和产品化的开发任务,缺 乏这种素质的人就完全不合格了。
2:文档习惯
说高水平程序员从来不写文档的肯定是乳臭未干的毛孩子,良好的文档是正规研发流程中 非常重要的环节,作为代码程序员,30%的工作时间写技术文档是很正常的,而作为高级 程序员和系统分析员,这个比例还要高很多。
缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇 到极大的麻烦。
3:规范化,标准化的代码编写习惯
作为一些外国知名软件公司的规矩,代码的变量命名,代码内注释格式,甚至嵌套中行缩 进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和 纠错,也有助于不同技术人员之间的协作。
有些coding fans叫嚣高水平程序员写的代码旁人从来看不懂,这种叫嚣只能证明他们自 己压根不配自称程序员。代码具有良好的可读性,是程序员基本的素质需求。
再看看整个linux的搭建,没有规范化和标准化的代码习惯,全球的研发协作是绝对不可 想象的。
4:需求理解能力
程序员需要理解一个模块的需求,很多小朋友写程序往往只关注一个功能需求,他们把性能指标全部归结到硬件,操作系统和开发环境上,而忽视了本身代码的性能考虑,有人曾经放言说写一个广告交换程序很简单,这种人从来不知道在百万甚至千万数量级的访问情况下的性能指标是如何实现的,对于这样的程序员,你给他深蓝那套系统,他也做不出太极链的并访能力。性能需求指标中,稳定性,并访支撑能力以及安全性都很重要,作为程序员需要评估该模块在系统运营中所处的环境,将要受到的负荷压力以及各种潜在的危险和恶意攻击的可能性。就这一点,一个成熟的程序员至少需要2到3年的项目研发和跟踪经 验才有可能有心得。
5:复用性,模块化思维能力
经常可以听到一些程序员有这样的抱怨,写了几年程序,变成了熟练工,每天都是重复写 一些没有任何新意的代码,这其实是中国软件人才最大浪费的地方,一些重复性工作变成 了熟练程序员的主要工作,而这些,其实是完全可以避免的。
复用性设计,模块化思维就是要程序员在完成任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作,如果一个软件研发单位和工作组能够在每一次研发过程中都考虑到这些问题,那么程序员就不会在重复性的工作中耽误太多时间,就会有更多时间和精力投 入到创新的代码工作中去。
一些好的程序模块代码,即便是70年代写成的,拿到现在放到一些系统里面作为功能模块 都能适合的很好,而现在我看到的是,很多小公司软件一升级或改进就动辄全部代码重 写,大部分重复性工作无谓的浪费了时间和精力。
程序员应具备的素质中
6:测试习惯
作为一些商业化正规化的开发而言,专职的测试工程师是不可少的,但是并不是说有了专职的测试工程师程序员就可以不进行自测;软件研发作为一项工程而言,一个很重要的特点就是问题发现的越早,解决的代价就越低,程序员在每段代码,每个子模块完成后进行认真的测试,就可以尽量将一些潜在的问题最早的发现和解决,这样对整体系统建设的效 率和可靠性就有了最大的保证。
测试工作实际上需要考虑两方面,一方面是正常调用的测试,也就是看程序是否能在正常调用下完成基本功能,这是最基本的测试职责,可惜在很多公司这成了唯一的测试任务,实际上还差的远那;第二方面就是异常调用的测试,比如高压力负荷下的稳定性测试,用户潜在的异常输入情况下的测试,整体系统局部故障情况下该模块受影响状况的测试,频发的异常请求阻塞资源时的模块稳定测试等等。当然并不是程序员要对自己的每段代码都需要进行这种完整测试,但是程序员必须清醒认识自己的代码任务在整体项目中的地位和各种性能需求,有针对性的进行相关测试并尽早发现和解决问题,当然这需要上面提到的 需求理解能力。
7:学习和总结的能力
程序员是人才很容易被淘汰,很容易落伍的职业,因为一种技术可能仅仅在三两年内具有 领先性,程序员如果想安身立命,就必须不断跟进新的技术,学习新的技能。
善于学习,对于任何职业而言,都是前进所必需的动力,对于程序员,这种要求就更加高 了。
但是学习也要找对目标,一些小coding fans们,他们也津津乐道于他们的学习能力,一会学会了asp,一会儿学会了php,一会儿学会了jsp,他们把这个作为炫耀的资本,盲目的追逐一些肤浅的,表面的东西和名词,做网络程序不懂通讯传输协议,做应用程序不懂中断向量处理,这样的技术人员,不管掌握了多少所谓的新语言,永远不会有质的提 高。
善于总结,也是学习能力的一种体现,每次完成一个研发任务,完成一段代码,都应当有 目的的跟踪该程序的应用状况和用户反馈,随时总结,找到自己的不足,这样逐步提高, 一个程序员才可能成长起来。
一个不具备成长性的程序员,即便眼前看是个高手,建议也不要选用,因为他落伍的时候 马上就到了。
具备以上全部素质的人,应当说是够格的程序员了,请注意以上的各种素质都不是由IQ决 定的,也不是大学某些课本里可以学习到的,需要的仅仅是程序员对自己工作的认识,是 一种意识上的问题。
那么作为高级程序员,以至于系统分析员,也就是对于一个程序项目的设计者而言,除了 应该具备上述全部素质之外,还需要具备以下素质:
第一,需求分析能力
对于程序员而言,理解需求就可以完成合格的代码,但是对于研发项目的组织和管理者, 他们不但要理解客户需求,更多时候还要自行制定一些需求,为什么这么说呢?
一般而言,进行研发任务,也许是客户提出需求,也许是市场和营销部门提出的需求,这时候对于研发部门,他们看到的不是一个完整的需求,通常而言,该需求仅仅是一些功能上的要求,或者更正规些,可能获得一个完整的用户视图;但是这都不够,因为客户由于非技术因素多一些,他们可能很难提出完整和清晰,或者说专业性的性能需求,但是对于项目组织者和规划者,他必须能够清醒认识到这些需求的存在并在完成需求分析报告的时候适当的提出,同时要完整和清晰的体现在设计说明书里面,以便于程序员编码时不会失 去这些准则。
程序设计者必须正确理解用户需求所处的环境,并针对性做出需求的分析,举例而言,同样一个软件通过ASP租用方式发布和通过License方式发布,性能需求可能就是有区别的,前者强调的是更好的支撑能力和稳定性,而后者则可能更强调在各种平台下的普适性和安 装使用的简捷性。
第二,项目设计方法和流程处理能力
程序设计者必须能够掌握不少于两到三种的项目设计方法(比如自顶至下的设计方法,比 如快速原型法等等),并能够根据项目需求和资源搭配来选择合适的设计方法进行项目的 整体设计。
设计方法上选择不当,就会耽误研发周期,浪费研发资源,甚至影响研发效果。
一个程序设计者还需要把很多功夫用在流程图的设计和处理上,他需要做数据流图以确立 数据词典;他需要加工逻辑流图以形成整体的系统处理流程。
一个流程有问题的系统,就算代码多漂亮,每个模块多精致,也不会成为一个好的系统。 当然,做好流程分析并选择好项目设计方法,都需要在需求分析能力上具有足够的把 握。
第三,复用设计和模块化分解能力
这个似乎又是老调重谈,前面基本素质上不是已经说明了这个问题吗?
作为一个从事模块任务的程序员,他需要对他所面对的特定功能模块的复用性进行考虑,而作为一个系统分析人员,他要面对的问题复杂的多,需要对整体系统按照一种模块化的分析能力分解为很多可复用的功能模块和函数,并针对每一模块形成一个独立的设计需求。举个例子,好比是汽车生产,最早每辆汽车都是独立安装的,每个部件都是量身定做的,但是后来不一样了,机器化大生产了,一个汽车厂开始通过流水线来生产汽车,独立部件开始具有一定的复用性,在后来标准化成为大趋势,不同型号,品牌甚至不同厂商的汽车部件也可以进行方便的换装和升级,这时候,汽车生产的效率达到最大化。软件工程也是同样的道理,一个成熟的软件行业,在一些相关项目和系统中,不同的部件是可以随意换装的,比如微软的许多桌面软件,在很多操作模块(如打开文件,保存文件等等)都是复用的同一套功能模块,而这些接口又通过一些类库提供给了桌面应用程序开发者方便 挂接,这就是复用化的模块设计明显的一个佐证。
将一个大型的,错综复杂的应用系统分解成一些相对独立的,具有高度复用性的,并能仅 仅依靠几个参数完成数据联系的模块组合,是作为高级程序员和系统分析员一项最重要的 工作,合适的项目设计方法,清晰的流程图,是实现这一目标的重要保证。
第四,整体项目评估能力
作为系统设计人员,必须能够从全局出发,对项目又整体的清醒认识,比如公司的资源配置是否合理和到位,比如工程进度安排是否能最大化体现效率又不至于无法按期完成。评估项目整体和各个模块的工作量,评估项目所需的资源,评估项目可能遇到的困难,都需要大量的经验积累,换言之,这是一种不断总结的累计才能达到的境界。在西方一些软件系统设计的带头人都是很年长的,比如4,50岁,甚至更老,他们在编码方面已经远远不如年轻人那样活络,但是就项目评估而言,他们几十年的经验积累就是最重要和宝贵的财富。中国缺这么一代程序员,主要还不是缺那种年纪的程序员,而是那种年纪的程序员基本上都是研究单位作出来的,都不是从专业的产品化软件研发作出来的,他们没有能积累 那种产品化研发的经验,这也是没有办法的事情。
程序员应具备的素质下
第五,团队组织管理能力
完成一个项目工程,需要团队的齐心协力,作为项目设计者或研发的主管人,就应当有能 力最大化发挥团队的整体力量,技术管理由于其专业性质,不大同于一般的人事管理,因 为这里面设计了一些技术性的指标和因素。
首先是工作的量化,没有量化就很难做到合适的绩效考核,而程序量化又不是简单的代码 行数可以计算的,因此要求技术管理人员需要能真正评估一个模块的复杂性和工作量。
其次是对团队协作模式的调整,一般而言,程序开发的协作通常分为小组进行,小组有主 程序员方式的,也有民主方式的,根据程序员之间的能力水平差距,以及根据项目研发的 需求,选择合适的组队方式,并能将责权和成员的工作任务紧密结合,这样才能最大发挥 组队的效率。
一个代码水平高的人,未必能成为一个合格的项目研发主管,这方面的能力欠缺往往是容 易被忽视的。
综上可以看到,作为一个主管研发的负责人,一个项目设计者,所需要具备的素质和能力并不是程序代码编写的能力,当然一般情况下,一个程序员通过不断的总结提高达到了这种素质的时候,他所具有的代码编写能力也已经相当不简单了,但是请注意这里面的因果关系,一个高水平的项目设计者通常已经是代码编写相当优秀的人了,但是并不是一个代码相当优秀的程序员就可以胜任项目设计的工作,这里面存在的也不是智商和课本的问题,还是在于一个程序员在积累经验,逐步提升的时候没有意识到应当思考哪方面的东西,没有有意识的就项目的组织和复用设计进行揣摩,没有经常性的文档习惯和总结习 惯,不改变这些,我们的合格的项目设计者还是非常欠缺。
另外,为防止有无聊的人和我较真,补充一点,本文针对目标是作商业化的软件项目和工程,那些科研机构的编程高手,比如算法高手,比如图象处理高手,他们的工作是研究课题而非直接完成商业软件(当然最终间接成为商业产品,比如微软研究院在作的研究课题),因此他们强调的素质可能是另外的东西,这些人(专家),并不能说是程序员,不 能用程序员的标准去衡量。
最后补充一点东西,一个软件项目研发的设计流程是怎样的呢?以通常标准的设计方法为 例,(不过笔者喜欢快速原型法)。
第一个步骤是市场调研,技术和市场要结合才能体现最大价值。
第二个步骤是需求分析,这个阶段需要出三样东西,用户视图,数据词典和用户操作手 册。
用户视图是该软件用户(包括终端用户和管理用户)所能看到的页面样式,这里面包含了 很多操作方面的流程和条件。
数据词典是指明数据逻辑关系并加以整理的东东,完成了数据词典,数据库的设计就完成 了一半多。
用户操作手册是指明了操作流程的说明书。
请注意,用户操作流程和用户视图是由需求决定的,因此应该在软件设计之前完成,完成 这些,就为程序研发提供了约束和准绳,很遗憾太多公司都不是这样做的,因果颠倒,顺 序不分,开发工作和实际需求往往因此产生隔阂脱节的现象。
需求分析,除了以上工作,笔者以为作为项目设计者应当完整的做出项目的性能需求说明 书,因为往往性能需求只有懂技术的人才可能理解,这就需要技术专家和需求方(客户或 公司市场部门)能够有真正的沟通和了解。
第三个步骤是概要设计,将系统功能模块初步划分,并给出合理的研发流程和资源要求。作为快速原型设计方法,完成概要设计就可以进入编码阶段了,通常采用这种方法是因为涉及的研发任务属于
我的经历到这里就告一段落了,五年里跳了五次槽,不知道和大家比算不算多J,没有什么太多起伏,但我想很多朋友可能会和我有类似的经历,不知道能不能引起你们的共鸣。我想对我上面所说的话给一个总结:
1.如果你觉得自己应该追求什么,不管遇到什么困难千万不要放弃,一定要坚持下去。
2.不要因为自己年轻就找理由挥霍时间,少玩一点SC、CS、魔兽3、传奇、魔力或者 …….,多看点书,多练练题。
3.如果你还是在校的学生,英语很差,专业课也很差。没关系,想怎么学计算机就怎么学计算机吧。其它地只要能混到毕业证就行了。除非你对自己的未来没有信心。(当然,如果你的理想不仅仅是要做一个程序员,那你别丢掉英语。)
4.如果你不是科班出身,想要转行而不知该怎么开始的话,建议你先看两类书:(1)计算机原理;(2)数据结构和算法。(看数据结构之前先看C语言)。
5.什么时候努力都不晚,关键是你明白要努力了,大器晚成总比一事无成要好的多。
6.Java、.net、C++、PB、VB、Delphi、汇编到底应该学哪个?我的经验,哪个最简单就先学哪个、公司用哪个你就学哪个、哪个和你有缘(比如刚好你认识一个愿意帮助你的Delphi高手)你就学哪个,如果你都学,或者三天两头的换,我可以告诉你结果肯定是什么都不会,不要心浮气燥,他们都只是工具,学精一门其它的就相通了,重要的是掌握编程的思想。如果你问我面向对象(好像现在已经是面向需求了)、UML、 WebLogic、WebService、软件工程、XML…….应该怎么学呀,对不起,这些我也确实不是都会,但请相信,你先实实在在的写上十万行以上的代码以后,那些东西你自然就慢慢会了。
7.不要以为程序员的工资都很高,程序员之间的水平差异也大。公司衡量一个人的待遇标准是他能给公司带来多大的效益。如果你体现了自己的价值,公司会主动给你加薪的,当然你也可以自己主动提,但一定要在你表现出了自己的价值之后。
8.轻易不要跳槽,如果非要跳,也要保持工作经验上的延续,而不是从新开始,不然就会象我一样走很多弯路。
9.如果你以为程序员都是熬夜熬出来的,那么你错了,因为它的代价就是缩短你的青春!大家不要象我一样,真的,熬夜一点也不好!记住老毛的话:如有恒,何须三更起,半夜眠;最怕莫,三天打鱼两天晒网,竹篮打水一场空!
10.这一点是我觉得最精华的一点:“君子性非异也,善假于物也。”这句话的本意是一个水平很高的人本身并不一定很高明,关键是他善于利用别人的高明!我在这里做个借鉴,就是要充分利用自己身边的资源,不放过任何一个可以提高自己的机会。大家不要误会,这里的假于物可不是指抄袭别人的源代码,而是指通过学习别人的源代码把他的思想扩展到自己的思想里去。
注:上面的十大“精华”纯属我个人的“谬论”,您自己看着消化,有用的收下,没用的请拖入“回收站”。如果你觉得这些总结不过是一些浮华之词,那请你先问问自己: “是不是在行动上都真正做到了。”
这就是我,一个不算优秀,不算勤奋;玩能玩通宵,学也学能学通宵;对梦想的追求很执着;到了30才开始真正写程序;一个很平凡但又不甘于平凡的人……我的经历相信很多朋友都有过的,我现在也不能算是一个成功人士,但我相信我的经历却是值得大家借鉴的,因为我终究代表了一类人。
最后我还想说一点:现在很多朋友都抱怨中国的软件业环境太差,前途渺茫。确实是这样,我有同感。不过我想软件业不过是千万个行业中的一种,每一个行业总是会有起落的,中国的软件业环境差有她的历史原因,我们不要总是简单地和印度相比。抱怨没有意义,已经这样了,抱怨不能使她变好,希望我们每一个人多贡献一份自己的力量,总有一天她会变的比印度还好,甚至比美国还好。
最后:希望所有的程序员和拥有成为程序员梦想的朋友们在新的一年里心想事成,万事如意。请相信我:明天不一定更美好,但美好的一天一定会来!
###################################################
雷先生是一家开发网络软件的公司的程序员,在这家公司任职已有3年之久。因为能力出色,他颇得老总重视,也是公司的核心开发人员。但就在他30岁之际,老总决定不再同他续签工作合同。公司开发软件的平台已经从PB(power build)转向了.net,而雷先生是一位PB高手,对.net的知识却不甚了解。眼见他再无利用价值,被辞退也在意料之中。
在中关村,像他这样的编程人员不在少数,他们或多或少都面临着这样的难题——30岁,我该如何选择?
他的同事这样形容他的离开:默默地收拾东西,尽量不惊动任何人,慢慢地走出去,走出让他流了3年汗水的公司。
无独有偶。一年前,刚刚年满30岁的孔先生也面临了这个问题。公司是做项目的,每个项目做完,代码重用的机率很低,而每个项目几乎都是在赶工作,没黑没白地干,因此,当年龄偏大的孔先生忙完手边的项目时,老总把他叫了去,请他离开公司。孔先生回头看了看开发部,那里新来了一批年轻的新手,他们朝气蓬勃、跃跃欲试。在领了3个月补偿工资之后,孔先生只能黯然离开。
孔先生在3个月后找到了一份新工作,继续做程序员,而雷先生则不知去向。雷先生前不久才贷款买了房,准备长留中关村。
尽早寻出路
在中小型软件企业打工,尤其是在创业型企业打工,企业不愿意也没有能力养一些没有价值的员工。当程序员的价值被“挖空”时,企业便会无情地抛弃他。周先生1999年毕业于某名牌大学自动化系,刚好赶上网络热潮,他硬是自学了网络知识,进了一家在纳斯达克上市的网络公司做程序员。网络热潮中的年轻人热情也高,周先生干得拼命,天天加班,抓紧时间赶项目。“我几乎天天都是晚上10点钟以后下班,第二天一早就又按时来上班。”他说。
但好景不长,因为网络公司人员变动频繁,公司内高层领导走马灯似地更换,手下的“兵”也是换了一拨又一拨。因为周先生是技术骨干,尚能保住不被裁员,但在这种环境下,周先生感觉到了无形的压力。公司领导换到第五拨时,周先生感觉再呆下去只能是陪葬品,于是选择了离开。
周先生接着到一家开发ERP软件的公司从事开发工作。因为是针对网络的软件,所用的技术更新速度相当快,差不多一年一换。ASP、PHP、J2EE、.net……这些平台相互之间的关联又不是很紧密。几经折腾,公司业绩没见好转,周先生的加班可没少过。软件公司加班都是“义务”,公司充其量会提供一份盒饭。周先生感觉,再这样熬下去不是办法。“不知道哪天我累了,赶不上新技术的发展,做技术的就怕这个,那时候,我就玩完了。”
这一年,周先生25岁,公司倒闭,周先生成了“无业游民”。赶上网络业冷淡,周先生的技术经验又都是基于网络软件,因此再找一份像样的程序员工作并不容易,周先生也害怕了做程序员时玩命般的生活方式。“除了写软件,没有时间看书、读报,甚至没有兴趣进行正常的生活用品采购,更重要的是没有机会认识女孩子。”周先生不好意思地笑笑,“我决定放弃再找程序员工作,开始闭关思考。”
接下来,周先生花了半年多的时间反省自己,总之,网络开发的工作是不能再做了,程序员的活儿也苦,现在年轻还顶得住,等到顶不住的时候,想转行也难有机会了。于是,他花了3个月时间啃与网络相关的网管专业。因为网管所涉及的知识更新相对来说慢一些,加班工作也少,比较稳定。3个月后,周先生考取了思科公司的CCNA认证。然后凭着这张证书,他如愿以偿地找到了一个网管职位。虽然收入比起程序员要少一些,但至少比较稳定,也不用离开他喜欢的网络。
现在,周先生一般选择业余时间编一些软件。“纯粹是个人爱好,我是不愿意再当程序员了。”
创业的黄金时代
张先生今年30岁,刚好处于程序员的“坎”上。在这之前,物理专业出身的他已经做了5年程序员,换过3家公司。
“程序员工作,只要喜欢,就不会觉得苦吧。”张先生说,“我没有别的爱好,就喜欢编程,所以并不觉得这个工作枯燥,如果不让我编程,我反而浑身不自在。”
但张先生也感受到了程序员工作的辛苦。“平时工作,我都会忘了时间,经常一干就不知道到几点了,我现在的公司管理也比较开放,只要项目能完成就行。我经常是一抬头才发现天亮了。”张先生有些担忧地说,“我害怕了,这样下去,我会垮掉。于是就抽时间写了个小程序,每天晚上8点会定时响铃提醒我,这样我就知道该下班休息了。”
对于自己的将来,张先生早有打算,“我马上就要辞职了,在这个‘五一’之前。”张先生表示他准备继续编程。“我打算写共享软件,现在我已经有很多想法,可以自己实现它,然后挂在网上出卖。”
张先生已经和几位志同道和的哥们开办了一家工作室,利用业余时间编写一些小软件免费提供给用户使用。“我们对其中一款实行收费,效果还不错,没想到国内有这么多愿意为正版软件付钱的用户。”张先生欣喜地说。在他的计划中,如果效果好,编写出来的软件挣到了钱,就可以再投资成立公司,扩张人马、正式创业。
经验永不倒
戴先生今年31岁,是电信软件行业的资深开发人员,多年的程序员经历,便他迷上了程序员工作。对于程序员吃青春饭的问题,戴先生承认身边确实没有比自己年龄更大的同事了,但这并不一定说明程序员就不能做长久。“在国外,四五十岁的程序员都有,在国内应该也可以。”
戴先生多年来丰富的工作经验,使他成为被各公司争相挖角的焦点,他的薪水自然也处于高位。“我31岁,并没有感觉到精力不够,工作都能按时完成,并且经验积累多了,老程序员比刚入行的新手强得多。”
软件行业的技术更新虽然很快,但技术的相关性比较强,有经验的程序员学习新技术也很容易。戴先生已经开始从事系统分析员的工作,目前,他已经不用再编写大量软件代码。因此,如何管理项目进程、协调软件项目的开发流程这些需要丰富经验的工作,对他来说得心应手。戴先生认为,目前国内不少软件公司基础不好,又急功近利,讲究个人英雄主义,而软件是一项大产业,需要多人协同工作,这样才能做出优秀的产品。也正因为个人英雄主义的存在,一些软件公司就会选择对程序员竭泽而渔的做法,在短时期内迅速耗干了员工的精力。这样做,不但对员工不利,企业也无法做出优秀的产品。
而对于程序员自身,戴先生认为,一方面要抓紧时间充电,更新知识;另一方面,则要注意积累经验,向更高的目标发展。虽然随着年龄的增长,精力跟不上,但丰富的开发经验可以弥补这一缺点。此消彼长,只要有能力,年龄并不是问题。
出处:中关村在线
=========================== 2 =================================
事件回放:上海一36岁软件工程师因无力供楼跳楼身亡
2006年11月5日,上海一名36岁的软件工程师跳楼身亡。该工程师就职于一家日本软件公司,月薪一万,去年夏天该工程师为了结婚,贷款80万买入一套108平米的婚房,12000元每平米,现房。去年10月1日他与自己刚认识半年的恋人——24岁的漂亮售货员结婚了。婚后为了让自己年轻貌美的媳妇过上更加幸福的日子,为了每月按时还银行7000多的贷款,他每天都更加努力加班加点地工作。
天有不测风云,由于这家日本公司业绩下滑,公司做出了裁员三分之一的决定。虽然他工作积极,技术也不错,但由于一直只是一名技术人员,加上年龄过大,还是无情的被公司于今年7月份辞退。屋漏又逢连夜雨,由于他性格木呐,年龄已经超过35岁,连续3个月也没有找到一个能月薪一万的工作,最后连8000元/月的工资,也没有公司愿意聘用他。还贷的压力和失业的迷茫让他夜不能寐,茶饭不思。从事售货员的妻子当时也是爱上了他的房子和不错的工作,自己工资也不多,看到他长时间找不到工作,不仅没有安慰他、鼓励他,反而整天唠叨、数落甚至谩骂他,还一直喊闹着要离婚。他当时也想过把房子卖掉,众所周知,上海前几年的房价已经出现了大量泡沫,他当时买入时的房价几乎是最高点,在国家的调控下,房价逐渐回调朝合理的价位回归,现在的房价只值9000元每平左右,让他心理极度懊恼。
在失业、婚变、还贷的多种压力下,加上平时不会自我调节以致于精神恍惚的他终于承受不了这突如其来的一切,于2006年11月5日深夜从自家的阳台上跳了下去...
=========================== 3 =================================
马斯洛(A.Maslow)是人本主义心理学的代表人物,他首创了需要层次理论。该理论把人的需要分为五个层次,分别是生理上的需要、安全的需要、社交的需要、尊重的需要和自我实现的需要。
生理上的需要是人们最原始、最基本的需要,如吃饭、穿衣、住宅、医疗等等。如果得不到满足,则可能有生命危险。这就是说,它是最强烈的不可避免的最底层需要,也是推动人们行动的强大动力。显然,这种生理需要具有自我和种族保护的意义,以饥渴为主,是人类个体为了生存而必不可少的需要。当一个人为生理需要所控制时,那么其他一切需要都会被推到幕后。
安全的需要要求劳动安全、职业安全、生活稳定、希望免于灾难、希望未来有保障等,具体表现在:
(1)物质上的:如操作安全、劳动保护和保健待遇等。
(2)经济上的:如失业、意外事故、养老等。
(3)心理上的:希望解除严酷监督的威胁、希望免受不公正待遇,工作有应付能力和信心。
安全需要比生理需要较高一级,当生理需要得到满足以后就要保障这种需要。每一个在现实中生活的人,都会产生安全感的欲望、自由的欲望、防御的实力的欲望。
社交的需要(归属与爱的需要)是指个人渴望得到家庭、团体、朋友、同事的关怀、爱护、理解,是对友情、信任、温暖、爱情的需要。社交的需要比生理和安全需要更细微、更难捉摸。它包括:
(1)社交欲。希望和同事保持友谊与忠诚的伙伴关系,希望得到互爱等。
(2)归属感。希望有所归属,成为团体的一员,在个人有困难时能互相帮助,希望有熟识的友人能倾吐心里话、说说意见,甚至发发牢骚。
(3)爱。爱不单是指两性间的爱情,而是广义的,体现在互相信任、深深理解和相互给予上,包括给予和接受爱。
社交的需要与个人性格、经历、生活区域、民族、生活习惯、宗教信仰等都有关系,这种需要是难以察悟,无法度量的。
尊重的需要可分为自尊、他尊和权力欲三类,包括自我尊重、自我评价以及尊重别人。尊重的需要可以划分:
(1)渴望实力、成就、适应性和面向世界的自信心、以及渴望独立与自由。
(2)渴望名誉与声望。声望为来自别人的尊重、受人赏识、注意或欣赏。
满足自我尊重的需要导致自信、价值与能力体验、力量及适应性增强等多方面的感觉,而阻挠这些需要将产生自卑感、虚弱感和无能感。基于这种需要,愿意把工作做得更好,希望受到别人重视,借以自我炫耀,指望有成长的机会、有出头的可能。显然,尊重的需要很少能够得到完全的满足,但基本上的满足就可产生推动力。这种需要一旦成为推动力,就将会令人具有持久的干劲。
自我实现的需要是最高等级的需要。满足这种需要就要求完成与自己能力相称的工作,最充分地发挥自己的潜在能力,成为所期望的人物。这是一种创造的需要。有自我实现需要的人,似乎在竭尽所能,使自己趋于完美。自我实现意味着充分地、活跃地、忘我地、集中全力全神贯注地体验生活。成就感与成长欲不同,成就感追求一定的理想,往往废寝忘食地工作,把工作当是一种创作活动,希望为人们解决重大课题,从而完全实现自己的抱负。
大学刚毕业1~3年的学生的需求层次处于理论的最底层,即追求生理上的需要。这时的表现大都十分盲目,找不到人生的定位,工作只是“混口饭吃”的工具,一旦发现有个能够比现在多挣个三五块的工作,就会立即“扑”过去,往往考虑的只是温饱问题而很少顾及职业规划和个人发展空间。当企业给安排社会保险时,这些人就会说:“呵呵,领养老金,那太遥远了,还不如把钱直接打到我的工资卡上”。或许,这就是业界一直在说的“浮躁”,浮躁的根本原因在于生理需要未得到满足。人是如此,企业也不例外。
在IT界摸爬了3~5年之后,基本上到了快“奔三”的时候,于是,逐渐会考虑安全的需要。找工作时首要的条件就是需要“三保”之类的劳动保障,其次再是具体的工资待遇。在这个时候,就相当于人生的中学阶段,开始定性、定型。在这个阶段,容易出现两极分化:
(1)习惯了为三五块而工作的模式,继续频繁换工作,而工作时只是“卖身不卖心”。这样,就继续当代码工人(程序员)、搬运工人(硬件销售)或清洁工人(维护和支持)。
(2)在生理和安全需要得到基本保障的情况下,更渴望个人的发展和能力的体现。工作认真努力,不断学习,在给企业带来效益的同时,也给自己带来了发展的机会。这样,就不经意地走上了设计师、架构师、部门主管等位置,逐步向金字塔顶迈进。
工作了5~8年,那些工人级的人士就会成天在想、在讨论“30岁的程序员应该怎么办”、“30岁的程序员的出路”等一揽子问题。因为他们懒于学习,没有进步。从技术上来说,即将被行业淘汰和抛弃。从体力上来说,相对其他人员,他们已经年老体衰。这些人也会觉得很累,因为白天要上班,晚上要玩游戏,泡酒吧。
同样是工作了5~8年,那些已经处于企业中层的人士逐渐会出现第三和第四个方面的需求,即社交的需要和尊重的需要,他们需要的是归属感,渴望名誉与声望。但在这时,由于各方面的因素,有人能在小范围的、局部的满足这种需要,有人能在较大范围内得到这种需求。有人为了实现自己的目标和抱负,满足自己的自我实现的需要,竭尽所能,废寝忘食的工作;有人已经被社会和生活淘磨得棱角全无,感到很满足,安于现状。
十年之后,老同学聚会时就会发现,有人是开着宝马来的,有人是踩着飞鸽来的。有人已经是千万富翁,笑谈海外业务扩展;有人愁眉不展,抱怨现在的房价太高。
======================== 4 ===========================
在互联网的社区中,关于程序员浮躁的讨论帖子很多。那么程序员真的浮躁吗?他们为什么会浮躁呢?其根源是什么呢?
程序员已经是一个没有门槛的职业
随着开发工具的可视性、易用性的增强,程序开发变得越来越简单。特别是随着软件工程方法的深入人心,开发过程管理变得愈加规范,使代码编写变得类似于机械性的动作。这样,程序员已经是一个没有门槛的职业,各培训机构都可以号称2-3个月内打造一个软件蓝领。加之各种渠道的宣传和炒作,让公众误以为只要攀上IT,一定前途无量。我们到处都可以看到这样的言论和宣传,“中国每年缺程序员XX万”,这是谁统计的数字?什么时候的数字?却无处可查。我个人认为这些数字是有问题的,是有很大的水分的。根据本人了解的情况,从2003年开始,中国各类大学所招的计算机相关专业的学生数量就已经超过了IT行业所需的实际数量!
培训机构给程序员职业蒙上了阴影
一些培训机构的“粗制滥造”,给程序员这个职业蒙上了许多阴影。给人的总体感觉是现在的程序员越来越多,但真正有水平的程序员却越来越少了。特别是有个别培训机构滥发证书,滥发到什么程度呢?给大家举个例子。
早些年,当我还在企业做经理的时候,有一次招聘程序员,但有一个号称是系统分析员的年轻后生来应聘。出于对“系统分析员”这个名字的好感,我要求亲自面试该应聘者。既然是面试系统分析员,当然要从软件工程的话题谈起,遗憾的是,此人对软件工程一无所知。在这种情况下,我才提出要看他的证件,大失所望啊,原来是国内某知名IT培训机构所颁发的所谓系统分析员证书。经过交流才知道,不管什么基础的人(大部分是高中毕业生或中专毕业生),在该培训机构,只要学习一年,就可以颁发系统分析员证书的。既然不懂软件工程,那咱们就谈数据库和算法吧,结果也是一问三不知。我急啊,就直问,“你究竟会什么?”,答复是“我会一点asp”。无语,走人。
不久后,我给国家软考办提交了一份请示,以“有损系统分析员的名誉”为理由,要求取缔该培训机构颁发的系统分析员证书。得到的答复是“这个问题我们管不着,就好象中国有个著名的清华大学,北京却有人搞个华清大学。用人单位要注意识别李魁和李鬼”。“系统分析员”尚且如此之差,更别说他们的“高级程序员”和“程序员”了!这样,导致业界感觉整个程序员的水平在下降,特别是使一些老程序员对新程序员“不屑一顾”。
相当一部分程序员是浮躁的
现在的很多程序员真的是浮躁的,包括在校的大学生。主要表现在于:
(1)不扎扎实实地钻研理论,打好基础,而是成天浮在表面上。程序员不是不想上进,他们很多人也在读书。但读的大多是一些比较热门的所谓“技术”书,业界炒什么“单词”,他就读什么。但由于理论基础不牢,功底太浅,始终只是一些花拳绣腿而已。例如,我就发现一些程序员和一些大学生,成天在读.NET,J2EE,Ajax之类的书籍,但关于数据库原理、数据结构与算法等基础理论,却一窍不通。有些学生不好好学习学校规定的课程,却很有兴趣地到外面的培训机构去参加培训,似乎感觉这样更实在一些。
(3)程序漏洞百出,敬业精神比较差。晚上泡酒吧、搓麻将、玩游戏,白天工作带身不带脑,把工作只是当作为晚上玩而养好身体的一种手段。边写代码边网上聊天,程序漏洞百出。很少考虑程序问题给用户造成的损失,给公司带来的负面影响。很少去研究自己写的代码,看能否进一步优化,自以为是,认为代码只要通过编译就万事大吉了。
(4)过于频繁的跳槽,没有长期规划。为了三五块工资的增长而频繁跳槽,找工作时只看眼前的工资数量,而不考虑自身的长远发展和职业规划。尽管辞职信中都会写“由于自身发展”,但其实根本就没有认真去考虑过,只是作为一个借口而已。
(5)刚踏入社会,就成天想着房子和车子。由此而抱怨工资太低、待遇太差、老板太小气、房价太高,等等,感觉都是满腹牢骚,一肚子愤懑。很少结合自己的实际能力和水平去衡量自己的“价值”。只想轻松赚钱,不愿意付出,不想承担责任。成天喊工资太低,却从来不去想自己为公司带来了多少效益。
浮躁不是程序员的错
导致程序员浮躁的根源在于整个社会的浮躁,在于IT企业的浮躁。
(1)中国的IT企业绝大多数是作坊式或半作坊式的,招聘人员的要求就是“能做事”,很少有企业想过要真正培养一个程序员,使之成长。这样,企业在招聘过程中,面试时很少涉及到对基础理论的考查,而是看应聘者“明天来上班,能否写好这个代码”。这样,就会在业界传开,“IT企业需要什么什么样的人才”。如今高校扩招,学生就业压力大。为了就业,学生只得适应这个被扭曲的IT环境,学习一些表面性的技能而不是深层次的技术,拣了芝麻丢了西瓜。
(2)IT企业管理和运作不规范。例如,没有一套成形的管理制度,没有一个合理的软件过程。在对待程序员方面,希望“呼之即来,挥之即去”,往往为了一个项目就大量招聘,项目结束后就立即遣散。没有给程序员交纳社会保险,导致程序员心情浮躁,没有安稳感。
(3)很多老程序员一旦有点技术,就想单干。往往因为一个单就成立一个公司,单做完了,公司也就完了。这样,一个晚上就可以冒出数百个公司,第二天早上又倒闭了数百个公司。导致程序员被动地频繁跳槽,被动地浮躁。
(4)同样是由于企业规模太小,基本上以生存为惟一目的。没有研发投入,导致程序员没有进步,在工作中没有成就感,往往感觉很迷茫和无助。
(5)部分企业老板及管理人员信誉极差,招聘的时候承诺得很好,但从来就不会兑现。不停地要求程序员加班,却从来就不发加班工资。只知道“挤奶”,却装作不知道“牛要吃草”。只给员工讲奉献,却从来不给员工讲回报。这种企业如何叫程序员去敬业呢?
(6)IT培训机构不负责任的宣传和误导,导致很多人花高代价往IT行业挤。以为只要IT了,就房子、车子不愁了。工作后才发现并非如此,于是就总觉得自己的待遇太差(培训机构往往会说学员的工资会很高很高!),投入产出比太低。从而浮躁起来。
(7)我们高校的计算机教育确实存在很多弊病。例如,学生扩招,老师却没有增多,实习的机房却没有增多。教科书的内容十分陈旧,等等。诸如此类,问题很多。关键的是,老师的教学严重脱离实践,教授们大多是以学术著称,自身缺乏项目实践。例如,本人曾在某软件学院客座,就发现该院主讲软件工程的教授除做了一些科研型的项目外,就从来没有在企业呆过,从来没有做过一个称得上是“工程”的项目。主讲CMM的教授竟然拿着书问我“CMM在企业中究竟是如何实施的呢?”。
因此,我个人认为,浮躁不是程序员的错,而是我们整个IT环境的错!
[阅读全文(2304) | 回复(21) | 引用通告(1) | 编辑]
--------------------------------------------------------------------------------
上一篇:《软件体系结构》被选为“十一五”国家级教材
下一篇:软件架构的选择与应用
·Re:程序员浮躁,是谁的错? -|acqy发表评论于2006-7-15 17:25:00
的确,很多国内的公司,甚至是知名的大型IT企业(在此就不点名了)在招聘员工的时候都只知道谈奉献:为公司奉献,为中国的软件产业奉献,为祖国的软件事业贡献自己的力量。听起来很伟大,但脱离了实际:为什么别人要来你的公司工作?为了赚钱,为了生存,为了丰富物质生活。你为什么办公司?为什么要你的员工奉献?无非也是赚钱。你不可能为了一些大奉献大道理而损失自己赚钱的时间与机会,人家同样也不可能到你这里每天做义务劳动。我曾经和好友开玩笑说:“说奉献,我宁可去无偿扫马路,这样好歹人家还知道我为人很好,为社会义务劳动,做公益的事情”。
当然,我的这种说法偏激了,但讨论的确实是现在的现实问题。在这样的企业中工作,成天无偿加班到很晚,员工图什么?如果客户每次拿了你的货不给钱,你的感受是什么?光把无偿奉献作为企业文化而大肆宣扬是不明智的,就等于直接告诉别人:来我这里就是赤裸裸的被剥削。你要员工如何安心工作为你创造价值?要员工如何不浮躁?
[个人主页 | 引用 | 返回 | 删除 | 回复]
--------------------------------------------------------------------------------
·Re:程序员浮躁,是谁的错? -|汤汤(游客)发表评论于2006-7-18 9:31:00
几点分析都很中肯。
一般从社会学角度看,一种现象的产生都有它的社会根源,其中的个体或者群体(心理或者行为)都来自于社会环境,尤其是群体,更能说明社会环境的健康与否。
[个人主页 | 引用 | 返回 | 删除 | 回复]
--------------------------------------------------------------------------------
·Re:程序员浮躁,是谁的错? -|hlearning发表评论于2006-7-21 13:16:00
说的好,中国的IT企业就是这样
[个人主页 | 引用 | 返回 | 删除 | 回复]
--------------------------------------------------------------------------------
·Re:程序员浮躁,是谁的错? -|wuqianghong发表评论于2006-7-29 14:30:00
不知道其它学校是不是,我校的计算机系学生有一大部份计算机水平还不如非计算机专业的学生.
[个人主页 | 引用 | 返回 | 删除 | 回复]
--------------------------------------------------------------------------------
·Re:程序员浮躁,是谁的错? -|常常(游客)发表评论于2006-7-31 17:41:00
嘿没办法
[个人主页 | 引用 | 返回 | 删除 | 回复]
--------------------------------------------------------------------------------
·Re:程序员浮躁,是谁的错? -|charchar(游客)发表评论于2006-8-3 9:44:00
社会永远都不会是完美,存在问题是绝对,没有问题是相对。我们需要做的不是去抱怨,而是去改变,需要我们共同的力量去推进我国信息行业的发展。董占球老师做为我国第一台计算机103的设计者之一七十多岁了还来为我们上计算机体系结构的课,深为感动!
[个人主页 | 引用 | 返回 | 删除 | 回复]
--------------------------------------------------------------------------------
·Re:程序员浮躁,是谁的错? -|chixinmumao(游客)发表评论于2006-8-4 20:00:00
现在的程序员本身也有很多的问题.一.现在的开计算机专业的学校太多,已泛滥!二.目前一般本科院校在管理制度松散,导致大学生从大一就开始无所谓一直至大四.一无所学!三.现在一般院校开的课与顺序也不合理.从来没有人来认真研究一下这些东西.
[个人主页 | 引用 | 返回 | 删除 | 回复]
--------------------------------------------------------------------------------
·Re:程序员浮躁,是谁的错? -|不知道(游客)发表评论于2006-8-11 8:41:00
说的什么啊?迷糊
[个人主页 | 引用 | 返回 | 删除 | 回复]
--------------------------------------------------------------------------------
·Re:程序员浮躁,是谁的错? -|ppink(游客)发表评论于2006-11-10 16:15:00
很中肯
我也曾经试图找到原因,可能是因为太年轻的缘故,我老是看到那种会写几行代码就牛X完了的人就冒火,也没有想到是社会也有原因造成他们如此无知
[个人主页 | 引用 | 返回 | 删除 | 回复]
--------------------------------------------------------------------------------
·Re:程序员浮躁,是谁的错? -|蓝天(游客)发表评论于2006-11-26 12:44:00
我也觉得说得很中肯,这是从一定角度来讲是社会造成的 ,我想说要改变那时很难的啊。
[个人主页 | 引用 | 返回 | 删除 | 回复]
--------------------------------------------------------------------------------
·Re:程序员浮躁,是谁的错? -|菜鸟(游客)发表评论于2006-11-27 10:00:00
还是一个菜鸟,看了觉得很可怕呀
学通信的 ,不知道以后可以做软件反面的东西吗?
####################################
1、VC、VB、Delphi …… ,你该学哪个?
具体到编程而言,我要告诉你:任何一种计算机语言,都是计算机科学理论的载体或表现形式。C++很神吗?Java很酷吗?它们差距很远吗?是的。但从理论的层面上讲,它们没有区别,都是“面向对象”理论的一个具体形式而已。
现在的程序员们被发行编译软件(通常我们将其称为“系统软件”)的商家不断推出的产品搞得眼花缭乱,头痛欲裂。不断地跟在新语言后面跑,这条路还没跑到头,那边的“新路”又鸣锣开张了,于是再跟着跑……渐渐地有些人开始感叹:学海无涯、学无止境,或什么“程序员是青春饭,过了三十别想干”……
在此我不得不叹息:中国的教育真是一种“形而上学”的教育。早在高中时代我们就学过“辨证唯物主义”的基本理论:做事情要抓主要矛盾。这一条恐怕谁都知道,却鲜见谁能在实践中把这一理论运用得“炉火纯青”的。把这一理论运用到编程上来讲就是:
理论是主要矛盾,语言是次要矛盾,学会了理论,再具体到学一种语言时,你只不过是在进行某种消遣而已。
现在学VC的普遍看不起学VB的或学Delphi的。但如果一个用Delphi的人,在需要写web程序时,用TCP/IP做了一个构架,嵌入到应用程序中;而另一个用VC的人却只会把一个又一个的组件拖来拉去的做些个“例子程序”的翻版。你说他们两个谁历害?Delphi和VC谁历害?
真应了这样一段话,问:纽约好还是上海好?答:有钱哪儿都好,没钱哪儿都不好。上海的富人并不比纽约的富人少多少的优越感,而纽约的乞丐也不比上海的乞丐多多少幸福感。
现在你还会说学VC的人就一定比学Delphi的人水平高、“钱景”好吗?
2、“浅薄”绝不该是中国程序员的性格特征!!!
想问一句:中国程序员这么多,你们真地把基础理论学好了吗?别用你现有的编程经历告诉我:编程不需要数学,不需要数据结构,不需要编译原理…… ……说话得负责任,您知道吗?我之所以发表这篇文章,就是因为再也看不下去这种在中国编程界漫延的歪理邪说了!邪教害死的是人的个体,你们害死的是中国软件业的未来!如果再让这种理论继续毒害编程新手的思想,中国将在计算机领域失去民族的尊严!!!
请问,操作系统、编译软件、数据库系统…… 这些被称为“系统软件”的东东,中国有几样拿得出手的产品?也许是我孤陋寡闻,据我所知:我们国家一件像样的也没有。
不错,我们是有一些网站的股票在西方上市了,我们是有一些人被国外公司请去做高级职员了,我们也有一些人把西方的官方网站给黑了……但是,我们用的编译工具是谁的产品?我们微机里装得是谁做出的操作系统?我们的程序跑在谁的芯片上?
爱之深,恨之切。我爱的是中国,但我痛恨不是中国,而是在中国编程界普遍流行的“浅薄”和“自以为是”,这是我们民族软件业的一颗毒瘤!
是的,现在编程方面快速入门的书满天飞,让程序员的门槛越来越低。我这个外行就得益于这个“低门槛”,跑了进来。但进来后,我们就不能再这样浅薄下去了——我的兄弟们!
用他国提供的工具做几个网站,写几个应用程序,弄出几个病毒…… 是振兴不了民族软件业的。顺便说一句:我尊敬求伯君,但我不认为金山公司和其系列产品配得上被称为“民族软件业”的大旗,相对这个称号,它差得太远了。
…… ……
写flash软件的人会认为用flash做动画的人比他历害吗?Adobe公司真的认为考取Adobe证书的人是“人才”吗?MSCE、MSCD…… 通过这类考试得到微软徽章的人,在微软眼里是“人才”还是“义务推销员”?持这类证书以及其他一些大软件公司认证的人,你们还在以为自己是“中国软件业的精英”而感叹“怀才不遇”、工资太少吗?
醒醒吧,朋友。别再用编程不需要理论的话来自欺欺人了,别再用自己的浅薄来教导别人像自己一样浅薄了。我想问问那些称数学、数据结构等基础课程对编程没用的人:
请你们搞清一个概念:是这些理论“没用”,还是你们“没用到”;是你们“没用到”,还是你们的水平根本“用不到”;是你们“不需要用”,还是你们根本“不会用”?
举个例子,操作系统中的工作调度,若工作优先权相同,用什么方法进行调度?当然是“先到先做”——这就是数据结构中“队列”的应用。你们说“用不到”,只怕是因为到目前为止还没机会接触这类“高端编程”的挑战吧?这样的话,那就算了,挣你的钱去,但别再来这里误人子弟,吹嘘什么优秀的程序员不需要理论。
是谁说系统软件发展的黄金时代已经过去了?Linux不就是在MS操作系统雄霸多年的情况下一举成名的吗?中国难道就找不到这样一个机会? 不,如果我们的程序员克服了现在的浮燥与急功近利,我们一样可以在“系统软件”这一软件业的“高端”树立自己的品牌!
我很喜欢这句话啊:如果我们的程序员克服了现在的浮燥与急功近利,我们一样可以在“系统软件”这一软件业的“高端”树立自己的品牌!
是啊,为什么我们都在花心思在怀疑自己学的编程语言有没有前境呢?为何不多拿点精力在学精自己所掌握的工具上面呢?
#################################################
一忌:轻易言败,没有自信
没有永不放弃精神的程序员,只是一个有程序员名号的假程序员。一个真正的程序员,知道在程序设计的过程中,可能会遇到不计其数的困难和问题,可能有极多的挫折和失败,而成功只有一次。
就为解决一个问题,我们可能连续十几甚至几十小时的坐在计算机前不停的工作。一个问题解决了,可能又有其它的问题出现。而你要是不能坚持下来,可能从前的一切努力都流失了。轻易言败的人请不要做程序员,你不可能成功。执着是最可贵的。
执着的程序员都是相信自己的人,每时每刻都会鼓励自己,你做的出来,你能解决,你会成功。这样他才能坚持下去。
二忌:浮华不实,自满自大
夸夸奇谈的人不是优秀的程序员。整个程序设计的过程就是一个研究学习,应用,再研究学习,再应用的过程。一名优秀的程序员决不会认为自己足够好了,不需要再提高了。自满自足的人不会是好程序员,会很快落后以致落伍。所以越是优秀的程序员越是感觉自己懂得少,不会在人前故意卖弄,这并不是故作谦虚,而是实实在在的感受,亲自体会才能明白。
浮华的程序员会不懂装懂,不停的强调语言的优劣,平台的好坏。追求所谓最新最时尚的技术,停留在表面问题上。或假做深沉,用不适合的方式做不适合的事情。就像孔已己一样,以为知道"茴"字有四种写法就是学问。最后是简单的作不好,困难的也作不好。
三忌:死气沉沉,不求甚解
优秀的程序员是充满激情和活力的程序员。求知欲和创造欲是原动力。有求知欲你才能不停的学习,有创造欲你才能不停的超越自己。死气沉沉的程序员已经对程序设计失去了兴趣,很快就会主动或被迫离开。
创造不是指你要发明什么别人不知道的技术或方法,而是说不能仅仅知道怎么做,还要知道为什么这样做。之后你才能创造,其实程序设计的整个过程就是创造的过程。
四忌:强调客观,忽略自身
很多程序员都是在失败的时候强调客观因素,而优秀的程序员的程序员都是先反省自己。要明白自己缺陷,再努力去学习。没有人事事都做的成功,也没有人生来就什么会做。所以失败了,多想想自身的原因,这样你才会不停的进步,而不是留在原地抱怨。
==================== 6 =======================
第一阶段
此阶段主要是能熟练地使用某种语言。这就相当于练武中的套路和架式这些表面的东西。
第二阶段
此阶段能精通基于某种平台的接口(例如我们现在常用的Win 32的API函数)以及所对应语言的自身的库函数。到达这个阶段后,也就相当于可以进行真实散打对练了,可以真正地在实践中做些应用。
第三阶段
此阶段能深入地了解某个平台系统的底层,已经具有了初级的内功的能力,也就是“手中有剑,心中无剑”。
第四阶级
此阶段能直接在平台上进行比较深层次的开发。基本上,能达到这个层次就可以说是进入了高层次。这时进入了高级内功的修炼。比如能进行VxD或操作系统的内核的修改。
这时已经不再有语言的束缚,语言只是一种工具,即使要用自己不会的语言进行开发,也只是简单地熟悉一下,就手到擒来,完全不像是第一阶段的时候学习语言的那种情况。一般来说,从第三阶段过渡到第四阶段是比较困难的。为什么会难呢?这就是因为很多人的思想变不过来。
第五阶级
此阶段就已经不再局限于简单的技术上的问题了,而是能从全局上把握和设计一个比较大的系统体系结构,从内核到外层界面。可以说是“手中无剑,心中有剑”。到了这个阶段以后,能对市面上的任何软件进行剖析,并能按自己的要求进行设计,就算是MS Word这样的大型软件,只要有充足的时间,也一定会设计出来。
第六阶级
此阶段也是最高的境界,达到“无招胜有招”。这时候,任何问题就纯粹变成了一个思路的问题,不是用什么代码就能表示的。也就是“手中无剑,心中也无剑”。
此时,对于练功的人来说,他已不用再去学什么少林拳,只是在旁看一下少林拳的对战,就能把此拳拿来就用。这就是真正的大师级的人物。这时,Win 32或Linux在你眼里是没有什么差别的。
每一个阶段再向上发展时都要按一定的方法。第一、第二个阶段通过自学就可以完成,只要多用心去研究,耐心地去学习。
要想从第二个阶段过渡到第三个阶段,就要有一个好的学习环境。例如有一个高手带领或公司里有一个好的练手环境。经过二、三年的积累就能达到第三个阶段。但是,有些人到达第三个阶段后,常常就很难有境界上的突破了。他们这时会产生一种观念,认为软件无非如此,认为自己已无所不能。其实,这时如果遇到大的或难些的软件,他们往往还是无从下手。
现在我们国家大部分程序员都是在第二、三级之间。他们大多都是通过自学成才的,不过这样的程序员一般在软件公司也能独当一面,完成一些软件的模块。
但是,也还有一大堆处在第一阶段的程序员,他们一般就能玩玩VB,做程序时,去找一堆控件集成一个软件。
==================== 8 =============================
程序员以后的道路是怎么样的,如果我们那天不错程序员了又能做什么呢!???
[希赛推荐:欢迎下载《希赛顾问》电子杂志]
可乐泡咖啡 2006-11-23 22:07:17 [个人资料] [Blog][回复] [引用] 第1楼 得分:0
程序员是一种技术工作,在IT的发展中有相当重要的地位,从底层硬件通讯协议的建立, 到数据传输层的处理,到操作系统的建设,到数据库平台的建设,一直到应用层上各种数 据营销平台的搭建,程序员在里面都扮演着举足轻重的角色并为IT事业的发展做出了巨大 的贡献。
中国有很多精于编码的人,但是中国软件行业,尤其是网络应用开发方面误区很大,很难形成有规模的软件开发力量和产品能力,不但比美国差距甚远,和印度相比也是颇有不如。这些问题不是在于中国程序员的智商和工作努力状况,也不是在于国家和民间对开发的投入程度,而是很大程度上,有一些对技术,对程序开发,对项目设计方面的思想误区,这些误区,导致了软件行业的产品化能力不足,缺乏规模化和大型复用系统研发能力,可以说,改变认识误区,是解决软件行业小作坊模式和个体英雄模式所带来的局限性 的重要工作。
中国有很多小朋友,他们18,9岁或21,2岁,通过自学也写了不少代码,他们有的代码写的很漂亮,一些技术细节相当出众,也很有钻研精神,但是他们被一些错误的认识和观点左右,缺乏对系统,对程序的整体理解能力,这些人,一个网上的朋友说得很好,他们实际 上只是一些Coding fans,压根没有资格称为程序员,但是据我所知,不少小网络公司的 CTO就是这样的coding fans,拿着吓人的工资,做着吓人的项目,项目的结局通常也很吓 人。
程序员基本素质:
作一个真正合格的程序员,或者说就是可以真正合格完成一些代码工作的程序员,应该具 有的素质。
1:团队精神和协作能力
把它作为基本素质,并不是不重要,恰恰相反,这是程序员应该具备的最基本的,也是最重要的安身立命之本。把高水平程序员说成独行侠的都是在呓语,任何个人的力量都是有限的,即便如linus这样的天才,也需要通过组成强大的团队来创造奇迹,那些遍布全球的为linux写核心的高手们,没有协作精神是不可想象的。独行侠可以作一些赚钱的小软件发点小财,但是一旦进入一些大系统的研发团队,进入商业化和产品化的开发任务,缺 乏这种素质的人就完全不合格了。
2:文档习惯
说高水平程序员从来不写文档的肯定是乳臭未干的毛孩子,良好的文档是正规研发流程中 非常重要的环节,作为代码程序员,30%的工作时间写技术文档是很正常的,而作为高级 程序员和系统分析员,这个比例还要高很多。
缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇 到极大的麻烦。
3:规范化,标准化的代码编写习惯
作为一些外国知名软件公司的规矩,代码的变量命名,代码内注释格式,甚至嵌套中行缩 进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和 纠错,也有助于不同技术人员之间的协作。
有些coding fans叫嚣高水平程序员写的代码旁人从来看不懂,这种叫嚣只能证明他们自 己压根不配自称程序员。代码具有良好的可读性,是程序员基本的素质需求。
再看看整个linux的搭建,没有规范化和标准化的代码习惯,全球的研发协作是绝对不可 想象的。
4:需求理解能力
程序员需要理解一个模块的需求,很多小朋友写程序往往只关注一个功能需求,他们把性能指标全部归结到硬件,操作系统和开发环境上,而忽视了本身代码的性能考虑,有人曾经放言说写一个广告交换程序很简单,这种人从来不知道在百万甚至千万数量级的访问情况下的性能指标是如何实现的,对于这样的程序员,你给他深蓝那套系统,他也做不出太极链的并访能力。性能需求指标中,稳定性,并访支撑能力以及安全性都很重要,作为程序员需要评估该模块在系统运营中所处的环境,将要受到的负荷压力以及各种潜在的危险和恶意攻击的可能性。就这一点,一个成熟的程序员至少需要2到3年的项目研发和跟踪经 验才有可能有心得。
5:复用性,模块化思维能力
经常可以听到一些程序员有这样的抱怨,写了几年程序,变成了熟练工,每天都是重复写 一些没有任何新意的代码,这其实是中国软件人才最大浪费的地方,一些重复性工作变成 了熟练程序员的主要工作,而这些,其实是完全可以避免的。
复用性设计,模块化思维就是要程序员在完成任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作,如果一个软件研发单位和工作组能够在每一次研发过程中都考虑到这些问题,那么程序员就不会在重复性的工作中耽误太多时间,就会有更多时间和精力投 入到创新的代码工作中去。
一些好的程序模块代码,即便是70年代写成的,拿到现在放到一些系统里面作为功能模块 都能适合的很好,而现在我看到的是,很多小公司软件一升级或改进就动辄全部代码重 写,大部分重复性工作无谓的浪费了时间和精力。
程序员应具备的素质中
6:测试习惯
作为一些商业化正规化的开发而言,专职的测试工程师是不可少的,但是并不是说有了专职的测试工程师程序员就可以不进行自测;软件研发作为一项工程而言,一个很重要的特点就是问题发现的越早,解决的代价就越低,程序员在每段代码,每个子模块完成后进行认真的测试,就可以尽量将一些潜在的问题最早的发现和解决,这样对整体系统建设的效 率和可靠性就有了最大的保证。
测试工作实际上需要考虑两方面,一方面是正常调用的测试,也就是看程序是否能在正常调用下完成基本功能,这是最基本的测试职责,可惜在很多公司这成了唯一的测试任务,实际上还差的远那;第二方面就是异常调用的测试,比如高压力负荷下的稳定性测试,用户潜在的异常输入情况下的测试,整体系统局部故障情况下该模块受影响状况的测试,频发的异常请求阻塞资源时的模块稳定测试等等。当然并不是程序员要对自己的每段代码都需要进行这种完整测试,但是程序员必须清醒认识自己的代码任务在整体项目中的地位和各种性能需求,有针对性的进行相关测试并尽早发现和解决问题,当然这需要上面提到的 需求理解能力。
7:学习和总结的能力
程序员是人才很容易被淘汰,很容易落伍的职业,因为一种技术可能仅仅在三两年内具有 领先性,程序员如果想安身立命,就必须不断跟进新的技术,学习新的技能。
善于学习,对于任何职业而言,都是前进所必需的动力,对于程序员,这种要求就更加高 了。
但是学习也要找对目标,一些小coding fans们,他们也津津乐道于他们的学习能力,一会学会了asp,一会儿学会了php,一会儿学会了jsp,他们把这个作为炫耀的资本,盲目的追逐一些肤浅的,表面的东西和名词,做网络程序不懂通讯传输协议,做应用程序不懂中断向量处理,这样的技术人员,不管掌握了多少所谓的新语言,永远不会有质的提 高。
善于总结,也是学习能力的一种体现,每次完成一个研发任务,完成一段代码,都应当有 目的的跟踪该程序的应用状况和用户反馈,随时总结,找到自己的不足,这样逐步提高, 一个程序员才可能成长起来。
一个不具备成长性的程序员,即便眼前看是个高手,建议也不要选用,因为他落伍的时候 马上就到了。
具备以上全部素质的人,应当说是够格的程序员了,请注意以上的各种素质都不是由IQ决 定的,也不是大学某些课本里可以学习到的,需要的仅仅是程序员对自己工作的认识,是 一种意识上的问题。
那么作为高级程序员,以至于系统分析员,也就是对于一个程序项目的设计者而言,除了 应该具备上述全部素质之外,还需要具备以下素质:
第一,需求分析能力
对于程序员而言,理解需求就可以完成合格的代码,但是对于研发项目的组织和管理者, 他们不但要理解客户需求,更多时候还要自行制定一些需求,为什么这么说呢?
一般而言,进行研发任务,也许是客户提出需求,也许是市场和营销部门提出的需求,这时候对于研发部门,他们看到的不是一个完整的需求,通常而言,该需求仅仅是一些功能上的要求,或者更正规些,可能获得一个完整的用户视图;但是这都不够,因为客户由于非技术因素多一些,他们可能很难提出完整和清晰,或者说专业性的性能需求,但是对于项目组织者和规划者,他必须能够清醒认识到这些需求的存在并在完成需求分析报告的时候适当的提出,同时要完整和清晰的体现在设计说明书里面,以便于程序员编码时不会失 去这些准则。
程序设计者必须正确理解用户需求所处的环境,并针对性做出需求的分析,举例而言,同样一个软件通过ASP租用方式发布和通过License方式发布,性能需求可能就是有区别的,前者强调的是更好的支撑能力和稳定性,而后者则可能更强调在各种平台下的普适性和安 装使用的简捷性。
第二,项目设计方法和流程处理能力
程序设计者必须能够掌握不少于两到三种的项目设计方法(比如自顶至下的设计方法,比 如快速原型法等等),并能够根据项目需求和资源搭配来选择合适的设计方法进行项目的 整体设计。
设计方法上选择不当,就会耽误研发周期,浪费研发资源,甚至影响研发效果。
一个程序设计者还需要把很多功夫用在流程图的设计和处理上,他需要做数据流图以确立 数据词典;他需要加工逻辑流图以形成整体的系统处理流程。
一个流程有问题的系统,就算代码多漂亮,每个模块多精致,也不会成为一个好的系统。 当然,做好流程分析并选择好项目设计方法,都需要在需求分析能力上具有足够的把 握。
第三,复用设计和模块化分解能力
这个似乎又是老调重谈,前面基本素质上不是已经说明了这个问题吗?
作为一个从事模块任务的程序员,他需要对他所面对的特定功能模块的复用性进行考虑,而作为一个系统分析人员,他要面对的问题复杂的多,需要对整体系统按照一种模块化的分析能力分解为很多可复用的功能模块和函数,并针对每一模块形成一个独立的设计需求。举个例子,好比是汽车生产,最早每辆汽车都是独立安装的,每个部件都是量身定做的,但是后来不一样了,机器化大生产了,一个汽车厂开始通过流水线来生产汽车,独立部件开始具有一定的复用性,在后来标准化成为大趋势,不同型号,品牌甚至不同厂商的汽车部件也可以进行方便的换装和升级,这时候,汽车生产的效率达到最大化。软件工程也是同样的道理,一个成熟的软件行业,在一些相关项目和系统中,不同的部件是可以随意换装的,比如微软的许多桌面软件,在很多操作模块(如打开文件,保存文件等等)都是复用的同一套功能模块,而这些接口又通过一些类库提供给了桌面应用程序开发者方便 挂接,这就是复用化的模块设计明显的一个佐证。
将一个大型的,错综复杂的应用系统分解成一些相对独立的,具有高度复用性的,并能仅 仅依靠几个参数完成数据联系的模块组合,是作为高级程序员和系统分析员一项最重要的 工作,合适的项目设计方法,清晰的流程图,是实现这一目标的重要保证。
第四,整体项目评估能力
作为系统设计人员,必须能够从全局出发,对项目又整体的清醒认识,比如公司的资源配置是否合理和到位,比如工程进度安排是否能最大化体现效率又不至于无法按期完成。评估项目整体和各个模块的工作量,评估项目所需的资源,评估项目可能遇到的困难,都需要大量的经验积累,换言之,这是一种不断总结的累计才能达到的境界。在西方一些软件系统设计的带头人都是很年长的,比如4,50岁,甚至更老,他们在编码方面已经远远不如年轻人那样活络,但是就项目评估而言,他们几十年的经验积累就是最重要和宝贵的财富。中国缺这么一代程序员,主要还不是缺那种年纪的程序员,而是那种年纪的程序员基本上都是研究单位作出来的,都不是从专业的产品化软件研发作出来的,他们没有能积累 那种产品化研发的经验,这也是没有办法的事情。
程序员应具备的素质下
第五,团队组织管理能力
完成一个项目工程,需要团队的齐心协力,作为项目设计者或研发的主管人,就应当有能 力最大化发挥团队的整体力量,技术管理由于其专业性质,不大同于一般的人事管理,因 为这里面设计了一些技术性的指标和因素。
首先是工作的量化,没有量化就很难做到合适的绩效考核,而程序量化又不是简单的代码 行数可以计算的,因此要求技术管理人员需要能真正评估一个模块的复杂性和工作量。
其次是对团队协作模式的调整,一般而言,程序开发的协作通常分为小组进行,小组有主 程序员方式的,也有民主方式的,根据程序员之间的能力水平差距,以及根据项目研发的 需求,选择合适的组队方式,并能将责权和成员的工作任务紧密结合,这样才能最大发挥 组队的效率。
一个代码水平高的人,未必能成为一个合格的项目研发主管,这方面的能力欠缺往往是容 易被忽视的。
综上可以看到,作为一个主管研发的负责人,一个项目设计者,所需要具备的素质和能力并不是程序代码编写的能力,当然一般情况下,一个程序员通过不断的总结提高达到了这种素质的时候,他所具有的代码编写能力也已经相当不简单了,但是请注意这里面的因果关系,一个高水平的项目设计者通常已经是代码编写相当优秀的人了,但是并不是一个代码相当优秀的程序员就可以胜任项目设计的工作,这里面存在的也不是智商和课本的问题,还是在于一个程序员在积累经验,逐步提升的时候没有意识到应当思考哪方面的东西,没有有意识的就项目的组织和复用设计进行揣摩,没有经常性的文档习惯和总结习 惯,不改变这些,我们的合格的项目设计者还是非常欠缺。
另外,为防止有无聊的人和我较真,补充一点,本文针对目标是作商业化的软件项目和工程,那些科研机构的编程高手,比如算法高手,比如图象处理高手,他们的工作是研究课题而非直接完成商业软件(当然最终间接成为商业产品,比如微软研究院在作的研究课题),因此他们强调的素质可能是另外的东西,这些人(专家),并不能说是程序员,不 能用程序员的标准去衡量。
最后补充一点东西,一个软件项目研发的设计流程是怎样的呢?以通常标准的设计方法为 例,(不过笔者喜欢快速原型法)。
第一个步骤是市场调研,技术和市场要结合才能体现最大价值。
第二个步骤是需求分析,这个阶段需要出三样东西,用户视图,数据词典和用户操作手 册。
用户视图是该软件用户(包括终端用户和管理用户)所能看到的页面样式,这里面包含了 很多操作方面的流程和条件。
数据词典是指明数据逻辑关系并加以整理的东东,完成了数据词典,数据库的设计就完成 了一半多。
用户操作手册是指明了操作流程的说明书。
请注意,用户操作流程和用户视图是由需求决定的,因此应该在软件设计之前完成,完成 这些,就为程序研发提供了约束和准绳,很遗憾太多公司都不是这样做的,因果颠倒,顺 序不分,开发工作和实际需求往往因此产生隔阂脱节的现象。
需求分析,除了以上工作,笔者以为作为项目设计者应当完整的做出项目的性能需求说明 书,因为往往性能需求只有懂技术的人才可能理解,这就需要技术专家和需求方(客户或 公司市场部门)能够有真正的沟通和了解。
第三个步骤是概要设计,将系统功能模块初步划分,并给出合理的研发流程和资源要求。作为快速原型设计方法,完成概要设计就可以进入编码阶段了,通常采用这种方法是因为涉及的研发任务属于