如何成为好的程序员

时间:2024.5.2

程序=算法+数据结构

而算法和数据结构的基础又是数学,我不想在此讨论这个公式在现如今还是否适用,但我认为数学、算法和数据结构对于成为一名优秀的程序员是必不可少的。软件开发工作分为很多种,而你对数学、算法和数据结构的掌握程度决定了或者说限制了你能从事的工作种类,如果你没有这些能力你就不能从事某些工作种类,并不是说你就不能从事程序员这个职业,这些种类包括但不限于游戏人工智能、3D图形算法、密码学、任何软件的核心代码的优化工作,或者给你一篇比较介绍新技术的论文要求你能够理解并用代码实现。

IBM、Sun、Microsoft每年都赞助ACM/ICPC国际大学生程序设计竞赛(比赛以3人为一小队,每队使用1台电脑需要在5个小时内使用C、C++、Pascal或Java中的任意语言编写程序解决7到11个问题,这是真正的纯算法竞赛,你甚至不需要为程序设计界面,而且无论你的代码写得多么难看难懂或者难以维护,只要能解决问题就可以)。可见大公司十分注重算法基础以及运用这些算法解决问题能力,而不是你是否会使用某个类库,是否掌握了某种框架,甚至你是否会使用某种语言也不是最重要的。

如果你不甘心只做一个ctrl+c ctrl+v的程序员,或者CRUD(CRUD是Create、Read、Update和Delete的首字母缩写,这里指使用数据库编程)的程序员,那么你必须掌握一定的数学、算法和数据结构。

在大学期间一定要学好这几门数学课程如果有开设的话,高等数学(或者数学分析),线性代数,离散数学,解析几何,概率论与数理统计。

如果你的学校有数学建模或ACM/ICPC编程竞赛类似的组织,一定要报名参加学习,即使不能代表学校参赛,它也能给你莫大的收获。

如果你在学习命令行程序,那么继续学,不要急着编写带有界面的程序,那些很简单。

下面是我推荐的一些书籍:

《算法导论》

这是ACMer必看的书,我想大多数人都听过这本书无需我多介绍,这是一本非常全面的

基础算法书籍,伪代码描述,不限于语言,而且对算法给出了数学上的证明,复杂度分析。

《算法引论——一种创造性方法》

这本书非常棒,它不像《算法导论》那样面面俱到,而是专注于描述一类问题,就是可以

通过数学归纳方法解决的问题,数学归纳是递归、分治法、动态规划的理论基础,这本书主要的牛逼之处在于它是在教你面对一个问题如何思考设计出算法,如果看完它你将掌握一种思维模式,可以说我有80%的算法思路都是受这本书的启发。如果你只准备看一本算法书,我推荐这本。

《高效程序的奥秘》

这本书又是从另外一个角度对小算法进行描述,里面包含了各种编辑的小技巧,尤其是对位运算相关的算法有详细描述。例如统计一个int型里的二进制表示有多少个1bit,我当年笔试的时候做到过好几次这种题目,我知道我写出来的算法是最快的,我唯一担心的是面试官会不会不知道这些诡异的算法而看不懂我写的代码。

《具体数学》

