杰出的程序员与真正的优秀程序员有什么区别?[关闭]


59

你知道他们是谁。他们是编程的摇滚明星:

  • 他们的编码速度提高了10倍。

  • 他们的代码可以正常工作。

  • 他们不仅从内到外都知道他们的主要语言,而且还知道其幕后工作方式。

  • 在您提出任何问题之前,他们都知道大多数问题的答案。

  • 他们中的一些人发明了我们都使用的编程原理。

  • 而且,它们也往往在特性上显得谦虚。

这些人是什么?他们的思考过程是否与普通程序员有所不同?还是他们只是非常有才能的人而努力工作?

换句话说:我怎么能像他们?我知道我认为需要学习成为一个好人,但是接下来的十年似乎将需要我来学习它,然后我的知识就会过时了。


49
杰出的程序员在代码周围没有try-catch块。

11
@John:我完全不同意,我一次又一次地看到10倍的东西在玩,似乎很真实,可悲的是。我认为很多问题是大多数专业程序员无法真正编程,甚至有些甚至不能编写简单的程序。这并不是说像上帝一样的编码器要比一个好的编码器高出10倍,而是像一个像上帝一样的编码器要比其组织或团队中最差的其他编码器高10倍。
Pax Noctis

10
@fennec:做还是不做。没有try
mmyers,2010年

29
对于15年前发明的语言有18年的经验,这真是令人印象深刻!
里奇·克拉克森

15
@Tjaart-不,这是一个可靠的数字,自1960年代以来的研究就表明了这一点。最初的研究在1960年代后期由Sackman,Erikson和Grant进行。他们研究了平均有7年经验的专业程序员,发现最佳和最差程序员之间的初始编码时间之比约为20:1;调试时间超过25:1的比例;程序大小为5比1;程序执行速度约为10到1。他们发现程序员的经验量与代码质量或生产率之间没有任何关系。(感谢史蒂夫·麦康奈尔)。
乔恩·霍普金斯

Answers:


88
  • 谦虚:杰出的程序员永远不会声称自己的代码是最好的,事实上,他们总是在寻找更好的方法(每次机会)

  • 病人:杰出的程序员将有无限的耐心(这并不意味着他们会在问题上浪费很多时间。请参阅:疑难解答)

  • 疑难解答:杰出的程序员将能够在几分钟内解决问题,这对于普通程序员来说可能需要几天的时间。

  • 好奇:杰出的程序员将无法抗拒试图找出原因。

  • 工程师:杰出的程序员将对系统进行工程设计,而不是将各种框架混在一起(这并不意味着他们将不会使用框架。)


5
我喜欢您的“工程师”观点!
Cedric H.

1
@Chaos-我知道最快的程序员建立了自己的Web框架。我认为这样的事情可以使某人变得更好,更快。感谢您的回答。这让我在总是想重新设计事物时感到无助。
orokusaki 2010年

11
“工程师”是关键点。每行代码都将创建一个坚实的基础,而不是添加一个摇摇欲坠的类似于Jenga的创作。
Alex Feinman 2010年

5
我不会为-1,但作为对策,我有资格参加所有这些比赛;而且我还是很烂 (除非我比较的普通程序员实际上是非常糟糕的)
Steven Evers 2010年

1
@混沌,“很好奇”,但只有一点。

28

在最后一个要点中,您遇到了很多问题:

“而且他们也往往在特征上谦逊。”

我认为这是谦卑的结合-不仅外在,而且内在。他们接受错误,犯错,并从挫败感中得到快速转变。许多程序员会尝试一些东西,失败,然后很快就变得非常情绪化,这是编写好的代码的厌恶状态。您必须接受自己并不完美,并且会搞砸(经常!),并且您能做的最好的事情就是学习如何在搞砸时快速恢复。这是一种谦卑的信心,例如“我知道我要搞砸了,但我也知道如果我继续努力,我最终会到达那里。”

NLP中有一句话:“没有失败,只有反馈。” 作为一名摇滚明星程序员,我认为您必须接受这一点。您无法编写任何代码。刚开始时,您可能会很慢,但是如果您继续尝试并且拒绝失败或弄糟某些东西时停下来,那么您会成功的。在此过程中,您将学到成为最好的方法之一。

当然,建议仅与其来源一样好,所以……所有这些只是我的意见。


“我没有失败,我发现了10000种不起作用的方法”-托马斯·爱迪生
ninjalj 2010年

