《The Pragmatic Programmer》摘要

The Pragmatic Programmer 英文高清PDF 无水印 Straight from the programming trenches, The Pragmatic Programmer cuts through the increasing specialization and technicalities of modern software development to examine the core process--taking a requirement and producing working, maintainable code that delights its users. It covers topics ranging from personal responsibility and career development to architectural techniques for keeping your code flexible and easy to adapt and reuse. 立即下载

今天全部整理完毕了。心中最大的感觉就是两个字:科学,其次是专业,最后是规范。竖起铁栅栏,不是要局限你的思维,而是让你规避不必要的常见错误,让你可以更自由地、更集中精力地发挥自己的才能,做一个更高效、more pragmatic的程序员。

*******************************************************************************************************************************************

书中加方框的都是作者的经验,简洁、精辟、实用,所以我觉得记下来比较好。中文是自己的理解: ­

­

Chapter 1 —— A Pragmatic Philosophy ­

1. Provide Option, Don't  Make Lame Excuses. ­

别找借口,这是你自己的责任 ­

­

2. Don't Live with Broken Windows. ­

一但发现错误要即时纠正,否则它会扩大 ­

­

3. Be a Catalyst for Change ­

学会打动别人接受你的观点,有时要用点Stone Soup的Trick ­

­

4. Remember the Big Picture ­

着眼大局,别为小利所动 ­

­

5. Make Quality a Requirements Issue ­

清楚什么时候可以收工,永远没有完美 ­

­

6. Invest Regularly in Your Knowledge Portfolio ­

做什么都得这样!!! ­

­

7. Critically Analyze What You Read and Hear ­

辩证思维,学会更改思考 ­

­

8. It's Both What You Say and the Way You Say It ­

学会交流,加强交流,仅仅是提问就有可能帮你得到答案 ­

­

Chapter 2 —— A Pragmatic Approach ­

1. DRY — Don't Repeat Yourself ­

最基本的原则,避免最大的“臭味” ­

­

2. Make It Easy to Reuse ­

重用,不仅是Lazy,而且是Design ­

­

3. Eliminate Effects Between Unrelated Things ­

尽可能使设计Orthogonality (但按Bjarne Stroustrup的理论,“正交性应该作为第二位的原则——放在对于有用性和效率的最基本考虑之后”) ­

­

4. There Are No Final Decisions ­

用户的决策总会变,所以你的软件要Reversible ­

­

5. Use Tracer Bullets to Find the Target ­

Tracer Bullets是一个粗而全的框架,加以refine便可使用;Prototype着眼于最终系统,一旦展示但失去价值。我想还是原文说得清晰:Prototyping generates disposable code. Tracer code is lean but complete, and forms part of the skeleton of the final system. ­

­

6. Prototype to Learn ­

Prototyping is a learning experience. ­

­

7. Program Close to the Problem Domain ­

选择适应问题领域的语言 ­

­

8. Estimate to Avoid Surprises ­

做好充分的、数字化的估计 ­

­

9. Iterate the Schedule with the Code ­

估计->编码->反馈->再估计,形成迭代过程,你对计划会越来越有信心 ­

­

Chapter 3 —— The Basic Tools ­

1. Keep Knowledge in Plain Text ­

任何时候Plain Text都不会过时 ­

­

2. Use the Power of Command Shells ­

绝不能只会用鼠标。But if you do all your work using GUIs, you are missing out on the full capabilities of your environment. ­

­

3. Use a Single Editor Well ­

在所有系统都能用的强大的Editor,如Emacs, vi, CRiSP, Brief... ­

­

4. Always Use Source Code Control ­

Even if you are a single-person team on a one-week project. ­

Even if it's a "throw-away" prototype. ­

Even if the stuff you're working on isn't source code. ­

­

5. Fix the Problem, Not the Blame ­

说啥好呢? ­

­

6. Don't Panic ­

特别适合我 :P ­

­

7. "select" Isn't Broken ­

程序出了错不要首先去责怪系统程序、APIs。(select是Solaris的一个系统函数) ­

­

8. Don't Assume It — Prove It ­

测试优先 ­

­

9. Learn a Text Manipulation Language ­

作者盛赞了Perl,并且说如果想用OO的话,就用Python,吼吼! ­

­

10. Write Code That Writes Code ­

也太专业了 ­

­

Chapter 4 —— Pragmatic Paranoia ­

