编程大师访谈录
20150419 周日 回北京的火车上
07.韦恩.莱特莱夫
程序开发人员不仅要技术驱动,还要考虑用户和市场.不过考虑市场一般是管理或者产品人员考虑的事情.
用户需要什么?要考虑市场的需求.
最终产品和最初的设想会有很大的出路?
在某些方面是的,在开发过程中不断获取新的想法和建议.当我规划现在一个项目时,它最终总会做到我最初设想的一切,另外加上其他东西.要不就是,当我开始把玩这个程序,我看到改进的机会,并且不放弃任何一个改进的机会.
你写代码是一次就是平衡的,还是多次修改呢?
写代码和粘土雕塑一样,贴上一块,然后刮掉一点.
理想的模块应该有一页长,如果它超过一页,我就要进行重新思考,我现在做的是什么?我现在做的不同的事情有哪几件?他们该不该进一步分成不同的模块?优雅和平衡的部分要素就是,在一个程序的蛋糕一样的层次结构中,要在某种程度上,都具有相同的大小,重量,责任和功能.
让事情变得简单,使得程序变得干净,是走向优雅的第一步.就是要绝对地简单.
模块应该小一些.当一个模块超过一页纸的时候,就是哪里出了问题.每一个模块的顶部需要一行注释,用一句话解释一下这个模块是做了什么.如果无法用一句话解释,那么一定是哪里出了问题.
20150412 周日 北京
06.约翰.佩奇
很多厉害的人物从高中开始进行编写程序.
奇怪的软件设计原则:和想象的恰好想法,复杂的程序远比简单的程序容易编写.复杂的程序容易编写,是因为你把程序的复杂性丢给了用户,你强迫用户做各种困难的决定.
从为程序员设计非常复杂的软件到为普通人设计出可用的软件是非常成熟的转变.
我在生活中通常先规划目标,而一旦有了目标户,就不在重新审视,也不会考虑这些目标有多么困难,是否值得做,是否会成功,而是只想着完成任务.
你必须了解客户,了解计算机,为客户和计算机设计出最优秀的产品.你必须了解客户,知道他们想要什么,这样才能为他们设计出合适的产品.
我不会容忍一个软件工程师只想做出复杂的程序设计.首先,我认为这样的态度是不成熟的.一个好的建筑师不管是从设计一个小凉亭,还是设计一个大的博物馆,都能够从中得到快乐,它们有各自的挑战.其次,我认为真正的挑战是如何设计出外表简单而内部复杂的软件.
(把复杂留给自己,把简单留给客户)
为了跟上不断变化的消费者步伐,你们是如何开发产品的?
有两个方向调整产品.一种发展是计算机及其技术驱动.你会发现一种新的适合于计算机的应用程序可能和最初的设计完全不同,这种增长会产生一种和最初的需求完全不同的需求.
另一种发展是客户体验的变化驱动的,在了解计算机能够做什么的时候,客户对功能的要求提高了,但是不希望复杂度增加.他们希望程序能做更多的事情,但依旧保持简单,我们面临的而挑战就是满足这种需求.因为我们选择这种发展模式.我认为必须通过满足客户的需求来加速发展计算机水平.例如不增加复杂性的情况下让程序有更多功能,只有这样,才能有真正的进展.
(设计人员要走的更远,要有产品人员的思维,为客户着想,提高客户体验)
20150412 周日 北京
05.比尔.盖茨
编写程序设计文档是至关重要的,因为再把问题当做算法看的时候,问题会得到极大的简化.
代码复查,要确保代码是看过的,看看资深人士是否是否能提出更好的建议.
你的编程风格是什么?
编写代码之前把整个设计方案构思清楚,在你完成代码后,我喜欢回去把它从头到尾再读一遍.
编写程序最重要的部分是设计数据结构,接下来重要的分解各种代码块.
检验编程能力的最好办法是给他一本30页的代码,看看他阅读和理解的速度有多么快.成为优秀程序设计人员的最佳路径是编写程序并研究其他人编写的优秀程序.
你要愿意去看别人写的代码,然后写自己的代码,再让其他人复查你的代码.
(优秀的程序设计能力,同时如果不想一辈子如同老黄牛一样辛苦为他人耕耘,那么要学习产品的思维!)