Don't Panic! >> 读书:《高效能程序员的修炼》(二)



Don't Panic! » 读书:《高效能程序员的修炼》(二)

一、永远都是你的错

你写的代码任何时候出了问题都是你的错。这不是一个绝对的论断,而是一个建议。当你的代码出问题的时候,希望你的脑海中第一时间能出现这句话。相信每个人都会有经验,就不细说了。

二、大道至简

“你永远都有简化的空间”。不管是写作还是写代码的时候都请记住这句话。对一个代码进行评价,作者提出了如下几个方面:1.代码简洁度;2.功能完整性;3.执行速度;4.编码花费时间;5.健壮性;6.灵活性。简洁一直是很多人奉行的原则,最有名的是乔布斯提出的“至繁归于至简”,国内很多人可能也是这个原因开始标称这是自己的原则。但是大部分也只是标称罢了。

作者在书中提出了一个例子。下面的代码段。

if(s==String.Empty)

if(s=="")

你认为哪部分最好呢?可能大部分程序员会宣传第一种方式对编译器是多么的友好等等理由,但是不得不说第二种方式确实是更加的简洁。但是谁会care那些呢?第二种方式我一眼就能看出来是什么意思,就凭借着一点就足够了。不是吗?

三、避免写注释

不得不承认每个程序员都讨厌写注释,但是很多人又在告诫我们写注释的好处,不写注释的坏处,比如代码可读性什么的。但是你有没有想过这个问题:代码可读性究竟是有代码自己决定的,还是由注释决定的呢?不要试图用战术的勤劳掩盖战略上的懒惰。你应该总是专注于编写代码,而忘了还有注释这种东西的存在。这会迫使你竭尽全力使用最简单、最直白、最能进行自我说明的方式把代码写出业。将注释融化到函数名和变量名中。Steve Yegge指出初级开发者与高级之间的关键区别:初级开发者依靠注释来讲故事,而实际上他们应该依靠代码本身。

四、学会读源代码

在沟通这个复杂的领域里,写出能让人类领会并理解的连贯段落比敲出几行不至于让解释器或者编译器“呕吐”的软件代码要难得多。不管文档上怎么说,源代码才是最终的事实,是你所有找到的最好的、最确定的、最新的文档。
真正的骇客世界只有一个简单的事实:如果一个软件在我的机器上运行,那它就是我的软件。我必须把它弄明白。从源代码开始构建是一条必须遵循的原则。

五、像橡皮鸭求助

相信很多人都听说过橡皮鸭调试方法。开发人员发现代码出现问题,将问题描述给橡皮鸭。就在描述的过程中,你可能会发现问题的所在。这个和我前一篇说的很像。比如stackoverflow为什么要重视提问题?因为就在你提问题的时候,你需要将问题的脉络说清楚给别人听,这个过程你不仅仅是在向别人描述,也是说给自己听。

六、创新以人为本

这个已经被国内人说烂了。你可能不以为然。那么我们换一种说法:执行力比创新更重要。但是我觉得创新也是很重要的,任何时候。只是创新落地的时候需要强大的执行力。现在在国内一种更搞笑的是被一群连创意都提不出来的人拿来YY,甚至挖苦别人,真是哭笑不得。

七、你的团队能通过电梯测试吗

电梯测试是说在乘坐电梯的短暂时间向旁边的人解释介绍你自己或者解释清楚你的问题。时间很短,这就需要我们将焦点集中在重要的地方。对于程序员,不能为了编码而编码。对于所有人,不能为了学习而学习,你需要有明确的目标,不然学习也不过是另一种浪费时间罢了。

八、性能致胜

最后一点,性能致胜。

最后的最后,关于这本书,内容比较杂。看上去应该是很多帖子的集合。推荐大家读一读。


Read full article from Don't Panic! » 读书:《高效能程序员的修炼》(二)


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts