国外程序员推荐:每个程序员都应读的书

编者按:2008年8月4日,StackOverflow 网友 Bert F 发帖提问:哪本最具影响力的书,是每个程序员都应该读的

“如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本,你会选择哪本书呢?我希望这个书单列表内容丰富,可以涵盖很多东西。”

很多程序员响应,他们在推荐时也写下自己的评语。以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 10的书。其实除了前10本之外,推荐数前30左右的书籍都算经典,笔者整理编译这个问答贴,同时摘译部分推荐人的评语。下面就按照各本书的推荐数排列。

1. 《代码大全 史蒂夫·迈克康奈尔

推荐数:1684

“优秀的编程实践的百科全书,《代码大全》注重个人技术,其中所有东西加起来,就是我们本能所说的“编写整洁的代码”。这本书有50页在谈论代码布局。” —— Joel Spolsky

对于新手来说,这本书中的观念有点高阶了。到你准备阅读此书时,你应该已经知道并实践过书中99%的观念。– esac

2. 《程序员修炼之道

推荐数:1504

对于那些已经学习过编程机制的程序员来说,这是一本卓越的书。或许他们还是在校生,但对要自己做什么,还感觉不是很安全。就像草图和架构之间的差别。虽然你在学校课堂上学到的是画图,你也可以画的很漂亮,但如果你觉得你不太知道从哪儿下手,如果某人要你独自画一个P2P的音乐交换网络图,那这本书就适合你了。—— Joel

3. 《计算机程序的构造和解释

推荐数:916

  就个人而言,这本书目前为止对我影响醉倒的一本编程书。

代码大全》、《重构》和《设计模式》这些经典书会教给你高效的工作习惯和交易细节。其他像《人件集》、《计算机编程心理学》和《人月神话》这些书会深入软件开发的心理层面。其他书籍则处理算法。这些书都有自己所属的位置。

然而《计算机程序的构造和解释》与这些不同。这是一本会启发你的书,它会燃起你编写出色程序的热情;它还将教会你认识并欣赏美;它会让你有种敬畏,让你难以抑制地渴望学习更多的东西。其他书或许会让你成为一位更出色的程序员,但此书将一定会让你成为一名程序员。

同时,你将会学到其他东西,函数式编程(第三章)、惰性计算、元编程、虚拟机、解释器和编译器。

一些人认为此书不适合新手。个人认为,虽然我并不完全认同要有一些编程经验才能读此书,但我还是一定推荐给初学者。毕竟这本书是写给著名的6.001,是麻省理工学院的入门编程课程。此书或许需要多做努力(尤其你在做练习的时候,你也应当如此),但这个价是对得起这本书的。

你还不确信么?那就读读第一版的前言或序言。网上有免费的电子版。 – Antti Sykäri

4. 《C程序设计语言

推荐数:774

这本书简洁易读,会教给你三件事:C 编程语言;如何像程序员一样思考;底层计算模型。(这对理解“底层”非常重要)—— Nathan

5. 《算法导论

推荐数:671

代码大全》教你如何正确编程;《人月神话》教你如何正确管理;《设计模式》教你如何正确设计……

在我看来,代码只是一个工具,并非精髓。开发软件的主要部分是创建新算法或重新实现现有算法。其他部分则像重新组装乐高砖块或创建“管理”层。我依然梦想这样的工作,我的大部分时间(>50%)是在写算法,其他“管理”细节则留给其他人…… —— Ran Biron

6. 《重构:改善既有代码的设计

推荐数:617

我想我不得不推荐《重构》:改进现有代码的设计。—— Martin

我必须承认,我最喜欢的编程语录是出自这本书:任何一个傻瓜都能写出计算机能理解的程序,而优秀的程序员却能写出别人能读得懂的程序。—— Martin Fowler

7. 《设计模式

推荐数:617

