=Start=
原文链接:《分享一些习惯》
这篇文章的初稿写于七年前。现在回头看,觉得还是很有用,而且对大家应该也很有用。根据新的情况我做了一些修订,写在下面。
长期的任务,要尽早开始
一般来说,长期任务总是比较烦人,也有难度,而人心里总有逃避困难的趋势。所以最后的结果或者是最后干脆放弃,或者是剩下一点点时间手忙脚乱地赶工。我自己之前也有这样的教训,还安慰自己说“要轻松生活,抛开烦扰”。其实抛开的只是暂时的压力,任务是躲不掉的,到最后几天迫于无奈再来动手,只能是狼狈不堪。
后来我才发现问题的关键不在别的,而在态度。如果调整好心理状态,尽早了解情况并不必然带来的心理压力,反而因为时间充裕,有信心把握进度,即便中间遇到突发的问题,也留有时间解决。
更重要的是,尽早着手,可以充分利用边角余料的时间:比如说,接到一份文档,需要在三天后给出意见,就不能想当然地“过两天再说”,而要在当天大致浏览一遍,下面的三天时间里,就能在坐车、走路、等电梯的零碎时间来思考。如果没有尽早了解,这些时间就浪费了,什么有意义的事情也没干——阿基米德若不是之前遇到了问题,在澡盆里泡一万年也想不出办法检测皇冠的真伪。
前些年我看朱光潜先生的书,他讲到自己的一条经验是“做事要从难的部分下手,而不是从容易的部分下手”,这样“后面才会越来越轻松”,我非常认同这一点。
时常跳出来想想:目的是什么
一般来说,我们做的工作总是有具体的目的和意义的,但工作往往是非常具体的,忙起来往往就只见树木不见森林,甚至钻到死胡同里,忘记了真正的目的和意义,“想不清楚”自己真正要做什么了。
有一次我需要搭个演示环境,手上有两套方案A和B,方案A估计要半小时,方案B估计要一小时,于是我选择了方案A,可是动手之后才发现服务器缺乏一个必要的组件,于是先费劲添加好这个组件,再编译自己需要用到的软件,又发现在64位环境下会编译出错(以前我只在32位机器上编译过),上网查发现需要打一个补丁,于是又四处去寻找这个补丁……此时已经用掉一个多小时了,下面还不知道会有多少问题。
这时候我忽然想到要跳出来看看,自己真正要的只是一个演示程序,解决打补丁、找软件之类的问题虽然很有意思,但其实从任务的角度考虑,是浪费时间,于是果断选择方案B,一小时后就顺利解决了。
据我观察,很多技术人员都热衷解决纯技术问题,温伯格在《技术领导之路》里称之为“hacking (神游)”。神游很好玩,容易上瘾,但我们都不是不食人间烟火的神人,我们花费时间做的大多数事情,总有明确的目的。忘记或者偏离了目的,就会产生浪费。
不忘目的还要做到的:哪怕忙得昏天黑地,也不能没有头绪。工作的压力很大,忙得焦头烂额是常有的事情,许多人就在这种忙碌中失去了方向,往往忙了整天,下班了都不知道自己今天到底干了什么,创造了什么价值。
我自己每天做了什么都会记录下来,有了这些记录,下班路上或者睡觉之前就可以想想:自己究竟要干什么,目前的安排是不是可以做些调整……持续的思考,才会产生感悟,才有可能改进。否则,有可能一直陷入“瞎忙”的境地而不能自拔。
给自己设定明确的时间点
我承认自己也喜欢玩,没事的时候上微信、看看论坛、聊聊天,确实很有意思,信息不断更新,总有自己感兴趣的东西冒出来,可是这样也确实浪费了大量的时间,即便“在做事”效率也很低——专注才能保证效率,更何况在这种情况下做事还要耗费意志力约束自己。
摸索反思之后,我觉得比较合适的做法就是,给自己设定明确的时间点。比如现在八点二十,我可以告诉自己,上网玩二十分钟,八点四十开始学英语。因为有了明确的时间界限,反而会想在这二十分钟之内,尽可能高效地把自己感兴趣的内容都看了,而不会慢慢“浏览”;到设定的时间点,一定要令行禁止,专注地做之前决定的事情。
更重要的是,从小事开始给自己设定明确的时间点,对培养执行力很有好处——如果许多小事都能做到“说做就做”,慢慢的,复杂一些大一些的任务,也能够“说做就做”了,有惯性、也有信心去完成。
留下详细的记录
最早的时候这条是“写日记”,现在是“留下详细记录”。
我在2008年翻译温伯格的《技术领导之路》,看到他说记日记的好处,为了验证,我也选择每天记日记。经过一段时间,我确实获得了关于自己的全然不同的视角:每天到底干了什么,时间花到哪里去了,还有什么事情没做。如果没有日记,这些都是一团混沌。有了日记,心里就有清楚的认知。
此外,针对长期重要的事情,日记还可以提醒鞭策自己。有段时间我发现自己时常处于无事可干的状态,如果没有日记,我多半只觉得“这段时间总是无事可干”,但日记里会写下“今天是感觉无事可干的第八天了”。结果对自己督促压力会大很多,动力也会强得多。
现在我已经不写日记了,但每天还是会写工作记录。每天早上到公司,先对着日历把今天要做的事情理一遍,记下来。中途做的决定、开的会议,都有相应的记录。持之以恒,我确认自己对工作、对时间、对自己的状态,是有明确认知的。
早起
最早我是不同意“早起”的。我猜大家都差不多,上大学之前,早起总是和一些不愉快的记忆纠缠在一起。好不容易上了大学,没有人管了,终于可以睡到几点是几点了,工作之后就更是如此。
改变来自我看的一本讲解睡眠的书,作者提到:你感到困未必是睡眠不足,而可能是身体没有被唤醒。醒来之后多做一些运动,可以迅速唤醒你的身体,清醒神志。要做运动,起晚了多半是不行的,因为四下里人都多起来,已经没机会了。
另一点启发来自上班的交通安排。我刚工作的时候在北京,倒两趟公交,每天7点半左右出发,9点20左右才能到公司。有一天阴差阳错的,6点50就出发,结果8点20左右就到了,路上还轻松很多。而且楼下的肯德基人很少,可以安心吃完早餐,看看书,9点再去办公室。
提早40分钟出发,就能早到80多分钟,生生省下超过40分钟。就在那大半年里,我在公司楼下肯德基看完了两本英文小说,感觉自己的英文有了很大进展。
后来我一直坚持早起的习惯,因为和大多数人作息时间拉开差距,意味着避开拥堵节省时间,也意味着,当其他人还没开始工作的时候,你已经把整天的工作安排好,需要其他人协助的邀请已经发出去,可以安心做自己的事情了。
有人主张不要怕花钱,住的离公司近一点,这样路上可以节省很多时间,“于是可以放心睡懒觉”。我赞成前半部分,不赞成后半部分。节省下来的时间,用来睡懒觉未眠可惜。如今大家的生活都很忙碌,早晨是一天中难得的不怎么受外界干扰、神清气爽,而且不疲倦的时间,应当充分利用。
培养规划和思维能力
在我们这个时代,做各种事情,几乎都有现成的服务,强大的工具来帮忙,加上软件开发里很多时候也提倡“先开火后瞄准”。不经意之间,很多人都养成了比较随便的工作习惯:不想清楚就动手,不动手就开干,做出来再改,边干边改,且美其名曰“试错”。
这是正常的吗?或许在某些情况下是正常的,但一定不是永远正常。因为我亲眼见到很多人,他们不需要多少修改,不需要多少试错,直奔正确的方向而去,或者,至少少踩了很多坑。
这是因为“命好”吗?不是。绝大多数时候,这都是获益于规划和思维能力。在真刀真枪开始做事之前,在把想法落实并组装起来之前,他们就在脑子里推导过,在虚拟的空间里演练过,排除了各种问题,判断了各种可能性。毕竟,现实中做事的成本再低,都低不过脑子里的推演。
拿我熟悉的IT行业来说,我自己认定,也反复向程序员们灌输的一个观点是:好的架构师是很会算的,而不是一切都靠“压测”。程序能够负载多大的规模和压力,超出这个负载能力,会出现怎样的问题,应该怎样解决,这个问题,照目前的发展速度,大概多久会出现……优秀的架构师,甚至只是优秀的开发人员,内心对这些问题一定有明确的答案。否则,即便误打误撞进入了还不错的状态,整体来看还是处于高风险高成本的状态。
树立大局观
经常有朋友与我讨论跳槽的事情,眼下有几个选择,很难决定。一般我的回答是这样的:
暂时不看薪水、职位这些,考虑另一个问题:十年,或者五年之后,你希望自己是个怎样的人,是怎样的生活状态?
按照我的经验,能这样去想的人,最后的结果都不会太差。
我自己也遇到许多取舍、抉择的问题,比如我总觉得自己关于计算机的基础还不够扎实,我的英语还不够好,书也读得太少,我的照片拍的还不够好,我的文章写得还不够好……于是想去补习基础、去学英语、去躲读书、去看大师的照片、去练习写作……
不可否认,做其中的任何一件,只要认真去做,都会给人成就感,但人的时间和精力都是有限的,不可能兼顾。在需要选择的很多时候,我们必须努力摆脱一本书、一门知识、一件事的局限,跳出来想一想,宏观看来自己现在究竟在怎样的状态,重要的任务是什么,将来希望做个怎样的人……
清楚了最迫切的需求,才可以从容抉择,即便放弃了一些看来还不错的机会也不可惜,甚至会暗自庆幸。李笑来老师讲过(当然他现在似乎不太讲了),诱惑许多时候是伪装成机会出现的。拿着大局观的照妖镜,许多诱惑才会显出原形。
培养大局观的一个有效办法,就是把长期对自己重要的事情写下来,时常看看。如果你每周看看自己的月度、季度、年度目标,想想自己做了什么,又接近了多少,往往会对大局观有更真切的感悟。同时,也能更准确地把“重要但不紧急”的事情及时变为“重要但紧急”的事情。在我看来,对工作而言,这是一种非常重要的素质。
=END=
《 “[collect]分享一些习惯” 》 有 11 条评论
如何写好一篇季度总结
http://www.flysnow.org/2017/01/13/how-to-write-quarterly-summary.html
升职加薪:8小时之外的人生
http://www.flysnow.org/2017/01/07/8-hours-outside-of-life.html
知识管理,我是这么做的
http://roclinux.cn/?p=4046
`
基于知识的“规模”和“公开度”,我有了自己的知识管理方法:
(1)小型知识、愿意公开:微博、博客评论
(2)中型知识、愿意公开:博客、私人邮件
(3)大型知识、愿意公开:书籍
(4)小型知识、不愿公开:云笔记
(5)中大型知识、不愿公开:本地Word文档、搭建私有Wiki
你会发现大部分的知识,都可以对应到上面的分类中。
`
有 3 年经验的大厂程序员,遭遇技术瓶颈该怎么办?
https://mp.weixin.qq.com/s?__biz=MzA5NzkxMzkwNQ==&mid=2649517529&idx=1&sn=a78a8e03f2735d988edc97490e342930#rd
`
无法提升的内因(借口)如下:
1)成为熟练工种后,不再尝试挑战
2)大厂加班过多导致缺乏个人思考时间
3)精力过于分散,无法集中精力做编程
给出以下两点建议:
1)多次检阅基础知识,将有效技能掌握牢固,把各类基础知识串联成完整体系。技术不可满足现状,懂得把编程技术从功能实现转向软件构架、参数化设计等高阶方面,在共享、通用、标准化方面有所建树。
2)当你觉得自己了不起时,多看源码,多研究源码,不少所谓 3 年经验的程序员,根本没达到熟练程度,研究源码,会发现太多不足。Java 学得精深的人,可以横向去了解 Scala,看看Java 有哪些局限;或者纵向的去深入钻研底层的 JVM,如果在学习新技能时感到吃力,你便知:你并未了解自己,你实力仍处于普通阶段。
`
Redis之父:10x程序员应该具备哪些素质?
http://36kr.com/p/5066579.html
`
编程并非一门“线性”学科,各种素质的结合能产生倍增效应。
* 裸编程能力:完成子任务
* 经验:模式匹配
* 专注:实际时间 vs 假设时间
* 设计牺牲:干掉5%得到90%
* 简洁性
* 完美主义,或者如何干掉你的生产力,偏袒你的设计
* 知识:一些理论会有所帮助
* 底层:理解机器
* 调试技能
`
关于成为一个有目标感的人的清单
https://mp.weixin.qq.com/s?__biz=MjM5NjAxOTU4MA==&mid=3009197231&idx=1&sn=ef29364034fd549de2401c34671794f7
`
所谓“目标感”,就是在意识上知道自己真正想要的是什么,并在行动上心无旁骛、朝它靠拢。
目标、方法、行动
想办法、马上干
目标感不等同于目的性,也不代表功利和势利,只是让你的行动有效。
培养目标感,要从思考的断舍离开始。把一件事情最终想要的结果穷尽罗列,然后做减法,剥离出最后仅剩的东西。比如,你经营一段婚姻,那目的到底是什么?是家庭和谐?还是奋斗共同体?还是你自己有安全感?目标一变,方法和行动全变。你不可能什么都要。
不同的事,就要做不同的功课、想不同的办法。一份努力,发挥两种用处,这种事客观上存在,但是可遇不可求,更不可事先经营。
`
如何做好团队技术分享
https://mp.weixin.qq.com/s?__biz=MjM5MTA0NjA4Ng==&mid=2454134990&idx=1&sn=b6b3eca72d8b87c0b8c980e43d6f5729
如何玩转幕布?
https://www.zhihu.com/question/52841540
`
幕布的优点:
易用;
多平台支持;
可以将树形结构笔记转化为思维导图!
`
幕布精选
https://mubu.com/explore
用“6D思维”延展知识管理的“宽·高·深”
http://www.kmf.ac.cn/p/36/
`
从知识经济说开去
所谓“有用”的知识
知识还有一个“倒金字塔”
未来趋势:跨界知识管理与跨界思考力
用跨界思考催生跨界课程教学专用教具
用个字母延伸知识管理的内涵
“玩转”知识管理课堂
从“问中学”到“云端问中学”
“逆袭”知识管理课纲
谈大陆与台湾的知识管理
著书破解知识管理的“密码”
从知识管理到“D思维”
用思想和温度照亮下一代
`
技术人,遇到瓶颈,怎么破?来自十年程序员的经验分享
https://mp.weixin.qq.com/s/cHODEapF250uiZgE-h6srg
`
你确定自己遇到了瓶颈?
工作时间长了,遇到瓶颈很正常,但我看有些同学的工作时间并不长,有的一年不到,然后也遇到了瓶颈,这种情况,我觉得就有些问题了。
技术的瓶颈不会那么快就遇到的,我觉得至少工作了3年以上,才开始会断断续续出现没成长的感觉。
我自己毕业的前几年,成长都是飞快的,是那种隔几个月都能明显感知到自己跟前几个月的不同的。
在工作时间不长的时候,就遇到这个问题,更多的不是来自于技术的瓶颈,可能是来自松散的环境,可能是来自完全不能给自己带来成长的团队,当然,也有可能只是自己给自己的偷懒找的借口。
不过技术初期的情况,只要明确了原因,迅速做出调整,都可以很快恢复过来的。
遇到瓶颈,既是好事,也是坏事
突破瓶颈是很难的事情,对大多数的人来说,也是极其痛苦的事情。所以首要的事情是要调整好自身的心态。四处的迷茫无助,不会给你带来突破之法,只会无尽的消耗自身的精力和时间。
要明白的道理是,技术瓶颈是每个人都会遇到的,其实不单是技术,很多跟能力相关的事情,最后都会遇到瓶颈。
一个人能不能突破现有的瓶颈,上到一个新的台阶,是受很多的因素制约的,但很多时候,一个人自身的心态,自己的信心和信念,起到了至关重要的作用。
`
高效程序员的6个习惯
https://mp.weixin.qq.com/s/XEa6eUo5IPEgH_5l2ReuAA
`
习惯是什么意思呢?一个人常常出现的行为,通常是在后天养成的,有些是不自觉地模仿,有些是刻意练习。一件事坚持的久了,就会慢慢变成习惯。比如我,读书、写作就是我的习惯,无论多忙,不读不写总会觉得少点什么。
不管是生活还是职场,好的习惯总能让人受益一生。巴菲特曾建议年轻人,“找一个你崇拜或者最想成为的偶像,从他身上找出你最欣赏的特质,然后开始学习和模仿他,把这些特质变成你自己的习惯。”
一、欲速则不达
希望大家不要一味追求速度,要以真正解决问题为基本原则,治标也治本。做事也好,做人也罢,有些事情急不得。心急连热豆腐都吃不了,更何况其它的事呢?
二、跟踪变化
世界上唯一不变的就是变化。人会变,技术也会变,尤其是在互联网时代里,一切都按下了加速键,共享单车从巅峰到衰落只用了 3 年,O2O 从风口到冷却也只用了 3 年。
软件开发行业也是如此。它不停发展,永远变化,Rust 从出现到流行只用了 10 年,Go 从诞生到入选“TIOBE 最佳语言”只用了 9 年。谁也没办法保证未来哪门编程语言最流行,谁也说不好哪个语言会被拍在沙滩上。对于技术人来说,不断充电才是提升职场竞争力的关键法宝。
以下 4 个小方法可以帮助我们不断学习,拥抱新技术:
1、迭代和增量式的学习每天拿出一部分时间用于学习新技术,当你听到自己不熟悉的概念时,可以把它们先记录下来,之后再有计划地逐步深入研究。
2、了解最新行情从媒体网站或科技博客中了解新技术发展,看看大家都在关注哪些领域。平时可以多看看 InfoQ 网站以及极客时间的专栏,新技术出现并不可怕,可怕的是别人都摸清门路了,你却一无所知。
3、参加知识讲座全球每年都会举办各种知识讲座和大会,极客邦主办的就有 QCon 和架构师峰会等,主办方通常都会找到行业内知名的专家或顶尖技术人才发表演讲,你可以近距离向这些厉害的人物学习。
4、持续阅读既要阅读技术相关领域的好书,也要阅读其他领域的好书。对开发人员来说,提升技术硬实力很重要,但像沟通、管理等软实力也不能忽视。
三、把握开发节奏
很多程序员在工作中都没有明确的规划,总是随意安排工作,一会做做这部分的功能开发,一会改改那部分的代码,毫无章法可言。
高效的程序员和团队做事有稳定的节奏,从编写代码、运行测试、Code Review、迭代到发布,整个项目有规律并循序渐进。他们把一个庞大的目标分割成数个小目标,设置好每个目标的 deadline,每完成一个目标也会更激励自己和团队,一起加速前进。
四、使用短迭代,增量发布
没有完美的人,也没有完美的软件,我们要做的是让它不断趋于完美。如果你想从一开始就做一款超级完美的软件,一口气给出大项目的全部规划,那你多半会失败。因为时代变化太快,玩法也越来越多,而你却花了大量时间浪费在第一个版本,开发过程中没听到外面的声音和反馈,闭门很难造出好车。
做大项目时,最理想的办法就是小步前进,这也是敏捷方法的核心。开发人员可以使用短迭代和增量开发,既专注又有效率,还能及时从反馈中获得新的灵感,一步步走向完美。
五、代码要清晰地表达意图
都说字如其人,我觉得代码也是如此。有的人细心,写代码的时候喜欢加上各种注释;有的人随性,写出的代码除了自己几乎没人看得懂。第一种还好,但第二种,你有考虑过同事们的感受吗?
写代码能准确实现功能,不出 bug 固然优秀,但能让大家读得懂才是本事。在工作中,代码阅读的次数要远远超过编写的次数,所以,不能只为了自己方便,就忽视了代码的可读性,编写时还得多花点功夫才行。这本书中甚至还表达了这样的观点:从衡量标准上来看,代码清晰程度的优先级甚至要排在执行效率之前。这个说法当然有点绝对,但不可否认的是,清晰的代码对于个人、团队乃至公司而言,都无比重要。
六、保持简单
简单不是简陋,也不是指难易程度,真正的简单是既把功能实现了,又没有多余的代码,一眼看上去,简洁有力,易于理解。
我们常说“less is more”,简单就是美,这句话放在技术圈里同样适用。和那些复杂的代码相比,简单的代码其实最难。这话听上去有点拗口,打个比方,同样的功能和运行效果,有人写了 200 行代码就实现了,你洋洋洒洒写了 1000 行,多出来的是智慧吗?很可能你是在代码里绕了几个圈,兜兜转转,在平坦的道路上曲折前行,而人家走的却是直线。
`
信息的利用可以拆解为下面这些行为:
0. 原始数据 raw-data (原始数据的真实性/准确性和有效性其实是你后面做决策的核心,知道这些数据分布在哪,怎么去寻找也是个人的一种核心能力)
1. 获取-爬虫 spider
2. 加工-结构化 transform
3. 存储-持久化 store
4. 搜索-随时随地 API
5. 使用-数据分析/可视化 BI
6. 泛化-关联个人知识经验,反复搜索和分析比较确认得出适用性更强的结论/经验,达到借助信息做决策的最终目标 result
爬虫可以用 Scrapy(a fast high-level web crawling & scraping framework for Python)
https://github.com/scrapy/scrapy
数据库用 MongoDB 方便数据存取,当然也可以用 MySQL/ES 等数据库,可以按个人喜好进行选择
https://www.mongodb.com/docs/v5.0/reference/operator/aggregation/
引入 Crawlab 对爬虫进行管理调度
https://github.com/crawlab-team/crawlab
引入 Metabase 做数据可视化平台,方便对大量数据进行可视化分析
https://github.com/metabase/metabase
引入 Appwrite 用于快速搭建App、小程序、网站的后台API,以支持精细化查询
https://github.com/appwrite/appwrite/blob/master/README-CN.md
引入 N8N 进行Web页面的自动化定时操作
https://github.com/n8n-io/n8n
引入 Selenium 进行Web自动化操作-A browser automation framework and ecosystem.
https://github.com/SeleniumHQ/docker-selenium
==
The Complete Application Stack
Build applications faster with object and file storage, user authentication, push notifications, dashboard and more out of the box.
https://parseplatform.org/
https://docs.parseplatform.org/parse-server/guide/
https://github.com/parse-community/parse-server
Automate without limits
https://github.com/n8n-io/n8n
https://n8n.io/get-started/
Metabase is an open-source business intelligence platform. You can use Metabase to ask questions about your data, or embed Metabase in your app to let your customers explore their data on their own.
https://www.metabase.com/docs/latest/
The simplest, fastest way to get business intelligence and analytics to everyone in your company
https://github.com/metabase/metabase
Appwrite is a self-hosted backend server packaged as a set of Docker containers. You can install and run Appwrite on any operating system that can run a Docker CLI. You can use Appwrite on your local desktop or cloud provider of your choice.
Appwrite是一个基于Docker的端到端开发者平台,其容器化的微服务库可应用于网页端,移动端,以及后端。Appwrite 通过视觉化界面极简了从零编写 API 的繁琐过程,在保证软件安全的前提下为开发者创造了一个高效的开发环境。
https://appwrite.io/docs/installation
https://github.com/appwrite/appwrite/blob/master/README-CN.md
Crawlab 是强大的 网络爬虫管理平台(WCMP),它能够运行多种编程语言(包括 Python、Go、Node.js、Java、C#)或爬虫框架(包括 Scrapy、Colly、Selenium、Puppeteer)开发的网路爬虫。它能够用来运行、管理和监控网络爬虫,特别是对可溯性、可扩展性以及稳定性要求较高的生产环境。
https://docs.crawlab.cn/zh/guide/
https://github.com/crawlab-team/crawlab
==