最有影响力的编程图书

编程问答社区StackOverflow上最受欢迎的问题之一是每个程序员都应该读的编程图书,Internet Security博客总结了其中十本最有影响力的编程图书,包括: 《代码大全》第二版,《程序员修炼之道》,《计算机程序的构造和解释》第二版,《C程序设计语言》,《算法导论》,《重构:改进现有代码设计》,《设计模式》,《人月神话:软件项目管理之道》,《计算机程序设计艺术》第一卷第三版,《编译器:原理、技术和工具》。

从:solidot

Advertisements

关于编程,大学没有传授的十件事

月光博客作者:月光 (williamlong)

  笔者依然记得当年完成学业时,深信自己已经准备好进入任何一家软件公司,并开始成为一个顶级的开发人员。显然,开始工作后没多久,笔者就意识到,还有很多事是我所不了解的。

在不断吸取经验的同时,笔者一直在努力学习那些我从来没有学过的,但却是成为优秀的开发人员所应了解的基本知识。以下是笔者希望自己能在学校就学到的十件事。

编程

1. 我们总是错的

开发人员有着相当大的自我意识,包含了一些其他的非技术性缺陷,这也正是为什么我们很难发现我们做错了什么。我看到过很多无休止的设计讨论,开发人员不断地发表自己的想法……呵呵!猜猜怎样……我们都错了,唯一的区别就是我们犯错的离谱程度不同。

理解并接受这个事实非常重要,我们只有这样做了,才能敞开心胸去听听别人的意见,采用他们的想法,来得出一个更好的解决办法。

2. 事情若有可能出错,就一定会出错

也就是说“希望驱动开发(hope driven development)”,如果你对于某些事并不确定,如果你发现自己使用了“应该”这个词,那你就麻烦了。

而这只有一个解决方案,尽己所能去保证它不会出错,这可能意味着你需要编写一个测试、调试并验证需求……

3. 所有的代码都烂

在我抱怨那些我碰到过的代码十年之久后,我得出了一个精辟的结论,所有的(包括我自己写的)代码,都烂。当然,烂还是有等级之分的,但即便是我见过写得最好的代码,也是难以读懂的。

这并不意味着把你的代码写得更好是没有意义的,恰恰相反,最好和最坏的代码还是有天壤之别的。

4. 错误(Bug)总会存在

永远存在!问题只在于要发现它困难与否。

5. 客户最大

许多客户并不在乎你在方案中使用了哪些技术,应用程序需不需要做更多的事……或通俗上说,你是否使用了好的实践方案。

也因为我可以想象,要是我只说了前面那一段,我会收到多少恶评,让我说得更清楚些……我想说的是,我们永远不应该忘记客户的立场,有时候,开发人员为了最佳实践而在项目工程中过度坚持采用(某些)技术,但要记住,若这些技术无法给客户带来价值,那就放弃吧!

6. 纸上谈兵是行不通的

我曾认为,我可以在前期就把我的整个设计置于纸上,然后只要将缺漏处填上就好,但这样根本行不通。

软件开发是复杂的,若不亲手去碰碰看,很难看到所有的实际层面以及它们之间的关系。因此,在前期保持规划与设计是很有用的,但不要过度坚持,也不要把设计图表当作合约固守。

7. 少即是多

或者,你可能知道更好的说法是:“Keep it simple, stupid!”(保持简单,KISS设计原则)。所以,如果没有必要的就舍弃吧!因为要记住:“事情若有可能出错,就一定会出错。”

8. 编写代码只是我们所做工作的20%而已

请准备好,花80%的时间用于思考、调试、测试、开会、谈话……而所有的其他活动都是非常重要的,所以若要成为一个优秀的软件开发人员,你必须培养广泛而全面的技巧(Skill),而不仅仅是技术(Technical)。

9. 客户永远不知道他/她想要的是什么

客户若有需求,或是想法,但是他们不知道详细情况……软件开发要做的工作就是,发现细节并去除所有的不确定性,将这些需求转换成客户想要一个应用程序。

10. 已经有人做过了

所以不要再重新发明轮子,用谷歌找找看,或者更好的方法是,请教你的同事,很多时候他们可能都已经做了相同、或非常类似的事情。

英文原文:10 things they never teach in college about programming

中文翻译:伯乐在线

【高效程序员系列】2、别做机器人——让工作自动化

每 天打开电脑,首先要做的是打开最常用的软件:要和朋友联系,你打开了QQ;要收邮件,你打开了Outlook;要听音乐,你打开了酷狗……但是你不想做机 器人,每天重复的打开这些软件,于是你让它们开机启动。恭喜,你有不做机器人的基本思想。这些简单重复的操作扔给电脑吧,你需要把宝贵的精力用来做其他更 有价值的事。但是聪明的你有没有想过,日常工作中有没有其他事也可以丢给电脑,让你摆脱机械的操作?下面分享一下我的经验,如果你也有相关的经验,希望也 拿出来和大家一起分享!