1
能够快速学习的唯一方法是,接受自己的进步和渴望。

25

他们非常关心自己的代码。


2
无疑是真的。
罗伯特·哈维

3
可怜的程序员难道不会在乎他们的代码吗?尽管它可能不那么好?
Walter 2010年

2
@Walter他们可以,但我从未见过。我见过的最接近的是新手程序员,他们深切地关心他们的代码,但仍然犯了新手错误(没人能幸免)。当指出这些错误时,尽管可以迅速解决这些错误,但很少重复出现。
JaredPar'9

15

就我个人而言,我所知道/知道的最好的程序员都了解这些基础知识,而不是任何给定语言的专家。他们只是在几乎所有方面都有足够的经验。规范的“万事通”。

它不只是基础科学,它在实际操作中的经验也具有重要的价值。例如,那些了解Unix哲学并因此能够使用给定的各种工具(他们知道在哪里知道的IOW)解决未知问题的人远远超过了编码线程和并行解决方案的Java专家。

杰出的程序员也尊重那些先于他们的人。当他们将SQL视为正式的API时,他们不讨厌关系数据模型或畏缩,也不在数学上对FORTRAN厌恶。他们知道面向对象不是最终目标,最重要的是,他们了解编程是一门艺术,而不是一门科学。


2
对于文本文件grepawksort,和uniq可以回答的问题很多。如果您也有perl,甚至更多!

2
我认为这是手工,不是科学也不是艺术。
亚历山大·盖斯勒

11

当我刚开始的时候,我和那个家伙一起工作,我认为他在编程方面所做的一切都非常出色。他很可能仍然是,但现在他已升任东南亚公司的董事。

无论如何,他保持事情简单,简单的事情就起作用了。他从来不想写过多的代码行,而他所做的一切都是如此。我玩追赶了一年只是为了接近他的水平。不过,另一件事是时间。他做事情的时间比我那时要长得多,并且他有机会一遍又一遍地问这些确切的问题,直到他(貌似)知道所有答案。

他也不怕问任何问题。我认为那是最大的事情。


听起来我已经准备好了(请参阅我关于SO的问题计数)

2
@ acidzombie24-或者...您才刚刚开始。
orokusaki 2010年

哈哈orokusaki。+1

“使事情保持简单”是测试驱动开发的优点之一。我不能高度推荐它。

10

程序员能力矩阵

许多主题可帮助您确定您在编程主题上的水平。


stackoverflow的知识:2 ^ n:从未听说过O(n ^ 2):经常在SO O(n)上提出一些简单的问题:提出有趣的问题,并且了解程序员。SE O(log(n)):返回页首CS相关SE网站上的用户。;-)
shuhalo 2011年

非常感谢您提供此链接!它使我对自己所知道的充满信心,并指出了我应该改进的地方。
oksayt,2012年

7

我从有关德州扑克的书中学到了这个问题的答案,但它适用于所有令人沮丧的工作。最好的编码器永远不会倾斜。继续倾斜是指某些事情无法按预期工作的时间,并且您的响应方式会在整个应用程序中造成指数错误。在锦标赛扑克中,这会使您下注不好并被淘汰。

在编程中,倾斜会使您费力,编写荒谬的代码补丁,这些补丁仅在您的应用程序的某些实例中有效。倾斜使程序员忽略了整个项目的需求,立即获得满足以解决当前的问题。通常,今天问题可以解决,但是明天应用程序就会受苦。

最好的编码人员会采用倾斜的概念,并以某种方式对其进行管理,使他们能够始终从外部角度查看问题。如果失败,则喝一些咖啡因。


您建议在编程时做些什么来克服“倾斜”?我一直都得到它,并最终一直都在对东西进行编码。
orokusaki 2010年

@orokusaki-避免倾斜的最简单的活动是改变程序员每天问自己的一个基本问题。当遇到问题时,不要思考:“我为什么要这样解决问题?” 问:“为什么我应该避免这样解决?” 为什么不应该使用特定解决方案解决问题的答案通常会为您提供一组寻找更好解决方案的指示。
JMC 2010年

6

杰出的程序员:

  • 关心他们的代码
  • 关心使用他们的代码的用户
  • 关心将维护其代码的人员
  • 关心生产力
  • 关心过程,而不仅仅是产品

关于“ 10x”因子的两件事:

  1. 它必须端到端地应用。如果测试,返工和维护需要10倍以上的时间,那么编写代码的速度就不能快10倍。
  2. 我认为“ 10倍”因素反映了大量程序员的贫困状况,而不是少数程序员的贫困状况。

