《整洁代码的艺术》—使命必达

本文围绕Python编程展开,介绍了应对编程复杂性的简化方法,阐述了80/20原则在软件优化中的应用,强调打造最小可行产品、编写整洁代码的重要性,指出过早优化的弊端,还提及心流状态、Unix原则、极简设计和专注的意义及实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单增加产出不是获得更大回报的办法。我们常这样认为:如果写更多代码,创建更多测试,读很多书,学习更多,思考更多,沟通更多,认识更多人,就能完成更多工作。但事实却是,如果不能少做事,就不能多做事。

鱼与熊掌不可兼得:在有限的空间里,不减一物则不能增一物。深思熟虑、追求极简是个人生产力的“圣杯”。

比尔盖茨有句名言:“车床操作顶尖高手的工资是普通操作员的几倍,但顶尖软件开发者的价值是普通软件开发者的一万倍。”因为软件开发高手执行的是一种高度杠杆化的活动,以正确的方式对计算机进行编程,可以取代成千上万的工种和数百万小时的有偿工作。

第一章 复杂性来源

对于编程新手,有些问题可能复杂、令人生畏:

  • 选择编程语言
  • 从数千个开源项目和大量现实问题中选出适合自己的
  • 决定使用哪些数据库
  • 决定在哪些先进技术上投入时间
  • 选择代码编辑器

这些复杂性来源会造成巨大混乱,我如何开始成为初学者常见问题。最好的开始方式不是找本编程书,阅读该编程语言的所有语法特征。最好的开始方式是找个实际代码项目,简单的项目,然后推动它完成。在完成一个完整的项目之前,不要阅读编程书或网络上随便找的教程。只需要设置好项目,用拥有的有限技能和常识开始编码。

在完成第一个项目的过程中,会遇到以下高度相关的问题。

  • 用哪个代码编辑器
  • 如何安装编程语言环境
  • 如何从文件中读取内容
  • 如何在程序中保存输入内容以供后用
  • 如何通过控制输入来获得所需输出

通过回答这些问题,将逐渐获得全面的技能组合。随着时间的推移,将能更好、更轻松的回答这些问题,也将能够解决更大的难题,并建立起自己的编程模式和概念洞察力。高级程序员也可以通过这个过程学习和提高—只是项目变得更大、更复杂。

复杂性无处不在,在项目的每个阶段都是如此。复杂性常带来隐性成本:新手因项目看不到曙光而颓然放弃。如何解决复杂性问题?

简化。在编程周期的每个阶段都追求简单和专注。

  • 梳理一天的工作,少做一些事,把精力集中在重要任务上。与其同时开始10个有趣的新项目,不如选择其一,把所有精力集中在完成当前项目上。

1.1 何为复杂性

在不同领域,复杂性有不同含义。

复杂性是由多个部分组成的,难以分析、难以理解或难以解释的一个整体。

复杂性描述了一个完整的系统或实体。因为复杂性使系统难以解释,所以常会引起挣扎和混乱。

1.2 项目生命周期的复杂性

项目生命周期的六个阶段:规划、定义、设计、构建、测试和部署。

即使非常小的软件项目,也可能要经历开发生命周期的全部六个阶段。每个阶段不一定只经历一次,在现代软件开发中,一般倾向于采用有更多迭代的实践方法,每个阶段都要经历多次。

规划

也被称为需求分析。规划阶段至关重要,因为它可以使我们免于浪费大量精力。

定义

定义阶段将规划阶段成果转化为合乎规定的软件需求。

设计

设计阶段的目的是起草系统的架构,决定提供所定义功能的模块和组件,并设计用户界面。

构建

构建阶段是许多程序员希望投入全部时间的地方。

测试

程序似乎能运行起来了,但并没有真正完成。必须针对不同用户输入和使用模型测试软件产品。这个阶段往往最重要,以至于许多从业者提倡使用测试驱动开发方法,在没有写完所有测试之前,不会开始实现功能。

部署

软件通过严格测试,是时候部署了。部署可以采取多种形式。应用程序也许会发布到市场上,软件包也许会发布到存储库,主要版本也许会公开发布。在更加迭代和敏捷的软件开发方法中,会进行持续部署。

1.3 软件和算法理论中的复杂性