1. You Can't Write Perfect Software ­

当然,所以要有计划 ­

­

2. Design with Contracts ­

如果@pre满足,那么可以保证@post ­

­

3. Crash Early ­

千万不要等到发布后Crash,想方设法让它在设计时Crash ­

­

4. If It Can't Happen, Use Assertions to Ensure That It Won't ­

没有“不可能”,所以你要为“不可能”用Assertion ­

­

5. Use Exceptions for Exceptional Problems ­

而对“可能”用Error Handler ­

­

6. Finish What You Start ­

“在外面混,总有一天要还的”,哈哈 ­

­

Chapter 5 —— Bend, or Break ­

1. Minimize Coupling Between Modules ­

不用说了,低耦合是永恒的目标 ­

­

2. Configure, Don't Integrate ­

将软件做成为可配置的,进一步解耦 ­

­

3. Put Abstraction in Code, Details in Metadata ­

使程序更鲁棒,无需重新编译,共享一套程序引擎,使用不同metadata,来适应不同的项目。 ­

­

4. Analyze Workflow to Improve Concurrency ­

解时间耦合(Temporal Coupling) ­

­

5. Design Using Services ­

用Services来取代Components,因为Services是Independent, concurrent objects behind well-defined, consistent interfaces. ­

­

6. Always Design for Concurrency ­

我们可以more easily meet scalability or performance requirements and benefit of a cleaner design. ­

­

7. Separate Views from Models ­

MVC(Model-View-Controller)模式(thy:=Observer+Mediator模式)另可参看The CORBA Event Service ­

­

8. Used Blackboards to Coordinate Workflow ­

使对象彻底解耦,providing a forum where knowledge consumers and producers can exchange data anonymously andasynchronously. ­

­

Chapter 6 —— While You Are Coding ­

1. Don't Program by Coincidence ­

其实做什么事都是这样,不能靠瞎蒙(blindfolded),要有根据,有试验 ­

­

2. Estimate the Order of Your Algorithms ­

绝对不能让程序的运算复杂度是指数阶的。 ­

­

3. Test Your Estimates ­

①“光说不练假把式” ­

②只有当算法成为性能瓶颈时才有必要去改进算法 ­

­

4. Refactor Early, Refactor Often ­

等项目成形了再想重构就几乎不可能了 ­

­

5. Design to Test ­

测试驱动开发 ­

­

6. Test Your Software, or Your Users Will ­

所以还是自己来干吧 ­

­

7. Don't Use Wizard Code You Don't Understand ­

不是不能用,而是只有深刻理解了Wizard生成的代码之后才能用,不要成为它的奴隶。 ­

­

Chapter 7 —— Before the Project ­

1. Don't Gather Requirements —— Dig for Them­

不要浮于需求的表面,而是要能够深究其内在,要能区分出Requirements, Policy, Implementation之间的差异。最好能在需求的背后记录下需求的原因。­

­

2. Work with a User to Think Like a User­

做自己软件的用户,则更能从用户的角度去考虑问题。这一点我倒是很有体会,应该到目前为止我写的软件基本上都是给自己用的。­

­

3. Abstraction Live Longer than Details­

Y2K问题就是个很好的例子,当初如果不是用两位数字来表示时间而是用DATE这个抽象概念的话,解决Y2K问题会轻松许多。­

­

4. Use a Project Glossary(专门词典)­

在一个项目内保持术语上的统一,如client还是customer,可以使大家更加默契。­

­

5. Don't Think Outside the Box —— Find the Box­

这里作者是对一句buzz-phrase的新解(Thinking outside the box)。首先,什么是outside the box?作者举了个例子:Can you connect all of the dots in the following puzzle and return to the starting point with just three straight lines - without lifting your pen from the paper or retracing your steps?­

                                         。              。­

­

 

                                         。              。­

因为我以前见过相关的问题,所以我比较快的得出了答案,否则我也不知道我会怎么想。­

其次,我觉得作者这里有点“强说新词”的味道。人家原意说outside the box,当然已经首先finded the box了,不然他怎么知道已经outside the box?­

­

总之作者的意思就是要另辟蹊径去解决那些impossible puzzles。­

­

6. Listening to Nagging Doubts —— Start When You're Ready­

开始动手之前让直觉告诉你有没有哪些地方尚未准备充足,什么时候可以动工。就像跳水运动员在跳板上张开双臂,waiting for the perfect moment to jump(我很喜欢这个比喻!)­

