怎样评定一名软件开发人员?这是一个颇为奇怪的问题。现在已经有了很多的理论和形式来做这件事,人力资源部门也试着帮你管理和反省自己的行为。然而,怎样才是一个伟大的软件开发人员,在今天,你该怎样发展你的职业生涯?以下是我评定团队中软件开发人员的军规.按照这些技巧和规则,你可以改善你的现状,由一个优秀的程序员,成为一名伟大的程序员。
1、时间花在写精彩的代码上
这里说的不是数量,而是质量。对此,一种歪曲是:要数量,也要质量。你也许会很多次的遇到以下的两种情境:
情境A:你有一个发疯似的能写代码的程序员,事情似乎在进展中然后,Bug开始不断出现,你们也不知道为什么,好像永远补不完。补完十个,又出来五个,现在你手里的,就是一大堆代码
情境B:你现在有一个看起来很聪明的程序员,你面试他的时候,他似乎无所不知,能把理论说的头头是道。然而,你留给他三个任务,三个星期以后,他还在做一些三天就该干完的事。这下该你困惑了,他这么聪明,他知道generics(详见备注),多线程的一切事情,甚至还能给祖母级的人讲解什么是指针,让老太太兴奋的想去编程。可是--怎么什么都没完成?
于是,在梦境中--你写出了堪称伟大的代码,--伟大的代码是伟大的程序员写出来的,他睿智,明白代码的真正品质所在。写代码就像托尼?霍克在玩滑板一样自然优美,看上去就令人愉快。这些程序员以让你眼花的速度搞定一切,他们知道每个问题应该处理多长时间,也不会追捧寻觅所谓的世界最好解决方案,弄很多线程很多层来写一个简单的游戏。他们写的程序没有Bug,因为写的时候自己测试过了,在睡觉时也在写代码说的就是这样的人。这些程序员太宝贵了。
2、阐明问题
可以明确的是:即使有问题暂时处理不了,还有成百上千的方法去解决。有些人反应很迅速,很快就能提出多种解决方案。然而,一个伟大的程序员应该在做出行动以前清晰阐明问题--创建文档或用白板表达出来。他们写邮件给项目的管理者,这样表述:我想和你说说我是怎么理解这个问题的,我们能这样处理吗?然后他们就会动手给你多种方案。
对,这些人明白自己看问题和阐明立场的方式,而这理解方式大概不会是问题创建者所想要被理解的。请牢记这就是关键所在。一名伟大的程序员在尝试解决问题以前,一定要完全的理解它。你百分百搞明白了吗?没有?百分之九十九?--回去再多问些问题,确保百分之百理解清楚了。
3、怎样着手解决问题
那一搞明白了问题,就开始动手写代码?错!一个伟大的程序员应该按照规划,开始思考面临的多种选择,基于问题开始考虑最好的解决方案。我觉的这像一场国际象棋比赛。你知道每个棋可以怎么走,知道所有的游戏规则。但是你会马上走棋吗?不,你要审时度势,制订计划,紧盯对手,分析其通常的做法。和这一样,在你coding解决问题以前,你也要这么做。
看看问题,计算出需要怎样的结果,你的时间能怎么安排,预期的质量,你必须用的工具,好了,开工吧!
程序员,曾经是很多人尤其是计算机初学者为之崇尚的一个职业,仿佛就是理想、激情和事业的象征,从此就开始了IT白领人生。计算机技术发展之初,几乎就是一个个人英雄主义时代。一个天才的程序员,几乎就可以主宰一个计算机时代,创造出无数奇迹和梦想。
今天,计算机技术的发展日新月异,技术朝着愈加复杂和简单的两个看似矛盾其实一致的方向发展。计算机技术越加普及,无数非计算机专业的人群,出于爱好或者生存的需要,也加入了这个程序开发大军,并且都称之为程序员。
软件技术的发展,已经进入了一个大分工、大整合的时代,由此导致了软件开发工作的分层和分类越加细致复杂,同为程序员,彼此之间工作的技术含量可以说有天壤之别。系统软件、应用软件,是一个大的分水岭,几乎大多数程序员,都在应用软件这个层次进行开发,国内的程序员更是几乎全部如此。
既然是应用软件,就必然要和实际应用结合,而实际应用,是非常复杂多变的,尤其是具有中国特色的国内应用。于是乎,大多数程序员都在为开发应用层面的软件忙得不亦乐乎,财务软件、ERP、CRM、OA等等,几乎成了国内软件开发的主流方向,更不用说电信、石化、铁路、电力等具体行业应用软件的开发了,这些早已被称为项目了。国外的应用软件,除了以上业务应用之外,尚且还有像CAD、3D等专业领用的软件,具有一定的核心技术。
很多工作了多年的程序员们,在回首往事的时候突然发现,自己依然是一个辛苦的打工者,一个IT行业的苦力。反思一下,我们这些自认为程序员的工作者,其实是在核心技术的外围做一些表面工作,和那些非软件开发人员相比,我们觉得自己有技术,其实我们到底掌握了多少核心技术呢?现在的很多程序员,连数据结构、编译原理、操作系统等这些基本的知识都掌握得模棱两可,天天跟着老外的屁股后面追捧所谓的新技术、新框架。其实,又有多少是我们自己的呢?作为JAVA程序员,经常听到很多人自称精通Spring、Struts、Hibernate等主流框架,并有大型项目的开发经验,其实我们只不过比那些初学者多干了几年,使用这些框架更加熟练而已。国内软件行业的面试经常有此类现象,一个面试者可能这次面试不合格,但是他回去看一下书之后,再来面试,很可能就通过了。为什么?因为我们的面试太初级,太表象化。
我们经常接触IBM、微软等公司的面试,他们一般情况下是不会考核面试者具体掌握了什么框架、什么语言的,一般都是考核的面试者最基本的逻辑思维能力和分析判断能力。这也说明了,同为程序员,其间的差别是如此之大。
作为一名程序员,尤其是国内的程序员,应该对自己有一个清醒的认识,不要被表面的感觉所迷惑。到了这个时代,不是说程序员已经失去了光彩,而是我们所从事的层次,技术门槛已经大大降低,很多人处于同质化竞争。
怎么办?很多人说软件行业是个辛苦活,国内的很多软件公司更把程序员当牲口使用。其实,根本上还是怪我们自己没有很好的反思和调整。一方面,如果对技术真的有浓厚兴趣和激情,那就不妨向软件的底层核心技术迈进,另一方面,如果觉得自己真的缺乏这方面的潜力,那就努力适应国内环境,实现技术与应用的完美结合,争取向公司的中高层发展,如果不给与机会,那就自己创业,选择好技术和市场的切入点。
此外,一名优秀的程序员,一定不能是一个唯技术论者,如果持这样的观点,即使专心做个技术专家,也会存在发展障碍。微软的例子,sun公司的例子,都生动地说明了技术与市场的辩证关系。
当然,每个人的成败观是不一样的。如果始终把技术追求放在首位,追求技术完美的境界,并以此为乐,也未尝不是一道美丽的风景。
这个问题相对比较复杂,也很宽泛,很难简单回答,我这里,也仅仅就个人的一点认识,谈谈看法。
目前在学生里,我也观察到,很多二本,三本的同学,在心里上有种自卑感,总觉得考分低了,出来就低人一头。这点,我是万万不赞同的。很多时候,我对小弟讲,我相信你们的老师,师兄,师姐,前辈,都有讲过:大学毕业,仅仅是开始,不是结束。
中国的社会,越来越商业化,其实商业化有一个好处,就是这个社会给每个人的机会,总的来说还是越来越公平。这个问题分怎么看,名校毕业,高官子弟,亿万富豪的孩子,总会比我们站在更高的一个起跑线上,这是事实,但是,也仅仅是起跑线而已。在社会上,也有太多的故事,从一个穷家子弟,经过努力奋斗,最后成功的事实,因此,首先我觉得大家不必气馁,万事有拼才会赢,只要敢拼敢做,没什么大不了的。
我自己的学历就不高的,经过这么多年奋斗,也取得了一点成绩,这里就不多说了,总之,请大家记住,这个世界,还是相对比较公平的,只要肯努力,就会有回报。反过来说,当我们认为社会不公的时候,不妨问问自己,自己尽到自己最大努力没有?
第二个问题,关于学校里面开设的课程,大家可能会觉得不够时髦,不够酷。净是一些计算机组成原理,数据结构等老掉牙的课程,远没有什么spring 框架来得过瘾。呵呵,不过根据我的经验,工作几年以后,大家可能会觉得,最值钱的,恰恰是这些最土气的课程。用框架,永远不算本事,也没有什么核心竞争力的,哪天框架死了,你就死了。会做框架,才叫本事,才叫公司里面的骨干人才,才可能成为架构师。而另一方面,框架也是人做的,大家以为,做框架需要哪些知识?是不是上述old的知识?
因此,我的建议,大家好好学好自己的课程,在这几门课上,清华的老师,比起你们的老师,未必有优势,因为这些知识太经典了,也没有给老师什么推陈出新的发挥余地,学这几门课,大家和清华的学子,是站在同一个起跑线上的。
第三个问题,学习C和C++的问题,大家不用想,我的经验,别说这两门相对复杂点的语言,就算是 Java,PHP等语言,没有指针的干扰,要想学精学透,没有3到5年、5到10年的刻苦,也是不行的,大学毕业就想做大师,不太可能的。因此,建议大家不必妄自菲薄,你做不到,别人也做不到,大家还是一个起跑线,关键看,以后工作中,能不能扎下来潜心研究,仔细揣摩,不断增长自己的经验值。
第四个问题,关于培训机构不培训C和C++的问题,我也很好奇,好像是有这么回事。我曾经研究了一下,认为原因是这样的:
培训机构也是商业公司,主要目的是赚钱。对他们来说,赚钱有两个重点,第一是短平快,要短期出成果,让学生和家长有看得见的进步,给客户以信心,好让客户买单。第二则是成本够低,在同样营业收入的情况下,培训时间越短,请的老师价格越低,老师的沟通成本越低,培训机构的利润越大,因为企业做生意,核心问题是利润,即他真正赚到手的那部分钱。
这就很好理解了,无论从哪个方面理解,C和C++都不是最佳的选择。大家可能没有讲课的经验,但是我本人有一点。我讲课时,发现最难和同学们沟通的细节就是指针,翻过来揉过去说,几个小时下来,就是有人搞不懂指针,至于指向指针的指针,就更晕了。更不要说C中的函数指针,C++中的对象指针,泛型设计等复杂概念,反之,Java,.net都有比较成熟的应用程序框架,同学们可以快速搭建一些立竿见影的应用,因此,从短平快角度,从利润最大化角度,C 和C++都不是最好的教学语言。
如果我开培训公司,我的目的是赚钱的话,我也不会教C和C++,太费神了。当然,有人说你贵买贵卖吗,收费贵点,把成本补回来。那样也不太现实,因为,太贵的费用,就没有客户了,大家试想一下,如果开个培训C和C++的培训班,保证出来会写操作系统,收费20万,大家学不学?我估计就算这个课程值这个价,恐怕也卖不出去。
所以,这位同学说的培训机构的意见,我的建议是,听听就好了,不要太认真。
改革开放三十年,中国迅速从官本位社会向重商社会转型。商业社会的公理是商业驱动技术,反映到现实中,就是做技术的程序员被做商业的营销及管理人员驱动而成为附属,做商业的因代表客户利益而有着最高的话语权,其结果常常是技术与商业的二元对立,用被誉为中国的比尔?盖茨的金山软件公司董事长兼CEO求伯君的话,中国软件、互联网等IT从业人员的最大问题是就技术论技术、就商业论商业,技术与商业二律背反。
作为程序员,怎么办?
从商业驱动技术的公理出发,我们可以推论出关于程序员的两大定理,即程序员的时空定理。
程序员第一定理,不妨俗称之为站高定理,或空间定理,即:程序员应就商业之局论技术之域.古人云,不谋全局者不足以谋一域,这个局就是商业大局,这个域就是技术实现。反映到程序员身上需要做的心智模式的第一个战略转变是就商业(之局)论技术(之域),古今中外,概莫能外。
百度创始人兼CEO李彦宏在北大2008本科生毕业典礼上说,我在北大是信息管理系,学的是信息检索方面的理论,这让我比任何计算机系科班出身的工程师都更能够理解普通用户习惯于怎样的信息获取方式。这就是一个典型的站在商业的高度论技术实现的案例。
IBM的第二次战略转型,即1961年小沃森豪赌System 360项目,取得了历史性的成功。S/360对于IBM的意义以及对于IT行业的影响,相当于Windows对于微软的意义以及其对于PC时代所产生的影响。
从技术角度看,S/360取得专利权数量超过了300项,其中包括发明了内存芯片、发明了关系数据库、发明了人类第一个高级编程语言FORTRAN等。但是如果仅仅从这些技术的成功推断其成功源于这些技术,就大错特错了。
S/360的成功源于其创新的商业战略兼容,所有的技术实现都是围绕这一商业战略而展开。在S/360之前,每台电脑都有自己的指令集,所以每开发一台新的电脑就必须重新撰写程序。S/360成为了历史上第一款指令集可兼容电脑。当然,这同时这也意味着IBM将淘汰自己过去生产的所有型号的计算机,完成自我颠覆。
那么程序员如何站在商业战略的局审视技术的域,有没有一整套的系统方法论?
产品哲学的道,适用于做任何产品,讲述了什么样的产品是好产品,什么样的产品是伟大的产品;用户购买的本质是什么,企业如何应对购买本质;什么是产品的灵魂;做产品分为哪三个层级。
天马设计的天,将产品设计拆解为生产者集合的行业与消费者集合的市场通过创新机制孕育生成产品的三大流程。首先是如何通过行业流程及新经济的特性洞见产经大势,解决产品设计we should do的问题;其次是如何通过市场流程专注客户需求,解决产品设计we must do的问题;最后如何进行有目的、有组织、系统化的创新及中国式创新流程(13类方法)来具体规划产品线及产品功能,解决产品we can do的问题。
落地执行的地,将产品实施拆解为战略执行力的三大组成流程:战略目标、组织管理和开发运维。首先是经营责任化的目标流程,将产品与项目目标逐层切割分解作为经营责任落实到单一责任人,IT技术的趋势及中国式的产品运作模式是什么;其次是管理精细化的组织流程,如何配套对产品成败影响巨大的产品组三大组织模块六个构件;最后是运营程序化的开发流程,在确保工程三要素折中匹配的前提下,以本土实践为本,兼容并包四种工业级流程体系,形成三权分立的强矩阵最佳战阵。
让程序员感到最为骄傲的事情是什么?那肯定是自己做出的技术在别人的面前进行炫耀。就像当初卡马克做出新的三维游戏技术时,整个世界都为之疯狂,这是一个技术人员能够达到的最终幻想。不过,对大部分程序员来说,这样的高度是无法企及的,但这并不妨碍他们来show一下自己学会的技巧。
我认识一位在Dos时代的技术人员,他在别人只会用拼音输入法的时候学会了五笔输入法;在别人只会用UCDOS的时候,他可以解密WPS文件,在别人会用CCED的时候,他可以拿着打印的长长的用C语言写的Menu的实现代码炫耀。然而,到了今天,仍然对自己掌握了某一个技术感到沾沾自喜。其实,这样的技术人员应该也不在少数,甚至有些人只不过五十步笑百步罢了。这并不能怪他们,因为在最初软件开发进入中国的时候,各方面的技术资料少的可怜,尤其是当 Dos向Windows编程过渡的时候,微软有很多API并没有公布,在那个时候,可能一个产品的核心依靠的就是比别人多了解一个API或者一个钩子的机制。蒋涛曾经讲过金山词霸的开发,其实只不过是因为他们直到如何利用一个钩子机制从程序中截获信息并进行翻译的处理,但就是这个技术,事实上造就了如此大的一个产业,也造就了几位的百万富翁。而对王志东来说,也是靠剖析了Windows系统中的DLL文件实现了对 Windows平台的汉化,并由此诞生了一个畅销的中文之星软件。而瑞星的崛起也是因为刘旭将流行的Word宏病毒的查杀机制做了出来,便一下子打开了市场。那个时候,这些人被称为高手,因为他们掌握着某些关键性的技术。甚至可以说,不一定是技术,有可能只是技巧。
然而,现在随着互联网的兴起,技巧的价值变得越来越小,遇到一个难题,用搜索引擎搜索一下,一般都可以找到答案。实在不行,到论坛中发一个请求,也经常会有高手告诉你答案。一个人掌握某种技术技巧变得越来越不重要了。说到这里,我们可以讲一个小插曲,这便是微软最早评选MVP(社区最有价值专家)的时候,根据专家分来进行判断,也就是谁回答的问题最多,谁就是专家。当通过检索把名单给微软之后,在第一次见面会上,令大家跌破眼镜的是,第一名是一个女生,而且她不太编程。当询问她经验的时候,她说每次看到问题,她就会先用搜索引擎搜索一下,如果中文找不到,那她就用选择一些关键词搜索英文的网站,这样一般都会有人回答,这样答案就出来了,而且很多都是英文的答案,这也让很多网友感觉这的确是一个高人,因为这些问题都是用英语回答的。了解了这一切,令人恍然大悟,除了看到一些程序员的懒惰之外,也可以感受到技巧已经不在称为衡量一个程序员水平高低的门槛了。这个时候,考察一个程序员的价值除了其技术的深度和广度之外,是否能够看到技术之上的商业价值,是否能够拥有商业的意识便变得更为重要。这时,如果作为一个程序员,仍然整天为了获得了某个技巧而炫耀的话,相信无法取得更大的成绩。
首先声明,本人是男生,从来没有站在女生的角度思考过问题,因此只能就自己的角度来探讨一下问题,说得不准,勿怪。
嗯,说个现象吧,我在成都呆了12年,确实没怎么看到女性程序员,有几个,生了娃以后,都回家带孩子去了,不过我到西安来以后,吓了一跳,程序员中男女比例接近1:1,呵呵,确实给我上了一课。
所以,就我的经验值,我发现你说的其实不准确,起码中国北方城市,女性就业率还是比较高的,至于是不是程序员职业,并不重要,也有很多女性做的,你大可不必担心这个问题。
当然,女性有女性的弱点,生理上的咱们就不说了,其实对于办公室工作来说呢,问题不大,关键是结婚生孩子,根据劳动法,女性一般是4~6个月的产假,这在很多小公司来说,一个人接近半年不上班,还拿薪水,确实有点难以接受,因此,在招聘时,不知不觉就对女性有点回避倾向,就造成了女性求职困难的现状。
但是呢,我觉得这是短期现象,为什么呢?一个公司,如果要做大做强,做正规,必须正视这些劳动法规定给员工的基本福利,如果老板刻意回避这些话题,应该说,这家公司也确实做不大。至少,我到现在没有看到哪家超过1000人的大中型企业,里面一个女人都没有的。你说是吧?
所以,这个问题,归根到底,我的理解,还是市场经济的初级阶段问题,即中国的企业刚刚出现,还在进步,目前实力还弱,无力承担太多的社会责任,无法承受女性结婚、生子的一系列额外成本增加,因此导致女性就业渠道偏弱。
就我的经验而言,目前国有大型企业、欧美外资企业,嗯,台资和港资等企业也是,对劳动法遵守比较好,反而是中国的民营企业,遵守得不好,让买个社保都磨磨唧唧的,更不要说女性的产假等问题了。因此,如果求职时主要针对上述企业来说,应该问题也不是很大。嗯,国内华为、中兴等大型企业,对女性歧视也很小,可以考虑。
但是,要注意,这里面也有个门槛问题,国有大型企业,其实福利是比较好的,但是,工资待遇偏低,尤其是进去主要靠关系,很少有凭借真本事能进去的,这个难度很大。其他三资企业,人家是典型的资本主义社会原则,看人部分男女,都是成本,每个人必须创造出效益来,因此,首先必须要真本事才进得去,其次,进去后,人家用人也比较狠,我们常说女生当男生用,男生当畜生用就是这个道理,如果进这类企业,要做好被扒层皮的思想准备。
4、对代码的信任
作为项目管理者,你怎么相信他们的代码。有些程序员,你可以对他们说:我星期五就要结果.--星期五到了,你收到了这样的Email:代码我都已经检查过了,现在就等着测试了。你很放心,只会有很少的瑕疵在质量确保的团队被查到。当然,还有些轻率的例子,一些程序员在邮件里是这样说的:我还没弄完,星期一上午我会最先完成它.你不太确信这东西,发现很多Bug,很长时间基本上不能用。又得花上几个星期清理代码中的Bug.
关键:你对一个开发人员越有信心,他离成为一个伟大的程序员的距离就越近。想象你是你的管理者,如果他并不担心你的代码,会给你多少信心和勇气!
5、对方案的信任
和对代码的信任是一回事--如果你手上有伟大的程序员,你就会对解决方案有信心。这些程序员同时也是伟大的建筑师。他们剖析整个问题,指出问题需要怎样去解决。这就不只是用伟大的代码编程的问题了,很大程度取决于你怎样构筑解决方案。这是关键,而且会让你在软件世界里出类拔萃。
6、满足客户需求
一天下来,你写出了最棒的代码、用了最好的框架和最好的解决方案,但这真的能迎合用户的需求吗?恐怕根本不是那么回事儿。你搞砸了。尽管现在多次失手,一个伟大的程序员还是会正中靶心,找出客户需要的,给用户逐步展示他们所需要的无bug的最终版本。需求正中靶心的同时,用户满意了。
7、不断升级
伟大的程序员会积极主动地把自己的技术升级。他们对知识的态度就像饿猫见着了牛奶,他们从不用上级催促给自己设定目标、不用经理要求他们完成任务,因为他们自己就已经安排OK了。
他们发现自己想要参加的大会就会给公司写Email本人非常想参加今年的Tech-Ed大会。我将用心研习,并对作出贡献。我预计这可节省金钱/其他原因.如果可行,不知公司是否帮我支付此行?如果我收到这样的邮件,我不仅会帮他支付参会费用,他的路费我也会全程买单。
伟大的程序员们永远会关注例如。net用户组或Java用户组的所有用户群体。他们参加本地的技术会议,并从中汲取知识。你会看所有最新博客和最新的杂志吗?现在列出你最喜欢的前5个开发博客。你能做到吗?你应该像参加基督教青年会那样轻松做到。做到这些,可以很好的帮助你延伸你的思路!你将会不断获得更好的点子!你会得到更好的回报!
15、组织技巧
把所有事情整合在一起的最关键要素是组织。你可能是世界上最好的程序员,但如果你不善于组织你所做的事儿,你的工作将陷入瘫痪,最终丧失优势。伟大的程序员保持自己工作平台的整洁有序,保留所有的笔记并调理清晰。他们标出自己的会议日程表。他们有专门的收件箱给日程邮件、会议和新任务分类。他们保留文档并能在需要时迅速找到所需。
额外要提到的:激情
伟大的程序员如果没有热情,那么他的工作也并不伟大。好的程序员有了热情来对待他的工作、方案和团队,那么他比伟大的程序员还要伟大。
在回顾的时候,我用这些标准来评判我的开发团队。我给我的团队尽可能最好的环境,作为回报,我想要他们都成为最伟大的程序员。你可以用这些标准来评判你的团队,或者你本身就是一名程序员,请用这张列表来尽可能地改造自己来超越同侪。
备注:Generics是程序设计语言的一种技术,指将程序中数据类型进行参数化,它本质上是对程序的数据类型进行一次抽象,扩展语言的表达能力,同时支持更大粒度的代码复用。对于一些数据类型参数化的类和方法来说,它们往往具有更好的可读性、可复用性和可靠性。在设计集合类和它们的抽象操作时,往往需要将它们定义为与具体数据类型无关,在这种情况下,使用Generics就是非常适合的。
每个人的幸福都是不一样的。我喜欢田园式的生活,在人多的地方总是不舒服。
对我来说,最幸福莫过于在工作中做着自己喜欢的事情。闲暇时,在能够眺望江边的地方,端着一杯红酒,一个人细细的喝。
为了这种生活方式,离开了北京,来到家乡所在的这个三线城市,寻找自己的道路。经过一年的探索,颇有心得。
大体上,我对自己走过的路和即将走的路划分为七个阶段:自信=意志=布局=切入点=团队=渠道=产品
第一关:自信
先说说我这个城市。这是一个什么样的城市呢?依山傍水,适合生活。几乎没有IT,也没几个真正的程序员。一周上班六天,平均工资1000元上下。程序员的工资在1000-3000左右。要在这个城市探出自己的道路,首要的一点就是自信。没有自信,活不下去。这个城市的年轻人大多非常迷茫,对自己的前途缺乏信心,有冲劲的都往大城市里跑了。回来之初,我也迷茫了很久,迷茫的时候,就在WOW里泡着,观察那个世界。在WOW里,作为一个萨满,傻乎乎的扛着个盾晃晃荡荡的升级。当时赚钱,也就是打打元素之火每天赚个几十G.后来,不断的观察不断的总结,成长为日入近万G的大奸商。哦,俺要走的也正是这一条路子。生活总是要继续的,在WOW上也学不到更多的东西了,就离开了WOW,开始了一个人的征途。
支持这条路子的核心力量就是自信。在小城市里不缺乏聪明的人,这些聪明的人大部分却并不优秀,因为他们缺乏自信,缺乏自己走路的勇气,从而甘于平庸。没有自信,走不出这第一步。
第二关:意志
在小城市做IT,相当锻炼人意志。这里就像一片沙漠。市场,没有。程序员,没有。找人说话也找不到。曾经组织过次聚会,包括我在内到了2个人。想要向下走,没有相当强的意志是走不下去的。彷徨,彷徨,最终还是坚持走了下来。
第三关:布局
所谓布局就是决定做什么事和不做什么事。经过相当久的考虑,我决定远离Web开发,远离本地市场,甚至远离数据库。做Web开发和数据库开发的太多了,你呆在偏僻小地,做这些完全没有优势,做本地市场呢,又没客户资源,关系又比不上已经在本地深耕数年的小IT公司。于是宁可荒芜这些技能,也不趟这个混水。最后决定,人做我不做,人不做我做,在偏僻的地方,做外面的市场,做深入的开发,做点做线不做面。为什么呢?
(1)本地的工资摆在那里,做本地的就算做起来了,利润也不丰厚,还累死累活,要赚外面的钱,在本地花
(2)要赚外面的钱,如果做Web开发和数据库开发,根本无法和当地公司竞争
(3)所以只能做别人不做的,或者别人做不了的,做技术要求高的。而我恰恰有相当多的研发性项目开发和管理经验,正适合做这些。
(4)所要做的东西,必须通过网络可以展示,可以远程技术支持。
第四关:切入点
切入点是个很关键的东西,综合上面第三关所讨论的内容,结合自己的技术能力和技术经验,然后结合需求情况,最终我从协议分析这一块切入进去了。哦,不是外挂那种分析。从QQ协议,到MSN协议,到YMSG协议,当然,还有Http这个最简单的,从有参考资料的分析,到无参考资料的完全黑箱分析,到现在在某方面的协议分析已经达到世界领先水平了。从协议分析,切入到验证码识别,从验证码识别,切入到车牌识别,从车牌识别,切入到模式识别、图像处理和机器视觉,而模式识别结合前面的协议方面的工作又可切入进NLP,客服机器人,有这些为基础,我又想切入淘宝店铺工具(哦,还没时间做,并且目前也没找到一个好的切入点).因为对图像处理的了解,我现在又成功切入进Flex开发了。以上各点貌似很散,也是也挺集中,就是:协议分析与设计、机器智能和图像处理,这三者是相辅相承的。
8、团队奉献
你可以是团队中最棒的那个人,可是如果你不是最好的程序员、不是建筑师、不是团队里最有活力的人,那么对我来说,如果你不能分享或对你的团队有帮助,你的价值就会大打折扣。一个好的程序员会使自己周围的人同样强大起来。试想一下,好程序员会不断完善自己的知识和能力,如果他们不和周围的人分享他们的知识,他们从哪儿能获得更多呢?
他们不断学习新东西,发掘新技术,但是不会让其他人知道他们这么做了。一个好的程序员会准时完成方案,但是那是在催促和团队得不到休息的前提下。然而一个伟大的程序员则会与团队中所有的项目保持联系,在需要的时候还可以出手帮忙。他们会如是说:我注意到A团队的项目进行到xx进度了,如果不介意的话,我想我可以帮忙?
9、做好会议记录
做好会议记录绝对至关重要!开会期间,大家花大量时间来说明了新观点、新主张、集体讨论还有提出了新设计方案,可是会议结束后却没有人可以拿得出会议记录,简直没什么比这更糟糕的事情了。即使你有会议大纲,我还是期望见到参会的每一个人员都可以带着纸和笔(当然对于程序员来说笔记本则堪称完美).一个伟大的程序员会注意到这点。他们会记下所有的会议记录,并且在会议结束的的时候说:就刚才的会议,我着重记录了几点:XX 我是否记录全了呢?
接下来,伟大的程序员就会把他做好的会议记录分发给项目管理者,列出会议时间、会议主题和参会者。接下来,是会议项目的标题和重要条目。在这之后,就是这些议题的详细记录。一个好的程序员没有做会议记录,并在会议上对提出的每项事宜都点头称是,那只能寄希望于他的记忆力足够好了。随后,他会给你发邮件让你看看他的改动,你得回头提醒他忘记的不多,百分之九十的都没错。--这不是浪费时间嘛!根本不是这么回事!所以,做好你的会议记录。
10、孺子可教和接受批评
如果你读到这儿了,就表明你有希望接受这些建议,并在以后的开发行动中尝试执行。对,程序员的另一项重要能力就是向他人学习并且能够接受批评。通过把自己变为一个虚心受教的人,像海绵一样快速吸收大量知识,毕竟在编程的路上你还有很多前辈。当然,也许他们在写代码的岁月里慢慢生了锈,甚至伤痕累累,但是他们毕竟曾披荆斩棘跨过无数的坎儿。对于做出正确决定,他们又着瞬间的本能,让你不得不服。处于他们这个位置,很乐于见到你的成长和成功。
所以,只要你是个伟大的程序员,就会理所当然的拥有理想的工作环境。如果你不断改善技能、虚心好学、在别人给出的意见和批评中总结错误并得以改善,我向你保证你将会成为一个伟大的程序员而不只是想象自己变得伟大而已。如果你总把自己想象成为精英而不进步,那你只是自欺欺人。如果你不成长,你甚至不能停留到原地,等待你的只有灭亡!
一、心怀理想
我认为优秀程序员首先具备的素质是心怀理想。我曾说过许多程序员都是冲着比尔.盖茨而来的,是被他的巨大成功所感召的。可以说不想当比尔盖茨的程序员不是好程序员。大家要记住,比尔盖茨的成功是两个方面的成功,一个是他个人的成功,另一个是IT行业的成功。作为个人成功,只要个人能在众人中脱颖而出,应该可以说行行都可以出状元的。而行业的成功则表现出行业的生命力和朝阳性。而从事这个行业的人则能够伴随着这个行业的发展而成功。在IT软件行业中,一个好的软件通过无数复制使用能产生巨大的经济效益和社会效益,而好的软件往往是程序员所编制的,与其有很大的关联性,这就意味着程序员在这个行业存在着成功的必然可能。现实中除了比尔盖茨,还有许许多多中外IT名人都是程序员出身的,他们的成功昭示着程序员成功的可能。
既然程序员有成功的可能,那优秀程序员一定是心怀成功的理想,这种理想激励他们不断进取走向成功。我这里说心怀,是说程序员不必天天把理想挂在嘴边,而是把理想放在心里,时刻牢记自己的目标是什么!目标是成功的一半,有了目标,优秀程序员可以不断地调整自己,以最优的方式去接近和实现自己的目标。
现实中还有两类程序员,一类是也想成为比尔盖茨,但是始终是想,最终只是一种幻想。另一类知道比尔盖茨,但是望而却步,从不敢有半点奢望,做到哪就算到哪,顺其自然。这两类程序员都不具备优秀程序员的基本素质。
二、充满激情
优秀的程序员一定是一个充满激情的人,他们的理想和目标的远大注定了他们不能以常人的方式平淡地、机械地工作着。我们很难想象一个优秀程序员不去争做一个大的项目;我们很难想象一个优秀程序员在大家遇到困难时,无助待援时,不挺身而出;我们很难想象一个优秀程序员历经千辛万苦编制出来的程序被用户认可那一瞬间,眼泪不夺眶而出;我们很难想象一个优秀程序员在自己遇到困难的时候,不大声叫喊永不放弃。对于优秀程序员来说付出和收获都是充满激情的。而他们的激情不但感染着自己,而且感染着团队,感染着用户。
三、市场意识
市场意识是许多程序员最不具备的,有的程序员甚至反感市场意识,认为软件卖不卖钱是公司的事,自己只要把程序做好了就行了。借用一句只拉车不看路来形容这类程序员是最为贴切的。有些人从事编程的确是个人兴趣所致,他们喜欢在编程中找到自身的乐趣。但是,更多的人从事编程是为了谋生,是为了获取更多的收入。程序员树立市场意识,就是要做有市场价值的软件,做价值最大化的软件。虽然程序员在单位可能无法挑选开发的项目,但是程序员可以在有市场价值的软件开发上投入更大的精力,可以在业余时间开发有价值的软件。如果公司的软件市场没有前景,程序员应该未雨绸缪,做好最坏的打算,选择更有成长性的软件公司。否则,编程能力再强也是英雄无用武之地,达不到自己的预期。做市场价值最大的软件,让自己市场价值最大化应该是优秀程序员必备的素质之一。
四、永不放弃
程序员可能和其他行业从业人员不太一样,一般遇到困难,其他人员可能进行一番战斗后,无法克服就会放弃了。而程序员遇到困难就可能让程序无法进行下去,他们必须要把问题解决了程序才能完成。优秀的程序员不但敢于解决各种编程中的问题,而且还会善于解决各种问题。有的程序员遇到问题,随便找一种方法就给解决了,他可能不问解决后会带来什么新的问题,不问是否有更好的解决方案。而优秀的程序员往往追求最优的解决方案,往往在这过程中遇到千难万难,但是他们抱着永不放弃的信念,一日复一日,一月复一月,甚至一年复一年去实现自己的目标,最终他们能收获其他程序员无法收获的胜利成果,使得他们水平高高在上。
五、团队精神
现代的程序员和以前的程序员已经完全不一样了,原来程序员是全能性程序员,现在程序员是专业的程序员。尽管还有很少的程序员集设计、开发、销售、维护为一身,但是专业化的潮流不可阻挡,这就表示一个软件或多个软件是靠多个人开发的,他们通过分工协作从事着整个制作工作。程序员写的程序不仅要给自己看,而且要给团队其他人看,当发现程序问题的时候,团队成员可以一起帮助分析解决。如果没有团队精神,任何一个程序员也不可能有真正的成功,即使成功也是渺小的、暂时的。因此要获得事业上的成功,必须要依靠团队的力量才能达到。优秀程序员的优秀之处是可能并不只是关心自己的优秀,而是更关心他周围的程序员和其他人员是否优秀。让更多的优秀的人在一个团队中工作形成一个优秀的团队,这样的程序员才是充满竞争力的,是战无不胜的。
价值这个词,很正式,俗一点就是一个钱字。可以说这个字是当今社会的一个核心。无论经济活动、社会活动那个能离开这个字呀!人为财死,鸟为食亡。可能是人生的一个真实的写照吧!
回到现实生活之中,我们常常听到程序员抱怨自己的工资很低,抱怨自己的付出和自己的报酬严重背离,有的甚至不考虑自己工作能力和工作贡献,以别人的工资或社会岗位工资来确定自己的报酬。同时我们也常常听到公司的老板的抱怨软件公司不赚钱,最大的成本都花在员工的工资上了,自己在给员工打工。那么我们怎么能够计算程序员自身的价值呢?我们怎么看待程序员价值值与不值呢?我感到程序员自身价值有两个方面,一个方面是程序员的收入价值,一方面是程序员市场价值。程序员收入价值比较简单,就是程序员的年收入。例如一个程序员的年收入是5万。则这个程序员收入价值就是5万。程序员市场价值是指程序员本人编制的软件产品销售价值和预期的销售价值。例如,有5个程序员一年之中为一个客户编制了一个软件,软件售价5万元,假定我们忽略了销售成本和维护成本等,5个程序员水平大致相同,则一个程序员的市场价值就是1万。
程序员的收入和程序员市场价值往往是不相同的:
1)当大学生刚刚参加工作的时候,由于能力的限制,很少能编好程序,大部分时间都花在学习上,但是,他还是获得工资报酬。但是他的市场价值为0。这个时候,程序员是正收入。
2)当程序员具备编程能力,投入到编程工作之中,程序员不但获得工资报酬,其劳动成果也变成的公司的收入。假定公司能收支平衡,而且分配比较合理,那么程序员收入价值于程序员的市场价值相当。
3)当程序员具备较强的编程能力,投入到编程工作之中,程序员不但获得工资报酬,其劳动成果也变成公司的收入。假定公司产生利润,而且分配比较合理,那么程序员的收入价值就会低于程序员市场价值,其差价就是程序员给公司的利润贡献。
4)当公司出现亏损的时候,程序员收入价值就会大于程序员的市场价值。
通过以上分析我们可以看出,程序员的市场价值是程序员收入价值的基础,当程序员收入价值远远低于其市场价值的时候,程序员就会感到收入太少,分配不公,不愿意在公司长期呆下去。当程序员收入价值高于或等于其市场价值时候,公司老板只能维持或靠吃老本来维系公司的运作,维持不下去公司只好倒闭。另外,程序员的市场价值要小于公司的软件销售收入。
就目前的中国软件企业运行状况而言,中国软件业早已告别了暴利时代,残酷的竞争使得软件的公司利润趋于下降。有的软件公司在竞争中倒闭,大部分在维持中维持。究其原因很多,但是大部分软件公司都是靠开发项目来维持生计。而项目都是靠用户需求来驱动的,因此,开发出来的软件往往是定制的,不可复用。一些好的软件公司,往往在一个行业中积累了大量的行业知识和软件开发的程序。通过程序积累系统积累,形成了行业系统的开发工具和通用软件。使得程序的复用性大大增强,逐步形成了行业软件的优势,这样公司发展很好。
无论从程序员个人的收入价值或市场价值,还是软件公司的运行状况来看。其核心是软件本身的市场价值。如果一个软件市场价值很高,则程序员的市场价值就会很高,公司的利润就会很高。一个软件市场价值往往取决于这个软件的复用性或商品化程度。假定一个软件销售价格为1万,预期的销售个数达1000个时,其市场价值就会达1000万,假定这个软件是由5个人开发的,相关销售、维护、管理费用不计,则一个程序员的市场价值就会达200万,尽管这个程序员年收入只有5万。但是程序员的市场价值是很高的。有了高的市场价值,就有了增加工资、奖金报酬的基础,就会有增加收入的希望。一般开明的公司都会根据程序员的市场价值的大小来,来定义程序员报酬的。只有这样公司才能留住人才,才能获得更大的利润。
以上《程序员你真的只是程序员吗[1]》一文,由编辑精心撰写而成,希望对您的职业规划有所帮助,更多精彩请访问“程序员个人简历模板”专题!
相关文章
最新更新