这本书是组合数学+初等数论,而且是讲这两门数学和计算机结合紧密的部分,可以编程实现部分。数学为算法提供模型和理论,当你遇到一个实际问题,可以通过规约和分解的方法把他转换为一个已知模型或者已知模型的组合形式,再运用已知的知识对这些模型进行分别分析求解,最后再组合起来即可,所以你多知道一个数学模型或者理论,就多知道了从工作之后我就逐渐意识到代码的可读性和可维护性是非常重要的,当然并不是说程序的运行效率不重要,这里也有个所谓的二八定律,20%的代码占用了80%的运行时间,其中20%的20%又占用了80%的80%的运行时间,也就是说大约4%的代码占用了大约64%的运行时间,如果我们针对这4%的代码进行优化将取得卓越的成效,而不需要对所有的代码都进行效率的苛求,为什么呢?因为很多时候高效性和其他特性是矛盾的,在不影响其他特性的情况下比如不降低可读性的情况下应该尽量写出高效的代码,但是当效率和可读性发生矛盾到时候呢?我的观点是在不确定瓶颈在哪里(谁是那4%的代码)的情况下优先考虑可读性,因为一个项目开发的过程是一个不断对代码进行阅读、添加和修改的过程,你今天写下的代码可能在几周之后就会被改动甚至删除,也许这个需求都cancel了,早期的优化就是在浪费时间,并且可能把代码搞乱变得难以修改,有一个格言“过早优化是一切罪恶的根源”,还有一条优化法则“第一条:不要优化”,我觉得在开发阶段首先要写出可读性和可维护性好的代码,在这个基础上不要写出明显低效的代码(比如使用了错误类型的容器),然后在开发完成时(模块或者整体)如果有必要,可以找到瓶颈,有针对性地做一下优化,如果你不会优化也没关系,可以把这个任务留给精通算法和数据结构的人,如果你就是那样的人当然最好。

总而言之,开发的过程中优先考虑可读性和可维护性,那么如何写出高可读性和可维护性的代码呢,除了积累经验,其实也是可以通过学习获得一部分技能的,包括编码的风格,设计模式,重构的技巧等等。

下面我再推荐的一些书籍:

《代码大全2》

这也是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节。它从软件质量和编程思想等方面论述了软件构建的各个问题,并详细论述了紧跟潮流的新技术、高屋建瓴的观点、通用的概念,还含有丰富而典型的程序示例。这本书中所论述的技术不仅填补了初级与高级编程技术之间的空白,而且也为程序员们提供了一个有关编程技巧的信息来源。这本书对经验丰富的程序员、技术带头人、自学的程序员及几乎不懂太多编程技巧的学生们都是大有裨益的。可以说,无论是什么背景的读者,阅读这本书都有助于在更短的时间内、更容易地写出更好的程序。

注:这本书其实不止讲了编码和设计,但如果关于编码和设计方面你只想读一本书,那么就选他吧。

《设计模式——可复用面向对象软件的基础》

这本书结合设计实作例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。书中分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别有用。

注:事实上本书并不适合初学者,因为你无法理解他为什么这么干,当你有一定开发经验的时候再来读他可能更好,可能会有“哦,啊哈”的感悟。

《重构——改善既有代码的设计》

Martin Fowler和《重构:改善既有代码的设计》(中文版)另几位作者清楚揭示了重构过程,他们为面向对象软件开发所做的贡献,难以衡量。《重构:改善既有代码的设计》(中文版)解释重构的原理(principles)和最佳实践方式(best practices),并指出何时何地你应该开始挖掘你的代码以求改善。《重构:改善既有代码的设计》(中文版)的核心是一份完整的重构名录(catalog of refactoring),其中每一项都介绍一种经过实证的代码变换手法(code transformation)的动机和技术。某些项目如Extract Method和Move Field看起来可能很浅显,但不要掉以轻心,因为理解这类技术正是有条不紊地进行重构的关键。点击进入该书更多详细信息。

注:这本书可以和设计模式相辅相成,《设计模式》讲的是在写代码前如何设计模型,而《重构》会教你在写代码的过程中如何发现代码的“坏味道”并且如何step by step的以安全的方式把代码变的更好。

《代码整洁之道》

软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关。这一点,无论是敏捷开发流派还是传统开发流派,都不得不承认。《代码整洁之道》提出一种观念:代码质量

与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。作为编程领域的佼佼者,《代码整洁之道》作者给出了一系列行之有效的整洁代码操作实践。这些实践在《代码整洁之道》中体现为一条条规则(或称“启示”),并辅以来自现实项目的正、反两面的范例。只要遵循这些规则,就能编写出干净的代码,从而有效提升代码质量。

