程序员修炼之道-书评

--------------------------------------------------------------------------------------------------------

第一章     注重实效的哲学:

--------------------------------------------------------------------------------------------------------

1.我的源码让猫给吃了

启发:要为自己负责

提供各种选择,不要找蹩脚的接口

Provide Options,Don’t Make Lame Excuses

要提供各种选择,而不是找接口,不要说事情做不到:说明能够做什么

2.软件的熵

启发:不要容忍破窗户

Don’t Live with Broken Windows

当你看到糟糕的设计,错误的决策和糟糕的代码时,修正他们

3.石头汤与煮青蛙

启发:做变化的催化剂(战后士兵引事)

4.足够好的软件

启发:让用户参与权衡

5.你的知识资产

启发:投资、发展多元化、管理风险,低买高卖,重新评估和权衡

6.交流

启发:说什么?了解听众、注意时机、有风格、让用户参与互动

--------------------------------------------------------------------------------------------------------

第二章     注重实效的途径:

--------------------------------------------------------------------------------------------------------

7.重复的危害

启发:DRY 不要重复你自己

DRY - Don’t Repeat Yourself

系统中的每一项知识都必须其有单一,无歧义,权威的表示

8.正交性

启发:坐标轴,类似X与Y轴,互不影响,解耦合

9.可撤销性

启发:不存在最终决策

There Are No final Decisions

没有决策时浇铸在石头上的 相反,要把每项决策都视为是写在沙滩上的,并为变化做好计划

10.曳光弹

启发:用于寻找目标,不是很懂

11.原型与标签

启发:注重整体、隐藏细节

12.领域语言

启发:易于开发

13.估算

启发:深思熟虑地编程,完成后总结

--------------------------------------------------------------------------------------------------------

第三章     基本工具:

--------------------------------------------------------------------------------------------------------

14.纯文本的威力

启发:经久不衰,不过时,易测试

15.Shell游戏

启发:操作简单粗暴、功能强大、高效

16.强力编辑

启发:熟练一种IDE

17.源码控制

启发:可恢复

18.调试

启发:要修正问题,而不是发出指责

Fix the Problem,Not the blame

bug是你的过错还是别人的过错,并不是真的很有关系-它仍然是你的问题,它仍然需要修正

19.文本操作

启发:学习一种文本操作语言。Notepad

20.代码生成器

启发:编写能编写代码的代码

Write Code That Writes Code

代码生成器能提高你的生产率,并有助于避免重复

--------------------------------------------------------------------------------------------------------

第四章     注重实效的偏执:

--------------------------------------------------------------------------------------------------------

21.按合约的设计

启发:使用断言校验你的代码,但是不要把断言作为一种异常处理方式

22.死程序不说谎

启发:早崩溃

Crash Early

死程序造成的危害通常比有问题的程序要小得多

23.断言式编程

启发:校验你的不可能,让断言开着

24.何时使用异常

启发:将异常用于异常的问题

Use Exception for Exceptional Problems

异常可能会遭受经典的意大利面条式代码的所有可读性和可维护性问题的折磨,将异常保留给异常的事物

25.怎么配平资源

启发:要有始有终

Finish What You start

只要可能,分配某资源的例程或对象也应该负责解除其分配

--------------------------------------------------------------------------------------------------------

第五章     弯曲或折断:

--------------------------------------------------------------------------------------------------------

26.解耦与得墨忒耳法则

启发:羞怯编码(不向别人暴露你自己,不与太多人打交道),使模块之间的耦合减至最少

Minimize Coupling Between Modules

通过编写“羞怯的”代码并应用得墨忒耳法则来避免耦合

27.元程序设计

启发:要配置,不要集成

Configure,Don’t integrate

要将应用的各种技术选择实现为配置选项,而不是通过集成或工程方法实现

28.时间耦合

启发:分析工作流,并改善并发性

Analyze Workflow to improve Concurrency

利用你的用户的工作流中的并发性

用服务进行设计

Design Using Services

根据服务-独立的、在良好定义、一致的接口之后的并发对象-进行设计

总是为并发进行设计

Always Design for Concurrency

