Things to remember while working in a software company Shrilata Ellaboina Things to remember while working in a software company Sign Up to vote See more: General I have a few points which I came across and would like to share; other individuals may have their own perspective to look at things. Once you get into a …
Android模拟器 Edit AVD
2011-04-20 16:11 733人阅读 评论(0) 收藏 举报 本文根据如下的模拟器安装做一些解释: 本文环境:Windows XP sp3,最新JAVa环境,android-sdk_r06-windows.zip,android 2.2 API Level 8,均为各自官网最新版本。 如果 http://developer.android.com/ 被和谐,可考虑使用代理访问,如在代理服务器不好找的情况下,可考虑Google的GAppProxy代理,速度很好。 或者访问http://androidappdocs-staging.appspot.com/index.html,Google专为防和谐。 Name:自定义虚拟的名称,不能有空格或者其他非法字符,否则不能创建,即Creat AVD不能高亮点击。 Target:选择要运行的android 版本(也可理解为内核?),此处有两个版本,取决于你在最初时下载的选择,个人理解这两个同样为2.2版本差异在 从名称上不难理解,一个是优化后的内核包,一个是google原生态的,当然这两个都是Google原版本,未被做过其他改动,通过查看img以及表现在 系统启动后安装的一些自带软件和功能上的差异,原生态的占用内存小;以及在皮肤,字体,地图等一些外在差异。 Size:就是要模拟卡存储卡的大小,视个人需求而定,推荐256MB以上,此处的KiB就是KB,MiB就是MB。如果有用过的映像文件可直接使用。文件存在: C:/Documents and Settings/Administrator/.android/avd/sdk2.2.avd/sdcard.img,如果分配太大则会占用更多的系统空间。如果有需要可以将其备份, 以供以后直接使用,选择File直接载入即可。 Skin:Built-in其实就是定义屏幕尺寸的像素,可以使用由SDk直接提供的常见分辨率,具体的可查看(你的文件解压存放路径)android-sdk-windows/platforms/android-8/skins/; HVGA 320*480像素;QVGA 320*240像素;WQVGA400 400*240像素;WQVGA432 432*240像素;WVGA800 800*480像素;WVGA854 854*480像素 Resolution就是自定义分辨率,除非有特殊需求,否则不建议自定义,因为自定义的尺寸没有对应的右侧界面,当然你也可以自己做对应的此存的皮肤。 一般选择好尺寸后在Hardware中会自动增添一项abstracted lcd density,默认是160,下文解释此处。 Hardware:Abstracted Lcd Density默认160,最直接的表现就是手机图标和文字的大小,120最小,可根据分辨率的大小自定义,一般推荐使用默认值即可。 SD Card Support 是否支持插入/弹出闪存卡; Dpad Support 是否要让手机支持DPad键,默认为yes,表示支持。DPad键就是手机上的那些Home键、返回键、电话键、电源键。 不过测试表明即使no,皮肤上的那些键也可用,可以理解为外设之类的手柄,键盘等。 Accelerometer是否要让手机支持加速器功能,默认为yes,表示支持。 Maximum horizontal camera pixels若让手机支持照相机功能,接着会要求定义照相机的像素,默认水平像素为640。 Cache …
给程序员推荐:一些文章资源和趣闻
投递人 itwriter 发布于 2011-11-24 13:41 评论(17) 有3950人阅读 原文链接 [收藏] « » 文/陈皓 下面是我这段时间来收集的一些有意思的东西。本站这样的文章还很多,如这个,这个,这个。 Javascript Garden,这是学习 Javascript 最好的网站了。http://bonsaiden.github.com/JavaScript-Garden,这个文档由两具 StackOverflow 的人写成, Ivo Wetzel (Writing) 和 Zhang Yi Jiang (Design),表示敬意。 想看看 Web 开发有哪些技术吗?你得看看这个网站:http://stackparts.com/,他对目前几乎所有 Web 上用得到的技术都分了个类。下面是个抓图。 Mozilla 的安全编程规范 https://wiki.mozilla.org/WebAppSec/Secure_Coding_GuidelinesDownloads associated to Software development PHP,Perl, Ruby, Python 语法比较 http://hyperpolyglot.org/scripting?utm_source 图形游戏编程的电子书:http://ploobs.com.br/?p=766 图形编程黑皮书:http://drdobbs.com/high-performance-computing/184404919 Black Art of 3D Game Programming: Writing Your Own High-Speed 3D Polygon Video Games in C 想学设计模式吗?这是一个非常好的网站:http://www.vincehuston.org/dp/ 以元素周期表的形式把23个经典模式列出来,让我想到了这几天在看的美剧 Breaking Bad,呵呵。 Learn C the …
HTML5将重塑Web世界?
来源: 计世网 发布时间: 2011-11-07 07:33 阅读: 2047 次 原文链接 全屏阅读 [收藏] HTML5将重塑Web世界? 2010年上半年的一个焦点事件,引起了很多人的关注,其中有不少人因这一事件第一次了解到HTML5的存在。初次了解HTML5的人可能会非常惊讶,HTML5规范早在6年前就开始制定了,如今尽管HTML5规范草案已经非常好,但何时能真正成为标准却仍然不确定。 的确,HTML5规范制定委员会工作进展非常缓慢。因为关于如何改进浏览器和改进Web世界,不管是浏览器供应商还是其他人都有太多的想法,而这些都要汇聚到HTML5规范中并达成一致,这需要时间。许多新的标签和JavaScript函数尽管已经在一些浏览器上进行了实验,但互操作性和标准化问题还没有解决。比如,Apple所做的HTML5演示虽然令人印象深刻,但它们也只在Safari上运行良好。这就是为什么Flash的支持者嘲笑HTML5要把Web带回到2000年浏览器大战时代的原因。 虽然这种嘲笑可能让HTML5的支持者很伤心,而且漫长的等待的确很难熬,但如果就此忽略HTML5却是不对的。因为在HTML5的背后不仅有行业巨头的推动,更为重要的是,标准化是IT技术发展的必然趋势。就软件而言,不论是浏览器还是相关的开发工具,都会不断吸纳周围的各种技术,最后对其进行标准化,这是技术发展的必然规律。 可以肯定的是,HTML5将改变互联网的方方面面,显然它不会完全取代Flash,但HTML5的确会重塑互联网,使浏览器无需借助插件就可以做更多的工作,从位置跟踪到把数据保存到云端。HTML5的标签将取代那些完成比较简单任务的插件,至少在某些时候,它可以把一些高级的功能开发给更多的用户。最终它可能使互联网更安全、更高效、更灵活。 那么,即将成为新标准的HTML5到底会把我们带向哪里?下面收集了开发者、程序员以及设计师的一些看法,从中可以了解到HTML5如何改变互联网。 降低插件的重要性 从前,Web世界是非常欢迎浏览器插件的,因为它鼓励创新的想法和大胆实验,而声音、动画及其他一些非常生动的网页,通过Sun、Adobe、RealAudio、微软以及其他的一些公司开发的插件第一次在网络呈现时也的确让人耳目一新。然而,问题很快就出现了,插件的接口是向所有人开放的,每个人都在尝试给旧的、以文本为基础的世界增加新的功能,混乱不可避免。其中最有名的插件就是Flash,其他类似的插件更是数不胜数。 出于多种原因,Apple禁止Adobe的Flash在自己的平台上运行,这使得广大Apple迷们不能在Apple平台上看到Flash,而HTML5的流行将让这种冲突不再出现,它将逐步淘汰那些相对封闭的开发体系:JavaFX的功能可能真的很强大,但既然JavaScript和Canvas对象就能做同样的工作,为什么还要学习另一种语法?如果video标签能将音视频同步,谁需要Real的生态系统? 那么,插件真的会全部消失吗?也许吧,但这要取决于你想做的事情。如果你的目标只是绘制图像,那么Canvas对象可能就够用了。但如果你想建立一个专业的3D世界,正如在复杂的Flash和Shockwave游戏中所看到的那样,你可能还得依赖专有的插件技术,因为这些插件技术可以直接访问视频硬件,运行3D游戏。 支持动态生成图像 过去,网页中显示的图像来自于直接下载的GIF或JPG图像,而在HTML5中,图像可能并不是直接来自图像文件,而是由某个Canvas(画布)对象临时生成的。网络上已经出现了大量的非常好的图形库,这些图形库的存在使得动态生成图像更加容易。 如今,JavaScript层可以根据数据进行计算然后绘制出图形。如果软件开发商有足够的时间和人才的话,完全可以让网络上的一切变得更加生动,而纯文本内容越来越少。Flash只是一个开端,HTML5环境让Web开发人员更易于开发出复杂的图像。市场已经出现了一些类似的工具,它们将进一步提高Web开发人员驾驭图像的能力,而且随着工具的成熟,开发人员也将开发出更多更为专业的复杂图形。 这里可能存在的一个问题是,这种图像的处理可能会给客户端处理器带来很大负担,比如对客户端的处理器处理能力有一定要求。在过去,一些开发人员根本不敢用Flash插件,因为渲染和展现Flash内容可能会给处理器带来很大压力,极大地影响用户的最终体验。未来这不应该成为问题,开发者不应该因担心影响性能就不让用户体验生动的图像,只是开发者应该做出一个折中的选择。每一个抱怨Flash影响性能的人都应该知道,这与技术本身没有关系,问题来自设计师们为了吸引我们的注意力,他们过多地使用了这项技术。 允许Web程序利用本地存储 Web程序员其实早就可以利用浏览器端的本地存储空间存储很多信息,比如IE允许最多300个Cookie,最多存储4096个字节的内容。不过,要开发真正实用的Web程序,可能需要比这更多的存储空间。比如,以前的Dojo工具包使用Flash插件来分配用户硬盘上的部分空间,把它留给浏览器使用,而现在很简单了,使用HTML5就可以达到同样的目的。 对于这部分存储,程序员可以按照自己的需要任意使用,比如把云服务的应用和数据保存在本地硬盘上。这也使得云应用的交付、安装和部署都非常像传统的应用程序。比如,无论是否有互联网连接,云应用程序都可以照常运行,因为之前已经从服务器上下载了HTML5应用的JavaScript代码,这部分代码就保存在本地。 当然,这种技术的应用并不会影响云应用的普及,因为现在的运行模式与过去有很大不同,本地数据库实际上扮演的是智能缓存的作用。另外,游戏开发人员可以在本地存储一些情景信息和装备信息,这样可避免每次一连机就要下载这些信息,省了下载资料的时间。而不利的方面就是这些数据库深埋在系统文件夹之中,这样,进行数据备份时就变得非常复杂。用户如果想把数据从一台机器迁移到另一台机器,数据迁移工作可能就会变得更为复杂。 或许混合云的出现可能解决这一问题,混和云允许云端和本地都保存有数据,而本地计算机只是缓存数据,最终版本保存在云中,这样从任意一台计算机上就可以访问到。 简化Web开发中的数据提取 曾从网页中提取过数据的Web开发人员都知道,现有的HTML结构除了告诉浏览器这些信息在哪里之外,几乎不能再提供任何有意义的信息。而开发人员需要了解与数据本身有关的信息,这些信息能帮助程序员了解这些数据的真正含义。 HTML5中所谓的微格式(Microformat)引入了一种新的机制,它在HTML中新增了一些专门的标签,可以帮助程序员分析标签之中的数据的真实含义。 没有人能够预测微格式到底将带给网络多少改变,但很容易看出,这种新的机制将给程序员带来很大方便,帮助程序员开发出更有效率的Web应用。比如,如果有一个好的、标准的方式来表示日期和时间,那么程序员在为网站开发与时间有关的Web程序时,就无需另外编写专门的代码来分析或者猜测别人可能用的什么时间格式。这样,日历、时间表、日程安排等需要从多个数据源收集时间信息的应用也就变成非常简单的工作了。 支持位置服务 在Web世界里,过去我们只知道其IP地址,那些数字对应着一个什么样的真实世界我们根本不知道。比如,某台电脑究竟在哪里,过去几乎不可能知道,而现在出现的位置服务可以解决这个问题。HTML5标准中允许JavaScript询问浏览器用户的地理位置,比如纬度和经度信息。通常桌面系统不支持这一功能(因为需要有GPS或Wi-Fi),但如果终端是手持智能手机,这个功能就可以发挥作用。 今天,没有人能知道聪明的程序员会基于这些位置信息创建出什么应用来,但有一点可以肯定,未来一定可能以一种变幻莫测和难以置信的方式将把虚拟世界与现实世界整合到一起。 让Web视频播放更流畅 HTML5中的video标签使Web开发人员很容易地把视频内容与网页中的其他内容整合起来,也让那些从事jQuery和PHP开发的人员可以加入到Web开发队伍中,使得Web开发不再仅仅是Flash、Silverlight和JavaFX开发人员的专利。 尽管这一设想看起来很诱人,但面临的困难依然不少,因为HTML5标准中没有指定任何编解码器,而每个人都想发布自己的视频和声音编解码器。这就意味着我们用一种混乱取代另一个混乱:只是过去我们把嵌入到浏览器中的软件称为插件,而今天把它称为编解码器而已。因此,今天我们虽然有了一个标准的video标签,但浏览器可能知道也可能不知道到底如何解释这些视频内容。 在洛杉矶任教的HTML5应用开发讲师Erich Ocean认为编解码器的战争仍在继续。计算机开发人员和Mozilla组织如果认为他们能为视频专业人士制定视频标准,那就大错特错了。他说,我们看到谷歌的新视频格式在一些地方得到了使用,比如在YouTube网站,但永远不会像H.264那样普及。 尽管视频播放可能面临比较混乱的局面,因为无法让大家达成一致,但是新的video标签肯定会让互联网视频内容越来越丰富,网页将成为视频内容的主要发布源地,而同时单纯的文字内容也会越来越少。只是这对孩子的教育未必是好事,因为现在的孩子们变得越来越习惯于看动画,而很少花时间来阅读,更别提书写了。 Widget将更丰富 在iframe中运行的Widget让网页可以把其他网站的内容(比如天气预报)嵌入进来,非常实用也非常受欢迎,但由于安全方面的原因,这些Widget一直运行在一个相对独立的环境中,与网页中的其他内容基本保持隔离状态。 而HTML5为这些Widget提供了一个相互通信的标准机制。尽管它们仍然不能够相互进入对方的运行环境中,但它们已经可以相互发送信息来协同工作了。 广告商对此早就期盼已久,它们非常希望能把分散到同一个网页各个位置的旗帜广告整合起来,而从开发的角度来说,开发人员也一定会找到其他实际用途。例如,在Web页面上播放的网球比赛画面可以和左右两边的球员信息同步起来,这在HTML 1.0时代是难以想象的。 不过,可以发送信息、相互通信机制只是一个开始,下一个亟待解决的是通信协议的问题,因为至今还没有这方面的一个标准。只有为传递信息设立一个标准后,两个不同开发团队开发出来的Widget之间才有可能相互通信。换句话说,通信双方需要更多的标准词汇。 提高浏览器的安全性 每个浏览器插件都是一个单独的应用程序,不同的浏览器插件是由不同的程序员按照不同的标准开发的,发布时间不同,安全模式也不同。很自然地,有些插件会比其他的更安全。随着浏览器中的插件越来越多,要跟踪每个浏览器插件中可能存在的安全漏洞越来越复杂。比如,你企业中去年年末某个时候的安全漏洞到底是出在插件还是浏览器,最后是通过升级浏览器而不是升级插件来解决的还是反过来,可能很难有人记得那么清楚。 把很多功能内置到HTML5而不是使用插件可以大大降低安全风险,避免与插件开发有关的多个环节出现问题,更可以防止有人故意利用插件中的API安装恶意代码。因为相对而言,Firefox、Chrome或IE浏览器等的安全性通常会经过更多的人(包括安全小组)的审计,如果安全小组认为某个浏览器安全,一般来说,其安全风险肯定要少得多。 不过,这里所说的安全性有所改善带有一定程度的主要臆测。这个世界总会有一些人把它们的聪明才智用到邪道上,他们完全可能利用HTML5的某种特性来从事一些恶意行为。只是现在没有人能够预测HTML5的新功能中到底可能隐藏着哪些危险。 简化Web开发 在一家Web软件开发公司工作的开发人员的话很有代表性,它简明扼要地阐述了HTML5可能带来的变化。他说:我更喜欢HTML5,主要是因为它使我能够在一个统一的开发环境下进行开发,这个环境就是浏览器加JavaScript再加上DOM,而不必在Flash世界和HTML5的世界之间来回切换。未来只要掌握一门开发语言和一个工具集,就可以开发任何插件。 他补充说,我认为,对于用户而言好处也是很明显的,而现在Flash仿佛在互联网世界里另外创立了一片天地。 的确,HTML5采用了统一的语言(JavaScript)、统一的数据模型(XML和DOM)和统一的表现规则(CSS)来表现文本、音频、视频和图形,对于开发者而言无疑的是非常理想的,基于一个统一的标准开发环境,工作肯定会简单不少。但要让一切都成为现实挑战仍然是巨大的,一个突出问题是工具的缺乏,现在HTML5的相关工具方面还很少。不可否认,Flash的流行与Adobe为Flash的开发提供了非常好用的工具密不可分。 链接:HTML的演进历程 HTML全称是超文本标示语言(Hypertext Markup …
10个步骤让你成为高效的Web开发者
10个步骤让你成为高效的Web开发者 来源: ITeye 发布时间: 2011-11-08 06:49 阅读: 2336 次 原文链接 全屏阅读 [收藏] 英文原文:10 Ways to Be a More Productive Web Developer 要成为高产、高效的Web开发者,这需要我们做很多工作,来提高我们的工作方式,以及改善我们的劳动成果。 下面是10个提高效率的步骤,虽然不能保证解决你在开发中的所有问题,但至少是非常实用的,可以简化你的Web开发流程,使开发的每一个环节快速、流畅。还可以帮助你节省大量的时间,以便开发更多、更好的项目。 1. 使用Web开发框架 一个良好的Web开发框架,可以帮助你: 解决常见的Web开发问题,如标准的Web页面布局、Web表单处理、浏览器兼容性等。 测试Web开发的bug、安全和性能。 使代码重用更容易,因为有一个统一的API。 社区开发的插件和工具,可以进一步增强开发(jQuery有很多非常棒的插件,比如用户界面、图像和网页排版等)。 遵循编码的最佳实践和伟大的编程设计模式,你甚至不用去思考。 有开发社区和用户的支持,你可以获取帮助以及进行协作。 初学者使用起来非常容易。 所有这些好处都可以节省你的时间以及提高项目的质量。 有很多Web开发框架你可以选择: 完整的Web应用程序框架,如Ruby on Rails或CakePHP。 JavaScript框架,如jQuery、MooTools和其他许多鲜为人知但很优秀的用于处理用户界面、客户端逻辑和Ajax的JavaScript框架。 如果你想加快视觉层设计,你可以使用一个CSS框架(如,Toast),或者网页布局框架(如,960 Grid System)。 专门的框架,如用于内容管理系统开发的WordPress主题框架。 现在还有移动Web应用程序开发框架。 2. 建立一个代码片段库 IT界的名言不要重复发明轮子。回收你的代码,创建一个你最喜欢和经常使用的代码片段集,并确保代码组织良好,可以被轻易搜索到。 最简单的方法是,你可以在硬盘中建立源代码目录。但这未必是最好的方式。 一种方法是使用允许保存代码片段的源代码编辑器或IDE。例如,Notepad++的SnippetPlus插件和Dreamweaver内置的片段面板。 Adobe Dreamweaver的片段面板 另一种方法就是使用专门的片段工具,如Snippet或Snipplr。 你甚至可以使用自己喜欢的代码库/版本控制系统,像Git,来更好地管理你的源代码。 3. 使用正确的工具 这应该是显而易见的,确保你拥有一些优秀的、你知道如何更有效地使用的工具和装备。 如果你是一个网页设计师,你可能需要Photoshop和Illustrator。如果你是一名开发人员,你需要一些优秀的Web开发应用程序,以帮助你完成工作。 当然,各领域之间、开发者之间的工具集是不同的。重要的是你的工具应该可以帮助你尽可能地高效完成工作。 4. 收集和整理免费设计资源 …
谷歌是如何做代码审查的
作者: MarkCC 来源: 外刊IT评论 发布时间: 2011-11-13 20:59 阅读: 2011 次 原文链接 全屏阅读 [收藏] 英文原文: Things Everyone Should Do: Code Review 在上一篇文章中提到过,我已经不在Google工作了。我还没有想清楚应该去哪里,有两三个非常好的工作机会摆在我面前。因为在这段做决定的时间里,我不再受雇于任何人,我想可以写一些专业性的东西,一些很有趣,但也会在同事和管理工作中导致关系紧张的东西。 本文的作者Mark CC Google是一个非常优秀的公司。他们做出了很多令人称赞的东西,不仅仅是存在于公司外部,人们可以看到的东西,公司内部也有。有一些在公司内部并不属于保密的事情,在外部并没有给予足够广泛的讨论。这就是我今天要说的。 让Google的程序如此优秀的一个最重要的事情看起来是非常的简单:代码审查。并不是只有Google做这个事情,代码审查已经被广泛的认可为一种非常好的做法,很多人都在这样做。但我还没有看到第二家这样大的公司能把这种事情运用的如此普遍。在Google,没有程序,任何产品、任何项目的程序代码,可以在没有经过有效的代码审查前提交到代码库里的。 所有人都要经过代码审查。并且很正规的:这种事情应该成为任何重要的软件开发工作中一个基本制度。并不单指产品程序。它不需要很多的工作,但它的效果是巨大的。 从代码审查里能得到什么? 很显然:在代码提交前,用第二双眼睛检查一遍,防止bug混入。这是对其最常见的理解,是对代码审查的好处的最广泛的认识。但是,依我的经验来看,这反倒是它最不重要的一点。人们确实在代码审查中找到了bug。可是,这些在代码审查中能发现的绝大部分bug,很显然,都是微不足道的bug,程序的作者花几分钟的时间就能发现它们。真正需要花时间去发现的bug不是在代码审查里能找到的。 代码审查的最大的功用是纯社会性的。如果你在编程,而且知道将会有同事检查你的代码,你编程态度就完全不一样了。你写出的代码将更加整洁,有更好的注释,更好的程序结构,因为你知道,那个你很在意的人将会查看你的程序。没有代码审查,你知道人们最终还是会看你的程序。但这种事情不是立即发生的事,它不会给你带来同等的紧迫感,它不会给你相同的个人评判的那种感受。 还有一个非常重要的好处。代码审查能传播知识。在很多的开发团队里,经常每一个人负责一个核心模块,每个人都只关注他自己的那个模块。除非是同事的模块影响了自己的程序,他们从不相互交流。这种情况的后果是,每个模块只有一个人熟悉里面的代码。如果这个人休假或但愿不是辞职了,其他人则束手无策。通过代码审查,至少会有两个人熟悉这些程序作者,以及审查者。审查者并不能像程序的作者一样对程序十分了解但他会熟悉程序的设计和架构,这是极其重要的。 当然,没有什么事情能简单的做下来的。依我的经验,在你能正确的进行代码审查前,你需要花时间锻炼学习。我发现人们在代码审查时经常会犯一些错误,导致不少麻烦,尤其在一些缺乏经验的审查者中经常的出现,他们给了人们一个很遭的代码审查的体验,成为了人们接受代码审查制度的一个障碍。 最重要的一个原则:代码审查的用意是在代码提交前找到其中的问题 —— 你要检查的是代码的正确性。在代码审查中最常犯的错误几乎每个新手都会犯的错误是,审查者根据自己的编程习惯来评判别人的代码。 对于一个问题,通常我们能找出十几种方法去解决。对于一种解决方案,我们能有百万种编码方案来实现它。作为一个审查者,你的任务不是来确保被审查的代码都采用的是你的编码风格,因为它不可能跟你写的一样。作为一段代码的审查者的任务是确保由作者自己写出的代码是正确的。一旦这个原则被打破,你最终将会倍感折磨,深受挫折这可不是我们想要的结果。 问题在于,这种错误是如此的普遍而易犯。如果你是个程序员,当你遇到一个问题,你能想到一种解决方案,你就把你想到的方案作为标准答案。但事情不是这样的,作为一个好的审查者,你需要明白这个道理。 代码审查的第二个易犯的毛病是,人们觉得有压力,感觉非要说点什么才好。你知道作者用了大量的时间和精力来实现这些程序不该说点什么吗? 不,你不需要。 只说一句哇,不错呀,任何时候都不会不合适。如果你总是力图找出一点什么东西来批评,你这样做的结果只会损害自己的威望。当你不厌其烦的找出一些东西来,只是为了说些什么,被审查人就会知道,你说这些话只是为了填补寂静。你的评论将不再被人重视。 第三是速度。你不能匆匆忙忙的进行一次代码审查,但你也要能迅速的完成。你的同伴在等你。如果你和你的同事并不想花太多时间进行代码复查,你们很快的完成,那被审查者会觉得很沮丧,这种代码审查带来的只有失望的感觉。就好象是打搅了大家,使大家放下手头的工作来进行审查。事情不该是这样。你并不需要推掉手头上的任何事情来做代码审查。但是在你做手头上事情的中途要休息一会,喝杯茶,冲个澡,或谈会儿闲话。当你回来时,你可以进行代码审查。如果你真是这样,我想没有人愿意在那干等着你。
高德纳(Knuth)谈计算机程序设计艺术(上)
投递人 itwriter 发布于 2011-11-25 08:42 评论(12) 有3416人阅读 原文链接 [收藏] « » 英文原文:The Art of Computer Programming 高德纳(D. E. Knuth)教授是备受尊崇的系列巨著《计算机程序设计艺术》(The Art of Computer Programming)和数十篇受到高度赞誉的计算机科学论文的作者。2011年6月,结束了在英国的书籍研讨和系列演讲的高德纳教授,跟 BCS 编辑 Justin Richards 畅谈了自己的人生和工作。 您最广为人知的成就应该是《计算机程序设计艺术》系列著作了。1999年,这个系列被美国科学家(American Scientist)期刊评选为20世纪最重要的12部理学专著之一。这个系列最初是如何创作出来的?您是如何看待美国科学家期刊的这一评价呢? 这系列书籍大约从1960年代开始创作。那时候,因为没有合适的资源,所以大家都在重新发明一些已有的东西。我一直都很喜欢写作,在学校参与报纸和杂志的工作,认为自己是一个作家。我意识到,需要有人记录下所有已经发表而我们正在遗忘的优秀思想。 这又要回溯到最初的年代,当时真正研究计算技术的人很可能还不到一千个。我没有把这看作将要影响世界的事情,但仍然觉得这些很酷的资料是值得认真整理的。 那时候,我就考虑还有什么人合适写作这样的书籍。我能想到的每个人,他们都很可能只会关注自己所研究的那个领域。在我所知道的人当中,只有我自己是没有发明创造过什么东西的,因此我设想自己能够以中立的立场来担任他们的代言人。坦白说,那就是初始动机,我认为存在那样的需求。 我写作这样的书,还有一个很自然的理由。那就是,我要尝试将很多人的不同想法结合起来。我会看到,A君以某种方式来分析他的方法A,而B君会以另一种方式来分析与之竞争的方法B。因此,我就要用B君的方式来分析方法A,用A君的方式来分析方法B。 因此,我最终就是以单纯分析以上内容的形式来创作书的雏形。很快,我认识到,有些被我捆绑使用的科学方法,在我所受的教育中其实是不允许同时出现的。然而,一次又一次地,我真的看到只有这样的思维方式才可以正确地阐述问题。 长话短说,很快我也有了自己的不同意见,并且开始发现新东西,这样就难以继续中立地写作了。不过,我仍然尝试在最大限度内以公允、合理的态度去总结每个人的有价值思想。 至于这本书入选世纪最佳书籍,我还觉得不太好意思。他们把我推到爱因斯坦和费曼的伟大队列中,而我实际上并不属于那样的级别。这可能仅仅是因为他们必须从计算机科学领域选出一个人,而我又没有太多的竞争者罢了。虽然我也觉得自己在研究领域的努力工作是值得提及的,但这样把我挑选出来代表计算机科学, 总有点关公战秦琼的意味了。 是什么促使您投身计算机科学这个领域的呢? 我天生就是一个计算机科学家——我的头脑里有一种组织东西的思维方式,注定让我成为一个好的程序设计员。我觉得任何人都可以学习使用计算机,但是五十个人里面大概只有一个人会成为像我这样的极客。这意味着我们这些人将在这个领域中的不断创新,并与计算机产生共鸣。我们的思维方式会帮助我们更容易地学习如何制造机器。 您为什么会认为计算机科学是如此重要呢? 计算机科学之所以重要,是因为它改变了沟通的方式。它还影响了金融业,这是我不太情愿提及的。可惜的是,世人是以我和我的同行们对华尔街产生的影响来衡量我们的工作的。在这个意义上,我是很嫉妒天文学家的,因为世人认为天文学家由自己的兴趣去研究天文学是值得尊重的。其实,我研究计算机科学也是同样出于兴趣啊。 我对 IT 这个说法并没有太大的共鸣,真正打动我的是科学。对我而言,IT 是不错的东西,但并非我所擅长的领域。我的太太就能比我更快地掌握某个图标的含义、找到要点击什么地方。但要让机器完成复杂、细致的工作,在科学上是有许多难题需要攻克的。我曾经觉得很多问题是无法找到答案的,但事实上我们已经一步步地知道要如何解决它们。对我来说,即便没有任何金钱上的回报,我也会做这些工作。 所以说您对此充满激情吗? 那是,就像每天早上醒来我都会想着今天要好好写个程序。 您是受到缪斯女神的眷顾了吧? 是啊,有些日子她给予我的要比给予其他人的多。甚至有某个阶段,我几乎认为自己是有个专属的缪斯女神的。 在您看来,您在计算机科学领域最大的成就是什么? 我想我的第一个成果是研究编译器的理论。我曾经研究过代数语言的理论,而在我写这本书(第10章)的时候,我正试图描述人们在这个领域的种种发现和成果,然后我突然意识到,可以有一种方法把这些发现和成果都关联起来。由于这个发现过于新奇,我不知道该怎样在书里面阐释它,于是就把它发表成一篇学术论文。后来,其他的人读懂了我的意思并开始应用,最终让这个发现成为了今天所有代数编译器的分析原理。 不过我觉得我最大的成就是发明了比较算法优劣的数学方法。为了了解一个程序到底好不好,我创造了一种量化的比较方法,例如你可以说一个程序优于另外一个程序2.3倍。这个数学方法叫做算法分析,是我最引以为豪的学术成就,也是成功应用计算机的关键。 当我发明这套数学方法的时候,我跟我的出版商说,不如把这本书改名作“算法分析”吧。但是他们说不行,这样的话这书就永远卖不出去了!但实际上那就是此书的核心内容,它除了综合总结计算机学者发明的算法,还帮助我们从量化的角度去评价每个算法的优劣。 在您的网站上有关于“你为何不用 Email”的回覆。“对于那些生活在事务的顶端的人们而言,Email 是个美妙的东西。但那不是给我用的,我的角色是在事件的底层。”您是否可以再解释一下自己对 Email 的立场,以及“在事件的底层”的含义? 某些人是不能整天聒噪不休的,他们要考虑的事情,需要长时间的专注、对材料进行组织并营造坚实的基础,而不是仅仅对前沿问题的惊鸿一瞥。将某些内容以精确的形式表达出来,是需要很长时间的。要正确地做好事情,我就必须专注地耗费大量的时间。当我被大家当作权威的时候,世上数不清的人们要来问这问那。 因此,用了15年 Email …
国外程序员推荐的免费编程书籍资源
国外程序员推荐的免费编程书籍资源 投递人 itwriter 发布于 2011-11-04 17:36 评论(24) 有4600人阅读 原文链接 [收藏] « » StackOverflow 上有位网友(xenoterracide)提问: 我正试着搜集整理一个可在网上免费阅读的计算机编程书籍列表。这些书可以是某种特定编程语言,也可以计算机方面通用书籍。网上有哪些免费可用的书籍呢? 下面是一些网友在回复中的推荐资源,其中有视频、大学课程、编程语言教程网站,由伯乐在线整理编译。 一、George Stocker 提供了一大串,分类如下: Meta-Lists How to Design Programs: An Introduction to Computing and Programming 25 Free Computer Science Ebooks Free Tech Books MindView Inc Wikibooks: Programming Cheat Sheets (Free) CodePlex List of Free E-Books Book Training – On Video! Sofware Program Managers Network – Free EBooks EBook Share …
10个最“优秀”的代码注释
投递人 丕子 发布于 2011-11-22 07:43 评论(18) 有3463人阅读 原文链接 [收藏] « » 下面是 stackoverflow 网站上网友针对你看到过的最好的代码注释是什么样的?这个问题给出的回答的前10条: 1、 // 亲爱的维护者: // 如果你尝试了对这段程序进行‘优化’, // 并认识到这种企图是大错特错,请增加 // 下面这个计数器的个数,用来对后来人进行警告: // 浪费在这里的总时间 = 39h 2、 /** * 致终于来到这里的勇敢的人: 你是被上帝选中的人,英勇的、不辞劳苦的、不眠不修的来修改 我们这最棘手的代码的编程骑士。你,我们的救世主,人中之龙, 我要对你说:永远不要放弃,永远不要对自己失望,永远不要逃走,辜负了自己。 永远不要哭啼,永远不要说再见。永远不要说谎来伤害自己。 */ 3、 Exception up = new Exception (“Something is really wrong.”); throw up; 4、 // 一些修改 1 – 2002/6/7 增加临时的跟踪登录界面 // 一些修改 2 – 2007/5/22 我临时的犯傻 5、 #define TRUE …
为什么项目经理拿的钱比程序员多?
投递人 itwriter 发布于 2011-11-21 08:19 评论(19) 有4683人阅读 原文链接 [收藏] « » 偶然在programmers.stackexchange.com 上看到了这个有趣的问题,有人问:既然普遍认为编程是比较难的工作,为什么业务分析人员和项目经理们会拿比程序员更多的薪水?虽然大多数的时候程序员都被发现是最晚离开公司的人,可那些家伙的工作却能拿更多的报酬,为什么会这样? 回答的人很多,但似乎只有一个是比较合情合理的,它是从经济学原理的角度分析的这个问题。 人们所能获得的报酬往往会低于老板们的“最高标准”,而高于人们自己的“最低要求”。在这个范围内,你的实际收入依赖于你相对于你的老板的讨价还价的能力。 假设你给公司提供的服务价值每天1000美元。如果你用枪指着他,他会给你这个价格,因为他别无选择。如果你别无选择,你只能接受每天100美元水平。这是你的浮动范围。 假设你是一个新手,没有背景关系,不出名,你的老板是谷歌。谷歌有很强的讨价资本,它可以等待,去雇用其他人,很多人都想为它工作。你的资本很少,你需要付房租,所以你只能接受每天100多美元,而不是1000美元。 假设你是地球上最后一个会 COBOL 语言的程序员,而你的老板的主机上正跑着 COBOL 程序。那么,你拥有很强的讨价还价的资本,你将能得到接近每天1000美元的报酬。 所以,要么是你的项目经理或业务分析员对公司更有价值,要么就是他们有更多的讨价还价的资本。我并不认为是前一种情况,也就是说,应该是后一种情况。善于人际交往的人很少。这种事情也不能外包——因为他们需要接触客户。他们的相对稀缺给了他们更多讨价的资本,所以他们有了更高的报酬。 这个巧妙的回答来自 NRM,尽管跟其它的各种和政治相关的解答比起来有点乏味,但它确实反映了实际情况。就像他提到的,善于交际的人稀少,这种人在任何公司都能来到巨大的好处,尤其是在软件开发领域。