注:这本书更偏向于讲述编码风格,如果你读了前面3本,这本书可以略过不读。 一种算法,多了一个解决问题的思路。


第二篇:如何成为伟大的程序员?


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

程序员 软件开发

【IT168 分析评论】

怎样评定一名软件开发人员?这是一个颇为奇怪的问题。现在已经有了很多的理论和形式来做这件事,人力资源部门也试着帮你管理和反省自己的行为。然而,怎样才是一个伟大的软件开发人员,在今天,你该怎样发展你的职业生涯?以下是我评定团队中软件开发人员的“军规”。按照这些技巧和规则,你可以改善你的现状,由一个优秀的程序员,成为一名伟大的程序员。

1、时间花在写精彩的代码上

这里说的不是数量,而是质量。对此,一种歪曲是:要数量,也要质量。你也许会很多次的遇到以下的两种情境:

情境A:你有一个发疯似的能写代码的程序员,事情似乎在进展中……然后,Bug开始不断出现,你们也不知道为什么,好像永远补不完。补完十个,又出来五个,现在你手里的,就是一大堆代码……

情境B:你现在有一个看起来很聪明的程序员,你面试他的时候,他似乎无所不知,能把理论说的头头是道。然而,你留给他三个任务,三个星期以后,他还在做一些三天就该干完的事。这下该你困惑了,他这么聪明,他知道generics(详见备注),多线程的一切事情,甚至还能给祖母级的人讲解什么是指针,让老太太兴奋的想去编程。可是——怎么什么都没完成?

于是,在梦境中——你写出了堪称伟大的代码,——伟大的代码是伟大的程序员写出来的,他睿智,明白代码的真正品质所在。写代码就像托尼?霍克在玩滑板一样自然优美,看上去就令人愉快。这些程序员以让你眼花的速度搞定一切,他们知道每个问题应该处理多长时间,也不会追捧寻觅所谓的世界最好解决方案,弄很多线程很多层来写一个简单的游戏。他们写的程序没有Bug,因为写的时候自己测试过了,在睡觉时也在写代码说的就是这样的人。这些程序员太宝贵了。

2、阐明问题

可以明确的是:即使有问题暂时处理不了,还有成百上千的方法去解决。有些人反应很迅速,很快就能提出多种解决方案。然而,一个伟大的程序员应该在做出行动以前清晰阐明问题——创建文档或用白板表达出来。他们写邮件给项目的管理者,这样表述:“我想和你说说我是怎么理解这个问题的,我们能这样处理吗?”然后他们就会动手给你多种方案。 对,这些人明白自己看问题和阐明立场的方式,而这理解方式大概不会是问题创建者所想要被理解的。请牢记这就是关键所在。一名伟大的程序员在尝试解决问题以前,一定要完全的理解它。你百分百搞明白了吗?没有?百分之九十九?——回去再多问些问题,确保百分之百理解清楚了。

3、怎样着手解决问题 那一搞明白了问题,就开始动手写代码?错!一个伟大的程序员应该按照规划,开始思考面临的多种选择,基于问题开始考虑最好的解决方案。我觉的这像一场国际象棋比赛。你知道每个棋可以怎么走,知道所有的游戏规则。但是你会马上走棋吗?不,你要审时度势,制订计划,紧盯对手,分析其通常的做法。和这一样,在你coding解决问题以前,你也要这么做。

看看问题,计算出需要怎样的结果,你的时间能怎么安排,预期的质量,你必须用的工具,……好了,开工吧!

4、对代码的信任

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

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

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

6、满足客户需求

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

7、不断升级

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

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

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

8、团队奉献

你可以是团队中最棒的那个人,可是如果你不是最好的程序员、不是建筑师、不是团队里最有活力的人,那么对我来说,如果你不能分享或对你的团队有帮助,你的价值就会大打折扣。一个好的程序员会使自己周围的人同样强大起来。试想一下,好程序员会不断完善自己的知识和能力,如果他们不和周围的人分享他们的知识,他们从哪儿能获得更多呢?