容许并发,你将会设计出更整洁,具有更少假定的接口

29.它只是视图

启发:发布|订阅 模式,MVC  模型、视图、控制分离

30.黑板

启发:用黑板来组织框架图,就像侦探用黑板破案

--------------------------------------------------------------------------------------------------------

第六章     当你编码时:

--------------------------------------------------------------------------------------------------------

31.靠巧合编程

启发:不要靠谦和编程

Don’t program by coincidence

只依靠可靠的事物,注意偶发的复杂性,不要把幸运的巧合与有目的计划混为一谈

32.算法速率

启发:估算你的算法的阶

Estimate the Order of Your Algorithms

在你编写代码之前,先大致估算事情需要多长时间

测试你的估算

Test Your Estimates

对算法的数学分析并不会告诉你每一件事情,在你的代码的目标环境中测定他的速度

33.重构

启发:重复、非正交、过时、性能不好。早重构,常重构

Refactor Early , Refactor Often

就和你会在花园里除草,并重新布置一样,在需要时对代码进行重写,重做和重新架构,铲除问题的根源

34.易于测试的代码

启发:单元测试、为测试而设计

Design to Test

在你还没有编写代码时就开始思考测试问题

35.邪恶的向导

启发:不要使用你不理解的向导代码

Don’t use wizard code you don’t understand

向导可以生成大量代码,在你把他们合并进你的项目之前,确保你理解全部这些代码

--------------------------------------------------------------------------------------------------------

第七章     在项目开始之前:

--------------------------------------------------------------------------------------------------------

36.需求之坑

启发:不要搜集需求-挖掘它们

Don’t Gather Requirements - Dig for them

需求很少存在于表面上,他们深深地埋藏在层层假定,误解和政治手段的下面

与用户一同工作,以像用户一样思考

Work with a User to Think like a user

要了解系统实际上将如何被使用,这是最好的方法

抽象比细节活得更长久

Abstractions Live Longer than Details

“投资”于抽象,而不是实现。抽象能在来自不同的实现和新技术的变化的“攻击”之下存活下去

37.解开不可能解开的谜题

启发:一定有更容易的方法

38.等你准备好

启发:等你准备好再开始(倾听反复出现的疑虑)

Start When You’re Ready

你的一生都在积累经验,不要忽视反复出现的疑虑

39.规范陷阱

启发:对有些事情“做”胜于“描述”

Some things are better done than described

不要掉进规范的螺旋 - 在某个时刻,你需要开始编码

40.圆圈与箭头

启发:不要做形式方法的奴隶

Don’t be a slave to formal methods

如果你没有把某项技术放进你的开发实践和能力的语境中,不要盲目采用它

昂贵的工具不一定能制作出更好的设计

Costly tools don’t produce better designs

小心供应商的炒作、行业教条、以及价格标签的诱惑、要根据工具的价值判断它们

--------------------------------------------------------------------------------------------------------

第八章     重注实效的项目:

--------------------------------------------------------------------------------------------------------

41.注重实效的团队

启发:不要留破窗户、主动监视环境变化、不要重复、要正交

42.无处不在的自动化

启发:一切都要自动化,要自动,不要手动。

43.无情的测试

启发:早测试、常测试、自动测试

Test Early . Test Often . Test Automatically

与呆在书架上的测试计划相比,每次构建时运行的测试要有效得多

通过“蓄意破坏”测试你的测试

Use saboteurs to test your testing

在单独的软件副本上故意引入bug,以检验测试能够抓住他们

测试状态覆盖,而不是代码覆盖

Test state coverage,not code coverage

确定并测试重要程序状态,只是测试代码行是不够的

44.全都是写

启发:把英语又一种编程语言、文档与代码同样重要,放一块,不要把文档栓在外面

45.极大的期望

启发:温和地超出用户的期望

Gently exceed  your users’ Expectations

要理解你的用户期望,然后给他们的东西要多那么一点

46.傲慢与偏见

启发:在你的作品上签名

Sign Your work

过去时代的手艺人为能在他们的作品上签名面自豪、你也应该如此

--------------------------------------------------------------------------------------------------------

个人总结:

--------------------------------------------------------------------------------------------------------

1.不要死磕在技术上,有时候需要跳出来站在用户的角度思考,可以减少很多不必要的开发。

2.编程是一种技艺,一种需要用心学习的技艺

3.人生第一本从头看到结尾的书

4.81条圣经,需要常常回顾,慢慢吸收,让其融入灵魂。

5.圣经81条全是手工打上去的(打了3个小时左右,建议不要COPY,手动敲打),就是为了让自己影响深刻,铭记于心。

6.不要恐慌,再急也不要写烂代码。(十万火急:要写,请用钉子把这个地方钉住标记下来,之后立刻修复)

--------------------------------------------------------------------------------------------------------

编辑器推荐:Emacs、VI

学习新技术:Makefile、Shell、批处理文件

文档编辑推荐:Notepad、DocBook

书籍推荐:

1.Surving Object - Oriented Projects : A Manager’s Guide

2.Art of Computer Programming

3.Unix 编程艺术

4.面向对象开发的基本原理(Object-Oriented Software Construction,2nd Edition)

5.Design Patterns

6.Analysis Patterns

7.The Mythical Man Month

8.Dynamics of Software Development

9.More Effective C++ 35个改善编程与设计的方法(侯捷)

10.Effective C++ 改善程序与设计的55歌具体做法(侯捷)

11.代码整洁之道

12.重构:改善即有代码的设计

13.代码大全

--------------------------------------------------------------------------------------------------------

圣经条例:

--------------------------------------------------------------------------------------------------------

1.关心你的技艺

Care About Your Craft

如果你不在乎能否漂亮地开发出软件,你又为何要耗费生命去开发软件呢?

2.思考!你的工作

Think!About Your Work

关掉自动驾驶仪,接管操作,不断的批评和评估你的工作

3.提供各种选择,不要找蹩脚的接口

Provide Options,Don’t Make Lame Excuses

要提供各种选择,而不是找接口,不要说事情做不到:说明能够做什么

4.不要容忍破窗户

Don’t Live with Broken Windows

当你看到糟糕的设计,错误的决策和糟糕的代码时,修正他们

5.做变化的催化剂

Be a Catalyst for Change

你不能强迫人们改变 相反,要向他们展示未来的可能会怎样,并帮助他们参与对未来的创造

6.记住大图景

Remember the Big Picture

不要太过于专注细节,以致忘了查看你周围正在发生什么

7.使质量成为需求问题

Make Quality a Requirements Issue

让你的用户参与确定项目正真的质量需求

8.定期为你的知识资产投资

Invest Regularly in Your Knowledge Portfolio

让学习成为习惯

9.批判地分析你读到的和听到的

Critically Analyze What You Read and Hear

10.你说什么和你怎么说同样重要

It’s Both What You Say and the Way You Say it

如果你不能有效地向他人传达你的了不起的想法,这些想法都毫无用处

11.不要重复你自己

DRY - Don’t Repeat Yourself

系统中的每一项知识都必须其有单一,无歧义,权威的表示

12.让复用变得容易

Make It Easy to Reuse

如果复用很容易,人们就会去复用 。创找一个支持复用的环境

13.消除无关事物之间的影响

Eliminate Effects Between Unrelated Things

设计自足、独立、并具有单一、良好定义的目的的组件

14.不存在最终决策

There Are No final Decisions

没有决策时浇铸在石头上的 相反,要把每项决策都视为是写在沙滩上的,并为变化做好计划

15.用曳光弹找到目标

Use Tracer Bullets to Find the Target

曳光弹能通过试验各种事物并检查它们离目标有多远来让你追踪目标

16.为了学习而制作原型

Prototype to Learn

原型制作是一种学习经验,其价值并不在于所产生的代码,而在于所学到的经验教训

17.靠近问题领域编程

Program Close to the Problem domain

用你的用户的语言进行设计和编码

18.估算,以避免发生意外

Estimate  to Avoid Surprises

在着手之前先进行估算,你将提前发现潜在的问题

19.通过代码对进度表进行迭代

Iterate  the Schedule with the code

用你在进行实现时获取的经验提炼项目的时间标度