从研究中产生的改进算法是人类最宝贵的技术资产之一。它使我们能够以更少的资源去解决同样的问题。我们真正站在了巨人的肩膀上。

1.4 学习中的复杂性

学得越多,越觉得自己的知识不足。我们永远不会在所有领域达到足够的掌握程度或感到准备好了。整个工作复杂得让人不知所措,对抗复杂性的技能:专注、简化、规模降低、缩减和极简主义。

1.5 过程中的复杂性

复杂性是效率的敌人。解决方案是极简主义:为了保持过程高效,必须从根本上剔除不必要的步骤和行动。

1.6 生活中的复杂性

如今,我们保持注意力和生产力所做的努力很容易被切得七零八落。我们采取措施是:关掉智能手机,强制自己不看社交媒体和喜欢的节目,但日复一日这样做很难。

有效的措施是:卸载社交媒体应用程序,而不是试图管理花在上面的时间。减少参与的项目和任务数量,而不是试图通过更多的工作来做更多的事情。深入研究一种编程语言,而不是花费大量时间在许多语言之间切换。

计算机科学教授卡尔·纽波特在优秀著作《深度工作:如何有效使用每一点脑力》中提到分心问题。

对需要深度思考的工作—如编程、研究、医学和写作的需求越来越大,而由于通信设备和娱乐系统的普遍使用,这些工作的时间供应越来越少。不断增加的需求遇到不断减少的供给,价格会上升。如果您有能力从事深度工作,您的经济价值就会增加。

深度工作的结果是延迟满足,而多数时候我们渴望的是即时满足。复杂性损害生产力,降低注意力。如果不及早控制复杂性,它将迅速消耗最宝贵的资源:时间。

第二章 80/20原则

2.1 80/20原则的基础概念

二八法则认为,大部分效果出自少数起因。二八法则受欢迎的原因有两个方面。第一个方面,只要能找出重要的事情,即导致80%结果的那20%的活动,并坚持不懈的专注于这些活动,二八法则就能让你同时保持轻松和高效。第二个方面,我们可以在很多情况下观察到这个原则,所以它具有相当大的可信度。

2.2 二八法则在软件优化中的应用

少部分代码函数占用了大部分运行时间。花费大量时间来优化琐碎多数,几乎不能改善整体运行时间,而应该优化关键少数

2.3 生产力

帕累托分布具备分形特征,即局部具有整体一样的分布特点。

造成结果差异来自于个体或者组织的具体行为,做同样的事情可以得到同样的结果。在改变行为之前,必须想清楚想要达到什么结果。

2.4 成功指标

假设你想增加收入,就需要找到其他人在这个行业成功的原因,并制定能控制和实施的可操作成功的指标。各个领域的关键成功指标不同。

成功指标分滞后指标和先导指标,先导指标是在滞后指标发生之前就可以预测其变化的度量标准。达成更多先导指标,滞后指标会因此而得到改善。

二八法则将使我们确定必须关注的活动,达成更多成功指标,尤其是先导指标,从而获得更多专业成就,这是最重要的。可以少花点时间在不那么重要的任务上。

我们应在对自己最重要的领域成为专才,把注意力集中在关键少数,忽略琐碎多数。

2.5 专注

在帕累托分布中,每个等级的增长都是指数级的,所以即使是生产力的小幅增长也会导致收入的大幅增长。提高生产力硅引致收入、幸福和工作乐趣的超线性改善。有人把这种现象称为“赢家通吃”。

2.6 对程序员的意义

在编程领域,帕累托分布的结果比其他领域更严重的偏于顶部。

  • 顶尖程序员能解决普通程序员无能为力的一些难题
  • 顶尖程序员写代码的速度可达普通程序员的10000倍
  • 顶尖程序员的代码缺陷较少
  • 顶尖程序员的代码易于扩展
  • 顶尖程序员会找到创造性解决方案

要成为顶尖程序员,必须专注于关键少数。要务之一是专注于写更多代码。

代码写的越多,就会写的越好。

代码写的越多,就越理解代码,言行举止越有专家模样。会结识水平更高程序员,接受更具挑战的编程任务,于是就会写更多的代码,变得更优秀。

持续记录写了多少行代码,并且优化这一指标。就当是达成每日代码平均量的游戏。

Python机器学习代码库TensorFlow.

自由开发两家网站:Upwork,Fiver.

