分类 方法论 下的文章

写代码有这16个好习惯,可以减少80%非业务的bug

每一个好习惯都是一笔财富,本文整理了写代码的16个好习惯,每个都很经典,养成这些习惯,可以规避多数非业务的bug!希望对大家有帮助哈,谢谢阅读,加油哦~

公众号:「捡田螺的小男孩」

  1. 修改完代码,记得自测一下
    「改完代码,自测一下」 是每位程序员必备的基本素养。尤其不要抱有这种侥幸「心理:我只是改了一个变量或者我只改了一行配置代码,不用自测了」。改完代码,尽量要求自己都去测试一下哈,可以规避很多不必要bug的。
  2. 方法入参尽量都检验
    入参校验也是每个程序员必备的基本素养。你的方法处理,「必须先校验参数」。比如入参是否允许为空,入参长度是否符合你的预期长度。这个尽量养成习惯吧,很多「低级bug」都是「不校验参数」导致的。
? 如果你的数据库字段设置为varchar(16),对方传了一个32位的字符串过来,你不校验参数,「插入数据库直接异常」了。 ?
  1. 修改老接口的时候,思考接口的兼容性。
    很多bug都是因为修改了对外老接口,但是却「不做兼容导致」的。关键这个问题多数是比较严重的,可能直接导致系统发版失败的。新手程序员很容易犯这个错误哦~

所以,如果你的需求是在原来接口上修改,,尤其这个接口是对外提供服务的话,一定要考虑接口兼容。举个例子吧,比如dubbo接口,原本是只接收A,B参数,现在你加了一个参数C,就可以考虑这样处理。

//老接口
void oldService(A,B);{
  //兼容新接口,传个null代替C
  newService(A,B,null);
}

//新接口,暂时不能删掉老接口,需要做兼容。
void newService(A,B,C);
  1. 对于复杂的代码逻辑,添加清楚的注释
    写代码的时候,是没有必要写太多的注释的,好的方法变量命名就是最好的注释。但是,如果是「业务逻辑很复杂的代码」,真的非常有必要写「清楚注释」。清楚的注释,更有利于后面的维护。
  2. 使用完IO资源流,需要关闭
    应该大家都有过这样的经历,windows系统桌面如果「打开太多文件」或者系统软件,就会觉得电脑很卡。当然,我们linux服务器也一样,平时操作文件,或者数据库连接,IO资源流如果没关闭,那么这个IO资源就会被它占着,这样别人就没有办法用了,这就造成「资源浪费」。

所以使用完IO流,可以使用finally关闭哈

FileInputStream fdIn = null;
try {
    fdIn = new FileInputStream(new File("/jay.txt"));
} catch (FileNotFoundException e) {
    log.error(e);
} catch (IOException e) {
    log.error(e);
}finally {
    try {
        if (fdIn != null) {
            fdIn.close();
        }
    } catch (IOException e) {
        log.error(e);
    }
}

JDK 7 之后还有更帅的关闭流写法,「try-with-resource」。

/*
 * 关注公众号,捡田螺的小男孩
 */