20.用纯文本保存知识

Keep Knowledge in Plain Text

纯文本不会过时,它能帮助你有效利用你的工作,并简化调试和测试

21.利用命令Shell的力量

Use the Power of Command Shells

当图形用户界面无能为力时使用shell

22.用好一种编辑器

Use a Single Editor Well

编辑器应该是你手的延伸;确保你的编辑器是可配置、可拓展和可编程的

23.总是使用源码控制

Always Use Source Code Control

源码控制是你的工作的时间机器-你能够回到过去

24.要修正问题,而不是发出指责

Fix the Problem,Not the blame

bug是你的过错还是别人的过错,并不是真的很有关系-它仍然是你的问题,它仍然需要修正

25.调试时不要恐慌

Don’t Panic When Debuging

做一次深呼吸,思考什么可能是bug的原因

26.“Select” 没有问题

“Select” Isn’t Broken

在OS 或编辑器,甚或是第三方产品或库中很少发现bug,bug很可能在应用中

27.不要假定,要证明

Don’t Assume it - Prove it

在实际环境中-使用真正的数据和边界-证明你的假定

28.学习一种文本操作语言

Learn a Text Manipulation Language

你用每天的很大一部分实际处理文本,为什么不让计算机帮你完成工作呢?

29.编写能编写代码的代码

Write Code That Writes Code

代码生成器能提高你的生产率,并有助于避免重复

30.你不可能写出完美的软件

You Can’t Write Perfect Software

软件不可能完美,保护你的代码和用户,使他们免于能够预见的错误

31.通过合约进行设计

Design with Contracts

使用合约建立文档,并校验代码所做的事情正好是它声明要做的

32.早崩溃

Crash Early

死程序造成的危害通常比有问题的程序要小得多

33.用断言避免不可能发生的事情

Use Assertions to Prevent the Impossible

断言验证你的各种假定,在一个不确定的时间里,用断言保护你的代码

34.将异常用于异常的问题

Use Exception for Exceptional Problems

异常可能会遭受经典的意大利面条式代码的所有可读性和可维护性问题的折磨,将异常保留给异常的事物

35.要有始有终

Finish What You start

只要可能,分配某资源的例程或对象也应该负责解除其分配

36.使模块之间的耦合减至最少

Minimize Coupling Between Modules

通过编写“羞怯的”代码并应用得墨忒耳法则来避免耦合

37.要配置,不要集成

Configure,Don’t integrate

要将应用的各种技术选择实现为配置选项,而不是通过集成或工程方法实现

38.将抽象放进代码,细节放进元数据

Put Abstractions in Code,Details in Metadata

为一般情况编程,将细节放进被编译的代码库之外

39.分析工作流,并改善并发性

Analyze Workflow to improve Concurrency

利用你的用户的工作流中的并发性

40.用服务进行设计

Design Using Services

根据服务-独立的、在良好定义、一致的接口之后的并发对象-进行设计

41.总是为并发进行设计

Always Design for Concurrency

容许并发,你将会设计出更整洁,具有更少假定的接口

42.使视图与模型分离

Separate View form Models

要根据模型和视图设计你的应用,从而以低廉的代码获取灵活性

43.用黑板协调工作流

Use Blackboards to Coordinate workflow

用黑板协调完全不同的事实和因素,同时又使各个参与方保持独立和隔离

44.不要靠谦和编程

Don’t program by coincidence

只依靠可靠的事物,注意偶发的复杂性,不要把幸运的巧合与有目的计划混为一谈

45.估算你的算法的阶

Estimate the Order of Your Algorithms

在你编写代码之前,先大致估算事情需要多长时间

46.测试你的估算

Test Your Estimates

对算法的数学分析并不会告诉你每一件事情,在你的代码的目标环境中测定他的速度

47.早重构,常重构

Refactor Early , Refactor Often

就和你会在花园里除草,并重新布置一样,在需要时对代码进行重写,重做和重新架构,铲除问题的根源

48.为测试而设计

Design to Test

在你还没有编写代码时就开始思考测试问题

49.测试你的软件,否则你的用户就得测试