自由开发者平均时薪51美元。大多数学员个把月就退出了,所以他们的收入甚至达不到平均水准。那些连续几个月每天从事自由开发工作的人,通常能够拿到每小时51美元的平均收入。只有少部分意愿强烈、全力投入的学员能够达到每小时100美元或更高收入。这些自由开发者学员的失败完全可以归咎于他们没有持久努力。

有一个简单的成功指标能确保最终成为1%-3%的顶尖自由开发者,那就是:完成更多的任务。多数人败于不够专注,即便他们手艺娴熟、充满智慧、人脉丰富,也无法与专注、投入、了解帕累托分布的程序员匹敌。

2.7 分形特征

帕累托分布具备分形特征,在生活和编程工作中有多种不同应用。最大的意义在于拥有二八法则思维方式,也就是说,不断尝试寻找少做事多获益的方法。

活动 开始应用二八法则思维,将很快在工作中发现许多这样的杠杆活动。

进步 无论位于帕累托分布哪个位置,利用成功习惯和专注的威力,就能“移向左边”,提升产出。很多人放弃在自己领域寻找成功指标,因为他们认为产出是一种随机概率的结果。专注所在领域成功指标,就能操控有利的可能性。拥有二八思维,会赢面大增。

2.8 实践技巧

  • 找到成功指标

确定工作领域,鉴别领域专家,照做朝头部20% 移动的任务活动。程序员指标也许是编写代码的行数,设定每日最低标准,达到最低标准之前绝不结束当天的工作。

  • 找到生命中大目标

把目标写下来,不清晰定义大目标,就不能在足够长的时间内坚持做同一件事。

  • 寻找较少资源成事的方法

如何在20%时间内获得80%的成果?

  • 反思自己的成功

做了什么带来巨大成功的事?多做。

  • 反思自己的失败

怎么少做导致失败的事?

  • 阅读著作

读更多书,就能模拟实践经验,而不必投入大量时间、精力实际做一遍。受教育程度极高的专家程序员解决问题比新手快10-100倍。

  • 改进和调优既有产品

与其发明新产品,不如改进现有产品。如果永远在创造新产品,不去改进优化旧产品,产品就永远平平无奇。

  • 微笑

保持乐观,很多事变得更容易。

  • 不做降低价值的事

第三章 打造最小可行产品

埃里克·莱斯的《精益创业:新创企业的成长思维》一书普及了“最小可行产品”(minimum viable product,MVP)的理念。

3.1 问题场景

隐身编程模式,即在没有得到潜在用户反馈的情况下完成项目。当程序处于隐身编程模式时,会出现一些问题,而MVP就是为了解决这些问题而产生的。

隐身编程模式最常见的六种问题:

  • 失去动力

在隐身编程模式中,疑问时常跳出来。在项目投注的热情足够多,时间推移,疑问越大。容易失去动力,造成项目无疾而终。

如果发布早期版本,用户的赞誉能够鼓舞我们继续坚持,来自用户的反馈也会激励改进产品、修正问题。

  • 分心

MVP能减少从点子到市场的时间,创造让更多及时反馈涌现的环境,重新专注起来,对抗分心问题。

  • 超时

MVP摈弃所有非必要特性,所以规划失误也会减少,进度更符合预期。

  • 缺乏回应

任何产品都极有可能被沉默以对—既没有正面反馈,也没有负面反馈。常见原因是产品没能交付用户需要的特定价值。

MVP更快的找到产品—市场契合点,基于MVP的开发直击客户的紧迫需求,提高客户的参与概率,从而获得他们对早期产品版本的反馈。

  • 错误假设

隐身编程模式失败的原因在于自己的错误假设。用MVP检测这些设想,响应用户反馈,节省时间和精力,降低妨害应用成功的可能性。

  • 不必要的复杂性

3.2 构建最小可行产品

解决上述问题的方案:构建一系列MVP。在真实市场中测试过MVP,分析出其成功原因后,就可以构建第二个MVP,添加另一些重要特性。通过一系列MVP来寻求正确产品形态的策略叫做快速原型。每个原型都基于上一次发布中的了解来构建,在最短时间以最小代价带来最多的反思。尽早和经常性发布,就可以尽早找到市场—产品契合点,确定产品需求和目标市场愿望。

