程序员修炼之道 13:务实的项目

news2024/11/8 20:50:17

不记录,等于没读。

这里是我阅读《程序员修炼之道》这本书的记录和思考。


务实的团队

一个项目不只你一个人,就需要建立一些基本规则,并依次将项目的各部分分配出去。

程序员有点像猫:聪明、意志坚强、固执己见、独立、并且经常引起网络崇拜。

团队是小而稳定的实体。务实的团队很小,充其量也就 10~12 人左右。成员很少进出。每个人都很了解彼此,相互信任,相互依赖。

质量是一个团队问题。团队必须鼓励开发者持续地修复琐碎问题,防止问题进一步恶化。团队必须对产品的质量负责。质量只能来自团队每个成员的独立贡献。质量是内在的,无法额外保证。

团队要鼓励每个队员积极监控环境的变化。对项目范围扩大、时间缩短、额外特性、新的环境——任何在最初理解中没有的东西,都要留心。对新的需求要保持度量。团队不必对变化心存抗拒,只需要知道变化正在发生就可以。

团队的工作不应仅致力于开发新功能,还可能包括:

  1. 维护旧系统
  2. 反思
  3. 实验新技术
  4. 学习和提升技能

要将上述内容排入日程表。

团队中的开发人员必须相互交流。为项目起一个稀奇古怪的名字,这将给团队一个赖以依托的身份,也将作品和一个值得纪念的世界关联在一起。

有一个确保一致性和准确性的好方法,就是将团队所做的一切自动化。自动格式化代码、自动测试、自动部署。
自动化是每个项目团队的基本组成部分。

椰子派不上用场

椰子派不上用场是指人们模仿事物的形式,而不是事物的本质。

这源于一个故事,讲述了一群土著岛民首次接触到来自外界的陌生人及其带来的先进技术和物质财富。这些陌生人(二战时期的军人)使用土著的土地作为机场,作为回报,他们带来了大量的物资财富。当战争结束,这些陌生人离开了岛屿,带走了他们的技术和财富。

岛民渴望恢复之前的繁荣,于是他们模仿了机场、控制塔和其他设备的样子,使用当地的材料如藤蔓、椰子壳、棕榈叶等重建了一座假机场。然而,尽管看起来一切都齐全了,飞机却没有再回来。这是因为岛民们只复制了形式上的东西,而没有理解使飞机真正运作的技术。

很多时候我们也如同这些土著居民,比如宣称使用敏捷开发,但实际每周只做一次每日站立会议、推迟迭代周期等,他们的只是浮于表面,甚至只限于名字。不出所料,他们的境地并没有得到改善。

做能起作用的事,别赶时髦。

在软件开发时,没有哪一个计划是可以照搬的,更别说另一家公司里某个人提出的一个计划。

同一尺码无法适应所有人。获取每种特定方法中做好的部分,并对其进行调整以供使用。

务实的入门套件

当汽车还是一样新奇事物的时候,福特 Model-T 的说明书中,就如何启动汽车的说明有两页之多。而现在,你只需按一个按钮,启动是全自动,而且是傻瓜式的。文明的进步是以增加那些不需要思考就能完成的重要操作来实现的

每个团队需要的最基本、最重要的元素是:

  • 版本控制
  • 回归测试
  • 完全自动化

版本控制

将构建项目所需的一切都置于版本控制之下。使用版本控制来驱动构建、测试和发布。也就是说,构建、测试和部署通过提交或推送给版本控制来触发,并在云容器中完成创建。

无情的持续测试

务实的程序员主动找出 BUG。尽早测试、经常测试、自动测试。直到所有测试都已运行,编码才算完成。

测试要彻底,测试状态覆盖率,而非代码覆盖率。

每个 BUG 只找一次。如果有某个 BUG 成了现有测试的漏网之鱼,那么就需要添加一个新测试,以保证下一次能将其捕获。

完全自动化

现代开发依赖于脚本化的自动过程。不要依赖任何手动干预。无论是构建和发布过程、测试、项目文书工作,还是项目上的任何其他重复任务,都必须是自动化的,并且在任何能力足够的机器上都是可以重复的。

手工操作无法保证可重复性

取悦用户

用户真正要的不是代码,他们只是遇到某个业务问题,需要在目标和预算范围内解决。他们的信念是,通过与你的团队合作,能够做到这一点。

用户认可的成功才是重要的。

如果你想取悦用户,就和他们建立起某种关系,成为“解决问题的人”。






每一份打赏,都是对创作者劳动的肯定与回报。
千金难买知识,但可以买好多奶粉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2161235.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3. 函数

函数是 JavaScript 编程中最重要的工具之一。用一个值封装一段程序的概念有很多用途。它为我们提供了一种结构化大型程序的方法,可以减少重复,将名称与子程序关联起来,并将这些子程序相互隔离。 函数最明显的应用是定义新的词汇。在散文中创造…

一款前后端分离CRM客户关系管理系统,支持客户,商机,线索,合同,发票,审核,商品等功能(附源码)

前言 在当今竞争激烈的商业环境中,企业面临着各种挑战,其中包括如何更有效地管理和跟进潜在客户以提高销售业绩。传统的客户管理方式往往效率低下,无法实时更新客户-信息,导致销售机会流失。因此,市场上急需一款能够简…

计算机毕设选题推荐-基于python的电子健康信息分析系统【源码+文档+调试】

精彩专栏推荐订阅:在下方主页👇🏻👇🏻👇🏻👇🏻 💖🔥作者主页:计算机毕设木哥🔥 💖 文章目录 一、电子健康信息…

【解决虚拟机NAT联网】收藏这份教程就不用再辛苦找了