就我而言,我认为四人帮编著的《设计模式》是一本极为有用的书。虽然此书并不像其他建议一样有关“元”编程,但它强调封装诸如模式一类的优秀编程技术,因而鼓励其他人提出新模式和反模式(antipatterns),并运用于编程对话中。—— Chris Jester-Young

8. 《人月神话

推荐数:588

9. 《计算机程序设计艺术

推荐数:542

这是高德纳倾注心血写的一本书。—— Peter Coulton

10. 《编译原理(龙书)

推荐数:462

我很奇怪,居然没人提到龙书。(或许已有推荐,我没有看到)。我从没忘过此书的第一版封面。此书让我知道了编译器是多么地神奇绝妙。- DB

11. 《深入浅出设计模式

推荐数:445

我知道四人帮的《设计模式》是一本标准书,但倒不如先看看这部大部头,此书更为简易。一旦你了解了解了基本原则,可以去看四人帮的那本圣经了。- Calanus

12. 《哥德尔、艾舍尔、巴赫书:集异璧之大成》

推荐数:437

如果下昂真正深入阅读,我推荐道格拉斯·侯世达(Douglas Hofstadter)的《哥德尔、艾舍尔、巴赫书》。他极为深入研究了程序员每日都要面对的问题:递归、验证、证明和布尔代数。这是一本很出色的读物,难度不大,偶尔有挑战,一旦你要鏖战到底,将是非常值得的。 – Jonik

13. 《代码整洁之道

推荐数:329

虽然《代码整洁之道》和《代码大全》有很多共同之处,但它有更为简洁更为实际的清晰例子。 – Craig P. Motlin

14. 《Effective C++》和《More Effective C++

推荐数:297

在我职业生涯早期,Scott Meyer的《Effective C++》和后续的《More Effective C++》都对我的编程能力有着直接影响。正如当时的一位朋友所说,这些书缩短你培养编程技能的过程,而其他人可能要花费数年。

去年对我影响最大的一本书是《大教堂与市集》,该书教会我很有关开源开发过程如何运作,和如何处理我代码中的Bug。 – John Channing

15. 《编程珠玑

推荐数:282

尽管我不得不羞愧地承认,书中一半的东西我都没有理解,但我真的推荐《编程珠玑》,书中有些令人惊奇的东西。 – Matt Warren

16. 《修改代码的艺术by Michael Feathers

我认为没有任何一本书能向这本书一样影响了我的编程观点。它明确地告诉你如何处理其他人的代码,含蓄地教会你避免哪些(以及为什么要避免)。- Wolfbyte

同意。很多开发人员讨论用干净的石板来编写软件。但我想几乎所有开发人员的某些时候是在吃其他开发人员的狗食。– Bernard Dy

17. 《编码:隐匿在计算机软硬件背后的语言

我推荐Charles Petzold的《编码》。在这个充满工具和IDE的年代,很多复杂度已经从程序员那“抽取”走了,这本书一本开眼之作。 – hemil

18. 《禅与摩托车维修艺术 / Zen and the Art of Motorcycle Maintenance》

对我影响最大的那本书是 Robert Pirsig 的《禅与摩托车维修艺术》。不管你做什么事,总是要力求完美,彻底了解你手中的工具和任务,更为重要的是,要有乐趣(因为如果你做事有乐趣,一切将自发引向更好的结果)。 – akr

(编注:关于这本书,也可以看看阮一峰的读后感。)

19. 《Peopleware / 人件集:人性化的软件开发

Demarco 和 Lister 表明,软件开发中的首要问题是人,并非技术。他们的答案并不简单,只是令人难以置信的成功。第二版新增加了八章内容。 – Eduardo Molteni

20. 《Coders at Work / 编程人生

一本非常有影响力的书,可以从中学到一些业界顶级人士的经验,了解他们如何思考并工作。 – Jahanzeb Farooq

21. 《Surely You’re Joking, Mr. Feynman! / 别闹了,费曼先生!