try (FileInputStream inputStream = new FileInputStream(new File("jay.txt")) {
    // use resources   
} catch (FileNotFoundException e) {
    log.error(e);
} catch (IOException e) {
    log.error(e);
}
  1. 代码采取措施避免运行时错误(如数组边界溢出,被零除等)
    日常开发中,我们需要采取措施规避「数组边界溢出,被零整除,空指针」等运行时错误。

类似代码比较常见:

String name = list.get(1).getName(); //list可能越界,因为不一定有2个元素哈

所以,应该「采取措施,预防一下数组边界溢出」,正例:

if(CollectionsUtil.isNotEmpty(list)&& list.size()>1){
  String name = list.get(1).getName(); 
}
  1. 尽量不在循环里远程调用、或者数据库操作,优先考虑批量进行。
    远程操作或者数据库操作都是「比较耗网络、IO资源」的,所以尽量不在循环里远程调用、不在循环里操作数据库,能「批量一次性查回来尽量不要循环多次去查」。(但是呢,也不要一次性查太多数据哈,要分批500一次酱紫)

正例:

remoteBatchQuery(param);

反例:

for(int i=0;i<n;i++){
  remoteSingleQuery(param)
}
  1. 写完代码,脑洞一下多线程执行会怎样,注意并发一致性问题
    我们经常见的一些业务场景,就是先查下有没有记录,再进行对应的操作(比如修改)。但是呢,(查询+修改)合在一起不是原子操作哦,脑洞下多线程,就会发现有问题了,

反例如下:

if(isAvailable(ticketId){ 
    1、给现金增加操作 
    2、deleteTicketById(ticketId) 
}else{ 
    return "没有可用现金券";
}

为了更容易理解它,看这个流程图吧:
微信图片_20201207085819.png

1.线程A加现金
2.线程B加现金
3.线程A删除票标志
4.线程B删除票标志
显然这样存在「并发问题」,正例应该「利用数据库删除操作的原子性」,如下:

if(deleteAvailableTicketById(ticketId) == 1){ 
    1、给现金增加操作 
}else{ 
    return “没有可用现金券” 
}

因此,这个习惯也是要有的,「写完代码,自己想下多线程执行,是否会存在并发一致性问题」。

  1. 获取对象的属性,先判断对象是否为空
    这个点本来也属于「采取措施规避运行时异常」的,但是我还是把它拿出来,当做一个重点来写,因为平时空指针异常太常见了,一个手抖不注意,就导致空指针报到生产环境去了。

所以,你要获取对象的属性时,尽量不要相信「理论上不为空」,我们顺手养成习惯判断一下是否为空,再获取对象的属性。正例:

if(object!=null){
   String name = object.getName();
}
  1. 多线程异步优先考虑恰当的线程池,而不是new thread,同时考虑线程池是否隔离
    为什么优先使用线程池?使用线程池有这几点好处呀

它帮我们管理线程,避免增加创建线程和销毁线程的资源损耗。
提高响应速度。
重复利用。
同时呢,尽量不要所有业务都共用一个线程池,需要考虑「线程池隔离」。就是不同的关键业务,分配不同的线程池,然后线程池参数也要考虑恰当哈。之前写过几篇线程池的,觉得还不错,有兴趣的朋友可以看一下哈

一文读懂线程池的工作原理(故事白话文)
面试必备:线程池解析
源码分析-使用newFixedThreadPool线程池导致的内存飙升问题

  1. 手动写完代码业务的SQL,先拿去数据库跑一下,同时也explain看下执行计划。
    手动写完业务代码的SQL,可以先把它拿到数据库跑一下,看看有没有语法错误嘛。有些小伙伴不好的习惯就是,写完就把代码打包上去测试服务器,其实把SQL放到数据库执行一下,可以规避很多错误的。

同时呢,也用「explain看下你Sql的执行计划」,尤其走不走索引这一块。

explain select * from user where userid =10086 or age =18;
  1. 调用第三方接口,需要考虑异常处理,安全性,超时重试这几个点。
    调用第三方服务,或者分布式远程服务的的话,需要考虑

异常处理(比如,你调别人的接口,如果异常了,怎么处理,是重试还是当做失败)
超时(没法预估对方接口一般多久返回,一般设置个超时断开时间,以保护你的接口)
重试次数(你的接口调失败,需不需要重试,需要站在业务上角度思考这个问题)

? 简单一个例子,你一个http请求别人的服务,需要考虑设置connect-time,和retry次数。 ?

如果是转账等重要的第三方服务,还需要考虑「签名验签」,「加密」等。之前写过一篇加签验签的,有兴趣的朋友可以看一下哈

程序员必备基础:加签验签

  1. 接口需要考虑幂等性
    接口是需要考虑幂等性的,尤其抢红包、转账这些重要接口。最直观的业务场景,就是「用户连着点击两次」,你的接口有没有hold住。
? 幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。
在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。
?

一般「幂等技术方案」有这几种:

查询操作
唯一索引
token机制,防止重复提交
数据库的delete删除操作
乐观锁
悲观锁
Redis、zookeeper 分布式锁(以前抢红包需求,用了Redis分布式锁)
状态机幂等

  1. 多线程情况下,考虑线性安全问题
    在「高并发」情况下,HashMap可能会出现死循环。因为它是非线性安全的,可以考虑使用ConcurrentHashMap。所以这个也尽量养成习惯,不要上来反手就是一个new HashMap();
? Hashmap、Arraylist、LinkedList、TreeMap等都是线性不安全的;
Vector、Hashtable、ConcurrentHashMap等都是线性安全的 ?
  1. 主从延迟问题考虑
    先插入,接着就去查询,这类代码逻辑比较常见,这「可能」会有问题的。一般数据库都是有主库,从库的。写入的话是写主库,读一般是读从库。如果发生主从延迟,很可能出现你插入成功了,但是却查询不到的情况。

如果是重要业务,需要考虑是否强制读主库,还是再修改设计方案。
但是呢,有些业务场景是可以接受主从稍微延迟一点的,但是这个习惯还是要有吧。
写完操作数据库的代码,想下是否存在主从延迟问题。

  1. 使用缓存的时候,考虑缓存跟DB的一致性,还有(缓存穿透、缓存雪崩和缓存击穿)
    通俗点说,我们使用缓存就是为了「查得快,接口耗时小」。但是呢,用到缓存,就需要「注意缓存与数据库的一致性」问题。同时,还需要规避缓存穿透、缓存雪崩和缓存击穿三大问题。
? 缓存雪崩:指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。
缓存穿透:指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,进而给数据库带来压力。
缓存击穿:指热点key在某个时间点过期的时候,而恰好在这个时间点对这个Key有大量的并发请求过来,从而大量的请求打到db。

腾讯内部论坛热文:如何做一个小型公司的技术总监

本文在腾讯内部论坛被浏览达7347次,收藏615次,评论几百条,曾经是讨论最热烈的项目管理文章之一。

作为作者本身,感觉这个话题可以讨论的范围非常大,希望能有更多朋友一起切磋探索技术团队的管理之道。

资深程序员是团队中最强大的生产力,但往往被不合理的工作安排浪费掉。

因此作为一个团队的技术的“头”,必须要有明确清晰的认识,把主要的事务性工作剥离出来。并且放弃大量的管理“权力”,以提高团队开发质量和效率为最主要的目标去安排自己的工作。

一般来说技术总监其实会被要求做事实上是2个职位的工作:主程、项目经理(技术化)。

因此必须明确此两个职位的工作任务分割。然后把项目经理的工作,安排给另外一个人做,当然其职称可能同样也得叫“技术总监”或“主程”,总之听起来越牛X越好。

而真正的主程(技术总监)则应该投身于尽量多的技术工作中。而最重要的工作则是开发——生产代码和文档。

主程的工作:

一、开发

从来没有一个资深的外科医生会放下手术刀,而转到手术室外面指手画脚。一个资深的程序员也不应该离开代码和文档的编写,而只是做做架构图。

作为对一个复杂系统的负责人,必须亲手领导和参与建造,才能有足够的能力去负担起这个责任。

因此需要至少使用60%的时间来参与开发的工作,并且建议从一开始上班就开始,虽然早上的效率很低,但是跟任何艰巨工作都一样:万事开头难。

在你好不容易等待电脑慢吞吞的打开了所有的IDE、需求文档、参考资料、工作计划这堆要命的东西之后,你就迈出了最重要的一步,你会发现你不在需要在网上看微博和聊QQ来提振开始工作的激情,而会被某一个优化代码的灵感而激励,或者被一个复杂而有趣的问题所吸引,从而更快的能投入到开发中。

坚持打开电脑做的第一件事是打开IDE软件,是这一切最重要的一步。

开发的工作内容包括有:

1、提出非功能性需求

一般来说功能需求总是让开发人员焦头烂额的主要原因。但是实际上很多项目死在发布之后,却是因为性能、产品质量、扩展性、二次开发效率等非功能性需求没认真去解决而导致的。

主程作为经验最丰富的成员,必须要利用自己曾经的经验和教训(在这里教训往往比经验重要),提出那些自己折腾自己的“非功能性需求”,来保障整个项目在发布后不会轰然倒塌。

这是个吃力不讨好的工作,因为老板和客户往往只会抱怨技术人员在玩弄把戏,骗取更多的资源或者杞人忧天。如何说服这些家伙也许不是主程的工作,但是主程必须要以高度的责任心把问题放到台面上来。沟通的工作也许让项目经理去做会更好,他们有一整套如何威逼利诱老板和客户的戏法。

2、设计和修正软件架构

软件架构设计至关重要,而且工作繁重。不画图纸就敢开工的技术人员要么是天才要么是笨蛋。

对于团队来说,架构在分工合作、避免风险、提高质量等多个方面有无可替代的作用。架构要避免成为空洞的文档,最重要的一步是有人来掌控和实施。而主程主持设计和修正的架构,并且亲手实施,让团队中的腹诽之徒完全无法避开,否则代码将无法运行!

所谓设计和修正架构,并不意味所有的文档应该一个人写,而是指这个架构的每个环节,都是经过主程决策同意的。当然最好这些文档能尽量由他撰写,对于“菜鸟”团队来说,输出这种文档本身就意味着“权势”,有助于主程建立个人威信——这种看起来有点肮脏的“政治”东西,在避免团队内无止境的扯皮,以及稳定那些随时准备跳槽的成员来说,都是相当实用的。

3、难点代码(关键需求)的开发

主程必须写代码,写那些大家都认为风险大的代码。

有的系统对于性能要求很高,他就必须去完成容易出性能问题的部分,比如IO操作或者设计数据库索引。有些系统的需求非常飘忽,他就要去想办法完成框架代码或者脚本引擎,以便众多小弟可以跟着产品人员疲于奔命。这种工作内容会让主程不必完全的读过所有代码,而能牢牢的“掌握”代码,以免团队成员甩耙子的时候能充当备胎。因为融入团队的代码开发,也是一个让架构设计从日常工作中真正控制系统的工作。而且主程代码通常会被别人接触,能直接教育其他团队成员,同时也能建立——威信。

4、救火和杀虫

这个工作其实和代码开发是一致的,如果没有平日的开发,通常紧急问题的解决也是比较难处理的。但是这个也有一个调试技巧的要求,比如要求会使用各种诊断工具。这些工具一般的开发人员可能会比较少使用。找问题的过程本身也可以提高团队其他人的技术水平。

二、培训

培训的工作应该占用30%左右的工作时间。培训是稳定团队人员最重要的手段。也是提高团队开发效率最有效的手段。工具、过程、制度、奖惩,这些都代替不了程序员一行行的去写代码,最直接的方法是让他们做的更快更好,这些需要经验和知识的积累。

1、代码审查

关于代码审查,有太多的论述。但是代码审查还是一种“强迫”推行某种风格或者技巧的手段,这是最真实的“控制”系统的手段。也是推广知识和经验最直接的手段。

一个人写的代码通常应对的问题不会特别“广泛”,因此只要审查其中一部分代码,就能给大部分别的代码带来好处。

2、技术方案评审

什么事情应该写一个技术方案,然后进行评审,这是一个关键的问题。

一般认为开发时间在2周以上的单项工作应该先做个方案。往往技术方案是系统架构的完善和补充,或者是挑战。所以主程的参与是非常必要的。

但是要注意不需要去做的太琐碎,而是要提炼出“关键”的需求和“关键”的解决方案进行评审,而这些“关键”往往不是功能,而是质量上的需求,如这个系统的扩展性,是否能方便后续开发等等。

也有可能在这些会议上会发生争吵,但是决策人是主程的地位是不容动摇的。君子和而不同,每个程序员都可以拥有自己的看法,但是代码必须能按方案运行起来,主程必须经常申明这点。

3、学习与讲座

如果团队碰到问题,没有新的方法和技术去解决,是不会提高开发效率的。就好像你用牛来耕地,不管用什么管理方法,都不会赶上机械化的速度。

而主程承担着不断突破自己的技术上限,介绍和推动团队使用更新的技术来解决问题的责任。抱残守缺,思想僵化,最后会被团队成员所抛弃,而且也会让团队的效能落后于业界,最后直接影响产品的生死。

每年学一门新语言,这个说法可能有点激进,但是这也是作为程序员应该有的激情。

三、管理

管理等于权势?管理等于沟通?管理等于文山会海?多年专业训练出来的技术人员如何去做管理?

管理的目标是提高绩效,如果和这个目标无关,而只是和“管理者”这个头衔有关的事情,最好丢给别人去做,包括那个头衔。

管理主要手段是创新:想出新的方法去解决问题,而不是繁杂的事务性工作!——一个专业秘书能比主程做的好一百倍。

技术工作的创新,最主要还是在技术工作里面,而不是跳出来说:做这个,做那个。

管理的事情如果超过10%的工作时间,等于说你更像一个项目经理而非主程。

1、绩效评定

以专业的意见来衡量别人的工作,这个负担是无人能够承担的。这个工作往往是利益分配的一种手段。类似奖惩手段。这种管理方法已经不是新事物了。

但是实际上技术人员对于绩效往往持一定保留和暧昧的态度,因为这种事情难以很清晰的界定出来。需要判断而非量度,才是绩效的真正手段。

如果一定要打分,一共两项足够了:进度、质量,5分制即可。

更重要的事情是,告诉每个人主程的看法,告诉别人,怎样做才是更好。或者告诉团队,怎样做才更有利于我们成功(发财、上市、赢得老板和客户……)——把目标清晰告诉团队,发挥他们的主动性,是绩效评定最重要的目标。

2、需求评定

最让技术人员头疼的可能就是和客户谈判。这个事情实际上不应该让技术人员来伤心,有项目经理就可以了。

而需求评定更多的是可行性的讨论。主程如果参加每个需求评定,他要三头六臂也搞不定,正确的做法应该是具体开发的团队人员参加,而主程在开会前给与自己的意见,或者会后听取参与者的总结。——这是了解别人做什么事的一个重要手段,但无需陷入太深,因为还有代码评审和项目经理的帮忙。

3、跨部门沟通

实在没必要参加,能躲就躲,这是扯皮的天堂。让项目经理去吧,他们的专业技巧能让这些事情更加有效。只要回来后让项目经理告诉你发生了什么事情就可以了。

4、进度审核和任务分派

又是一个很有“权势”的工作,实际上团队成员的情况大家都知道,决定谁应该做什么事情并非需要很多时间去想的事情。所以大可以把方向性的意见告诉项目经理,让他去做。很多优秀的开发者玩EXCELPROJECT之类的水平还不如只有一年工作经验的秘书,别折腾自己了。

5、面试

如果真想帮忙,准备一份有区分度的笔试题目吧。不靠谱的人太多,老板可不是花钱请你和他们聊天的。让项目经理去聊,不用担心他们技术不强,再不够,也会比大多数面试者要牛X。他们搞不定的人,就是应该雇佣的家伙。毕业生招聘怎么办?只要看看他们课外活动是不是有搞些专业的事情就可以了,上进心比别的东西都重要,HR会比主程看的更准,相信我。

6、各种会议

饭无好饭,会无好会,超过6个人的会议应该坚决抵制。如果你有一个程序等着你去写,你一定无比痛恨这些会议,顺应你的内心吧!上帝保佑你。


最后说说项目经理的工作:

项目经理就像下水道的清洁工,所有那些主程不愿意去做的事情,他们都弯下腰去认真的把玩,实在是太伟大了。

既然如此,为何不让他们拥有更好一点的头衔呢?如果没有他们去处理这些工作,任何一个主程都会被逼疯掉,或者他们自己变成了项目经理,让团队损失了最强力的一台代码发动机。

一、进度

1、指定工作计划

2、进度检查和告警

3、工作总结和统计

二、资源

1、整合提供各种资源,如找DBA,IT,运维人员,硬件,SVN权限,测试环境,福利,周末的活动……

2、面试:人员是最重要的资源,不是吗?

3、资源谈判:往往是和老板谈判,让别人明白现在的真实情况。又一个吃力不讨好的差事,但是总需要人做。

三、沟通

1、需求评审:和需求方讨价还价,项目经理真是命苦啊……

2、组织会议或者用其他方式通知信息给所有人:小喇叭、大喇叭、全服广播、世界频道……

对于一个小型公司,职权,头衔,收益,往往会更加敏感。但是这些都不是让项目失败的理由。

一颗叫程序员的种子说:长大了我就是叫管理者的树。这个错误的观念只会让这个种子永远无法发芽。

软件开发是类似外科医生的行业,而不是血汗工厂,所以不需要手持皮鞭的经理,而需要仁心仁术的神医。

如何把1个小时用出10个小时的效果?

请输入图片描述

每个人日常所做的一切,都应该思考它是否能帮助你提高单位工作时间产出。我自己在思考这件事情的时候,会联想到工作杠杆率这个概念。

第一财经周刊副总编崔鹏先生对工作杠杆(他将之称为「职业杠杆」)的解释是:随着你所做工作的产品或者服务到的人增多,如果你付出的边际劳动量或者边际成本没有降低甚至越来越高,这就说明你的职业杠杆越比较低。反之,如果边际成本下降很快甚至是零,那么就是职业杠杆高。前英特尔CEO安迪·格鲁夫对此也有过阐述:“原则上来说,你每个小时的时间都应该用来增加产量,或是提升你所管理的人的生产价值。“

工作杠杆率低的工种有一个特性:简单、重复性、机械性;比如流水线工人,保洁阿姨;如果我只靠写专栏生活,也会是一种工作杠杆率低的工作:一篇文章一千多块,在国内已经是非常高的标准,但已经四年没怎么涨过,在物价不断上涨的情况下,要过上体面的生活,每年需要写更多的专栏才能维持与上一年相当的生活。

要提高工作杠杆率,LinkedIn创始人Reid Hoffman在《The Stat-Up of you》里提到的「A-B-Z职业规划」法则可以借鉴,借鉴这个原则,可以不断迭代自己的职业优势:

A计划指的是你现在的主业,一般来讲就是你目前的工作,它是你优势集中的领域,无论你是否喜欢,都可以/需要用它来吃饭。它稳定、保险、可预期,可预期意味着它的风险和收益都是可预期的,就像把钱放在银行一样保险,但长远收益小;

B计划指的是长远来看有可能产生巨大回报、但目前并不明朗、有高风险的事情,你如果All-In则非常不明智,但是不投入则会错失个人高成长的机会。面对B计划比较现实的计划是每周投入一些业余时间为之做准备,如果路径出现偏差则不断做修正与调整,一旦路径逐渐清晰,很有可能B计划会成为新的A计划,也就是所谓副业变主业的过程。Reid的第一个公司SocialNet(1997年创建的社交网络) 并不成功,但是在SocialNet的过程中保持对Paypal的关注和投入,当Paypal逐渐明朗的时候加入Paypal并与Elon Musk、Peter Thiel等人一起帮助Paypal取得了巨大的成功。这是Reid自己通过B计划取得成功的案例。

Z计划是用来兜底的,如果面临重大外部变化导致你失业了,Z计划保证你可以有一技之长来养活自己。

更具体一点来讲,对于个人来说,可以遵循这三个基本方法来不断提高自己的工作杠杆率,这些方法是:

  • 减少完成某项工作需要的时间,增加一项工作带来的影响
  • 外包低杠杆率的工作,时间分配到高杠杆率的工作
  • 机械+思考相结合的多线程工作

如果某项工作能够提高自动化程度,那是值得投入去做的。比如开发工具,让重复性的工作自动化,可以显著减少完成某项工作需要的时间。

将家庭保洁工作外包给保洁阿姨,培养新员工或请助理帮助自己分担工作、在学习和技能提升上投资时间、每周3-5小时锻炼,都是将低杠杆率的工作外包给其他人以及自己时间分配到更高工作杠杆率的事情。面对明显浪费时间的事情要坚决说不,比如无效社交和浪费时间的会议、大而无当的各种行业活动等等。写文章也是高杠杆率的工作,一篇文章写完后可以持续地传播给很多人阅读,如果相似的内容需要反复和别人讲的话,也可以写出来,沟通效率可以得到显著提升。

很多事情可以多线程工作。比如在跑步机跑步的同时看一部电影,开车的时候可以听音频——更有效率的方式可能是打车代替开车,这样就可以在车里读书或处理邮件,必要的话甚至还能写点东西。

我在「在行」的工作法就是在将时间花在更有效率的事情上。单位时间收入是读者可感知的效率的提升,而实际上我在「在行」上碰到的人都非常有意思,我约见的每个人身上都能学到很多东西。比如各种有趣的创业项目、每个人自己工作中有趣的事情和困惑、碰到的每个人对我的反馈,是隐形的不可见的、但对我而言都是学习的过程。而学习永远都是最能提高工作杠杆率的事情,时间就应该投入在这里。

还可以有其它算法。假设我想留更多的时间给自己的话,我可以将工作量砍半,然后将剩下的时间用于阅读、陪家人、技能学习、运动或是旅游或者哪怕是发呆打游戏。这意味着,在保证自己过上体面生活的前提下,我还可以实现自己的时间自已自由掌控。毕竟终极的自由并不是财务自由,而是完全掌控自己时间的自由,以及由此带来的精神的独立与自由。

本文首发于「腾讯大家」,「数字弥母」(公众号:digital_meme)

提高效率必须改掉的7种习惯

导语:成功的关键不是拼命工作,而是聪明工作。为了提高工作效率,我改掉了以下7个工作习惯。

在 我17岁的时候,我每天学习加工作的时间能够达到20个小时。我每天去上学,利用课间休息的时间完成作业,然后利用晚上的时间经营一家非营利组织。那个时 候,刻苦的工作让我获得了许多荣誉。然而,随着我不断长大,我开始用另外一个角度来看待这个问题。我发现,勤奋工作有时并不一定是获得成功的唯一途径。有 的时候,更少的工作反而能够获得更好的效果。

许多创业者每天都忙到停不下来,然而,拼命的工作无法让你战胜数百万的竞争对手。时间总是有限 的,一个创业者可以每天工作24小时,每周工作7天。但是竞争对手只需多花一点钱,就能建立起更优秀的团队,这样你所花费的一切时间就都白费了。也许有人 要问:“那为何许多小型企业完成了大企业无法完成的工作?”例如Facebook花费数十亿美元收购了只有13名员工的 Instagram;Snapchat这个只有30名员工的初创企业居然有资格拒绝Facebook和谷歌的收购邀请。这些小企业成功的一部分原因在于他 们运气好,但是更重要的,是他们有着超高的工作效率。

成功的关键不是拼命工作,而是聪明工作。

努力和高效之间有着一道明显的 界限。提高工作效率的本质并不是时间管理,而是精力管理。这才是商业的精髓。我们需要学会如何花费最少的时间取得最大的效果。我很庆幸自己拥有一个优秀的 团队,团队中的每一个人都能够帮助我提高工作效率。我以前每周工作80个小时,而现在每周只需工作40个小时。虽然工作时间减少了,但是我的工作成果反而 上升了。

为了提高工作效率,我改掉了以下7个工作习惯:

1. 停止加班并且提高单位时间内的工作效率

你是否想过每周工作40小时的法律是怎么来的?1926年美国实业家、福特汽车公司的创始人Henry Ford进行了一个实验,并且得出了一个有意思的结论:当把工人每天的工作时间从10小时降到8小时,并且将每周工作日从6天改为5天之后,工人的工作效率就会提高。

无论是从短期还是长期来看,你工作的时间越长,工作效率就会越低。

“与每周工作时间40小时的团队相比,如果一个团队每周工作时间超过60小时,并且只需两个月以上,这个团队的生产力下降的累积效应,将会导致他们完成同一项目的时间变长。”

还有一项研究指出:“每晚少睡一个小时,持续一周,将会导致人的认知水平出现退化,相当于血液内究竟含量达到0.1时的喝醉状态。”如果你还在每天通宵工作,你的老板很可能以为你是喝醉了酒来上班,并且以此解雇你。

在一夜未睡之后,你在接下来的一天中将会出现多种负面反应。例如由于疲劳导致的情绪低落,更重要的是,这种负面情绪还会影响你的思考能力和行动能力,让你变得容易冲动、缺乏同情心甚至短时智力下降。

.对于我们来说,避免过度工作,得到充分的睡眠十分重要,这样做可以提高我们的工作效率。研究指出,现代人中有70%的人睡眠不足。下次你发现自己工作效率下降的时候,不妨去睡一会儿。

“贪睡”的名人

达芬奇晚上睡的不多,但是白天的时候会睡好几次觉。

拿破仑有每天午睡的习惯。

爱迪生虽然对于自己的午睡习惯有点羞于启齿,但是他仍然每天坚持。

肯尼迪每天的无法是在床上吃的,吃完之后直接睡觉。

邱吉尔每天雷打不动的要睡午觉,他相信这样能够将他每天的工作效率提高2倍。

自从我开始每天保障7-8个小时的睡眠之后,我发现了一个现象:相比以前每天工作16个小时的时候,我的工作效率变得更高,虽然工作时间变少了,但是每天完成的工作量反而增加了。对于创业者来说,睡觉也是一个有力的武器。

2. 不要轻易说yes

帕 累托定律定律指出,你获取的80%的产出是由20%的努力带来的;而剩下的20%的产出,则需要消耗80%的努力。我们不应该仅仅专注于努力工作,更应该 专注于优先完成最重要的工作。专注于那些只需20%的努力就能获得的80%的产出,暂时放弃剩下那20%的产出。我们必须停止对每一件任务都说yes的习 惯,因为这些任务中,有很多需要你花费大量的精力,但是却几乎无法未你带来回报。 成功人士和非常成功的人士之间的区别,就在于非常成功的人机会会对每一件事情说“No”。— Warren Buffet.

这就导致了另一个问题:我应该对什么样的事情说yes,对什么样的事情说no?如果你不确定一件工作是否值得你为他付出大量时间精力,你可以考虑进行一个简单的拆分测试。进行测试的时候,记录你所做的每一件事,然后进行分析。

3. 别再万事亲力亲为,学会获得别人的帮助

在我职业生涯中的某个阶段,我负责管理一个非常大的用户社区,这让我焦头烂额。每一件事情我都尽量亲力亲为。最后我终于招架不住了,而这个用户社区开始进行自我管理。让我惊讶的是,用户们自己的管理居然比我做的好的多。我开始明白了集体的力量有多重要。

消 费者们知道他们想要什么,他们对自我需求的认知超过所有营销人员。你是否知道,在YouTube平台上,用户上传的视频的观看数量,是营销人员上传的视频 观看数量的10倍?在寻找某一特定品牌的信息时,51%的消费者相信其他用户发布的内容,而只有16%的消费者相信企业网站的内容,而相信企业在社交网站 上发布的内容的消费者,只有14%。营销人员必须要保持开放的心态,在品牌的用户社区中寻找帮助。

一名优秀的内容营销人员,其目的并不是创造最好的内容,而是建立一个社区,让这个社区的成员去帮你创建优秀的内容。

请记住,当你需要帮助的时候,就应该去寻求帮助。我们无法所有事情都独自完成。让其他人帮你分担一些工作,对你来说非常重要。这样做会让你获得更多的时间来专注于那些最重要的工作。不要将时间浪费在所有的项目上。

甚至很多时候,即使你的朋友无法为你提供帮助,但是呆在他们身边也能够让你提高工作效率。

4.不再完美主义

Dalhousie大学心理学教授Dr. Simon Sherry表示:“我们发现完美主义情节会影响教授的工作。教授的完美主义越严重,工作效率就越低。”

完美主义着通常有以下的问题:

他们完成一项任务所需的时间更长。

他们总是拖延时间,等待“完美的时刻”。在商业上,完美时刻通常意味着一切都太晚了。

他们过于关注细节,而忽略了整体。

最完美的时刻就是现在。

5. 停止进行重复工作,学会利用自动化软件

Tethys Solutions进行了一个实验,他们发现,在进行重复工作的时候,虽然我们对这个工作更加熟悉,可是实际上,完成这项工作的时间反而增加了。而如果使用自动化软件进行这些工作,则会减少很多无谓的时间消耗。

一 周以前,我花费15分钟编写了一个基本的Python程序,这个程序的作用就是从数据中提取内容。此前这项工作需要我花费一整天的时间,而在编写了这个程 序之后,我只需要5分钟。现在,当我需要进行重复工作的时候(重复5次以上),我就会问问自己是否能够找到类似的程序帮我完成这项工作。

想利用自动化程序来完成重复工作,你其实不用懂得变成。当然,能够自己写程序更好,但是如果不会也没关系。你自己不会编写程序,那就购买一个程序。

人们总是忘了这样一件事:时间就是金钱。在进行一些简单工作的时候,我们总是倾向于手动处理。但是实际上这些简单工作将会消耗你大量的时间。

如果你自己不会解决这个问题,那就雇个专业人员来帮你。记住,你花钱的目的是为了挣钱,而时间是你最重要的资产。

6.停止猜测,用数据优化你的工作

如果你会针对搜索引擎优化你的网站,那你也能够优化你的生活,然后不断成长,发挥你最大的潜力。

有很多研究都能够让你对自己的工作做出优化。例如,你是否知道人在中午12点到下午4点之间最难以集中注意力?你完全可以根据这样的数据,来调整你的工作安排。即使你找不到你所需要的数据,你也可以自己进行简单的测试和实验。

你应该不断的要求自己对工作效率进行测试和分析,然后根据分析结果进行优化。

7. 停下工作,学会放空

大多数人都没有意识到,当我们过分专注于某件事情的时候,我们的思想就会被锁在一个小盒子里面。这个时候,走出办公室一段时间,独自放空一会就变得十分重要。一篇名叫《独处的力量》的研究文章指出,独处对大脑和精神都十分有好处。

哈佛大学的一项研究显示,当人们经历独处的时候,我们的记忆长度和精确度都会增加。虽然过分的孤独对于人的成长是有害的,但是研究指出,在人的青少年时代,一定量的独处时间能够提高我们的情绪,并且提高学习成绩。

学会放空很重要。有的时候,一个问题的解决方法就像是家中一件很久不见的东西,当你刻意寻找的时候,怎么也找不到;而当你停下来休息的时候,却发现它其实就在你手边。

提高工作效率不是一夜练成的。像生活中其他东西一样,你要为止付出努力。坐在那里等待,你等不来改变。我们应该更好的认识我们的身体,并且不断优化我们的精力,这样才能够追求更成功、幸福的生活。

/* * @Author: your name * @Date: 2016-09-06 00:00:00 * @LastEditTime: 2020-03-17 18:29:35 * @LastEditors: Please set LastEditors * @Description: In User Settings Edit * @FilePath: \htdocs\usr\themes\default\footer.php */