编辑推荐
避免常犯的错误
养成优良的习惯
破解密码,你也可以好起来
内容简介
本书集合了作者在软件行业里总结的第一手教训、体会和走过的弯路。话题涉及程序员生活的方方面面,例如,如何保持开发动力,如何提高生产力,如何摆脱软件的复杂性,如何与客户打交道,如何教导编程新手,何时进行自主开发,程序员的自豪感等。每个话题独立成篇、言简意赅,引人思考。
本书不仅适合编程老手阅读,也适合编程菜鸟学习,还适合想了解软件这个行业的人士阅读。
作者简介
Ka Wai Cheung,程序员、设计师,还是芝加哥We Are Mammoth(我们是猛犸)公司的联合创始人。为各行各业的客户制作应用软件,也制作自有的一些基于网页的软件。
译者介绍:
劳佳,上海交通大学电子工程系硕士,现在SAP美国任高级软件支持顾问。业余爱好语言、数学、设计,近年合作翻译出版了《周末读完英国史》、《加州大学伯克利分校人文建筑之旅》等书。
内页插图
精彩书评
“这是Pragmatic Programmers系列中的又一本书——对新手来说是指引,对专家来说是重温,这是关于程序员技艺(和生活)的一本美妙的智慧集。”
——Derek Sivers,CD Baby和sivers.org的创始人
“Ka Wai Cheung先生为那些寻找自己赖以生存的代码的专业开发人员写了一本书。这本书不是用那些在任何博客中都能找到的传统想法拼凑起来的,而是用强有力且有针对性的方法,讲述专业编程的技艺和现实。
如果你想找一本新瓶装旧酒的编程规则,那就不用看这本书了。但是,如果你正在寻找一种视角,看看软件开发是什么,或者你想要一套由真实经验提炼出的指导方针,那这本书正是你需要的。”
——Bob Walsh,作家、47 Hats的创始人
“充满‘美味’的经验,每篇的大小也十分‘适口’——在这本书里你可以学到很多。花上些时间从过来人那里学学吧。”
——Adam Hoffman, 高级开发主管
“一本好书,有现代程序员从日新月异的世界中得到的提示、技巧和经验教训。从事开发或与开发人员合作的人士不可不看。”
——Caspar Dunant, Webfish
目录
第1章 引言
1.1 谁是21世纪的程序员
1.2 吸取第一手教训
1.3 这本书写的是我们自己
第2章 比喻
第1篇 谨慎使用比喻
第2篇 规划完备,然后开工
第3篇 发行不过是第1版
第4篇 “象牙塔”架构师的传说
第5篇 扔掉旧代码
第6篇 多元化胜于专业化
第7篇 比喻渐欲迷人眼
第3章 动力
第8篇 工作即福利
第9篇 从喜欢处入手
第10篇 莫求全
第11篇 休止一下
第12篇 早起先测试
第13篇 别在卧室里工作
第14篇 第一印象也就那么回事
第15篇 软件发行的情感价值
第16篇 找个争论话题
第4章 生产力
第17篇 对消闲项目坚决说不
第18篇 限制所有的因素
第19篇 去掉时间表中的细节
第20篇 每天改进产品的两个方面
第21篇 为良好的工作环境投资
第22篇 列一张个人待办事项清单
第23篇 和团队一起安排免打扰时间
第24篇 采用自治小团队的工作形式
第25篇 提高生产力,避谈“我们”
第5章 复杂性
第26篇 “嗅”出坏的复杂性
第27篇 关于“简单”的悖论
第28篇 复杂性就像挑棍游戏
第29篇 把复杂性藏起来
第30篇 “难编”可能意味着“难用”
第31篇 知道何时重构
第32篇 确定编程的节奏
第6章 教学
第33篇 教学不同于编程
第34篇 当心“知识魔咒”
第35篇 用浅显的例子
第36篇 为简化不妨说谎
第37篇 鼓励自主思维
第7章 客户
第38篇 刁钻的客户无处不在
第39篇 软件黑魔法揭秘
第40篇 设定软件的目标
第41篇 激发热情,相信自己
第42篇 宽容大度,和蔼可亲
第43篇 价值远不只是工时
第44篇 尊重你的项目经理
第8章 代码
第45篇 写代码是不得已而为之
第46篇 拿来主义的文化
第47篇 代码是最好的初级程序员
第48篇 把机器和人的工作区分开
第49篇 从核心开始生成代码
第50篇 自主开发的情形
第9章 自豪感
9.1 形象是个问题
9.2 烹饪行业的一课
参考文献
前言/序言
中文版序
亲爱的读者:
在编程的世界里,我们会和各种各样的“语言”打交道。虽然我主要的服务器端开发语言是C#,但我的工作方法却几乎可以完全应用到Java、PHP、Ruby或Python上。编程语言虽有不同,核心的编程思想、方法和架构却是高度类似的。我们只是用不同的方式来表达而已。
我们的工作方式也具有普遍性——如何保持干劲、提高成效,教学的重要性,如何与客户合作,如何发现合适的流程,勇于摆脱不好的流程。此外,我猜想,我通过编程学到的人生一课,不仅适合在美国工作的我们,也可能适用于在中国工作的你。
作为在美国出生的第一代华裔,我非常荣幸这本书能够被翻译成我父辈的语言。我在美国长大,在西方文化中生活,同时也有一些中国的传统价值观。我对于应该如何在这个行业工作的看法肯定受到了两种文化的影响。
无论你是刚刚投身编程事业,正在创业,还是在寻找一些新鲜的观点,我都希望这本书在现在和未来都能对你有所启发。
张家为
Dear readers,
In the world of programming, we work with “languages” of all different kinds. Though my primary server-side development language is C#, the way I work almost fully translates to the world of Java, PHP, Ruby, or Python. Core programming ideas, methodologies, and architectures are highly similar between these different coding worlds. We just express them in different ways.
The same is true for how we work - How we stay motivated and productive, the importance of teaching, working with clients, discovering the processes that work just-right and being brave enough to shed the ones that don’t. And, I’d imagine that the life lessons I’ve learned through programming translate not just to how we work in the U.S., but how you might work in China.
As a first-generation American born to Chinese parents, I was tremendously humbled to have this book translated to my ancestral language. I grew up in the United States, living in a western culture while growing up with some traditional Chinese values. My opinions on how we ought to work in this industry have certainly been influenced by both cultures.
Whether your just beginning your career in programming, starting your own small business, or seeking some fresh perspectives, I do hope you find this book valuable now and in the future.
Sincerely, Ka Wai Cheung
《卓越程序员密码》:解锁代码的艺术与科学 在这数字浪潮席卷全球的时代,软件已成为驱动社会运行的无形引擎。从智能手机上的便捷应用,到支撑起整个经济体系的庞大系统,代码的力量无处不在。然而,仅仅掌握编程语言的语法,写出能运行的代码,与真正意义上的“卓越程序员”之间,尚有一段需要深耕的距离。正如任何技艺的精湛都需要对工具的深刻理解和对原理的融会贯通,卓越的编程也蕴含着一套独特的思维方式、一套行之有效的方法论,以及一套不断精进的哲学。 《卓越程序员密码》正是这样一本旨在揭示这套“密码”的书籍。它并非罗列枯燥的技术细节,也不是堆砌晦涩的理论公式,而是深入到程序员的思维内核,从更宏观、更本质的层面,探讨如何才能从一名合格的编码者蜕变为一名能够创造卓越、解决复杂问题的优秀工程师。本书将带领读者踏上一段探索之旅,穿越代码的表象,触及那些塑造出伟岸软件的深层逻辑和智慧。 第一部分:思维的基石——卓越程序员的认知图谱 卓越程序员绝非是孤立的代码机器,他们拥有清晰而强大的认知框架。本书的第一部分将聚焦于构建这样的思维基石。 问题解决的艺术: 编程的本质在于解决问题。我们探讨的不仅仅是“如何写代码”,更是“如何思考问题”。我们将深入分析问题的分解、抽象、建模的过程,学习如何从纷繁复杂的现象中抽丝剥茧,找到问题的核心。这包括但不限于:识别问题的边界、定义清晰的目标、选择合适的工具和方法。我们还会学习如何从不同的角度审视问题,避免陷入思维定势,从而找到更优、更具创造性的解决方案。 清晰的思考与表达: 代码不仅仅是写给自己看的,更是写给他人,以及未来的自己看的。清晰的思考能力直接转化为清晰的代码表达。本书将强调逻辑的严谨性、结构的条理性以及意图的明确性。我们将学习如何构建清晰的思维导图,如何用简洁的语言描述复杂的设计,以及如何在代码中体现这种清晰。这涉及到对需求理解的深度、对算法设计的精巧,以及对系统架构的考量。 学习的元认知: 技术日新月异,学习能力是程序员最宝贵的财富。本书将引导读者认识“如何学习”本身。我们将探讨高效的学习策略,如何快速掌握新技术,如何辨别信息的价值,以及如何构建终身学习的体系。这包括但不限于:主动学习、刻意练习、从错误中学习、建立知识体系等。理解学习的内在机制,才能让程序员在技术浪潮中保持领先。 抽象与模式的识别: 软件开发的核心在于抽象。卓越的程序员能够从具体的实现中提炼出通用的模式和抽象的概念,从而构建出更易于理解、维护和扩展的系统。本书将深入讲解抽象的思维方式,如何识别代码中的重复模式,如何利用设计模式来解决常见问题,以及如何设计出具有良好抽象层次的系统。 第二部分:构建之道——卓越程序员的方法论 拥有了坚实的思维基础,我们还需要一套行之有效的方法论来指导实践。本书的第二部分将聚焦于卓越程序员在开发过程中所遵循的实践原则。 优雅的代码艺术: 代码不仅仅要能运行,更要写得“漂亮”。我们探讨“优雅”的含义:可读性、可维护性、可扩展性、健壮性。本书将从命名、格式、注释、模块化、低耦合、高内聚等多个维度,详细阐述如何写出令人赏心悦目的代码。我们将学习如何避免“技术债务”,如何让代码成为一种享受,而非负担。 设计原则与模式的精髓: 优秀的软件设计并非凭空而来,而是遵循一系列经过验证的设计原则和模式。本书将深入讲解SOLID原则、DRY原则、KISS原则等核心设计理念,并结合经典的23种设计模式(如工厂模式、单例模式、观察者模式、策略模式等),阐述它们在实际开发中的应用场景和背后的设计思想。理解这些原则和模式,能帮助我们构建出更灵活、更易于维护的系统。 测试驱动的开发: 测试是保证软件质量的基石。本书将强调测试的重要性,并重点介绍测试驱动开发(TDD)的理念和实践。我们将学习如何编写单元测试、集成测试、端到端测试,以及如何利用测试来指导设计和重构。测试驱动不仅是一种技术实践,更是一种思维方式,它能帮助我们写出更健壮、更可靠的代码。 代码重构的智慧: 随着项目的迭代和需求的演变,代码不可避免地会产生“坏味道”。重构是改善代码结构、提高代码质量的关键手段。本书将系统讲解代码重构的原则、技巧和注意事项,以及如何安全有效地进行重构,从而在不改变代码外在行为的前提下,优化代码的内部结构。 性能优化的艺术: 性能是衡量软件优劣的重要指标。本书将引导读者理解性能瓶颈的识别方法,学习常见的性能优化策略,包括算法优化、数据结构选择、并发处理、资源管理等方面。同时,我们也强调“过早优化是万恶之源”,并在性能优化与代码可读性之间寻找平衡。 第三部分:持续的精进——卓越程序员的成长之路 成为一名卓越程序员并非一蹴而就,而是一个持续学习、不断精进的过程。本书的第三部分将聚焦于程序员的成长路径和职业发展。 反馈循环的构建: 进步离不开有效的反馈。本书将探讨如何主动寻求和利用反馈,无论是来自同事的代码评审,还是来自用户的实际使用。我们将学习如何从批评中学习,如何改进自身,以及如何将反馈转化为成长的动力。 沟通与协作的艺术: 软件开发从来不是一个人的战斗。卓越的程序员必须具备良好的沟通和协作能力。本书将分享如何清晰地表达技术观点,如何有效地与非技术人员沟通,以及如何在团队中发挥积极作用,共同推动项目进展。 职业生涯的规划: 成为一名卓越程序员,不仅仅是技术上的精湛,也包括职业生涯的深思熟虑。我们将探讨如何设定职业目标,如何选择适合自己的技术栈,如何在职业生涯的不同阶段进行规划和发展,以及如何保持对技术的热情和好奇心。 工程伦理与责任: 随着技术力量的增强,程序员肩负的责任也日益重大。本书将触及工程伦理的议题,例如软件的安全性、隐私保护、对社会的影响等,引导读者思考作为一名技术人员的道德义务。 保持好奇与探索: 技术的世界广阔无垠,充满着未知与可能。保持一颗好奇的心,勇于探索新技术、新领域,是卓越程序员永葆活力的源泉。本书将鼓励读者拥抱变化,持续学习,不断挑战自我,在代码的世界里,创造更多的可能。 《卓越程序员密码》将是一本陪伴您成长的伙伴,它提供的不仅仅是知识,更是一种思维的启迪,一种方法的指引,一种精神的激励。通过阅读本书,您将能够更深刻地理解代码背后的逻辑,更有效地解决复杂的编程问题,更从容地应对技术挑战,最终,迈向卓越程序员的殿堂,解锁属于您自己的代码艺术与科学的无限可能。
“图灵程序设计丛书:卓越程序员密码”这个书名,真的给我一种“武林秘籍”的感觉,让人充满好奇。我一直觉得,真正的编程高手,不仅仅是代码写得快,更重要的是他们对代码的理解、对工程的把握,以及那种对质量的极致追求。这本书,恰恰击中了我的这种需求。我翻开它,并没有看到那些浮夸的承诺,而是被一种沉静而有力的叙述所吸引。 书中的内容,让我感觉像是被带进了一个经验丰富的程序员的内心世界,看到了他们是如何思考、如何解决问题、以及如何不断自我提升的。它并没有回避那些在实际开发中经常遇到的难题,比如如何处理复杂的业务逻辑、如何进行性能优化、如何在不同技术栈之间进行权衡等等。但与众不同的是,它不是简单地给出解决方案,而是深入分析问题的根源,并引导读者去思考不同的可能性,去选择最适合的路径。 我尤其喜欢书中对“代码质量”的探讨。它不仅仅是关于语法正确、bug少,更是关于代码的可读性、可维护性、可扩展性,以及它能否长久地为业务服务。书里的一些章节,让我对之前一些习以为常的做法有了全新的认识,甚至开始反思自己的编码习惯。它还穿插了许多关于软件架构、设计模式的讨论,但不是那种生硬的理论灌输,而是结合实际项目,让你深刻理解这些概念的价值和应用场景。 这本书让我感觉,它不是在教你“怎么做”,而是在启发你“为什么这么做”以及“如何做得更好”。对于渴望在编程道路上走得更远、做得更出色的开发者来说,这本书绝对是一笔宝贵的财富。我还在慢慢品味其中的每一个章节,感受其中的智慧,相信它会成为我职业生涯中一本重要的参考书。