虽然这本书可能有点偏题,但不管你信不信,这本书曾在计算机科学专业课程的阅读列表之上。一个优秀的角色模型,一本有关好奇心的优秀书籍。 – mike511

22. 《Effective Java 中文版》

此书第二版教你如何编写漂亮并高效的代码,虽然这是一本Java书,但其中有很多跨语言的理念。 – Marcio Aguiar

23. 《Patterns of Enterprise Application Architecture / 企业应用架构模式

很奇怪,还没人推荐 Martin Fowler 的《企业应用架构模式》- levi rosol

24. 《The Little Schemer》和《The Seasoned Schemer nmiranda

这两本是LISP的英文书,尚无中文版。美国东北大学网站上也有电子版。

25. 《交互设计之路英文名:《The Inmates Are Running The Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity》该书作者:Alan Cooper,人称Visual Basic之父,交互设计之父。

本书是基于众多商务案例,讲述如何创建更好的、高客户忠诚度的软件产品和基于软件的高科技产品的书。本书列举了很多真实可信的实际例子,说明目前在软件产品和基于软件的高科技产品中,普遍存在着“难用”的问题。作者认为,“难用”问题是由这些产品中存在着的高度“认知摩擦”引起的,而产生这个问题的根源在于现今软件开发过程中欠缺了一个为用户利益着想的前期“交互设计”阶段。“难用”的产品不仅损害了用户的利益,最终也将导致企业的失败。本书通过一些生动的实例,让人信服地讲述了由作者倡导的“目标导向”交互设计方法在解决“难用”问题方面的有效性,证实了只有改变现有观念,才能有效地在开发过程中引入交互设计,将产品的设计引向成功。

本书虽然是一本面向商务人员而编写的书,但也适合于所有参与软件产品和基于软件的高科技产品开发的专业人士,以及关心软件行业和高科技行业现状与发展的人士阅读。

他还有另一本中文版著作:《About Face 3 交互设计精髓

26. 《Why’s (Poignant) Guide to Ruby 》

如果你不是程序员,阅读此书可能会很有趣,但如果你已经是个程序员,可能会有点乏味。

27. Unix编程艺术

It is useful regardless operating system you use. – J.F. Sebastian
不管你使用什么操作系统,这本书都很有用。 – J.F. Sebastian

28. 《Practices of an Agile Developer / 高效程序员的45个习惯:敏捷开发修炼之道

45个习惯,分为7个方面:工作态度、学习、软件交付、反馈、编码、调试和协作。

每一个具体的习惯里,一开始提出一个谬论,然后展开分析,之后有正队性地提出正确的做法,并设身处地地讲出了正确做法给你个人的“切身感受”,最后列出几条注意事项,帮助你修正自己的做法(“平衡的艺术”)。

29. 《Test-Driven Development by Example. / 测试驱动开发

前面已经提到的很多书都启发了我,并影响了我,但这本书每位程序员都应该读。它向我展示了单元测试和TDD的重要性,并让我很快上手。 – Curro

我不关心你的代码有多好或优雅。如果你没有测试,你或许就如同没有编写代码。这本书得到的推荐数应该更高些。人们讨论编写用户喜欢的软件,或既设计出色并健壮的高效代码,但如果你的软件有一堆bug,谈论那些东西毫无意义。– Adam Gent

30. 《Don’t Make Me Think / 点石成金:访客至上的网页设计秘笈

取决于你所追求的目标。我喜欢《代码大全》是因纯编程,《点石成金》是一本有关UI设计的卓越书籍。 – Justin Standard

后语

除这个书单之外,曾经也有微博网友推荐《一些经典的计算机书籍》,大约在50本。

编译:伯乐在线 – 黄利民

sql server中的自增问题

sql server 2005 如何设置int型数据自增,又如何插入一条记录?

SQL Server 通过IDENTITY 来设置

参数有2个,一个是“初始值”一个是“增量”。

 