Test Your software,or your users will

无情地测试,不要让你的用户为你查找bug

50.不要使用你不理解的向导代码

Don’t use wizard code you don’t understand

向导可以生成大量代码,在你把他们合并进你的项目之前,确保你理解全部这些代码

51.不要搜集需求-挖掘它们

Don’t Gather Requirements - Dig for them

需求很少存在于表面上,他们深深地埋藏在层层假定,误解和政治手段的下面

52.与用户一同工作,以像用户一样思考

Work with a User to Think like a user

要了解系统实际上将如何被使用,这是最好的方法

53.抽象比细节活得更长久

Abstractions Live Longer than Details

“投资”于抽象,而不是实现。抽象能在来自不同的实现和新技术的变化的“攻击”之下存活下去

54.使用项目词汇表

User a Project Glossary

创建并维护项目中使用的专业术语和词汇的单一信息源

55.不要在盒子外面思考-要找到盒子

Don’t think outside the box - find the box

在遇到不可能解决的问题时,需要真正的约束,问问你自己:“它必须以这种方式完成吗?它真的必须完成吗?”

56.等你准备好再开始

Start When You’re Ready

你的一生都在积累经验,不要忽视反复出现的疑虑

57.对有些事情“做”胜于“描述”

Some things are better done than described

不要掉进规范的螺旋 - 在某个时刻,你需要开始编码

58.不要做形式方法的奴隶

Don’t be a slave to formal methods

如果你没有把某项技术放进你的开发实践和能力的语境中,不要盲目采用它

59.昂贵的工具不一定能制作出更好的设计

Costly tools don’t produce better designs

小心供应商的炒作、行业教条、以及价格标签的诱惑、要根据工具的价值判断它们

60.围绕功能组织团队

Organic Teams around functionality

不要把设计师与编码员分开,也不要把测试员与数据建模员分开,按照你的构建代码的方式构建团队

61.不要使用手工流程

Don’t use manual procedures

shell 脚本或批处理文件会一次次地以同一顺序执行相同的指令

62.早测试、常测试、自动测试

Test Early . Test Often . Test Automatically

与呆在书架上的测试计划相比,每次构建时运行的测试要有效得多

63.要到通过全部测试,编码才算完成

Coding ain’t done ’Til All the Tests Run

就是这样

64.通过“蓄意破坏”测试你的测试

Use saboteurs to test your testing

在单独的软件副本上故意引入bug,以检验测试能够抓住他们

65.测试状态覆盖,而不是代码覆盖

Test state coverage,not code coverage

确定并测试重要程序状态,只是测试代码行是不够的

65.一个bug只抓一次

Find bugs once

一日测试员找到一个bug,这应该是测试员最后一次找到它,此后自动测试代码应该对其进行检查

66.英语就是一种编程语言

English is just a programming language

像你编写代码一样编写文档,遵守DRY原则,使用元数据、MVC、自动生成等等

67把文档建在里面,不要权在外面

Build Documentation in , Don’t bolt it on

与代码分离的文档不太可能被修正和更新

68.温和地超出用户的期望

Gently exceed  your users’ Expectations

要理解你的用户期望,然后给他们的东西要多那么一点

70.在你的作品上签名

Sign Your work

过去时代的手艺人为能在他们的作品上签名面自豪、你也应该如此

检测清单

--------------------------------------------------------------------------------------------------------

71.要学习的语言

厌倦了C、C++和Java?试试CLOS、Dylan、Eiffel、Object C、Prolog、Smalltalk或TOM。它们每一种都有不同的能力和不同的“风味”。用其中的一种或多种语言在家里开发一个小项目

72.WINSDOM离合诗

What do you want them to learn ?  你想让他们学到什么?

What is their interest in what you’ve got to say ? 他们对你讲的什么感兴趣?

How sophisticated are they ? 他们有富有经验?

How mush detail do they want ? 他们想要多少细节?

How can you motivate to listen to you ? 你如何促使他们听你说话?

73.怎么维持正交性

1.设计独立、良好定义的组件

2.使你的代码保持解耦

3.避免使用全局数据

4.重构相似的函数

74.应制作原型的事物

