第一篇:软件工程职业规划
软件工程职业规划
作者:201124070142海师大
一:前言
大学曾是我梦想中的天国,因为这里将是我们走向社会的门槛,也是人生一大转折点。在科技高速发达的21世纪,大学生也是越来越多,市场上的竞争也是越来越大,随着中国在国际上的地位的提升,我国越来越需要那些能和国际接轨具有专业素质的人才。记得葛优在电影《非诚勿扰2》里说过:“21世纪什么最重要?——人才!”是的,在这个社会,我们只有不断的提升自己的能力,以便于更好的适应高速发展的潮流。高中三年的苦读,终于来到了大学,现在也是时候对自己的人生做出一定的规划。
二:自我评估
人们常说:人最大的敌人是自己!是的,无论从事什么样的职业,首先要对自己有个深刻的了解,只有这样,在未来的工作以及生活中,我们才能更好的进步,更好的适应社会,更好的发展。
我是从小四肢残疾,和许多电视里的那些残疾人一样,在别人眼里我是个非常乐观,而且很乐于助人的人,在平时的生活中我总是能和同学们打成一片,对待什么人都很真诚,有点小幽默,但我更紫环一个人的时候,事实也是这样的,只要我身边没有人的话,我自己可以呆一天,我喜欢幻想,喜欢沉溺于自己幻想的国度里,当然很多时候我会利用独处的时间,来反思自己平时的所作所为。
1、性格兴趣爱好
我的性格在别人看来是比较外向的,和别人在一起的时候话比较多,幽默。喜欢跟别人交朋友,平易近人热情。同时我又是个很感性的人,很容易被一些故事或者情节感动的流泪。我这个人特别的怀旧,也很恋家。平时喜欢看书,当然以前是没有机会看书的,上了大学以后,我的业余生活基本都是遨游书海,也喜欢写东西,特别是歌词,有时候也写小品、情景剧之类的剧本。喜欢听歌,也喜欢唱歌。由于自身田间,对体育没多大兴趣,偶尔也看NBA。
喜欢的书籍:《平凡的世界》《穆斯林的葬礼》《做最好的自己》《诛仙》《活着》
心中的偶像:周恩来
2、我的优点
能吃苦,和周围的人相处的很好,同学们都很信任我。愿意去学习,平时的生活有规律,做事踏实。有时候也喜欢研究东西,很自觉,自学能力比较强,对人真诚。有毅力能坚持。每隔一段时间会制定计划,并理智的面对自己有没有完成。
3、我的缺点
做事不细心,有时候考虑事情不周全,做事不喜欢深究,有点喜欢表现自己,有时候会过于自信。很多事没有主见,有点从众心理,做事思前思后,不够果断,平时有点过于纵容自己,很不注重自己的形象问题,话太多,想没用的东西的时间用的太长。动手能力不强。创新意识较弱。
三、职业评估
我学的专业是软件工程,说实话,在这之前我根本就不知道软件工程到底是干什么的,也不知道为什么会选择它,开始的时候有点后悔的感觉,但后来想,既然我选择了它,就要认真的对待,绝不允许自己有任何不满心理,我只能踏踏实实的学习,努力让自己在这方面有所成就,开学一个学期以来,对软件工程这个专业以及他的关于也有所了解了,这些天也思考了自己未来的路,我觉得自己还是适合做一个软件工程师。那么接下来我就说说自己的打算以及软件工程师的一些知识吧。
1、软件工程师所处的环境(就业前景)
2011年据信息工程部发布电子信息产业想人才需求到120万,而目前从事这一行业,目前在内地各高校培养的软件专业人才统计显示,每年只有不足60万毕业生能够适用各类企业的需求。人们都说它是个 “朝阳职业”,在现在我国很多大公司对高级软件工程师的需求是供
不应求的。在未来几年内肯定是很吃香的职位。软件工程师理想的状态是走向软件架构师、项目经理、研发经理等职位。“薪酬水平肯定是看涨的,而且这个职业会在IT行业中占有很重要的位置。”郝健告诉那些准备在软件行业求职的人说。那么软件工程师的报酬到底如何呢?
一般在一级城市(如北京、深圳、上海等)初-高级软件工程师的月薪待遇在4000-20000之间;内地其他省会城市一般月薪在3000-10000之间,属于办公室白领职业,享受正规的五险一金,工作性质可以接触社会各方面的行业事件,职业风险低,稳定程度高,终身职业。
2、职业分析
软件工程师从扮演的角色来看大致可以包括以下这些:一种是既懂技术又懂管理的软件高级人才,他们更注重项目进度管理统筹;另一种是系统分析及设计人员,主要职责是分解一个项目或程序,使之变成一个一个相对独立的模块交程序员开发,最后还负责集合所以功能模块,还有统一项目中的所有规范等。还有一种就是称为一般的软件工程师或程序员。软件工程师是在IT中最普通的职位,几乎每个IT企业不论你做什么内容,或多或少都需要这样的人才。而且它主要进行软件前期的项目需求的分析,然后对项目进行风险评估并试图解决这些风险,然后开始进行软件的开发,后期对软件的进度做相关的评估。最重要是的软件工程需根据客户所需求的、所达到的目标而设立,也要考虑用户的用途、习惯、项目进行前期评估。
3、企业对软件工程师的要求随着外包开发行业快速发展,对“人才”在代码和文档方面的规范性、技能和工具的熟练程度要求越来越高;Java和.NET技术在市场上平分秋色,都有大量的岗位需求,同时值得庆幸的是二者在应用层面上的技术差异越来越少;软件开发企业对开发人员的基本技术素养强调得越来越多,例如:面向对象的程序设计思想和代码组织方法、HTML/CSS/JavaScript客户端技术;为了保证质量和工期,企业中大量使用各种框架技术,要求开发人员至少熟悉一种框架技术;CMS ,MIS、OA、ERP、CRM、系统集成、物流、进销存、电子政务、网站建设这一类B/S系统,成为软件工程师需求最大的业务领域。
4、成为软件工程师所要具备的能力
见习程序员
1、计算机相关专业毕业;英语通过国家四级。
2、具有较强的学习能力,可以编写代码,达到公司的工作要求。初级程序员
1、本科学历,半年以上工作经验;英语通过国家四级。
2、达到工作承担要求;具有一定的沟通能力和工作责任心。
技术能力要求
1、负责编写代码,掌握一种主流语言/开发工具,一种主流操作系统,一种主流数据库。
2、了解和掌握开发作业(PD设计、编码和测试等)的规范和技巧。
3、所编写的代码质量较好。
4、能够按照要求编写文档,文档结构条理清晰,内容详实准确。
5、具有独立理解所担当模块的业务理解能力和问题阐述能力。
6、能阅读非中文技术文档。
高级程序员
1、获得程序员资格1年以上;或满足程序员级别标准,2年以上相关行业工作经验。
2、完成年度工作量指标;具有较强的沟通能力和责任心。
3、所承担的项目满意度达到满意以上
职业要求
1、精通一种主流语言及对应的开发工具;精通数据结构。
2、具有较好的业务理解能力和技术调查能力。
3、编写高质量代码并具有代码审查能力。
4、具有详细设计能力。
5、熟悉系统测试工具,对系统问题具有改善的能力。
6、能够带领2个以上员工开展工作,成功领导过3个以上不少于5人月的项目/模块的团队项目。
7、了解质量管理体系和项目管理知识。
软件工程师
1、获得高级程序员资格2年以上;或满足高级程序员级别标准,4年以上相关行业工作经验。
2、完成年度工作量指标;具有较强的客户沟通能力。
3、担当过一个20人月以上的项目或累计超过60人月项目的技术负责工作。
4、所负责的项目客户满意度达到满意以上。
技术能力要求
1、精通并熟练运用2种以上的开发工具,至少一种数据库知识,至少一种操作系统知识。
2、能够很快完成新项目的技术调查工作,能够完成复杂算法的设计,能够设计可重用的和柔韧的软件结构。
3、具有系统设计能力及系统提案能力。
4、对系统或项目的技术框架有深入的认识和较丰富的经验。
5、具有某一领域的行业知识。
6、具有项目领导能力。
7、掌握质量管理体系和项目管理知识。
资深软件工程师
1、获得软件工程师资格2年以上;或满足软件工程师级别标准,6年以上相关行业工作经验。
2、完成年度工作量指标;具有较强的客户沟通能力。
3、担当过一个50人月以上的项目或累计超过100人月项目的技术负责工作。
4、带领的项目客户满意度满意以上。
5、完成年度培训工作。
技术能力要求
1、精通并熟练运用2种以上的开发工具,至少一种数据库知识,至少一种操作系统知识。
2、具有整体系统设计能力及系统提案能力。
3、具有较强的技术筹划能力、技术指导能力和处理疑难问题的能力。
4、深入了解某一领域的行业知识。
5、具有大型项目领导能力。
6、熟练掌握质量管理体系和项目管理知识,并能够推过程改进。
主任软件工程师
1、获得资深软件工程师资格2年以上;或满足资深软件工程师级别标准,8年以上相关行业工作经验。
2、5年项目负责人以上经验,累计超过120人月的技术负责人工作。
3、带领的项目客户满意度满意以上。
4、完成年度培训工作。
5、具有很强的沟通能力,问题判断与解决能力,创新能力。
技术能力要求
1、精通至少一种主流编程语言。掌握至少一种数据库或至少一种中间件。熟练掌握至少一种操作系统。
2、熟练掌握软件需求分析/大型项目的策划。
3、熟练掌握软件的系统设计。
4、熟悉软件的高级项目管理和质量控制,具有分析和规避重大质量问 题的能力。
5、精通至少一种部门项目相关的业务知识。
6、职称管理工作和相关标准将随着公司的发展而不断调整完善。
四、制定成功计划
虽然弄上面的资料很简单,但最重要的还是要做,到底怎么样去做,我要制定一个计划,大学四年一定得克制住自己按照自己的在计划来要求自己
首先在大一,要先把英语四级给过了,绝不能让它后来成为我的累赘,然后很好的打下自己的基础,下学期要学C语言,买电脑后自己课下一定要试着练习,让自己熟悉。平时多看书,不仅要看有关专业的,还好看其他的书,因为设计程序必须对其他的领域有所了解才行大二大三的时候,专业课会很多一定要认真学习每一门专业课,绝对不能挂科,熟悉操作。大二的时候会找些兼职来做,不仅是为了挣钱,也可以积累一些社会经验。在此期间,冲刺英语六级,随时提醒自己,不能松懈。得学会和同学一起交流,并且在一起开发一些小软件以便提升团队合作的能力。
每年的暑假都要晚些回家,甚至有可能不回家,利用这些时间去打工,最好可以去一家软件开发公司,或者跟计算机有关的都可以。
毕业以后先到一线城市的一家差不多的软件公司干几年积累经验,然后回到自己的家乡去扎根。当然肯定能做到怎样就做到怎样,尽自己最大的努力。软件工程是一个随着时间的变化,每时每刻都会有新的技术诞生,所以在工作和学习的过程中我会经常关心国内外关于这些新技术的发展。让自己适应这个动态的职业。参加工作后,一定要努力扎实的去工作,绝对不能忘记在工作中学习,吸取经验与教训。与同事与老板好好相处,多向他们学习,为自己以后的路打基础。
我相信经过自己不懈的努力,我一定能实现我的梦想!加油吧!从现在开始!!!
第二篇:《软件工程职业规划书》
得分:
大 学 生 职 业 生 涯
规
学
班
学
姓
划 设 计 书 院级号名
5一、引言
不少人都曾经这样问过自己:“人生之路到底该如何去走?”记得一位哲人这样说过:“走好每一步,这就是你的人生。”是啊,人生之路说长也长,因为它是你一生意义的诠释;人生之路说短也短,因为你生活过的每一天都是你的人生。我愿意将我的人生规划,把宏伟的目标分成每天的一小步,一小步一小步的走下去,总会有达到的一天。
眨眼间,我从一个还对大学校园有些懵懂的新生,成长成了一名成熟的大三学生了。大三时大学中的关键一年,这一面我们要面对人生第二个分水岭——工作or考研。听着老师们讲07级学长工作的签约率,不禁让我们打了寒战。全班除保研考研的同学外,仅仅有两名学生跟公司签了合约。这一方面表现这两名学长是多么的优秀,另一方面又反应在师大的牌子下,软件工程专业那么的无力与无奈。
这些要等到大四考虑显然晚了,其实大三的我们,许多东西已成定数,也有时会发出心有余而力不足的哀叹。不过亡羊补牢为时不晚,我相信在我的职业生涯规划中我能给自己人生定位,给自己一个奋斗的方向。
二、自我分析
自我分析小结:
个人认为大学教育与市场需要脱钩现象严重,所以一些除专业知识外的能力 培养不足。但我天性好学,相信能很快融入工作环境中。
三、职业分析
软件工程师是一个非常辛苦也很抢手,同时很挣钱的工作。在这里
我们要精益求精,满足公司要求,与时俱进,一定能打下一片属于自己的天空。
三、职业定位
我的职业目标: 软件工程师实现这一职业目标的SWOT分析: 优势因素(Strengths):学习中等,担任学生会干部,班级群众基础好,父母、亲人、班主任、任课老师关爱,动手能力较强。
劣势因素(Weaknesses):成绩不够好,对其它知识的拓展不足。机会因素(Opportunity):现在新兴的软件公司蓬勃发展,就业前景广阔。威胁因素(Threats):能力不足,需要锻炼。
五、计划实施
详细执行计划如下:现在我是大三学生,还有一年半毕业。我给自己做的规划如下:
1.确定职业目标和路径
①近期职业目标:在校期间(2011年~2012年)
A.在校期间完成基本的学业,掌握好基础课,为考研作准备。通过英语四级考试,利用课余时间深入的学习软件编程技术(C++,JAVA),LINUX系统,数据库语言,汇编语言、数据结构、计算机基础原理,提升自己的专业素质。
B.积极的参加各项活动,提高自己沟通能力,语言表达能力,交际能力,团队合作能力。
C.利用假期时间找一些小型的公司工作实践,在实践中发现问提,提高自己,了解最新的行业发展动态,学习最新的技术。
② 中期职业目标:毕业后(2012年~2017年)
利用四年工作实践的时间熟练的掌握软件编程,积累大量的软件编程经验,学习企业管理知识,关注最新的行业发展动态新技术的应用,成为一个出色的软件工程师,自己接一些小项目,积累一些资金。③ 长期职业目标:(2017年~2022年)
尝试和一些志同道合的专业人员朋友合作创业,以自己的成熟技术和良好的信誉为核心竞争力,在同行中拥有自己的优势,一点点的积累经验,扩大自己的客户群,使公司一点点的发展壮大。
六、评估修正
职业生涯规划是一个动态的过程,必须根据实施结果的情况以及环境的变
化进行及时的评估与修正。
1.评估修正时间
如:规划实施过程中,我将定期(半年或一年)评估规划,或者出现特殊情
况时,随时评估并进行相应的调整。
2.评估修正依据及内容
如:我可能遇到内部(自身情况)、外部(社会、家庭环境、机遇等)情况的变化及不可抗拒的因素,如果出现这种情况,将如何及时评估、灵活调整,并如何主动适应各种变化,不断修正、优化自己的职业生涯规划。
七、结束语
计划固然宏大而美好,但更重要的,在于其具体实践并取得成效。只说不做,所谓的职业规划目标就如空中楼阁般美好却遥不可及,到头来只是一个安慰自己的美丽谎言。然而,现实是未知多变的,定出的目标计划随时都可能遭遇问题,要求有清醒的头脑,巨大的勇气,克服困难,取得成功。也许最终我们的目标也不能达成,但至少我们努力过,奋斗过,拼搏过,人生也便无悔。
我的职业选择——IT行业是一门应用计算机等现代化技术学科,这是一门新兴学科。随着社会信息化的深入,各行业大都需要软件工程专业人才,而且薪金很高。学生毕业后可以从事软件设备和信息系统的设计、应用开发以及技术管理等。比如,做软件工程师,设计开发一些软件、通信器件;做软件工程师,设计开发与硬件相关的各种软件;做项目主管,策划一些大的系统,这对经验、知识要求很高;还可以继续进修成为教师,从事科研工作等。
中国IT行业起步至今有十年,很年轻。新鲜的事物、朝阳的产业总是备受注目。正是这个原因,计算机专业迅速成为高校的热门专业,不少同学削尖又再削尖了脑袋往这个象牙塔里的象牙顶钻,或为兴趣,或为谋生掌握一门技能,或为前途更好更快地发展。
相比前几年的计算机专业的火爆,近年来对这个专业的选择渐趋于了理性和客观。学生和家长考虑更多的是一种基于更利于个人长远自 发展的出发点。职业方向的选择,想来是更多应届毕业生就业时所想的事情,常看到论坛上不少临近毕业的计算机专业学生发出迷茫、困惑的感叹,不知道是否应该将计算机这条路继续走下去。
太多太多关于这个行业的言论,媒体频频爆出的各类关于IT从业者身心受到莫大伤害的大小新闻,IT从业者工作很苦很累,繁琐枯燥的程式、技术心理与现实状态的脱节、加班很普遍、这一行更新很快,业余时间也是常用来学习新的专业技术,没有节假日、没有空余时间,不能陪亲人朋友,工作的性质使生活多了一些单调,生活仿佛学生时代一般的两点一线。远没有想象中的那样绚丽多彩:张扬的个性源自技能的自信,时尚现代的生活方式由于富余的回报,“办公室政治”的远离,“自由”的思虑空间„.,只是现在看来,现实来的更多一些了吧。更重要的是,这个行业,似乎有则潜在的规律:职业生涯短暂。所以身未老心先行,思虑着“希望的路”到底应该怎样转弯,IT管理、IT销售、或者横下一条心从头来过去创业、或者干脆转行„.,到底干什么,仍旧在徘徊中、在迷茫,之前几年的代码人生似乎恍然被抹去一概不计,只留下空落落的一些什么回忆。
我认为每个人心中都有一座山峰,雕刻着理想、信念、追求、抱负;每个人心中都有一片森林,承载着收获、芬芳、失意、磨砺。一个人,若要获得成功,必须拿出勇气,付出努力、拼搏、奋斗。成功,不相信眼泪;成功,不相信颓废;成功不相信幻影,未来,要靠自己去打拼!
第三篇:程序员的职业规划就像软件工程
程序员的职业规划就像软件工程
那家公司主要做些MIS系统,陈皓不仅获得了一定的实际工作经验和能力的锻炼,还习惯了软件公司高节奏、快学习、充满挑战的环境和氛围。这造成了他毕业后到银行工作时极度的不适应——效率低下,工作毫无激情,工作当中充满了相当复杂的人际关系和政治斗争。
最主要的是,由于初到银行,很多技术和产品从未见过,而主要实施却由外面公司来完成,银行自己内部中有经验的人又不愿意与人分享知识。虽然可以拿很多红包,整天也很清闲,不是看报纸就是打游戏,但陈皓感觉到那并不是自己喜欢的工作,没有任何激情和斗志可言。和大四时在那个软件公司中的技术氛围相比,完全就是天壤之别。
所以在银行工作的这两年,陈皓天天都在彷徨和思想斗争,“因为没有自己的职业规划,所以,浪费了至少两年的时间”。最后,陈皓打定信念,决意离开去寻找自己的道路。
“因为我是在一个相对比较闭塞的城市(昆明),所以,我要离开银行的决定遭到了父母、同学、朋友、同事,几乎是身边所有人的反对。但最终,我还是一意孤行离开了银行,远走他乡到上海这座大城市去寻找自己的人生道路。” “从此,我走上了一条不可回头,并和以前完完全全不一样的道路。”从国企到民企再到外企,从打杂到程序员再到高级程序员到team leader到技术主管,从小酒店MIS到企业OA到全国性的大系统到世界领先的分布式计算平台集群软件,“若干年过去了,经历了高速的发展和获得了很多不同的经历,但唯有当时选择离开银行这件事情让我至今都为之兴奋。迄今为止,这是我自己觉得最最有成就感的事情。”
正如陈皓所说,“也许,最让一个人感到最有成就的事情,不是他做成了什么,而是他选择了什么。” 认识自己
多年打拼后,陈皓虽已是技术主管,但走的那些弯路,浪费的两年时间,一路中的心酸让他明白了很多道理。“今天,我对许多刚上路的朋友都会说,人生的规则很重要,从上大学时就要好好规划,这对国人来说尤其重要。因为对于国人来说,人生的头20年都是被别人规划的,导致了自己根本不会给自己做规划。这点是相当危险的。”
人生短暂,属于自己黄金的时间不多,如果把太多的时间浪费在寻找道路和方向上,很有可能会导致一事无成,要及早确定自己的规划,然后照着这个规划坚定不移的去执行。陈皓认为,做规划时最重要的是两个方面:一是清楚地认识自己的能力、优势和性格;二是确定自己的专业和想从事的行业。只有在确定这两方面后,才能做出自己的职业规划。
两方面看起来很简单,但认识自己并不是一件容易的事情。陈皓认为应当从下面十五个方面审视和认识自己,帮助自己确立人生规划:A)所掌握的知识,B)问题的解决能力、判断能力和分析能力,C)对待困难的心态,D)团队合作能力,E)表达能力和语言组织能力,F)创造和创新能力,G)沟通能力,H)自己的性格内向还是外向,I)是否有坚韧不拔的专研精神,J)自己的弱点和性格上的缺陷,K)学习能力,获得知识的能力,L)领导组织能力,M)目前自己能够进入的企业,N)目前自己在社会中的地位,O)目前自己的竞争实力。
职业规划就像软件工程
确定了自己的行业和专业领域后,接下来的事情应该是:1)努力掌握这个行业的知识,2)用最短的时间了解这个专业和行业更为具体的各个子方向。然后在实际过程中再认识自己。比如,选择了计算机行业,应该尽量地尝试软件、硬件、网络、娱乐、媒体等计算机行业不同方向的工作,如果从事软件,又分Web、系统、项目、ERP、CRM、数据库、嵌入式……,在工种上又分开发、测试、技术支持、流程管理,项目管理,系统架构,售前,售后……。当然,我们并不需要去尝试所有的工作或工种才能知道自己适合什么,我们完全可以向从事不同方向的人咨询并结合自我认识来做出判断。
在这个过程中,迷茫的摸索可能是很难避免的。能够及时得到前人的指点可能会是一个捷径,征求前人的建议可以起到参考的作用,快速原型(快速尝试)或许也是好的办法。因为人与人不同,他人的路并不一定适合自己,适合自己的路还要自己去规划,别人是帮不上忙的。
要经常性地跳出自己再来看自己,客观地分析自己的优势和劣势。让自己和别人掂量掂量自己到底几斤几两,了解到自己的长处和特点,然后才能知道自己适合做怎么样的事和并调整自己的职业路线,这是一个“肯定到否定再到肯定”螺旋上升的进化过程。当度过对自己对社会的“陌生期”后,才有谈得上对自己人生和职业的规划。
个人的职业规划就像软件工程。我们都知道软件项目最大的敌人是需求的不明确和需求的大面积变更,同样,在个人的职业规划中,自我需求的不明确和需求的变更也是非常危险的,尤其是在职业计划实施了四五年后需求的变动和改变。只有需求确定以后,才谈得上个人的职业设计的HLD(High Level Design)和LLD(Low Leave Design),以及具体实现。此后随着自身的日益成熟,可以随时为自己的Bug打补丁(Patch)改进自己的职业生涯的设计和实施细则(Enhancement),并为自己加上更多更强的能力(New Feature Requirement)。最终达到软件版本的升级。
第四篇:程序员的职业规划就像软件工程
程序员的职业规划就像软件工程
作者: 王玉磊 出处:Csdn
阅读提示:本文通过陈皓的自身的职业选择经历来说明程序员的职业规划要像软件工程一样要有目标、计划地去实施。
电信、银行等行业一直是许多人非常向往的工作单位,清差厚禄,旱涝保收,陈皓却不以此为然。所以当记者采访他的时候,他连用了两个“最”字来形容他离开银行的成就感。
陈皓毕业后的前两年就职于云南省工商银行,从事银行电信内全国性业务系统开发。后来在全球最大的网格计算/分布式平台软件公司从事研发工作,熟悉Unix系统以及C/C++语言,擅长大型系统软件需求分析、设计、架构、实施和维护,目前是某全球金融信息数据处理公司的技术主管。
随波逐流
回想当初,陈皓颇有感慨。还在大三的时候,他就被系里优先推荐给了工行。那时他参与了系上的一个项目(用HTML+Java开发一个在线教学课件),由于当时国内根本买不到HTML和Java的书,而学校也没有上网条件,所以关于HTML和Java对系里的老师都是比较新的东西,当开发完成后,系里对此评价比较高。因此就在大三下学期把陈皓推荐给了工行。
由于早早地被银行“预定”,所以陈皓的大四生活很自由,整个一年他基本是在一家很小的软件公司打工度过的。就是在那家公司工作的经历,让陈皓后来产生了离开银行的念头。
那家公司主要做些MIS系统,陈皓不仅获得了一定的实际工作经验和能力的锻炼,还习惯了软件公司高节奏、快学习、充满挑战的环境和氛围。这造成了他毕业后到银行工作时极度的不适应——效率低下,工作毫无激情,工作当中充满了相当复杂的人际关系和政治斗争。
最主要的是,由于初到银行,很多技术和产品从未见过,而主要实施却由外面公司来完成,银行自己内部中有经验的人又不愿意与人分享知识。虽然可以拿很多红包,整天也很清闲,不是看报纸就是打游戏,但陈皓感觉到那并不是自己喜欢的工作,没有任何激情和斗志可言。和大四时在那个软件公司中的技术氛围相比,完全就是天壤之别。
所以在银行工作的这两年,陈皓天天都在彷徨和思想斗争,“因为没有自己的职业规划,所以,浪费了至少两年的时间”。最后,陈皓打定信念,决意离开去寻找自己的道路。
“因为我是在一个相对比较闭塞的城市(昆明),所以,我要离开银行的决定遭到了父母、同学、朋友、同事,几乎是身边所有人的反对。但最终,我还是一意孤行离开了银行,远走他乡到上海这座大城市去寻找自己的人生道路。”
“从此,我走上了一条不可回头,并和以前完完全全不一样的道路。”从国企到民企再到外企,从打杂到程序员再到高级程序员到team leader到技术主管,从小酒店MIS到企业OA到全国性的大系统到世界领先的分布式计算平台集群软件,“若干年过去了,经历了高速的发展和获得了很多不同的经历,但唯有当时选择离开银行这件事情让我至今都为之兴奋。迄今为止,这是我自己觉得最最有成就感的事情。”
正如陈皓所说,“也许,最让一个人感到最有成就的事情,不是他做成了什么,而是他选择了什么。”认识自己
多年打拼后,陈皓虽已是技术主管,但走的那些弯路,浪费的两年时间,一路中的心酸让他明白了很多道理。“今天,我对许多刚上路的朋友都会说,人生的规则很重要,从上大学时就要好好规划,这对国人来说尤其重要。因为对于国人来说,人生的头20年都是被别人规划的,导致了自己根本不会给自己做规划。这点是相当危险的。”
人生短暂,属于自己黄金的时间不多,如果把太多的时间浪费在寻找道路和方向上,很有可能会导致一事无成,要及早确定自己的规划,然后照着这个规划坚定不移的去执行。陈皓认为,做规划时最重要的是两个方面:一是清楚地认识自己的能力、优势和性格;二是确定自己的专业和想从事的行业。只有在确定这两方面后,才能做出自己的职业规划。
两方面看起来很简单,但认识自己并不是一件容易的事情。陈皓认为应当从下面十五个方面审视和认识自己,帮助自己确立人生规划:A)所掌握的知识,B)问题的解决能力、判断能力和分析能力,C)对待困难的心态,D)团队合作能力,E)表达能力和语言组织能力,F)创造和创新能力,G)沟通能力,H)自己的性格内向还是外向,I)是否有坚韧不拔的专研精神,J)自己的弱点和性格上的缺陷,K)学习能力,获得知识的能力,L)领导组织能力,M)目前自己能够进入的企业,N)目前自己在社会中的地位,O)目前自己的竞争实力。
职业规划就像软件工程
确定了自己的行业和专业领域后,接下来的事情应该是:1)努力掌握这个行业的知识,2)用最短的时间了解这个专业和行业更为具体的各个子方向。然后在实际过程中再认识自己。比如,选择了计算机行业,应该尽量地尝试软件、硬件、网络、娱乐、媒体等计算机行业不同方向的工作,如果从事软件,又分Web、系统、项目、ERP、CRM、数据库、嵌入式……,在工种上又分开发、测试、技术支持、流程管理,项目管理,系统架构,售前,售后……。当然,我们并不需要去尝试所有的工作或工种才能知道自己适合什么,我们完全可以向从事不同方向的人咨询并结合自我认识来做出判断。
在这个过程中,迷茫的摸索可能是很难避免的。能够及时得到前人的指点可能会是一个捷径,征求前人的建议可以起到参考的作用,快速原型(快速尝试)或许也是好的办法。因为人与人不同,他人的路并不一定适合自己,适合自己的路还要自己去规划,别人是帮不上忙的。
要经常性地跳出自己再来看自己,客观地分析自己的优势和劣势。让自己和别人掂量掂量自己到底几斤几两,了解到自己的长处和特点,然后才能知道自己适合做怎么样的事和并调整自己的职业路线,这是一个“肯定到否定再到肯定”螺旋上升的进化过程。当度过对自己对社会的“陌生期”后,才有谈得上对自己人生和职业的规划。
个人的职业规划就像软件工程。我们都知道软件项目最大的敌人是需求的不明确和需求的大面积变更,同样,在个人的职业规划中,自我需求的不明确和需求的变更也是非常危险的,尤其是在职业计划实施了四五年后需求的变动和改变。只有需求确定以后,才谈得上个人的职业设计的HLD(High Level Design)和LLD(Low Leave Design),以及具体实现。此后随着自身的日益成熟,可以随时为自己的Bug打补丁(Patch)改进自己的职业生涯的设计和实施细则(Enhancement),并为自己加上更多更强的能力(New Feature Requirement)。最终达到软件版本的升级。
第五篇:软件工程
2.2软件开发的基本策略
人们都有自己的世界观和方法论,能自然而然地运用于生活和工作中。同样,程序员脑子里的软件工程观念会无形地支配其怎么去做事情。软件工程三十年的发展,已经积累了相当多的方法,但这些方法不是严密的理论。实践人员不应该教条地套用方法,更重要的是学会“选择合适的方法”和“产生新方法”。有谋略才会有好的战术。几千年前,我们的祖先就在打闹之际写下了很多心得体会,被现代人很好地运用于工业和商业。本节讲述软件开发中的三种基本策略:“复用”、“分而治之”、“优化——折衷”。
2.2.1复用
复用就是指“利用现成的东西”,文人称之为“拿来主义”。被复用的对象可以是有形的物体,也可以是无形的成果。复用不是人类懒惰的表现而是智慧的表现。因为人类总是在继承了前人的成果,不断加以利用、改进或创新后才会进步。所以当我们欢度国庆时,要搞清楚祖国远不止50岁,我们今天享用到的财富还有上下五千年人民的贡献。进步只是应该的,不进步则就可耻了。
复用的内涵包括了提高质量与生产率两者。由经验可知,在一个新系统中,大部分的内容是成熟的,只有小部分内容是创新的。一般地可以相信成熟的东西总是比较可靠的(即具有高质量),而大量成熟的工作可以通过复用来快速实现(即具有高生产率)。勤劳并且聪明的人们应该把大部分的时间用在小比例的创新工作上,而把小部分的时间用在大比例的成熟工作中,这样才能把工作做得又快又好。
把复用的思想用于软件开发,称为软件复用。据统计,世上已有1000亿多行程序,无数功能被重写了成千上万次,真是浪费哪。面向对象(Object Oriented)学者的口头禅就是“请不要再发明相同的车轮子了”。
将具有一定集成度并可以重复使用的软件组成单元称为软构件(Software Component)。软件复用可以表述为:构造新的软件系统可以不必每次从零做起,直接使用已有的软构件,即可组装(或加以合理修改)成新的系统。复用方法合理化并简化了软件开发过程,减少了总的开发工作量与维护代价,既降低了软件的成本又提高了生产率。另一方面,由于软构件是经过反复使用验证的,自身具有较高的质量。因此由软构件组成的新系统也具有较高的质量。利用软构件生产应用软件的过程如图1.5所示。
软件复用不仅要使自己拿来方便,还要让别人拿去方便,是“拿来拿去主义”。面向对象方法,Microsoft公司的COM规范 [Rogerson 1999],都能很好地用于实现大规模的软件复用。
2.2.2分而治之
分而治之是指把一个复杂的问题分解成若干个简单的问题,然后逐个解决。这种朴素的思想来源于人们生活与工作的经验,完全适合于技术领域。软件人员在执行分而治之的时候,应该着重考虑:复杂问题分解后,每个问题能否用程序实现?所有程序最终能否集成为一个软件系统并有效解决原始的复杂问题?
图1.6表示了软件领域的分而治之策略。诸如软件的体系结构设计、模块化设计都是分而治之的具体表现。软件的分而治之不可以“硬分硬治”。不像为了吃一个西瓜或是一只鸡,挥刀斩成n块,再把每块塞进嘴里粉碎搅拌,然后交由胃肠来消化吸收,象征复杂问题的西瓜或是鸡也就此消失了。
2.2.3优化——折衷
软件的优化是指优化软件的各个质量因素,如提高运行速度,提高对内存资源的利用率,使用户界面更加友好,使三维图形的真实感更强等等。想做好优化工作,首先要让开发人员都有正确的认识:优化工作不是可有可无的事情,而是必须要做的事情。当优化工作成为一种责任时,程序员才会不断改进软件中的算法,数据结构和程序组织,从而提高软件质量。
著名的3D游戏软件Quake,能够在PC机上实时地绘制高度真实感的复杂场景。Quake的开发者能把很多成熟的图形技术发挥到极致,例如把Bresenham画线、多边形裁剪、树遍历等算法的速度提高近一个数量级。我第一次看到Quake时不仅感到震动,而且深受打击。这个PC游戏软件的技术水平已经远胜于我所见识到的国内领先的图形学相关科研成果。这对我们日益盛行的点到完止的研发工作真是莫大的讽刺。所以当我们开发的软件表现出很多不可救药的病症时,不要怨机器差。真的是我们自己没有把工作做好,写不好字却嫌笔钝。
就假设我们经过思想教育后,精神抖擞,随时准备为优化工作干上六天七夜。但愿意做并不意味着就能把事情做好。优化工作的复杂之处是很多目标存在千丝万缕的关系,可谓数不清理还乱。当不能够使所有的目标都得到优化时,就需要“折衷”策略。
软件中的折衷策略是指通过协调各个质量因素,实现整体质量的最优。就象党支部副书记扮演和事佬的角色:“…为了使整个组织具有最好的战斗力,我们要重用几个人,照顾一些人,在万不得已的情况下委屈一批人”。
软件折衷的重要原则是不能使某一方损失关键的职能,更不可以象“舍鱼而取熊掌”那样抛弃一方。例如3D动画软件的瓶颈通常是速度,但如果为了提高速度而在程序中取消光照明计算,那么场景就会丧失真实感,3D动画也就不再有意义了(如果人类全是色盲,计算机图形学将变得异常简单)。
人都有惰性,如果允许滥用折衷的话,那么一当碰到困难,人们就会用拆东墙补西墙的方式去折衷,不再下苦功去做有意义的优化。所以我们有必要为折衷制定严正的立场:在保证其它因素不差的前提下,使某些因素变得更好。
下面让我们用“优化——折衷”的策略解决“鱼和熊掌不可得兼”的难题。
问题提出:假设鱼每千克10元,熊掌每千克一万元。有个倔脾气的人只有20元钱,非得要吃上一公斤美妙的“熊掌烧鱼”,怎么办?
解决方案:化9元9角9分钱买999克鱼肉,化10元钱买1克熊掌肉,可做一道“熊掌戏鱼”菜。剩下的那一分钱还可建立奖励基金。
2.3一些不正确的观念
本节例举并分析一些不正确的软件工程观念,可帮助初学者少犯相似的错误。
观念之一:我们拥有一套讲述如何开发软件的书籍,书中充满了标准与示例,可以帮助我们解决软件开发中遇到的任何问题。
客观情况:好的参考书无疑能指导我们的工作。充分利用书籍中的方法、技术和技巧,可以有效地解决软件开发中大量常见的问题。但实践者并不能因此依赖于书籍,这是因为:(1)现实的工作中,由于条件千差万别,即使是相当成熟的软件工程规范,常常也无法套用。(2)软件技术日新月异,没有哪一种软件标准能长盛不衰。祖传秘方在某些领域很吃香,而在软件领域则意味着落后。
观念之二:我们拥有最好的开发工具、最好的计算机,一定能做出优秀的软件。
客观情况:良好的开发环境只是产出成果的必要条件,而不是充分条件。如果拥有好环境的是一群庸人,难保他们不干出南辕北辙的事情。
观念之三:如果我们落后于计划,可以增加更多的程序员来解决。
客观情况:软件开发不同于传统的农业生产,人多不见得力量大。如果给落后于计划的项目增添新手,可能会更加延误项目。因为:(1)新手会产生很多新的错误,使项目混乱。(2)老手向新手解释工作以及交流思想都要花费时间,使实际开发时间更少。所以科学的项目计划很重要,不在乎计划能提前多少,重在恰如其分。如果用“大跃进”的方式奔向共产主义,只会产生倒退的后果。
观念之四:既然需求分析很困难,不管三七二十一先把软件做了再说,反正软件是灵活的,随时可以修改。
客观情况:对需求把握得越准确,软件的修修补补就越少。有些需求在一开始时很难确定,在开发过程中要不断地加以改正。软件修改越早代价越少,修改越晚代价越大,就跟治病一样道理。
2.4一些有争议的观念
本节探讨一些有争议的观念,目的不在于得出“正确”或“错误”的评断,而在于争议会激发更多理性的思考。
争议之一:如果软件运行较慢,是换一台更快的计算机,还是设计一种更快的算法?
作者观点:如果开发软件的目的是为了学习或是研究,那么应该设计一种更快的算法。如果该软件已经用于商业,则需谨慎考虑:若换一台更快的计算机能解决问题,则是最快的解决方案。改进算法虽然可以从根本上提高软件的运行速度,但可能引入错误以及延误进程。技术狂毫无疑问会选择后者,因为他们觉得放弃任何可以优化的机会就等于犯罪。
类似的争议还有:是买现成的程序,还是彻底自己开发?技术人员和商业人士常常会有不同的选择。
争议之二:有最好的软件工程方法,最好的编程语言吗?
作者观点:在软件领域永远没有最好的,只有更好的。能解决问题的都是好方法或是好语言。程序员在最初学习Basic、Fortran、Pascal、C、C++等语言时会感觉一个比一个好,不免有喜新厌旧之举。而如今 的Visual Basic、Delphi、Visual C++、Java等语言各有所长,真的难分优劣。开发人员应该根据客观条件,选择自己熟悉的方法和语言,才能保证合格的质量与生产率。
程序设计是自由与快乐的事情,不要发誓忠于某某主义而自寻烦恼。
争议之三:编程时是否应该多使用技巧?
作者观点:就软件开发而言,技巧的优点在于能另辟蹊径地解决一些问题,缺点是技巧并不为人熟知。若在程序中用太多的技巧,可能会留下隐患,别人也难以理解程序。鉴于一个局部的优点对整个系统而言是微不足道的,而一个错误则可能是致命的。作者建议用自然的方式编程,少用技巧。
《狼三则》的故事告诉我们“失败的技巧通常是技俩”。当我们在编程时无法判断是用了技巧还是用了技俩,那就少用。《卖油翁》的故事又告诉我们“熟能生巧”,表明技巧是自然而然产生的,而不是卖弄出来的。卖油翁的绝技是可到中央电视台表演的,而他老人家却谦虚地说:“没啥没啥,用熟了而已”。
争议之四:软件中的错误是否可按严重程度分等级?
作者观点:在定量分析时,可以将错误分等级,以便于管理。微软的一些开发小组将错误分成四个等级 [Cusumano 1996],如表1.1所示。
一级严重:错误导致软件崩溃。
二级严重:错误导致一个特性不能运行并且没有替代方案。
三级严重:错误导致一个特性不能运行但有替代方案。
四级严重:错误是表面化的或是微小的。
表1.1 错误的四个等级
上述分类是非常技术性的,并不是普适的。假设某个财务软件有两个错误:错误A使该软件死掉,错误B导致工资计算错误。按表1.1分类,错误A属一级严重,错误B属二级严重。但事实上B要比A严重。工资算多了或者算少了,将会使老板或员工遭受经济损失。而错误A只使操作员感到厌烦,并没有造成经济损失。另一个示例是操作手册写错,按表1.1分类则属四级严重,但这种错误可能导致机毁人亡。
开发人员应该意识到:所有的错误都是严重的,不存在微不足道的错误。这样才能少犯错误。
2.5小 结
软件工程学科发展到今天,已经有了很多方法和规范,学之不尽。本章只在宏观上讨论了软件工程的一些
思想,更具体的内容将在后面的章节论述。无论是什么好方法,贵在理解与灵活运用,而不可当成灵丹妙药,不象“吃了脑黄金或脑白金,就能使一亿人先聪明起来”。
3程序员与程序经理
工作在第一线的软件开发人员是程序员和程序经理,他们决定着软件的命运。良好的程序员队伍和出色的管理是软件项目成功的必要条件。管理不是管制,不是去卡住人家的脖子,因为程序员不是一群野鸭子。管理的目的是让大家一起把工作做好,并且让各人获得各自的快乐和满足。当一个组织被出色地领导时,雇员甚至不知道他们已被领导。在项目完成时,他们会自豪地说:“看看我们通过努力取得的成绩吧”。所以管理者不能老惦记着自己是一个官,而应时刻意识到自己是责任的主要承担者。
我们经常会听到有经理头衔的人在高谈阔论:“编程我不会,做个项目还不easy?派个人去搞系统分析,回头再叫几个程序员把需求译成程序,不就OK了吗?”
不懂英语的人准以为easy和OK是贬义词。要让软件项目失败很容易,只要符合下列条件之一即可:
(1)项目经理对软件一无所知;
(2)技术负责人对编程不感兴趣;
(3)真真编写代码的程序员是临时雇用的。
如果上述三个条件同时具备,就请放心失败好了。
让我们少幻想自己是比尔·盖茨,先当好程序员和程序经理再说。
3.1了解程序员
早期的程序员干活能从软件直通硬件,个个生猛无比。又因他们的作息时间、言行举止与常人不太一样,久而久之就给人们留下了“神秘”、“孤僻”的印象。如今软件行业被炒得热火朝天,有能耐的程序员即便躲在大山岙的军工厂里也能被挖出来。而更多原本不是程序员的人操起几本“速成”、“二十一天通”等书籍也加入了这个行业。现在国内号称有上百万程序员,这支大军鱼龙混杂,已搞不清那些是正规军,那些是民兵游击队了。