1> CREATE TABLE test_create_tab2 (

2>   id   INT  IDENTITY(1, 1)  PRIMARY KEY,

3>   val  VARCHAR(10)

4> );

5> go

 

1> INSERT INTO test_create_tab2(val) VALUES (‘NO id’);

2> go

 

默认情况下INSERT语句中,不能对IDENTITY 的字段进行赋值。

 

1> INSERT INTO test_create_tab2(id, val) VALUES (6, ‘id no use’);

2> go

消息544,级别16,状态1,服务器HOME-BED592453CSQLEXPRESS,第1行

当IDENTITY_INSERT设置为OFF时,不能为表’test_create_tab2’中的标识列插入显式值。

 

 

1> INSERT INTO test_create_tab2(val) VALUES (‘A’);

2> INSERT INTO test_create_tab2(val) VALUES (‘B’);

3> INSERT INTO test_create_tab2(val) VALUES (‘C’);

4> INSERT INTO test_create_tab2(val) VALUES (‘D’);

5> go

 

1> SELECT * FROM test_create_tab2;

2> go

id          val

———– ———-

1 NO id

2 A

3 B

4 C

5 D

 

(5行受影响)

 

 

当IDENTITY列中间的数据被删除,造成数据不连续的时候。

可以通过SET IDENTITY_INSERT 表名ON/OFF语句来允许/禁止对IDENTITY列进行显式的插入动作。

 

–删除一个数据,造成数据不连续.

1> DELETE FROM test_create_tab2 WHERE id = 3;

2> go

 

(1行受影响)

 

–允许将显式值插入表的标识列中

1> SET IDENTITY_INSERT test_create_tab2 ON

2> go

1> INSERT INTO test_create_tab2(id, val) VALUES (3, ‘id is use’);

2> go

 

(1行受影响)

 

–不允许将显式值插入表的标识列中

1>  SET IDENTITY_INSERT test_create_tab2 OFF

2> go

1> SELECT * FROM test_create_tab2;

2> go

id          val

———– ———-

1 NO id

2 A

3 id is use

4 C

5 D

 

(5 行受影响)

 

 

IDENTITY的重置

方案一:通过truncate table 处理

[此命令将删除表中所有的数据,使用前你需要确认你是否要做这个操作. 如果不希望修改表数据的,请采用方案二]

1> truncate table  test_create_tab2;

2> go

1> INSERT INTO test_create_tab2(val) VALUES (‘NO id’);

2> go

 

(1行受影响)

1> select * from test_create_tab2;

2> go

id          val

———– ———-

1 NO id

 

(1行受影响)

 

方案二:使用DBCC

1> select * from test_create_tab2;

2> go

id          val

———– ———-

2 NO id

 

(1行受影响)

1> delete from test_create_tab2;

2> go

 

(1行受影响)

 

查看当前ID。

1> DBCC CHECKIDENT(‘test_create_tab2’, NORESEED)

2> go

检查标识信息:当前标识值’2’,当前列值’2’。

DBCC执行完毕。如果DBCC输出了错误信息,请与系统管理员联系。

 

重置ID

1> DBCC CHECKIDENT(‘test_create_tab2’, RESEED, 100)

2> go

检查标识信息:当前标识值’2’,当前列值’100’。

DBCC执行完毕。如果DBCC输出了错误信息,请与系统管理员联系。

1> INSERT INTO test_create_tab2(val) VALUES (‘NO id’);

2> go

 

(1行受影响)

1> select * from test_create_tab2;

2> go

id          val

———– ———-

101 NO id

 

(1行受影响)

 

 

 

 

IDENTITY只能在如下情况下建立:

在创建表时创建新的IDENTITY列

在现有表中创建新的IDENTITY列

不能 把已经存在的列,修改为IDENTITY列

—————————————–华丽分割线————————————————————-

今天sql server的存储过程帮了我大忙啊,或许会因为今天让我慢慢喜欢上存储过程吧。