1.架构

2.已有系统中的新功能

3.外部数据的结构或内容

4.第三方工具或组件

5.用户界面设计

75.架构问题

1.责任是否得到了良好定义?

2.协作是否得到了良好定义?

3.耦合是否得到最小化?

4.你能否确定潜在的重复?

5.接口定义和各项约束是否可接受?

6.模块能否在需要时访问所需数据?

76.调试检测清单

1.正在报告的问题是低层bug的直接结果,还是只是症状?

2.bug真的在编译器里?在OS里?或者在你的代码里?

3.如果你向同事详细解释这个问题,你会说什么?

4.如果可疑代码通过了单元测试、测试是否足够完整?如果你用该数据运行单元测试,会发生什么?

5.造成这个bug的条件是否存在于系统中的其他任何地方?

77.函数的得墨忒耳法则

某个对象的方法应该只调用属于以下的情形的方法:

1.它自身

2.传入的任何参数

3.它创建的对象

4.组件对象

78.怎么深思熟虑地编程

1.总是意识到你在做什么

2.不要盲目地编程

3.按照计划行事

4.依靠可靠的事物

5.为你的假定建议文档

6.不要只是测试你的代码,还要测试你的假定

7.为你的工作划分优先级

8.不要做历史的奴隶

79.何时进行重构

1.你发现了对DRY原则的违反

2.你发现事物可以更为正交

3.你的知识拓展了

4.需求演变了

5.你需求改善性能

80.劈开戈尔迪斯结

在解决不可能解决的问题时,问问你自己:

1.有更容易的方法吗?

2.我是在解决正确的问题吗?

3.这件事情为什么是一个问题?

4.是什么使它如此难以解决?

5.它必须以这种方式完成吗?

6.它真的必须完成吗?

81.测试的各个方面

1.单元测试

2.集成测试

3.验证和校验

4.资源耗尽、错误及恢复

5.性能测试

6.可用性测试

7.对测试自身进行测试

时间: 2024-10-03 13:45:45

程序员修炼之道-书评的相关文章

读书笔记-程序员修炼之道-序

前言 我们应该成为什么样的程序员 注重实效的程序员具备的特征 注重实效的个体大型的团队 它是一个持续的过程 前言 程序员修炼之道这本书已经通读了一遍,获益良多,但还是不甚理解,所以在重读一遍,顺便做一下笔记.由于自己水平有限,只能摘抄一下重要的词句了. 我们应该成为什么样的程序员 我们的知识背景源自于对计算机科学基本原理的理解,而我们的经验来自广泛的实践项目.理论与实践相结合使我们强大起来. 我们不应该局限于任何特定的方案,而是应该拥有足够广博知识背景和经验基础,这能够让我们在特定的情况下选择更

《程序员修炼之道》笔记(一)

这几天开始看<程序员修炼之道>,也许不少人看了书的标题,第一时间会觉得这是鸡汤一类的书.但至少以我自己的感受来看,这是很棒的书,现代人文主义不是提倡自我意识嘛,自己感觉好的就是好的.况且人家也是经过了时间和口碑的双重考验的,真心值得好好阅读. 作者在再版的序中写道: 写完<程序员修炼之道>至今已有十年.在这十年中,软件产业发生了翻天覆地的变化.--从表面上看,软件世界似乎陷入了疯狂的状态.但如果你深入繁杂表象的背后,会发现变化其实并不大.1999年的那些通用开发原则,在2009年同

《程序员修炼之道--从小工到专家》阅读笔记02

<程序员修炼之道--从小工到专家>在第三章中为我们提到纯文本的好好处,书中给我们提醒到,通过纯文本(XML.SGML以及HTML都是纯文本的好例子)我们可以让事情变得更容易.文本对于我们来说有三大好处:保证不过是.杠杆作用.更易于测试.对于程序员,不仅要善于使用纯文本,还必须掌握shell命令行,即使在Windows下我们也要精准掌握.Shell对于我们来说就是我们的工作台,在shell命令下我们可以操作调用我们想要的东西.可以说shell功能是非常强大的,所以对于我们程序员来说掌握它是对我们