3

他们中的大多数看起来都是保留的,没什么特别的。.其中一些看起来是超级智能的。.从所有可能的角度来看,他们更喜欢两次检查/调试事物,它们的软件在世界上是没有缺陷的:p IMO有些程序员可能会比较慢,但是质量更好,即使是普通人也可以理解其软件的工作原理!

我有一个朋友,他在10岁时写了他的第一个ASM程序,现在他24岁,还没有读完大学,但这并没有阻止他创建自己的公司,赚了几百万:)但是从我的眼中他在所有方面都很灵巧:)

杰出的程序员很可能会说此代码可以用另一种更好的方式编码,而不是说它完全错误会降低其他程序员的声誉:)

“这些人到底是什么?他们的思维过程中有什么与平均水平以上的程序员根本不同的东西吗?还是他们只是非常有才华的,努力工作的人?”

我认为他们是这样出生的,它的内在是DNA:pi不知道他们的思维过程,但是我所知道的最好的程序员患有癫痫病


3

很少有什么能使特殊与典型区别开。

极好:

  1. 对他的工作充满热情,并努力交付杰作。

  2. 即使在编码开始之前,性能和质量仍是他们的首要目标。

  3. 他们认为每次发布后都会不断改进。

  4. 他们对替代品保持严格的警惕,并且是早期采用者。

  5. 他们在职业生涯中的主题是:“少写多传达”。

  6. 即使不进行编码,他们也会一直在思考逻辑观点。

典型

  1. 有时有些热情,但努力交付,因为毕竟这是一项工作。如果不是杰作,那就可以了。至少准时交货。

  2. 稍后再考虑性能,反正PC现在足够快了。

  3. 仅在没有其他保存工作的选项时才进行改进。

  4. 没有时间去研究其他技术。坚持您现在的工作要求。必要时会学习其他东西。

  5. 他们的主题是:“按要求做,及时到达家中”。



0

自我提升,我的意思是尽可能做到最好。拥有像编程这样的工作,尤其是在团队中,意味着您的个人贡献适合大背景或谁负责哪一点,现在还不是很明显。我们作为“伟大的程序员”而广为人知和了解的人是IMO,他们掌握了使自己的贡献广为人知的艺术,却没有听起来自负或以自我为中心。在许多情况下,这是通过创建我们其他人赖以挣钱的工具,库和软件来获得的。


3
也许吧,但是我相信John Resig以其在Javascript和jQuery方面的卓越成就而闻名。他的东西被广泛使用是因为它很棒,而不是因为约翰具有出色的营销技能。
罗伯特·哈维

@Robert Harvey-或者,是吗?毫无疑问,他是一名出色的程序员,但是也许使他从真正的优秀变成了“杰出”的原因是,他的作品广受欢迎,并且他是自己成功的受害者,不得不跟上不断增长的需求?当您真的喜欢衬衫但太大时,不要在购买前尝试使其长成。到那时它将消失。购买它,然后尽最大的努力去发展它。
orokusaki 2010年

罗伯特:当然。但是,如果他只是与几个朋友共享jQuery并在工作中,我们可能根本不会了解他。我们知道他是一位出色的程序员,这恰恰是因为他有勇气,不仅与世界分享jQuery,而且还积极推广它作为一种更好的Java编写方式。我希望看到更多的程序员(包括我自己)学习如何有效地做到这一点。
Gaurav 2010年

1
-1尽管在经理人看来,自我晋升可能是对的,但我从未见过它能与其他开发人员一起使用。在开发人员中,很快就可以弄清楚谁是好人,谁是平均水平和谁很烂。自我提升甚至都不是等式的一部分。
Dunk

1
@Gauruv-我认为“摇滚明星”程序员能够解决棘手的问题并使他们真正简单。因此,如果我看着一段代码并说“哇-谁写的”,我不会认为这段代码很棒。虽然我以为不是在学校里读书,但现实世界的经验告诉我,编写代码不是什么美德。令我印象深刻的是,人们不必担心他们的东西是否有效,因为我已经知道它的工作原理而不必去研究它。这些人很少,而且是真正的摇滚明星程序员。
邓肯


0

很好的相关文章:自由电子(来自randsinrepose.com)

抱歉,我在这里没有总结文章,但要点与散文并不容易分开。


没说太多。但是,是的,这些是我正在谈论的人。
罗伯特·哈维