在使用数据库的时候,难免要在使用过程中进行删除的操作,如果是使用int类型的字段,令其自增长,这是个最简单的办法,但是后果会有些不是你想要的!看下这个Demo:
1.建立这样的简单的表Test.

2.设置字段id的自增.

3.表添加数据
insert into Test(name) values(‘TestName’)
insert into Test(name) values(‘TestName’)
insert into Test(name) values(‘TestName’)
4.你会看到

5.在这里我们删除id为2的行.就只剩下了id为1和id为3的两行数据了.(不上图了)
6.再添加一条数据.
insert into Test(name) values(‘TestName’)
我们会发现这或许不是我们想要的结果了

为什么没有id为2的呢?之后任你死命的加,也不会有id为2的数据行了!
这样的设计固然方便,但是魔鬼在于细节,这篇博客就是为了解决这个问题让我们重新见到id为2的数据行(这里顺便改进一下,让结果不只是显示id为2这样的int,假如有一天我们的各户要求我们他们要一个5位数的id号吗,从00000开始,OK,这没问题)
1.主角登场,存储过程终于派上了用场了

Create procedure [dbo].[insertName](@name nvarchar(50)) 
as
begin
     declare @i int
     set @i=1 
     while(@i<10000) 
     begin
       if exists(select convert(int,id) from numbertest where convert(int,id)=@i) 
       begin
       set @i=@i+1 
       continue
       end
       else
       begin
       insert numbertest values(right('0000'+convert(varchar(5),@i),5),@name)
       --这里的两个数字'5' 就是我们要设置的id长度
        break
     end
   end
end

2.用SQL 语句调用这个存储过程
execute insertName Test
你可以狂按几次,几十次,几百次,我们要的数据加进去了,

我们可以删除指定的id数据行,当我们再次进行添加的时候,之前被删掉的id行,将会被我们新添加的数据所覆盖,这样id就都可以连接起来了.
哦,对了,还没有说如何显示的是 ‘0’ 开头的呢?这个简单,将id的数据类型设置为nvarchar(5),就是这么简单!呵呵!
总结:
这里我们调用了存储过程,存储过程不宜多用,但是有的时候还真是用起来很方便,本文章对于刚刚工作的童鞋们应该还是有点帮助的吧,好好学习吧,生活很美好!
如释重负的感觉啊,终于搞定一个问题。
其实还有一个方法也可以解决:就是先将ID字段删除,再重新建一个。

虽然作者为我们解决了一个大麻烦,在此对作者表示感谢。
但是还是对作者有点看法:数据库是用来存储数据的地方,至于ID字段是否要按顺序的自动增量字段,没有人在乎这个,也没有人去看这个,只要前台能够完成想要的功能就行了,没有必要花这么多时间去解决这个方法,大家觉得有这个必要吗?

 

来源 aspbc.com

PowerDesigner中的数据类型对照表

The following numeric data types are available:

Standard data type

DBMS-specific physical data type
Content
Length

Integer int / INTEGER 32-bit integer
Short Integer smallint / SMALLINT 16-bit integer
Long Integer int / INTEGER 32-bit integer
Byte tinyint / SMALLINT 256 values
Number numeric / NUMBER Numbers with a fixed decimal point Fixed
Decimal decimal / NUMBER Numbers with a fixed decimal point Fixed
Float float / FLOAT 32-bit floating point numbers Fixed
Short Float real / FLOAT Less than 32-bit point decimal number
Long Float double precision / BINARY DOUBLE 64-bit floating point numbers
Money money / NUMBER Numbers with a fixed decimal point Fixed
Serial numeric / NUMBER Automatically incremented numbers Fixed
Boolean bit / SMALLINT Two opposing values (true/false; yes/no; 1/0)

 

Character data types :

 

Standard data type
DBMS-specific physical data type
Content
Length

