Skip to content

Commit 4cc833e

Browse files
committed
newone
1 parent d42404c commit 4cc833e

6 files changed

Lines changed: 491 additions & 0 deletions

File tree

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
序言和引言部分就不多说,总之是溢美之词多一些。当然引言部分说了一下bob大叔的个人经历是如何从吊死转型的。
2+
3+
第一章 专业主义
4+
5+
清楚你要什么
6+
7+
“专业主义”不但象征着荣誉与骄傲,而且明确意味着责任与义务。专业主义就意味担当责任。{当然在后面的章节里 责任和担当是经常被强调的,其实无论对于那个行业来说能够担当责任都是一种非常重要的品质。这让我回顾最近两三周的自己,好像沾染了很多不良恶习 ……}
8+
9+
担当责任
10+
11+
“我因为不负责任尝尽了苦头,所以明白尽职尽责的重要意义”--这段是回顾bob刚出道时的一些事情所说的,就在引言部分里。{我个人来说感觉有些幸运,至少看到了这本书,不过也正如本章开头所说的 我想成为一名专业的软件工程师。}这部分讲述了一个 因为没有经过测试就上线的结果惨遭报应的案例。未对程序进行测试是不负责任的。
12+
13+
{想来我的代码也是未经测试的,只是让他跑了跑没问题然后叫告诉老大说,可以了,呃 ,所以一个新的计划就是要在假期期间看看测试是怎么一回事。}
14+
15+
首先,不行损害之事
16+
17+
不破坏软件的功能与架构。
18+
19+
不要破坏软件功能
20+
21+
不要留bug。没人能写出完美的软件,但这并不代表你不对不完美负责。所谓专业人士,就是能对自己犯下的错误责任的人,哪怕那些错误实际上在所难免。所以要练习的第一件事就是“道歉“ 。道歉势必要的但是不能一而再而三的犯同样的错误。职业经验多了之后,你的失误率应该快速减少,甚至渐进于零。失误率永远不可能等于零,但你有责任让他无限接近零。
22+
23+
让QA找不出任何问题
24+
25+
{QA(QUALITY ASSURANCE)中文意思是“品质保证”,这还是处在iso中的内容,索然我上学时考取过iso9000的证书但是这个还真忘记了。哎 真是 ……}
26+
27+
QA会发现bug,所以准备好道歉吧,然后反思那些bug是怎样跳过你的注意,想办防止它再次出现。
28+
29+
要确信代码正常运行
30+
31+
你怎知道代码能不能运行呢?很简单测试,一遍一遍的测试翻来覆去的测试。你写的每一行代码都要测试! 这是要求!
32+
33+
怎么可能,那么最好的办法就是先写测试,就是测试驱动开发。TDD
34+
35+
自动化QA
36+
37+
执行单元测试和验收测试。
38+
39+
不要破坏结构
40+
41+
成熟的专业开发人员知道,聪明人不会为了发布新功能而破坏结构。结构良好的代码更灵活。以牺牲结构为代价,得不偿失,将来必追悔莫及。
42+
43+
所有软件项目的根本指导原则是,软件要易于修改。如果你希望自己的软件灵活可变,那就应该市场修改它。
44+
45+
该在什么时候做些小的修改呢?随时! 所谓的”无情重构“ ”童子军守则“ 对每个模块,每检入一次代码,就要让他比原来更为简洁。每次读代码,别忘了进行点滴的改善。专业开发人员对待代码,就如同雕塑家对待泥巴一样,要多他进行不断的变形与塑造。
46+
47+
职业道德
48+
49+
雇主除了钱,你必须付出时间和精力。就用每周工作40小时来说,这40小时应该用来解决雇主的问题,而不是你自己的问题。你应该计划每周工作60小时,前40小时是给雇主的,后20小时是给自己的。在这剩余的20小时里,你应该看书,练习,学习,或者做能够提升职业能力的事情。每周二外增加20小时,也就是每天3小时。如果你在午饭时间看书,在通勤路上听听播客,花90分钟学一门新的语言,那么你就能兼顾到了。
50+
51+
一周168小时,你个雇主40小时,为自己的职业发展留20小时,剩下的108小时再留给睡眠,那么还剩52小时可做其他的事情。
52+
53+
或许你不愿意那么勤勉。没问题,只是那样的话你也不能自视为专业人了。
54+
55+
了解你的领域
56+
57+
设计模式,GOF书中的全部24种模式,POSA书中的多数模式
58+
59+
设计原则,必须了解SOLID原则
60+
61+
方法 理解XP,Scrum,精益,看板,瀑布,结构化及结构化设计等
62+
63+
实践 掌握测试驱动开发,面向对象设计,结构化编程,持续继承和结对编程
64+
65+
工件 必须了解如何使用uml,DFD 结构图,Petir网络图,状态迁移图表,流程图和决策表
66+
67+
坚持学习
68+
69+
.net 去学学java ,java学学ruby ,c学学lisp 想练练脑子学学Prolog和Forth吧
70+
71+
{PHP呢?学什么?我假期准备学习python}
72+
73+
练习
74+
75+
业精于勤。真正的专业人士往往勤学苦干,以求得自身技能的纯属精炼。
76+
77+
合作
78+
79+
辅导
80+
81+
教学相长
82+
83+
了解业务领域
84+
85+
与雇主/客户保持一致
86+
87+
谦逊
88+
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
这是本书的第五章
2+
3+
测试驱动开发 TDD,先写测试的编程。
4+
5+
Bob举得例子说 kent能在每30秒左右运行一次程序。
6+
7+
(这有点象更开始学习PHP编程一样,没写一行代码都要让浏览器去执行一次看一下效果,这样确实能够减少非常多的错误,但是现在我的工作中似乎是经常要写完整段的内容才开始简单测试,还不是单元测试,因为我还不会呢。不过我确实是在抱着一份这样的心理:这次一会成功的。呵呵,这是不专业的。还有就是,我现在可以感觉到写完的代码好像会出错,这是个好现象?
8+
9+
对于PHP 这语言如何实行TDD我真的不清楚,我了解一点java,执行程序要先进行编译,在安装linux系统时也知道编译安装程序的痛苦。可以比较容易的理解先做好测试的好处。
10+
11+
但是对于PHP 感觉好像,手动的简单测试就能够完成很多内容了。
12+
13+
)
14+
15+
此事早有定论
16+
17+
GOTO是有害的。TDD确实可行。
18+
19+
TDD的三项法则
20+
21+
1.在编好失败单元测试之前,不要编写任何产品代码。
22+
23+
2.只要一个单元测试失败了,就不要在测试任何代码;无法通过编译也是一种失败的情况。
24+
25+
3.产品代码较好能够让当天的失败的单元测试通过测试即可,不要多些。
26+
27+
遵循这三条法则大概每30秒就要进行一次测试。
28+
29+
TDD的优势
30+
31+
确定性。Bob举例说FitNesse 的代码有6.4万行,其中有2.8万行是测试代码,如果要做改动,只要最后对执行者2.8万行代码就可以知道是否现在的操作是正确的。
32+
33+
缺陷注入率
34+
35+
bug非常少。
36+
37+
勇气
38+
39+
当你看到糟糕的代码时,你为什么不修改呢?因为你不知道自己是去修改还是去破坏了什么,最终他会缠上你。TDD最强大之处就是有一套值得信赖的测试。
40+
41+
文档
42+
43+
遵循三项法则,每一个测试都是一个示例。
44+
45+
设计
46+
47+
通常情况下,你对于想要写的代码十分清楚,但是三项法则却要求你先写出目前无法通过的单元测试,因为要测试的代码尚未诞生!这意味着必须测试将要编写的代码。于是,为了测试需要就要考虑解耦的办法。(这就是设计了)
48+
49+
专业人士的选择
50+
51+
TDD的局限性
52+
53+
如果弊大于利专业的人士就不会选择它。
54+
55+
感受:
56+
57+
这篇的插画师两个男士在一台电脑前,背景是一副画,画中是个湖。惬意而基情。因为你不知道他们俩的手在下面做什么。O(∩_∩)O哈哈~
58+
59+
这就是理想的结对编程吧。
60+
61+
确实有个人在边上一起讨论一起编写要能够快速的解决问题。而对于TDD我还没有试过。但是Bob确实在大力推销这个方法。它从你开始编程时便要求你做出合理的正确事情,从而时每一步都能够做的正确。所谓步步为营?看到糟糕的代码确实想去改动,但是真的不好改。我就有这样一段代码,不过幸好那个模块暂时不再使用所以可以先不用管它。代码糟糕并不是不能够运行是确实不够简洁,不够理想。至于理想状态是什么,我其实也还不清楚。还需要不断的去实践吧。
62+

