玩技术还有一层含义,就是迷恋最新出现的技术,一旦有了新的进展,就要下载尝试一下,或者安装一下玩玩。曾经有一次我们被某公司邀请参加他们的一个技术研讨会。会上有两组开发的团队,一组是原有的技术开发团队,另外一组是最新组建的,而且要准备以.NET技术进行开发,当时.NET还是一个新兴的技术,有人给老师推荐了一位工程师,这位工程师号称对.NET技术很精通。然而,当在会议上这位工程师讲述了自己准备用.NET做产品的构想时,原有的开发团队问到了很多系统设计层面的内容,这位工程师几乎无法应对,因为他只是玩了.NET技术,对于这样的技术在商业上的应用却没有经验。会后,老师也表示:尽管他对.NET技术有一定的了解,但的确经验还缺乏很多。后来这位工程师发展的还不错,进入了微软开发合作部,专门用来讲述微软最新出现的技术,想来这也与他自己的爱好挂上了钩,也是一个不错的选择。不过,这样的职位毕竟只是少数,对大多数程序员来说,玩技术并不能给他带来更高的价值。

前两天,这位工程师又在自己的blog上提到,他用微软最新开发平台内置的屏保程序制作了一个自己的屏保,演示给同事看,同事感觉很新奇。当我看到这条Blog,感到一丝苦笑:玩技术而已!玩技术的另外一个后果便是容易迷失方向。在Dos时代,技术的种类很少,程序员面前的技术方向也很少,玩也容易玩出深度。但随着Windows平台,尤其是网络出现后,各种技术层出不穷,即便是水平再高的程序员也很难兼顾几种技术领域。如果不能够对技术发展的来龙去脉有深入的了解,就很容易限于技术的表面理解,也就很容易造成程序员不知道如何选择要继续下去的技术,丢了西瓜,拣了芝麻。于是会出现论坛中到底是什么技术好,到底应该选择那种语言的疑问。按照大部分过来人的解释,其实只要选准一条技术路线,真正的钻进去,自然会取得好的效果,因为不同的技术之间是相通的。微软工程师孙展波在回答程序员做技术到底应该做深还是做广?的疑问时,毫不犹豫的表示:应该做深,而在广度的方面每周抽出一些时间了解一下就足够了。尤其是在现在互联网如此方便,网上信息量如此庞大,专业类网站密布,检索极其方便的情况下,想要获得任何资源都是一件并不复杂的事情。ZC530.CoM

而且玩技术还有一个结果,就是容易忽略用户的需求。技术酷是一件很棒的事情,但这并不能保证持续的生存。尽管硅谷曾经以看哪个公司做的技术最酷而吸引程序员的关注。比如最初的是苹果的技术最酷,后来出现了Netscape这种做浏览器的公司给人感觉技术很酷,随后SUN公司推出Java语言的兴起,Java技术变得很酷,但现在,Google搜索引擎成为了最酷的技术。因此,技术本身仅仅注重酷的感觉是远远不够的。

扩展阅读

程序员你真的只是程序员吗[2]


或许上面写的比较偏激,但真的是很普遍,我想告诉你们,你们虽然只是负责一个模块,但无论如何,请要知道你的项目到底是什么,如何运转,哪些地方好,哪些地方不好,因为这是对你自己的一个提升,也是对公司的一个负责。说到负责,我不得不说责任感,很多人就是缺少了责任感,以为完成了任务就可以了,但你要知道,你的公司或许等的不是你的完成呢?

请您拿到项目需求的时候,分析一下您要做的东西,用你敏捷的思维想一下,该如何去做,还请您多想想下一步,如果扩展了,我要改哪些地方,最重要的是,请您想想,这个任务对公司是否有利,或许你会说你只是个程序员,我没有权利去改变任务,没有错,你是个程序员,首先请你完成你的任务,在完成任务的同时,想想任务的完成对公司的运营是否起到反作用,因为有时你会比你的老板更了解项目对公司的利弊。如果你真的觉得不太好,不要怕,提出你的观点,但一定要想好你观点的描述,尽可能的表达清楚,让你的老板知道你的意思,因为老板他不一定懂技术,所以一定要白话一点。如果你的观点是正确的,你们老板也听明白你的意思了,那样你们老板会更加的器重你,而不会不可理喻的让你完成他所要的东西了。毕竟这是对他好的建议,也是对公司发展好的建议,如果你的观点不好,那样老板也会给你一定的提点,何乐而不为呢?