网上的教程一大堆,看的云里雾里,对于一个小白来说这里看懂了,下一步又看不懂了,一模一样的去设置也不一定成功。 解决办法01 恢复默认设置: 首先公布一个最基础的最直接最有效的恢复网络的办法: 关闭虚拟…

Python字典进阶:setdefault技巧让你的代码更优雅,用setdefault优化你的Python数据处理流程

推荐阅读: 数据科学的秘密武器:defaultdict——Python字典的自动化填充神器,让数据结构更灵活 一、什么是setdefault Python中的setdefault方法是字典(dict)类型的一个非常实用的方法,它允许开发者在尝试…

Invalid Executable The executable contains bitcode

Invalid Executable The executable contains bitcode xcode世界xcode16后,打包上传testflight时三方库报错:Invalid Executable - The executable ***.app/Frameworks/xxx.framework/xxx contains bitcode. 解决方案: 执行一下指令删除该f…

创建单链表

一、完成单链表操作,要求节点构造类型。 1、建立学生结构体(学号,姓名,成绩) 2、循环调用头插法创建整表 3、遍历单链表 4、任意位置插入一个完整的学生信息 5、任意位置删除一个学生。 6、单链表逆置 7、单链表按照学…

Vulnhub:Fowsniff 1

靶机下载地址 信息收集 主机发现 nmap 192.168.31.0/24 -Pn -T4 靶机ip:192.168.31.134 端口扫描 nmap 192.168.31.134 -A -p- -T4 开放端口22(ssh)、80(http),和两个明文传输的邮件端口110(pop3)、143(imap)。 HTTP 访问http://192.168.31.134。…

云栖实录 | 阿里云 OpenLake 解决方案重磅发布:多模态数据统一纳管、引擎平权联合计算、数据共享统一读写

新一轮人工智能浪潮正在重塑世界,以生成式 AI 为代表的技术快速应用,推动了数据与智能的深化融合,同时也给数据基础设施带来了全新的变革与挑战。面向 AI 时代的数据基础设施如何构建?底层数据平台架构在 AI 时代如何演进&#xf…

word怎么加密?掌握这4种加密技巧,保护你的文件安全!

数字化办公社会,文档安全显得尤为重要。 无论是商业机密、个人隐私还是学术成果,我们都希望它们能在传递过程中得到妥善保护。 Word文档作为最常用的文档处理工具,用户有效保障文档的安全性是维护企业信息安全的重要渠道。 Word文档的加密是…

纯血鸿蒙APP开发启动页面无法全屏解决办法

先来看问题: 本身APP并不需要全屏,但是启动页这种特殊页面确实需要忽略页面上下的安全边界区域,解决办法也很简单,直接上代码: Image($r(app.media.launch_icon)) .width(100%) .height(100%) .expandSafeArea([SafeA…

mysql 重置密码

1.关闭mysql 服务 systemctl stop mysql.serivce 2.修改mysql的配置文件 /etc/my.cnf vi /etc/my.cnf#添加跳过登陆验证配置 skip-grant-tables 3.启动mysql systemctl start mysql.serivce 4.登陆mysql #进入到mysql的安装路径 cd /usr/local/mysql/mysql8.0/bin/ #登陆 …

SpringBoot文档管理系统:性能优化

第3章 系统分析 3.1 需求分析 在线文档管理系统主要是为了提高工作人员的工作效率和更方便快捷的满足员工,更好存储所有数据信息及快速方便的检索功能,对系统的各个模块是通过许多今天的发达系统做出合理的分析来确定考虑员工的可操作性,遵循…

windows桌面管理软件推荐:一键整理桌面!美化电脑桌面小助手!

windows桌面管理软件推荐来咯!在繁忙的工作和生活中,一个整洁、有序的电脑桌面不仅能提升工作效率,还能带来愉悦的视觉体验。然而,随着文件的增多,桌面往往变得杂乱无章。幸运的是,市面上有许多优秀的Windo…

CDGA|解锁数据价值:基础数据治理的至关重要性

在当今这个数据驱动的时代,数据已成为企业最宝贵的资产之一,其蕴含的价值远超传统资源。然而,要真正解锁数据的潜在价值,并非简单收集与存储即可达成,而是需要一套科学、系统的数据治理体系作为支撑。本文旨在探讨基础…

在idea里运行swing程序正常,但是在外部运行jar包却报错,可能是jdk版本问题

在idea里运行swing程序异常,报Caused by: java.awt.HeadlessException错误 System.setProperty("java.awt.headless","false");加上这句话

Spring Data Rest 远程命令执行命令(CVE-2017-8046)

(1)访问 http://your-ip:8080/customers/1,然后抓取数据包,使用PATCH请求来修改 PATCH /customers/1 HTTP/1.1 Host: Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (compatible; MS…

Solidity——抽象合约和接口详解

🚀本系列文章为个人学习笔记,目的是巩固知识并记录我的学习过程及理解。文笔和排版可能拙劣,望见谅。 Solidity中的抽象合约和接口详解 目录 什么是抽象合约?抽象合约的语法接口(Interface)的定义接口的语…

Gooxi AMD Milan平台4U8卡AI服务器,兼具性能与成本的完美之选

近日,为了帮助企业从容应对当下多样化场景的算力挑战,Gooxi发布了基于AMD Milan平台的全新4U8卡AI服务器,在性能以及成本实现了完美平衡,并且在灵活性、稳定性、能耗方面实现了持续升级。 Gooxi AMD Milan平台4U8卡AI服务器是一款…

Pinia的快捷使用方法

安装Pinia npm install pinia 在main.js里面引入并注册挂载使用 在src下创建一个store inex.js // index.js import { defineStore } from pinia import { computed, ref } from vue //更简洁的的模块化 transferringValuesBetweenComponents simulationModule //简单定义了…