职业规划怎么写,相信很多朋友们对这个问题很感兴趣,下面给大家介绍一下。第一部分,前言即总论;第二部分,自我分析,包括业余爱好、性格、价值观、专业技能等;
对于程序开发者来说,有两种技术需要我们掌握,一个是技术上的能力,另一个是非技术上的能力。不幸的是,许多程序员过多地关注了技术上的能力,而忽略了非技术上的能力的培养,因此,我们的程序员们经常会有一些很不好的习惯,这里我们例举了程序员们最常犯的5个非技术的错误,与大家共勉。
1.- 缺乏团队纪律
Discipline is the bridge between goals and accomplishment. Jim Rohn.(www.692P.cOm 考试祝福网)
纪律是一个最有价值的技能,不仅仅只是在软件开发领域,同样在其它领域也是一样的。但对于现实来说,我们很难找到即有才华又有纪律的人。这正如足球队一样,非洲的球员们才华相当的出众,可惜他们总是独自为阵,团队纪律性不足,所以可以有好的成绩,但却无法赢得最后的胜利;而德国队的队员个人技能平平,但其有很强大的团队纪律性,所以,总是能打入最后的决赛并获得冠军。有人说过,个人英雄并不可怕,而有强大纪律性的团队才让人可怕。这正是日本这个民族的可怕之处。况且,软件开发从来都不是一个人可以完成的事情,所以团队工作中的纪律性会是非常重要的。
Steve Pavlina 强调了自律中5个因素:承担, 毅力, 努力, 勤奋, 和坚持。 这里,我们强烈推荐你读一读Steve的 关于自律的文章。
下面是我们觉得程序应该有的比较良好的习惯。
每天都有自己的to do list
在一个时间内只做一个事
把事情做对了
事情没有完全完成时不要轻易结束
慢点总比道歉好,道歉总比不做好
2.- 过度自负
我们的经验告诉我们,过度的自负的人一般是意识不到自己的自负,下面是一些过度自负的特征,希望你可以从中检测一下自己是否过度自负了。
觉得自己是最牛的程序员
总是打断谈话
你要求Code Reivew不是要检查代码,而是向大家炫耀你的代码
3.- 沟通不畅
如果我要说十分钟,我需要一周做准备;如果说15分钟,我需要3天做准备;半个小时,我需要两天;如果说一个小时,我现在就准备好了。 Woodrow Wilson
人类的沟通是我们最主要的活动。成为一个好的沟通者是一件很难的事情,我们不断地和别人交换关于设计,编码,文章的意见,并且我们每天都在试图说服别人我们自己的设计和想法会更好,更有道理
延伸阅读
程序员你真的只是程序员吗[1]
你是不是感觉标题有点矛盾啊,是啊,程序员当然就只是程序员而已嘛,还会有其他什么吗?
No,No,No,如果你以前是如此认为的,那看完这篇文章后,请从此打消这个念头,因为你要改变成一个不一样的程序员(怎么还是程序员?)
虽然我工作经验也就6年左右,但经历了很多,也自己创业过,也是从一个初级程序员走起,因为看的比较多了,某些东西也普遍存在着很多程序员身上,希望自己的经验能帮助你们。
当刚踏入程序员这条路的时候,有幸为一家公司开发一个大型的电子商务网站,因为这篇领域当时还算刚刚起步,自己的编程能力还不太好,所以做起来就比较吃力,每天重复着做完PM给的工作,但是做了大概几个星期,我发觉某些地方真的不合理,但自己又仅仅是一个程序员而已,怎么办呢?我还是按照PM的任务一步一步来做,私下里我用了大量的时间去尝试着我的做法,在接下来的几个星期,我试着跟我的PM进行沟通,他也发觉不错,所以一并写了方案提交给上级领导,很好的是,我们的领导发觉建议还不错,所以改变了原先的策略,对我们的网站原先的设计进行了彻底的推翻,一套新的理念就此诞生了。
这只是一个小例子,并不是炫耀自己的能力,我只是想说,程序员,你其实不仅仅是worker,更应该是Ideaer。当你选择程序员这条路时,如果你仅仅为了工作而选择的,我想你的人生真的很灰暗,为什么这么说呢?我面试过很多人,大多都是从培训中心出来的,虽然我也是从那里走出来的,不过我当时是为了学习编程而去培训,但现在更多的人会为了工作而去培训。其实如果你是真正的选择程序员这条路,我想你的思维能力一定不错,因为一般程序员大多是理科出生,理科靠的就是你的思维能力,在某些时候或许你的思维还不够敏捷,但我知道,每个人在接受了一段时间的工作后,就会产生各类的想法,或许某个想法你会改变你公司的命运,可为什么提出观点的人就寥寥无几呢?
我想可能是因为性格吧,因为很多程序员都是内向型,因为我们需要花一定的时间,去沉醉在代码中,因为这是一个奇妙的世界,无法自拔,所以很多时候就忽略了沟通,因为我们打交道最多的是abcd。如果你正是如此,希望你快点走出来吧,分清楚何时沉醉,何时交流才是最好的。我的偶像-唐骏,我看过他的访谈,他在大学时还是一个不会沟通的人,只是偏执于技术,而且和大多人一样,都会觉得自己什么都会,什么都行,是个天才,但在他大三的时候,他意识到了错误,花了几年的时间去学习交流、沟通,在宁愿委屈自己进入微软做程序员,再到无数次发意见给Bill,一步一步成就了这位打工皇帝。
所以,我们每个程序员要做的是,技术和沟通并行提高。在唐骏的话中,我会学到很多东西,他能从容应对每一次挑战,当时有幸成为唐骏的下属,见证过他的能力,虽然他当时只是个技术总监,但他的想法、创意给盛大带来了无比的利益,我不得不佩服他的胆大,不得不佩服他的能力。从他身上还学到了专一,其实很多程序员会在编程的道路上三心二意,这是很正常的,不过我相信一段时间以后你会学会专一的,因为程序真的很美,带来的不仅仅是工作和薪资。
我这里又不得不批判一些年轻程序员了,他们仅仅看中的是工资、福利等,没错,这是考虑工作的一点,但你要知道,有些时候,你第一点的工资,或许你会学到更多的东西呢?我经历过很多,经历过1年工资翻几番,又经历过折一倍,又经历过小公司,又经历过大公司,各种各样看的实在是很多,但我不会说我自己半途而废,因为每次我会把事情做的觉得自己可以了,我才会选择更好的发展前景。我面试过一些人,工作也就2,3年,做过的东西也很多偏向于OA、ERM等项目,就觉得自己很了不起了,工资也是漫天要价,可真正面谈的时候,我才得知,你仅仅是其中的一个小模块,但当我问其项目的整个运维的时候,就会楞个半天,最后来一句,这个模块不是我负责的,敷衍了事。那好,我问你自己负责的模块,如何具体写的,用了何种方式等,基本都会回答,三层架构,什么什么,My god 三层架构是你一个模块就能体现的吗?那好,既然你说三层,何为三层,三层的优点,缺点在哪里?诶~~~~~前几天首页那篇批判大学生的文章,我觉得写的太好了,你们这是在沉醉吗?如果你不喜欢,你为什么非要选择程序员这条路呢?
程序员技术升级指南
本人做软件开发已将近一年,在这说多不多说少不少的一年时光里,从一个编程菜鸟慢慢升级为一个代码工人,实是感触颇多,今天便趁着喝了几杯老酒,来个一吐为快!
我们做软件开发,首先便要很明确我们的目标和实现目标我们所要采取的手段,以下便是本人对软件开发着所经历的几个阶段的一些总结,当然,其中会有不少偏颇的地方,还请高手指正,不断学习!
第一阶段:入门篇【编程菜鸟】,所谓师傅领进门,修行靠个人,无论我们学什么东西,我们所走的第一步便是入门!而现在,随着编程技术的不断发展,入门对于很多人来说已经不难,但是我还要说说我对编程入门的一些看法!在入门阶段,我们会学到变量,函数,抽象,多态等一些软件编程的基础概念,当然我们也会学到面向对象的编程思想,我个人的学习便是不断地思考,要的便是走火入魔,记得刚学C语言那会儿,冒泡排序想不通,便不停地想,突然想通了,却是在梦中想通的,说出来可能有点夸张,记得那个晚上,睡前还想着这排序怎么实现的,想着想着就睡着了,然后突然地就这么想通了,然后连忙爬起来,一看才知是半夜,别人都睡了,夜很静,就只有再睡,但是却是一身轻松!不断地思考,天天带着问题,不懂就问,这样才能最快地入门!
第二阶段:进阶篇【代码工人】,当我们对编程有了一定的了解,有一定基础,能实现一些简单地功能之后,我们便进入代码工人的阶段【本人正处于这一阶段】,在这一阶段,我们的目标便是实现一个简单的项目!正如学剑法一样,我们之前学到的都是一些零碎的剑招,如上传,图片水印,ADO数据操作等等都是我们能做的简单功能实现,而这一步,我们便是要把这些功能连接起来,组成一个完整的项目,练成一套完整的剑法!而在项目过程中,我们首先想到的便是功能实现,但这还不够,我们不止是要功能实现,我们还要代码的规范性,各个模块的统一衔接,还有功能模块的效率实现,界面实现,操作实现,软件亲和力实现等等问题,都是我们要思考和历练的,要能举一反三,不断地提升自己的技术水平!
第三阶段:入行篇【程序员】,当我们进入第三阶段,我们才能称得上是初级程序员,通过前两个阶段的历练,我们能实现一个简单地项目了,但这远远不够,在这一阶段,我们要进一步提升自己的技术开发水平,我们不止要着眼于一个编程语言或是一个编程框架,而是不断地扩展我们的视野,通过学习,比较,再学习,构建我们自己的编程理想,最终所达到的目标就是我能写的代码,所实现的功能是别人不能替代的,我的技术实现,编程理想是也有自己的烙印的!在这一阶段,我们着眼的重点就不只是某个功能的实现,而更多的是框架的思考,怎么编程使我们的项目更健壮,更有扩展性,更安全等等,我们的思考点是我们整个项目,慢慢从全局去把握项目!
第四阶段:高手篇【软件工程师】,经过第三阶段的历练和一定时间的积淀,几年之后,我们便进入第四阶段,也就成为真正的软件工程师!从这一阶段开始,我们便要从软件实现转向软件设计,也就是软件设计者,而且我们的把握力不只在一个项目,而是多个项目,我们要同时能设计多个软件,选用最适合的开发语言和开发框架,对项目开发过程中遇到的问题进行指导,而且能对一些难题进行创造性的攻关,那时,你就是项目的核心和灵魂,所有的项目开发工作都围绕你出发,得失成败系与你手!
第五阶段:一流高手篇【软件开发顾问】,这一阶段,是建立在丰富的开发经验,项目经验的基础上的,那时的你就不只是单单对着软件开发了,而要有更广的视野和更敏锐的洞察力,对软件工程师进行指导,那时的你不能单单思考一个项目,而要全局思考,你所做的软件,不再只是一个项目或是产品,而是一种思想,例如你做财务软件,那么在这个软件里就必须要有你对财务管理的独特的思考和创造性的软件实现,那时的你,通过多年的磨练,对各种各样的项目有着全局性的把握,不仅如此,你还有与软件相关的专业知识,如财会,管理等等,而且在这些领域有所建树,你所要完成的工作就是对整个软件注入新的生命与内涵,例如游戏软件,中国人做就要有中国人的文化底蕴体现在里面,而不能一味地拿来主义,那时,软件对你只是一种工具,实现你对完成各项工作所思考理念的一个实现工具,你所做的某一个软件,就可能成为这一软件领域的标杆,用古语说:那就是一种道!
第六阶段:天下无敌篇【布道者】,到了这一阶段,你已天下无敌,你的一句话甚至能影响这个软件行业的发展,那时的你,恕小弟愚钝,我已无法窥测你的发展!
酒喝完了,牛吹完了,各位同仁,你处于何种境界呢,赶快升级吧!
如何从优秀的程序员成为伟大的程序员[1]
怎样评定一名软件开发人员?这是一个颇为奇怪的问题。现在已经有了很多的理论和形式来做这件事,人力资源部门也试着帮你管理和反省自己的行为。然而,怎样才是一个伟大的软件开发人员,在今天,你该怎样发展你的职业生涯?以下是我评定团队中软件开发人员的军规.按照这些技巧和规则,你可以改善你的现状,由一个优秀的程序员,成为一名伟大的程序员。
1、时间花在写精彩的代码上
这里说的不是数量,而是质量。对此,一种歪曲是:要数量,也要质量。你也许会很多次的遇到以下的两种情境:
情境A:你有一个发疯似的能写代码的程序员,事情似乎在进展中然后,Bug开始不断出现,你们也不知道为什么,好像永远补不完。补完十个,又出来五个,现在你手里的,就是一大堆代码
情境B:你现在有一个看起来很聪明的程序员,你面试他的时候,他似乎无所不知,能把理论说的头头是道。然而,你留给他三个任务,三个星期以后,他还在做一些三天就该干完的事。这下该你困惑了,他这么聪明,他知道generics(详见备注),多线程的一切事情,甚至还能给祖母级的人讲解什么是指针,让老太太兴奋的想去编程。可是--怎么什么都没完成?
于是,在梦境中--你写出了堪称伟大的代码,--伟大的代码是伟大的程序员写出来的,他睿智,明白代码的真正品质所在。写代码就像托尼?霍克在玩滑板一样自然优美,看上去就令人愉快。这些程序员以让你眼花的速度搞定一切,他们知道每个问题应该处理多长时间,也不会追捧寻觅所谓的世界最好解决方案,弄很多线程很多层来写一个简单的游戏。他们写的程序没有Bug,因为写的时候自己测试过了,在睡觉时也在写代码说的就是这样的人。这些程序员太宝贵了。
2、阐明问题
可以明确的是:即使有问题暂时处理不了,还有成百上千的方法去解决。有些人反应很迅速,很快就能提出多种解决方案。然而,一个伟大的程序员应该在做出行动以前清晰阐明问题--创建文档或用白板表达出来。他们写邮件给项目的管理者,这样表述:我想和你说说我是怎么理解这个问题的,我们能这样处理吗?然后他们就会动手给你多种方案。
对,这些人明白自己看问题和阐明立场的方式,而这理解方式大概不会是问题创建者所想要被理解的。请牢记这就是关键所在。一名伟大的程序员在尝试解决问题以前,一定要完全的理解它。你百分百搞明白了吗?没有?百分之九十九?--回去再多问些问题,确保百分之百理解清楚了。
3、怎样着手解决问题
那一搞明白了问题,就开始动手写代码?错!一个伟大的程序员应该按照规划,开始思考面临的多种选择,基于问题开始考虑最好的解决方案。我觉的这像一场国际象棋比赛。你知道每个棋可以怎么走,知道所有的游戏规则。但是你会马上走棋吗?不,你要审时度势,制订计划,紧盯对手,分析其通常的做法。和这一样,在你coding解决问题以前,你也要这么做。
看看问题,计算出需要怎样的结果,你的时间能怎么安排,预期的质量,你必须用的工具,好了,开工吧!
程序员的时空定理[1]
职业规划怎么写,相信很多朋友们对这个问题很感兴趣,下面给大家介绍一下。第一部分,前言即总论;第二部分,自我分析,包括业余爱好、性格、价值观、专业技能等;
改革开放三十年,中国迅速从官本位社会向重商社会转型。商业社会的公理是商业驱动技术,反映到现实中,就是做技术的程序员被做商业的营销及管理人员驱动而成为附属,做商业的因代表客户利益而有着最高的话语权,其结果常常是技术与商业的二元对立,用被誉为中国的比尔?盖茨的金山软件公司董事长兼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技术的趋势及中国式的产品运作模式是什么;其次是管理精细化的组织流程,如何配套对产品成败影响巨大的产品组三大组织模块六个构件;最后是运营程序化的开发流程,在确保工程三要素折中匹配的前提下,以本土实践为本,兼容并包四种工业级流程体系,形成三权分立的强矩阵最佳战阵。
职场小白容易犯的5个错误!
职业规划是对职业生涯乃至人生计划的过程,职业生涯规划的好坏可能将影响整个生命历程。感谢您阅读《职场小白容易犯的5个错误!》内容,职场资讯网小编向您推荐一些职业规划知识,欢迎参考,希望能帮到你。
刚毕业新踏入职场,完全不知道什么规矩,怎样才能避免犯下低级错误?小编整理了5个最容易犯的错误来分享给大家,避免犯错走弯路哦。
【不够勤奋】
既然你不是天才,你就得努力,既然你是新来的,你必须努力工作,老板为你安排的枯燥工作不是你懒惰的借口,既然老板愿意给你这份工作,那就证明他想激励你,考验你处理问题的能力,一次又一次的推搡只会给老板留下不好的印象。
【爱说不爱做】
好口才是你的资本,你在哪里都是侃侃而谈,然而办公室是一个需要安静的地方,大家埋头工作的时候你只会叫嚣,说的一套一套的,做得却不好,你费劲心思哄老板开心,还不如拿出一套方案来取悦老板。
【隐瞒撒谎】
小学老师教过我们做错事要敢于承认,如果我们在工作中犯了错误,我们应该及时弥补,否则会变得越来越错。如果你一直隐瞒,等到被发现时,可能会造成不可挽回的错误。犯错不要紧,最重要的是敢于承担它,一旦你在工作中犯了错误,你日夜加班改正会让你的老板重新审视你。
【邋遢不整洁】
办公桌上的小空间是最能体现你是否爱干净的地方,虽说这是你的小小地盘,但是毕竟这是公共场所,人流量大,老板随时可能经过,管理人才的守则中很重要的一点是从小事抓起,微小的细节可能会是老板重视你或排斥你的考量方式。
【不积极】
老板把你招到公司是为了给公司创造利益,而不是看着你走一步歇一步的状态,完成日常工作后,你可以主动要求做一些其他的工作来突出你的做事能力,这样不仅能让老板知道你的积极态度,也能让整个公司的人都感受到努力工作和进步的气氛。
我的四年程序员之路[1]
没错,我还是一个程序员,每天还是坐在位置上书写着代码,收获着无聊。 四五年来我我一直保持这样一个坐姿,从每天的早上8点半开始,准备下班回家时结束。
我读的是机械设计制造及其自动化专业,因为迷上网络游戏就干脆转为学习计算机。当时的计算机专业可以说是一个热门专业,很多不怎么样的学校在这时候都开了这个专业,招生时要分数要得不低。这样的决定让我吃苦不少,我要一边保证自己的专业少挂科,以保证自己可以顺利毕业,一边又要保证自己的计算机水平足够在毕业后可以找到一份还行的工作。相比其它同学,我跟图书馆的计算机图书一样另类。他们谈恋爱的时候,我在试着把asp网页连上数据库。他们玩游戏的时候,我在网上到处搜索apache跟php整合的相关材料。
幸运的是,我的专业大部分考试都有六十来分,2005年下半年好歹毕业了。没有计算机背景,企业不会要一个只会把asp连上数据库的人,也不会要我来帮他配apache+php.终于有一家小公司要我进去做软件维护工作,我想都没想就去了,连我要做网页还是客户端软件都没问清楚。零工资实习三个月,外带1个月的试用期,最后才知道自己是来做软件实施的。老总告诉我,所有来这企业的人都得做1年的软件实施,这样才能知道客户需要什么样的软件,以后开发出来软件时才能更好的理解客户的需求。为了理解所谓的客户需求,我在不同的地方安装相同的软件整整安装了一年半,Oracle, Sybase, Sqlserver各种各样的商业数据库我都在上面瞎整过,我后来很佩服hibernate,它居然可以为很多种数据库提供同样的HQL语法,做过的人会知道其实各数据库之间的差异还真不少。还好老总善解人意,在一次公司尝试转型的大背景下,我被调到网站运营部负责网站运营,网站运营跟网站开发是两码子事,在一个小公司里,网站运营就是到各大论坛发垃圾贴子,公司这样做第一可以省去在google上做推广的钱,另外,在我发贴发到手酸的时候,老总还可以跑过来说,累了吧,那放松一下,去把公司网站改下背景颜色。换换思路嘛,脑子就不会打结。这半年里,所有的论坛都有我的ID号,很多论坛的ID被坛主封了又开,到现在,如果我要到某个论坛去下载一个附件,当提醒需要登录时,我网址都不用看直接输个ID和密码进去就行,成功率很高。公司终于又要转型了,因为他们发现发了这么多垃圾贴,还是没人来买他们的软件。我被派到公司的开发组,帮忙做些开发。终于可以称自己为程序员了。
在这半年的时间里,我一直在帮着其它程序员干着繁重的体力活。用HTML和javascript实现着客户们奇怪的网页效果。偶而写一点点JSP的页面,比方说写一个界面将查询结果显示出来等等,当然这也是我为什么现在是从事Java行业的主要原因。
07年初,我决定离开这家企业,在跟老总离职面谈时,他终于想到要为我这么个员工提一下有关工资的问题。他终于想到曾经进入这家企业时,我要求过企业在一定时间内将我的薪水涨到什么样的水平。我并没有接受他开出的更优越的条件,尽管在当时,这些薪水对于一个只会JSP的人来讲应当还行。从职业的发展角度来讲,我需要一个更好的空间,你要知道,在我离开这家企业之前,我还不知道CVS怎么用,Code Review是怎么回事。
如何从优秀的程序员成为伟大的程序员[5]
职业规划是对职业生涯乃至人生计划的过程,职业生涯规划的好坏可能将影响整个生命历程。感谢您阅读《如何从优秀的程序员成为伟大的程序员[5]》内容,职场资讯网小编向您推荐一些职业规划知识,欢迎参考,希望能帮到你。
15、组织技巧
把所有事情整合在一起的最关键要素是组织。你可能是世界上最好的程序员,但如果你不善于组织你所做的事儿,你的工作将陷入瘫痪,最终丧失优势。伟大的程序员保持自己工作平台的整洁有序,保留所有的笔记并调理清晰。他们标出自己的会议日程表。他们有专门的收件箱给日程邮件、会议和新任务分类。他们保留文档并能在需要时迅速找到所需。
额外要提到的:激情
伟大的程序员如果没有热情,那么他的工作也并不伟大。好的程序员有了热情来对待他的工作、方案和团队,那么他比伟大的程序员还要伟大。
在回顾的时候,我用这些标准来评判我的开发团队。我给我的团队尽可能最好的环境,作为回报,我想要他们都成为最伟大的程序员。你可以用这些标准来评判你的团队,或者你本身就是一名程序员,请用这张列表来尽可能地改造自己来超越同侪。
备注:Generics是程序设计语言的一种技术,指将程序中数据类型进行参数化,它本质上是对程序的数据类型进行一次抽象,扩展语言的表达能力,同时支持更大粒度的代码复用。对于一些数据类型参数化的类和方法来说,它们往往具有更好的可读性、可复用性和可靠性。在设计集合类和它们的抽象操作时,往往需要将它们定义为与具体数据类型无关,在这种情况下,使用Generics就是非常适合的。
程序员如何避免新技术焦虑症
随着Java成长和腾达起来的一代人(其实不少也就是我的同龄人),又开始重蹈覆辙。面对以Ruby为代表的新兴动态语言的蓬勃发展,他们也有点坐不住了。靠革命起家的人最怕革命,当年的下里巴人翻身做主了,摇身一变成阔佬了,就开始对新的革命力量摆谱使脸色,甚至以FUD战术加以弹压了。与当年如出一辙,手段还是以攻为守,情绪还是慷慨激昂,笔法还是义正言辞,什么Ruby未经验证啦,什么Ruby性能低劣啦,什么Rails可扩展性不佳啦,什么Ruby不能解决大型的、复杂的、企业级的、高性能的问题啦。最要命的是,哪怕自己90%的时间不过是在字符串处理,这些阔佬们也还是一致宣称自己做着世界一流的、大型的、复杂的、企业级的、非Java不可、没Java不行、没Java就要上吊抹脖子跳楼挖坑的巨牛无比的大项目,听着让人心惊肉跳兼之无比崇敬。你说Java还能火几年?我说怎么也得5年!5年?那是上升期!少说十年,后面还有平台期。你还别不服,反正我退休之前Java说什么也别想凉下来,谁也别想威胁我的顶戴花翎。企业级啊,架构师啊,经验啊,高手啊,我混成这样我容易吗我?谁冒出来我就跟谁急,我就用口水淹死他!
他认为程序设计语言是各领风骚三五年,早先是C++的天下,后来是JAVA,现在该轮到以Ruby为代表的动态语言了。(其实我发明的Koodoo语言也是动态语言,),他说的固然没错,技术的潮流让我们这些程序员疲于奔命,苦不堪言。
其实也没有那么可怕,和硬件相比软件的寿命是很长的。谁还会用五年前的电脑呢?但10多年前我写的程序,现在还有客户在用,因为软件是柔软的,和硬件不一样,硬件很难升级,过时了就一扔了之,软件可以根据形势发展升级改造,因而相对稳定。
对新技术和新语言,固步自封当然不对,也不必要盲目跟风,这些年出现了多少昙花一现的技术?对新技术的态度是,保持关注,看清楚它里面的核心,技术的潮流向来不是空中楼阁,一定有内在的传承。
适度的学习,至少,每个月买一两本新书,可以减轻新技术带来的焦虑症。
从程序员到软件工程师[1]
看了程序员系列文章,颇多同感。做为一个从业13年,一直做软件开发的人,我想给那些已经、将要和有志于走上这条路的朋友一点点忠告。
首先,说说程序员和软件工程师。虽说都是编程的干活,但是还是有一点高下区别。
主要说来区别是程序员programmer是将程序(已经有流程,伪代码或设计模板)写成代码;需要熟练掌握至少一门编程语言。而软件工程师则要将目的描述成程序语言并实现的能力。例如将数学算法、自然语言、思维模式描述成程序算法,程序流程/类或/和人工智能,并写成代码的能力。
对初入行的人,当然重在语言,要做一个合格的程序员,首先要熟练掌握语言。包括语言特性和实现的能力。例如使用尽量中文说的面试题,就要求面试对象掌握C++中的类的封装;构造函数的重载和运算符重载。
做过一两年后,要想继续吃这碗饭就必须提高自己,首先当然是深入了解语言,特别是语言的思维方式,编译器的工作方式和常用设计模板。就拿C++的多态性来说,很多公司面试就会问什么是虚函数/纯虚函数(思维方式)?用C如何实现函数重载(函数指针和了解编译过程)?接口类/工具类/工厂类和 Sigleton类的实现(常用设计模板)。另外还有一大块就是内存管理了。
如果能做到深入了解语言本身,那么恭喜你,你现在Title至少是高级程序员了。
在对自己的语言有信心后,下一步就想一想自己要想哪方面发展。是管理方面(项目经理)还是技术方面(软件工程师)。既然这里讨论编程,我们就先不考虑项目经理。想发展为一个软件工程师其实也有两条路。一条是走系统软件工程师或者叫架构工程师的路;另一条就是算法工程师。
在国内的朋友我建议走架构工程师的路。要求就是知识面广,对整个系统熟悉,能很快了解和分析客户/设计需求,很快估计工作量、风险和所需要的资源(承担相当部分项目经理的任务),能根据现有技术人员储备提供一个解决方案。当然还需要一定的表达能力和文档写作能力。例如我当年走访某省农行,和对方聊了银行卡和医院医疗卡的联网,当天晚上就和市场部的人合作,搞了一个通宵,写出了60页的技术方案和外加40页的基于此方案的标书。
一般来讲,要做到对整体系统的深入了解,没有两三年的时间是做不到的。所以给国内程序员的建议是不要频繁跳槽,尤其是不要频繁跨行业跳槽。踏踏实实地将本行业的软件吃透,最好每个部门或模块都工作过。如果有这个想法,一般情况下你可以和项目经理沟通,通常他们会鼓励你这样到各个部门/模块工作。
我出国后,发现情况有点变化,由于语言和文化的区别,对自己走系统工程师的路没有很大的信心。只好转向走算法工程师的路了。
确定了这条路后,突然发现自己的数学能力太差了。不得不重新恶补线性代数,概率和数理统计等高等数学。同时将《数据结构与算法:C++版》好好从头到尾读了一遍。然后终于蒙混到了一个职位。
当时第一个任务就是在一个嵌入系统中写一段程序将bmp压缩为jpg。各位可能会问了,这个在网上满大街都是源代码,为啥还要自己写呢?其实这就是我不太建议国内工程师走算法这条路的原因。除非你是数学大牛,有自己原创的算法。否则在国内实在没有算法工程师很大的生存空间。但是在国外有很大的不同,稍正式的公司基本上都禁止使用open source。因为open source也是有版权的,有的是不能商用,更有的copy left是那些公司碰都不敢碰的。因为copy left要求你使用了他的代码,你也必须公开你的代码。
当然,我们可以看那些open source,然后自己重写。不过相信我,通常情况下如果你不是想简单做些变量替换就交差的话,看原代码不如看这个算法文档本身。
寻找自己的程序员之路[1]
每个人的幸福都是不一样的。我喜欢田园式的生活,在人多的地方总是不舒服。
对我来说,最幸福莫过于在工作中做着自己喜欢的事情。闲暇时,在能够眺望江边的地方,端着一杯红酒,一个人细细的喝。
为了这种生活方式,离开了北京,来到家乡所在的这个三线城市,寻找自己的道路。经过一年的探索,颇有心得。
大体上,我对自己走过的路和即将走的路划分为七个阶段:自信=意志=布局=切入点=团队=渠道=产品
第一关:自信
先说说我这个城市。这是一个什么样的城市呢?依山傍水,适合生活。几乎没有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开发了。以上各点貌似很散,也是也挺集中,就是:协议分析与设计、机器智能和图像处理,这三者是相辅相承的。