第一篇:程序员怎么接项目
现在外包的软件项目不断增长,但随之而来的,承接外包的软件公司、软件团队也越来越多,包括很多个人SOHO一族也加入到承接软件的竞争行列中来了,因此现在对于软件项目的争夺也很激烈。有很多人不知道上哪里去争取项目,总是抱怨没有项目做;也有的人虽然编程技术不错,但是对于与客户谈项目却是一窍不通,结果应该拿到的项目也拿不到手;也有的虽然已经接到了项目,却发现在实施开发的时候遇到好多从来没有遇到过的问题。作为一个多年从事外包项目接单的软件开发人士,我想从以下几方面谈谈我的经验,希望对大家会有所帮助。
第一点,到哪里接项目
软件团队或SOHO最为关心的一点是在哪里可以找到项目做,也就是到哪里可以找到有外包需求的客户。对于一般人来说,广交朋友然后通过熟人介绍还是接项目的第一途径,但这要求你的朋友或熟人要在企业或公司里有比效重要的管理位置,对于像那些每天只能是埋头写代码的程序员这显然是不太现实的。所以大家不能等着项目来找你,而是要主动的出击去找项目。
现在网上有很多软件外包网站,在这里你可以找到不少的软件外包信息。比如GAF(即Get A Freelancer作为客户,他对于项目的承接者总是存在各种疑虑。比如,这个项目究竟承接方有没有能力开发啊?项目组人员是否有这方面的经验?是否作过类似的产品,是否有这方面的技术能力?会不会只是骗了预付款就开溜啊?最后完成的项目能不能达到自己的要求啊?我们作为承接者,就是要千方百计打消客户的这种疑虑。比如,你要经常准备好一些成功的案例和以前的项目的DEMO,就是把你以前成功完成过的项目,做成一个DEMO给客户看,让他觉得你是有能力完成类似的项目的。俗话说,事实胜于雄辩,把你以前做过的类似的项目DEMO给他看,好过你一遍遍空口的承诺。因为软件开发的过程中谁也不能保证一点问题不出,相比较而言,一个有经验的开发人员会更容易得到客户的信任。因为你已经有和客户的项目功能接近的案例,无疑会缩短开发周期,技术上有更好的保障,因此客户也更乐于把项目交给你。所以,程序员平常必须多花点时间和精力,搜集整理以前自己做过的项目案例,并把它们分门别类地整理出来,遇到同类项目的客户,就可以给客户进行演示,这样客户就会放心把项目交给你了。另外,把团队组成人员、技术能力、经验等客户看重的东西整理出来并给客户看,也能够对争取到项目起很大的作用。
第三点,如何合理地报价 在完全了解客户的需求后,下一步就是要确定一个合理的报价。接包方要从跟客户的交谈中尽量地了解出客户的准确意思,思考客户想要的是怎样的一个软件,项目复杂的程度多大,客户的要求有多高,客户的性格如何,能够接受的价格范围等等,这些因素对于软件项目的报价都是密切相关的。如果客户要的是一个小型的软件系统,不太苛求有多全面的功能,只要满足某一方面的需要,并且客户又是一个比较随和的人,那么项目可以报一个接近成本的价格;相反如果客户要求的是一个面面俱到的管理系统,需要有各方面的功能,缺一不可,并且客户又是那种对项目要求严格苛刻,绝不变通的人,那就要充分考虑各种不稳定的因素,报一个比较高的价格。
在很多的情况下,客户在跟接包方谈项目之前,心理都已经有一个价格底线。如果要投入的费用超过了客户的预算范围,客户将不再与你谈该项目,他会转而找其它软件团队商谈。所以跟客户谈项目的过程中要迅速地思考客户需求的真正含义,能够通过某种转换和变通,把客户对于技术的要求与自己团队的技术力量可以接受的价格相对比,从而得出一个双方都能接受的报价。在与客户的谈判当中,灵活变通是成功的关键之一。当然并不是所有的客户都可以通过变通而满足,遇到客户不认同项目费用的情况一定要处之泰然,真诚地为客户解释,把客户的需求细化为技术上的要求给他分析,让他同意你的报价的合理性。即使客户对编程技术不是很了解,但经过你的细致的分析后也会对你的报价表示认同的。软件外包如何正确定价
随着行业竞争激烈,越来越多的公司对信息化存在很大的需求,因而软件外包业务近年来始终保持了较快增长速度。从这几年的统计数据来看,软件技术服务始终以高于行业平均增长速度增长,软件外包的市场也相应地在不断地扩大。但现实中很多人却感叹软件外包难做,其中最难的就是外包的定价,这也是由于软件商品的特殊性所决定的。软件不同于其他有形的物质产品,比如电脑,由于制造电脑需要原材料,还需要加工。把这两部分的成本加起来再加上利润就可以得出一台电脑的销售价格。而软件不需要有形的物质,完全是程序员的脑力劳动的结果,因而在很多普通人看来,似乎是不需要任何成本的。软件业者常感叹,企业客户都愿意花钱购买昂贵的经营设备,却在软件上斤斤计较,同样是生财工具,为什么花钱的意愿相差这么大?这样的想法也反映在个人客户身上,大多数的人愿意花钱购买价格昂贵的CPU和显卡,但对于软件,只想到如何省钱,甚至使用盗版。本人在软件外包领域工作了很长的时间,经常接触到软件外包的双方,因此经常听到项目双方的心声。外包方经常抱怨接包方漫天要价,价格贵得离谱;而接包方同样怨声载道,认为自己的收入还不如一个民工来的多,感慨现在的软件比白菜卖得还便宜。这其实就是因为双方对软件外包如何计价没有一个统一的标准,因而造成双方在软件外包的价格上争执不下,甚至导致项目的谈判完全破裂。反映在现实外包中,项目的发包方和承接方在价格这个问题上经常存在巨大的差距。我就见过一个客户外包一个类似QQ这样的及时通讯软件,外包方认为正常的费用只要5千元,而承接方却咬定要5万元才能完成。那么对于外包的价格有没有一个统一的标准呢?当然有的。学过经济学的都知道,商品的价格由商品的价值来决定,而商品的价值又由生产商品的社会必要劳动时间决定。有形的物质产品是这样定价,无形的软件产品也同样是这样来定价的。软件外包也有一个统一的计价标准,具体来说,外包费用=每位程序员每天的工资×项目所需要的工期(天数)×人数。这里的每位程序员每天的工资是由当地的程序员的工资水平来决定的,比如在上海,程序员的平均工资是6000元/月,那么每天就是200元。项目所需要的工期是指按正常的每天八小时工作制估算,该项目所需要的平均一般工作时间。注意,有些兼职者只能用业余时间来做项目,因而工期就长,但真正的计算工期是以平均的社会必要劳动时间来决定的,所以计算工期只能以正常的每天八小时工作制所需的时间为准。至于人数,因为有的项目不是一个人就可以完成的,比如一个网站项目,就需要有后台程序员、前台设计师以及美工共同配合完成。所以需要的人数至少是3人。举例来说吧,比如一个软件项目,要求设计方在1个月内完成,大概需要4人的协作,地点是在上海,那么项目的费用就是:200(元/天)x 30(天)x 4=24000元。所以该项目的合理定价应该是2万4千元。
实际外包时,外包的定价应该是在需求确定之后。接项目最重要的一步是外包的双方在一起谈需求,客户在谈需求时应该把对软件的所有要求都提出来,而接包方就依据客户的需求来确定项目所需要的工期以及人数,再套用前面的公式就可以得出外包的费用是多少。接包方应该把计算出的价格详细解释给客户听,如果双方有争议还可以进一步讨论。这样订出来的价格双方都会觉得满意,也有利于项目的顺利实施。
当然在实际的软件外包中,实际的价格还要受到供求关系的影响。因为商品价格虽然是以其价值为基础,但在供求关系的影响下会围绕价值上下波动。建议外包方在发布项目时,选择那些软件外包公司和团队比较集中的网站,比如(http://www.xiexiebang.com)等,由于在这些网站的软件外包公司和团队比较多,发布项目后一是可以马上得到回复,因而可以尽快找到项目接包方;二是由于竞争者众多,可以货比三家,选择一个相对比较便宜的价格来外包项目。当然从承接方来说,也要尽量避免恶性竞争,以免搞乱软件外包市场的正常价格秩序,否则到头来受害的还是你自己。
总之,软件作为特殊的商品,虽然定价相对比起有形的商品来说要复杂一些,但只要掌握了统一的价格标准,还是可以得出一个比较准确的报价来的。只要外包的双方能心平气和地坐在一起认真计算一番,就能得出一个双方都能满意的价格,外包的意向才能真正达成。也只有外包的双方按照按照统一的计价标准,遵循公平交易的原则,软件外包这个市场才能不断发展壮大。
第四点,如何组织团队
由于客户的需求是不同的,因而项目也是各种各样的。有网站设计项目、也有软件设计项目,要求使用的编程语言也是多种多样的。即使是在一个项目中,比如说网站制作的项目中,也有着前台的美工设计和后台程序的编写的分工。这些工作如果全部交给一个人去作那是绝对完成不了的。即使是一个小的团队,也不能保证所有的人才都齐备。因此最好就是自己把项目初步设计好,然后找合作伙伴共同开发,自己总体掌握整个项目的全部进度。如果在身边没有好的合作伙伴的话,网上也能找到不少可以合作的伙伴。第五点,如何能收到项目款
这是整个项目中最后也是最难的一个环节。即使你的项目做得再好,如果没有收到款,那你前面的一切努力都等于是零。要想项目能顺利地收到款项,那么从项目未开始之前的谈判阶段就要对这一点加以注意。首先要判断对方是否是真心外包项目。这里有几点经验拿来给大家分享一下:如果你看到项目中说 “请提供完整的解决方案和成功案例发到某某邮箱”,这应该只是想套取设计方案而已,发几张你们公司或团队的推介广告和报价单给他即可。还有的客户张口就要源码要设计文档设计方案的,这种人目的性太强了,如果你真给了他就再也不理你啦。还有的外包方死活不肯介绍自己,不肯告诉自己是谁、怎么称呼、怎么联系、是什么公司、做什么业务的,与这种连最基本的诚信都没有的客户就根本没有必要谈下去。其次是判断对方是否有充足的资金和实力,项目要求是否合理(技术、周期等各方面)。这个可以在需求的谈判中可以有意识地来加以探明,如果对方的项目很大却老是强调项目非常简单,这应该是不想付足项目款;有的发包方坚持不肯给预付款,老是要求项目完成后再交全部款项,这应该是没有诚心付款。还有的项目要30天才能完成却只给几天的开发时间,这种项目外包方也是很值得怀疑的。
对于软件团队或个人SOHO族来说,由于不是公司,对方对于我们的信任度不会很高,所以对于大的项目一定要采用合同方式,这样出现问题才好解决。在合同中,最好订清楚分阶段来付款,这样有利于分散风险。比如,一般要求合同订好后先交30%的定金,项目进行到一半后待客户验证后交50%的项目款,全部项目完成并交付后再交清全部款项。这样做对于客户来说也比较好控制项目的进度,因此对方也比较容易认同并接受。以上谈了软件团队或个人在承接软件项目时应该注意的几个关键问题,其实还有很多问题由于文章的篇幅所限没有涉及。比如对于项目的选择,有的人大的项目做不来,小的项目又不愿做。结果到头来什么项目都承接不到。因此一开始要把自己的期望值放低一些,先从一些几百元的小项目做起,有了一定经验后再接一些大项目,这样循序见进才能不断进步。
第二篇:程序员接私活经验总结
程序员接私活经验总结
/////////////////////////////////////
最好是朋友或熟人推荐,这样双方都比较放心,项目也好拿一些,一般也不会欠款。
如果是陌生人就不好说了,即使签合同也没用。
还有就是接项目时,一定要了解对方是否有技术背景。
如果有技术背景,一般的项目费用会比较合适,不会太高也不会太低,关键是需求定义会比较清楚,后期维护修改量不大。如果对方没有技术背景,就不好办了,即使能蒙对方要个比较高的价格,后期也会被无休止的需求变更累死的。
还有谈项目时一定要看对方的人品,夸夸其谈的人要敬而远之。///////////////////////////////////////////
程序员接活需知新手接活,需知:
1,接活前,先跟美工把报酬讲好,如果程序员和美编报酬一样的话,那就不要接.因为后期的活程序占绝大多数.而美编的任务比起程序,差的多.2,接活前,一定要先让,客户把需求写成书面形式,然后根据文本里要求的功能,估价,如果是整个站的话,那最好多要点,因为后期的修改相当烦人.要的少的话,修改起来没劲.如果客户不会写书面要求 的话,那就不要接了,因为这将是个无头活.3,做活之前,先跟客户说好了,文本里有的功能实现,后添加的功能不要做.(从书面文本发过来那天算起)
4,跟客户说明,做完活,从结账那天起,就不要管了,除非客户愿意出维护费或者你自愿.(从客户审核通过,结账那时起,即使是后期客户发现bug,即使是最基本的bug也不要管,除非客户愿意出钱,维护,不要听他们什么,很好改了,就一下就完了,别忘了,改那么一点是要知识的,就一点你怎么不改,这是知识含量.,请不要糟贱自己辛苦学来的程序知识.)
5,一般后期程序维护是需要资金的,如果客户不愿意出,或者认为程序是你写的就理应你来免费,维护,这叫扯蛋!你并没有答应他们程序写完后,就一辈子永远时刻准备为他们免费维护.一般每月维护费在500RMB左右,这点可以跟客户协商.6,程序和页面一定要分开,这样各做各的,分工明确,而且不易发生什么误会,最主要的是能提高做活效率.后期,美工改起来也不会影响到程序.7,做活的时间一般不要跟客户定死了,程序这东西,改来改去就会改出问题,需要化时间去修补的,如果你把时间定的很死,一旦发生变化,到时候完不成任务,到时候你一定死的很难看.8,做活前,先搞清楚客户说的报酬,是税前的还是税后的,有些
所谓'正式'的单位到结账的时候会说'要扣掉部分'个人所得税'.9,最好有自己的服务器,把做的活放到自己的服务器上,如果客户满意了,付清全部的钱再把代码给他们,这样避免了客户不发钱,活已经给人家了,自己弄的很被动的局面.切记!切记!以上只是我个人的几点接活经验,仅供参考
/////////////////////////////////////
接网站私活,如何防骗?经验谈
我接活很长时间了,被骗过几次,但是最近几乎没被骗过,把经验告诉你大家
一般接私活,都存在不信任对方,接活的朋友怕做了不给钱,客户怕给你钱了,怕你做不好,所以我接私活,先做后给钱,比较好接,但是怎么防骗呢?
把一个网站分成几段,可以协商,比如把网站分为 三期,1、美工
2、后台 3美工和后台的结合每做完一期,客户满意给钱,但是如何防骗呢,如果网站有后台那就好办,可以先做后台,后做美工,后台基本都有,所以几乎不用做什么,就是根据客户的网站设置改善一下后台,给客户看,客户满意后台给你钱,这样有个好处,后台本来你就有,就是客户不满意你也不损失什么,如果客户看后台满意给钱了,那他基本不是骗子,(记住一定要在网上让客户看后台,不要直接给他,他给你钱了,如果要后台你可以给他)
如果你要做的网站只有美工,那你要特别注意,一定要求做好网站图片 他们满意了就要付全款(至少要付一半的钱),如果他们不同意,你也不要做了,可能是骗子,不要相信如果不给钱就不是人的话,我就遇见过这样的人,到最后还是不给钱,所以我也不能把他当人看待了
你在做之前给客户说好,做好的网站图片 你要缩小 30% 给他看,(缩小30%图片再放大到原来的状太态将失真)如果他不同意 有一下几种可能
1、他是骗子
2、他给你的活是转包的当您遇到二传单(也就是与您联系也是一家接单的公司或者个人),各位朋友在交涉时一定要当心,因为不是直接客户,二传单你所知晓的需求和分析往往并不是直接客户所想要的东西。遇到这种单 我一般是放弃
3、这个网站他说话不算数,他可能有老板要让老板看。
不管是什么情况只要他不同意把图片缩小给他看,那网站就不要做了,再想办法找其他项目
还有在最后交付的时候一定要客户把钱给你了 再给网站////////////////////////////////////////////////////////////////
1、有一个网站,这样便于用户找到你,否则哪来的那么多活(我自己的网站,天狼工作室:http:///);
2、将客户需求调研清楚;
3、需求调研清楚之后,根据工作量、难度计划费用;
4、收取定金,一般为全部费用的20%~30%(定金一定要收,否则宁愿不接这个活);
5、有的客户签合同,有的客户不签。签合同的占少数;
6、软件完工之后,加上试用期,再给客户;
7、付完全款之后,再给正式版;
8、要源码的,多加20%费用。
自己接活已经挣了20多W了,以上全是自己的经验。我的网站 天狼工作室,大家可以看看,借鉴一下。
//////////////////////////////////////////////////////////////
我一共接过4单私活,第一单是跟他人合作开发,后面的全是自己一个人开发。
个人总结经验如下:
1.如果你从来没接过私活,那么第一单可以不讲究对象,不讲究项目金额,开张就是胜利,必定会给你不一样的体会;
2.开张后再接单,就应该选择对象,选择项目,这是本着对自己负责任的态度,因为有很多项目几乎是无利可图的;
3.首选人品好有实力的对象,次选资金量高的项目,再次选有
前景的方向;
4.接单就必须完成,这是做人的原则问题,无论遇到什么技术难题,反正现在网络资源也非常丰富,技术无难题;
5.能用熟悉技术开发,不选择其他新技术,因为新技术意味着很多未知的问题,这些问题必定拖延开发进度;
6.私活项目开发人多,不一定能加快进度,最好是自己一个人做,最多2-3人开发;
7.在接单之前,一定要有充足的思想准备,因为这是体力活,身体好是前提。
我去年写的《个人外包项目全记》,与大家共享
第三篇:有项目经验程序员自我介绍
自我介绍是面试程序员中非常关键的一步。下面写写帮文库小编为你带来程序员自我介绍的内容,希望你们喜欢。
关于程序员自我介绍篇一
尊敬的各位领导,你们好。我叫___,来自上海.我是今年南京工业大学的应届毕业生,学的是信息管理与信息系统专业.毕业之前,我曾在上海兴达网络有限公司实习过,和贵公司是同类行业.本人性格开朗,善于微笑,长于交际,工作态度认真。善于写作,熟悉计算机系统及各类办公软件,应用软件,具有简单的编程能力。我相信,这一切将成为我工作最大的财富.我在很久就注意到贵公司,贵公司无疑是_行业中的姣姣者(将你所了解的公司荣誉或成果填上).同时我又了解到,这又是一支年轻而又富有活力的队伍.本人非常渴望能够在为其中的一员.如果有幸获聘,本人将以为公司创造最大利益为自己最大的利益,不讲价钱.真诚做好每一件事,和同事们团结奋斗.勤奋工作,加强学习,不断进步!
关于程序员自我介绍篇二
本人___,我是一个实事求是、不浮夸的人。喜欢参与团队工作与集体活动。重视自身素质培养。
软件开发基础扎实,对编程充满热情,学习能力强,能快速掌握新技术
在校期间,曾获午2007—2008学 优秀团员,2007—2008学 丙等奖学金,2005年9月份 军训优秀个人。曾是系学生会干事,在通过与其他干事的合作,主要对学生宿舍公共卫生、宿舍文化、晚归等进行监督管理,评定优秀寝室,不定期组织学生活动(寝室篮球赛、跳蚤文化市场等)
实习期间就职于金融事业本部,部门业务涉及全国数省的农村信用社核心业务系统、城市商业银行支付系统以及外围辅助服务系统。我一直在广东四地市的农信社做软件开发工作。先后参与了广东省四地市的银行卡系统、综合业务系统卡改造、电话银行系统、自助终端系统等的开发和实施。相信您的信任与我的实力将为我们带来共同的成功!希望我能为贵公司贡献自己的力量!
关于程序员自我介绍篇三
大家好,我叫__,天津大学计算机应用专业硕士,2013年6月份毕业,研究方向__,我想从三个方面介绍自己:
(1)学习方面。大三时保送研究生,之后进入实验室开展项目研究。在_年时间里,先后参与了_个项目,其中_个纵向项目,_个横向项目,纵向项目主要是关于__,横向项目主要是关于__。这些分别对应我简历里的项目经历(1,2,3)。我本科绩点3.8,研究生绩点3.4。我__年一次性通过大学英语四、六级考试,__年通过托业英语考试,考试成绩__分(满分__分),__年通过软件工程师/网络工程师/系统分析师考试。
(2)实践方面。曾在软件公司实习__年时间,曾在__当过计算机讲师,主讲__,另外,本科时曾参加过__比赛,并获得了__奖。实习期间,我的最大收获是:学校学习与工作知识的衔接,深切感悟将理论应用于实践的重要性和快乐。
(3)社会工作方面。本科和研究生都担任所在班级班长/ 部长,同时也在校学生会工作过。在担任班干部的日子里我具备了一定的组织、协调能力,并深深体会团队协作的重要性。
我的性格特点是,1.性格沉稳,2.考虑问题全面、仔细,3.做事有自己明确的想法和计划。
我的优势是1.自己全面的综合素质;2.做事分清轻重缓急;3.喜欢总结,避免犯同样的错误。
我的座右铭是:人因为梦想而伟大,机遇永远属于那些有准备、立即行动并能坚持到底的人!
我的职业生涯目标是,将来有一天能带领一个团队,做出亿万网民喜爱和尊敬的软件!做一个既懂技术,又懂业务的复合型人才。
看了程序员自我介绍的还看了:
1.程序员面试自我介绍6篇
2.it程序员自我介绍范文3篇
3.程序员面试自我介绍范文3篇
4.android程序员优秀自我介绍
5.程序员面试时自我介绍范文
6.程序员自我介绍范文
第四篇:java程序员面试交流项目经验
1:请你介绍一下你自己
这是面试官常问的问题。一般人回答这个问题过于平常,只说姓名、爱好、工作经验,这些简历上都有。其实,面试官最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分等。2:说说你的家庭
面试时询问家庭问题不是非要知道求职者家庭情况,探究隐私,而是要了解家庭背景对求职者的塑造和影响。面试官希望听到的重点也在于家庭对求职者的积极影响。3:说说你的最大优缺点
这个问题的概率很大,面试官喜欢求职者从自己的优点说起,中间加一些小缺点,最后再把问题转回到优点上,突出优点的部分。4:就你申请的这个职位,你认为你还缺什么?
面试官喜欢问求职者的弱点,但精明的求职者一般不直接回答。他们希望看到这样的求职者:继续重复自己的优势,然后说:“对于这个职位和我的能力来说,我相信自己可以胜任的,只是缺乏经验,这个问题我想我可以进入公司以后以最短的时间来解决。” 5:你期望的工资是多少?
这个问题不能直接回答,面试官希望听到:“以我的能力和优势,我完全可以胜任这个职位,我相信我可以做的很好。但是贵公司对这个职位的描述不是很具体,我想我可以延后再讨论”。
6:你还有什么问题吗?
这个问题看上去可有可无,其实很关键,面试官不喜欢说“没有问题”的人,因为其很注重员工的个性和创新能力。如果有人这样问:贵公司对新入公司的员工有没有什么培训的项目?或者说贵公司的晋升机制是什么样的?面试官将很欢迎,因为体现出你对学习的热情和以及你的上进心。
注意:面试过程中,求职者要尊重面试官,认真回答每一个问题,在回答问题之后说一句“谢谢”,能提高获胜的机会.面试进行曲之技术面试(项目经验)收藏
在前期已经讲过怎样分析自己,对自己进行一个准确的定位,选择一个合适的求职方向!并结合自己的实际个人情况来写一份针对性很强的个人简历!个人简历就是个人的广告!好的简历可以更受到用人需求单位青睐!好的简历才能让你获得面试的机会!我们还针对面试列出了j2ee方面的知识点!不管是笔试还是面试都是会考到这些非常重要的知识点!面试的技术内容并不会有想象中的那么难,主要注重基础和细节!细节决定一切!所以列罗的那些知识点是需要下功夫去准备的!当然列罗的那些知识点只是一些在面试中经常会出现的问题集!每家企业都可能超出这些知识点的可能(就不要骂我了)!自己去准备吧!技术方面的考核通常分为笔试,技术面试;其中技术面试又分为专业知识面试和项目经验考核。应该说来笔试和专业知识面试都是考核你对某方面(j2ee或.net)知识的掌握和熟练程度!而项目经验考核则是看你是不是拥有项目经验,是不是适合企业的用人需要,是不是需要企业为你付出培养的成本,是不是你能够马上投入到工作中去.企业是以你的项目经验作为衡量你的工资标准的!所以就是会出现有些同学可能在学校学习成绩很好而企业给他开的工资并不高,而有些同学的学习成绩一般反而得到高工资的原因!专业知识的考核只是企业了解你具有这方面的专业素养和能力!其实有时笔试成绩差一点或者你感觉在做笔试题的时候有些题目没有做出来或答错了并没有关系的。在技术面试的时候,在回答专业知识方面的题目不够理想,也并不起决定性的作用!总之笔试和专业知识面试的答题达到企业要求的70%就可以了!当然如果你在专业知识方面表现的太差,考官对你也就没有多大的兴趣了!但是最能决定企业下定决心录用你的关键在于你的项目经验(排除企业特别强调英文等其它方面能力外)。说了这么多好像都没有说到正题,这是因为让大家更清楚的了解回答好项目经验方面的问题是多么的重要。而这方面又正好是刚从学校出来的学员十分薄弱的,并且针对这方面介绍也十分少!下面我们就来谈谈面试中关于项目经验的问题及应该从哪些方面进行回答!
问题
一、请简单的介绍一下你自己吧!
分析:这是在任何面试中都会遇到一个题目,看起来这个问题是十分简单的,但是往往我们并不知道考官问这个题目是希望从你的回答中获得什么信息!所以我们就很容易走题,跑题,不入正题!不能马上就吸引考官。请记住抓住面试的每一个机会来推销自己。但是往往我们不知道从哪里谈起。所以我们得先了解考官想要获取什么信息呢? 1. 你的从业时间 你从事相关的工作有多长了 2. 你的教育背景 你是否受过良好的教育 3. 你的工作经验 你是否有过具有一定的工作经验 4. 你的项目经验 你是否有过丰富的项目经验
5. 你与众不同之处 你是怎么进行项目开发的,有什么特别之处,或者你在哪些项目中 取得过哪些成功,或者有哪些自己觉得骄傲的地方 6. 你最擅长的地方 你最擅长的技术是什么? 7. 你的性格 你是怎么样的一个人
怎么回答: 我们一一来分析吧,首先从业时间一般回答你进行软件项目专业开发的时间.千万不要把你以前在大街上卖过鱼蛋或到夜市卖烧鸡等乱七八糟的时间计算进来.工作经验也是,你至少有在一家公司呆过吧.不要告诉我你只学过j2ee或.net半年时间,就想来我公司混饭吃.要和你的简历对应起来.一般至少1年半以上.教育背景:如果你上的大学及所上的专业比较对口,就说出来,非否就不要提了.总之是要扬长避短
工作经验:也就是以前在什么公司上过班,与你简历上的一致就可以了.只说与软件开发的工作经验,其它的就不要提了
项目经验:你曾经做过的自认为比较好的项目,这里特别重要,先用一句话来概括项目,然后把项目的功能及子功能全部叙述出来.你与众不同之处:也以说你在项目你以什么独特的方法获得什么不同的效果,主要是能够结果具体的项目或能举例说出来.最擅长的地方:主要告诉对方你最擅长哪方面的技术,是需求分析?编码,或数据库或架构 你的性格:用一两个词来形容你自己,描述你的性格.回答实例: 面试官:请简单的介绍一下你自己吧!令狐冲:您好,在下令狐冲.从事j2ee开发工作3年时间.20002年至2005年在大宋桃花岛软件谷皇室软件公司从事j2ee项目开发.其间开发过大宋侠士综合管理平台.大宋侠士综合管理平台能够自动收集大宋各路侠士,英雄好汉,隐居高人信息并对他们的个人信息及所作所为进行跟踪管理,实现侠士信息维护,查询.侠义事件维护,侠士等级管理,侠士奖惩管理,侠义活动发布,抗灾募捐管理等。鄙人在项目中主要负责需求分析,架构设计和框架类代码实现。在项目开发中善于与客户沟通,充分理解客户需求。具有极强自学能力,在大宋藏经阁中通读了大量的软件项目开发秘籍,具有藏文,印度文,金文的读写能力。问题之
二、谈谈你的XXX项目吧!分析:考官通过看你的简历或者你的介绍来了解你所做的项目,那么考官肯定想更详细的了解您的项目,看是不是与你的简历写的项目经验一致。也就是考核你是否具有真实的项目经验。一般来说,在你的简历至少有一个重点项目,放在简历项目经验栏的第一位。把项目的业务功能描述清楚。在这里你就是重点谈一个项目就可以了。从下面几个方面来进行陈述 1. 用一句话简述项目 2. 详细的列出项目实现的功能
3. 说出项目实现的技术和架构,能说出项目的不寻常之处,比如采用了某项新技术,采用了良好的架框等
4. 能让别人感觉出项目的规模 5. 说出你在项目中的责任
通过这些来证明你是的确开发过了这个项目,并且这个项目是一个真实的。还有就是你是真正具有项目经验的。合乎企业的用人需要。
特别注意要把项目所实现的功能描述得越详细越好。当然用词要简洁,表达要流利。其次要尽可能采用专业术语,显得你的专业。不要犯低级错误。
请记住,你要描述的是整个项目而不仅仅是你做的那一个模块。有些项目你只参与了其中一个模块,但是你要把整个项目描述出来,不要仅仅描述你参与的那一个模块。说出你项目采用的技术及架构,还要能说明你在项目中的责任。回答实例:
面试官:令狐冲,能介绍一下你做的大宋侠士综合管理平台吧!令狐冲:好的,大宋侠士综合管理平台是为大宋武林联盟开发的,实现武林联盟管理的自动化。大宋侠士综合管理平台能够自动收集大宋各路侠士,英雄好汉,隐居高人信息并对他们的个人信息及所作所为进行跟踪管理,实现侠士信息维护,查询.侠义事件维护,侠士等级管理,侠士奖惩管理,侠义活动发布,抗灾募捐管理等。
系统基于B/S三层架构,采用Spring + Hibernate + Spring MVC框架.使用Oracle 数据库.本项目只投入15个人,开发周期为6个月。本人在项目中进行了前期的需求分析,系统架构实现,数据库建模,及部分编码工作。
问题之
三、谈谈你们是怎么对这个项目进行开发的?(谈谈你们是怎么进行项目开发的?)分析:这个问题是考核你是否熟悉软件开发的流程,同时也是考核你的项目经验,你的专业素养,从这里可以判断出你参与过多少项目,可以判断你对软件工程的理解和熟悉程度。这个问题是十分关键的,你需要准备的知识点有:软件项目的生命周期、软件项目的开发模型、面向对象的分析和设计、软件质量保证等。软件项目的生命周期: 项目计划 需求分析
设计(概要设计和详细设计)编码 测试 发布 维护
项目计划阶段:走访客户,进行交流沟通,获得客户原始需求。对客户的需求和市场等进行调研,分析,编写可行性分析报告。
通过不断的与客户沟通,找客户不同环节的用户进行交流来获取需求。召开评审会议,报告可行性分析,报告用户原始需求,报告项目远景规化。需求分析阶段:
在客户原始需求的基础上不断与客户沟通,充分的熟悉和深入客户业务,获得充分的业务需求,完善用户需求和功能性需求,了解客户的相关约束而获得非功能性需求。最终编写《需求规格说明书》;召开需求评审会议,客户确定需求,并签定合同;编写项目计划说明书;编写测试计划;召开项目启动会议,项目正式启动。
概要设计阶段:根据《需求分析说明书》,进行用例分析,获得充分而有效的用例。编写界面原型,编写编码规范和界面风格规范,数据库设计规范。用uml工具画用例图,编写有效的用例规约文档。划分项目功能模块.评审用例及用例规约文档。
详细设计阶段:根据完整的用例及需求进行分析,获得数据库所需的相关信息,画数据库E-R图,编写数据设计说明书.进行数据库建模。进行详细的分析,用uml工具画类图,确定每个功能模块的子功能,抽取项目的公共部分成为一个公共模块。确定项目的架构基础。确定需要用到的类及类成员和方法。确定一些辅助类及方法。对每一个用例都用uml工具画出顺序图。编写详细设计说明书,评审详细设计说明书, 进行基础框架搭建。列出任务清单,进行任务分配。编码阶段:以小组的形式进行代码编写,编写单元测试用例,每完成一个类都要进行单元测试。每完成一个功能点和模块都要进行集成测试。确保每一个功能点和模块完成后都是一个可以看得见、摸得着的产品。而不是等到最后才进行统一的调试和搭配。每天都要对代码进行检查和优化,也就是所谓的重构。
测试阶段:根据测试计划对项目进行系统测试,以及用户的验收测试
产品发布:交付完整的产品和设计文档。把产品布署到客户的计算机上,确保产品的正常运行。客户签收。
维护阶段:为客户提供技术保障,对产品进行相应的维护和升级工作 软件常见开发模型
瀑布模型:最经典的过程模型,适用于需求明确,规模较小的项目 喷泉模型:迭代,无间隙特点,适用于面向对象的软件开发过程 螺旋模型:
MSF模型:微软解决方案过程模型
什么是极限(XP)编程:极限编程是对敏捷软件开发方法的一种实现。它强调测试先行,也就是在编写代码的时候先编写测试用例;循环迭代,每一次迭代都是一个可用的产品;重构,不断的对代码进行优化;结对编程,两个人为一对共同进行代码编写;它强调团队之间的知识传播,让团队的每个人都能熟悉软件开发的各种技术。如:支持熟悉数据库的人去做界面,做界面的人去做数据库等,通过不定期的角色转换来增强团队的能力。要求客户参与到软件开发中来,开发出最适合客户需求的产品。
单元测试一般是在编码的时候同步进行的,一般是以类为单位进行测试,当一个类完成了编码,并编译正确后才进行的测试,测试这个类是否已经能够实现指定的功能。一个类能够正常的编译成功并不意味着这个类就已经完成了,还要通过测试,设置断言来确定他是否已经达到了预期的效果,实现了特定的功能。调试,编译通过只能证明代码的语法没有错误。单元测试由程序员自己来进行,也可以在项目小组内交互进行。单元测试是采用白盒测试 集成测试一般指实现了一个功能点或一个模块后,为了测试这个模块是否已经实现了需求要求的功能。集成测试可能需要对多个类进行组装,也可能需要与以前已经测试通过的模块进行组装,是对产品组件的系统整合和执行。集成测试可以根据模块的大小分不同的级别,在现行的软件开发中,每完成一个功能模块都必须要进行一次集成测试,使得你完成的模块是一个可以运行的产品。集成测试一般可以由项目小组的负责人(或指定一个小组成员)来完成。集成测试采用白盒式测试和黑盒测试
系统测试一般指项完代码已经全部完成,交给测试小组来进行测试。进行系统测试的人员独立于开发小组,系统测试人员把完成的产品布署在相应的计算机环境中,按照测试计划进行测试,验证系统是否满足了指定的需求。系统测试除了测试产品应满足基本的功能需求外,还要对产品的性能,用户界面,安全性,压力,可靠性,安装和反安装等几个方面进行测试 系统测试采用黑盒测试
验收测试一般指产品交付给客户,负责把产品布署在指定的计算机环境中。由用户根据需求文档,进行的总体测试。验收测试的内容和系统测试一样,只是执行者不同。都是除了测试系统完成基本功能外还要对性能,安全性,可靠性等进行测试。验收测试也是采用黑盒测试 为什么需要测试?测试是对软件质量的保证,只能通过严格测试的软件才是合格的软件,测试并不是说让软件能够编译通过,测试是让软件产品最大程度的满足客户的需求度。回答实例:
考官:令狐冲,能谈谈你们是怎么样对这个项目开发的吗?
令狐冲:首先,我们这个项目已经有了一个基本的用户原始需求。但这是不够的,我们都知道需求分析是十分重要的,所以我们在用户原始需求文档的基础上,再次进行了分析,通过不断的与客户沟通,充分的了解和熟悉用户的业务,完善了业务需求和功能需求。还对用户业务需求和功能需求分析完善为实现软件的必须的非功能性需求。得出项目需求规格说明书,经过评审会议确认通过。
根据需求规格说明书进行用例分析,通过分析和讨论找出充分的有效用例,并用Rose画用例图。对每一个用例进行详细的分析,完成每个用例的用例规约文档,并编写界面原型。划分项目模块。最后对用例及用例规约文档进行评审验证。编写”代码编写规范”及界面风格规范,数据库设计规范,编写概要设计说明书。
根据需求规格说明书和分析各个用例规约文档,获得数据库的基本信息原型。也可以说是数据库表的草稿,根据数据库表草搞进行分析,进行数据库设计和优化。编写数据库设计说明书。采用PowerDesigner进行数据库建模,并生成SQL脚本。确定项目框架,设计公共模块和辅助类。根据对数据库模型和用例规约文档的分析,列出对象清单和理清对象关系。用Rose来画类图。对每一个用例都用rose画出时序图。编写详细设计说明书。列出任务清单,分组进行代码编写。在代码编写阶段,先统一完成所有的实体类。对于非实体类则先完成类的框架,也就是只写方法和注释文字。具体方法的实现暂时为空。然后再进行代码填写。每完成一个类的代码编译通过后都要进行重构和单元测试。每完成一个功能和模块都由会由小组长进行集成测试。使得完成的模块是一个真正可以运行的,可见的功能实现。
在各个小组都完成自己的模块后就进行模块整合,进行一次大规模的集成测试。然后把产品产给产品测试小组进行系统测试。
问题之
四、你们是怎么保证软件开发的质量的?
分析:这个问题其实上面的讲解已经给了答案了。软件质量是软件实现对需求的满足度。开发的软件越满足客户的需求,说明软件的质量越高。反之就是质量越低。尽管你开发的软件使用了新的技术,良好的设计,丰富的功能;但是这些功能都不是客户需要的,客户需要的功能没有实现或者是很多没有实现。这样的软件也是失败的软件。为了保证软件质量,也就是让开发的软件最大程度满足客户的需求,只有两个方法。一个是获得充分完整的需求,二是能过测试,以需求为中心编写测试计划。来保证软件合乎需求。回答实例:
考官:你们是怎么来保证软件的质量的呢?
令狐冲:要保证软件的质量首先就要获得完整的需求,在需求分析阶段做了大量的工作与客户各个环节的代表性用户进行沟通,充分了解和熟悉客户的业务。并且从需求到设计阶段都保持与用户的沟通和交流。让用户的业务专家一直参与我们的需求,分析和设计工作。其次我们会在需求分析后就编写测试计划,在开发的每个阶段都进行相应的测试来保证代码是乎合相应需求的。在代码编写过程中,每完成一个类都由程序进行单元测试,每完成一个功能点或模块都要进行集成测试,每一次集成测试都对上一次的已经测试通过的产品进行迭代, 也就是以前测试成功的都会加入到本次测试中来。使得每个完成的功能和模块完成后都是一个可以运行的,可以看得到的产品;同时也欢迎用户来见证我们的集成测试结果。代码编写完成后进行最后一次集成测试,然后交由独立的测试小组对项目进行系统测试。问题之
五、你为什么离职的?(你为什么离开以前公司的?)
分析:这个问题几乎在任何场合的面试都会有,有时是在技术面试的时候问,有时是在人事面试的时候问,有时会在技术面试和人事面试的时候都问。其实也比较好回答,回答的抽象一点比好。切记不要说以前公司的坏话,如果你这样做。人家会想,你以后离职后同样也会说这家公司的坏话.一般都是说为了某求更好的发展空间。让人感觉你是经过深思熟虑后才选择他们公司的。回答实例:
考官:你为什么离开以前公司的?
令狐冲:以前公司对我很好,我在以前公司干得也很愉快。我因为合同到期,为了获得更好的发展空间及谋求对自己能持续发展的环境。并向公司办理了离职手续,完成了工作交结。(后面这句也可以不谈)问题之
六、谈谈你的职业规化
分析:企业都希望他所招聘的人是潜力股,看你是不是一个追求上劲的人,还有想看看你能够在企业长期干还是仅把其当着一个跳板。总的说来,回答这个问题要让人觉得你是一个可培养,有潜力人。记住要看是什么样的人来面试你。如果是项目经理来面试你,你就不要说你以后的职业规化是项目经理。你就可以说你的职业规化是成为架构师,或者是技术专家等。否则他可能会认为你是一个对其有威胁的人。就算他内心知道这不算什么,可能心理总会有一点点不爽。如果是老总面试或人事问你这样的问题,你则可以说项目经理也无妨,不过要给人有一种觉稳的感觉。回答实例:
考官:你的职业规化是怎么样的呢?(考官是项目经理)
令狐冲:我思维能力比较强,擅于逻辑分析。在之前的工作中积累了一定的架构经验,以后就想成为一名架构师和技术专家
写在最后:上面的这些问题都是面试中十分常见的的问题,比较难以回答的。有些看似简单却不知从何说起。有些看似复杂却又并不复杂。因为很多人都缺少项目经验,对软件开发的过程相对陌生,而老师讲这方面的知识也比较少,如果你没有一定的代码和项目积累就算老师讲你也很难去体会、理解。再说这方面的内容太要求实际经验和日月积累,老师也不好讲。现在我采用把枯燥的概念和实际的项目结合起来进行归纳,从而形成这样一个答题技巧。并且对其中的一些技术结合实际进行分析和总结。希望阅读者能快速的知其然也知其所以然。从而能够提高面试的成功率。当然这仅仅是一个答题技巧,关键还是需要知识的积累。有道是“不积跬步,无以至千里;不聚细流,不以成江河”。这次完成此文也是我自己对知识的一次梳理,我并没有去查阅和考证书本。我想完全通过自己的语言来描述项目开发的过程和一些细节。又因我实在是才疏学浅,真的希望大家能对我的不当及错误之处指出并加以指教,我就涕感泪流了。不管是技术还是人生,我才刚刚上路呢!
“本项目结构上分为表现层、业务层和数据访问层,层次间的依赖关系自下到上。采用的技术有 Struts,Spring,Hibernate,Log4J,JDom等。其中表现层采用Struts框架开发;业务层封装业务流程,为适应业务的变 更,每一业务模块均有专门的接口及实现类,利用Spring的IoC功能将实现类注入给表现层的Action;数据访问层借助于Hibernate实现,代码简洁且可适应不同的数据库。事务部分利用Spring的声明式事务管理。为提高性能,采用Servlet Filter实现了缓存代理”
这段描述简单的勾划出了系统的结构,也表现出你非常熟悉Struts,Spring,Hiberante这几种技术。
同时可以注意到,其中一些重要环节描述的十分简略,比如事务、缓存代理,这是故意的。
面试的时候很多人都怕对方突然问一个自己没有准备的问题,往往缺乏应变能力。一方面你需要多进行专门的练习,另一方面要知道面试时你并不总是被动的,等待对方发问。
如果你给对方的只是一份普普通通的简历,里面只提到了大家都会提及的JSP,Struts,那你只好等待对方随机的问题了。但是如果你的项目描 述像刚才那么写,对方就很可能会问你到底是如何在Spring中应用事务、如何使用缓存代理(如果对方是技术人员的话),这时你已经变被动为主动啦„„当 然,前提是你写的这些技术要点一定是自己掌握的,事先已经想好如何表达的!
第五篇:程序员(范文模版)
作业:研究一个新或自己感兴趣的职业 v介绍:名称定义
v典型生涯路径:从新手到最高职位的生涯路径
v趋势:技术、组织结构、培训、经济趋势对职业的影响
v薪酬:差别、地域差别
v所需技能
v教育/培训:受教育程度
v证书/资格证书
v工作条件:环境、压力、工作时间、是否出差?
v聘用机构
v对生活方式的影响
v性别构成v聘用过程
v专业知识 月收入
人数
<1000元 131 1000-3000元 919 3001-5000元 477 5001-10000元 245 10000元以上 44
最多的部分居然是“1000-3000元”...程序员苦哇,同志们!
程序员
目录
1作为一个真正合„
2岗位职责
3行业现状
4职业要求
5必备技能
6素质要求
7职业困境
程序员(英文Programmer)是从事程序开发、维护的专业人员。一般将程序员分为程序设计人员和程序编码员,但两者的界限并不非常清楚,特别是在中国。软件从业人员分为初级程序员、高级程序员、系统分析员和项目经理四大类的方法。
岗位职责
1、对项目经理负责,负责软件项目的详细设计、编码和内部测试的组织实施,对
小型软件项目兼任系统分析工作,完成分配项目的实施和技术支持工作。
2、协助项目经理和相关人员同客户进行沟通,保持良好的客户关系。
3、参与需求调研、项目可行性分析、技术可行性分析和需求分析。
4、熟悉并熟练掌握交付软件部开发的软件项目的相关软件技术。
5、负责向项目经理及时反馈软件开发中的情况,并根据实际情况提出改进建议。
6、参与软件开发和维护过程中重大技术问题的解决,参与软件首次安装调试、数据割接、用户培训和项目推广。
7、负责相关技术文档的拟订。
8、负责对业务领域内的技术发展动态。
一、通过国家统一组织的考试,资格考试分初级程序员级(技术员级)、程序员级(助
理工程师级)和高级程序员级(工程师级);水平考试分初级程序员级、程序员级、高级程序员级、系统分析员级、以及网络程序员(初级)、网络设计师(中级)。
二、报考条件:报各级水平考试者无学历、资历限制;在职人员均可报初级程序员资格,其中大学本科毕业或任技术员两年以上者(含二年),可报程序员级资格,研究生毕生或任助工两年以上者(含二年),可报高级程序员级资格(计算年限均至本12月31日)。
三、报名手续:报名时须持身份证或学生证,交本人近期同底一寸免冠半身照两张及报名费100元(系统分析员报名费150元),其中报资格还须提交本人工作证及任职证明或相应学历证明复印件。
作为一个真正合格的程序员应该具有的素质 1:团队精神和协作能力
把它作为基本素质,并不是不重要,恰恰相反,这是程序员应该具备的最基本的,也是最重要的安身立命之本。任何个人的力量都是有限的,即便如linus这样的天才,也需要通过组成强大的团队来创造奇迹,那些遍布全球的为linux写核心的高手们,没有协作精神是不可想象的。一旦进入系统的研发团队,进入商业化和产品化的开发任务,缺乏这种素质的人是不合格的。
2:文档习惯
说高水平程序员从来不写文档的肯定是乳臭未干的毛孩子,良好的文档是正规研发流程中非常重要的环节,作为代码程序员,30%的工作时间写技术文档是很正常的,而作为高级程序员和系统分析员,这个比例还要高很多。缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。
3:规范化,标准化的代码编写习惯
代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。有些codingfans叫嚣高水平程序员写的代码旁人从来看不懂,这种叫嚣只能证明他们自己?根不配自称程序员。代码具有良好的可读性,是程序员基本的素质需求。没有规范化和标准化的代码习惯,研发之间的协作是绝对不可想的。
4:需求理解能力
程序员需要理解一个模块的需求,很多程序员写程序往往只关注一个功能需求,他们把性能指标全部归结到硬件,操作系统和开发环境上,而忽视了本身代码的性能考虑,性能需求指标中,稳定性,并访支撑能力以及安全性都很重要,作为程序员需要评估该模块在系统运营中所处的环境,将要受到的负荷压力以及各种潜在的危险和恶意攻击的可能性。就这一点,一个成熟的程序员至少需要2到3年的项目研发和跟踪经验才有可能有心得。
5:复用性,模块化思维能力
经常可以听到一些程序员有这样的抱怨,写了几年程序,变成了熟练工,每天都是重复写一些没有任何新意的代码,这其实是中国软件人才最大浪费的地方,一些重复性工作变成了熟练程序员的主要工作,而这些,其实是完全可以避免的。
复用性设计,模块化思维就是要程序员在完成任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作,如果一个软件研发单位和工作组能够在每一次研发过程中都考虑到这些问题,那么程序员就不会在重复性的工作中耽误太多时间,就会有更多时间和精力投入到创新的代码工作中去。
一些好的程序模块代码,即便是70年代写成的,拿到现在放到一些系统里面作为功能模块都能适合的很好,而现在很多软件一升级或改进就动辄全部代码重写,大部分重复性工作无谓的浪费了时间和精力,这是我们应当刻意克服的弊病。
6:测试习惯
作为一些正规化的开发而言,专职的测试工程师是不可少的,但是并不是说有了专职的测试工程师程序员就可以不进行自测;软件研发作为一项工程而言,一个很重要的特点就是问题发现的越早,解决的代价就越低,程序员在每段代码,每个子模块完成后进行认真的测试,就可以尽量将一些潜在的问题最早的发现和解决,这样对整体系统建设的效率和可靠性就有了最大的保证。
测试工作实际上需要考虑两方面,一方面是正常调用的测试,也就是看程序是否能在正常调用下完成基本功能,这是最基本的测试职责,可惜在很多公司这成了唯一的测试任务,实际上还差的远那;第二方面就是异常调用的测试,比如高压力负荷下的稳定性测试,用户潜在的异常输入情况下的测试,整体系统局部故障情况下该模块受影响状况的测试,频发的异常请求阻塞资源时的模块稳定测试等等。
当然并不是程序员要对自己的每段代码都需要进行这种完整测试,但是程序员必须清醒认识自己的代码任务在整体项目中的地位和各种性能需求,有针对性的进行相关测试并尽早发现和解决问题,当然这需要上面提到的需求理解能力。
7:学习和总结的能力
程序员是人才很容易被淘汰,很容易落伍的职业,因为一种技术可能仅仅在三两年内具有领先性,程序员如果想安身立命,就必须不断跟进新的技术,学习新的技能。善于学习,对于任何职业而言,都是前进所必需的动力,对于程序员,这种要求就更加高了。
但是学习也要找对目标,善于总结,也是学习能力的一种体现,每次完成一个研发任务,完成一段代码,都应当有目的的跟踪该程序的应用状况和用户反馈,随时总结,找到自己的不足,这样逐步提高,一个程序员才可能成长起来。
具备以上全部素质的人,应当说是够格的程序员了,请注意以上的各种素质都不是由IQ决定的,也不是大学某些课本里可以学习到的,需要的仅仅是程序员对自己工作的认识,是一种意识上的问题。
作为高级程序员,乃至于设计师而言,除了应该具备上述全部素质之外,还需要具备以下素质:
1、需求分析能力
2、整体框架能力
3、流程处理能力
4、模块分解能力
5、整体项目评估能力
6、团队组织管理能力
世界上第一位程序员是英国著名诗人拜伦的女儿AdaLovelace曾设计了巴贝奇分析机上解伯努利方程的一个程序。她甚至还建立了循环和子程序的概念。由于她在程序设计上的开创性工作,AdaLovelace被称为世界上第一位程序员。美国国防部开发的ADA语言就是为纪念这位世界上的第一位程序员而命名的。
计算机科学发展到今天(21世纪初期),程序员从事的人群很多,分工也不相同,从大的方面可以分为以下几类:
asp程序员 jsp程序员 delphi程序员 php程序员 powerbuilder程序员.net程序员 vb序员 java程序员 javascript程序员 C++程序员
职业要求
一般的程序员都有四年的在专业领域的学习,需要一个在程序领域的学士学位获得者,不论是数学方面的还是工程方面的都是可以的。
大约有20%的人在这一领域的计算机科学和工程学拥有更高的学位。还有很小一部分程序员是自学的,尽管一些专业性的学校或者综合大学可以提供,但是也需要一些别的途径来提供相关的人才。尽管学历是比较重要的,但是公司经常把重点放在应聘者的工作经验上,很多刚从大学毕业的大学生虽然有引人注目的学位证书,但是他们找不到工作是因为他们缺乏经验。一个程序员虽然有正规的学历,但是如果一个人拥有程序设计的深厚知识背景或者丰富的工作经验的话,那么他的机会要比有学历的应届毕业生大得多。所以要尽量抓住有用的工作和实习机会,这样的话在毕业后你就会发现,多实习让你有更多的经验,在找工作的时候就有更多的机会。
对于职业程序员,另外一个重要的方面就是,程序员需要不断提升自己的业务技术,他的技术必须一直保持在一个较高的水平,并且要不断发展,程序员也要寻找贸易的机会,要参加研讨会,在周刊上发表文章和接受职业教育,这些使程序员在自己的领域中分级或者不断并排前进。
必备技能
熟练开发工具
做为一名程序员至少熟练掌握两到三种开发工具的使用,这是程序员的立身之本,其中C/C++和JAVA是重点推荐的开发工具,C/C++以其高效率和高度的灵活性成为开发工具中的利器,很多系统级的软件还是用C/C编写。而JAVA的跨平台和与WEB很好的结合是JAVA的优势所在,而JAVA即其相关的技术集JAVAOne很可能会成为未来的主流开发工具之一。其次,能掌握一种简便的可视化开发工具,如VB,PowerBuilder,Delphi,CBuilder,则更好,这些开发工具减小了开发难度,并能够强化程序员对象模型的概念。另外,需要掌握基本的脚本语言,如shell,perl等,至少能读懂这些脚本代码。
熟知数据库
为什么数据库是如此重要?作为程序员,他们自然有自己的理由:很多应用程序都是以数据库的数据为中心,而数据库的产品也有不少,其中关系型数据库仍是主流形式,所以程序员至少熟练掌握一两种数据库,对关系型数据库的关键元素要非常清楚,要熟练掌握SQL的基本语法。虽然很多数据库产品提供了可视化的数据库管理工具,但SQL是基础,是通用的数据库操作方法。如果没有机会接触商业数据库系统,可以使用免费的数据库产品是一个不错的选择,如mySQL,Postgres等。
了解操作系统
当前主流的操作系统是Windows,Linux/Unix,熟练地使用这些操作系统是必须的,但只有这些还远远不够。要想成为一个真正的编程高手,需要深入了解操作系统,了解它的内存管理机制、进程/线程调度、信号、内核对象、系统调用、协议栈实现等。Linux作为开发源码的操作系统,是一个很好的学习的平台,Linux几乎具备了所有现代操作系统的特征。虽然Windows系统的内核实现机制的资料较少,但通过互联网还是能获取不少资料。懂得网络协议TCP/IP。
在互联网如此普及的今天,如果您还没有对互联网的支撑协议TCP/IP协议栈有很好的掌握,就需要迅速补上这一课,网络技术已改变了软件运行的模式,从最早的客户/服务器结构,到今天的WEBServices,再到未来的网格计算,这一切都离不开以TCP/IP协议栈为基础的网络协议支持,深入掌握TCP/IP协议是非常必要的。至少,需要了解ISO七层协议模型,IP/UDP/TCP/HTTP等常用协议的原理和三次握手机制。明白DCOM/CORBA/XML/WEBServices存在的意义
随着技术的发展,软件与网络的无缝结合是必然趋势,软件系统的位置无关性是未来计算模式的重要特征之一,DCOM/CORBA是当前两大主流的分布计算的中间平台,DCOM是微软COM(组件对象模型)的扩展,而CORBA是OMG支持的规范。XML/WebServices重要性不言而喻,XML以其结构化的表示方法和超强的表达能力被喻为互联网上的“世界语”,是分布式计算的基石之一。
不要将软件工程与CMM分开
大型软件系统的开发中,工程化的开发控制取代个人英雄主义,成为软件系统成功的保证,一个编程高手并不一定是一个优秀的程序员,一个优秀的程序员是将出色的编程能力和开发技巧同严格的软件工程思想有机结合,编程只是软件生命周期中的其中一环,优秀的程序员应该掌握软件开发各个阶段的基本技能,如市场分析,可行性分析,需求分析,结构设计,详细设计,软件测试等。
需求理解能力
程序员要能正确理解任务单中描述的需求。在这里要明确一点,程序员不仅仅要注意到软件的功能需求,还应注意软件的性能需求,要能正确评估自己的模块对整个项目中的影响及潜在的威胁,如果有着两到三年项目经验的熟练程序员对这一点没有体会的话,只能说明他或许是认真工作过,但是没有用心工作。
模块化思维能力
作为一个优秀的程序员,他的思想不能在局限当前的工作任务里面,要想想看自己写的模块是否可以脱离当前系统存在,通过简单的封装在其他系统中或其他模块中直接使用。这样做可以使代码能重复利用,减少重复的劳动,也能是系统结构越趋合理。模块化思维能力的提高是一个程序员的技术水平提高的一项重要指标。
素质要求
团队精神和协作能力
团队精神和协作能力是作为一个程序员应具备的最基本的素质。软件工程已经提了将近三十年了,当今的软件开发已经不是编程了,而是工程。独行侠可以写一些程序也能赚钱发财,但是进入研发团队,从事商业化和产品化的开发任务,就必须具备这种素质。可以毫不夸张的说这种素质是一个程序员乃至一个团队的安身立命之本。
文档习惯
文档是一个软件系统的生命力。一个公司的产品再好、技术含量再高,如果没有缺乏文档,知识就没有继承,公司还是一个来料加工的软件作坊。作为代码程序员,必须将30%的工作时间写用于技术文档。没有文档的程序员势必会被淘汰。
规范化的代码编写习惯
知名软件公司的代码的变量命名、注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。
测试习惯
测试是软件工程质量保证的重要环节,但是测试不仅仅是测试工程师的工作,而是每个程序员的一种基本职责。程序员要认识测试不仅是正常的程序调试,而要是要进行有目的有针对性的异常调用测试,这一点要结合需求理解能力。
学习和总结的能力
程序员是很容易被淘汰的职业,所以要善于学习总结。许多程序员喜欢盲目追求一些编码的小技巧,这样的技术人员无论学了多少语言,代码写起来多熟练,只能说他是一名熟练的代码民工,他永远都不会有质的提高。一个善于学习的程序员会经常总结自己的技术水平,对自己的技术层面要有良好的定位,这样才能有目的地提高自己。这样才能逐步提高,从程序员升级为软件设计师、系统分析员。
拥有强烈的好奇心
什么才是一个程序员的终极武器呢,那就是强烈的好奇心和学习精神。没有比强烈的好奇心和学习精神更好的武器了,它是程序员们永攀高峰的源泉和动力所在。
行业现状
由CSDN、《程序员》主办的2007年开发者大调查2007年底已收到15000多份有效问卷,已经是中国调查样本最多的开发者调查。在这次调查中,详细的分析了样本空间的分布状况,发
现在庞大数目的有效问卷的参与者中有70%也就是接近一万一千名的参与调查者是IT的全职人员,14%的参与者是有过开发工作经验的学生,从这样的分布就可以看出来IT从业人员对专业知识的需求是巨大而迫切的,CSDN作为专业的软件开发技术门户网站,已经是大家获取这些技术知识的主要手段。
一、选择数据库技术和互联网技术的人数总和占到了总人数的一半
2007年火热的SOA和动态语言各占13%和12%。其实这几大块技术分布他们之间都是有一定的联系的,互联网的发展近两年呈爆炸式的增长态势,中国的网民总数已经超过了1.4亿这样一个巨大的数字。
企业中业务的复杂程度越来越高,商业竞争不断增加企业的IT系统,使企业的商业数据呈几何数量级不断增长,在后台海量的数据中数据的管理由之前的单一型数据变成了多纬度的复杂数据,所以可以同时管理关系型数据库和XML数据的混合型数据库已经成为主流。
面对企业不断增加新的IT信息系统,整合已经迫在眉睫,SOA成为必然的趋势,企业对人才的需求从单一型技术人才、业务人才跳跃到了业务技术的复合型人才,这次的开发人员大调查令《 程序员》杂志的调查者看到了这些技术焦点背后千丝万缕的关联。
二、几乎一半的.NET用户不参与开源项目RedHat+Ubuntu占有率超过70%
应用到.NET平台上的开源项目,“大量使用”的比例数仅为8.68%,尚不足一成;“少量应用”的开发者人数比例为42.78%。“基本不用”的比例高达48.54%,与前二者之和几乎不相上下。
虽然开源的出现和发展,让软件没有垄断的未来日渐明朗;虽然开源运动经过多年的高速发展,现在已经聚集了相当的力量,开源的自由和给予理念逐渐深入到了企业的技术核心层面。但微软以商业软件为生,毕竟在微软技术领域中,开源项目通常都被看作是二等公民。很多开源项目对.NET社区产生了巨大的推动作用,微软公司很难提供任何实质性质的支持。
Linu版本
当前安装有Linux操作系统,数据中RedHatFedora占据绝对优势——Linux使用者使用该版本占总数的49.49%。Fedora是RedHat推出的重要的一款Linux版本,在每个fedora版本中都是集成最新的Linux软件,特别是服务端软件。
使用“RedHatFedora”关键词在百度网页中搜索得到7,090,000条结果,RedHatFedora在调查中占据Linux版本的半壁江山符合整个Linux版本的分布情况。
排在第二位的是Ubuntu,受支持数占到总数的23.92%;第三位的是SuSE占9.09%,接下来是Debian,使用率为5.92%。
在这里面令人期待的中国本土Linux的让人大失所望。使用率仅占5.16%,几乎只
有RedHatFedora的十分之一。
三、揭示八成技术人员数据库选型标准SQLServer用户接近50%
使用率占据榜首的数据库产品是微软的SQLServer,比例数达到了47.92%。与其余所有的数据库之和分庭抗衡,大有一览众山小之势。
从调查得到的使用率来看,MySQL仍处于望MSSQLServer项背的阶段。调查显示,MySQL的使用数为1651,占总数的13.80%,不过排名第三。
使用率排在第二位的是Oracle,比例达到24.21%。在前有SQLServer,后有MySQL的情况下,Oracle仍能达到四分之一的占有率,发展势头不可谓不强劲。
虽然Orcale数据库的价格比SQLServer数据库要高,但Oracle采用开放的策略目标,可在所有主流平台上运行。而且有开发者认为Oracle的安全认证是获得最高认证级别的ISO标准认证,因此安全性高于SQLServer。
排在第四位的是Access——5.59%;接着是DB2UDB,占总数的2.75%;至于FoxPro、Informix、PostgreSQL、Sybase得票数均仅在一百左右,还有待进一步的发展。
四、中国程序员最爱的智能手机平台Linux+Java超过Symbian
“开源Linux对于众多开发者的吸引力是巨大的,但是,这仅仅是针对于技术开发人员来说的,而对于普通消费者就不是如此了。”在众多开发者心中,主要是对Linux的青睐。从调查结果中也可以直接反应这样的现象。有专家对此评论说:Linux+Java的模式,应该是应用最多的模式。
开源Linux对于众多开发者的吸引力是巨大的,但是,这仅仅是针对于技术开发人员来说的,而对于普通消费者就不是如此了。针对此问题行业的专家有自己的观点:“现在Wince和Symbian发展很快,并且随着手机硬件方面性能的提高,很多政府部门和企业在采购时,很多会考虑Dopod这样的手机,或者价格便Wince和Symbian都主要使用c++开发,正是嵌入式开发的潮流。”
不同人群对于收集智能操作系统的观点是不同的,对于开发者角度,他们更加青睐于微软和开源Linux的产品,而普通大众他们比较喜欢Wince和Symbian。五、七成程序员不愿意选择门户网站获取开源信息SourceForge占绝对优势
30%的技术人员从门户网站获取开源技术信息,剩下的70%的技术人员都是从专业的开源社区和开源厂商的技术网站上获取信息,包括有SourceForge、LinuxToday、OpenOffice和IBMdW等。
在这70%当中,比例占有绝对优势的就是SourceForge了,这里是开源软件的开发者进行开发管理的集中式场所,也是全球最大开源软件开发平台和仓库。而LinuxToday里面会有记录很多很新的Linux业界大事,新闻以及出版信息。所以,对开源技术感兴趣的程序员们,不必再为如何获取开源信息而苦恼了,快加入到这70%的人群中来吧。
互联网的发展已经成为大家获取信息最主要的渠道之一,网民上网的习惯也从开始的上为数不多的几个门户网站发生了变化,大而全的门户网站并不能满足专业领域人员的信息需求,从2004年开始陆续出现了大量的各个领域垂直细分的内容网站,一方面有长尾理论的理论支持,另一方面厂商也建立了相应产品的技术内容网站,希望能聚集一批专注于这个领域专业人士,做好他们的定向营销。
做细分领域内容的网站对门户已经造成了一定的威胁,这些网站的专业性高,用户的粘性相对也比较高,如果细分领域的内容网站能将自己的服务有所提升,就如同SourceForge一样,那么未来门户网站的路就变得更加崎岖了。
六、Java开发框架:6%的JSF欲撼动21%的Struts
JSF现在比较有优势的是对Ajax的集成,这一点走在了其他框架的前面。未来两
年,JSF与Struts将展开JavaWeb框架的最终战争。经过数年的“框架大战”,Java界的各种框架找到了自己应有的位置。Spring+Hibernate+Struts已成为Java开发的主流体系。在这个体系中,Spring+Hibernate的地位应该说短期内是难以撼动了。除了新兴的JbossSeam作为挑战者之外,几乎难有劲敌。
JavaB/S编程中历来战火最激烈的其实还在Web层,框架的数量最多,争议最大。一切由Struts而起,而Struts最终也坐稳了第一个时代的王座。在技术层面,Struts1.x已经被无数人抱怨过、批评过,但终于还是稳坐王位,这充分说明了习惯的力量。“稳定压倒一切”,这句话在IT技术领域仍旧适用。
详细的分析了Java开发框架的使用状况,发现主要使用的开发框架JSP占26%,Struts占21%,Hibernate占17%,SpringMVC占11%,EJB占7%,JSF占6%,SpringWebFlow和POJO各占4%,其它占4%。就这一调查数据,不难看出,Spring+Hibernate+Struts的优势地位还是相当的明显。
Struts和Hibernate几乎已经成了JavaEE应用的常规配置,21%的开发者用到Struts,用到Hibernate的开发者也有17%;在一个成熟的技术平台上,各个项目的技术方案会在很大程度上趋同——因为所有未知领域都已经被探明,各种问题都有对应的最佳实践,架构师们可以参考的成功案例越来越多。就拿JavaEE来说,架构师们需要考虑的问题比之三年前已经简单多了,这就是成熟的价值。
有专家评论:“其实IT应用技术,什么新鲜玩意并不难学,难的是标准化和规范化。每个程序员都有自己的思路和习惯,写出来的代码自然是五花八门。Java何以成为编程界的占重要地位,很重要的一点在于Java的规范化。这种规范化很高的语言适用于多人合作的大型项目,便于沟通和理解,也就便于集成和维护。Java世界为什么会框架横飞,说到底还是规范化的需要。纯JSP和Struts写Web谁快,摆明了是JSP。那为什么用Struts?原因在于100个人写出来的JSP,有100种写法;而100个人写出来的Struts,基本相似。Struts之成功,正缘于其在JavaWeb层的规范化方面所做出的贡献。
然而长江后浪推前浪,Struts1.x的技术缺陷毕竟是隐患。Sun力推JSF,打算一雪Web层框架缺失之耻。JSF现在比较有优势的是对Ajax的集成,这一点走在了其他框架的前面。未来两年,JSF与Struts将展开JavaWeb框架的最终战争。
JSP经过几年风雨洗礼依然把持头把交椅,看来所有的框架表示层都离不开JSP而存在,而作为JSP的手足兄弟JSF也是仅次Spring之后又一个后起之秀。
七、C++开发环境格局难打破75%的开发人员首选VS系列
BCB正江河日下,2007版本的推出也无法力挽狂澜。虽然现在C++Builder已经归于CodeGear,但人们还是习惯性地与Borland联系上。
1998年Borland公司推出的C++Builder这一当年全新的32位Windows开发工
具,继承了Delphi使用简便、功能强大、效率高的特点,并且结合了C++语言几乎所有优点。所以开始C++Builder迅速风靡。它的主要竞争对象——Microsoft开发的VisualC++也是不甘示弱,迅速出击,突出了Visual可视化强的特点,加上Platform、SDK部分以及Microsoft产品与Windows的天然默契,逐渐成为了技术人员的首选。随着VisualC++版本的不段升级,以及功能、风格等诸多原因,BCB渐现颓势,许多Builder使用者也开始转而使用Visual了。
在2007年CSDN、《程序员》主办的开发者大调查中,详细的分析了C++方面大家主要使用什么IDE的状况,在目前已收到的15000多份有效问卷中,发现主要使用VS系列的占了75%,BorlandC++Builder/CBuilderX只占6%,EclipseCDT占6%,DevC++占2%,其他IDE占3%,不使用IDE占8%。对于.NET开发,VisualC++2005有了一套新的语法;新的优化技术,可使程序的速度最高提高30%;同时新的编译模式,可保证在Microsoft.NETFramework之上生成完全遵从CLI(CommonLanguageInfrastructure)的可验证代码;新的interop模式,可提供本地与托管代码的无缝融合。
相对于前两个版本,新编译器还包括了一个增强版本的缓冲区安全检查选项,而且对C++程序普遍使用的库,也有新的注重安全的版本。VisualC++2005对基于IntelItanium和AMD64的64位平台,提供了对OpenMP标准的支持,并且修正了一些混合DLL加载的问题,对DoubleP/Invoke的性能问题,提供了自动运行时消除。相比之下,C++Builder2007英文版2008年6月初上市。从CodeGear大中华区技术总监李维的博客,看到CodeGear对C++Builder2007的期待。虽然说对同一件事情,每个人都有自己的视角,已有五年C++方面学习和开发经验的赖勇浩说道:“BCB正江河日下,2007版本的推出也无法力挽狂澜。虽然现在C++Builder已经归于CodeGear,但人们还是习惯性地与Borland联系上。
现在的Microsoft及VC势头强劲,产品也具有很高的质量性,CodeGear在C++和.Net领域至少三五年内会继续望其项背。所以推出CB2007,更多的是基于版本延续。”
八、程序员更喜欢Firefox市场份额超过IE7.0两倍
参与调查的多数是软件开发人员或者多数是IT从业人员,但是从这一比例不难看出,IE丢失掉了曾经在浏览器大战中占据了的技术优势,在IE6推出后的5年时间里,浏览器一直在快速发展,而IE却一直没有更新过,这对一个世界上最常用的产品来说绝对是致命的。Firefox(火狐浏览器)以它的小巧、安全,很容易扩展和定制的特长获得了越来越多的喜爱。
更重要的是,它是是一个自由的浏览器,所有的源代码都是开放的,任何人可以为它的成长贡献力量。Cookie、页面缓存,个人都可以精确的控制,这些特性都是技术人员们所崇尚的“我的 地盘我做主”的精神。如果说之前FireFox相对IE6有50%的优势的话,那么,FireFox相对于现在的IE7的优势已经降低到25%左右了。因为IE7从底层已经做了很多的修改,已经慢慢的向W3C标准靠近了许多,在功能使用方面与FireFox的差距也变得很细微,Tab功能,CSS和脚本支持功能现在IE7都比之前表现强了,差距仅仅存在于某些小细节中了。
IE6在这个市场中存在了5年之后微软才意识到改变和向国际标准靠拢的重要性,这就直接导致了大量的技术人员失去了对IE的信心,投向FireFox阵营,不过,微软到底还是强大的,在全球范围内有很多的“粉丝”,他们会一直关注微软的任何一次动作,客观的评价也是对产品最好的反馈,也是最有价值的。
关于Maxthon和腾讯的TT,虽然它们都是基于IE内核的浏览器,但是Maxthon在这次调查中仅次于FireFox,力压IE名列第二的位置,着实看出了这几年Maxthon确实做到了他们的口号“让技术为使用舒适服务”。
包括了FireFox、Opera这种标准的浏览器,也包括了Maxthon和TT这样基于IE内核的浏览器,对于标准的浏览器,FireFox和Opera的重点是要解决兼容问题,而基于IE内核的Maxthon和TT更主要的是要解决浏览器插件、工具的应用问题,所以,技术产品的激烈竞争带给用户的其实是一种良性循环,使我们可以第一时间用到最好用的工具,至于商业效应,还是留给厂商自己去考虑吧。
九、中国程序员健康两成感觉很虚弱亚健康接近七成
“干得比驴累,吃得比猪差,起得比鸡早,看上去比谁都好,五年后比谁都老。很多程
序员都曾这样感慨和抱怨过自己的生活状态。” 亚健康状态是人体处于健康和疾病之间的过渡阶段,在身体上、心理上没有疾病,但主观上却有许多不适的症状表现和心理体验。
位于调查结果第二位的是“很虚弱”——149,比例为19.81%。很虚弱的健康指数低于亚健康,已接近生病和透支状态,他们的健康已经被亮出了黄牌。
每个人的理解不一样,但是“糟透了”这样的词如果用来形容程序员健康的话,相信大多数人都绝对认同“你已经病了”这样的理解。令人不敢相信的是,竟然有8.24%的程序员用这个词来形容自己的健康状态!
调查结果中“非常健康”的票数低得可怜——40,即使算上“没感觉”,二者之和也不过9.04%,几乎跟“糟透了”持平。如果将“非常健康”和“没感觉”一起算为健康的话,处于亚健康状态的程序员是健康状态的7倍,自认为“很虚弱”的程序员数目是处于健康状态的2.2倍!
十、.NET全面进入2.0时代,AJAX风头正劲“在Java领域,JDK5.0是当之无愧的主流平台,但JDK1.4仍保有一半以上的占有量。总的来说,Java族群显然不像.NET族群那样追新。从另一个方面看,这也说明Java平台的成熟,和.NET平台的迅速发展。”
根据2007年的调查数据分析,在.NET领域,.NETFramework2.0的采用量已全面超越.NETFramework1.1,成为.NET平台的首选框架。2006年调查结果,1.1和2.0的采用量基本持平,而2007年2.0的采用量则高达1.1的三倍之多。.NETFramework1.1已是明日黄花,微软的更新
换代策略可以说是成功的。在Java领域,JDK5.0是当之无愧的主流平台,但JDK1.4仍保有一半以上的占有量。总的来说,Java族群显然不像.NET族群那样追新。从另一个方面看,这也说明Java平台的成熟,和.NET平台的迅速发展。
B/S已经成为中国软件业普遍接受的软件结构。在表现层,AJAX技术采用量较去年有较大提升,有将近一半的Web应用采用了AJAX技术,仍采用纯HTML+少量脚本的Web应用中,也有四分之三打算转向采用AJAX技术。反观微软和Adobe力推的新一代RIA平台,则响应者尚少。分别只有1/20和1/10的人愿意选用SilverLight和Flash/Flex作为Web表现层技术。
职业困境
老虎、Bill、自己,中国程序员的困境也来自三个方面
困境之一:老虎的威胁。程序员要面对的饿老虎实在不少,比如说老板,好象老板就是程序员的天敌,什么“不懂技术却指手画脚”、什么“得到与付出不相当”似乎是程序员最常见的牢骚,这个问题不可能得到真正的解决。
困境之二:Bill的竞争。一般说来中国的程序员大都是吃“青春饭”的,大部分程序员的黄金时代是24~28岁。到了30岁左右,一批又一批年轻程序员会给你带来巨大的竞争压力。首先由于软件行业的飞速发展,很多自己以前学的东西逐渐升级换代,而许多程序员由于长期于工作,学习新知识的效率必然下降。其次自己干了几年,薪水要求自然就高了,而年轻程序员工资又低、干活又快,当然会成为老板的首选;第三,30岁基本都已经成家了,要支撑家庭的生活负担,几乎连从头在来的勇气都不会有了。中国的老话说“长江后浪推前浪、一代新人换旧人”,这个历史的规律在软件开发行业体现的尤其明显和残酷,很多程序员必然要面对的结果就是降薪乃至失业。
困境之三:自我的实力。都知道人最难战胜的是自己,所以自我也就是程序员需要超越的最大障碍。大多程序员都把系统分析员和项目经理作为自己的职业目标,但这些目标的达成,需要个人素质、市场机遇等多个方面的条件,太多的程序员就是在高不成、低不就的状态中蹉跎了岁月。对于系统分析员,特别需要以下几方面的素质:客户需求分析能力、系统架构与设计能力、模块分解设计能力、项目流程控制能力、项目风险评估能力等,而对于项目经理则更注重项目管理方面的能力如团队组织能力、沟通协调能力、分析问题解决问题的能力以及良好的职业道德等,而这些素质和能力往往只能依靠程序员个人的学习和努力。看到越来越多的程序员开始学习项目管理的课程,真的有点为他们担心,因为现在的项目管理培训只能停留在理论和考证的程度,既没有素质方面的训练,又缺少实际软件开发项目的案例,学习的结果远远不能达到预期的效果。