This commit is contained in:
louzefeng
2024-07-11 05:50:32 +00:00
parent bf99793fd0
commit d3828a7aee
6071 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,89 @@
<audio id="audio" title="轻松话题(一) | 4本值得一读再读的经典好书" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/dc/a1/dca60c8f94c6ee76370f7136deb5c1a1.mp3"></audio>
你好我是Chrono。
著名的文学家高尔基说过一句名言:“书籍是人类进步的阶梯。”
利用碎片时间学习固然很重要,但静下心来认真地读书却更加重要,它能够让你去主动思考、主动探索,更系统、更完整、更深入地获取知识。
为了能够让你在工作之余充充电提高一下自己今天我就暂且岔开话题不讲C++语言,而是开列一个清单,精选出几本我认为值得一读再读的技术类好书。
顺便说一句,“读书”最好是看纸质实体书,而不是电子版。
在现在的环境下,手机或者平板电脑实在是太“浮躁”了,在用它们阅读时,经常会被跳出的通知、消息打扰,而且“人性”使然,也很难控制自己不去点开其他的应用玩玩小游戏、看看短视频。
另外,这些设备大多是“主动发光”型的,长时间看会导致视觉疲劳,影响眼睛健康,还是纸质的书更好。只要在一个合适的光照环境下,冲一杯茶或者咖啡,给自己留出一段充足的闲暇时间,你就可以抛却世俗的喧嚣和烦恼,尽情地畅游在书的海洋。
闲话不多说了Its showtime。
## 《设计模式:可复用面向对象软件的基础》
软件开发类图书浩如烟海,但如果让我只推荐一本,那就只能是《设计模式:可复用面向对象软件的基础》。它是在我心目中**永远排在第一位**的技术书籍。
这本书出版得比较早1994年到现在已经超过25年了但是仍然没有过时。
在上个世纪90年代软件的开发还是处于比较“混沌”的状态虽然自发地出现了一些“习语”“惯用法”却没有能够很好地指导软件设计的通用原则。
这本书一出现就获得了无数的赞誉,犹如黑夜里的一盏明灯,为所有开发者指明了道路。
书里系统地总结了专家的经验,开创性地提出了“设计模式”的概念,只要遵循“模式”,就能够得到良好的设计。
其中阐述的23个设计模式已经被无数的软件系统所验证并且成为了软件界的标准用语比如单件、工厂、代理、职责链、观察者、适配器等等。
无论你使用什么语言无论你使用哪种范式无论你开发何种形式的软件都免不了会用到这些模式。而且有些模式甚至就直接成为了编程语言的一部分例如C++的iterator、Java的Observer
作为软件开发历史上里程碑式的著作、模式运动的开路先锋,我认为它是每一个精益求精的程序员都必须拥有的宝典和圣经,值得放在手边经常翻阅,随时随地获取设计灵感。
这本书要说缺点也是有的,就是论述太严谨。毕竟四位作者都是博士出身,看起来太有“论文范”了,很多话都需要反复琢磨,才能理解。但从另一方面看,这也是它的优点,几乎没有多余的文字,可以说是字字珠玑,绝非那些“白话”“大话”之类的书籍可比。
## 《C++标准程序库》
再回到C++领域,我认为**一定要看**的就是《C++标准程序库》。
讲C++语言的书有很多但讲C++标准库的却是屈指可数。因为标准库的庞大和复杂程度远远超过了语言本身,能把它“啃”下来就已经很不容易了,要把它用通俗易懂的形式讲出来,更是难上加难。
而这本书却“举重若轻”,不仅完整全面地介绍了标准库,而且还由浅入深、条理清楚,对库中每个组件的优缺点都分析得丝丝入扣,让人心悦诚服。内容的安排组织也详略得当,千余页的大部头作品读起来却毫不费力,不得不叹服作者的至深功力。
十几年前C++资料非常匮乏,当时我还对标准一无所知,偶然看到了本书的第一版,顿时有种如获至宝的感觉,当即“拿下”,回家仔细、反复研读,真的是“手不释卷”。
经过了这本书的“洗礼”我才真正地“脱胎换骨”透彻地理解了C++,开启了泛型编程、函数式编程的新世界大门。而我今天能够以这种方式与你聊天,绝对有它的功劳。
虽然现在C++相关的资料已经很多了但如果你想要成为C++“大伽”那么这本《C++标准程序库》必然是你成长之路上的“良师益友”。
## 《C++语言的设计与演化》
接下来要说的这本《C++语言的设计与演化》比较特别。
特别之一在于它是由C++语言之父亲手撰写的,能够直接与“造物者”本人对话,机会难得。
特别之二在于它并非直接描述语言特性而是以“回忆录”的形式介绍了C++语言的发展历史和设计理念,同时坦诚地反思了一些由于历史局限而导致的缺点和失误,视角非常独特。
这两个特别之处让它从众多语言类书籍中脱颖而出能够解答很多学习C++过程中的困惑。比如为什么C++会变成这个样子为什么要引进class、template关键字为什么会设计出那些奇怪的语法……知道了前因后果你就可以更深刻地理解C++。
阅读这本书时你还能“读史以明志”学习先驱者的经验教训了解他们做决策时的思考方式领会语言设计背后的“哲思”这些技术之外的“软知识”也能够帮助你更好地使用C++。
唯一的遗憾是它出的时间太早都没有赶上C++98后来也没有重新修订到现在可能快“绝版”了如果你在旧书摊上遇到了一定不要错过。
## **C++ Primer**
最后一本要推荐的书是 **C++ Primer**
“Primer”的意思是“初级读本”不过在我看来这可能是作者的谦虚之语。
虽然这本书确实自视为“入门教材”全书的编排也是循序渐进例子浅显易懂但内容非常得全面、精准基本囊括了C++11的所有新特性和标准库组件C++老手完全可以把它当成是语言参考手册。
而且它还有一个独到之处就是把语言和库融合在一起讲解而不是像其他书那样割裂开。这对于C++初学者可算得上是“福音”可以一开始就接触到标准库学习现代C++编程方式,减少了很多入门的成本。
它的不足之处是没有涉及标准库里的线程部分不过考虑到这本书的名字“Primer”而多线程编程确实比较高级不讲也是情有可原的。
## 小结
今天就到这里,只介绍了四本书,好像有点少,不过我觉得应该“贵精不贵多”。
如果像“报菜名”那样一下子列出十本八本的,我倒是省事,但你可能根本看不过来,所以还是把有限的时间汇聚在少数“精品”上更好,尽量通读、透读。
其实,选这四本书我也是花了心思的,你留意一下就会发现,它们的定位各有特色:**面向对象**(《设计模式:可复用面向对象软件的基础》)、**泛型编程**《C++标准程序库》)、**历史读本**《C++语言的设计与演化》)和**教科全书****C++ Primer**。我觉得还是比较完整地覆盖了C++的知识面的,有广度有深度,有点也有面,你以为如何呢?
欢迎在留言里分享你的读书心得。如果你觉得有所收获,也欢迎你把今天的内容分享给你的朋友。
<img src="https://static001.geekbang.org/resource/image/34/a1/34963ab5fac6e1abb9c62b11de0d80a1.jpg" alt="">

