如何成为杰出的程序员或软件工程师?(对所做的事情的理解越深,你就会做的越好;要有上进心)






参照 Quora 的答案:优秀的与伟大的软件工程师(似乎我们都说成程序员)的区别是什么? Software Engineering: What distinguishes a good software engineer from a great one?

第一名 2500+ 票:
- 能够平衡实用与完美。 Able to balance pragmatism and perfectionism
- 不怕调试和修复BUG。 Not averse to debugging and bugfixing
- 健康的怀疑态度。 Healthy skepticism
—— Russel Simmons, former CTO & Co-founder, Yelp

第二名 1500+ 票:
1. 这不关于他们写了的代码,而关于他们没必要写的代码;
2. 这不关于他们代码库增长有多快(依据于代码的行数或复杂度),而关于他们怎么将代码库缩小同时不丢失功能或特性;
3. 如果你尝试去跟他们争辩“什么编程语言才是最好的”, 他们是微笑、又或者对这个厌倦,然后转移话题么?或者,他们布教么?如果他们布教,那他们不是一个伟大的工程师;
4. 这并不关于那些代码或编程语言,也不关于他们的痴迷、技艺、天赋、或其它虚假的魔法形容词。最简单地,他们是否在代码之上的层面了解软件?他们是否在架构层面明白软件?还是说他们只能去想代码的行数?他们可以在抽象的数学问题和软件之间切换么?他们可以跟利益相关者一起工作并理解那些人对系统的需求,或者他们会不会开发一个他们想要开发的系统——他们认为你真的想要这个?一个人可以成为一个伟大的骇客或编码者或程序员,但那与一个伟大的软件工程师不一样。我并没有使用一个价值量表,一个伟大的程序员也是一个伟大的程序员……但是你不能要求一个焊接工去建一座桥。
5. 他们能否“发现缺陷盲点”,当房间里其它所有人都正迷恋于一些解决方案或新玩意时?此外,还能解释这些基础的缺陷点、让房间里**所有的人**都对这个缺陷点有清晰的认识?
6. 他们能否倾听?如果他们不能,那他们不是一位伟大的软件工程师。

原第二名 340 票:
- 有天分 Talent
- 自律 Discipline
- 有经验 Experience
- 有商业意识 Business-awareness
- 有社交意识(合作意识) Social-awareness
—— Slava Akhmechet, Founder at RethinkDB


# 更新于2015-03-25
原来第二名被排到好后面去了,虽然票数从193票上升到340票
-----------------------------------------------------------------------------------------------
以下内容摘自博文“编程巨星的唯一秘诀”,
中文翻译在此:


只有一条真理决定了一个软件程序员的成功还是失败。由于坚持这个真理,一个资深的程序员能在一天的时间里学会一门新的编程语言,而由于不坚持这条真理,一个初级的程序员用十年时间也只能挣到一份糊口的钱、永远是来实现别人的设计、永远不够优秀而得不到晋升的机会。这条真理让你看清了差的程序员和好的程序员的不同之处,好的程序员和伟大的程序员的不同之处,伟大的程序员和能通过自己的技术创造出一个亿万美元价值的程序帝国的超级程序员的不同之处。
不是什么复杂的道理,不是什么难懂的理论。不是具有什么天赋或“编程超能力“才能做到的事情。最终成为的是一个优秀的程序员还是一个很烂的程序员,这跟你的出身一点关系都没有。
而真正的原因只有一个,唯一的一个:
对所做的事情的理解越深,你就会做的越好。
超级程序员跟那些平庸的、一般的程序员比起来,对自己要做的事情的理解要深的多的多。这就是原因。





-----------------------------------------------------------------------------------------------
大家都想跟高手一块工作…高手也一样。那么,哪里才有菜鸟的机会?
其实最关键的还是一点:
你自己是否有足够的上进心。
跟高手一起时,向高手学习,跟菜鸟一起时,指导菜鸟——其实指导菜鸟对自己也是一种进步,而菜鸟的进步也会推动你的进步。
但要尽量远离没有上进心的人。
如果身边没有这样的环境,那么参与到开源项目中去,那里碰到高手的概率比较高。





相关内容推荐