下班后,请你抽空想想公司的发展吧,因为你是公司中的一员,公司发展前景好也代表着你的发展前景好,如果你的想法给公司带来了好的前景,那也是对你能力的一种肯定。

最后说说面试,我也经历过很多面试,同样也面试过很多人,刚开始也会为工作着急,到处找面经,但最好的面经是无法从其他地方找来的,因为面试是一个展示自己的机会,而不是一再的ctrl+v 。刚开始我也会紧张,但马上,我调整了自己,每次面试就当自己一种磨练,一种交流、沟通、展示的机会,随后的几次面试都比较成功,再随后的几年,我回到了老公司进行面试,显然他们对我的能力已经是一个肯定了,最后我还是没有选择他们,因为我回去面试只是为了看看公司的发展进行的如何了,因为这一切也有着自己的一份努力。最好玩的是一次邮件面试,对方给了很多题目,大多是网上都有的,我也没有baidu,用自己的想法回答了所有的问题,并提出了很多意见,没想到对方回错了邮件,把他给人事的邮件发给了我,貌似是说面试还可以,就是工资高了点之类的话,我也懒得继续往下看,回信给对方,发错邮件了。过后不久收到对方的面试通知,更确切的说是offer,不过在他电话中我直接给回绝了,因为我已经在一家自己喜欢的地方就职了。

我爱我的公司,我爱我的程序,我也爱我的老婆和家人,因为他们给了我快乐,也给了我支持,让我能更全身心的去投入到代码之美中,我更相信公司能异军突起,成为IT界的领军人物,因为我看到了一群为公司孜孜不倦,辛苦能力的同事,我很爱这种氛围,我相信我们的努力一定会给自己带来收获,就算没有收获,我也没有任何怨言,因为我沉醉了,因为我快乐,因为我是个快乐的程序员。

程序员学什么样的知识才能赚钱[2]


第三部分,未来职业生涯规划、家庭环境分析、例如经济状况,家人期望等。感谢您阅读《程序员学什么样的知识才能赚钱[2]》内容,职场资讯网小编向您推荐一些职业规划知识,欢迎参考,希望能帮到你。

另外,现代的操作系统,都是多任务操作系统,多任务开发是个难点,这个多任务计算其实就是并行计算了,必须对进程,子进程,线程有很清楚的认识,对于时间片有清醒的认识,对于锁的使用,锁的作用域,去锁优化要很熟悉。但是,也很可惜,目前市面上的书籍,讲语言的就讲语言,讲操作系统的就讲操作系统,对于这个多任务开发这块,同时需要结合语言和操作系统两方面知识的,几乎没有,需要自己摸索。

嗯,还有一个很重要的问题,C语言的基本库相对薄弱,很多近年发展的高级语言,对于哈希,List,队列,栈,树等常见数据结构都提供标准库函数,或者库模块来支持,但C一般是没有的,偏偏实际应用开发还经常用到,得自己找开源,或者程序员自己写,这也会耽误程序员很大一部分精力。

这里就出现了C语言一个不好不坏的特性,或者说既好也坏,C语言没提供这些工具,程序员自己写,很麻烦,但是,由于是自己写的,自己掌握所有底层代码,因此,优化变得很容易,一个队列,我随手加个队尾指针做加速因子,可以规避大量的递归操作,效率提升百倍甚至千倍以上,这在C里面就是加几行代码而已,但是对于Java等语言,由于底层库是厂商提供,甚至根本就不是本语言开发的(很多高级语言底层库其实是C和C++写的),程序员一般没有修改能力,有时候,遇到性能瓶颈,大家就只有干看着,没有任何办法。因此,同样的应用,C语言可能一台服务器就够,但是Java语言呢,可能需要3~5台,就是因为这些语言做的太完善,而太完善的东西,一般不好做优化,性能就不及经过专项优化的C代码。