‎TheCleanCoder/练习.md‎

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
这是本书的第六张。
2+
3+
话说整个周末我是一个代码都没敲。不过倒是看看了看python的入门东西。但是又看到微博上在说ruby好什么的。真是的PHP才最好嘛。哈哈
4+
5+
专业人士都需要借助专门的训练提升自己的技能,无一例外。本章主讲程序员如何提升专业技能。
6+
7+
引子
8+
9+
?
10+
1
11+
2
12+
3
13+
4
14+
main()
15+
{
16+
print (“hello world \n”);
17+
}
18+
大家都从没有想过练习。那么练习有什么好处呢。测试驱动开发的短周期迭代法也还没有发明出来,所以,尽管练习能够带来协调的开发节奏,但这种节奏没什么意义。
19+
20+
10的22次方
21+
22+
电脑的性能有22个数量级的提升。但是写if判断,while循环,赋值语句。
23+
24+
现在我们有了更好的工具,更好的语言,可是语句本质并没有随着时间而改变。20世纪60年代的程序员完全可以看懂2012年的代码。我们真正打交道的东西,40年来没有多少改变。
25+
26+
转变
27+
28+
任何事情,想要做的更快,都离不开练习。尽可能的重复编码/测试过程,要求你能迅速做出决定。这需要识别各种各样的环境和问题,并懂得应付。
29+
30+
无论是搏击还是编程,速度都源于练习。而且,两种练习并没有什么查别。我们选择一系列的问题及其解决方案,一而再,再而三地练习,直到烂熟于胸。
31+
32+
编程柔道场
33+
34+
卡塔——一个人
35+
36+
变成卡塔也是一整套敲击键盘和鼠标的动作,用来模拟编程问题的解决过程。练习者不是在解决真正的问题,因为你已经知道了解决问题的方案。相反,你在练习解决这个问题所需要的动作。
37+
38+
瓦萨——两个人
39+
40+
两个人的练习,一个人写单元测试,一个写程序通过单元测试,然后交换角色。
41+
42+
如果一个程序员选择实现一个排序算法,写测试的人可以很容易地限制速度和内存,给同伴施压。这样整个游戏非常考验人,也可以说非常有趣。
43+
44+
自由练习——多个人
45+
46+
在自由练习中屏幕被投影到墙上,一个人写测试,然后坐下来,另一个人写程序通过测试,再写下一个测试。桌子边的人一个个轮流接下去,或者有兴趣的人可以自己排队参加。无论怎么安排,都是非常有趣的。
47+
48+
你会深入的了解人们解决问题的过程,进而掌握更多的方法,提升专业技能。
49+
50+
自身经验的拓展
51+
52+
程序员通常会受到一种限制,即所解问题的种类比较单一。
53+
54+
开源
55+
56+
保持不落伍的一种方法就是为开源项目贡献代码。
57+
58+
关于联系的职业道德
59+
60+
职业程序员用自己的时间来练习。既然你有自己的练习时间,就不必限制在老板规定的语言和平台。
61+
62+
结论
63+
64+
无论如何专业人士都需要练习。他们用自己的时间练习,因为他们知道保持自己的技能不落伍是自己的责任,而不是雇主的责任。
65+
66+
感想:
67+
68+
这让我想到刚刚学习PHP那会,什么都不知道很是好像,当时猜测牛逼的是不是编程序就用一个写字板,然后看着代码就能知道运行结果呢。
69+
70+
几个人当时在学习循环结构和数组,然后大家各自写一段程序。让他运行起来,然后将运行结果用黑色背景注释掉,大家笔算结果。很是乐趣多多啊,不过确实学习的速度很快。
71+
72+
有一段时间将近一个月没有写过代码,那是在完成一个项目后,闲散的一月什么都没干,然后一个月后发现没有写代码的感觉了。花了近一月才找回来编程序的感觉。
73+
74+
练习确实非常重要,想想周末无所事事真是罪过啊!!
75+