Characters char / CHAR Character strings Fixed
Variable Characters varchar / VARCHAR2 Character strings Maximum
Long Characters varchar / CLOB Character strings Maximum
Long Var Characters text / CLOB Character strings Maximum
Text text / CLOB Character strings Maximum
Multibyte nchar / NCHAR Multibyte character strings Fixed
Variable Multibyte nvarchar / NVARCHAR2 Multibyte character strings Maximum

 

Time data types:

 

Standard data type
DBMS-specific physical data type
Content
Length

Date date / DATE Day, month, year
Time time / DATE Hour, minute, and second
Date & Time datetime / DATE Date and time
Timestamp timestamp / TIMESTAMP System date and time

 

Other data types :

 

Standard data type
DBMS-specific physical data type
Content
Length

Binary binary / RAW Binary strings Maximum
Long Binary image / BLOB Binary strings Maximum
Bitmap image / BLOB Images in bitmap format (BMP) Maximum
Image image / BLOB Images Maximum
OLE image / BLOB OLE links Maximum
Other User-defined data type
Undefined undefined Undefined. Replaced by the default data type at generation.

C++ vector容器类型

vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分 ,为了使用vector 我们必须包含相关的头文件  :

#include <vector>

使用vector有两种不同的形式,即所谓的数组习惯STL习惯

一、数组习惯用法

1. 定义一个已知长度的 vector :

vector< int > ivec( 10 );  //类似数组定义int ia[ 10 ];

可以通过ivec[索引号] 来访问元素

使用 if ( ivec.empty() ) 判断是否是空,ivec.size()判断元素个数。

 

2. vector的元素被初始化为与其类型相关的缺省值:算术和指针类型的缺省值是 0,对于class 类型,缺省值可通过调用这类的缺省构造函数获得,我们还可以为每个元素提供一个显式的初始值来完成初始化,例如
vector< int > ivec( 10, -1 );
定义了 ivec 它包含十个int型的元素 每个元素都被初始化为-1 

对于内置数组 我们可以显式地把数组的元素初始化为一组常量值,例如 :
int ia[ 6 ] = { -2, -1, 0, 1, 2, 1024 };

我们不能用同样的方法显式地初始化 vector ,但是可以将 vector 初始化为一个已有数组的全部或一部分,只需指定希望被用来初始化 vector 的数组的开始地址以及数组最末元的下一位置来实现,例如:
// 把 ia 的 6 个元素拷贝到 ivec 中
vector< int > ivec( ia, ia+6 );


被传递给ivec 的两个指针标记了用来初始化对象的值的范围,第二个指针总是指向要拷贝的末元素的下一位置,标记出来的元素范围也可以是数组的一个子集,例如 :

// 拷贝 3 个元素 ia[2], ia[3], ia[4]
vector< int > ivec( &ia[ 2 ], &ia[ 5 ] );


3. 与内置数组不同 vector 可以被另一个 vector 初始化 或被赋给另一个 vector 例如
vector< string > svec;
void init_and_assign()
{
// 用另一个 vector 初始化一个 vector
vector< string > user_names( svec );
// …

// 把一个 vector 拷贝给另一个 vector
svec = user_names;
}

 

二、STL习惯用法

在 STL9中对vector 的习惯用法完全不同。我们不是定义一个已知大小的 vector,而是定义一个空 vector
vector< string > text;


1. 我们向 vector 中插入元素,而不再是索引元素,以及向元素赋值,例如 push_back()操作,就是在 vector 的后面插入一个元素下面的 while 循环从标准输入读入一个字符串序列并每次将一个字符串插入到 vector 中
string word;
while ( cin >> word ) {
text.push_back( word );
// …
}

虽然我们仍可以用下标操作符来迭代访问元素
cout << “words read are: n”;

for ( int ix = 0; ix < text.size(); ++ix )
cout << text[ ix ] << ‘ ‘;

cout << endl;
但是 更典型的做法是使用 vector 操作集中的begin()和 end()所返回的迭代器 iterator
对 :
cout << “words read are: n”;

