写代码,做项目也有几年了,可能是思维比较发散的缘故,或者充分发挥了“抽象思维”和类比,时常感觉,这些事情跟我们过生活还是蛮像的。
tips:本文没有太多的科学依据,仅为个人生活经历和观察总结(鸡汤)。
时间管理及能力预估
在项目中,不知道是否有人统计过自己预估的时间和最后实际完成的时间。现实中,不少人都容易高估自己的完成时间,尤其是新手。
即使考虑到侯世达定律,它也总是比你预期的要长 —— 侯世达定律
生活中,大家对于自己完成一些任务的时间也是容易高估,往往在 deadline 到的时候才“半夜熬油补裤裆”(我们那的一句方言)。都是学生过来的,估计也深有体会。
人对于自己的能力也普遍是高估的,有这样的段子说,80%的人,认为自己的开车水平,处于平均水平以上。
项目如果没有规划好,或者只会“水多了加面,面多了加水”,那并不是从根本上去解决问题,一旦遇到无水,无面的情况,尴尬可想而知。
如果不提高根本的能力,只是通过外援、金钱等方式逃避式解决问题,真正遇到问题的时候,还是会举手无措。
软件开发后期,添加人力只会使项目开发得更慢 —— 布鲁克斯法则
谚语 九个女人不能在一个月内生一个孩子 与布鲁克斯法则意思类似。
做项目的时候,不可避免地需要做一些技术调研,实际生活中,有时候也需要我们去“预习”,但实际情况往往是,很多人仅仅是应对眼前的问题已经精疲力尽了,很难有时间去考虑风险,考虑比较长远的事情。今朝有酒今朝醉。当然,这个尺度确实比较难把握。
扁鹊三兄弟不仅仅是寓言故事,也更是实际生活的写照。善战者无赫赫之功更适合当做理想情况或者理论来分析,实际情况很容易被认为是“没存在感”等等。养寇自重有时候也是一种环境的产物。
项目管理及复盘
在开始编写代码或项目之前,需要有一个清晰的规划,比如需求分析、设计架构等。有经验的开发都知道,先不要写代码,先大致思考下需求,画个流程图等等。理着理着,思路有时候就清晰了。
一般来说,如果认认真真地把整个项目做下来,是非常能够提升一个人的整体能力的。
哪些功能要先做?哪些可以先放一放?哪些必须提前做?哪些是在别的功能完成之后才能开始做的?时间比较紧急的情况下,如何保证开发进度?
假如与计划不同,中间领导问你的进度该如何回答,假如团队中有人请假或者离职了该怎么办?
这些都是实际开发中会遇到的问题。而这些能力,无论对于从事什么工作,都是有用的。
在人生的各个阶段,我们也需要设定相应的目标和计划,有一个大致的了解更好。虽然说人的命运各有不同,但是有些大致的框架还是比较像的。小学、初中、高中等等,生老病死。
良好的文档可以帮助人们理解和维护代码。有经验的开发都知道做笔记,总结一些实际中遇到的问题。
记录自己的经历和反思可以帮助我们更好地理解自己的成长轨迹,也可以更好地应对未来。
不二过 似乎是比较难做到的。更多的情况可能是在一个坑里面重复跌倒。痛了的,可能会好点,下次会注意。
总有人嫌弃别人不写文档,但是自己也不写文档。自己写着屎山代码,然后在维护屎山代码的时候问候几句前人。
DRY 是 Do not Repeat Yourself 的缩写。这个原则旨在帮助开发人员减少代码的重复性。
我们终其一生,总会有很多事情足够遇到很多次,如何避免忘记带钥匙?如何做到不迟到?如何学会沟通、学会学习?
生活总是很有趣且充满了讽刺,当你觉得自己这次就可以过去的时候,他还会在下次等着你。第三次你觉得总不会后面还会这样了,谁知道遇到了第四次。就这么在纠结和麻木中,过了一辈子。末了可能会想,假如,假如当初在第三次的时候,就总结好经验,该多好啊。
不可抗力
有时候总要接手别人写的代码,或者被拉入到不熟悉的项目中,有时候这些都不是自己能决定的。改着不是自己写的bug总是会有些怨言的。
如何快速熟悉一个项目,如何承担不属于自己的问题,如何面对困难重重的局面?这些都非常考验一个人的逆商。
实际上,反而是顺风顺水过多了 的,无法应对这种复杂的局面。越是各种高难度,非常规的情况,越是考验一个人的整体能力。
生老病死,各种意外,突发情况都不可避免,只有平时打好基本功,才能在遇到问题面前游刃有余,尽自己最大的力量。
父母(原生家庭)、出生地等等,这些都不是自己能选择的,不过可以在后天有能力的时候,及时认清对自己的影响。有时候用一句话有点无奈但又比较现实点的话来说就是,来都来了。
有时候,并不是之前的人要写屎山代码,可能是他们的时间比较紧,可能是人员是别的地方借来的,可能,,反正结果就是,事实已经定型,只能接受。
bug 、解决问题的能力以及重构
bug 是不可避免的,不是程序员不想把代码写好,而是,现实中就是会有 bug 出现。
软件开发往往采用迭代的方法,逐步完善产品。
人生亦是一个不断迭代和改进的过程,我们通过经验学习并不断优化自己的行为和决策。这是一条不管是被动还是主动,都需要走的道路,与其被动,不如主动。
重构最好发生在每周或者每个月,但是总会要有。不然可能会改起来很难,时间长了,代价更大。
人的问题也一样,年轻的时候还好说,还可以改,越长大,性格已经逐渐形成且固定,往往积重难返。如果遇到什么变故可能会有变化,否则,习惯的力量是可怕的。惯性太大,多少也会形成路径依赖。
有时候,改了重要的bug,其他bug就随之消失了,有时候,再等等,说不定产品需求做着做着就没有了。
有时候,改一个bug,还可能会引起其他的bug出来。有时候 bug 还可以变为 feature。
有时候,bug 是有频率的,有些bug出镜率特别高,很多人都会遇到,提前了解下,或者把时间多花在这上面更好些。
有时候,有改 bug 的时间可能都可以把相关的知识学习一遍了。所以,与其把时间浪费在改 bug 上,不如把基础打牢。基础不牢,地动山摇。
生活中大多数事情不是均匀分布的。 —— 二八法则
总而言之,解决问题的能力至关重要。