2009年2月26日星期四
如何成为优秀的软件人才
1. 软件白领的现状
2. 软件白领的职业发展
3. 理工科大学教育的缺憾
4. 成才要素:学习并应用强势知识
5. 成才要素:提高表达能力
6. 成才要素:提高管理能力
7. 成才要素:提升人格魅力
8. 小结,引申,思考…
参考书:《软件工程与项目管理解析》,林锐 著,电子工业出版社,2003
1. 软件白领的现状
1.1 青年白领阶层小康了吗
改革开放20年之后,中国基本上解决了全民的温饱问题。现在国家提出了“全民奔小康”的奋斗目标。所谓“小康”是指全国人均年收入达到1000美元。你千万不要觉得“全民奔小康”这个目标很容易实现。要知道中国有13亿人口,大约有10亿人在拖小康的后腿啊。所以发达地区至少要有10倍于落后地区的经济能力,才能抵消落后地区的负担。
据大致估计,上海、北京等发达城市的软件白领平均年薪为10万元左右。如果进一步细分的话,年薪5万元左右的称为灰领,年薪20万元以上的称为金领。
对于生活在上海、北京、深圳等发达城市的人而言,如果他的年收入只有1000美元的话,那么他就是赤贫阶层了。面对高昂的房价和不低的物价,年薪10万元左右的人也许有胆量谈小康。所以大部分白领人士将和农民一样,不得不为小康而长期奋斗。
1. 软件白领的现状
1.2 男士白领成家立业的艰辛
尽管软件白领是令社会大众羡慕的阶层,但是男士们成家立业的艰辛程度丝毫不亚于农民和蓝领。这是因为他们所负的压力远远超过了经济收入。
“月光王子”的潇洒日子是短暂的。
家的三大构成要素是“男主人、女主人、房子”。根据中国的传统习俗,买房子这个重任主要由男士来挑,女士的主要本事将用在有房子之后治理这个家。
工作才两三年的小伙子全靠自己的积蓄难以支付“房子的20-30%首付”。在亲人和朋友们的帮助下,好不容易买了房子,接下去每月都要还银行贷款。
当他的工资扣除税收、缴掉各种保险金、还银行住房贷款之后,顿时所剩无几。这时如果再让他肩负家庭的生活费用,他就不再是白领了。我已经多次听到一些小伙子们恨恨地说:自从买了房子后,我就活得像个民工,开始为家庭的温饱而奋斗。
这就是目前普通软件白领的生活写照,如果他不能在事业上有大的跃进,生活的压力将逐渐磨灭他的斗志,后半生就平淡如水。
大多数人并不甘心平庸,所以他不停地奋斗,不停地承受更多的压力,这种“死循环”程序在读大学的时候就已经编写好了。
《读者》曾经刊登了一篇文章叫“中国的男人为什么不浪漫?”,估计是悠闲女人写的。其实不必写那么长的文章,一句话就可以解答:因为他太累了。
2. 软件白领的职业发展
2.1 编程这活究竟该干多久?我们是否要一辈子编程?
这不是愿意不愿意一辈子编程的问题,而是能不能的问题!
编程这活儿可以算是青春饭,合适的年龄是20至30岁之间,比女孩子的青春还要短。20来岁在大学里学编程,虽然刚开始时水平比较臭,但是学习劲头很足,进步比较快;到25岁左右时编程技能、编程效率达到高峰;之后,编程水平基本停滞不前,但是编程效率逐渐下降,到30岁左右已经不是编程主力军了。
程序员不能老是捧着旧饭碗,年龄大到不再适合于编程时,并不是说这个人就无用了,而是应当去做更加有价值的事情。
可恶的励志古训“三十而立” ,其含义是男人到30岁时应当:(1)建立安全的家庭,也就是让老婆孩子过上小康的日子;(2)在事业上有所建树,不再是无名小卒。
由于古时候中国男人的平均寿命不到50岁,而且都是男人当家,所以如果男人活到30岁还不能立起来,基本上就没有指望了。但是现代中国男人基本上能够活到70岁,读书时间花得很长,因此“四十而立”是比较符合现代国情的。
不幸的是,女士们不仅广泛接受了“三十而立”这个观念,而且还把它升华为考核男人成败的标准。因此,男生一离开学校就要为“三十而立”奋斗,时间紧迫,压力太大。
2. 软件白领的前途
2.2 软件人员三十岁该干什么?
如果30岁了,他还天天编程,估计他很难完成“三十而立”这项艰巨任务。如果完成不了,只好向家庭领导申请延期,被家庭领导捏住把柄。
更糟糕的是,30岁的程序员比起25岁左右的新生代程序员,毫无竞争优势可言。
由于软件技术更新极快,编程语言和编程工具都会革新换代,新生代程序员在掌握新技术方面具有先天优势。
30岁的程序员面临的家庭事务比较多,压力大,上班时常感困乏,工作老是分心,编程效率自然落后于更年轻的小伙子们。所以对于程序员这个职业而言,绝对无法倚老卖老。
如果年长的程序员不能在软件工程和项目管理方面发挥优势,那么他的前途可能比较黯淡了。
“编程至上” 的观念不利于职业发展。
程序员出身的人往往对编程情有独钟,很难接受“软件人员不再编程”的观念。几年前我也是成千上万个狂热程序员中的一员,信奉“编程至上”。我到企业工作几年后,逐渐改变了“编程至上”的观念。英名的领导会根据团队利益最大化这个目标开展工作,而不能把编程当作团队工作的核心。
我放弃编程并不是因为自己老得编不动了,或者偷懒,而是因为我继续编程的话将使自己没有精力去做更加重要的事情,“机会成本”实在太高。
2. 软件白领的前途
2.3 软件白领的常规职业发展
在外界看来,做个程序员是蛮光彩的。但是我们自己切勿轻易满足,软件行业还有许多比编程更有价值的工作。
有个朝鲜官员第一次到中国参观学习,感叹万分…
软件白领的常规职业发展大致可分三个阶段:
第一阶段,做个职业程序员,主要工作是编程、测试和维护,领导让他干啥就干啥。
第二阶段,成为项目经理或同等级别的技术负责人,从事项目管理、需求分析、系统设计之类的工作,带领一批程序员干活。
第三阶段,成为机构(企业或者事业部)的领导,成天琢磨怎样让机构赚更多的钱,决定产品的发展战略,然后让别人去开发产品。
软件白领处于第一阶段为合格,处于第二阶段为良好,处于第三阶段为优秀。比较合适的年龄分别为25岁左右、30岁左右、35岁左右。第一阶段比较容易实现,第二阶段需要一定程度的努力,第三阶段则靠奋斗了。
3. 理工科大学教育的缺憾
中国大概只有几所大学才有那样的气魄:我们培养的是国家栋梁之才,而且的确做到了!
国内绝大多数理工科大学的教育目标是:让学生们成为出色的工程师,毕业后找份好工作。说得难听一些,就是培养出色的打工仔。
这种教育方针导致无数有天赋并且勤奋的青年学生逐渐演化成为只懂技术、没有思想、缺乏抱负的平庸之辈。
学校正规教育的大部分内容是对人生有益的,但是也夹杂了不少愚昧的教导。遮蔽人生精彩的通常不是困难和挫折,恰恰就是愚昧观念。书呆子呆就呆在全盘接受了“好的和愚昧的”教育,结果让自己成为有知识的无知者。
我分析自己以及许多同行人士的成败得失,经多年思考之后,总结了“让普通人成为优秀软件人才”的简要模式。除了自己身体力行外,我还言传身教于所认识的软件人员。虽非真理,但比起学校里面冗长乏味、空话连篇的政治、成才教育等课程更具实用价值。
4. 成才要素:学习和应用强势知识
4.1 什么是强势知识
在解释什么是强势知识之前,我们先举例说明它的反义词——垃圾知识。
《读者》有一篇文章说,国内有个杜甫研究专家在国际上拥有一项独一无二的研究成果,他用了19年时间研究证明杜甫是吃牛肉死的,因此成为权威。
人们总以为研究杜甫是为了让人们更好地欣赏高雅的诗词,没想到有人执著到用19年时间研究杜甫是吃什么死的。这个研究成果不是学问,它对人类社会毫无价值,称之为垃圾知识最恰当不过了。
世界上的知识无穷无尽,没有人能够学得完。然而人的寿命却是有限的,对于世上的绝大多数人而言,学习知识的目的是为了使自己、家庭、乃至社会变得更加美好。我们听惯了“知识就是力量,知识就是金钱”的格言,殊不知劣质的知识就是垃圾。万一我们花了大半辈子时间学习或制造垃圾知识,那人生岂不可悲!
知识的价值可以用创造出来的社会财富(包括物质财富和精神财富)来衡量。所谓强势知识就是“能够最快地为社会创造最多财富的知识”。我们应当在短暂的、富有生命活力的时间里学习和应用强势知识,而不是垃圾知识。
4. 成才要素:学习和应用强势知识
4.2 把事业建筑在强势知识之上
由于人的精力和特长都有局限,所以人们常说“有所为而有所不为”。同理,我们应当“有所学而有所不学”。一般地,人们应当根据自己的兴趣、毅力、悟性(天赋),发掘适合自己的强势知识,并把事业建筑在强势知识之上。
要好好分析自己究竟对什么感兴趣。当然,你感兴趣的东西未必都能学得好,更未必成为你的事业。在读书的时候换专业,工作的时候改行都是很正常的事情,年轻人切勿过多地受正统教育观念的束缚。我并不推崇“干一行爱一行”这样的口号,因为爱和不爱都是发自内心的,无需听从口号。我更不赞同在事业上“择一而终”,因为这可能使生命失去色彩。人是易变的,只要朝着更加适合你的方向改变,就叫“与时俱进”。
林锐的学习经历和工作经历…。回顾十多年的读书和工作生涯,我不断地改变兴趣,常常在付出努力之后再放弃,得失参半。我并不后悔,因为这是一个积极的探索过程,没有放弃就不能轻装前进。尽管目前自己干得不错,几年之后我仍然会放弃,继续探索新的兴趣,掌握更多的强势知识。
4. 成才要素:学习和应用强势知识
4.3 真才实学优于学历
在十几年前学术还比较纯洁的年代,学历代表着学问,高学历者受人敬仰。我在读中小学的时候,对学士、硕士、博士无比地向往。然而世风日下,如今市场上到处可见假冒伪劣产品,与此呼应,中国大学也大量生产假冒伪劣的人才,令人愤慨,令人伤心。
学生毕业之际,谁都想找一份好的工作。对于IT相关专业而言,90%以上的学生要到企业工作,因为只有企业才能接纳千军万马。大量的硕士生和博士生学了一身的屠龙之技,精通了纸上谈兵,可是企业不欣赏屠龙之技,更加讨厌纸上谈兵。
企业对毕业生的一些看法:
有2~3年工作经验的名牌大学本科生是干活的主力军,他们正当青春、干劲十足、不摆架子、不耻下问、要求不高、奉献甚多。可见国内名牌大学的本科教育相当好,令人放心。
名牌大学的硕士生却是鱼龙混杂,好的很好,差的极差。究其原因是,有半数以上的硕士是改行过来的,专业基础很差,所以这类硕士生不如本科生好用。
按照目前国内大学教育的水准,根本没有能力培养如此至多的博士生。毫不客气地说,最近几年生产出来的博士生,极少数是精英人物,小部分是合格人才,绝大多数是不合格的。国内大部分博士真的是很可怜。从硕士读到博士出头,这六七年时间,尽干些自欺欺人的学问,真本事没学多少,倒学会“眼高手低”甚至“弄虚作假”;毕业时学问既不深也不博,被企业拒之门外后,蓦然回首,发觉青春已被虚度,心灵已呈老态,唯有长叹短嘘,强把自负作自信。博士生“阿溃”的遭遇……
对狂热考研、考博的人们一个忠告……
4. 成才要素:学习和应用强势知识
4.4 为事业而学习
如果你生活在竞争激烈的社会里,特别是在IT行业,事业将毫无疑问成为男人的重心。尽管事业成功并不见得就使你幸福,但是事业却是幸福的基础。如果男人在事业上无所建树,那么他十有八九活得很失败。
一般地讲,除了运气之外,你所掌握的强势知识决定了事业状况。不论是在学校里还是在企业里,都要懂得为了事业而学习
根据事业的目标,确定对应的强势知识结构,有目的有步骤地学习这些强势知识。(在大学里所学的仅仅是专业基础知识而已,只够让你成为工匠挣口饭吃,不要以为自己是个本科生、硕士生或者博士生就翘尾巴。 )
学好基础知识。把事业比喻为高层建筑,那么基础知识就相当于地基。 ……虽然我们强调基础知识的重要性,但是也不能过度地推崇,基础应该与事业目标匹配起来,要考虑机会成本。
读书时扬长补短,工作时扬长避短。 ……“补短” 是指补习你不擅长的知识,因为这些知识对你的事业也非常重要,并不能因为你不擅长就可以甩掉它,如果不补短的话,短处将常常拖你的后腿。 ……人们工作的目的是为了创造效益,要给企业和自己多多赚钱,而不是单纯为了提高自己的知识水平。所以在工作的时候一定要“扬长避短”。
不仅要学习新知识,还要向错误和失败学习,形成学习的良性循环。我们从小学读到大学毕业,一直都在学习新知识,一直信奉“好好学习,天天向上”。然而我们不能把眼光仅仅盯在新知识上,不管是生活还是工作,人们都应该向错误和失败学习,目的是让我们在短暂的健康年华中少犯错误、少失败,多做几件正确的、对社会有贡献的事情。
5. 成才要素:提高表达能力
5.1 树立正确的观念
表达能力主要是指“写”和“说”的能力。“写”和“说”是人们向外界表达自己才华的重要途径。表达能力低下是中国软件开发人员的通病,值得业界高度重视。
很多软件开发人员怕写文档和报告,讲述问题和想法时语无伦次。由于表达能力差,他就无法胜任需求开发、系统设计、管理等高层次的工作。即使他的技术水平很高,但发挥不出来有什么用?只好长期干编程、测试的活儿。
在允许自由竞争的环境中,如果有人埋怨其才能被“埋没”了,通常是他自己的错。如果真有本事,你就应该自己冒出来,怎么会被“埋没”呢?难道非要等着别人来照顾你不成?
我认为导致“表达能力低下”的主要原因是软件开发人员的脑子里有迂腐可笑的观念:他认为表达能力是可有可无的,而技术才能才是惟一重要的。
当领导的通常都是能说会写之人,而不是技术最好的人。如果你不擅长写和说,你可能永远都不能当领导!
有些人把“表达能力差”归结为读小学、中学时文科学得太差,现在补习已经来不及了。这是绝对是谬论,我就是极好的反例。我读小学、中学时文科学得极差,高考语文成绩才54分(总分120分),普通话一句也不会讲……我是一个智力平平,出身贫穷的普通人。既然象我这种语文功底极差的人都能把“表达能力”练得那么好,相信绝大部分人也能办得到。
不要找借口了,为了自己的前途,请赶紧锻炼表达能力。
5. 成才要素:提高表达能力
5.2 怎样提高写作能力
好文章有四大构成要素:内容、逻辑、实证、措词。
内容是文章的灵魂。如果你没有内容可写,那么无论你的文笔多么美妙,你都不可能写出好文章来。“巧妇难为无米之炊”就是这个道理。
古时候,一位书生在大考前成天愁眉苦脸 ……
内容从哪里来?内容不是流水帐,它来之于你对工作和生活的思考。当你思考明白“是什么”、“为什么”、“怎么办”等基本问题时,你就有了可写的内容。
表述内容要符合逻辑。当你有了可写的内容后,就要努力用文字清楚地表达出来,设法让别人容易理解。如果你写的文章颠三倒四,让别人看得很累,即使文章的内容不错,也不会受人欢迎。 ……一篇条理清晰的文章,你只要浏览段落标题,就能明白个大概。
如果你自己都觉得文章不通顺,那么不要在文字上改来改去,免得白费力气,因为真正的原因是你没有把问题想透彻,所以条理不清。
内容要有真凭实据(即实证)。文学类的文章可以虚构情节,可以夸张,但是科技文章不允许这样做。科技文章中可能存在错误的观点和结论,这是在所难免的,但是绝不允许在科技文章中造假。
5. 成才要素:提高表达能力
5.2 怎样提高写作能力
措词追求“正确、准确、优美”。科技人员写作的语病通常有规律性,所以如果有高人指出你文章中的语病时,你要善于总结,举一反三消除类似的语病。……汉语的词汇、妙语特别丰富,你只有在平时多读书、多多铭记好词好句,才有可能写出准确优美的句子。
中国移动通信曾经在《环球时报》上刊登了这样的广告:神州行给全球通发了一条短消息,说我神州行自5.17起也有了短消息。全球通也给神州行发了一条短消息,说我全球通知道你神州行自5.17起有了短消息,以后不但神州行和全球通都可以发短消息,而且神州行还可以给全球通发短消息,全球通也可以给神州行发短消息,也就是说神州行自5.17起有了短消息,神州行和全球通可以互发短消息。……
这个广告的罗嗦程度简直可以与电影《大话西游》中的唐僧语录相媲美!“罗里罗嗦”是“准确”和“优美”的天敌,我们首先应当消除“罗里罗嗦”这个普遍存在的大毛病。
小结:我们不仅要勤于练笔,而且要在实践之中领悟写作的方法和技巧。不论是写技术文档还是写论文,我们都要重视“内容、逻辑、实证、措词”。这是提高写作能力的有效途径。
5. 成才要素:提高表达能力
5.3 怎样提高“说”的能力
我们在日常生活和工作中说话自如,一点问题都没有,可是很多人在正式场合演讲(做报告)的时候却常常语无伦次、局促不安,尤其是有高层领导在场时。
我们首先要克服怯场的心理障碍。大多数人不是天才的演说家,所以在前几次做报告时表现不佳是正常的现象,不必太在乎。我们要有勇气走上讲台,面对许多人演讲,哪怕当时心里发抖,越早迈出第一步对你的事业越有益处。
我是在读硕士一年级的时候举办了自己的第一次学术报告会。尽管我当时毫无演讲经验,心里也害怕出洋相,但是我早就意识到表达能力对事业的重要性,于是鼓励并且强迫自己把这第一次学术报告做好……
和写作一样,我也没有受过专业的演讲训练。既然我现在很能“说”,可见别人也能做得到。根据我自己的领悟,我总结了简单有效的“说”的方法和经验,适用于演讲、做报告、培训等,供同行们参考。
充分准备。演讲的目的是阐述自己的见解,而不是耍嘴皮子。演讲的内容是第一重要的,至少要对得起听众们付出的成本(例如时间成本)。所以我们在演讲之前要好好准备内容,最好把内容制作成电子讲义(例如PowerPoint文件),不仅在现场可以播放,还可以让听众带回去阅读。如果你是新手,那么你最好先练习几遍,熟记内容并且控制时间,避免在现场手忙脚乱。
5. 成才要素:提高表达能力
5.3 怎样提高“说”的能力
仪表整洁,精神抖擞。很多搞技术出身的IT行业人士对自己的仪表比较随意,常常不修边幅。在干技术活的时候是允许的,但是在正式场合演讲的时候可不能这样,否则会损害自己和公司的形象。如果演讲者邋里邋遢,精神委靡,他还没有开口就被听众瞧扁了。所以我们要先在家里修理自己,尽管大多数人并不英俊潇洒,但是“仪表整洁,精神抖擞”还是做得到的,关键是自己要有这样的意识。
声音响亮。不论有没有扬声器,你在演讲的时候声音要响亮。这不是听得到听不到的问题,而是底气足不足的问题。如果你声音响亮,自己就会越说越有劲,听众会被你的热情感染。反之,如果你的声音很小,自己就越说越没劲,听众就会窃窃私语或者干脆打瞌睡。
戒掉烦人的口头词。很多人不知道从哪里传染了烦人的口头词,一开口就讲“就是说”、“等于说”、“说句良心话”、“说句心里话”、“说句老实话”等等。这些口头词对你表达见解毫无用处,反而扰乱视听,令人厌烦。
说普通话,并控制语速。在演讲的时候要说普通话而不能用方言(外语除外),这是对听众的尊重。有一次我参加质量管理研讨会,与会者大多是上海人。有个ISO9000的评估师做报告,一会儿说普通话一会儿说上海话,而且还讲一些只有上海本地人才听得懂的故事,我忍无可忍后愤然离席。很多南方人普通话说得不标准,偏偏说话又很快,这在日常生活中没有问题,但是会严重影响演讲的效果。
现场交互,调动听众的积极性。对于时间比较长(半天以上)的报告会和培训课,讲师不要只顾自己讲,要设法与听众现场交互从而调动听众的积极性。
6. 成才要素:提高管理能力
6.1 观念
宽泛地讲,管理能力是指带领团队完成任务的能力。管理的领域很广,例如项目管理、营销管理、财务管理、人力资源管理、企业管理等等。一般地,一个人的管理能力决定了他能够当多大的官儿。
IT行业的技术性很强,纯粹学管理出身的人由于不懂技术而难以立足领导职位,这就给搞技术出身的人才留下了发展机会。搞技术主要用脑,搞管理主要用心。技术才能取决于智商(IQ),而管理才能取决于情商(EQ)。如果你的IQ和EQ都比较高,那么你就是当领导的料。如果某人的IQ很高但是EQ却很低,那么就请他走技术专家的路线,切勿走错道。
搞技术出身的软件人员并不见得一辈子都要搞技术,他将来有可能成为中高层的经理,也有可能成为优秀的企业家(Bill Gates就是好榜样)。
保守一点讲,先搞技术,拥有一技之长后再逐步转向管理,这是一种稳扎稳打的职业发展模式。我甚至认为这种发展模式特别适合于中国的IT人士,我自己就是走这样的道路。
6. 成才要素:提高管理能力
6.2 如何提高管理能力
要有当领导的愿望。
不甘心做普通技术员的人们,何不大胆明白地对自己讲“我想成为杰出人才,所以我要一边搞技术,一边提升管理能力,在不久的将来成为领导者”。
要有自学成才的信心。管理能力主要是靠自己练出来的,别指望他人手把手地教你怎么管理。
有人说:“上级领导不提拔我当一个经理,我哪有机会锻炼管理能力啊!”这话就像“在没有学会游泳之前我绝不游泳”一样矛盾。
一般地,搞技术出身的人,他的智商是足够学习管理了,因为没有哪本管理学书籍比高等数学还难。学习管理并不需要专门去读MBA这类学位,有不少大企业家没有读过大学,照样可以指挥千军万马。我也遇到过一些迂腐透顶的管理学博士,其管理水平连普通员工都不如,完全白读书了。如果你有比较高的悟性和EQ,完全可以自学成才成为管理专家。
正确地学习基础管理知识。每个行业都有它自己的基础管理知识,显然不能把管理饭店的方法套用到IT企业中。
如果你想成为软件团队的领导,我强烈建议你学习两门管理学问:一是国际项目管理协会(PMI)研制的“项目管理知识体系”(PMBOK),二是美国卡内基梅隆大学软件工程研究所(CMU/SEI)研制的“软件能力成熟度模型”(CMM/CMMI)。
如果你精通PMB和CMM/CMMI,你的知识足以管理大型的软件项目。随着你的职位的升迁,你要不断地补充管理知识(如市场营销、财务管理等)。
6. 成才要素:提高管理能力
6.2 如何提高管理能力
从项目经理做起。
如果你想在将来成为企业的领导,你最好从项目经理做起。道理如同“在当将军之前,应该先当好班长”那样。
项目经理虽然是小小的官儿,但是麻雀虽小五脏俱全。如果你连项目经理都当不好,却想一步登天当更大的官或者自己创业当老板,除非你是天才,否则必败无疑(我自己失败了,我也看到很多高才生失败了)。
即使你雄心勃勃,你也要先积累支撑你雄心的资本,你要明白“不扫一屋,何以扫天下”这个道理。
项目经理这个职位对于大部分软件人员来说是触手可及的,而不是可望不可及的,所以不要轻视项目经理这个职位,这是你锻炼管理能力的绝佳机会。
7. 成才要素:提高人格魅力
7.1 观念
出色的技术才能和管理才能可以让人获得很高的职位,但是如果缺乏人格魅力,即使他成为最高领导也成不了领袖。领导是一种行政职位,可以被任命也可以被撤职(或者,惹不起总躲得起吧)。而领袖则是活在人们的内心里,他让人们发自内心地尊敬和服从。
企业没有领袖就等于没有灵魂,广大员工和领导者没有精神上的联系,仅仅存在雇佣关系,所以不会发生“同甘共苦”这种美好的故事。很遗憾,我以前所在的公司没有领袖但是有许多大大小小的领导,大部分企业都是如此。
领袖人物必定具备卓越才能和超凡的人格魅力。领袖人物最理想的生命轨迹是:当他充满智慧的时候成为人们的领袖,为大众带来巨大财富;当他即将昏庸无道或者成为独裁者的时候,突然神秘消失,避免给大众带来灾难。
人的体格和容貌是非常重要的魅力因素,称之为身体魅力。男人都渴望自己长得又高又帅,但身体魅力是天生的,上天会让大多数人失望。
我小时候也和大多数缺乏身体魅力的人一样长期自卑,当然现在也仍然自卑,只是不经常牵挂而已。为了减少弱势,我不得不发奋学习不断提高知识才能,并且要经常作思考状以提升人格魅力,估计要一辈子累下去了,因为没有别的窍门。
下面将探讨男人的主要人格魅力因素:胸怀宽广、意志坚强、知人善用、社会责任心。
7. 成才要素:提高人格魅力
7.2 男人的主要人格魅力因素
“胸怀宽广”是男人的重要美德。即使人的长相和才能都很普通,如果他的胸怀很宽广,他仍然会让很多人欣赏和接近。反之,才华出众但是心胸狭窄的人,通常是孤家寡人。
要领悟“宰相肚里好撑船”这个道理。
北方人豪爽、憨厚的性格是习俗形成的,隐含了不少缺陷,如果不经后天有意识地雕凿,就不会产出很高的附加值。
撑大自己胸怀的过程其实很难过,因为你要敞开心胸接纳许多你原本不喜欢的人和事物,要强作笑脸虚心接受批评、知错就该,甚至在遭受伤害后只好自己悄然抚平伤痛。所以“胸怀宽广”这种美德是后天苦心修练出来的。
与“胸怀宽广”相媲美的另一种美德是“意志坚强”。人们通常在顺境之中意气风发,而在逆境中萎靡不振。很多有才华而意志薄弱的人在遇到巨大挫折或失败的时候,就一直倒下去了,其实他败给了自己。人生常有不测风云,人的意志是对抗不测风云最有效的武器。
作为领导者的男人一定要有坚强的意志,这样他才能给人们带来强烈的安全感。每当遇到大风浪的时候,人们会自觉地凝聚在领导者的周围,共同克服困难。否则一有风吹草动就人心惶惶,大难临头各自逃。
坚强的意识也不是天生的,是在经常与困难搏斗的过程中积累的。其中的诀窍是,每次的困难不能超出你所能够承受的极限,否则你会被完全击垮,意志再坚强也回天无力。所以男人应该有胆魄闯荡江湖,坦然地迎接成败得失,但是绝对不可以胆大妄为,做出自己无法承受的事情。
7. 成才要素:提高人格魅力
7.3 男人的主要人格魅力因素
有意识地培养“知人善用”的人格魅力,同时不断积累“知人善用”的方法技巧,才可能使自己在将来成为卓越的领导者。
要与各色各样的人打交道,拓展你的交际圈(当然,不能烂交朋友)。宏伟的事业是领导者带领广大群众创造出来的。世上的大多数人并不和你志同道合,你不能仅仅和你喜欢的那类人打交道,将其他人拒之门外,否则你的圈子实在太小,根本没有人可用,谈何善用。有学问的人常常会走向自命清高,自命清高者一般成不了好领导,我们要引以为戒。
要有真正与他人分享利益的气量。大部分人干事业都是利益驱动的,这是正常的心态。领导者要努力给每个人恰如其分的利益(金钱、地位、荣誉等),而不只是利用他们,这样才能树立信誉,长期把人才凝聚在一起。
回馈于社会。一个成功的人必定从社会中获取了许多有价值的东西,所以他也应该更多地回馈于社会。欧美国家有一种不成文的习俗,许多人功成名就之后总是积极地从事慈善事业,尽管某些人在赚取财富的时候令人讨厌,但是他通过慈善活动把财富很合理地归还给社会,产出了很高的社会价值。
社会责任心不是以金钱来衡量的,而是以道德来衡量的。才华出众的人大部分都是社会中的强者,他们比普通人更明白怎样使社会变得更加美好。我们随时随地都有能力去做使社会更加美好的事,而不必等到我们功成名就之后。
具有社会责任心会让人们变得高尚,这是金钱买不来的。
8. 小结,引申,思考……
成为优秀的人才并不意味着会发财,正当发财主要靠的是商业头脑。尽管我也渴望拥有巨大的财富,但是我缺乏敏锐的商业头脑,目前只能算是个高级白领、活得不错而已。等我将来发财了,再讲讲“发财之道”。
成为优秀的人才并不意味着幸福,幸福的人也不一定要求优秀。对幸福影响最大的通常是人的缺点而不是优点。一张白纸上的一个污点远比脏纸上的许多污点醒目得多,如果你拥有99%的优点,那么你的1%缺点将发挥99倍的效果,足以击毁优秀带来的好处。
在社会这部冗长的“连续剧”里,优秀的人忙碌地演戏,普通人看戏,这叫生存而不是生活。当你强壮到既不必演戏也不必看戏的时候,真正的生活开始了。
我强烈反对年轻人流传“平平淡淡才是真”这样的颓废语录,因为他们还不知道什么是“人生真谛”的时候,就把青春平淡地消耗了。只有先努力成为优秀的人才,才有实力享受平淡是真的生活。
思考与练习:
请你和同事们、朋友们交谈你所在城市的软件白领现状(包括就业状况、薪资待遇、住房、家庭生活、健康状况)。你对自己的状况满意吗?你还有学生时代的抱负吗?你如何把握自己的未来?
你对自己的表达能力满意吗?你是否意识到表达能力对你职业发展的影响?请设法在日常工作中有意识地锻炼表达能力。
规划你的职业发展路线,描绘适合你自己的强势知识结构,制定学习计划并立即行动,将你的事业建筑在强势知识之上。
LoadRunner 性能测试心得
操作流程
第一次没用经验,直接就上马,没有执行性能测试操作流程。
应该采用“测试计划->设计测试用例->录制测试脚本->执行测试->分析测试结果”的流程。
测试计划
分析应用系统、定义性能测试目标(确定需求对应的度量指标)、计划LoadRunner执行过程。
设计测试用例
分析测试需求、确定测试负载、确定用例细节。下面这个表格形式是从网上摘抄来的,觉得可以借鉴。
| 测试序号 | | 脚本名称 | | ||
| 测试目的 | | ||||
| 测试数据及条件 | | ||||
| 脚本描述 | 描述 | | |||
| 录制步骤 | | ||||
| 事务 | | ||||
| 同步点 | | ||||
| 测试场景描述 | 场景1:2个用户并发、循环1次(测试报告文件名称) 场景2:7个用户并发、循环1次(测试报告文件名称) … | ||||
| 测试结果验证 | | ||||
| 测试环境恢复 | | ||||
录制测试脚本
在录制脚本时,要注意几点:
1、 录制虚拟用户脚本;
2、 优化脚本(针对当前测试用例);
3、 在单击模式下运行测试脚本;
4、 将虚拟用户合并到场景中;
5、 关于LoadRunner调试:在需要设置参数或者关联的地方,可能因某些原因,不能正常获取,那么可以利用LoadRunner的打印函数+调试(F)来便于我们分析数据,eg:lr_log_message("parent dclass id:%s",lr_eval_string("{parentId}"));
6、 关于使用“手工关联”的几点注意:
A. 若关联的字符串较长(超过255个字符),则需要在Action后增加参数长度申明,eg:web_set_max_html_param_len("1024");
B. 若不了解关联的左右边界,可以通过“Tree View”方式浏览,选择“Server Response”,找到提交的字符,如图:

C. 关联函数一定要放在页面之前申明,
eg:web_reg_save_param( "dataStateModify", "LB=name=\"state:data/ModifyDClass\" value=\"", "RB=\"", "Ord=1", "Search=Body", "RelFrameId=1", LAST );
执行测试
执行脚本时,要注意几点:
1、 要运行一个完整的测试场景
2、 要设置Run-Time属性:包括每个虚拟用户执行迭代次数、Think time设置(默认是采用录制脚本时的时间。)
3、 针对虚拟用户执行步骤时间控制,可以在Controller的“tools”->“Options”,如图:

4、 对于浏览器缓存的配置,可以在“Run-time setting”的“Browser Emulation”里设置,如图:

5、 更多“Run-time setting”配置项,如HTTP请求连接超时时间(默认120s)等可以在“Perferences”->“Options…”如图:

6、 对于使用了参数的脚本,若参数分配是采用“Unique”+“Once”方式的(适用于按序分配参数记录,每个虚拟用户分配一次),则参数行数必须大于或等于虚拟用户个数,否则会报“insufficient records for param…”之类的异常;还有一个情况,是在执行测试中发现的,不知道算不算LoadRunner的bug。即第一次参数记录有2个,设置虚拟用户2个正常运行;再修改参数记录为5个,设置虚拟用户5个,不能执行,也是报上述错误。经不断尝试,发现为这个脚本创建一个新的场景就能正常运行了。
7、 在运行测试时候,发现LoadRunner会出现集合点失效的现象,即设置了集合点,但是并发用户并非等待到一起运行,先加载的虚拟用户就会先运行直至结束,唯一解决办法就是需要重新启动场景。
分析测试结果
1、 这个是本次性能测试的弱项,还需要进一步提高。
2、 由于资源记录情况,是针对整个脚本运行场景的,他没有与单个事务关联(或许是我还没有找到。。)所以事务的资源消耗情况,是采用整个场景完整运行的资源消耗数据的。(不够精确)
测试经验和教训
1、 前期测试计划和测试用例一定要做好,这样才有章可循,提高录制脚本和执行测试效率;
2、 测试计划一定要参照应用系统和实际运行情况来制订,做到有的放矢,不要拍脑袋;
3、 一定要科学合理的评估测试总工作量(按照测试流程制订测试计划来评估);
4、 当脚本录制确认无误(通过回放来判断),运行场景却总是报莫名其妙的错时,可以尝试创建脚本的新场景来运行;
5、 录制的脚本、场景数据、分析报告等文件一定要有较好的命名规范,做到看文件名即明白这个文件是什么,便于管理;
6、 不要丢弃原来旧的测试结果;(这样,可以用于不同版本进行对比)
查看Oracle版本
select banner from sys.v_$version;
返回如下:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
2.查看选项信息
select * from sys.v_$option;
返回如下:
Partitioning TRUE
Objects TRUE
Real Application Clusters FALSE
Advanced replication TRUE
Bit-mapped indexes TRUE
Connection multiplexing TRUE
Connection pooling TRUE
Database queuing TRUE
Incremental backup and recovery TRUE
Instead-of triggers TRUE
Parallel backup and recovery TRUE
Parallel execution TRUE
Parallel load TRUE
Point-in-time tablespace recovery TRUE
Fine-grained access control TRUE
Proxy authentication/authorization TRUE
Change Data Capture TRUE
Plan Stability TRUE
Online Index Build TRUE
Coalesce Index TRUE
Managed Standby TRUE
Materialized view rewrite TRUE
Materialized view warehouse refresh TRUE
Database resource manager TRUE
Spatial TRUE
Visual Information Retrieval TRUE
Export transportable tablespaces TRUE
Transparent Application Failover TRUE
Fast-Start Fault Recovery TRUE
Sample Scan TRUE
Duplexed backups TRUE
Java TRUE
OLAP Window Functions TRUE
Block Media Recovery TRUE
Fine-grained Auditing TRUE
Application Role TRUE
Enterprise User Security TRUE
Oracle Data Guard TRUE
Oracle Label Security FALSE
OLAP TRUE
Table compression TRUE
Join index TRUE
Trial Recovery TRUE
Data Mining TRUE
Online Redefinition TRUE
Streams Capture TRUE
File Mapping TRUE
Block Change Tracking TRUE
Flashback Table TRUE
Flashback Database TRUE
Data Mining Scoring Engine FALSE
Transparent Data Encryption TRUE
Backup Encryption TRUE
Unused Block Compression TRUE
查看Linux系统版本命令
LSB Version: :core-3.0-ia32:core-3.0-noarch:graphics-3.0-ia32:graphics-3.0-noarch
Distributor ID: RedHatEnterpriseAS
Description: Red Hat Enterprise Linux AS release 4 (Nahant Update 4)
Release: 4
Codename: NahantUpdate4
[root@localhost apache-tomcat-6.0.14]#
2009年2月24日星期二
Thunderbird最小化到系统托盘
Thunderbird最小化到系统托盘插件:bosskey
英文版下载地址:https://addons.mozilla.org/en-US/thunderbird/addon/5462中文版下载地址:https://addons.mozilla.org/zh-CN/thunderbird/addon/5462
支持Thunderbird version 2.0.0.19 (20081209)
有需要的朋友可以下载。
2009年2月18日星期三
tomcat线程数配置
minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10
maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75
acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100
enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
connectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数,应同时加大这两个参数。
web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。Unix中如何设置这些参数,请参阅Unix常用监控和管理命令
tomcat4中的配置示例:
enableLookups="false" redirectPort="8443"
acceptCount="1024" debug="0" connectionTimeout="30000" />
2009年2月3日星期二
dos 命令符号大揭秘
- “,”:取消所有属性。eg:C:\>DIR, 将显示所有文件;
- “.”:所有。eg:C:\COPY . 等同于 COPY *.*;
- “|”:自动回答批处理命令的提问。eg:ECHO Y|DEL C:\Windows\Temp\*.*在询问是否真的 删除时自动回答"Y";
- “+”:内容追加。eg:Copy 001.txt+002.txt 003.txt把001.txt和002.txt拷贝成为003.txt文 件;
- “:”:注释。eg:在DOS批处理文件中我们常使用REM命令来表示注释,可以用它替换;
- “&&”:只有该符号前的命令运行成功,才能运行符号后面的命令;
- “||”:只有该符号前面的命令失败,才能运行符号后面的命令;
- “&”:分隔命令行上的多个命令;
- “()”: 组命令;
- “^”:转义符,允许将命令符号当作文本键入;
- “;”:或者。eg:echo %date:~4,10% :显示当天的日期;
- “,”:分隔参数
@
\\隐藏命令的回显。
~
\\在for中表示使用增强的变量扩展;
在set中表示使用扩展环境变量指定位置的字符串;
在set/a中表示按位取反。
%
\\使用两个%包含一个字符串表示引用环境变量。比如一个%time%可以扩展到当前的系统时间;
单个%紧跟0-9的一个数字表示引用命令行参数;
用于for中表示引用循环变量;
连续的两个%表示执行时脱为一个%。
^
\\取消转义字符,即将所有转义字符的转义作用关闭。比如要在屏幕显示一些特殊的字符,比如> >> | ^等时,就可以在其前面加一个^符号来显示这个^后面的字符了,^^就是显示一个^,^|就是显示一个|字符了;
在set/a中是按位异;
在findstr/r的[]中表示不匹配指定的字符集。
&
\\命令连接字符。比如我要在一行文本上同时执行两个命令,就可以用&命令连接这两个命令;
在set/a中是按位与。
*
\\代表任意个任意字符,就是我们通常所说的"通配符";比如想在c盘的根目录查找c盘根目录里所有的文本文件(.txt),那么就可以输入命令"dir c:\*.txt";
在set/a中是乘法。比如"set/a x=4*2",得到的结果是8;
在findstr/r中表示将前一个字符多次匹配。
()
\\命令包含或者是具有优先权的界定符吧,比如for命令要用到这个(),我们还可以在if,echo等命令中见到它的身影;
-
\\范围表示符,比如日期的查找,for命令里的tokens操作中就可以用到这个字符;
在findstr/r中连接两个字符表示匹配范围;
-跟在某些命令的/后表示取反向的开关。
+
\\主要是在copy命令里面会用到它,表示将很多个文件合并为一个文件,就要用到这个+字符了;
在set/a中是加法。
|
\\管道符。就是将上一个命令的输出,作为下一个命令的输入."dir /a/b | more"就可以逐屏的显示dir命令所输出的信息;
在set/a中是按位或;
在帮助文档中表示其前后两个开关、选项或参数是二选一的。
:
\\标签定位符,可以接受goto命令所指向的标签。比如在批处理文件里面定义了一个":begin"标签,用"goto begin"命令就可以转到":begin"变迁后面来执行批处理命令了。
" "
\\界定符,在表示带有空格的路径时常要用""来将路径括起来,在一些命令里面也需要" "符号;
在for/f中将表示它们包含的内容当作字符串分析;
在for/f "usebackq"表示它们包含的内容当作文件路径并分析其文件的内容;
在其它情况下表示其中的内容是一个完整的字符串,其中的>、>>、<、&、|、空格等不再转义。
/
\\表示其后的字符(串)是命令的功能开关(选项)。比如"dir /s/b/a-d"表示"dir"命令指定的不同的参数;
在set/a中表示除法。
>
\\命令重定向符,将其前面的命令的输出结果重新定向到其后面的设备中去,后面的设备中的内容被覆盖。比如可以用"dir > lxmxn.txt"将"dir"命令的结果输出到"lxmxn.txt"这个文本文件中去;
在findstr/r中表示匹配单词的右边界,需要配合转义字符\使用。
>>
\\命令重定向符。将其前面的命令的输出结果重新定向到其后面的设备中去,后面设备中的内容没有被覆盖。
<
\\将其后面的文件的内容作为其前面命令的输入。
在findstr/r中表示匹配单词的左边界,需要配合转义字符\使用。
=
\\赋值符号,用于变量的赋值。比如"set a=windows"的意思意思是将"windows"这个字符串赋给变量"a";
在set/a中表示算术运算,比如"set /a x=5-6*5"。
\
\\这个"\"符号在有的情况下,代表的是当前路径的根目录.比如当前目录在c:\windows\system32下,那么你"dir \"的话,就相当与"dir c:\"
在findstr/r中表示正则转义字符。
''
在for/f中表示将它们包含的内容当作命令行执行并分析其输出;
在for/f "usebackq"中表示将它们包含的字符串当作字符串分析。
.
\\
在路径的\后紧跟或者单独出现时:
一个.表示当前目录;
两个.表示上一级目录;
在路径中的文件名中出现时:
最后的一个.表示主文件名与扩展文件名的分隔。
&&
\\连接两个命令,当&&前的命令成功时,才执行&&后的命令;
||
\\连接两个命令,当||前的命令失败时,才执行||后的命令。
$
\\在findstr命令里面表示一行的结束。
``
在for/f中表示它们所包含的内容当作命令行执行并分析它的输出。
[]
在帮助文档表示其中的开关、选项或参数是可选的;
在findstr/r中表示按其中指定的字符集匹配。
?
\\在findstr/r中表示在此位置匹配一个任意字符;
?在路径中表示在此位置通配任意一个字符;
紧跟在/后表示获取命令的帮助文档。
!
\\当启用变量延迟时,使用!!将变量名扩起来表示对变量值的引用;
在set /a中表示逻辑非。比如set /a a=!0,这时a就表示逻辑1。