他们不断学习新东西,发掘新技术,但是不会让其他人知道他们这么做了。一个好的程序员会准时完成方案,但是那是在催促和团队得不到休息的前提下。然而一个伟大的程序员则会与团队中所有的项目保持联系,在需要的时候还可以出手帮忙。他们会如是说:“我注意到A团队的项目进行到xx进度了,如果不介意的话,我想我可以帮忙?”

9、做好会议记录

做好会议记录绝对至关重要!开会期间,大家花大量时间来说明了新观点、新主张、集体讨论还有提出了新设计方案,可是会议结束后却没有人可以拿得出会议记录,简直没什么比这更糟糕的事情了。即使你有会议大纲,我还是期望见到参会的每一个人员都可以带着纸和笔(当然对于程序员来说笔记本则堪称完美)。一个伟大的程序员会注意到这点。他们会记下所有的会议记录,并且在会议结束的的时候说:“就刚才的会议,我着重记录了几点:XX…… 我是否记录全了呢?”

接下来,伟大的程序员就会把他做好的会议记录分发给项目管理者,列出会议时间、会议主题和参会者。接下来,是会议项目的标题和重要条目。在这之后,就是这些议题的详细记录。一个好的程序员没有做会议记录,并在会议上对提出的每项事宜都点头称是,那只能寄希望于他的记忆力足够好了。随后,他会给你发邮件让你看看他的改动,你得回头提醒他忘记的不多,百分之九十的都没错。——这不是浪费时间嘛!根本不是这么回事!所以,做好你的会议记录。

内容导航

10、孺子可教和接受批评 如果你读到这儿了,就表明你有希望接受这些建议,并在以后的开发行动中尝试执行。对,程序员的另一项重要能力就是向他人学习并且能够接受批评。通过把自己变为一个虚心受教的人,像海绵一样快速吸收大量知识,毕竟在编程的路上你还有很多前辈。当然,也许他们在写代码的岁月里慢慢生了锈,甚至伤痕累累,但是他们毕竟曾披荆斩棘跨过无数的坎儿。对于做出正确决定,他们有着瞬间的本能,让你不得不服。处于他们这个位置,很乐于见到你的成长和成功。

所以,只要你是个伟大的程序员,就会理所当然的拥有理想的工作环境。如果你不断改善技能、虚心好学、在别人给出的意见和批评中总结错误并得以改善,我向你保证你将会成为一个伟大的程序员而不只是想象自己变得伟大而已。如果你总把自己想象成为“精英”而不进步,那你只是自欺欺人。如果你不成长,你甚至不能停留到原地,等待你的只有灭亡!

11、公司需要的时候总能出现

这如同等价交易。如果你为一家伟大的公司工作,他们会给你足够的弹性。公司不会限制你如何工作,不限制你开始或结束的时间,也不会限制你什么时候停下来歇歇。公司会鼓励你在休息时间做做操,甚至会在你和团队成员出去吃饭的时候为你们买单……在繁复大量而紧张的工作后,公司会放你几天小假。诸如此类。

然而,毫无疑问,与前面的这些美事儿随之而来的是责任。如果赶上时间紧还得出活儿,伟大的程序员则建议你即使在周末也要加班。即使干得再晚也得把活儿干完。你看,伟大的程序员是要为自己的创作负责的。这虽不是必需的,但这是伟大程序员的标志之一。有些人只想朝九晚五的上班,他们可能不错,但是成不了伟大的程序员。伟大的程序员是团队中干到最后的那个,把作品视为完美的艺术,与团队成员亲如一家。

12、衣着职业化