采用MVP开发方法,每次新增一个特性,鉴别哪个特性应当保留、哪个特性应当剔除就变得重要。MVP创造过程的最后一步是对照测试:不向全体用户投放新迭代版本,只投放给一小部分用户,观察他们的显性和隐形反应。

  • 最小可行产品四大要点

功能 提供明确又好用的功能。

设计 设计精良,功能聚焦。支撑产品为市场提供价值。

可靠 确保编写了测试用例,严格测试代码中每个函数。

易用性 必须易于使用,功能清晰。聚焦和极简的产品方便做到这一点:只有一个输入框和一个按钮的页面。谷歌搜索引擎最早原型就是典范,这套设计沿用20年。

  • 最小可行产品好处

低成本验证假设

写代码和找缺陷时间大幅减少

很快获得反馈

维护成本降低,因为降低代码复杂度,开发新特性也变得容易

进度会加快

更快发布产品

不要纠结于创意的独特,有人实现,创意才会成功。成功者必然快速果断的行动。尽早发布、频繁发布,从用户处收集反馈,逐渐改进产品。保密只会限制成长的可能。

总结

设想产品,先思考用户需求再写代码。打造精心设计、交互流畅、易于使用的MVP,提供有价值的功能。专注于一事,摈弃非必要特性。尽早和频繁发布MVP,持续验证和添加新特性,不断改进。软件开发只不过是产品创造和价值交付过程中的一小步。

第四章 编写整洁和简单的代码

4.1 为何要写整洁代码

整洁代码易于阅读、理解和修改。人们更愿意给整洁代码添砖加瓦,协作的可能由此提升。因此,整洁代码能显著降低项目成本。正如罗伯特·马丁在《代码整洁之道》中指出:

事实上,读代码的时间与写代码的时间比例远超过10比1。不断阅读旧代码成了写新代码的一部分工作。因此,代码易于阅读,也就使其易于编写。

代码越多,由此增加的复杂性硅拖慢进度。当项目从100行代码膨胀到1000行代码时,细心思考,符合逻辑的将代码安排到各个模块、类或文件中,这种周到的做法会更有效率。

应总是编写经过深思熟虑和整洁的代码。

4.2 编写整洁代码的原则

改进代码、减少复杂度就是所谓“重构”。编写整洁代码主要在于坚守两点:懂得从头构造代码的最佳途径,以及隔段时间就回头修改代码。

17条原则:

  • 原则1:心怀全局

软件架构定义了软件元素的互动方式。良好的架构决策能大幅改进性能、可维护性和易用性。要构造良好的架构,思考全局。首先要实现什么特性。

全局思维是大幅降低应用复杂度的省时方法。

  • 原则2:站到巨人肩上

使用代码库往往能改进代码的运行效率。成百上千程序员用过的函数多半比自己写的很有可能优化过。而且,相对于自己写的代码,调用库函数的语句更易于理解,也会占用较少的项目空间。编程高手会用各种基础工具来大幅提升生产力,代码库就是其中之一。

  • 原则3:为人写代码,而不是机器

Python之类编程语言的唯一目标是帮助人类编写代码。编译器担当重任,把高层级代码翻译为机器能理解的低层级代码。


investment=10000
yraely_return=0.1
years=10

for year in range(years):
print(investment*(1+ yearly_return)**year)

整洁代码从根本上优化了人类的阅读体验。软件工程国际专家、畅销书《重构:改善既有代码的设计》作者马丁·福勒:傻瓜都能写出计算机能懂的代码,只有好的程序员才能写出人类能懂的代码。

  • 原则4:正确命名

有经验的程序员常常或明或暗的保有一套命名惯例共识。秉承惯例,大家都有好处:代码变得更易读、易懂,较少混乱。

命名规则:

选用描述性强的名称USD_to_EUR(amount)

选用没有歧义的名称dollar_to_eur

使用可拼写的名称 customer_list

使用命名常量 CONVENTION_RATE=0.9

  • 原则5:一以贯之的遵循标准

每种编程语言都有一套关于编写编程代码的明文或惯例规则。阅读Python的官方风格指南PEP8,其定义了正确的代码格式与缩进方式、断行方式、单字符串最大长度、注释的正确使用、函数文档格式,还有类、变量和函数的命名惯例。

