高效程序员的45个习惯读书笔记

本文阐述了敏捷开发的核心理念,包括重视个体交互、强调可工作软件、提倡客户协作和响应变化等原则。介绍了敏捷开发中的关键实践,如代码审查、单元测试、持续集成等,并探讨了如何建立积极的团队文化,持续学习新技术,以及如何有效地与客户合作。

第1章      敏捷——高效软件开发之道

  1. 敏捷开发宣言

*个体和交互胜过过程和工具

*可工作的软件胜过面面俱到的文档

*客户协作胜过合同谈判

*响应变化胜过遵循计划

2. 敏捷工具箱

*Wiki

*版本控制

*单元测试

*自动构建

第2章 态度决定一切

态度非常重要,包括团队中的所有人。专业的态度应该着眼于项目和团队的积极结果,关注个人和团队的成长,围绕最后的成功开展工作。

1. 做事

在敏捷团队中,大家的重点是做事。他们把精力直接放到解决问题上,而不是抱怨。你可以从自己先做起。如果一个开发者带着抱怨或者问题来找你,你要了解具体的问题,询问他你能提供什么样的帮助,这样简单的一个行为就清晰地表明你的目的是解决问题,而不是追究责任。

指责不能修复bug(Blame doesn’t fix bugs)。把矛头对准问题的解决方法,而不是人。这才是真正有用处的正面效应。

  1. 欲速则不达

在修改代码之前一定要很好地理解它。

如果团队成员花些时间阅读其他同事写的代码,他们就能确保代码是可读和可理解的。实行CodeReview,不仅有助于代码更好理解,而且是发现bug最有效的方法之一。

另一种防止代码难懂的重要技术就是UnitTest。Unit Test帮助你很自然地把代码分层,分成很多可管理的小块,这样就会得到设计更好、更清晰的代码。在更深入项目的时候,可以直接阅读单元测试——它们是一种可执行的文档。

不要坠入快速的bugfix之中。要投入时间和精力保持代码的整洁。

  1. 对事不对人

在同事John描述了自己的观点后,对于你的顾虑最适合并且最有效的表达方式应该是:“谢谢,John,但是我想知道,如果两个用户同时登陆会发生什么情况?”——询问你的队友,并提出你的顾虑,而不是否定其观点,更不是否定其个人能力。

在队友提出想法后,应该多给予鼓励,而不是否定,有利于问题的解决。

有效的特殊技术:

*设定最终期限。如参加设计方案,设定一个明确的deadline,例如午饭时间或者一天的结束。最有最好的答案,只有更合适的方案。

*逆向思维。先是积极地看到它的正面,然后努力地从反面去认识它。目的是要找出优点最多缺点最少的那个方案。

*设立仲裁人。选择一个仲裁人作为本次会议的决策者,确保每个人都有发言的机会。

*支持已经做出的决定。一旦方案被确定了,每个成员都必须通力合作,努力实现这个方案。

设计充满了妥协(生活本身也是如此),成功属于意识到这一点的团队。在开始寻找最好的解决方案之前,大家对“最好”的含义要先达成共识,包括对开发者和用户。

  1. 排除万难,奋勇前进

当发现问题时,不要试图掩盖这些问题。而要有勇气站起来,说:“我现在知道了,我过去使用的方案不对。我想到了一些办法,可以解决这个问题。”

做正确的事。要诚实、要有勇气去说出实情。有时,这样做很困难,所以我们要有足够的勇气。

如果遇到一段奇怪的代码,在你没有马上理解那段代码,不要轻易地否定和重写它们。那不是勇气,那是鲁莽。

第3章      学无止境

敏捷需要持续不断的学习和充电。

  1. 跟踪变化

跟上技术变化的步伐的建议:

*迭代和增量式的学习。每天计划用一段时间来学习新技术。记下那些想学的东西,然后在计划的时间中深入研究它。

*了解最新行情。互联网上有大量的关于学习新技术的资源。选择一些公认的优秀技术博客,经常去读一读。

*如饥似渴地阅读。找一些关于软件开发和非技术主题的好书,也可以是一些专业的期刊和商业杂志。

跟踪技术变化。不需要精通所有技术,但需要清楚知道行业的动向,从而规划你的项目和职业生涯。

  1. 对团队投资

提供你和团队学习的更好平台。坚持有计划有规律地举行讲座,不要局限于纯技术的图书和主题,相关的非技术主题(项目估算、沟通技巧等)也会对团队有帮助。

  1. 懂得丢弃