你永远也不知道一个客户会什么时候突然拜访。你也永远不会预知什么时候突然要参加一个会议,不是每一件事都在计划中的。你得随时准备好展现自己。一个好的程序员周一到周五穿着普普通通,甚至有可能穿牛仔装和运动鞋来上班。在某些周五,他们穿着T恤,短裤和运动鞋出现。当一个客户突然在周五出现,要谈一个大项目,你没法把衣衫不整的他一块儿叫上。

一个伟大的程序员周一到周五都穿着职业化,衣服也能带来成绩。如果你不在意穿着,你也会因为穿的太奇怪而得不到晋升。毫无疑问,套装和领带还是很能提升你自己的。我向你保证,一套得体大方的西服套装会让你在今年就觉的物超所值。

13、沟通能力 这是另外的判定条件。这世上有太多优秀程序员,却没几个伟大的程序员。为什么呢?因为大多数程序员不善交流。交流的层次很多:从发电子邮件、参加小型SCRUM开发小组会议到大一些的主管会议,水平逐渐提升。这样你就能在数百人参加的会议上自如地展示你的软件。在会议上你不需要有好演技,但是至少要清晰明了地表达你的观点。你的沟通能力越强,你的职业道路就会走得越远!

概要:想要成为管理人员,你的沟通能力得分至少要打到9到10分。甚至你在会议上只讲了几分钟,或只一个小汇报,你都需要非常好的表达能力。别只是在你的每天的工作日志寥寥写上“修补1371个bug”,你要做的是尽可能描述清楚如何在这么艰难的情况下解决了问题。阐明你的方法,说明你如何保证这个bug不再出现。你就不再为你的日志发愁了。这会是你向经理展示自己的精彩演出。

14、目标设定的技巧

好的程序员日复一日的做你安排给他们做的事情,贯穿始终。他们并不往远看,不对明年、5年甚至10年后作打算。一些好程序员虽然知道自己想要什么,却没有具体计划去实现。伟大的程序员则给自己订立年度、未来5年的目标,而且大概预期到自己10年后的发展。

伟大的程序员有了目标不会只是想象,他们会具体实施。他们会根据具体情况,在预期的时间做具体的事情。他们会详细地制订明年的计划,包括要上的课程、要完成的项目甚至包括他们需要建立的人际关系。

15、组织技巧

把所有事情整合在一起的最关键要素是组织。你可能是世界上最好的程序员,但如果你不善于组织你所做的事儿,你的工作将陷入瘫痪,最终丧失优势。伟大的程序员保持自己工作平台的整洁有序,保留所有的笔记并调理清晰。他们标出自己的会议日程表。他们有专门的收件箱给日程邮件、会议和新任务分类。他们保留文档并能在需要时迅速找到所需。

额外要提到的:激情

伟大的程序员如果没有热情,那么他的工作也并不伟大。好的程序员有了热情来对待他的工作、方案和团队,那么他比伟大的程序员还要伟大。

在回顾的时候,我用这些标准来评判我的开发团队。我给我的团队尽可能最好的环境,作为回报,我想要他们都成为最伟大的程序员。你可以用这些标准来评判你的团队,或者你本身就是一名程序员,请用这张列表来尽可能地改造自己来超越同侪。

备注:Generics是程序设计语言的一种技术,指将程序中数据类型进行参数化,它本质上是对程序的数据类型进行一次抽象,扩展语言的表达能力,同时支持更大粒度的代码复用。对于一些数据类型参数化的类和方法来说,它们往往具有更好的可读性、可复用性和可靠性。在设计集合类和它们的抽象操作时,往往需要将它们定义为与具体数据类型无关,在这种情况下,使用Generics就是非常适合的。

近几周,一份反映 Netflix 公司企业文化的报告在网上广为流传。这份报告里列举了很多Netflix公司里令人称赞的做法,包括这个公司是如何的招聘和辞退员工的。里面有大量的信息是描述Netflix公司是怎样对待员工的,这使Netflix公司变成了一个很有吸引力的工作场所。报告里面提到过有一个关于员工所期望的内容的清单,但没有把清单列出来。报告的开始部分就谈及了企业价值问题,而且是按照员工的立场角度写的,可惜并没有把这个问题展开。