通读风格指南可能会枯燥乏味。另一种学习惯例与标准的办法是让代码检查工具和集成开发环境。对于Python,这方面最好的项目是PyCharm的black模块。

  • 原则6:使用注释

写注释时,考虑为人类写代码原则

  • 原则7:避免非必要注释

判断注释是否必要:

不要写代码行内注释

不为显而易见的代码添加注释

不要注释掉旧代码,直接删除它

使用文档生成功能

  • 原则8:最小意外原则

系统中的组件应表现得就像用户预期的那样。

  • 原则9:别重复自己
  • 原则10:单一全责原则

每个函数都应当承担一件主要工作。

  • 原则11:测试

测试驱动开发是现代软件开发的组成部分

单元测试 编写一个单独应用,检查应用中每个函数接受不同输入时的正确输入/输出关系

用户验收测试 允许用户于受控环境中使用应用程序,可以观察用户行为

冒烟测试 确保软件质量

性能测试 检测应用程序是否满足甚至超过用户的性能要求,而不是测试其实际功能

承载规模扩张能力测试 检测程序是否有足够的承载规模扩张能力

  • 原则12:小即是美

小代码块是只需要较少的代码即可完成单个指定任务的代码

  • 原则13:德墨忒尔律

最大限度减少代码元素的相互依赖

得墨忒耳律的重要概念之一是将软件切分为最少两个部分:第一个部分定义对象;第二个部分定义操作。目的是维护对象与操作之间的松散耦合关系,修改其中之一时,不至于严重影响其他部分。
  • 原则14:不需要的代码

只写百分之百确定必须要的代码。代码为今天而写,不为明天而写。

  • 原则15:别用太多缩进
  • 原则16:使用指标

使用代码质量指标来持续跟踪代码复杂度。

  • 原则17:重构

养成习惯,清理遇到的每一段代码。不仅会改进代码让工作更轻松,还能练就编程大师的慧眼,看一眼就能评估代码的质量。

第五章 过早优化是万恶之源

5.1 6种过早优化的类型

优化代码无可厚非,但要有所付出,花更多编程时间,或者写更多行代码。应有所取舍。

  • 优化函数

在确知函数被使用的频率之前,别花时间优化

  • 优化特性

不增加非必要特性,不花时间优化这些特性

  • 优化规则

过早优化规划,试图找到没发生的问题的解决方案,可能妨碍有价值反馈的收集

  • 优化扩展性

没有用户基础,过早优化扩展性,严重干扰进度

  • 优化测试设计

给实验性代码添加测试会妨碍进度,没有遵守快速原型哲学

  • 优化面向对象的世界建设

面向对象法会引入非必要复杂性和过早的概念性优化

5.2 优化的6条提示

  • 先度量再改进

度量性能,才能知道可以改进和应当改进的地方

  • 运用二八法则

集中改进瓶颈帮助更有效优化代码

  • 算法优化

瓶颈可以通过调整算法和数据结构解决:

找到更好算法(图书、论文、百科)

针对具体问题调优算法

改进数据结构,集合代替列表,字典代替元组

  • 缓存

同类中间计算多次出现,缓存机制才有意义

两种缓存基础策略:

提前执行运算,结果放入缓存

运算出现时执行,结果放入缓存

  • 选择

不容易实现某个特性,转而实现另一个,考虑机会成本

  • 及时停止

性能优化最耗时,到达某个点之后,再试图改进纯粹浪费时间

第六章 心流

6.1 什么是心流

心流体验是一种完全沉浸于手头工作的状态:专注。

心流状态六个要素:

  • 注意力 完全专注
  • 行动 快速有效推进任务
  • 自我 停止自省、怀疑和恐惧
  • 控制 享受解决方案渐增的操控感
  • 时间 失去时间流逝感知力
  • 回报 专注于行动本身

6.2 如何达到心流状态

目标清晰、反馈及时、在机会和能力之间要有平衡点(挑战要适中)。

6.3 程序员的心流提示

手头始终要有实用代码项目 将学习时间70%分配给实用又有意思的项目,30%分配给阅读书籍、教程、观看课程视频。

开展符合目标的有趣项目 心流是一种兴奋状态,所以必须对工作兴奋起来才行。做对自己有意义的项目,会得到更多乐趣,更有可能成功,也更能乐观看待暂时的挫折。

发挥优势 发挥优势、磨练技能,忽视大部分劣势。