引用该文章:“自由电子在代码编写方面可以做任何事情。他们可以从头开始编写完整的应用程序,在周末学习语言,而且最重要的是,他们可以深入研究大量的意大利面条式代码,理解它,并使其真正发挥作用。您可以围绕Free Electron建立整个企业。它们真是太好了。”
罗伯特·哈维

0

他们纯粹是凭直觉进行编程的。无需认为它会流动


对于任何行业都有经验的人来说无疑是正确的,而不仅仅是编程。杰出的程序员与众不同之处是什么?
罗伯特·哈维

好吧,我不是其中的一个,所以我绝对不能100%地确定这个问题,但我不认为这与知识无关,而与思考过程(潜意识)无关。我认为凡事表现出色的人都有能力清除自己思想中的任何干扰,并以非常简单的形式看到事物。越简单的东西越容易处理。
John Shaft

3
-1这是千方百计的错误。我希望我能-100。我会说完全相反。他们会仔细考虑并解决问题,然后再开始解决。
Dunk

@Dunk-我不同意。用您写的内容,我想说的是普通程序员的工作。没有什么特别的。我将杰出的程序员与杰出的吉他手进行比较。他们并没有考虑他们正在演奏的音符,只是感觉到了。
John Shaft

@Pablo-我想我们的经历有所不同。以我的经验,普通的开发人员会凭直觉去误以为它会流动。因此,它们会产生大量垃圾。卓越的开发人员会花时间了解他们的发展方向。仅仅因为有人可以实时向您展示如何设计组件,并不意味着他们会凭直觉进行操作。我敢打赌,他们要么以前做过,要么就已经在脑海中构想出系统的全景图(如果没有在文档中)。因此,您所说的直觉实际上是遵循深思熟虑的计划。
Dunk

0

优秀的编码人员对项目的影响超出了他们自己的代码范围,并由于经验而在问题发生之前就发现了问题。它们使团队中的每个人都变得更好,并从不良的设计和管理中节省了他们的项目。

他们实际上创造了一些非凡的东西。


0

但是接下来的十年似乎需要我学习,然后我的知识才会过时了。

它会。您已经确定这些家伙要快10倍,这就是为什么他们在1年内学会它并且要花10倍的原因。对于答案的重要部分,我认为他们已经非常聪明(在任何东西),他们都喜欢编码,并且由于某种原因,他们有(或发现)大量的空闲时间来练习编码或从事个人项目。

如果您在这里问这个问题,您可能没有所需要的(不要担心,我在这里回答,所以我可能也不是)。如果您喜欢编码,尽管仍然可以发疯,但请不要担心。


0

这里有很多关于谦卑,工程,激情,病人,疑难解答的精心设计的帖子。IMO这些都是必需的。但是,他们描述了前30%的程序员。

我想您是在问真正的杰出程序员,即前1%。

我嫉妒偶尔与我一起工作的罕见人才的事情之一是,他们能够一次将大量关于复杂系统的细节保留在他们的脑海中,并能够快速召回它。我认为有时候我可以真正做到这一点,有时每月一次。这种感觉很棒。我正在考虑的开发人员似乎大多数时候都可以进入该区域。

除了谦虚,好奇心,工程学,热情,耐心和故障排除能力之外,正是IMO的这一特性使它们真正与众不同。


0

具有自我激励和自我决定的质量,以及愿意进入未知深渊的意愿,并且愿意在过程中完全感到困惑,这是巨大的。它并不像您最初想的那么重要,因为大脑在它一直在做和思考的事情上变得更好。我上大学时一无所有,然后仅仅凭着坚强的毅力就变得非常富裕,永不放弃,成为那个在其他所有人都厌倦了试图解决这个问题时遇到问题的那个人。经过这样的坚持,问题变得越来越容易,从成为大学的菜鸟到现在让大多数人感到羞耻。纯粹的天赋是不够的,有时会导致您的桂冠停滞不前。

另外,对于Robert Harvey,当我提到与我从头开始编写的CMS有关的内容时,您总是在弄虚作假。您会看到其他一些列出的链接,这些链接可能已经或可能没有写。您正在压低那些具有自我激励的人,这很讽刺,您发布了此内容。您是这个小宇宙中的“男人”,而不是凭自己的优点来阅读事物,而只是随心所欲地删除和删除。您也非常喜欢《星球大战》,可能会在杂货店的自动开门处挥手,以为自己有力量。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.