我并不在Netflix工作——你也知道 (我在 Yahoo!工 作)——但我深切的感觉到,不管你在哪里工作,成为一个优秀的员工、优秀的软件开发工程师的过程是一样的。 下面所列举的都是伟大的程序员所具有的经验和品质。

如何成为伟大的程序员

对于软件这一行的人,我们有个很大的挑战,就是如何能够用正确方法的做事情。什么是正确的方法,这依赖于你在做什么和做给谁。而究竟所谓“正确的方法”里都包括了什么内容,这并不是重点,重点是你是否能坚持按照这种方式做事。初级程序员在这个问题是通常不能做到坚持,而资历较深的程序员却能始终坚持原则。

如何成为伟大的程序员

也许会有一个“非常紧急”的项目,或者这个项目很特殊,不能按常规过程开发。这只是个假象。好的程序员知道即使在任何情况和环境下都要坚持做正确的事情。如果说按正确的方式开发将导致不能按时完成任务,那么,他们就会知道,这个项目是不能按时完工的。不要妥协,工程质量是你作为一个优秀程序员的唯一终极证明。确保你所有的代码都是在正确的方法下100%正确的写出的。要按一个优秀的程序员的标准来要求自己。

听起来很傻,但却是真的,优秀的程序员都乐于承担工作上给他们带来的痛苦。你说出一个伟大的程序员,我都能告诉你,在他或她的职业生涯里,各个阶段,都曾有花好几天时间去解决一个问题的经历。优秀的程序员品味着困难给他们带来的挑战,这让他们日以继夜,他们明白,问题必须要解决掉。

如何成为伟大的程序员

不太优秀的程序员就不一样了,他们在刚刚碰到有麻烦的迹象时就先想到要寻求帮助。在问题面前,他们习惯于去寻求帮助,而不是自己去努力解决这个问题。他们最喜欢的一句话是:“帮我看看这个问题”。伟大的程序员的第一反应是我要自己解决这个问题。解决问题是种技能,是优秀的程序员非常看重的一种技能。

好的程序员是通过痛苦的磨练才成为伟大的程序员的。痛苦的磨练是说当你对这个问题实在无能为力时才去请求外援。求助就意味着认输,所以尽量减少这种处境的发生。 甘愿受苦。和问题做不懈的斗争。这就是你要学会的。 注意: 我并不是说你不能寻求他人的帮助。我说的是,你首先要尝试自己去完成任务,如果你不能完成,再寻求帮助。不要在自己没有努力过前就轻易的求助。你经常会发现,当你知道了解决方法后,你才认识到,你用自己的力量本也能解决这个问题的。

如何成为伟大的程序员

如果有人敢声称他不需要再学任何新的知识,我是绝对不愿意和他共事的。在有些行业,你也许很多年不学新的东西也能干的很好,但软件技术革新的如此之快,你不能不时刻关注。你的老板是由于你有某些技能才花钱雇你的,如果你的技能已经落伍、过期了,那你也就没有价值了。想成为一名伟大的程序员,你首先要承认你不是无所不知,你必须每天都要努力的寻找、学习新的知识。

在你现在的公司里或组织里寻找能让你学习、让你钦佩的人。在复杂的问题上征求他们的意见,看看他们是怎么思考的。向他们介绍你的解决思路,请他们给予批评指点。如果在你的周围你不能找出一个能作为你的导师的人,这要么是你还没有认真的寻找,要么是你留在了一个不该留的公司里。如果你在现在的工作上不能学习进步,那是到了你该换个工作的时候了。

要阅读网上的博客。关注一些研讨会。与其他程序员交流。伟大的程序员从不停止学习。