­

7. Some Things Are Better Done than Described­

在规格上别太抠细节。原因有三:首先,你不可能涵盖所有的细节。其次,语言本身的表达能力是有限的。最后,这将会产生straightjacket effect(不知道咋翻,意思就是给编程几乎没留下自由发挥的空间)。­

­

所以与其在规格细节上做文章,不如Look at prototyping, or consider a tracer bullet development.­

­

8. Don't Be a Slave to Formal Methods­

在项目规划上,有这样一些方法:Structured Programming, chief programmer teams, CASE tools, waterfall development, the spiral model, Jackson, ER diagrams, Booch clouds, OMT, Objectory, Coad/Yourdon, UML。他们不断地被取代,只有Structured Programming活得最长了。­

­

正规方法有三大弊病:首先,它通常是图表与支撑词的组合,但它们对最终用户一点用也没有。其次,因其专业化,使得不同层次的开发小组之间难以沟通和交流。最后,We like to write adaptable, dynamic systems, using metadata to allow us to change the character of applications at runtime.­

­

正规方法应该用,但不能盲目地用,它只是我们开发工具箱中的工具之一。如果在仔细分析之后决定使用它们,那就用吧,but remember who is in charge。­

­

9. Expensive Tools Do Not Produce Better Designs­

一个Pragmatic Programmer应该批判地看待各种方法,对不同的部分分别使用最好的方法,最后将它们融为一个整体。­

­

Chapter 8 —— Pragmatic Project ­

1. ­Organize Around Functionality, Not Job Functions

在小组的分工上也要讲求Orthogonality。

 

2. Don't Use Manual Procedures

让编译、生成代码、回归测试、Build、Final Builds、Administrivia(生成相关Web站点)、Approval Procedures都能够自动化。省事只是一个side-effect,自动化的真正涵义是DRY,是让控制更集中。

 

3. Test Early. Test Often. Test Automatically.

这也是TDD的原则,持续测试,持续集成,同时更重要的是:持续重构!

 

4. Coding Ain't Done 'Til the Tests Run

设计要足够地解耦,这样测试就可以在无GUI的情况下进行。而且可以很好地适应不同的GUI库。

 

5. Use Saboteurs(搞破坏者) to Test Your Testing

一个正式的项目中应该专门指定一名Saboteur。

 

6. Test State Coverage, Not Code Coverage

为此测试数据一定要精选!

 

7. Find Bugs Once

发现Bug就一定要解决它,不能再留到下次。Once a human tester finds a bug, it should be the last time a human tester finds that bug. 所以要适当修改测试数据做好回归测试。

 

8. Treat English as Just Another Programming Language

要将代码和文档看作是相同模型的两个不同的视图(model / view)。

 

9. Build Documentation In, Don't Bolt It On

再一次是对DRY原则的重申。JavaDoc、DOC++、DocBook

 

10. Gently Exceed Your Users' Expectations

谁说人老美都是直肠子?人比咱们还懂得中庸之道呢!

 

11. Sign Your Work

不能有羞于将代码或者设计签上自己名字的想法。首先代表你勇于担负起自己的那份责任。更重要的是,你应该为你的工作而自豪(可能是你个人的,也可能是一个小团队的。XP就鼓励对代码共用所有权)。我想还是原文更有气魄:

We want to see pride of ownership. "I wrote this, and I stand behind my work." Your signature should come to be recognized as an indicator of quality. People should see your name on a piece of code and expect it to be solid, well written, tested, and documented. A really professional job. Written by a real professional.

The pragmatic Programmer 主题从个人责任、职业发展,到用于使代码保持灵活并且易于改编和复用的各种架构技术,利用许多富有娱乐性的奇闻轶事、具有思想性的例子及有趣的类比,全面阐释了软件开发的许多不同方面的最佳实践和重大陷阱。 立即下载

相关推荐

The Pragmatic Programmer

The Pragmatic Programmer,程序员最应该阅读的。可以借鉴

读书《the pragmatic programmer》:如何做一个好的程序员

    编程是艰难的,是枯燥的,无数的商业公司告诉我们它们产品的奇迹。它们的语言是最佳的。然而这些并不是真的,世上没有最佳的工具,作为程序员不应该局限于某种技术,而是让自己能够选择好的解决方案。那么好的程序员都有哪些特征呢:  1 Provide Options,Dont make lame excuses  在所有的弱点中,最大的弱点就是害怕暴露弱点 当犯错误的时候,承认它, 不要责备别