View File

@@ -0,0 +1,108 @@
<audio id="audio" title="轻松话题(三) | 提高生活质量的App" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/57/80/57ffe50fb9114846dc12ba5f10516280.mp3"></audio>
你好我是Chrono。
今天这期“轻松话题”,我想换个领域,跟你聊聊手机,谈谈怎么才能利用好手里的这块小屏幕。
我来推荐几个不是那么常见但却非常有意思的App用好它们的话肯定可以解决你生活中的一些不大不小的麻烦提升你的生活质量。
需要注意的是下面我要说的都是iPhone上的应用不过Android上应该也有相同或者相似的产品请善用各大应用商店的搜索功能。
## Numbers
第一个要推荐的是苹果的独家AppiWork三件套之一Numbers。
iWork是苹果自家的办公应用套件对应的是微软的Office名气虽然没有Office那么大用户也不是很广泛但秉承了苹果一贯的精致特性做得很用心、很有“范儿”。
Numbers相当于Office里的Excel是一个电子表格应用。
看到“电子表格”你可能对它会“嗤之以鼻”“这有什么了不起的Excel天下无敌而且很多笔记应用也有表格功能难道仅仅是因为它出身于苹果豪门
还真是这样,虽然电子表格产品都“大同小异”,但差就差在这“小异”的地方。
Numbers没有选择与Excel正面竞争而是做出了差异化去除了Excel浓厚的“办公味道”添加了许多“生活气息”。
它最大的一个特点是:表格是有限的,而不是无限的。
所以在使用Numbers时就像是在使用现实中的A4纸在单个页面上可以画出好几个独立的小表格再加上批注、描绘、饼图什么的还可以用各种字体、色彩装饰一下打扮出一个漂漂亮亮、生动活泼的画幅就像是一份“手抄报”。
当然Numbers处理大表格也毫无问题。而且它还会自动固定标题栏和侧边栏滑动查阅时关键的抬头信息始终可见非常适合手机浏览。
另外Numbers也对触摸操作做了很好的优化。选择单元格可以直接插入当前时间、调整格式还有多种特制键盘快捷输入数字、日期比标准键盘省事得多。
总之在手机上使用Numbers会获得与在电脑上使用Excel时完全不同的体验。
那么Numbers该怎么用才能方便生活呢该用来记录什么呢
其实什么都可以只要存在“条目化”“拉清单”的可能都可以放进Numbers里比如银行卡、课程表、减肥记录、书刊杂志、家具衣物、水电开支、工资奖金、差旅报销、旅游美食、股票投资……太多了生活里的一切一切只要你想得到都可以放在Numbers里保存起来。
比如说,你可以做一个财务表,把工资按月份记录下来,把偶尔的补助、报销、奖金等其他收入,并列放在旁边的表格里,然后转换出折线图,这样就可以看出自己的工资增长幅度、年度收入了。再进一步的话,可以把前几年的数据也导进表格,还可以算出来新个税带来了多少实质性的好处。
给你分享一个我自己的实际例子用Numbers保存看电影的记录。下面这张截图展示的就是我去年看的一部分电影里面记下了电影名、观影时间/地点、票价,等等,还有简单的观后感。
有了这些数据之后,我就可以很容易地做一些分析,给好看的电影打个分,标注下哪些值得再看,还可以算算这一年下来,看了多少部电影、总共花了多少钱、均价是多少……也算是给自己做个总结,让时间留下一些值得怀念的记忆。
<img src="https://static001.geekbang.org/resource/image/d6/8b/d6b31457ca3e45a51b2a01d7ca9af48b.png" alt="">
## 有数
接下来要说的这个“有数”应用是一个计算器,听起来好像比电子表格还要“平凡”一些。
计算器应该是一个“大路货”的应用了,很常见,一般手机也都自带,但是,这些计算器应用大多千篇一律,数字键盘再加上一些函数功能,非常简陋。
而“有数”则突破了传统计算器的设计思路其理念与Numbers有些类似把整个屏幕当作一张“草稿纸”可以在上面任意书写算式就像是我们上学时在纸面上列式演算一样我把这称为“更高层次的拟物化”。
<img src="https://static001.geekbang.org/resource/image/d2/56/d238ff118ff87467a52846e2412d0756.png" alt="">
这样有什么好处呢?
好处就在于你不仅能够得到结果,还能直观地看到计算的全过程,随时“复盘”校验。而且,计算过程也可以反复重用,输入的数字可以任意修改或者引用到其他算式,整个算式也可以拷贝粘贴。
它的另一个“亮点”,是可以对计算过程加上文字注释说明,让数字不再枯燥,而是有了具体的含义,形成一份“算术文稿”。
比如说家里想做个简单的装修需要买瓷砖、地板、涂料还有各种人工费。那么你就可以在“有数”里把这些逐个列出来单价乘上个数最后再加起来。只要不到1分钟总价、细则就可以清清楚楚、一目了然。如果价格、数量有变动还可以立即修改生成新的报价。
虽然Numbers也可以做同样的事情但对于简单的算术来说有点“小题大做”在需要快速得出计算结果的时候还是“有数”更加实用。
这里要提醒你一下“有数”不是免费的在App Store里卖12元但我觉得它绝对值得这个价钱。这是我最喜爱的计算器相信你接触它后也会有同感。
## 倒数日
第三个要说的应用是“倒数日”Days Matter它应该是一个非常“老牌”的应用了有着七八年的历史由著名的Clover team出品。
其实,“倒数日”这个名字有点不太精确,它不仅能够“倒数”日期,也能够“正数”日期,怎么使用完全取决于你自己。
“倒数”的功能很简单,就是设定一个将来的日期,然后来个“倒计时”等待,比如到发工资还有多少天、到情人节还有多少天、到新年还有多少天。
你还可以基于这个设计一些更“高级”的玩法制订一些人生的“里程碑”比如说买辆自用车、入职BAT、年薪30万、创立自己的公司等等。
有了这些“小目标”,你就可以每天打开应用,用“倒计时”来提醒、鞭策自己,看看是不是随着努力正在一步步地接近这些理想。
“正数”的功能也很简单就是记录已经发生过的各种“事件纪念日”方便随时回忆那些美好的瞬间这也正符合了它的Slogan“从现在起不再忘记重要的事情。”
这方面我觉得值得记录的就更多了比如生日、相识纪念、结婚纪念、拿驾照、买Mac、换新房……
还是拿我自己来举个例子。下面的这张截图记的是我当年买iPhone6的日子这么一看这部手机已经用了差不多5年了。如果没有“倒数日”这个应用真的很难回想起来它是什么时候走进我生活里的又“忠诚”地跟了我多久。
<img src="https://static001.geekbang.org/resource/image/b6/8e/b6a6464aa1b5d10fc125cad8b291638e.png" alt="">
除了“倒数”和“正数”,这个应用里面另一个很有意思的功能是“历史上的今天”,每天看一下历史上曾经都发生过哪些大事要事,也是挺好玩的,可以在不知不觉间增长一些历史知识。
## 小结
好了,今天就闲聊到这里吧,我简单小结一下今天的内容。
1. 现在的手机功能很强大,如果只用它来上网、看视频、玩游戏,就有点浪费了。
1. “Numbers”是一个电子表格应用可以用来盘点生活中的各种事务。
1. “有数”是一个创新的计算器应用,可以实现“草稿纸”式演算。
1. “倒数日”是一个纪念日应用,可以用来记录人生中的各种重要时刻。
最后,我想说,这几个应用各自都有一些新颖的设计,所以才在众多竞品中脱颖而出。
我认为,它们的共同点就是不盲目“随大流”,真正关心用户的需求。很多应用都是在已有功能的基础上做些修修补补,同质化现象非常严重。但是,这些应用却善于从平凡的生活中挖掘更有价值的功能,甚至是大多数人都没有想到的功能,可以满足用户的多层次需求。无论是产品创意,还是微小的功能,都真正做到了“以人为本”。而**始终致力于更好地服务用户的产品,必定不会差**。
那么,这是否也给了你有些在写代码、做产品等方面上的启迪呢?
欢迎你在留言区分享你喜欢的App以及你从优秀的应用中得到的启发。
<img src="https://static001.geekbang.org/resource/image/ca/46/cae0c70e4a1e5c91c46a69f6e4d38e46.jpg" alt="">

View File

@@ -0,0 +1,151 @@
<audio id="audio" title="轻松话题(二) | 给你分享我的工作百宝箱" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/87/79/871d7c37a5203abbae70af90dcda0879.mp3"></audio>
你好我是Chrono。
今天我再来说点C++之外的话题。我来聊聊我的工作方式,给你介绍一下我用的开发环境,有快捷键、配置脚本、常用命令什么的。算不上什么“高效技巧”,但是也能从小处提高工作效率,希望能给你一点借鉴。
## Linux
我主要是在Linux上写程序经常要登录到内部的服务器但我常用的笔记本或者台式机上装的还是Windows所以就需要有一个“趁手”的客户端。
Windows上有很多这样的软件最早我用的是PuTTY但其他很多同事用的是XShell。不过现在的我已经都不用这些了。
你一定想知道难道还有什么比PuTTY、XShell更好更强大的远程终端吗
要说有也算有,要说没有也算是没有。
因为现在我就把Linux操作系统当成终端机来使用就用它内置的Terminal、ssh命令来实现远程登录。
具体的做法也很简单安装一个VirtualBox再最小化安装一个Ubuntu就可以了。
这么做的好处在哪里呢?
首先这个环境完全是免费的不需要注册或者破解。其次它本身就是Linux与开发环境相同可以用来在本地做试验、“练手”。再次Linux里有非常丰富的工具可以下载安装能够随心所欲地定制环境用起来非常舒心。
当然把Linux转换成一个高效的终端还是需要一点点“技巧”的接下来我就跟你说说我的做法要点就是“**全程键盘操作**”。
第一个用“Ctrl+Alt+T”可以直接打开命令行窗口而不必用鼠标去点图标然后用“Ctrl+Shift+T”可以开新标签页这样就可以很方便地实现多窗口登录不会像某些软件那样有数量的限制。
另外我选择的是Ubuntu 14.04在这个版本里可以用鼠标右键点标签页直接改标题名区分不同的窗口即使开多个标签也可以轻松管理但这个功能在后来的16.04、18.04却给去掉了只能额外写Shell脚本来实现有那么一点不爽
第二个修改Shell的配置文件“.bashrc”或者是“.profile”在里面加上一行“set -o vi”。
```
#.bashrc
set -o vi
```
这样你就可以在命令行里实现vi操作了按一下ESC键就进入到了vi模式可以用“/”快速查找之前的历史命令,而不必每次都要敲完整的命令。
比如说,之前输入了一条命令“`ssh chrono@10.1.1.25`”登录服务器那么下次再登录时就没有必要再敲一遍了只要按ESC然后输入“/25”回车Linux就可以帮你找到上次的这条命令。这时你就可以轻松愉快地登录了。
用Linux作为终端的唯一一个缺点是它无法自动填写登录密码每次都要手动敲这个的确比较烦人。所以只能把登录密码尽量改得简单好输入最好是键盘上的固定模式比如设置成“qazwsx”这样就可以在1秒内完成。
## Vim
写代码就要用到编辑器在Windows里常用的有VS Code、Sublime等等而在Linux里最佳的选择可能就是Vim了。
说是Vim但我更愿意称之为vi。一方面是早期的使用习惯我最早用的是AIX上面只有vi而不是Vim另一个更重要的原因是可以少打一个字符。可不要小看了这一点效率的提升想想每天你要说多少次、用多少次vi吧。
有的人可能还是习惯在Windows上的编辑器里写代码然后通过某种方式上传到Linux再编译和运行。我个人觉得这种做法不太可取既然是Linux开发就应该全程在Linux上工作而且很多时候会现场调试不可能有那么合适的编辑器。
所以,尽早抛弃“窗口+鼠标”式编辑器强迫自己只用vi就可以尽快熟悉vi的各种操作让你在Linux上“运指如飞”。
另外你可能知道vi也有很多的插件比如ctags搭配上众多的插件会让vi更“现代化”。但对于服务器开发来说还是那个问题不是每台服务器都会给你配置得那么完善的。与其倒腾那些“花里胡哨”的插件不如“离开舒适区”练好vi的基本功到哪里都能吃得开。
最基本的vi操作我就不多谈了网上一搜一大堆我来说几个写代码时比较实用的命令。
1.“:tabnew”新建一个编辑窗口也就是支持多标签操作多个标签可以用“gt”切换。
2.“Ctrl+V”“Shift+V”的整列整行选择然后就可以用“x”剪切、“p”粘贴。
“Ctrl+V”的列选择功能还有一个衍生的方便技巧选择多列后按“I”再输入“//”按ESC就可以在每行前面都插入“//”,轻松地实现大段代码的工整注释。
3.“Ctrl+P”是vi内置的“代码补全”功能对我们程序员来说特别有用。只要写上开头的一两个字符再按“Ctrl+P”vi就可以提示出文件里曾经出现的词这样在写长名字时就再也不用害怕了。
不过vi的“代码补全”功能还是比较弱的不是基于语法分析而是简单的文本分词但我们也不能太苛求。
4.可以随时用“Ctrl+Z”暂停vi把它放到后台然后执行各种Shell操作在需要的时候只要敲一个“fg”命令就可以把vi恢复回来。
这在调试的时候非常有用改改代码运行一下看看情况再切回来继续改不用每次重复vi打开源文件而且可以保留编辑的“现场”。
除了刚才的这四点操作技巧想要用好vi还必须要对它做适当的配置比如显示行号、控制缩进等等。下面就是我常用的“.vimrc”非常短小基本上我每登录一台新服务器就会把这个配置复制过去这样无论在哪里vi都会是我熟悉的环境。
```
#.vimrc
set nu
sy on
set ruler
set smartindent shiftwidth=4
set tabstop=4
set expandtab
set listchars=tab:&gt;-,trail:~
set list
colorscheme desert
```
## Git
写完了程序,还要用适当的版本控制系统把它管理起来,否则源码丢失、版本回溯、多人协作等问题会把你弄得焦头烂额。
我最早用的是微软的VSSVisual Source Safe后来用过IBM的ClearCase再后来又用SVN现在则是Git的“铁杆粉丝”。
Git的好处实在太多了分布式、轻量级、可离线、开分支成本低……还有围绕着它的GitHub/GitLab等高级团队工作平台绝对是最先进的版本控制系统。
如果在2020年的今天你所在的公司还在用SVN这样的“上古”软件可真的是要考虑一下项目的前景了。
Git有许多高级用法有的也很复杂我不可能也没必要把那些讲清楚。所以我只介绍一个能够简化Git操作的小技巧**命令别名**。
Git的命令含义明确但缺点是单词太长多次操作输入就显得很繁琐这点就不如SVN命令那么简单明了。好在我们可以在Git的配置文件“.gitconfig”里为这些命令起别名比如把“status”改成“st”把“commit”改成“ci”。
下面这个就是我常用的一个Git配置里面还有个特别的地方是在“diff”的时候使用“vimdiff”用可视化的方式来比较文件的差异比原始的“diff”更好。
```
[alias]
st = status
ci = commit
br = branch
co = checkout
au = add -u .
ll = log --oneline --graph
d = difftool
[diff]
tool = vimdiff
```
## GDB
最后来说一下调试工具GDB吧它应该是Linux程序员最得力的一个帮手了。
标准的GDB是纯命令行式的但也有一些基于它的图形化工具比如DDD、Data Display Debugger但用好GDB命令行调试还是我们的一项基本素质。
**GDB不仅是一个调试工具它也是一个学习源码的好工具**
单纯的源码是静态的,虽然你可以分析它的整体架构,在头脑里模拟出它的工作流程,但计算机实在是太复杂了,内外部环境因素很多,仅靠“人肉分析”很难完全理解它的逻辑。
这个时候GDB就派上用场了以调试模式启动任意设定外部条件从指定的入口运行把程序放慢几万倍细致地观察每个变量的值跟踪代码的分支和数据的流向这样走上几个来回之后再结合源码就能够对程序的整体情况“了然于胸”。
GDB用得久了差不多每个人都会有一些自己的心得。我列出一些我觉得能够提高调试效率、最有价值的命令。
- pt查看变量的真实类型不受typedef的影响。
- up/down在函数调用栈里上下移动。
- fin直接运行到函数结束。
- i b查看所有的断点信息。
- wh启动“可视化调试”。这个是我最喜欢的命令可以把屏幕分成上下两个窗口上面显示源码下面是GDB命令输出不必再用“l”频繁地列出源码了能够大大提高调试的效率。
## 小结
好了,今天的话题就到这里,简单小结一下我的工作环境,给你一个参考:
1. 我选择Linux虚拟机作为登录服务器的终端可以很容易开多窗口操作
1. 我选择Vim作为编辑器熟记常用命令后写代码也很方便
1. 我选择Git作为版本管理工具使用别名来简化命令
1. GDB是调试C++程序的利器,也可以用来学习源码。
那么,你是否也有一些工作中的实用小技巧呢?欢迎一起来分享。
<img src="https://static001.geekbang.org/resource/image/f6/87/f6b5366fe5a70ba18517aa6bc51f5287.jpg" alt="">

