mirror of
https://github.com/cheetahlou/CategoryResourceRepost.git
synced 2026-05-11 04:04:34 +08:00
del
This commit is contained in:
89
极客时间专栏/geek/罗剑锋的C++实战笔记/轻松话题/轻松话题(一) | 4本值得一读再读的经典好书.md
Normal file
89
极客时间专栏/geek/罗剑锋的C++实战笔记/轻松话题/轻松话题(一) | 4本值得一读再读的经典好书.md
Normal 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++语言,而是开列一个清单,精选出几本我认为值得一读再读的技术类好书。
|
||||
|
||||
顺便说一句,“读书”最好是看纸质实体书,而不是电子版。
|
||||
|
||||
在现在的环境下,手机或者平板电脑实在是太“浮躁”了,在用它们阅读时,经常会被跳出的通知、消息打扰,而且“人性”使然,也很难控制自己不去点开其他的应用玩玩小游戏、看看短视频。
|
||||
|
||||
另外,这些设备大多是“主动发光”型的,长时间看会导致视觉疲劳,影响眼睛健康,还是纸质的书更好。只要在一个合适的光照环境下,冲一杯茶或者咖啡,给自己留出一段充足的闲暇时间,你就可以抛却世俗的喧嚣和烦恼,尽情地畅游在书的海洋。
|
||||
|
||||
闲话不多说了,It’s 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="">
|
||||
108
极客时间专栏/geek/罗剑锋的C++实战笔记/轻松话题/轻松话题(三) | 提高生活质量的App.md
Normal file
108
极客时间专栏/geek/罗剑锋的C++实战笔记/轻松话题/轻松话题(三) | 提高生活质量的App.md
Normal 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
|
||||
|
||||
好,第一个要推荐的是苹果的独家App,iWork三件套之一: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="">
|
||||
151
极客时间专栏/geek/罗剑锋的C++实战笔记/轻松话题/轻松话题(二) | 给你分享我的工作百宝箱.md
Normal file
151
极客时间专栏/geek/罗剑锋的C++实战笔记/轻松话题/轻松话题(二) | 给你分享我的工作百宝箱.md
Normal 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:>-,trail:~
|
||||
set list
|
||||
colorscheme desert
|
||||
|
||||
```
|
||||
|
||||
## Git
|
||||
|
||||
写完了程序,还要用适当的版本控制系统把它管理起来,否则源码丢失、版本回溯、多人协作等问题会把你弄得焦头烂额。
|
||||
|
||||
我最早用的是微软的VSS(Visual 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="">
|
||||
120
极客时间专栏/geek/罗剑锋的C++实战笔记/轻松话题/轻松话题(四) | 真正高效的生活,是张弛有度.md
Normal file
120
极客时间专栏/geek/罗剑锋的C++实战笔记/轻松话题/轻松话题(四) | 真正高效的生活,是张弛有度.md
Normal 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. 要平衡好工作和生活,要有休息有娱乐,不要变成只会加班的“机器人”。
|
||||
|
||||
那么,我的这些经验是否对你有所启发呢?你有没有什么好的时间管理小窍门呢?欢迎一起来分享,把握好我们自己的时间。
|
||||
Reference in New Issue
Block a user