imfzp的专栏 1358

pragmatic programmer

NULL 博文链接:https://stephen80.iteye.com/blog/342307

The Pragmatic Programmer 翻译(前言章节部分) (转)

The Pragmatic Programmer 翻译(前言章节部分) (转)[@more@]The Pragmatic Programmer XML:namespace prefix = o ns = "urn:schema...

ciya3282的博客 302

MATLAB实战:手把手教你实现Gardner环路位同步(附完整代码)

本文通过MATLAB实战,详细讲解了Gardner环路位同步算法的原理与实现。内容涵盖插值滤波器、定时误差检测、环路滤波器与数控振荡器等核心模块,并提供完整代码和调试技巧,帮助读者掌握数字通信中关键的符号定时同步技术。

weixin_29048775的博客 175

FeynRules的上手使用3--运行

FeynRules的运行 接上两篇,在我们正确的设定模型参数和拉氏量之后,就可以运行FeynRules来推导费曼规则。 装载文件 首先需要设定FeynRules文件所在位置,并装载FeynRules模块: $FeynRulesPath = SetDirectory[ ] << FeynRules` 接下来是装载写好的模型文件: LoadModel[ < file.fr >, < file2.fr >, … ] 模型文件后缀为".fr",可以分几块构成。模型描述可以写在

cool_bot的博客 1076

注重实效的程序员(The Pragmatic Programmer)

推荐一本好书 《The Pragmatic Programmer - From journeyman to master》 1、关心你的技艺 Care About Your Craft 除非你在乎能否漂亮地开发出软件,否则其它事情都是没有意义的。 2、思考!你的工作 Think!About Your Work 在你做某件事情的时候思考你在做什么。不间断地思考,实时地批判你的工作。这将占据你...

weixin_30721899的博客 416

特征金字塔网络(Feature Pyramid Network, FPN)

特征金字塔网络(FPN)是计算机视觉领域的一个里程碑式工作,通过高效的多尺度特征融合,显著提升了目标检测和分割任务的性能。其核心在于自底向上路径、自顶向下路径和横向连接的协同工作,兼顾了高分辨率和强语义信息。FPN的通用性和高效性使其成为许多现代检测框架的标配模块。

Rhett_Butler0922的博客 1727

读《程序员修炼之道——从小工到专家》(The Pragmatic Programmer: From Journeyman to Master)

花了几天时间略读完了《程序员修炼之道——从小工到专家》(The Pragmatic Programmer: From Journeyman to Master)。总体感觉就像是一位多年开发经验的软件工程师,在身旁谆谆教导。其中的大部分内容,要在工作中不断实践,才能有深刻的体会。也许是自身层次原因,其中一部分内容不是很能理解,也许在多年之后,第二次读这本书的时候,会有更加深刻的认识和理解吧。

Switch的博客 3674

实测昇腾310P跑Qwen3有多慢?手把手带你部署vLLM并记录性能数据

本文实测了昇腾310P在vLLM框架下部署Qwen3模型的性能表现,详细记录了2.5 tokens/s的生成速度及其技术瓶颈。通过环境搭建、基准测试和深度分析,揭示了计算资源利用率不足等关键问题,并提供了实用的优化技巧与监控方案,帮助开发者更好地理解和优化昇腾平台上的大模型部署。

weixin_28724319的博客 895

Imputation Methods for scRNA Sequencing Data

越来越多的研究者使用单细胞RNA测序(scRNA-seq)技术来表征单细胞水平的转录图谱。他们用它来研究复杂组织的异质性、转录组动力学和未知生物的多样性。然而,在基因表达模式随机性的scRNA-seq数据中普遍存在许多技术和生物学上的噪音。这些数据通常具有高维、稀疏和大量“dropout”值的特点,并且受批处理效应的影响。scRNA-seq数据中大量的“dropout”值严重掩盖了基因之间的重要关系,阻碍了下游分析。因此,scRNA-seq数据dropout值的估算就显得尤为重要。

qq_34179307的博客 543

读书 The Pragmatic Programmer 1

从今天开始准备看下《The Pragmatic Programmer》,并记录下自己的一些理解

yzs10的博客 158

08 rk3568 模拟smi mdio RTL8367RB(一)

前提需求:硬件连接普通gpio ,RTL8367RB需要mdio通信 使用的gpio是 MDC GPIO3_B3 (SMI时钟线) MDIO GPIO3_B4 (SMI数据线) 2. 数据结构与枚举 3.1 GPIO 初始化(地址映射) 内核无法直接访问物理地址,通过ioremap将 GPIO 控制器的物理地址映射为虚拟地址,后续通过虚拟地址操作 GPIO 寄存器。 3.2 设置引脚方向 3.3 设置电平 3.4 读取电平 6. SMI 总线时序实现 SMI 总线通信依赖严格的时序(起始信号、

qq_39451352的博客 541

The Pragmatic Programmer 读书笔记之一 DRY-Don’t Repeat Youself

The PragmaticProgrammer 读书笔记之一 DRY-Don’t RepeatYouself   虽然自己买了很多软件工程方面的书,但是因为时间的问题,一直没有静下心来充充电。最近因为感觉自己在编程方面迫切需要有进一步的提高,于是打算好好的研读一下Andrew Hunt和David Thomas合著的《The Pragmatic Prog

寂静山林 3620

CAPL控制程控电源

汽车电子测试过程中,除了实车测试,还有台架测试,在进行台架测试时,都需要通过电源来模拟汽车电瓶给ECU供电,如果要进一步进行比较高效的压力测试或自动化测试,就需要用到程控电源,所以本章主要介绍CAPL是如何来控制程控电源的。

测试领域技术分享 4390

大模型部署指南:SGLang 框架

本文介绍使用 SGLang 框架部署大模型

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 1616

《The Pragmatic Programmer》英文高清PDF无水印版

《The Pragmatic Programmer》英文高清PDF无水印版 【下载地址】ThePragmaticProgrammer英文高清PDF无水印版 《The Pragmatic Programmer》是程序员必读的经典之作,本书从一线编程实践中提炼出宝贵经验,深入探讨现代软件开发的核心过程。无论你是新手还是资深开...

gitblog_06732的博客 410

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

[转] 注重实效的程序员(The Pragmatic Programmer)

 注重实效的程序员(The Pragmatic Programmer) 推荐一本好书 《The Pragmatic Programmer - From journeyman to master》 1、关心你的技艺 Care About Your Craft 除非你在乎能否漂亮地开发出软件,否则其它事情都是没有意义的。 2、思考!你的工作 Think!About Your Work 在你做某件事情的

Streamlet 992

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

读《The Pragmatic Programmer:From Journeyman to Master》- 1

程序员修身之道,这是一本放在枕头边经常拿起来反复读的书。

ZONE 855

Joel和《The Pragmatic Programmer》给的建议

Well,虽然Joel Spolsky在《Advice for Computer Science College Students》一文里给计算机系的学生提出了7条不错的建议:1. 学习写作(Learn how to write before graduating. ) 2. 学会C(Learn C before graduating. ) 3. 学习微观经济学(Learn microecon

swimmer2000的专栏 782

The Pragmatic Programmer 转载

在 "每位开发人员都应铭记的10句编程谚语 "中看到这本书,就查看了一下,一下是内容 书名《The Pragmatic Programmer - From journeyman to master》 1、关心你的技艺 Care About Your Craft 除非你在乎能否漂亮地开发出软件,否则其它事情都是没有意义的。 2、思考!你的工作 Think!A

ljchlx的专栏 1752

程序员修炼之道--The Pragmatic Programmer

一本讲道理的书。 转载于:https://www.cnblogs.com/roxell/archive/2004/11/10/62343.html

weixin_30871293的博客 215

《The Pragmatic Programmer: From Journeymen to Master》

《程序员修炼之道:从小工到专家》 Chapter 1: A Pragmatic Philosophy 实用主义的编程源自于一种务实的哲学思想,这章为这些哲学思想奠定基础: The Cat Ate My Source Code :对你自己、你的职业规划、你的工以及具体的项目负责。除了尽最大的努力做好的你的本职工作,你还要考虑你没有考虑全面的会出错的场景【如果磁盘坏了,但你却没有备份代码,...

平兄 1714
上一篇: 为自己的C++程序写了一个朴素的TDD
下一篇: 练练手,练练手——C语言用递归对链表逆序
thy38
博客等级 码龄19年 184粉丝 116原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值