learn.lianglianglee.com/专栏/软件工程之美/25 有哪些方法可以提高开发效率?.md.html
2022-05-11 18:57:05 +08:00

1201 lines
34 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<!-- saved from url=(0046)https://kaiiiz.github.io/hexo-theme-book-demo/ -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<link rel="icon" href="/static/favicon.png">
<title>25 有哪些方法可以提高开发效率?.md.html</title>
<!-- Spectre.css framework -->
<link rel="stylesheet" href="/static/index.css">
<!-- theme css & js -->
<meta name="generator" content="Hexo 4.2.0">
</head>
<body>
<div class="book-container">
<div class="book-sidebar">
<div class="book-brand">
<a href="/">
<img src="/static/favicon.png">
<span>技术文章摘抄</span>
</a>
</div>
<div class="book-menu uncollapsible">
<ul class="uncollapsible">
<li><a href="/" class="current-tab">首页</a></li>
</ul>
<ul class="uncollapsible">
<li><a href="../">上一级</a></li>
</ul>
<ul class="uncollapsible">
<li>
<a href="/专栏/软件工程之美/00 开篇词 你为什么应该学好软件工程?.md.html">00 开篇词 你为什么应该学好软件工程?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/01 到底应该怎样理解软件工程?.md.html">01 到底应该怎样理解软件工程?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/02 工程思维:把每件事都当作一个项目来推进.md.html">02 工程思维:把每件事都当作一个项目来推进.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/03 瀑布模型:像工厂流水线一样把软件开发分层化.md.html">03 瀑布模型:像工厂流水线一样把软件开发分层化.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/04 瀑布模型之外,还有哪些开发模型?.md.html">04 瀑布模型之外,还有哪些开发模型?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/05 敏捷开发到底是想解决什么问题?.md.html">05 敏捷开发到底是想解决什么问题?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/06 大厂都在用哪些敏捷方法?(上).md.html">06 大厂都在用哪些敏捷方法?(上).md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/07 大厂都在用哪些敏捷方法?(下).md.html">07 大厂都在用哪些敏捷方法?(下).md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/08 怎样平衡软件质量与时间成本范围的关系?.md.html">08 怎样平衡软件质量与时间成本范围的关系?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/09 为什么软件工程项目普遍不重视可行性分析?.md.html">09 为什么软件工程项目普遍不重视可行性分析?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/10 如果你想技术转管理,先来试试管好一个项目.md.html">10 如果你想技术转管理,先来试试管好一个项目.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/11 项目计划:代码未动,计划先行.md.html">11 项目计划:代码未动,计划先行.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/12 流程和规范:红绿灯不是约束,而是用来提高效率.md.html">12 流程和规范:红绿灯不是约束,而是用来提高效率.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/13 白天开会,加班写代码的节奏怎么破?.md.html">13 白天开会,加班写代码的节奏怎么破?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/14 项目管理工具:一切管理问题,都应思考能否通过工具解决.md.html">14 项目管理工具:一切管理问题,都应思考能否通过工具解决.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/15 风险管理不能盲目乐观凡事都应该有B计划.md.html">15 风险管理不能盲目乐观凡事都应该有B计划.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/16 怎样才能写好项目文档?.md.html">16 怎样才能写好项目文档?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/17 需求分析到底要分析什么?怎么分析?.md.html">17 需求分析到底要分析什么?怎么分析?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/18 原型设计:如何用最小的代价完成产品特性?.md.html">18 原型设计:如何用最小的代价完成产品特性?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/19 作为程序员,你应该有产品意识.md.html">19 作为程序员,你应该有产品意识.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/20 如何应对让人头疼的需求变更问题?.md.html">20 如何应对让人头疼的需求变更问题?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/21 架构设计:普通程序员也能实现复杂系统?.md.html">21 架构设计:普通程序员也能实现复杂系统?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/22 如何为项目做好技术选型?.md.html">22 如何为项目做好技术选型?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/23 架构师:不想当架构师的程序员不是好程序员.md.html">23 架构师:不想当架构师的程序员不是好程序员.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/24 技术债务:是继续修修补补凑合着用,还是推翻重来?.md.html">24 技术债务:是继续修修补补凑合着用,还是推翻重来?.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/软件工程之美/25 有哪些方法可以提高开发效率?.md.html">25 有哪些方法可以提高开发效率?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/26 持续交付:如何做到随时发布新版本到生产环境?.md.html">26 持续交付:如何做到随时发布新版本到生产环境?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/27 软件工程师的核心竞争力是什么?(上).md.html">27 软件工程师的核心竞争力是什么?(上).md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/28 软件工程师的核心竞争力是什么?(下).md.html">28 软件工程师的核心竞争力是什么?(下).md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/29 自动化测试如何把Bug杀死在摇篮里.md.html">29 自动化测试如何把Bug杀死在摇篮里.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/30 用好源代码管理工具,让你的协作更高效.md.html">30 用好源代码管理工具,让你的协作更高效.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/31 软件测试要为产品质量负责吗?.md.html">31 软件测试要为产品质量负责吗?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/32 软件测试:什么样的公司需要专职测试?.md.html">32 软件测试:什么样的公司需要专职测试?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/33 测试工具为什么不应该通过QQ微信邮件报Bug.md.html">33 测试工具为什么不应该通过QQ微信邮件报Bug.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/34 账号密码泄露成灾,应该怎样预防?.md.html">34 账号密码泄露成灾,应该怎样预防?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/35 版本发布:软件上线只是新的开始.md.html">35 版本发布:软件上线只是新的开始.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/36 DevOps工程师到底要做什么事情.md.html">36 DevOps工程师到底要做什么事情.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/37 遇到线上故障,你和高手的差距在哪里?.md.html">37 遇到线上故障,你和高手的差距在哪里?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/38 日志管理:如何借助工具快速发现和定位产品问题 .md.html">38 日志管理:如何借助工具快速发现和定位产品问题 .md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/39 项目总结:做好项目复盘,把经验变成能力.md.html">39 项目总结:做好项目复盘,把经验变成能力.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/40 最佳实践:小团队如何应用软件工程?.md.html">40 最佳实践:小团队如何应用软件工程?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/41 为什么程序员的业余项目大多都死了?.md.html">41 为什么程序员的业余项目大多都死了?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/42 反面案例:盘点那些失败的软件项目.md.html">42 反面案例:盘点那些失败的软件项目.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/43 以VS Code为例看大型开源项目是如何应用软件工程的.md.html">43 以VS Code为例看大型开源项目是如何应用软件工程的.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/44 微软、谷歌、阿里巴巴等大厂是怎样应用软件工程的?.md.html">44 微软、谷歌、阿里巴巴等大厂是怎样应用软件工程的?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/45 从软件工程的角度看微服务、云计算、人工智能这些新技术.md.html">45 从软件工程的角度看微服务、云计算、人工智能这些新技术.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/一问一答第1期 30个软件开发常见问题解决策略.md.html">一问一答第1期 30个软件开发常见问题解决策略.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/一问一答第2期 30个软件开发常见问题解决策略.md.html">一问一答第2期 30个软件开发常见问题解决策略.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/一问一答第3期 18个软件开发常见问题解决策略.md.html">一问一答第3期 18个软件开发常见问题解决策略.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/一问一答第4期 14个软件开发常见问题解决策略.md.html">一问一答第4期 14个软件开发常见问题解决策略.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/一问一答第5期 22个软件开发常见问题解决策略.md.html">一问一答第5期 22个软件开发常见问题解决策略.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/学习攻略 怎样学好软件工程?.md.html">学习攻略 怎样学好软件工程?.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/特别放送 从软件工程的角度解读任正非的新年公开信.md.html">特别放送 从软件工程的角度解读任正非的新年公开信.md.html</a>
</li>
<li>
<a href="/专栏/软件工程之美/结束语 万事皆项目,软件工程无处不在.md.html">结束语 万事皆项目,软件工程无处不在.md.html</a>
</li>
</ul>
</div>
</div>
<div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseover="add_inner()" onmouseleave="remove_inner()">
<div class="sidebar-toggle-inner"></div>
</div>
<script>
function add_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.add('show')
}
function remove_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.remove('show')
}
function sidebar_toggle() {
let sidebar_toggle = document.querySelector('.sidebar-toggle')
let sidebar = document.querySelector('.book-sidebar')
let content = document.querySelector('.off-canvas-content')
if (sidebar_toggle.classList.contains('extend')) { // show
sidebar_toggle.classList.remove('extend')
sidebar.classList.remove('hide')
content.classList.remove('extend')
} else { // hide
sidebar_toggle.classList.add('extend')
sidebar.classList.add('hide')
content.classList.add('extend')
}
}
function open_sidebar() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.add('show')
overlay.classList.add('show')
}
function hide_canvas() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.remove('show')
overlay.classList.remove('show')
}
</script>
<div class="off-canvas-content">
<div class="columns">
<div class="column col-12 col-lg-12">
<div class="book-navbar">
<!-- For Responsive Layout -->
<header class="navbar">
<section class="navbar-section">
<a onclick="open_sidebar()">
<i class="icon icon-menu"></i>
</a>
</section>
</header>
</div>
<div class="book-content" style="max-width: 960px; margin: 0 auto;
overflow-x: auto;
overflow-y: hidden;">
<div class="book-post">
<p id="tip" align="center"></p>
<div><h1>25 有哪些方法可以提高开发效率?</h1>
<p>你好,我是宝玉,今天我想与你讨论一个每个开发人员和项目管理者都关心的话题:如何提高开发效率。</p>
<p>我其实也一直很关注这个话题,收集了很多方法让自己工作变得卓有成效。通过对这些方法的应用,我也可以算得上是一个高效的程序员:曾一个人在很短时间完成了飞信 Web 版客户端;在 DePaul 上学之余,帮学校完成了在线教学播放器系统的改造;三个月时间帮公司完成了主站从 jQuery 到 React 的迁移。</p>
<p>如果让我对学过的这些方法做个整理和总结,再进一步精选提炼,我觉得对我影响最大的是“积极主动”、“以终为始”和“要事第一”这几条看似简单的工作原则。</p>
<h2>积极主动,行动起来改变自己</h2>
<p>相信你也和我有过相同的经历。成为一个高效程序员,最大的阻力不是来自于不知道方法,而是自己的消极心态。遇到进度延迟、效率低下之类的问题,你就会下意识觉得:</p>
<ul>
<li>
<p>时间进度太紧了;</p>
</li>
<li>
<p>我已经尽力了;</p>
</li>
<li>
<p>最近加班太多了没精神;</p>
</li>
<li>
<p>产品经理太不靠谱了,需求没想清楚,害的我瞎忙活。</p>
</li>
</ul>
<p>是的,你也知道这些答案都很消极负面,可是怎么控制自己不这么想呢?首先你要知道,无论这些事情的本质责任在于环境还是个人,抱怨排斥的心态对于实际工作的改进是没有任何帮助的。</p>
<p>当然,很多人也知道抱怨没用,但具体怎样才能做到不抱怨,并且积极主动呢?史蒂芬・柯维写在他的《高效能人士的七个习惯》书中,对这个问题提到了两个行之有效的建议,我们可以结合着软件开发来分析一下。</p>
<h4>想想再回应</h4>
<p>我还记得第一次有人给我介绍单元测试很好用,能让你效率更高、代码质量更好时,我的第一反应是不可能,这样明明要多写很多代码,怎么可能会高效?</p>
<p>于是我有一段时间是很排斥的,直到后来参与一个已经有单元测试的项目,尤其是在重构代码的时候,我发现修改了大量代码后,程序还是很稳定,当时便觉得应了网友的那句话,“真香”!</p>
<p>每个人对于外界的刺激都会做出反应,本能的或者习惯性的,就像我前面举的例子,遇到事情会本能的觉得都是外部原因。如果一直这样,那就会进入恶性循环,变得更加消极麻木。</p>
<p>但如果在回应之前,给自己一点时间想想,站在积极的方面理性思考一下,就可以去控制你的本能反应。</p>
<p>所以很多次,就在我脱口而出“不可能”或者“不行”的时候,我提醒自己再想想。于是我会改口说:“我试试”、“我再想想”。这样很多次提醒自己以后,会一点点由“不可能”的本能变成“我想想”的习惯。</p>
<p>后来有人跟我说 CI持续集成很好我思考过了之后进行了尝试在 Github 上建了一个项目,把 CI 搭起来试了一下,觉得真的是很好。如果我还是秉持着以前的消极心态,不知道又要晚多久才能去尝试。</p>
<h4>减少关注圈,扩大影响圈</h4>
<p>我关注很多事情,比如编程语言、明星八卦、国家大事,这些都是“关注圈”。而这其中,要区分哪些事,是我可以影响和掌控的,这些事则是“影响圈”。</p>
<p><strong>不要总盯着自己无法改变的部分,你需要要多花时间精力在影响圈上。</strong></p>
<p>比如说,我不能改变 996至少我可以利用这时间多学习一点找机会换一个更好的环境我不能要求每个人都写单元测试但是我自己的代码写了单元测试这样项目质量更好了我也更有价值我不能决定跟什么样的人一起共事但是我愿意跟他们分享我的经验他们成长了我也受益。</p>
<p>工作一段时间后,你也可以尝试去扩大自己的影响圈。</p>
<p>比如说,很多程序员像我一样,有过不少因为产品经理需求没想清楚导致返工的经历,后来我就格外关注产品设计相关的知识,业余时间自己学习了不少,这就相当于扩大了我的影响圈。</p>
<p>所以后来产品经理给我一个需求,我不需要在开发完成后才抱怨他不靠谱,而是在给我需求的时候就去跟他讨论,是不是有可能没想清楚。</p>
<p>当你不仅仅局限于程序员的角色思维,扩大了影响圈之后,你就可以试着向产品经理提出很多有价值的建议,比如:</p>
<ul>
<li>
<p>这个布局在文字很长的情况下会有什么变化?</p>
</li>
<li>
<p>如果网络很慢,加载数据的时候应该显示什么?加载失败显示什么?</p>
</li>
<li>
<p>如果数据为空的时候这个列表应该显示什么?</p>
</li>
</ul>
<p>其实“减少关注圈,扩大影响圈”这个道理也很简单:<strong>接受不能改变的,改变能改变的,尽量扩大可改变项的范围。</strong></p>
<h2>以终为始,想清楚再开工</h2>
<p>如果对比一下我在十几年前作为一个新手程序员,和现在作为一个老手写代码有什么不同的话,我认为在新手阶段,我是拿到需求就开始写,写到一半发现好像不对,马上修改,好像还不太对,就这样反反复复,效率很低下。</p>
<p>而现在拿到一个需求,我会先仔细的分析需求文档,反复和产品经理确认各种细节,然后做个简单的设计,考虑清楚模块怎么设计,他们之间是什么关系,然后再写,写完还要加上测试代码。</p>
<p>你知道最大的区别是什么吗?我现在做一件事之前,会先想清楚“终”,然后才知道怎么“始”。所以我先搞清楚需求这个“终”,然后再设计规划出这个从“始”通向“终”的路线,最后从“始”出发写代码,一气呵成,不仅快,而且质量好。这就是“以终为始”。</p>
<p>要做到“以终为始”,就是在做事情的时候注意三点:<strong>目标、原则和计划。</strong></p>
<h4>经常停下来想想目标</h4>
<p>我刚毕业参加工作的时候,要开发一个内容管理系统,其中涉及有数据库访问,这就需要把数据表的字段和类对应起来,觉得太体力活了,于是我开始写数据库生成代码工具。而要想写代码生成工具,我还得学习 Winform 知识……就这样几个月过去了,关于这个系统的代码还是最开始的几行!</p>
<p>我的目标是写一个内容管理系统,结果却跑去写代码生成工具,这样怎么能做到高效呢?正确的做法应该是手动完成这几个类的生成,其实用不了几分钟,或者用一个现成的工具。如果觉得代码生成工具是个有意义的项目,应该另外立项,而不应该影响当前的项目。</p>
<p>这样的事情在我身上还发生过几次,所以我后来就逼着自己隔一段时间要停下来想想:我的原始目标是什么?我正在做的事是我的目标吗?如果不是,那么马上回到自己的原始目标去。</p>
<h4>制定原则</h4>
<p>其实大部分很好的编程方法都是需要坚持做才有效果的,比如说自动化测试代码,有时候时间进度一紧,就会来不及写,时间一长,就会欠下技术债务。</p>
<p>所以我给自己定了一个原则:增加一个功能,就要写自动化测试,如果来不及写,就给自己写一条 Ticket。</p>
<p>这条原则我坚持得很好,所以我的自动化测试代码得以坚持,从而真正帮助我做到高效开发。</p>
<p>你也可以给自己定一些原则,比如:</p>
<ul>
<li>
<p>“先运行再优化 (Make it Work Make It Right Make It Fast)”——也就是在优化代码之前,先用简单的方法实现,再考虑怎么优化,这样可以保证设计的简单,也可以避免你陷入技术细节中而忽视了原始目标。</p>
</li>
<li>
<p>“不复制粘贴代码 (Dont repeat yourself)”——复制粘贴会导致代码臃肿,不便于维护,提取抽象可以保持简洁。</p>
</li>
<li>
<p>“每个 Pull Request 要尽可能小”——这有助于把复杂的任务分解成几个简单的任务,简单的任务更容易高效完成。</p>
</li>
</ul>
<p>有原则了,你才能不忘初心,有始有终。</p>
<h4>公开自己的计划</h4>
<p>那么有了原则就够了吗?显然不是,有了原则,你还要坚定不移地去执行。如何执行呢?做计划。</p>
<p>刚开始工作时,我是害怕做计划的,怕计划了完不成,问到我工作的时间安排时,我会给一个模凌两可的答复,这其实导致了我在实际开发时,缺少进度压力,从而迷失在细节中导致延误进度。</p>
<p>后来我尝试做出了一些改变,把任务细化,做个简单计划,主动给出一个明确的时间点。有了计划指引和时间点的压力,会倒逼着自己时刻专注于目标是什么,“终”在哪里,还有多少没有完成,这样下来工作效率自然而然就会高起来。</p>
<p>通过在做事时,围绕着目标、原则和计划这三个点,反复地刻意地练习,也可以让你慢慢养成“以终为始”的好习惯。</p>
<h2>要事第一,把时间用在刀刃上</h2>
<p>作为程序员,其实大部分时间并不能专注写程序,总有各种各样的事情打断我们,比如,一会产品经理找你过去开个会确认个需求;一会测试过来找你重现一个 Bug一会还有同事过来请教你一个问题微信上老朋友找你叙叙旧突然生产环境出故障了需要马上去解决。</p>
<p>就这样一天下去,感觉一直在忙忙碌碌,其实并没有多少时间在写程序。这时候怎么办呢,对手头的事情进行优先级管理。</p>
<p>时间四象限也许你不陌生,就是把事情分成重要紧急、重要不紧急、紧急不重要、不紧急不重要四个象限,不同的事情有不同的应对策略。</p>
<ul>
<li><strong>重要紧急的事情马上处理</strong></li>
</ul>
<p>比如说,生产环境出故障了,测试环境部署失败了,这些都是重要并且紧急的事情,只能是马上处理。</p>
<ul>
<li><strong>重要不紧急的要事,要花最多的时间在上面</strong></li>
</ul>
<p>对代码重构、写自动化测试代码、确认清楚需求文档,这些事情都属于重要不紧急的事情,但是如果不及时处理,就有可能变成重要紧急的事情,比如不偿还技术债务,就可能会变成生产环境故障。</p>
<p>所以这部分事情我会多花时间,重点做。通常我会每段时间只专注做一两件重要的事,其他事情尽可能忽略,比如前一个阶段我主要的工作就是重构前端代码,这个阶段我就在忙排查性能隐患,至于其他事情,就先放一放。</p>
<ul>
<li><strong>紧急不重要的事凑一起集中做</strong></li>
</ul>
<p>像微信的消息通知,无关紧要的会议,请教一个不算很急的技术问题,这些都是紧急不重要的问题,然而却会占用我们大量时间。如果时间都用在这些事情上面,必然会占用在重要事情上所需的时间。</p>
<p>所以我有些小技巧也许你可以参考。比如我在专注干活时,会全屏幕、关掉所有消息通知,保证没有消息干扰,忙完一段后再去集中处理。</p>
<p>还有如果有人找我时我正在忙,如果他的事情不是重要紧急的,我会礼貌地告诉他我正好手头有点事情,大约多少时间后我主动去找他。相应的我也会尊重别人的时间,找别人的时候会先问一下:“你什么时候有 10 分钟左右时间,我想请教你一个问题?”</p>
<ul>
<li><strong>不重要不紧急的事情能不做就不做</strong></li>
</ul>
<p>不紧急不重要的事也很多,比如说我的 Mac 电脑突然提示我要更新系统了。我有点强迫症,以前系统一有要升级,我就迫不及待要升级到最新,结果一升级系统,半天就不能干活了。所以后来这种事情,就放在不重要的时间去做,比如周末、睡觉之前让它慢慢升级。</p>
<p>其实我在做开发的时候,觉得很多很杂的事情也不算太多,真正到后来转型做管理的时候,才真正体会到什么叫事情多而杂。但正是源于开发时期就形成的时间四象限方法的运用,让我可以在繁忙的时候,保证时间用在有价值的事情上。</p>
<p>要事第一,就是要保证你有限的时间用在最有价值的事情上。</p>
<h2>总结</h2>
<p>积极主动、 以终为始和要事第一,这三个原则以及其衍生出来的方法,正是帮助我逐步变成一个高效程序员的关键所在,希望也能对你有所帮助。</p>
<p>如果你已经学习了很多类似的原则或者方法,而觉得没什么效果,那也许只是因为没有尝试把它们变成习惯。你可以像我一样,把认同的好的原则或方法,通过反复的刻意练习,反复地提醒自己,训练成习惯,然后用习惯指导你的日常开发。</p>
<p>当然,这样的改变不会是一天两天就能完成,但也不用着急,因为习惯的养成需要时间的积累,才能变成条件反射。当你把好的原则或方法变成了直觉反应,自然就会成为一个高效的程序员。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/软件工程之美/24 技术债务:是继续修修补补凑合着用,还是推翻重来?.md.html">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/软件工程之美/26 持续交付:如何做到随时发布新版本到生产环境?.md.html">下一页</a>
</div>
</div>
</div>
</div>
</div>
</div>
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
</div>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"70997c71dc013cfa","version":"2021.12.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","si":100}' crossorigin="anonymous"></script>
</body>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-NPSEEVD756');
var path = window.location.pathname
var cookie = getCookie("lastPath");
console.log(path)
if (path.replace("/", "") === "") {
if (cookie.replace("/", "") !== "") {
console.log(cookie)
document.getElementById("tip").innerHTML = "<a href='" + cookie + "'>跳转到上次进度</a>"
}
} else {
setCookie("lastPath", path)
}
function setCookie(cname, cvalue) {
var d = new Date();
d.setTime(d.getTime() + (180 * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i].trim();
if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
}
return "";
}
</script>
</html>