‎TheCleanCoder/编码.md‎

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
成为专业人士
2+
Bob大叔 在主要要传授的是关于编码的一套规则与原则。
3+
4+
要熟练掌握每项技艺,关键都是要具备‘信心’,和‘出错感知’的能力。而以上两点都是在这套规则所引发的。他们描述的是编码时的行为,情绪与态度。
5+
6+
做好准备。
7+
8+
1,代码必须正常工作。2.代码必须能够帮助你解决客户提出的问题。3.代码必须要能和现有系统结合的天衣无缝。4.其他程序员必须能够读懂你的代码
9+
10+
千万不要在心烦意乱或疲劳时编码。
11+
12+
例如凌晨3点或者和女朋友闹别扭时写出的代码一定会在某日让你更加痛苦。
13+
14+
流态区
15+
16+
就是自我感觉良好,效率超高,你会感到觉悟错误,但是这是危险的。他会使你可以敲出更多地代码,但是你正在做TDD,其实你并没有估计全局。最好的做法是感觉快要进入流态区时,走开几分钟。或者采用结对编程(这个目前好像非常流行,我在其他的科技博客上也看到了类似的说法)而真正应该进入流态区的时间应该是 练习。
17+
18+
音乐
19+
20+
听着音乐确实会让我们感觉轻松,但是真实情况是,音乐正带着你进入流态区。(在工作前一段时间听听音乐确实能够较快的让自己进入状态,但是当沉浸其中时那就进入了所谓的流态区,浅层次冥想,应该减少进入流态区)
21+
22+
中断
23+
24+
当思考问题或进入流态区工作时被打断,不要态度恶劣的去对待他人。结对编程能够让你快速的回到打断之前的思维中,或者让你的同伴去处理问题。另一个办法是采用TDD方法。(:( 不知道TDD是什么 )如果被打断因该礼貌的表现出乐于助人的态度而这才是专业的态度,也许下次或许是去打断别人的就是你。
25+
26+
阻塞
27+
28+
谁都有写不来代码的时候,而那时应该做点别,放松心情。而最好的方法是结对编程。如果还不行那就找个角落清静一会。
29+
30+
创造性输入
31+
32+
要免于陷入阻塞状态的一个好办法就是要多 创造性的输入,才能创造性的输出。
33+
34+
读书看报听音乐,科幻喜剧白日梦。
35+
36+
调试
37+
38+
如果你的代码没有调试那将会是一场无尽的噩梦。
39+
40+
调试时间
41+
42+
开发人员认为调试时间并非编码时间,他们认为存在调试时间是天经地义的。但是对于工作来讲调试时间和编码时间是一样昂贵的。推荐采用”测试驱动开发“这能减少测试时间。(不过我连测试还不会呢)医生不喜欢重新打开病人的胸腔去修复此前发下的错误,律师不喜欢再度接手此前搞砸的案子。
43+
44+
返工是不专业的表现。
45+
46+
保持节奏
47+
48+
软件开发是场马拉松。专业程序员会仔细保存好自己的精力和创造力。
49+
50+
知道何时应该离开一会
51+
52+
遇到没有解决的问题就不应该回家。错,你可以回家,并且因该回家。调整好精力,让大脑休息好,保持节奏能够解决更多的问题。
53+
54+
开车回家路上
55+
56+
让大脑专注于其他事情上,会有助于解决问题。
57+
58+
洗澡
59+
60+
还是放松。
61+
62+
进度延迟
63+
64+
你总有一天会遭遇延迟的情况。有时候只因为我们夸下了海口。
65+
66+
根据目标定期衡量进度。乐观预估,标称预估,悲观预估。告诉项目利益相关者,并每天更新这个数字。
67+
68+
期望
69+
70+
如果10天后要交项目,你的预估是12天,你绝对不可能完成任务。要让利益相关者知道,除非有另外解决方案。不要让其他任何人对此抱有希望。
71+
72+
盲目冲刺
73+
74+
经理极力要求你赶上最后期限时。你应该坚持你的预估,不要盲目冲刺。那样会出很多问题,并使整个项目都变得缓慢。
75+
76+
加班加点
77+
78+
多工作的20%时间并不能完成20%的工作。如果连续加班3个星期加班措施必将失败。
79+
80+
你个人能力挤出这个时间,短期加班,最多两周,老板有后备预案。如果有后备那就加班吧。
81+
82+
交付失误
83+
84+
程序员最不专业的表现是,明知道还没有完成任务去宣告完成。
85+
86+
定义”完成“
87+
88+
最好是有个自动化的验收测试
89+
90+
帮助
91+
92+
编程并非易事。需要他人的思想。
93+
94+
帮助他人
95+
96+
相互帮助是每个程序员的职责所在。
97+
98+
接受他人的帮助
99+
100+
如果有人向你伸出援手,要真诚接受,心怀感激地接受帮助并诚意合作。
101+
102+
要学会请求帮助。如果帮助唾手可得而不请求帮助是很专业的表现。
103+
104+
辅导
105+
106+
向资深导师寻求辅导也是年轻程序员的专业职责。
107+
108+
除了自身的内驱动力和资深导师的有效辅导之外,没有东西能将一名年轻的开发人员提升为敏捷高效的专业人士。花时间手把手的辅导年轻程序员是资深程序员的专业职责所在。
109+
110+
(要想升级快全靠师傅带,没师傅的只能靠内驱动力了,找到驱动力)
111+
112+
概念:
113+
114+
测试驱动开发(Test-driven development)是现代计算机软件开发方法的一种。利用测试来驱动软件程序的设计和实现。测试驱动开始流行于20世纪90年代。测试驱动开发是极限编程中倡导的程序开发方法,方法主要是先写测试程序,然后再编码使其通过测试。测试驱动开发的目的是取得快速反馈并使用“illustrate the main line”方法来构建程序。
115+
116+
测试驱动开发的比喻。开发可以从两个方面去看待:实现的功能和质量。测试驱动开发更像两顶帽子思考法的开发方式,先戴上实现功能的帽子,在测试的辅助下,快速实现正确的功能;再戴上重构的帽子,在测试的保护下,通过去除冗余和重复的代码,提高代码重用性,实现对质量的改进。可见测试在测试驱动开发中确实属于核心地位,贯穿了开发的始终。
117+
118+
TDD 参考文章:
119+
120+
测试驱动开发
121+
TDD并不是看上去的那么美
122+

0 commit comments

Comments
 (0)