就是因为这个原因,在很多嵌入式等小终端场合,由于CPU计算能力有限,需要使用C来做优化,而不能使用Java等高级脚本语言,否则程序跑不过乌龟。

另外,现代的数据应用,出于优化起见,一般趋于功能细分的设计模型。比如一个数据库应用,存储模块专门负责高速出库和入库,中间甚至添加cache机制作专业的优化,而业务模块则强调设计一套嵌入式脚本语言做二次开发,保持最大的业务开发灵活性。其实Java,PHP,很多都是这种模型,MySQL底层模块实现高速存储,上层则使用apache和PHP、Java等语言,灵活二次开发具体应用。

但是,C由于一般都是编译执行,不是解释执行,一般很难做到这么大的灵活度,不能用户仅仅加个字段,就跑过去把整个服务器重新改写编译一遍,这样维护成本太高了。因此,C程序员的解决方案,一般是自己实现底层的高速数据应用,再自己写个脚本语言的解释器,提供给用户做二次开发。

新程序员如何理解“独立完成工作”问题?[2]


新人入职场,到底是独立完成工作比较好,还是跟着同事,一起完成工作比较好,这个问题,见仁见智,很难有一定之规。我只能说,有时候独立好,有时候,又合作比较好。这要看公司的具体文化,项目的重要性,你在项目中担任模块的难易程度,你们团队的氛围,等等,很多方面的考量的。

比如说,你们团队比较open,团队提倡有了问题,讨论解决,这个时候,不妨合作点好,如果你们团队比较严谨,强调个人能力,注意哦,这两种团队都存在的,而且都合理,都能完成项目,那你就尽量独立思考吧。

不过呢,这个问题对新人可能比较难以解决,但我们老鸟看,确实不难,因为即使在看不清楚文化,看不清楚游戏规则时,我们其实还有个办法解决问题,就是沟通。

沟通其实是一门很大的学问,包括同理心,包括换位思考,包括倾听的技巧,等等,包括很多方面,我当时学习《高效沟通技巧》的时候,是公司请了台湾的老师,讲了两天的课程,又做了一天的实战演练,才算入门的。这个,我建议你可以学习一下,很值得学习的,网上资料也很多,多看看,多想想,其实还是很容易学会的。

不过,就这个问题,我可以提示你一点,即使啊,你的团队强调独立性,也并不是说,你不可以问问题,而是需要你很巧妙得问。

怎么问呢?

老师,请帮我看看,这是怎么回事?这是一种问法。

老师,我这个问题我是这么想的,xxxx,请你看看有什么问题没,如果没问题,我就这么做好不好?这是另外一种问法。

你能感觉到什么差异吗?

前者,你自己的问题自己都描述不清楚,问的又是开放性问题,回答的人很不好回答,相当于要替你思考,这很多情况下都会遭到拒绝,简单的回答就是你自己看吧,这个问题应该你自己解决的。。

后者,其实已经融入了自己的思考,自己想出了解决方案,仅仅是请对方点评一下,这一方面体现出对对方水平能力的尊重,另一方面,这是封闭性问题,对方回答很轻松,就是是或不是。自然愿意回答。

而且,这里面还有个隐含的陷阱,你如果说不是,批评我的方案,一般说来,中国人说话,有个最基本的原则,就是你如果说别人不好,一定要指出来,为什么不好,好又怎么做?因此,对方如果否定你的方案,一般不用问,他自己就会跟你说正确的该怎么做,如果意见不同意,还可以多找几个人来讨论,其实都很容易。

你看见没,其实就是简单一个语言技巧,你这个问题也就不是问题了。

现在你能明白我在说什么了吗?

优秀程序员应该具备哪些素质[2]


六、面向对象