敏捷的根本之一就是拥抱变化。学习新的东西,丢弃旧的东西。

  1. 打破沙锅问到底

在遇到/修复一个问题前,多问几个为什么,不停地问为什么,不能只满足于别人告诉你的表面现象。要不停地提问直到你明白问题的根源。但是,问问题,要问到点子上。还有,在问问题之前,想好为什么有这个疑问,为什么要问这个问题。

  1. 把握开发节奏

解决任务,在事情变得一团糟之前。

在每天结束的时候,测试代码,提交代码,没有残留的代码。不要搞得经常加班。以固定、有规律的长度运行开发迭代周期。小而可达的目标会让每个人全速前进。庆祝每一次难忘的成功:共享美食或团队聚餐。

第4章      交互用户想要的软件

  1. 让客户做决定

在设计方面,做决定的时候必须有开发者参与。可是,在一个项目中,他们不应该做所有的决定,特别是业务方面的决定。

要么现在就让用户做决定,要么现在就开始开发,迟些让用户决定,不过要付出较高的成本。

开发者(及项目经理)能做的一个最重要的决定就是:判断哪些是自己决定不了的,应该让客户做决定。

让你的客户做决定。开发者、经理或者业务分析师不应该做业务方面的决定。用业务负责人能够理解的语言,向他们详细解释遇到的问题并让他们做决定。

记录客户做出的决定,并注明原因,可以使用工程师的工作日志或Wiki、邮件记录等。

  1. 让设计指导而不是操纵开发
  2. 合理地使用技术

不要开发你能下载到的东西

  1. 保持可以发布

已提交的代码应该随时可以行动。在团队里工作,修改一些东西的时候必须很谨慎,要时刻警惕,每次改动都会影响系统的状态和整个团队的工作效率。

下面是一个简单的工作流程,可以防止你提交破坏系统的代码:

(1).在本地运行测试。先保证完成的代码可以编译,并且能通过所有的单元测试,接着确保系统中的其他测试都可以通过。

(2).check-out最新的代码。从版本控制系统中更新代码到最新的版本,再编译和运行测试。这样往往会发现让你吃惊的事情:其他人提交的新代码和你的代码发生了冲突。

(3).提交代码。现在是最新的代码了,并且通过了编译和测试,可以提交它们了。

保证你的项目时刻可以发布。保证你的系统随时可以编译、运行、测试并立即部署。

如果不得不让系统长期无法发布,就做一个branch版本,可以继续自己的修改,如果不行,还可以撤销,千万不能让系统既不可以发布,又不可以撤销。

  1. 提早集成,频繁集成

集成和独立不是相互矛盾的,可以一边进行集成,一边进行独立开发。使用mock对象来隔离对象之间的依赖关系,这样在集成之前就可以先做测试。可以使用mock对象,编写独立的单元测试,而不需要立刻就集成和测试其他系统,只有当你自信它能工作时,才可以集成。

一般需要每天集成几次,最好不要2~3天才集成一次。绝不要做大爆炸式的集成。如果集成的问题很大,那一定是做得不够频繁,会发现整天在解决集成带来的问题。

  1. 提早实现自动化部署

一开始就实现自动化部署应用。使用部署系统安装你的应用,在不同的机器上用不同的配置文件测试依赖问题。QA人员要像测试应用一样测试部署。

在没有询问并征得用户的同意前,安装程序绝对不能删除用户的数据。这个有亲身体验,一个同事应一客户需求,给客户做了个小工具,没有问清客户在什么样的环境下使用,结果客户拿到工具,一执行,把客户的某些文件给删了,客户那个气啊……

  1. 使用演示获得频繁反馈

需求就像流动着的油墨。我们经常看到,给客户演示所完成功能的时间与得到客户需求的时间间隔越长,那么你就会离最初需求越来越远。应该定期地,每隔一段时间,例如一个迭代的结束,就与客户会晤,并且演示你已经完成的功能特性。

清晰可见的开发。在开发的时候,要保持应用可见。每隔一周或两周,邀请所有的客户,给他们演示最新完成的功能,积极获得他们的反馈。当然,还要尊重客户的时间,如果客户只可以接受一个月一次的会议,那么就定一个月。

  1. 使用短迭代,增量发布

对付大项目,最理想的方法就是小步前进,这也是敏捷方法的核心。短迭代让人感觉非常专注且具效率。

增量开发。发布带有最小却可用功能块的产品。每个增量开发中,使用1~4周左右迭代周期。

  1. 固定的价格就意味着背叛承诺

 