View File

@@ -0,0 +1,120 @@
<audio id="audio" title="轻松话题(四) | 真正高效的生活,是张弛有度" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/c8/19/c8720ea02700a606eec6585f74cd4c19.mp3"></audio>
你好我是Chrono。
今天的轻松话题我再说点C++之外的事情,主题是“时间管理”。
古语说得好,“一寸光阴一寸金,寸金难买寸光阴”。时间无法再生、重用,无疑是人生最宝贵的资产,却也往往是最不被珍惜、最容易被浪费的资产。
仔细想想一天只有24个小时扣掉吃饭、睡觉的时间可用的也就14~16个小时。如何才能合理、高效地利用这些时间是我们每个人都应该认真思考的问题。
所以今天呢,我就拿我的一个工作日来举例子,聊聊我是怎么管理、分配时间的,给你一个参考。为了方便,我把工作时间和非工作时间分开来进行。
## 工作时间
我个人有早起的习惯。毕竟“一天之计在于晨”。所以我一般会在上午9点之前就到公司比公司里的大多数人都要早。
到了公司,我会先打开邮件和即时通讯工具,把一些和工作不相关的琐事快速处理掉。完成这些之后,有了一个“干净”的起点,就可以正式开始工作了。
这里,就不得不提我多年来的一个工作习惯了,那就是写工作日志。其实,这就像是记日记一样,时间长了,会积累下很多的工作经验和知识,也算是“人生财富”吧。我会用到一个非常好的工具,就是“**云笔记**”比如Evernote或者GitHub私人仓库都可以。
工作日志的格式和普通日记也差不多。首先,我会写下当天的日期,然后花几分钟整理一下工作思路,按优先级列一下今天要做的事情。
关于优先级,我有几个衡量标准:
- 上级领导安排的、工期紧的优先;
- 突发事件、hotfix优先
- 与外部门沟通、要出文档/说明的优先;
- 容易做的、好完成的优先;
- 与别人合作的优先;
- 自己能独立完成的放在最后。
简单来说,就是先看紧急程度,然后先外后内,先人后己,先小后大,先易后难,有点像是早期大型计算机的批处理任务排队。
有了优先级,我还要再为每件事估算一个大概的时间。该怎么估算呢?
如果事情比较小、比较简单,我就会以半个或者一个小时为单位进行安排;如果事情比较大、难度比较高,我就会把时间片划得略大一些,比如两个小时。
然后我会为每个时间片定一两个粗略的目标细化一下具体的任务比如完成一个功能点、修复Bug、画出UML图、写出设计文档、开会定技术方向等等。
写完这些之后基本上就把当天的工作日程安排好了。不过我通常也留有一点余地也就是buffer不会把8个小时全排满。因为计划总是赶不上变化通常来说制定出**6个小时左右**的时间表就差不多了。
有了这个schedule当天的工作也就心里有数了不会慌慌张张可以有条不紊地按照计划去执行。由于在定计划的时候预留了一两个小时的缓冲时间所以即使偶尔有突发事件或者难点也不会影响计划这一天的工作就可以比较轻松、顺利地完成很有成就感。
当然了,工作不可能完全按计划来,到快下班的时候,可能还是会有未完成的工作。
所以呢,临下班前,我会再花几分钟的时间,在云笔记的工作日志里做个小结,列一下工作的完成情况、心得、难点,同时把可用的参考资料也记下来。
我是不提倡过度加班的,因为脑力劳动很辛苦,加班的效率比较低。如果事情没做完,又不是特别急,那就提前做好明天的规划,想一下明天大概要怎么做、要找哪些人协调。安排妥当之后,就可以回家睡个好觉,休息好了第二天再继续做,效果可能比加班更好。
不过,如果事情比较急的话,加班就不可避免了。这个时候千万不能慌,要先确定加班的目标,再预估一下所需的时间和资源,制订临时的小计划以及大概的执行步骤。做完这些准备工作,就可以去吃个晚饭,整理一下心情,准备接下来的“苦战”了。
一天不停地工作对脑力、体力都消耗比较大,在工作的间隙,适当的休息有助于提高效率。下面我再给你分享几个我工作时的小技巧吧。
**1.不要久坐**
我的智能手表Apple Watch上有站立提醒功能如果久坐时间超过一个小时它就会提醒我起来活动一下在Windows、macOS上也有类似的提醒应用你可以自己找找
我觉得这个功能对于我们程序员来说非常有用。它有点像是学校里的下课闹铃,给你一个强制的休息机会。你可以站起来喝点水,伸个懒腰,舒展一下筋骨,或者去洗手间打把水洗洗脸,让大脑有一个短暂的“空档”,也许就能获得意外的编程灵感。
**2.午休时出去走走**
中午的吃饭时间也是一个很好的休息机会。吃完午饭后,我一般还会走出公司,在周围随便转转,散散步,看看蓝天白云、绿树红花,呼吸一下新鲜空气,脑子里再顺便想想工作上的事情。这个时段是比较自由、放松的,用来调整思绪、考虑问题都非常合适。
**3.用好茶歇时间**
很多公司都会有下午茶歇时间,提供一些水果、点心什么的。这项福利虽然很小,但也很有用,一边吃着薯片、蛋糕,一边敲键盘码字,还是很惬意的。这个时候,我的生产效率也是最高的。
**4.深呼吸**
最后要说的这个小技巧是最简单,但是也是最容易被忽略的。
在工作非常紧张的情况下比如编码开发、debug到了最关键的阶段可能稍微一活动就会扰乱思路实在是不愿意动但身体又确实会感觉很累。
这个时候呢,我一般就会坐在椅子上,双手用力揉揉脸,再伸伸胳膊,腿也配合着用力舒展几下,然后闭上眼睛,做几个深呼吸。
这个动作大概只要一分钟就足够了,但是缓解疲劳、放松大脑的效果非常不错,能够为我再争取出十来分钟的奋斗时间。
说到这里啊,你可能看出来了,其实,我的这个工作方式就是经典的“**番茄工作法**”,只不过没有那么严格,我根据自己的情况做了点改造,更随意一些,执行起来很容易。
## 非工作时间
说完了上班的时间安排再来说说8小时之外吧。
我住得离公司比较远通勤时间比较长一般都要一个多小时。所以为了不浪费时间我会在手机上看看资料、业界资讯当然最常用的就是极客时间这样的学习App了。如果看到了有用的知识点我就会记在云笔记里。
不过,我很少在交通工具上使用耳机,因为周围的环境太嘈杂了,耳机声音小的话,会听不清楚,声音大,又对听力有伤害,所以,我大多以阅读文字为主。还有一个,因为通常一整个白天都在用电脑,看屏幕,眼睛还是比较累的,所以,手机我也不会长看。特别是在换乘走路的时候,我建议你绝对不要看手机。
一般我下班后到家的时候就8点左右了比较晚。第一件事当然是吃饭大概会花十来分钟。我的晚饭比较简单也不会吃太多。
然后我会休息一下逗逗孩子跟父母唠唠家常读点小说玩会儿PS4放松一下紧张的工作情绪。我建议你**一定要给自己和家人留出足够的时间和空间,不要让工作占满了自己的全部时间,毕竟,我们工作的目的是为了更好地生活**。
通常我会休息到晚上9、10点钟然后学习半个小时左右再睡觉。
这一小段时间的学习纯粹是发散式的没有什么功利的目的比如上GitHub、Stack Overflow、InfoQ、Nginx等网站看看有什么新技术、新动向如果有感兴趣的开源项目就clone下来慢慢看。
不过在学习得非常投入的时候我也会相应地延长时间但最晚一般不超过11点半。毕竟第二天还是要上班的学得太晚就会睡眠不足影响第二天的工作质量。
顺便我再说说对睡眠和休息的看法吧。
可能很多人都有临睡前看会儿手机的习惯,这个时候,躺在床上,最安静、最放松,完全是属于自己的时间。
不过,从健康的角度来说,我不是太推荐这样做。因为在黑暗的环境下,手机屏幕的强光对眼睛和大脑的刺激程度都比较高,看得时间长了,就会影响睡眠。最好是控制一下自己,尽量在熄灯前把手机上要看的看完,然后老老实实地睡觉。
关于入睡,我也给你分享一个我自己的小经验。如果你失眠的话,可以尝试一下,应该会对你有所帮助。
方法很简单,就是尽量放松。先放松身体,再放松大脑,不要去想工作上的事情(否则可能会越想越投入、兴奋),而是慢慢地想吃饭、休息这样生活上的事,再把注意力轻轻地集中在呼吸上,让呼吸保持均匀,最后逐渐放空思绪,大概就可以进入“冥想”的状态了。
## 小结
好了,我一天的时间安排大概就是这样了,感觉还算是“有张有弛”吧。
我再简单总结一下我的几条小建议。
1. 有明确的工作计划(日度/月度),就可以规划好时间,但要留出一定的缓冲。
1. 在规划任务时间时,可以使用“番茄工作法”,但时间片不宜切得太细,否则执行的时候容易出现偏差。
1. 工作中要有适当的休息间隔,调整工作节奏,缓解工作压力。
1. 不要浪费通勤时间,多利用碎片时间学习和充电。
1. 要平衡好工作和生活,要有休息有娱乐,不要变成只会加班的“机器人”。
那么,我的这些经验是否对你有所启发呢?你有没有什么好的时间管理小窍门呢?欢迎一起来分享,把握好我们自己的时间。