很多人都是从面向过程思维方式开始学习编程的,随后也学了面向对象编程方法,也用了面向对象开发工具和语言,但是,真正的用面向对象方法来编程、来设计编程构架、来进行功能分析、来需求分析还是很少的。优秀的程序员一定具备面向对象的思维方式,从设计到编程都贯彻着面向对象的痕迹,他们把面向对象作为思维的日常化。具有面向对象思维方式的人,可以对复杂混乱的事物进行抽象,具有很强的分类能力,化繁为简,程序更加模块化,程序共享度更加提高,具有大程序、超大程序开发能力。有关面向对象的问题,我在前面的文章中已经阐述很多了,这里就不在重复了。

七、基础扎实

要想自己编程能力有一个持续的提高,我们就必须要注重自己的基础建设,让自己能力的提高都建筑在每一层的坚实基础之上,即使能力再高,也不会被风吹得摇晃,尽显强者的刚毅不摧。我们不要小看已经学过的操作系统原理、编译原理、程序设计原理、数据库设计、数据结构设计、甚至计算机英语。这些基础是否扎实直接影响到以后的各种应用技术的掌握和掌握的程度。而大多数新的技术都是在原有技术的发展,因此掌握好原有的技术对最快掌握新技术是有很大的帮助的。此外,扎实的基础也使程序员把精力放在创新和解决疑难问题上,这样优秀程序员的处理能力将会大大增强。

八、条理清楚

普通的程序员则不太注重条理问题,他们对可并行处理的语句从来不进行次序的考虑;对语句使用没有一致性地使用,显得很随意;对处理流程往往一气呵成,一个函数能有上百上千条语句。他们最大的特点就是从来不多问一个为什么!而优秀程序员更注重程序条理,每个语句、语句的先后、语句的行数、函数命名等等他们都能说出为什么这样做。这种条理清楚地素质使得程序员能够把控程序的制作时间进度,也有利于大程序的任务的分隔。大凡程序员编写的程序能被其他人看懂的,基本上都是条理很清楚的。程序有条理,说明程序员的思维很有逻辑性,优秀程序员是最讲究逻辑的。一个优秀的程序员能把一个庞大复杂的程序说的有条有理,并且在程序上也显得可读性极强。条理清楚地表现形式之一,就是程序函数多,函数中的语句少。从这个意义上来说,优秀程序员也是优秀的设计师,项目经理。因为他们的逻辑是一脉相承的。

九、全面细致

我这里说的全面有五个方面的含义:第一、程序员要在编程过程中要全面细致,不要有遗漏,而这些遗漏往往造成了编译错误,需要花费大量不必要的时间去查改。第二,程序员要在设计过程中要全面细致,不要在功能设计方面有遗漏,尤其不要忘记例外情况的处理,许多功能上运行出错都是这种原因造成的。第三、程序员的编程技术要全面,要尽可能多掌握各种编成技术,例如,程序员不但要掌握前台开发技术,也要掌握后台开发技术,既要会文件处理,也要会数据库处理,既要会编写程序也要会制作安装盘,等等。第四、程序员的业务知识要全面,程序员不但要掌握编程技术,而且要主动学习和掌握用户的业务知识,通过对业务知识的掌握,才能更好地理解功能的意义,有助于编写更使用的程序。第五,程序员的知识面要广。优秀的程序员不但要掌握编程知识和用户业务知识,而且要有意识地拓宽自己的知识面,多关心新闻、时事、时尚、经济、技术、文艺、文学等各种知识领域,在知识的海洋中去畅游工作的轨迹,你就会有万事相同的感觉,这些知识会潜移默化地影响你编程的风格和效率。

十、求新求精