1、VS代码段的使用和定义

在使用Visual Studio编程的时候,你肯定会喜欢智能提示,还有代码段的功能。比如输入foreach:

clip_image001

按下Tab,就出来了一个固定格式的代码段:

clip_image002

在编辑器中按下Ctrl+K,Ctrl+X,就可以查看代码段定义了,如下图:

clip_image003

如果你正在使用VS2008,可以在菜单中找到代码段管理器:

clip_image004

其中列出了系统自带的代码段(不明白为什么VB的那么多,C#的那么少。其实现在VB和C#没多大区别,代码段上也应该做到平等。):

clip_image005

clip_image006

相信你应该对一些常用的代码段应用非常熟练了,比如prop,for,if,try。其实代码段也是可以自己定义的,废话少说,下面就介绍一下代码段的定义。

这里介绍三个工具(都是免费的):

(1)Snippet Editor(下载地址

这是一个独立的软件,而且是绿色版的。解压之后运行SnippetEditor.exe即可。来看一下它的界面:

clip_image007

它会自动识别当前机器上安装的VS版本,然后在左上角列出来。选择不同的版本,左边的树控件会列出该版本的代码段定义。双击代码段文件,左边的编辑 区列出编辑的信息。而在状态栏会显示出当前编辑文件的路径。要创建代码段,单击工具栏上的“New”按钮即可。下面针对编辑区的操作进行讲解:

【Properties】
Title 标题,必须输入,就是显示在树控件中的节点名称
Description 描述,对代码段的详细解释,在VS中输入代码段时会提示
Author 作者,写上自己的大名吧
Shortcut 缩写,在编辑器中输入定义的Shortcut,按下Tab键,即可输入代码段
Language 编程语言,可选HTML、JScript、Visual Basic、Visual C#、Visual J#、XML
Kind 代码段类型,可选Class declaration、Member declaration、Member body、Unspecified,一般选择默认Unspecified即可
Help Url 帮助URL,如果有就输入
【Code】

该区域包含两部分,上面是文本编辑框,下面是参数编辑框。现在文本编辑框中输入代码模板,然后将光标定位在需要变动的地方,点击下方工具栏上面的 “新增”按钮,软件会在文本编辑框中插入一段格式为“$NewLiteral$”的文本,其中NewLiteral即模板参数的名称,根据自己的需要修改 即可。下面列出模板参数的属性解释:

ID 模板参数的名称,在一个模板里不重复即可
Defaults to 该参数的默认值,定义为最常用的默认值,在输入的时候就可以不用再输入了,比如字符串就定义为””,数字就定义为0
Kind 参数类型,可选Literal、Object,一般选择默认的Literal即可
Type 参数的数据类型,一般不需要输入。如果Kind选择为Object,则最好输入参数的数据类型。
Tooltip 提示信息
Function 生成代码的方法,一般不需要输入。在一些特殊场合需要,比如switch代码段中,它会自动列出枚举的值。
Editable 是否可以编辑

定义代码段没什么难度,参考系统中默认的代码段就可以写出自己代码段,可以大大提高输入代码的速度。这里有两个特殊的模板常 量,$end$和$selected$。“$end$”是用来定义在VS中输入完代码段之后,光标定位在什么地方。“$selected$”一般用于多行 代码,我分析了一下系统代码段,感觉没什么实际用途。

【References】

该区域是用来记录要添加哪些dll引用,但是它并不会真的自动去引用,这里只是记录。

【Imports】

该区域是用来记录要在代码中添加哪些命名空间,它也不会真正去添加命名空间。

编辑完成之后点击“Save”按钮保存,然后把该文件放到自定义代码段文件夹中。该文件夹位于“%我的文档%\Visual Studio 2010\Code Snippets\Visual C#\My Code Snippets”或者“D:\Program Files\Microsoft Visual Studio 10.0\VC#\Snippets\2052\My Snippets”,根据自己安装的路径和编程语言查找。将定义的代码段文件放到该文件夹中,再打开VS,输入快捷键然后按下Tab,你定义的代码段就可 以被输入了。

(2)SnippetDesignerSetup-For VS2008.msi(下载地址

这个是给VS2008使用的插件,解压之后安装即可。然后新建一个后缀名的.snippet的文件,用VS2008打开,则会调用安装的插件来编辑代码段。

clip_image008

个人更喜欢第一种方法,所以在此对插件方法不做详细介绍,如果需要了解详细操作步骤可以参考http://snippetdesigner.codeplex.com/wikipage?title=createFromScratch&referringTitle=Documentation,英文的。

(3)SnippetDesigner-For VS2010.vsix(下载地址

这是针对VS2010的扩展,和VS2008不一样,不在需要安装到系统中,双击后会添加到VS2010的扩展中。装好装好会在VS2010中会添加一个文件模板,可以直接在VS2010中新建一个snippet文件:

clip_image009

顺便提一句,VS2010有很多扩展,可以联网下载,打开扩展管理器即可:

clip_image010

2、代码段编译Snippet Compiler

Snippet Compiler(下载地址) 是一个基于 Windows 的小型应用程序,你可以通过它来编写、编译和运行代码。如果你具有较小的代码段,并且你不想创建完整的 Visual Studio .NET 项目(以及该项目附带的所有文件),则该工具会很有用。用一句话概括它的功能:它是一个支持多种编程语言、多个版本的.NET框架、多个代码文件、带智能 提示的编辑和编译软件。下面是它的界面,如果需要详细了解,可以参考:http://www.cnblogs.com/conexpress/archive/2011/07/24/2115308.html

clip_image011

3、SQL智能提示和代码段

上面提到了在VS中可以使用智能提示和代码段输入功能,另一个最常用的软件就是SQL Server。但是这么多年了,SQL Server一直没有智能提示功能,直到SQL Server 2008才加入了字段提示功能,但是和VS的智能提示相比,相差十万八千里。如果你还在吭哧吭哧一个一个字段敲SQL代码的话,这里强烈推荐你使用SQL Prompt。它不仅可以提示字段,还能插入代码段,而且代码段还能自己定义……关于它的种种好处这里就不详述了,当你掌握它之后,效率提高不止一两倍。 具体的用法可以参考http://www.cnblogs.com/conexpress/archive/2011/07/28/2120432.html#

clip_image012

4、代码自动生成

作为.NET开发人员,手边有一款代码生成工具必不可少。最出名的代码生成工具就要算是CodeSmith了,它功能强大,简单易懂,很容易上手。如果你还不会用CodeSmith,那就赶紧去学习吧。可以参考TerryLee的系列文章:http://terrylee.cnblogs.com/archive/2005/12/28/306254.aspx

clip_image013

CodeSmith是一款商业软件,需要花钱购买的。如果你很尊重版权,又不想花钱购买,推荐你另一款同样强大的免费工具:MyGeneration,也是完全基于模板引擎进行代码生成的,功能上并不比CodeSmith差。可以到http://sourceforge.net/projects/mygeneration/ 下载,也可以参考http://www.docin.com/p-83919214.html 学习如何使用。

clip_image014

5、脚本工具

脚本工具Au3、AHK、Python、Ruby、Windows Power Shell等

虽然现在的工具都有很好的IDE界面,但是有时候脚本工具却能带来更高的效率。而且有些功能用脚本语言很容易实现,但是换成其他语言就比较麻烦了。

(1)Au3

Au3的全名是AutoIt3,它是一种类似于VB的脚本语言,设计的初衷就是为了让工作自动化。下面列举一下它的特点:

语法类似VB,很容易理解。

编辑器带智能提示,感觉这一点比VB6强大,有点像VS2005之后的代码编辑器。

可以很方便的操作鼠标和键盘,也可以录制操作过程,类似于宏。

可以设置快捷键,组合Ctrl、Alt、Shift、Win和其他键,按下快捷键即可执行对应的操作。

可以编译成exe文件独立运行,而且支持Win7。

有类似于VB的界面设计器,可以设计具有Windows界面的应用程序。

具有强大的扩展库,很容易的操作系统、Win32API、网络、文件、数据库、注册表、ini文件……

如下图,可以用类似C语言的#include引入扩展文件,代码可以折叠,甚至有类似于C#的#Region折叠。

clip_image015

界面设计器,感觉和VB6的设计器差不多,还能插入Win32控件。

clip_image016

它包含强大的扩展库,涉及到文件、GDI+、界面、网络、数学、进程、内存、数据库、Office、音频、视频……如下图:

clip_image017

至于它的应用场景就很广泛了,最常用的就是执行大量重复的操作,用Au3记录下这些操作之后,就可以代替人工执行了,比如批量安装软件、实现游戏外 挂、热键功能等等。你甚至可以把它看成是一种比VB6更强大的语言,因为它可以编译成exe文件,可以设计具有Windows界面的程序,不需要运行时支 持,copy到别的机器就可以运行,还支持Win7。而且它的很多操作都只需要一个方法即可实现,比如从网络下载文件用 InetGet(url,filePath),打开文件或执行程序Run(filePath),点击鼠标MouseClick(key,x,y),移动鼠 标MouseMove(x,y),发送击键Send(key),关闭窗体WinClose(title)……其中最常用的一个方法就是 HotKeySet(hotkey,method),就是注册热键。比如HotKeySet(“#q”,”MyMethod”)的意思是注册Win+Q键 运行MyMethod方法,当按下Windows键和Q键时,就会调用MyMethod方法。

详细的用法这里就不介绍了,有需要的可以通过如下网址了解:

华军软件园-Au3汉化版(推荐使用,内含中文帮助文档):http://www.onlinedown.net/soft/54314.htm#down

AutoIt中文论坛:http://www.autoit.net.cn/

AutoIt官方网站:http://www.autoitscript.com/site/autoit/

新版Au3教程:http://wenku.baidu.com/view/b0915d1fb7360b4c2e3f6460.html

Let’s AutoIt电子书:http://wenku.baidu.com/view/3418a0cfa1c7aa00b52acb6d.html

另外一个和Au3类似的脚本语言叫AHK,全称是AutoHotKey,据说是从Au3开发组分离出去的一部分人开发的,功能和Au3类似,但是语法有点类似C。有需要的也可以到如下网址了解:

AHK下载:http://www.onlinedown.net/soft/39219.htm

小众软件AHK分类:http://www.appinn.com/category/autohotkey

AHK中文论坛:http://ahk.5d6d.com/

煎蛋-AHK快餐店(适合入门):http://jandan.net/2007/10/21/ahk-fast-food-restaurant-advance-notice.html

(2)Windows PowerShell

这个是微软的脚本语言。之前微软只注重界面,命令行方面非常欠缺。特别是对于系统管理人员,有些操作用命令行比界面更快捷。Unix和Linux中 的Shell命令非常强大,微软决定在自己的Windows系统上也开发一种强大的Shell命令。下面是PowerShell的介绍:

PowerShell是一款基于对象的shell, 建立在.Net框架之上, 目前支持.Net Framework 2.0. 能够运行在Windows XP SP2, Windows Vista, Windows 7,Windows 2003操作系统上. 能够同时支持WMI, COM, ADO, ADSI等已有的Windows管理模型.

在SQL Server2008中也添加了对PowerShell的支持,如下图:

clip_image018

使用PowerShell也很简单,和cmd用法一样,在运行中输入powershell即可,如下图,在其中也可以输入cmd命令。

clip_image019

如果对PowerShell命令不熟悉,可以考虑使用PowerShellAnalyzer,它也具有智能提示功能。官方网站:http://www.powershellanalyzer.com/

clip_image020

下面举个例子来展示PowerShell的便利。比如新招聘一批员工,需要在服务器上给他们每个人创建一个文件夹。一般人都会想到的是:新建文件 夹,重命名,接着再新建重命名。几个人还可以接受,但是如果好几十个人,估计谁都会有点烦。如果用PowerShell则可以很容易解决问题。首先在一个 文本文件中输入每个人的名字,每个名字占一行。然后打开PowerShell输入如下命令即可,是不是觉得很方便呢。

clip_image021

在园子里找了这么一个PowerShell的系列文章,可以参考一下:http://www.cnblogs.com/brooks-dotnet/tag/PowerShellV2/

(3)其他脚本语言

通过上面的介绍,是不是觉得有时候脚本语言更方便呢。其他比较流行的脚本语言还有Python、Ruby等,大家可以根据自己的喜好学习。

6、自动化测试工具

大家在软件开发过程中,肯定需要进行反复测试。但是有的时候测试只是一些重复的鼠标键盘操作,花大量时间来人工完成实在是对人力的浪费。这里推荐给大家一个非常强大的自动化测试工具:Selenium。

先看一下对它的介绍:

Selenium也是一个用于Web应用程序测试的工具。Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE,Mozilla和Firefox等。这个工具的主要功能包括:测试与浏览器的 兼容性–测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能–创建衰退测试检验软件功能和用户需求。支持自动录制动作, 和自动生成。Net、Java、Perl等不同语言的测试脚本。Selenium 是 ThoughtWorks 专门为 Web 应用程序编写的一个验收测试工具。

如果你想摆脱一步步机械的操作,等待最后验证结果的测试过程,那么就好好学一下Selenium吧。以下是一些参考资料:

Selenium私房菜系列:http://www.cnblogs.com/hyddd/archive/2009/05/30/1492536.html

利用Selenium自动化Web测试:http://www.oschina.net/question/12_15377

ASP.NET单元测试工具Selenium:http://www.cnblogs.com/ljzforever/archive/2009/05/20/1467801.html

Selenium IDE实践:http://qiuguangchun.blog.163.com/blog/static/126221212010213114517993/

Selenium中文论坛:http://seleniumcn.cn/

本文就写到这里了,涉及的东西比较多,没法很详细的展开介绍,给大家提供了一些参考资料,有需要的可以自己详细学习。

如果你有什么能避免重复操作,提高工作效率的好方法,希望能拿出来和大家共享,让大家能有更多时间去做更有意义的事,谢谢!

作者: Alex Leo 发表于 2011-08-03 22:13 原文链接