有一些程序员认为,他们的唯一价值所在就是他们所拥有的知识,于是,分享出他们的知识就会让他们的价值降低。这是大错特错了。让你有价值的不是你的知识,而是如何运用你的知识给公司创造价值。难道还会有比分享知识给他人更能给公司创造价值的方法吗?

我曾经面试过一家公司,知识不共享、相互保密、相互提防的理念在这家公司里根深蒂固。在这样的环境里,员工之间形成了一种恶性竞争的关系,这直接导致了勾心斗角和诬陷中伤的产生。我可不想在这样的公司里工作。如果每个人都对自己知道的事情讳莫如深,那你什么都学不到。

如何成为伟大的程序员

伟大的程序员希望他人也能知道自己所掌握的知识。他们并不担心会因此而失去优势,因为他们相信大家都会这样做。伟大的程序员乐意看到他们的同伴成长、成功。一个公司,它应该被一群喜欢知识共享的人组成,就像人们在运动场上,让团队的每个对员都强大起来,整个团队才会强大。

伟大的程序员从来不会说“这不关我的事”。他们总是愿意伸出援助之手。他们经常在做自己的工作之余,去帮助那些编程新手。如果有件任务必须按时完成,而又没有其他人能胜任,伟大的程序员会主动承担起这项任务。他们从来不嘲笑来请求帮助的人,即使问题是那么的小、那么无意义、无价值。

如何成为伟大的程序员

伟大的程序员重视他们的团队,愿意为团队做任何的事情。不管是要去写1,000行的代码,还是去编辑一个图片,伟大的程序员都会立即站出来帮助完成。

伟大的程序员不是天生的,是后天炼成的。他们是本文上面提到的那些因素造就的,加上还要通过努力的工作。如果你是刚刚意识到这些,那还不晚,你仍然有充分的时间来成为一个伟大的程序员。耐心是关键。伟大的程序员不是在旦夕之间就可以成就的。有些人可能要花上数年,有些人则需要十几年。没有人为你写血泪史。好的公司当发现你有成为伟大程序员的潜质时,会帮助你,为你提供舞台。而你会通过你的努力工作、让你的团队进步来证明自己。要坚定,要自律,通往伟大程序员的道路会很长。

更新 (5 Sep 2009): 针对“甘愿受苦”段内容增加一个声明。好像很多人都误解了我的观点。

声明: 本文里的所有观点和立场都是来自 Nicholas C. Zakas 本人 ,跟 Yahoo!, Wrox 出版公司, O’Reilly 出版公司, 或其他人没有任何关系。我只代表我自己,不代表他们。

英文原文:What makes a great software engineer?

译文原文:/2010/05/20/what-makes-a-great-software-engineer/

关于对如何成为伟大的程序员的理解和感悟!!

(1) 拥有足够的耐心,那些浮躁还有就是不能吃苦会让我松送了自己的前途!要相信没有长时间的实践和钻研与学习是

不能成为一名伟大的程序员的,就如同朗朗练习钢琴一样,编码和软件开发需要更长时间的学习和实践的。

(2) 谦虚的态度:三人行必有我师!!一个人的时间和实践在丰富也没有团队的力量大呀。永远学习别人的优点而不要

如同xxx等人一样,拿那点水平炫耀,却没有丝毫的长进!

(3) 有自知之明:那些事情需要自己亲自去干,那些事情不需要自己亲自去干而是和别人合作或者就是雇用别人让别人

代替自己实现一件事情!

(4)

(5) 彻底的投入进去: 小处着手,大处着眼:小处着手就是你要热爱写一些很酷的程序,从小小的一点一滴做起,哪怕是一个小小的功能

改进都要将事情做的完美无缺。大处着眼就是你要讲未来的发展看的一清二楚,不能有半点的跑遍了未来的方向。这样的日自己非常的难过了!!技术的方向是指挥棒。。。。

(6) 软件的开发一般来讲就是在脑中形成一定的结构,这有点像建筑师—他们一般在设计一件作品的时候就是脑海中有