IT发展之迅速、技术更新之快捷,使得IT成为公认的追逐潮流的行业,因循守旧,固步自封,甚至年龄的增长都会导致程序员被这个行业所淘汰。有时候叹息行业无情也是情理之中。面对潮流的挑战,优秀程序员应该是无所畏惧的,他们应该始终怀有一种追求新技术的愿望,有一种追赶潮流,伴随潮流的勇气和胆识。因为这个职业就注定了这样的工作方式。当然,在新技术满天飞的情况下,我们不能也不可能有什么新技术就去学什么新技术,我们可以花很少的时间去浏览和关注各种技术的发展状况,但是对于自己所要掌握的新技术则要不惜代价,花大力气去学习它掌握它。掌握新技术的价值评判是用于软件的开发,用于更好地解决以往程序中存在不可解决的问题,用于所开发软件的销售价值。优秀的程序员会很好的选择新技术,并利用新技术立即去革新自己的程序,并使程序投向市场产生价值。那种以学习、知识储存的态度对待新技术都是不成熟的程序员。

我们常以新为炫耀,但是我们更以精为实力。优秀的程序员不但要求新,更要求精,使得自己在编程的某个方面成为专家和高手,让普通的程序员敬仰。例如,精通客户的业务知识、精通程序构架、精通某种语言、精通数据库、精通模块化设计、精通三层结构、精通界面设计、精通接口程序、精通安装盘制作、精通等等。程序员可以精通的领域和内容是非常之多的,关键是程序员对自己的要求。很多程序员满足于会,而不追求于精,使得自己变成什么都懂,什么都不精的,任何人都能取代的普通程序员。这样的程序员怎么能可能获得更高的报酬,又怎么可能变成优秀呢。

如何从优秀的程序员成为伟大的程序员[2]


4、对代码的信任

作为项目管理者,你怎么相信他们的代码。有些程序员,你可以对他们说:我星期五就要结果.--星期五到了,你收到了这样的Email:代码我都已经检查过了,现在就等着测试了。你很放心,只会有很少的瑕疵在质量确保的团队被查到。当然,还有些轻率的例子,一些程序员在邮件里是这样说的:我还没弄完,星期一上午我会最先完成它.你不太确信这东西,发现很多Bug,很长时间基本上不能用。又得花上几个星期清理代码中的Bug.

关键:你对一个开发人员越有信心,他离成为一个伟大的程序员的距离就越近。想象你是你的管理者,如果他并不担心你的代码,会给你多少信心和勇气!

5、对方案的信任

和对代码的信任是一回事--如果你手上有伟大的程序员,你就会对解决方案有信心。这些程序员同时也是伟大的建筑师。他们剖析整个问题,指出问题需要怎样去解决。这就不只是用伟大的代码编程的问题了,很大程度取决于你怎样构筑解决方案。这是关键,而且会让你在软件世界里出类拔萃。

6、满足客户需求

一天下来,你写出了最棒的代码、用了最好的框架和最好的解决方案,但这真的能迎合用户的需求吗?恐怕根本不是那么回事儿。你搞砸了。尽管现在多次失手,一个伟大的程序员还是会正中靶心,找出客户需要的,给用户逐步展示他们所需要的无bug的最终版本。需求正中靶心的同时,用户满意了。

7、不断升级

伟大的程序员会积极主动地把自己的技术升级。他们对知识的态度就像饿猫见着了牛奶,他们从不用上级催促给自己设定目标、不用经理要求他们完成任务,因为他们自己就已经安排OK了。

他们发现自己想要参加的大会就会给公司写Email本人非常想参加今年的Tech-Ed大会。我将用心研习,并对作出贡献。我预计这可节省金钱/其他原因.如果可行,不知公司是否帮我支付此行?如果我收到这样的邮件,我不仅会帮他支付参会费用,他的路费我也会全程买单。

伟大的程序员们永远会关注例如。net用户组或Java用户组的所有用户群体。他们参加本地的技术会议,并从中汲取知识。你会看所有最新博客和最新的杂志吗?现在列出你最喜欢的前5个开发博客。你能做到吗?你应该像参加基督教青年会那样轻松做到。做到这些,可以很好的帮助你延伸你的思路!你将会不断获得更好的点子!你会得到更好的回报!

程序员进阶的建议:多看、多写、多交流[2]


第三部分,未来职业生涯规划、家庭环境分析、例如经济状况,家人期望等。感谢您阅读《程序员进阶的建议:多看、多写、多交流[2]》内容,职场资讯网小编向您推荐一些职业规划知识,欢迎参考,希望能帮到你。

关于多写其实上面也提到了,学习后的东西应该要马上实践,并尽快在合适的时候应用到自己的工作中,这样才能收获的更多更快。另一方面是自己尝试着去写一些小项目,只有去做一完整性的项目才是最有价值的实践,但在做这些实践中我认为应该严格的要求自己,既然是为了学习,就不是应该敷衍了事,尽可能把所有细节都处理的最 好。还有就是时间一定要要求自己,不能拖,一方面是要给自己压力,二是如果时间拖的太久思路和激情没法持续的话,那你的计划很可能最终会失败并不了了之。

开篇我提到很多初学者都说入门之后不知道该如何提高,我都告诉他们要多写,为什么会无法提高,我认为是没有目标,只要你给自己定一个目标,然后去实现,完成后其实也达到自己提高的目的了。例如你去写一个简单的博客程序,在实现的过程中会遇到很多问题,再逐一去解决,这样你就有了学习的方向了,解决问题就是积累经验和学习的过程。总的来说要给自己设置一个需要完成的目标,这个目标是什么有什么内容,什么时候完成都很清楚。

其实说到这里就可以回答上面该如何去掌握那么多的函数呢,当你看过和写过很多代码后你会发现你所掌握的函数和方法已经很多了,这就是在实践的过程中无形产生的结果。所以什么语法之类的基础的东西是不需要去死亡硬背的,在运用的时候自然就可以对它驾轻就熟。

最后我认为做技术的交流很重要,因为做技术是个永无止境的学习过程,而交流是一种更有效的学习方式。因为每个人的知识系统都是不同的,每个人掌握的东西不同,思维方式各异。所以交流就是一个互相学习和促进的过程,当你把自己的想法与别人交流你就会收获更多新的想法,交流是一咱倍速增长的过程。

交流有很多的,有线上的有线下的,大家都有上论坛的习惯,这是一种交流方式,但我认为线下交流更有效,语言的交流比文字的交流方式更直接和全面。因为我是常委之一,很多线下活动是由我组织的,从参加人数来看并不是很理想,所以我认为做技术的应该更开放一些,多参加类似PEA的这种交流。

交流一定要是开放的,所以在交流中应该是一种包容的心态去面对。也就是说我们是持有自己想法的时候也应该耐心倾听他人的意见,不能认死理。只有站在客观的角度去看问题才能把问题看的更透彻,只有不抵触才能让自己学到更多的东西。

在我们的技术团队中有定期的技术分享会,目的就是为了建立交流的平台,让大家都尝试表达自己的意见,锻炼自己的能力,并可以和更多的人去交流。

最后总结一下,多看,吸收别人的经验转化为自己所用,多写,全面性的锻炼自己的能力,多交流,利用众人的智慧。三多更多的就是去做。

从程序员到软件工程师[2]


当时看算法本身的文档,然后又回头看线性代数,终于理解了算法,并用程序表达了出来。由于是嵌入式用的,又花了大量时间进行算法优化。

后来跳槽时终于尝到甜头:

1。薪水高,基本上一应聘就是Senior的职位

2。稳定,这个一般大街上招一个程序员是做不来的

3。机会多,这个怎么说呢,反正只要是大公司招人,象微软、Google等,除了问一些语言本身的问题外,基本上就是算法和数据结构的问题。

通常面试那些时间你写源代码是来不及的,基本上就是写伪代码。或说明你的算法基础和思路。答的好一两句话就解决了。

想走这条路的朋友,我首先建议好好读读《数据结构与算法:C++版》,里面所有常用算法和经典算法及数据结构必须烂熟。其次,建议将大学课本找回来,几本高数好好复习复习。《线性代数》《概率和数理统计》《微积分》《常微分》等等。

我们不是大牛,基本上创造不出新算法,但是我们能够将别人的算法实现或者能把一个具体问题分解成已知的算法,那么你就是一个很不错的算法工程师了。

