程序员能够看看之前其余人是怎么作的,从其余项目得到改进本身程序的想法和经验。程序员
我认为大多数优秀的程序员都但愿周围有其余优秀的程序员。当他们想出了一个很好的算法时,他们但愿周围有可以欣赏其绝妙之处的同事。由于你在构想那个算法、脑海中产生那样一个模型时,那是个寂寞的事情。若是你原来觉得处理过程很复杂,但却找到一个办法,让过程变得很简单,那种感受好极了。不过你须要从其余程序员那里获得一些反馈。若是已经有了几个优秀的程序员,就会吸引更多优秀的程序员。算法
采访者:你认为开发优秀的程序有什么特定规则吗?盖茨:有些人刚一进到项目中就开始坐下来编码,而有些人则在编码以前把全部的过程都想清楚,我认为你会发现那些一开始就坐下来编码的程序员只是在把那些代码当作草稿使用。那些在他们头脑中思考的内容才是最重要的。编程
采访者:通过多年的经验积累后,编程是否必定会更容易呢?盖茨:不,我认为在过了最初的三四年后,就会很是明显地显现出你是不是一个优秀的程序员。刚开始的几年中,你可能会更多地知道怎样去管理大型项目和不一样个性的人了。在微软没有哪一个程序员是在平庸了几年以后忽然间一举成名的。我和一我的谈谈他的程序,立刻就能知道他是不是个好程序员。若是他真的很棒,每一个细节他都会脱口而出。就像下棋的人同样。若是你特别喜欢下棋,会很容易记住10盘棋中的每一步,由于你已置身其中了。其余人看到国际象棋选手或程序员能记住每一个细节时,以为他们像个怪物。其实这很正常。即便到了今天,在我写了微软的BASIC程序10年后,我仍能够在黑板上大段大段写出当时的源代码。编程语言
编程须要很是大量的精力,因此大多数程序员都比较年轻。这就会带来一个问题,由于编程须要不少的训练。在年轻时,目标不是很持久,可能会被这样那样的事分心。可是年轻的程序员应当坚持下去,他们会变得更出色。函数
佩奇:你必须了解客户,了解计算机,为客户和计算机设计出最优秀的产品,除此以外,就没有什么基本原则了。你必须了解客户,知道他们想要什么。这样才能为他们设计出合适的产品。产品多是一个很简单的程序,好比PFS:FILE,也多是一个极其复杂的程序,好比编译器。前者是为普通用户设计的,后者是为程序员或工程师设计的。我不会容忍一个软件工程师只想作复杂的程序设计。首先,我认为这样的态度不够成熟。一个好的建筑师无论是设计一个小凉亭仍是设计一个大博物馆,都能从中获得快乐,它们各有各的挑战。 第二,我认为真正的挑战是如何设计出一个外表简单而内部复杂的软件。我对那些不喜欢这种挑战的人感到困惑,由于这种挑战对我来讲很是有趣。学习
采访者:你能不能再详细说说这种平衡和优雅的感受?莱特莱夫:平衡有不少种形式。代码应当干脆精炼。你应当能够用一句话解释任何一个模块。若是可能,内容应当按字母顺序排列。仅从视觉角度讲,代码不该当在任何地方掉出打印纸的边缘。不该当有一个很大的“if”,而“else”却很小。一切东西在任何地方都应当平衡。平衡是这里的关键字。优化
我写程序老是力争把代码写得稳固、清晰、干净,哪怕是须要额外多写五行。 我通常认为,你须要写的注释越多,你的程序就越糟糕,确定是哪里出了什么问题了。好的程序并不须要不少的注释。程序自己就应该是注释。编码
采访者:即便这样,目前大部分编程工做仍是由一小部分人完成的。是什么因素决定一我的能成为一名优秀的程序员,而不是众多用户中的一员?弗兰克斯顿:什么因素令人在某一方面出类拔萃?是什么因素让人成为优秀的做家?优秀的人通常须要知足两个因素:正好具有这个知识领域所须要的心智,而且在能力上又不是太愚钝。这样的组合很罕见,但并不是难以想象。设计
采访者:你在程序中会写不少注释吗?弗兰克斯顿:那要看我以为代码是否易于理解。**程序语言越高级,我写的注释就越少。**我尽力编写可读性好的代码。在编程语言中,我只使用有意义的常规用语,若是我以为一段代码不是很容易读懂,就会写上注释。开发
采访者:你对年轻程序员的忠告是什么?弗兰克斯顿:总的来讲,不要觉得你知道全部的东西,要尝试学习并质疑那些假定的东西。要信心十足,但要保持谦虚,要猜测你可能作错了什么。要有恰好够多的罪恶感——不要太多,否则就会惧怕去作任何事情——但要足以创建美感。尝试去作更深入的理解。不要由于你曾使它运行成功了,就觉得再也没有什么须要去了解的了。
采访者:是什么让人成为好的程序员?关键是天赋仍是培训?萨奇:是天赋、气质、动机和努力工做的结合。我知道有不少人指望在很短的时间就成为一名好的程序员,但能成功作到这一点的人并很少。成功来自一遍又一遍地作一样的事情,每一次学习一点点,下一次都作得更好一点。
有些人很擅长优化每一步指令。他们可让一小段代码变得极为紧凑。而另外一些人只注重算法和实现过程。我介于这二者之间。我不是很擅长很是紧凑地压缩代码。多年前我就发现,若是那样编程的话,每次须要修改代码时,都必须拆开整个程序并重写一遍。但若是稍退一步,只在很是重要的几个点上让代码很是紧凑,那么程序在完成后就容易维护得多了。
采访者:你对如今的年轻程序员有什么建议?奥奇:若是你是硬被拉入编程这一行的,我建议你保持乐观的心态,尽可能多编程,同时尽量参加各类不一样的项目。尽量多把时间花在计算机上,还要学会准确判断本身的职业倦怠情况(burnoutlevel)。要是别人以为你很古怪,不用放在心上。
采访者:你可不能够描述一下你是怎么编程的?罗伊森:我是个很是“自底向上”的程序员。我不为总体战略伤脑筋,由于除非完成了全部细节,不然我历来看不清全貌。若是你想要把工做交给其余人作,“自顶向下”的编程天然很好——很显然,你须要了解各个部件是如何在一块儿工做的。对我而言,编程是一个反复迭代的过程。我老是一次作一个程序的一小部分。若是我在一个地方改动一下代码,就极可能须要在其余地方也动一下。我会这样上下调整,直至方案合适为止。我也很是实际。我见过不少不实际的聪明人,他们在追逐一些彻底无用的学术目标时迷失了方向。实际对编程很重要。你必须可以猜出完成一个项目的准确时间,具备推断能够作哪些、不能够作哪些的能力,而后据此去作,抵制中途停下来干其余事情的诱惑。当你想作好每一件工做时,实际一些尤其重要,毕竟你能够分配在每件工做上的时间颇有限。若是你想把一个项目作到尽善尽美,每每轻易就会多花上两倍的时间。可东西若是没完成的话,就不会卖得好。没有可销售的产品,你就很难维持生计。
采访者:你写的源代码采用特殊风格吗?罗伊森:我想每一个人都有本身的风格。个人代码很散,里面有大块的留白。我老是让不一样例程须要用到的函数彼此独立,来节约代码、提升速度。