for ( vector<string>::iterator it = text.begin();
it != text.end(); ++it )
cout << *it << ‘ ‘;

cout << endl
iterator 是标准库中的类,它具有指针的功能 


*it;
对迭代器解引用,并访问其指向的实际对象
++it;

向前移动迭代器 it 使其指向下一个元素

2. 注意 不要混用这两种习惯用法, 例如,下面的定义
vector< int > ivec;
定义了一个空vector 再写这样的语句
ivec[ 0 ] = 1024;
就是错误的 ,因为 ivec 还没有第一个元素,我们只能索引 vector 中已经存在的元素 size()操作返回 vector 包含的元素的个数 。

3. 类似地 当我们用一个给定的大小定义一个 vector 时,例如  :
vector<int> ia( 10 );
任何一个插入操作都将增加vector 的大小,而不是覆盖掉某个现有的元素,这看起来好像是很显然的,但是 下面的错误在初学者中并不少见 :
const int size = 7;
int ia[ size ] = { 0, 1, 1, 2, 3, 5, 8 };
vector< int > ivec( size );

for ( int ix = 0; ix < size; ++ix )
ivec.push_back( ia[ ix ]);
程序结束时ivec 包含 14 个元素, ia 的元素从第八个元素开始插入。

10个步骤让你成为高效的Web开发者

 

要成为高产、高效的 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. 收集和整理免费设计资源

在网络上有许多网站放出免费设计资源。你可以将这些网站添加到你的 RSS 阅读器,它们每发布一个免费软件或资源,你就可能了解到。

对于一个设计师来说,这样可以得到大量的图标、PSD 模板、矢量插图、风景图像、按钮、GUI 元素、Photoshop 笔刷、字体库和各种其他的设计元素。

5. 冲刺式工作(短时间高效工作)

不要连续工作几个小时,这样你的效率可能会下降,随着时间的推移,你的工作品质也会下降。每次连续工作 10~20 分钟,可以保持你大脑活跃,可以更好地产生新的想法。

在短时间的工作,意味着你总是有一个新鲜的开始。

6. 休息

冲刺工作最重要的部分是休息。让你的头脑休息至关重要。利用这些休息时间将自己的工作区分开,干些其他工作或运动一下。

另外,除非有必要,否则不要计划你的时间。你不必每次都工作 15 分钟,然后休息 5 分钟。要选一个好的休息点,有一个舒适的休息。

你可以参考番茄工作法。

  7. 在学习上投入时间

短期内,不断学习、跟上行业形势并保持领先是很费时间的。

然而,通过在自我提高上投入时间,你可以在工作的其他方面节省时间,可以增加你的劳动成果并提高工作质量。

8. 不要过度规划

你不应该严格规划你的每一天。你的头脑需要有一定的灵活性,需要有时间去认真思考。

请一定要保持你的时间表灵活变化。我发现,超过规划的工作,我可能会一拖再拖。

9. 不要急于直接开始

这和过度规划是两个极端。虽然你不应该过度规划,但你需要计划下。

每当你开始一个项目的工作,确保知道你对这个项目的期望。做网页设计项目时,需要了解客户期望做的、首页内容、颜色设置等工作。

了解有关项目的某些内容,可能会使你工作在正确的方向,而不至于在黑暗中摸索。

在我开始客户的网站项目工作时,我需要先确定:

  • 颜色方案
  • 网站的目标
  • 他们能够提供的任何内容
  • 他们已经拥有的任何设计思路

10. 不要使事情复杂化

这可能是所有这些最重要的一条:不要使你的工作复杂化。不要做更多的工作,不要在给定的时间内为自己分配过多的工作。

我不主张给你的客户提供最少的交付时间,但你肯定也不能提供最长的时间。

要明白客户他们需要什么,不能多也不能少。

另外,不要制定过于复杂的开发战略。让事情简单一些。

来源:kuqin.com