说实在话,语言只是工具,是很容易掌握的。99年2000年泡沫时期,不是很多人突击那么三个月就可以上路做programmer么。就象刀法是很容易学会的。要应用精熟,也不过是长时间的积累而已。

对语言的理解实际上就是对刀法的领悟,有人是顿悟。但是多用总是会渐悟的。

最重要的是基础,就是数学能力,那可是内功。可以这样说,你要想真正和其他程序员拉来差距就在这里。

我朋友的孩子想走计算机编程这条路,考大学我就推荐考数学系!

再有就是多做那些大公司的面试题,一是锻炼自己的大脑,二是熟悉这些算法的应用。

好了,现在能想到的就这几点,这里给几个面试的例子,看看能不能用最简单的描述解答

1.如何生成一组正态分布的随机数?

2.有一个二维迷宫,如何找到出口路径?

3.有数据库存储一股票每五分钟的实时报价,如何生成每小时,每天,每周的股票价格变动曲线?

====我的建议答案

1。生成二维随机数,只取落在正态分布包络线内的数

2。二维连通图深度优先遍历

3。傅利叶变换

程序员的时空定理[2]


营销法略的法,将产品营销拆解为面向机构客户采用一目标(CUTE)、二手段(建网10-30-60法则、达情1-3-6法则)、三宗案(赖式、袁式、牟式)的国情式流程,面向大众客户采用美式营销的普遍真理(6大要素、经典8P、当今新法)与中国市场的具体实际(本土特征、本土各P)及IT特殊的鸿沟现象相结合的差异定位专业式流程,以及不收客户的钱还能赚钱的出奇守正的第三方流程。

关于为将者的产品人修炼,智(坐知立行)、信(合作共赢)、仁(客户至上)、勇(勇于创新)、严(品质保障)五大素养,在成就企业产品的同时,也成就自我人生的成功。

程序员第二定理,不妨俗称为看远定理,或时间定理,即程序员应就职涯之世论技术之时.古人云,不谋万世者不足以谋一时,这个世就是职业生涯的全景,这个时就是当前的技术实现。反映到程序员需要做的心智模式的第二个战略转变是就职涯(世)论技术(时).

程序员可以选择职业路径,始终做工程技术,其职涯大致的到达路径是研发、技术方面的首席技术官CTO或工程、项目管理方面的工程管理副总VP Engineering;也可以选择职业路径二,从技术端向商业端走,其职涯大致的到达路径是首席产品官CPO、首席营销官CMO或销售副总VP of Sales.一般情况下,这几个职务中能到达CEO的只有从CPO、CMO或VP of Sales上去,从CTO和VP Engineering一般上不到CEO,即CEO更偏向商业,这大抵也是商业驱动技术的写照,美国的CEO九成以上是从有过销售经验的营销或产品人员中产生。

长江后浪推前浪,创新的技术、产品和企业不断涌现,IT行业最大的敌人是周期性的创新衰减,或曰创造性毁灭,即你可以通过创新毁灭别人,新企业也同样通过创新来毁灭你,如微软之于IBM、Google之于雅虎,以及现在打得火热的微软和Google.

企业如斯,人亦如是。IT业人的最大的敌人是因年龄增长引发的激情与创新的衰减,随着年龄的增大,谈婚论嫁、成家生子,你会发觉刚毕业时整晚都可以呆在电脑前的激情逐渐消失了,曾经被自己嘲弄的没有志向的朝九晚六之人,现在又多了一位,而在你心有旁骛之时,长江后浪滚滚而来,就要把你拍死在沙滩之上。

企业应对周期性衰减有三类方法,第一类是依靠技术性垄断延长生命,如微软;第二类是阶段性自我颠覆,如IBM的老沃森、小沃森、郭士纳等领导的三次战略转型;第三类是通过兼并完成自我重塑,如思科。

