通常在开会之前,我知道很快就要进入到会议当中,因此会中断掉编码,然后准备会议的头脑状态。会议结束后,还需要时间来消化内容、让自己恢复到正常的脑力状态。
因此,Facebook 的 “周三不开会” 倡议受到工程师们的普遍欢迎,大家都认为这将有助于提升开发人员的生产力。
但是我们是只关心一周中一天的编码时间吗?有没有想过,在标准工作时间,会议频繁的时候,我们真正输出了多少代码?
▐ 人的思维惯性
技术正在飞速发展,总有很多的东西需要研究和学习。我经常思考如何平衡花在学习和编码上的时间。
保持专注并不容易,需要克服种种的思维惯性。我经常陷入到这种拖延的惯性当中:看会儿某乎再开始吧,还可以顺便检查一下邮件…午饭后再开始写吧,毕竟还有半小时就到午饭时间了……
有时候“心流”的敌人就是自己。
需要意志力和纪律才能将全部工作分解为小的、可操作的工作单元,然后才可以开始编码。
解决这些问题的对策
▐ 设定编码时间
理解“心流”之后,关键是找到自己的「心流时刻」。可以借助在编辑器上的行为来捕获和分析编程活动的轨迹得出来。
如果去跟踪我们的编码活动,例如键盘输入、添加的字符和删除的字符,然后就可以在几天或几周后得出一定的规律。有了足够的数据,就可以构建一个热图来查看开发者通常在何时高频输出。这个可能就是你的「编码心流时刻」。
| 图上的蓝色点颜色越深,代表在此时刻早键盘的输入越多。
然后,你就可以开始通过工作日历来设定自己的编码时间。开会、写代码、阅读,它们需要的状态和脑力是完全不同的,可以自己的情况来计划哪个时间段来执行这些任务。
将这些时间规划设置到你的工作软件(钉钉)上,让它们在这些时间段进入到免打扰模式,不再有应用程序的消息提示窗口,同时它还在提醒你的同事避免在这些时间段约你开会等等。
▐ 持续完善文档
会议往往是异步沟通无效的体现。另外,根据 Stack Overflow 的调研报告,几乎一半的开发者表示他们在遇到问题时会打电话给同事。为了减少会议和答疑,一个建议是持续地更新和完善文档:更好的文档可以帮助你更快地回答同事的问题,并减少被打扰的可能性。
你知道自己在写文档上的投入如何吗?或许看看你在编辑器上对文本文件的编辑时间投入可以得出一些结论。
▐ 高效会议并回顾
更有效的会议可以避免更多的会议。
明确会议主持,制定会议议程,做好会议记录,产出会议结论 —— 这些都是高效会议的一些措施。
另外,有必要考虑一下你是否真的需要参加这个会议。斯坦福大学的研究表明,当会议的参与者只有 5 ~ 8 人时,效率最高。还有 Atlassian 的一篇文章说,近 40% 的员工会在会议期间昏昏欲睡。。。
最后,结合工作日历和编码热图,可以构建会议与编码时间的关系图。可以看看你到底是花了更多时间在开会还是在编码?会议时间的增加是怎么影响编码时间的?
▐ 克服思维惯性
每个人都需要一些动力来克服行为和思维惯性。可以问一下你自己:每天在八卦群上闲聊的花费了多少时间?是不是经常走神拿起手机刷朋友圈、短视频?如果可以记录并绘制你的编程活动图,那么:
-
你可以很快地看到你最近一天或一周的编码投入是否高于或低于自己的平均值。
-
你可以看到你每个时刻的编码输出情况,想想那些数据断层是因为你在思考还是走神了?
与自己对比来找到最好的自己,关注你的编码数据和设定目标可以提高自己的纪律性和产出。
Time Master
这就是为什么 AppWorks 打造 Time Master 的原因。软件正在改变世界,数字化正在影响着我们生活的方方面面,关于我们如何开发软件的数据也很重要。
Time Master 记录和可视化开发者的编程数据,帮助开发者发现并找到“心流”状态,实现高效编码。
这一切,完全是自动的。你只需要在你的 VS Code 上安装该插件即可:
然后你在编辑器端,就可以看到你的编程活动统计数据:
在阿里内网的线上站点,可以看到编程活动的趋势和分析:
| 仅为功能示意,部分图表仍在设计或开发中。
除了帮助开发者进入“心流”状态,Time Master 还有更多的想象空间和其他意义。
▐ 越早编码越好?
Joel Spolsky,Trello 和 Stack Overflow 的创始人在他的博客中说道:
Sometimes I just can’t get anything done.
Sure, I come into the office, putter around, check my email every ten seconds, read the web, even do a few brainless tasks like paying the American Express bill. But getting back into the flow of writing code just doesn’t happen.
Spolsky 分享了一个简单的见解:“「立刻开始做」也许是提升生产力的关键”。
数据可以为生产力的提升提供强大的推动力。为了克服早上的惯性,我们可以做的,最简单的事情之一就是跟踪我们每天开始编码的时间:
| Time Master 可以从开发者的编辑器中自动地跟踪编码开始时间。
- 为什么要跟踪编码开始时间?
开始编码的时间越早,当天编码的时间可能就越多;)越晚开始,查看电子邮件或社交媒体的次数越多,需要克服的惯性就越大。
你上班的第一件事是编码,还是浪费在查看社交媒体和电子邮件上?一个建议是:应该将工作的第一个小时花在高价值的事情上。
- Code First
Code First 是开发人员或团队用来提高生产力的一种工作指导原则。
-
Code First 意味着要快速原型制作以了解其工作模式而不是进行宽泛的研究和计划。
-
Code First 意味着尽可能地进行编码以进入”心流时刻“,意味着将编码时间置于会议和其他时间之前,优先满足对编码时间的要求。
-
Code First 与代码质量并不矛盾,可以与对单元测试和严格的代码审查相结合。
一旦可以查看多天和一周中特定某天的编码开始时间,开发者就可以设定目标以提高其一致性并践行 Code First。
▐ 代码重构率
开发者编写代码,然后重构一些代码,然后再重构一些代码。
就好像我写的这篇文章,我会先写一个版本,然后再次阅读,优化一些语句,添加或删除一些段落;最后我再检查一遍,修正一些错别字。最终我将产出一个经过审核的、质量更高的版本。
代码重构的情况与之类似。首先必须了解:代码重构是很正常的,或者说在研发过程中是健康的,这里讲的“重构”并不是推翻过去的一切。
问题是我们可以从跟踪代码重构中学到什么吗?—— 分析代码重构的过程或许可以帮助我们更好地进行编码。
- 代码重构率的定义
代码重构率是指在编写的代码总量(总代码)中被重写的代码量的占有率。
总代码可以分为三类:添加的字符、删除的字符和粘贴的字符。总代码可以通过按键和字符,数据的最小原子单位来计算,也可以使用代码行数来计算,这因编码风格、文本编辑器而异。
- 代码重构的原因
代码重构有被动的原因,例如:市场发生了变化,导致产品需要更新;产品经理更新了需求;我们发现架构或设计中存在严重缺陷;又或者我们在代码中发现需要修复的错误。
当然也有主动的原因。优秀的开发者通常会快速产出原型,以了解正在创作的软件的知识范畴以便学习,这也是践行 Code First 工作原则的一种体现。
在开源技术被广泛应用的今天,丰富的示例可以帮助开发者快速开始某项编码工作,开发者经常需要集成和粘贴代码,然后在集成的过程中删除一些代码 —— 这也是代码重构的一种原因。
此外当我们改进代码时,例如消除冗余、提升性能或提高可读性,也会进行代码重构。
总结一下:
-
好的代码重构原因:学习、集成、优化;
-
差的代码重构原因:市场变化、需求变化、架构或设计问题、代码缺陷;
代码重构的成本随着时间的推移而变化。在修复缺陷时,随着软件开发生命周期的进展,成本会急剧上升。在生产阶段修复错误的成本可能比在设计中修复它的成本高 100 倍。
| 图片来源:IBM 系统科学研究所
最早且修复成本最低的代码重构分析是在提交到 Git 仓库之前,即在 IDE 中进行的代码重构。这就是为什么我们需要追踪编程活动的原因之一。
- 在代码重构中学习
查看代码重构相关的数据可以挖掘程序或产品的大量信息。例如,软件开发生命周期后期的高代码重构率可能表明存在质量和生产力问题。此外,如果将代码库中所有文件的代码变动可视化,还可以了解开发工作都花在了哪里。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/011a6da1f7c1916462969d1a46fea816.jpeg)
最后
现在其实从大厂招聘需求可见,在招聘要求上有高并发经验优先,包括很多朋友之前都是做传统行业或者外包项目,一直在小公司,技术搞的比较简单,没有怎么搞过分布式系统,但是现在互联网公司一般都是做分布式系统。
所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份Java并发体系思维导图,希望对你有所帮助。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
pg" alt=“img” style=“zoom: 33%;” />
最后
现在其实从大厂招聘需求可见,在招聘要求上有高并发经验优先,包括很多朋友之前都是做传统行业或者外包项目,一直在小公司,技术搞的比较简单,没有怎么搞过分布式系统,但是现在互联网公司一般都是做分布式系统。
所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份Java并发体系思维导图,希望对你有所帮助。
[外链图片转存中…(img-d3R32j03-1713635381472)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!