一定的架构---所以说软件架构非常重要!

更多相关推荐:
优秀的程序员养成计划

优秀的程序员养成计划问如何成为一名优秀的程序员优秀的程序员是如何养成的怎样成为一名优秀的程序员答0优秀的程序员考核标准对技术充满热情编程是生活的一部分会在你的耳边谈论技术相关的话题如果你有兴趣的话主动学习新技术...

JSP程序员成长计划

一个普通的错误是把JSP当作简化的Java它不是事实上JSP是简化的servlets程序员通常试着没有学习要求的支持技巧而直接学习JSPJSP是一个衔接技术并且成功地连接你需要理解的另外的技术如果你已经知道Ja...

JSP学习笔记3——JSP程序员成长计划

JSP学习笔记三JSP程序员成长计划开始学习JSP必要的是给自己一个计划需要学什么要怎么学下面是一个比较常规的学习方法1建立并且配置好你的WebServer安装并学新使用的时间半天这是之前讲过的了初学者推荐To...

程序员20xx新年计划

我的同事朋友ChrisEargle写了一篇关于新年计划的有趣文章他让我想到了没有出现那场世界末日是我们多么大的幸运呀还有其他我这45年中躲过的天灾于是我也有了一些我自己的以程序员为主题的新年计划找到一名导师成为...

PHP程序员的技术成长规划

按照了解的很多PHPLNMP程序员的发展轨迹结合个人经验体会抽象出很多程序员对未来的迷漫特别对技术学习的盲目和慌乱简单梳理了这个每个阶段PHP程序员的技术要求来帮助很多PHP程序做对照设定学习成长目标本文按照目...

黑客或者大师级程序员的成长经历

黑客或者大师级程序员的成长经历看看这个吧是我在网上所能看到的最详细的教程了相信对你一定会有好处的基础如何去学习要有学习目标要有学习计划要有正确的心态有很强的自学能力学习目标1明确自己的发展方向你现在或者将来要做...

程序员成长系列之一从程序员到软件设计师

程序员成长系列之一从程序员到软件设计师前言软件技术发展到今天分工越来越细程序员做为一个通用称谓已经无法确切定义各种工作的性质和特点因为软件开发中各种职责区分不清无论是刚刚写代码的新手还是具有多年经验的老手一概被...

20xx-20xx上学期个人成长计划

20xx20xx个人成长计划罗晶作为教师既需要有扎实的学术根底广阔的学术视野不断更新知识追逐学术前沿的意识又需要把握教育的真谛了解学生发展的规律掌握现代教育信息技术具备热爱学生关心学生对学生认真负责的品质教师要...

职业生涯成长计划

职业生涯成长计划在发达国家的不少企业里都有PPDFPersonalPerformanceDevelopmentFile的东西有不少的企业公司靠它将自己的员工形成了一种合力形成了团队为了单位的目标去努力实现自我价...

新学期个人成长计划

新学期个人成长计划光明小学郭晓虹新的学期能生活在光明小学这个洋溢着温馨与和谐而又充满着上进与竞争的大家庭中我感到很荣幸同时也深感自己在业务上的欠缺与不足新环境新工作新学期新起点我给自己提出要求要尽快适应新环境尽...

员工成长记录卡管理(草案)

员工成长记录卡管理草案员工成长是以专业能力业务成果和工作态度的提高为基础以定期月度三维测量能力为了规范持久地实施人才成长计划特制定以下管理草案一员工成长计划的制定一员工成长计划根据岗位需求部门配置结合员工个人实...

个人成长计划

我愿做一朵开不败的花儿我的成长故事西关薛向华春去秋来鸿雁过往师范毕业参加工作为人师者已经十五年了十五年弹指一挥间似乎我还是那个刚毕业且对教学充满新奇和期待的年轻小姑娘在四千多个日日夜夜中我慢慢找到了自己的位置找...

程序员成长计划(7篇)