IT业人亦然,第一种,用人单位就只有你能搞定这个产品或技术,地球离开你就不转,你就是微软,号令天下,莫敢不从,倚天不出,谁与争锋;第二种,跟着新技术潮流,不断学习,与时俱进,完成阶段性的自我颠覆,如原来在DOS下编程,后来Windows,再后来。Net、SOA、云计算等;第三种,从技术领域通过兼收并蓄其他领域的知识和技能,完成自我重塑,如成为PM、成为产品经理、成为营销业务人员。

不谋全局者不足以谋一域,不谋万世者不足以谋一时,这就是程序员的时空定理。

合格程序员应该具备的12种能力[2]


4.利用工具能力

工欲善其事,必先利其器。有了趁手的家伙,工作效率可以提升数倍。你编程序,有没有选择一个很好的IDE,以前听说编程高手都用记事本写程序,我觉得那是一种自虐。就像以前看到的一篇文章,说一帮户外旅行爱好者,出去旅游,背了重重的旅行包,里面装着什么压缩饼干等快速食品。他们宁可就着矿泉水啃压缩饼干,也不肯去1里路都不到的快餐店,农家菜馆吃饭。工具是为目的服务的,好用,提高效率就行,形式无所谓。

另外一个常用的工具就是日记本,好听点可以称为知识管理工具,我用的是myBase,感觉非常好用,在之前,我的所有的片段内容都是记录的单独的文本文件里的,非常不好找,管理也很混乱。

经常上互联网,看到好多好的资料想保存下来,作为日后查看之用。一开始,我用的是firefox自带的书签,但是自己分类太累,多了之后不便于查找,很麻烦。后来用了插件,非常方便,现在成为了我必备的一个工具。

还有一个最重要的工具就是搜索引擎了,我装了google for firefox插件,感觉不错,还有英文翻译功能。按照我同事的说法,内事用baidu,外事用google。很多技术资料都是英文的,用google搜索效率高一些。搜索引擎用好了,就等于打开了一扇通向知识宝库的门,使用搜索引擎,关键字选择很重要。

经常去浏览大牛的blog,逐个网站访问很麻烦,去看了又可能没有更新,可以借助于RSS订阅工具,我是用iGoogle桌面工具,每天早上花半个小时扫一下,大牛的最新文章尽收眼底了。

5. 英语能力

新的技术资料都是英文的,英语国家的IT技术走在我们前面至少10年(这是我自己估计的数字,可能正在缩小)。就连印度,一个连基础设施建设都不太完善的国家,因为其英语基础较好,其在软件外包领域的发展也非常迅猛,远远超过了我们。学英语,首先是有信心,其次就是花时间。多阅读英文资料,贵在坚持。

6.学习能力

在IT业混饭吃不容易,整个环境进化的太快,你不学习,就等于落后了。学习要有针对性,别今天学ruby,明天学python,后天php的。首先要认清自己的目标,自己短期目标是什么,1年后,3年后,5年后的目标是什么。结合这些目标,确定自己的学习计划,人的精力毕竟是有限的。当然,多掌握几门编程语言也是好的,可以扩充自己的知识面,重要的是为自己的目标服务。

要想系统的学习一门技术或工具,看书是最好的方法。看完后,然后上网找相关资料,进行深入学习。学习要抓紧一切可以利用的时间,比如电脑启动要花1分多钟,旁边放一本书,可以看上几页了。公交车上,地铁上也可以看。

当然,不能只学习技术,要经常练习自己的软技能,比如沟通能力,表达能力。你可以把自己学到的东西,解释给自己的同事听,既加深了理解,又增进了同事之间的交流。学习的最高境界就是你能够把学到的东西解释给别人听,这才说明你理解了。在学习心理学上,称之为构成主义。

我学一样东西,总是先上网了解有没有相关书籍,如果想学,就买一本或者去图书馆找相关的书来读。我买的书,家里快放不下了(到目前位置,我买了1万多块的书)。我多半是把目录看完,了解这本书讲解的主要内容,然后需要的时候,我就可以立即补充它进入到我的知识结构。每个人可能都有自己的学习方法,意识到学习的重要,并能够根据需要补充自己的知识,这种能力更重要。