读书笔记2014第4本:程序员修炼之道-从小工到专家(第七、八章)

第七章 在项目开始之前 36 需求之坑不为收集需求,挖掘它们.有一种能深入了解用户需求,却未得到足够利用的技术:成为用户.与用户一同工作,以像用户一样思考.描述需求文档时,要使用项目术语表.用WEB来收集和管理需求. 37 解开不可能解开的谜题遇到不可能解决的问题时,退一步问问自己如下问题:1)有更容易的方法吗?2)你是在设法解决真正的问题,还是被外围的技术问题转移了注意力?3)这件事情为什么是一个问题?4)是什么使它如此难以解决?5)它必须以这种方式完成吗?6)它真的必须完成吗? 38 等你准

Java程序员修炼之道之预告片

从去年(2013)大概9月份开始,到上个月结束,我在深圳招聘一个Java程序员,要求会写Java的,英文能沟通的.我的要求很简单: 一个只实现了功能的函数,重构一下,让其可支持后期扩展,用多态的方式和注册表法(<代码大全2>里面提到了)重构就可以了 对该函数写单元测试,知道怎么写,知道使用Mock工具(Mockito. Jmock. EasyMock随便哪种都行),能正确的对测试方法进行组织 就是这么简单的要求,公司的HR MM陆陆续续给我找了几十个候选人,在北京的.在上海的.在印度的.在珠三

程序员修炼之道_从小工到专家_读书分享

最近央视给我们连续分享了<大国工匠>,很是羡慕,嫉妒,恨.要知道我们程序员也是一名工匠,哈哈.最近用两天多的时间读了一本和工匠有关的书籍<程序员修炼之道-从小工到专家>这本书,现在分享给大家,因本人能力有限,拙劣之处请包涵. 从这本书的名字说起,这本书现在的名字体现不出来书中的主题内容,书的原名为<The Pragmatic Programmer>翻译为<注重实效的程序员>,看到这个题目想必大家对书的主题有个大概印象.这本书在编码问题,软件架构和设计,项目管

阅读《程序员修炼之道-从小工到专家》阅读笔记02

这两周我们小组进入了冲刺阶段的实训,这周我读了<程序员修炼之道>第三章的内容. 靠巧合编程 怎样靠巧合编程 一开始就不知道它为什么能工作.实现的偶然: 因为代码现在的编写方式才得以发生的事情.最后会依靠没有记入文档的错误或是边界条件.它也许不是真的能工作--它也许只是看起来能工作.你依靠的边界条件也许只是一个偶然. 没有记入文档的行为可能会随着库的下一次发布而变化.多余的和不必要的调用会使你的代码变慢.多余的调用还会增加引入它们自己的新bug的风险. 结论? 对于你编写给别人调用的代码,良好的

Java程序员修炼之道 之 Logging(1/3) - Logback 配置

写在前面的话: 作为<Java程序员修炼之道>博文的第一个主题Logging,我计划中按照如下三篇来写: Logback的简单介绍和配置 在Java代码中如何使用SLF4J来写日志以及写日志的要点 作为一个程序员,在日常工作中如何分析和挖掘Log. PS:默认生成的目录不对,仔细检查过了,我的h1,h2,h3,h4用的都没错. 1. 缘起 写代码中的日志是一个除了用代码实现功能之外最基础最基础的一个技能了,是一个必须掌握的技能.但是目前为止,关于如何日志的文章和书籍还是不多. 1.1 写日志的

程序员修炼之道阅读笔记之二

在<程序员修炼之道>一书中,Dave和Andy将告诉我们怎样以一种我们能够遵循的方式编程.他们何以能这样聪明?他们不也是和其他程序员一样,专注于各种细节而已吗?答案是他们在做某件事情时,会把注意力投注在他们在做的事情上——然后他们会试着把它做得更好. 设想你在参加一个会议.或许你在想,这个会议没完没了,你还不如去写程序.而Dave和Andy会想,他们为什么在开会,他们想知道是否可以通过另外的方式取代会议,并决定是否可使某样事情自动化,以使开会的工作推后.然后他们就会这样去做. 这就是Dave和