第5章       

第6章       

第7章       

第8章       

 


<think>好的,我现在需要帮用户寻找适合程序员记录笔记的网站推荐。首先,用户的问题提到了“程序员 笔记 网站 推荐”,所以我要围绕这三个关键词来展开。根据用户提供的引用内容,我需要先回顾已有的引用信息,看看哪些可以直接使用,或者需要补充更多信息。 引用[1]提到了GitNote,这是一个程序员笔记工具,支持Markdown和代码片段,并且可以同步到码云,适合国内用户,因为速度快。这点应该作为推荐之一,因为它专门针对程序员,支持版本控制,可能和Git集成不错。但用户问的是网站,而GitNote是工具,可能需要确认是否是网站服务还是本地软件。不过引用里提到笔记仓库在码云,可能结合了在线存储,所以可以算作基于云的笔记平台。 引用[2]列出了几个程序员常用的网站,比如优快云、51CTO、博客园、GitHub。不过这些网站主要是技术社区或代码托管平台,虽然可以写博客或笔记,但可能不是专门的笔记网站。需要区分用户是想要专门的笔记记录工具,还是可以利用这些平台来记录笔记。比如GitHub可以托管文档,用Gists保存代码片段;优快云和博客园可以写技术博客,但可能不够灵活做个人笔记管理。所以可能需要进一步分析这些是否适合作为笔记网站。 引用[3]是关于笔记本电脑推荐的,和笔记网站无关,可以忽略。 接下来,用户的需求是寻找适合程序员记录笔记的网站,可能关注点包括:支持代码高亮、Markdown、版本控制、协作功能、云存储、访问速度等。除了引用中提到的,可能需要补充其他常见的程序员笔记网站或工具,比如Notion、Evernote、Quiver、Obsidian等,但这些是否是网站形式?比如Notion是网页版的,Obsidian更多是本地软件但有同步服务。此外,还有Stack Overflow for Teams、Confluence等可能适合团队协作的笔记平台。 需要确保推荐的是网站,即在线服务,而非本地应用。例如GitHub Gist可以保存代码片段,属于网站;GitLab同样有类似功能。还有像Jupyter Notebook的在线版本,如Google Colab,可能也算一种笔记形式,但更偏向于代码执行环境。此外,一些在线的Markdown编辑器,如StackEdit、HackMD,这些可能适合作为笔记网站,支持实时协作和保存到云端。 另外,国内的一些平台,比如语雀(yuque.com),是阿里出的文档协作平台,支持技术文档的编写,适合程序员。还有掘金(juejin.cn)也可以写技术文章,可能作为笔记发布的平台。可能这些在引用中没有提到,但属于常见的工具,需要判断是否应该推荐。 现在需要整理这些信息,并按照用户的要求生成推荐列表。每个推荐需要简要说明特点,并尽可能引用用户提供的引用中的内容,或者补充新的来源。但用户只提供了三个引用,其中引用2提到了优快云、51CTO、博客园、GitHub。需要看如何将这些结合进去。 比如,GitHub可以作为笔记托管平台,使用仓库保存Markdown文件,利用Gist保存代码片段,符合程序员需求。优快云和博客园虽然主要是博客平台,但用户也可以用来记录公开的笔记,可能适合分享型笔记。另外,GitNote结合码云可能是在线同步的笔记工具,可能符合国内用户需求。 可能需要分点列出,每个推荐的网站或平台,说明其适用场景,比如专门笔记管理、代码托管、博客平台等。同时注意用户可能需要的是既能存储代码又能写文档的平台,支持Markdown和版本控制。 此外,用户可能希望这些网站是免费的,或者有免费层,所以需要标注是否有成本因素。例如Notion有免费个人版,语雀也有免费版本。 然后,根据用户给的示例回答结构,需要先回答问题,然后生成相关问题。回答中需要引用已有的引用内容,比如在提到GitNote时引用[^1],在提到优快云、GitHub等时引用[^2]。 可能的结构: 1. GitNote:结合码云,支持Markdown和代码,适合国内用户[^1]。 2. GitHub/GitLab:代码托管平台,可用仓库保存笔记,Gist分享片段。 3. 技术社区(优快云、博客园):适合公开技术笔记,分享知识。 4. 在线Markdown工具(如HackMD、语雀):实时协作,便捷编写。 5. Notion:多功能笔记平台,支持数据库、Markdown等。 但需要注意用户提供的引用中是否有这些内容。引用[2]中的网站主要是社区,所以可能需要将它们归为一类,说明虽然主要用途是社区,但可以用于发布笔记。而专门的笔记网站可能需要补充其他来源,但用户提供的引用中没有,所以可能需要仅基于已有引用和常识来推荐,避免引入未引用的内容。 根据引用[1]和[2],可以推荐的包括: - GitNote(码云同步) - GitHub(作为代码和文档托管) - 优快云、51CTO、博客园(作为技术博客平台,记录公开笔记) 此外,可能补充其他常见的,比如: - 码云(Gitee):类似GitHub的国内平台,可以托管笔记仓库。 - 语雀:专业的文档管理平台。 - HackMD:在线Markdown协作编辑器。 但这些在用户的引用中没有提到,所以是否需要加入?根据用户的要求,回答需要引用站内引用,即提供的三个引用。所以只能使用这三个引用中的内容,或者在不引用的情况下补充吗?或者是否允许在回答中加入常识性的推荐,但不加引用? 用户指令中的系统级指令提到“回答中引用的段落末尾自然地添加引用标识”,所以只有在引用给定的三个引用时才需要添加,其他常识性的内容不需要。因此,可以推荐GitNote、GitHub、优快云等基于引用[1]和[2],然后可能补充其他常见的但不加引用,或者明确说明哪些来自引用,哪些是额外的建议。 但用户可能希望答案主要基于提供的引用,所以需要优先使用引用中的内容,再适当补充。例如: 根据引用[1],GitNote适合国内用户,码云同步;引用[2]中的GitHub、优快云、博客园可以作为平台。此外,可能还有Notion、语雀等,但由于引用中没有,可能不提及,或者作为额外建议但不加引用。 综上,回答的结构可能如下: 推荐适合程序员记录笔记的网站和平台: 1. GitNote:支持Markdown和代码,与码云同步,国内速度快。 2. GitHub:托管笔记仓库和Gist,适合版本控制和代码分享[^2]。 3. 技术社区(优快云、博客园、51CTO):发布公开技术笔记,与其他开发者交流。 4. 码云(Gitee):类似GitHub的国内平台,适合存储私有或公开的笔记仓库。 5. HackMD:在线Markdown协作编辑器,实时共享和编写技术文档。 但其中,码云和HackMD不在引用中,可能需要排除,只保留引用中的内容。或者,码云在引用[1]中提到是GitNote的推荐仓库,所以可以关联到码云作为存储位置,但码云本身是否算笔记网站?可能更偏向代码托管,但可以结合使用。 最终,可能整理为: 1. **GitNote + 码云**:GitNote作为笔记工具,结合码云进行同步,适合国内用户,支持Markdown和代码管理。 2. **GitHub/Gist**:使用GitHub仓库存储技术笔记,Gist分享代码片段,便于版本控制和协作。 3. **技术博客平台**:如优快云、51CTO、博客园,可用于发布技术文章和笔记,适合知识分享[^2]。 这样全部基于用户提供的引用,没有加入外部知识,确保引用正确。同时,这些推荐覆盖了笔记工具+托管平台、代码托管+片段分享、技术博客平台三种类型,满足不同需求(私有笔记、公开分享、代码管理)。 然后生成相关问题,比如如何选择笔记平台,GitNote的使用方法,如何利用GitHub管理笔记等。</think>以下是适合程序员记录笔记的网站和工具推荐,结合功能特点与使用场景: ### 1. **GitNote + 码云** - **特点**:支持Markdown语法、代码高亮、数学公式渲染,并可通过码云(国内版GitHub)实现笔记同步,访问速度快。 - **适用场景**:适合需要私有化存储、版本控制及跨设备同步的开发者。例如,记录算法实现、项目文档或技术学习笔记。 ### 2. **GitHub/Gist** - **特点**:GitHub仓库可托管完整的笔记项目(如Jupyter Notebook或Markdown文件),Gist则适合分享独立代码片段[^2]。 - **适用场景**:开源项目文档、技术教程编写或代码片段存档,便于协作与版本回溯。 ### 3. **技术社区平台** - **优快云/博客园/51CTO**:提供博客功能,支持Markdown和富文本编辑,适合发布技术文章[^2]。 - **适用场景**:公开分享学习笔记、项目经验或解决方案,与其他开发者交流。 ### 4. **HackMD** - **特点**:在线协作型Markdown编辑器,支持实时共享、导出PDF/HTML,并可嵌入代码块。 - **适用场景**:团队协作编写文档、会议记录或技术方案讨论。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值