准备大块时间 读懂复杂项目需要时间,为了有节奏的开展工作。

杜绝分心 只做必须做的事。

获取高质量信息 输入越好,输出越好。阅读编程书籍,而不是博客文章。更好的做法阅读顶级刊物研究论文。

第七章 做好一件事 及其他Unix原则

7.1 Unix的崛起

Unix是一种设计哲学,它启发了包括Linux和macOS在内的流行操作系统。

世界各地的程序员能够合作构建由数百万行代码组成的庞大的Unix生态系统。支撑这等规模协作的哲学就是—只做一件事,做好这件事。

7.2 Unix哲学概览

Unix哲学的基本概念是打造易于扩展和维护的简明、精炼、模块化代码。

7.3 15条有用的Unix原则

  • 每个函数做好一件事
  • 简单胜于复杂

输入important this,《python 之禅》

  • 小即是美

与其编写大块代码,不如编写小函数,在这些小函数之间牵线搭桥。

  • 尽快打造原型

与MVP原则一致,避免持续添加特性、复杂度毫无必要的急剧提升、陷于追求完美的死循环中。

早失败,多失败,败而后能进。

  • 可移植性胜于效率

系统或程序能够在保持功能正常前提下从一个运行环境移植到另一个运行环境。

  • 在纯文本中保存数据

纯文本文件是人类可阅读的简单数据文件。常见的逗号分隔数值(CSV)格式就是纯文本文件格式的一种。

  • 使用杠杆获得优势

作为程序员,应当利用前辈们的集体智慧的杠杆作用,在实现复杂功能时使用库,而不是自己从头开发。

创造更好的软件,与更多人分享,部署更强的算力,更频繁的使用他人的库和软件。好程序员能快速写出好代码,优秀程序员则博采众长为己所用。

  • 避免使用强制式用户界面

强制式用户界面要求用户在进入主执行流之前必须与程序交互的界面,如SSH、top、cat、vim等,以及Python的input()函数之类编程语言特性。强制式用户界面限制了代码易用性,因为它们被设计为必须有人参与才能工作。

  • 把每个程序都写成过滤器

可以将一个程序的输出当作另一程序的输入。

  • 更差即更好

编写较少功能的代码常常是较好的实践方法。

  • 整洁代码胜于机灵代码
  • 将程序设计成能与其他程序相连接

程序不能隔绝于世。程序可能被他人或程序调用,执行任务。所以需要设计API,使与外部世界共同工作。

  • 编写健壮的代码

如果代码不易被破坏,就是健壮的代码。作为程序员,修改代码时可能就会破坏它。如果粗心的程序员都可以修改代码,且不会破坏其功能,这样的代码就是强固到足以应对修改。

令代码保持强固的方法之一是控制访问权限。

  • 尽早修复—但尽早暴露失败

虽然应当尽量修复代码中的问题,但不应隐藏无法修复的错误。错误会累积,与其秘而不宣,不如将修正不了的错误显示给用户看。

  • 避免手工操作—尽量编写能写程序的程序

机器学习和人工智能技术将编写程序来写程序的概念提升到新层次。智能机器由人类组装,后基于数据自行重写。技术上,机器学习模型是一种不断重写自身、直至其行为使一组适应函数达到最大化为止。

第八章 设计中的少即是多

8.1 移动电话演进过程中的极简主义

极简设计为智能手机应用的成功及其在当今世界的普遍使用铺平了道路。

8.2 搜索中的极简主义

谷歌首页上的一小幅广告能够带来数十亿次点击,而且会带来数十亿美元的营收,但谷歌没有任由这些广告将首页切割得七零八落,而是放弃短期营收机会。

8.3 拟物设计

用户时间是比屏幕空间更为稀缺的资源。

8.4 如何实现极简设计

  • 留白
  • 去除设计元素
  • 移除特性
  • 减少字体和颜色
  • 一以贯之

第九章 专注

熵定义了系统中随机性、无序性和不确定性的程度。感熵意味着高随机性和混沌。低熵意味着秩序和可预测性。系统的熵随时间推移而增加—从而导致高熵状态。

花时间细致规划行动阶段,设定具体目标,设计工作习惯和行动步骤,得到想要的结果。然后,将所有资源—时间、精力、金钱和人—聚于一处,直至计划达成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值