Fw: [心得] 几本让我成长很多的书

楼主: ZenLife (生活禅)   2014-09-20 14:27:00
※ [本文转录自 CompBook 看板 #1K75gpf4 ]
作者: Zephyr750 (红莲西风750) 看板: CompBook
标题: [心得] 几本让我成长很多的书
时间: Sat Sep 20 00:32:49 2014
我是用C++这种可怕语言开发的开发者。
从研究所毕业之后,我只会C和verilog
当时,我只唸了VerilogHDL学会了Verilog,但是完全只是熟语法...
而C只靠大学课程的印象
一路走来,到了软件公司,才发现业界有些公司其实....说强不强。
我想跟大家分享我看的书以及得到的东西。
希望有兴趣的朋友可以看看....
1. K&R2
这本是很有名的书,一开始会看,完全是因为“C学会了再学C++”的误解。
我看这本书方式,是从第一个字开始看到最后一个字。
因为这本书,让我重新学习C语言,了解C语言的强项与技巧
enum、struct、pointer、funtion pointer....
2. 蚂蚁书
会买这本,有两个原因,第一,这是我大学时使用的课本(虽然版本不同),
第二,它比K&R2介绍了更多“前置处理器”的用法。
但是其实看完了,还是不太会活用,因为不会花太多心思在它身上。
这本书,我只看前置处理器的章节。
3. C到C++入门速成
这本是在义守大学图书馆找到的,其它大学的图书馆似乎不一定有。
这本很特别,是无意间翻到的,它比较了C和C++各个不同之处集结成书。
这本书,是从第一个字开始看,整本看完。
4. 世纪末软件革命、从C到C++物件导向革命
为了了解“物件导向”特别去找了几本,但是都没看完,世纪本软件革命,
我是买复刻版,还有找到其中一个作者签名。(超幸运)
《从C到C++物件导向革命》是抄袭之作...
而物件导向是怎么了解的呢?
把C++当作verilog写一次,就明白了。瞬间了解类别是什么!
5. C++ Primer 4/e
我看的是四版,建议看三版,不过五版已经出了。新功能看来都是人家的旧功能!
似乎五版值得买。
这本是和C++爸爸书一起买的,是为了要找C++好书而开始狩猎,这两本圣经本
当然不能放过,让我对C++有了全新的体验。
这本书看到一半,但是因为当时是一边看,一边学,一边练习,所以很扎实。(应该)
学C++有四个阶段
C++ without OO ->做一些C在做的事
C++ with OO
C++ template
C++ general
最精彩的,是OO的部份,const的介绍,return this, return *this的用法、
覆写运算子.....等。
把整个记忆程式的方式,以心智图的方式,物件导向的形式呈现
之后,就常常跟人家说,挑一本好的C++入门书,看它的hello world就知道了!
看它的#include 是放stdio.h还是cstdio还是iostream。
看它是教你printf还是cout
看它的main回传值是void还是int
看它有没有return 0
不是这样做不行,而是身为一本教学书,就要以标准写法为范本。
另外,看别人会不会C++看它的set和get怎么写的就知道了。
虽然是coding style的问题,但是C++不把持一点,很容易写成泥巴。
void SetValue(const Foo& Obj);
const Foo GetValue() const;
把权限最小化,就是最好的写法。也许你会问为什么,我只能说,当你要把物件丢
STL到里的算法使用时,它就会卡这个。
6. 人月神话
这本很有趣,我也忘了当初是在哪看见推荐的了。写了这么久的程式,你真的了解
自己在做的是什么样工作吗?写程式有什么性质?有什么特性?什么该做?什么不该做?
有哪些事是过去前人就说超难做的,会不会不知不觉走到了一个前人有说“要小心
不要往这方向去了”的路呢?
这本是开读书会看的书,从第一个字看,整本看完。
最棒的就是第二系统效应、预估(很难)、巴别塔、外科手术团队
还有最后的“没有银弹”
这本影响我最大的,是它一直提的“整体概念性”是写程式最重要的一件事。
不管是设计、coding还是重构时,其实都用得上这个概念。
7. 软件建构之道2
这本可以说是我个人生涯看了最棒的一本书,也是因为它在Inside的排行榜里排第一名
所以不看似乎对不起自己是程式设计师这件事。
它从设计开始介绍,讲了很多写程式时会遇到的疑惑
这样写也可以,那样写也没错,但是语言这样设计的用意,应该是两种写法不同。
究境是哪里不同呢?一连串在写程式要决策的事情,就是设计师的用心之处
在第八章 防御性程式设计里有提到条件编译的使用方式,还有如何让自己的程式
更强壮或更正确,assert()的使用,最后提到自杀式程式设计来提升
交付程式前的强壮程度。
有看过这种命名的吗?
int temp; string str; return rtn; void doSomething(); float tmpValue;
void setValue(); int getValue();
是不是让程式码与人的距离愈来愈远了呢?
最有趣的是连return的使用方式,它都有介绍!
程式设计做到最后,就像是把中文翻译成程式语言。
class包含物件,与class继承class的差别是什么?have和is的差别!(超酷的)
前半部,是教你用技术提升品质。
后半部,是教你用管理提升品质。
繁体中文版超贵。建议看简中会顺畅很多,而且还有润句子和校"完"稿....(懂吧?)
当初看是开读书会,同时看简中、繁中、英文。
没有整本看完,看了前半段就放著了。
强烈推荐要看,尤其是有在code review的公司。
这本书影响我最大的是人月神话提的“整体概念性”实作在class、function、变量命名
分析了“整体概念性”与“名字”之间的重要性,还有命名带的隐喻,会影射出概念。
让程式码可读性提高,就像是写文章的譬喻法啦!
8. Effective C++
只能说,要把C++写得像C++就看Effevtive C++。
翻过,跳着看。没细读。它是超棒的书。
很想全系列买下来
之后有看到Effective C#不过只有英文版....
但是,简中有部落格文章唷!
9. 敏捷开发的逆袭
这本是台湾人写的!对敏捷式开发的流派Scrum介绍得很深入,也因此对敏捷式开发流程
有了一个范本,在了解其它流派,会更加的知道这是什么。
这本书,从头看到尾,很精彩!内容很多。
另外,后面介绍了很多工具在“实作”敏捷开发有很大的帮助(至少有工具),剩下的就是
建立工作流程与工作能力了(单元测试)
10. 大话设计模式
这本是C#的设计模式,是读书会开的书。
从第一个字开始看,整本几乎看完,但是看完还是不懂(这是Design Pattern书的特色?)
有些简单易用的Pattern就可以快速的学下来。
有些难懂的,就先放著,有缘自然就懂了。
看C#的Design Pattern除了因为读书会看之外,
C++这一本实在是一本“Design Pattern DM”,看看具体实例先
而且,C#的写法有些C++都要自己手动来。就会上网多找资料。
这本书并不是每个例子都很棒,但是它会从烂code重构给你看(大多数的例子)
所以,还可以看一下重构的过程,我觉得练习一次很有体会。
我是用C++练习的,所以很多地方不需要指标的,要自己看,
要delete指标的要自己判断一下
以上。
我一直相信,C++之所以难用,是因为它重点在“设计”,
而不是一直使用它既有的语法与功能。
作者: snaketsai (さいでんし)   2014-09-20 14:46:00
[OT]有人很很反对get,set的写法
作者: Zephyr750 (红莲西风750)   2014-09-20 15:16:00
因为命名吗?
作者: GoalBased (Artificail Intelligence)   2014-09-20 16:41:00
这种文桢步错真不错
作者: arenda (phantom in my heart)   2014-09-20 20:10:00
Design pattern的特色就是 你程度不到就看不懂
作者: csfgsj (切割对半)   2014-09-20 20:53:00
看来你已经走入了一个方法论的路径99% 的方法论者为强迫症潜在病患
作者: kinanson (kinanson)   2014-09-20 20:56:00
design pattern看得懂不一定会运用,会运用也可能用过头..
作者: csfgsj (切割对半)   2014-09-20 20:58:00
理想很高,理论完美,但脱离实际
作者: banjmin (HD)   2014-09-20 22:29:00
自己用过在实际的专案上 书上的例子其实简单到无法直接套DP 通常你还要加上一些自己专案依赖的实体或网络的Error Handling个人原则是除非你的case真的极度接近DP example 否则别用
作者: arenda (phantom in my heart)   2014-09-21 10:00:00
楼上别误导好吗? design pattern尽量不用我还是第一次听到感觉是学生讲出来的话 工作的人说出口蛮惨的
作者: BBSealion (海狮)   2014-09-21 10:09:00
应该是尽量不要"完全套用",而是理解设计原理去根据需求作最适当的Design,五大设计原理加上经验就很够用了另外我觉得用过头是必经之路 有 over-design过 再发现缺点在哪,才是真正进步的开始 比一开始就不用好多了
作者: banjmin (HD)   2014-09-21 10:25:00
我要表达是有时候你会误以为你可以套 其实状况又不太一样在模组大框架会根据需求容易变动的时期 也尽量还不要使用
作者: arenda (phantom in my heart)   2014-09-21 10:30:00
通常一开始土法炼钢 定下来后也改不动了 或是时间成本很高然后就开始恶性循环不然你以为那些优秀的open source一开始就没定好架构吗...他们也是一直持续变动阿...还不是写的很弹性 都是看功力
作者: banjmin (HD)   2014-09-21 10:35:00
有时user连他们要什么都不确定 那种变动会从适用到不适用
作者: arenda (phantom in my heart)   2014-09-21 10:35:00
一开始不用生一些莫须有的抽象类别和实作 但是架构要有这样抽出来或修改的时候 时间成本才会压低
作者: banjmin (HD)   2014-09-21 10:42:00
整支程式架构当然是有 但开发初期细部模组user都还在揣摩太早套下去 结果需求变动大到不适用DP的情况就会做白工
作者: arenda (phantom in my heart)   2014-09-21 10:46:00
就是因为会ㄧ直改才要用设定模式好吧~你高兴就好
作者: banjmin (HD)   2014-09-21 10:49:00
但是也不是一开始土砲就没救了 适当重构就可以帮助导入DP
作者: arenda (phantom in my heart)   2014-09-21 10:54:00
然后接手的就在想 这坨屎是什么?台湾si工程师的悲剧由此开启序幕
作者: banjmin (HD)   2014-09-21 10:55:00
你说得比较像是都不用DP 跟有节奏的重构再导入DP不一样
作者: kinanson (kinanson)   2014-09-21 11:44:00
架构想法因人而异没什么对错,pattern用了肯定会让程式码更难懂,对神级人物来说可能不会,但接手的人呢?写给人家用的需要考虑更多,总不可我逻辑改了,别人使用的api故障一堆。但自己写的时候完全懂来龙去脉,所以问题不大,但pattern应该是让你程式码更弹性,在不影响现有功能下扩充新功能,或者是原有功能改了,但我只需要改一个地方就能异动所有地方,怎么会是用了就定型架构更难改??你可能要更深入去认识dp的理念...但没有银弹,正常状态下不要过度设计,但影响过大的时候,该用还是得用而且其实有在使用物件思考写程式的,无形中就会用很多pattern了,即使你去读的时候,你可能还看不出来这些pattern你早就用类似方式去做过了...
作者: Zephyr750 (红莲西风750)   2014-09-21 19:10:00
Pattern只是单纯的让code变得更好维护。变动范围变小否则,用Pattern就只是惹麻烦而已。另外,在使用Pattern上难免会误用(过度设计或硬要用),这种情况就是对Pattern的熟悉度不够或者误解。csfgsj版友提到“方法论”>>“强迫症潜在病患”我认为是一种工匠的偏见...工匠有匠气,设计师就是你说的强迫症病患...吧?“有系统的把想法串起来,透过理性的布局创作作品”如果说依靠设计方法会成为强迫症患者,那么正常人应该也不适合我当吧!^^“DP就像是格斗游戏的大绝招,要背按键组合”这是别人但,千万不可以有匠气!'最后一句是在提醒我自己用的啦!^^"
作者: andymai (人生只有一次)   2014-09-22 04:06:00
DP这种经验的东西~就是心法~是读来让心里有个观念的~运用上就跟数据库正规化一样~因人、时、事而可能有所不同~也正因为如此~DP并不侷限在一种语言上~实际案例也往往比书上写的更复杂~架构好不好接手其实在于两人观念和领域知识是否够相近~落差一大~当然不懂对方在写什么~设计得对还是不对~往往要探讨更多的因素...

Links booklink

Contact Us: admin [ a t ] ucptt.com