Android程序员必须明白的时间管理法则:已拿阿里offer
今天好兄弟告诉我,他收到了阿里的offer:
作为大学上下铺的好兄弟,我真心为他感到开心,但也不禁生出羡慕之情,也很好奇他是如何斩获心仪offer的,因为我非常清楚,他从事的Android开发工作平时工作加班比较多,还要照顾老婆孩子,那他是如何做好时间管理的?(坏笑)
以下是我的好兄弟的时间管理法则。
没有时间学习。
没有时间优化代码。代码(好像)能用并且也快到死线了。
没有时间写单元测试。
没有时间写文档或者注释。
没有时间思考。
……天了噜连呼吸的时间好像都没有了!
我曾经以为成为伟大的开发者的唯一途径就是工作到病得不轻。我的健康,友谊,和家庭都为此遭殃。
不过,理解了以下5点关于开发者的时间管理后,我的这种生活状态得到了救治。
一、时间管理法则
1. 你不需要学习所有的新东西
毫无疑问,一个优秀的开发者应该一直学习,但是你学习的重心很大程度上决定了你花费的时间。
“The old thing is dead. Long live the NEW, about-to-be-old thing!”
“旧物已死。新事万岁,将之陈旧!”
首先,不要被每37秒就发布的新功能所冲昏头脑。大多新技术,框架和功能永远也不会成功并且你永远用不着去知道他们。新技术的传播需要时间,大公司也在自己的技术上而不是小小的科技创业公司上投资。所以,放轻松,你的职业是安全的。
将你的学习专注于这3个方面,由重到轻:
1)基础
如果你有坚实的基础,学习新东西很容易。
比如,如果你深刻地理解 Android,那么任何框架都很容易。如果你深刻地理解面向对象,任何面向对象语言都很容易。深刻地理解基础知识会让你的学习效率十倍于常人。提高基础永远最重要。
2)你最常使用的技术流的最新版本
你大概会有一个每天都使用的技术流。这些是为你和你家庭把食物放到桌上的工具。当新版本发布时,值得花时间去学习。
3)由市场领导者罩着的技术
如果像 Google、Facebook、Microsoft 这样的公司发明了什么新技术并取得了一些成绩,值得看一看。我不是说不会有黑马冲出来。但是,通常不会有。
学习应该是你日程的一部分。每天规划出一部分时间。不需要很多,25分钟都可以。日积月累。
2. 写好代码比写烂代码更省时间(但通常感觉不到)
你大概觉得,如果一个功能做好了,就结束了。但是这才是开始。在一个功能上花费的时间包括调试、重构、改需求的各种时间。如果你在实现这个功能的时候做出了糟糕的决定,那么就呵呵了。然后你就会开始明白,从长线来看,更好的设计是值得的。
这里有两件你可以减少代码错误和提高设计的事。
1)测试导向的开发
先写测试,再写满足测试的代码。这不仅仅带来更少的漏洞,也带来更好的设计,因为你必须将代码组织成可以测试的方式。结果你有了更简洁的函数和更少的依赖。
2)迭代地开发
在把代码弄得可以运行之前,不要花时间把代码弄得完美。你永远不可能在脑中做对所有的。你必须有可以运行并满足预期的代码。问题在于,开发者通常都犯了一个错误:想太多,做太少。或者没有花足够时间完善第一次的解决方案。铭记这话:“做出,做对,做快” — 并以这个顺序开发。
3. 二十四小时都工作不能让你成为英雄。
这次差点把我弄死了。我曾经会向老板或者客户给的任何疯狂要求作出承诺。我害怕说“不”。我害怕让人失望。我会干一切来达到目的。我真的在桌子底下睡觉过,并摄入大量咖啡因,40个小时的编程马拉松。
一开始我是耀眼的明星,我感觉自己是个英雄。但是我给别人制造了一个不可能的预期。这般工作是不可持续的。最终,我将身体掏空了,生病,错过截止日期。我开始有了不可靠和不稳定的名声。
我最终懂得的是,并且你也应该学习的是,真正的英雄是总是可靠的。他们所言即所为,并说到做到。成为这种英雄的唯一方法就是管理预期。
你永远都得控制自己的时间线,所以你总是可以交出成品。一开始这非常困难。这意味着说“不”并且拒绝别人。
一开始你的老板或者客户并不会觉得你的反对有什么好,但是一旦你展示了你是可靠的,一切都会改变。
慢慢的,其他的开发者推迟,交出糟糕的结果,或者被掏空变得不可靠。然后你就成了你团队的英雄。事实上,学会这个让我成为了这个市场中最炙手可热的顾问。我建立起了质量和守时的名誉,因为我知道如何管理预期。
4. 不是所有优化代码的时间都有回报
花时间是一项投资。就像所有投资一样,很合理地要去期待一个投资回报。你应该至少得到你投入的一样多,或者更多。
我们讲到“做出,做对,做快”。但是,对不代表完美,快不代表最快。
“对”代表代码稳定地运行并且易于重构。
“快”代表运行速度不影响用户体验。
最重要的是,你的程序让用户感觉很快。
所以,不要在鸡毛蒜皮的小函数上花费过多时间。不要因为仅仅是你学到了一些新技巧就花时间去优化已经很良好地运行的代码。
5. 给生活留白,让你变得更高产
我很艰难地才学到并接受了这一点。当你没有一直工作时,你怎么可能变得更高产?嗯,这是真的。
研究表明,人的脑力是有限的。每个决策,每个活动都要消耗一定的脑力。如果你一直在工作,你的脑力就会下降。处在一个紧张焦虑的状态下,生产力会下降。
你的身体和头脑都需要休息。所以,安排休息时间。给生活留白。在你的日程表上规定出休息时间,这样你就不会有愧疚感了。这会让你的工作时间更容易。
我大学毕业时一开始只是一个普通的Android工程师,但在工作第二年,我在公司管了四五十个人的团队,负责所有Android技术,同时也负责很多产品相关的工作。
有人问我:为什么你在第一份工作中就成长很快?是不是你在那个公司表现特别突出?其实不是。当时公司招聘标准很高,跟我同期入职的就有两个清华计算机系的博士。那我是不是技术最好?是不是最有经验?都不是。后来我想了想,当时自己有哪些特质。
首先,我工作时,从不分哪些工作是我该做的,哪些不是我该做的。我做完自己的工作后,对于大部分同事的问题,只要我能帮助解决,我都去做。当时,Code Base中大部分代码我都看过。新人入职时,只要我有时间,我都给他讲解一遍。通过讲解,我自己也能得到成长。
工作的前两年,我基本上每天都是十二点、一点回家,回家后也编程到挺晚。确实是因为有兴趣,而不是公司有要求。所以我很快从负责一个模块,到负责整个系统,开始带一个小组,后来带一个小部门,再后来带一个大部门。
当时我负责技术,但遇到产品上有问题,也会积极地参与讨论,想产品的方案。很多人说这个不是我该做的事情。但我想说:你的责任心,希望把事情做好的动力,会驱动你做更多事情,让你得到很大的锻炼。
二、优秀工程师的特点
1、有好奇心,能够主动学习新事物、新知识和新技能。我有个前同事,理论基础挺好,但每次都是把自己的工作做完就下班了。
他在这家公司呆了一年多,但对网上的新技术、新工具都不去了解,非常依赖别人,当他想要实现一个功能,就需要有人帮他做后半部分,因为他自己只能做前半部分。如果是有好奇心的人,前端、后端、算法都去掌握,至少有所了解的话,那么很多调试分析,自己一个人就可以做。
2、对不确定性保持乐观。在我当时毕业时的第一家公司,很多人觉得,你在这家小公司怎么可能做到成功呢?如果对此持怀疑态度,就不敢努力去尝试。
只有乐观的人会相信,会愿意去尝试。那家公司当时想做下一个APP。我不知道其他人怎么想的,我自己觉得很兴奋。我确实没有把握,也不知道怎么做,但当时就去学,就去看所有相关的东西。我觉得最后也许不一定做成,或者没有完全做到,但这个过程也会很有帮助——只要对事情的不确定性保持乐观,你会更愿意去尝试。
3、不甘于平庸。走入社会后的年轻人,应该设定更高的标准。大学期间的同学、一起共事的同事中,有很多非常不错的人才,技术、成绩都比我好,但10年过去了,很多人没有达到我当初的预期。
很多人毕业后,目标设定就不高。我回顾了一下,发现有同事加入银行IT部门:有的是毕业后就加入,有的是工作一段时间后加入。为什么我把这个跟「不甘于平庸」挂在一起呢?因为他们很多人加入,是为了快点解决北京户口,或者得到买经济适用房的机会。
如果一个人一毕业,就把目标定在这儿:在北京五环内买一个小两居、小三居,把精力都花在这上面,那么工作就会受到很大影响,他的行为会发生变化,不愿意冒风险。
如果不甘于平庸,希望做得非常好的话,其实不会为这些东西担心,这很重要。我说不平庸,并不是专指薪酬要很高或者技术很好,而是你对自己的标准一定要高。也许你前两年变化得慢,但10年后再看,肯定会非常不一样。
4、不傲娇,要能延迟满足感。在这里举个反例:两个我印象比较深刻的年轻人,素质、技术都蛮不错,也都挺有特点。我当时是他们的主管,发现他们在工作中deliver(传递)的感觉始终不好。
他们觉得其他同事做得不如他们,其实不是:他们确实可以算作在当时招的同事里面 TOP20% ,但他们觉得自己是 TOP1% 。所以很多基础一点的工作,比如要做一个调试工具,他就不愿意做,或者需要跟同事配合的工作,他就配合得不好。
本来都是资质非常好的人才,人非常聪明、动手能力也强,但没有控制好自己的傲娇情绪。我觉得这和「不甘于平庸」不矛盾。「不甘于平庸」是你目标要设得很高,「不傲娇」是你对现状要踏实。
另一个例子是,当时我们有个做产品的同事,也是应届生招进来,当时大家都觉得他不算特别聪明,就让他做一些辅助性的工作,统计一下数据,做一下用户反弹之类,但现在他已经是一家十亿美金公司的副总裁。
后来我想想,他的特点就是肯去做,负责任,从不推诿,只要有机会承担的事情,他总尽可能地做好。每次也不算做得特别好,但我们总是给他反馈。他去了那家公司后,把一个用户量不足 10 万的边缘频道负责起来,越做越好。由于是边缘频道,没有配备完整的团队,所以他一个人承担了很多职责,也得到了很多锻炼。
5、对重要的选择要有判断力。选什么专业、选什么公司、选什么职业、选什么发展路径,自己要有判断力,不要被短期选择所左右。比如,原先有很多人愿意去外企,不愿意去新兴公司。
很多师弟、师妹问我职业选择,我都建议他们去百度,不要去IBM、微软。但实际上,很多人都是出于短期考虑:外企可能名气大、薪酬高一点。虽然这个道理,大家都听过很多遍。刚毕业时薪酬差三五千块,真的可以忽略不计。短期薪酬差别并不重要。但实际上,能摆脱这个、能有判断力的人,也不是特别多。
今天的分享就到这里了,希望以上这些人生经验可以帮助到你们。
好兄弟也愿意把他入职阿里的精髓分享给大家,内容包含:Android学习PDF+架构视频+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这几块的内容
分享给大家,非常适合近期有面试和想在技术道路上继续精进的朋友。也是希望可以帮助到大家提升进阶
如果你有需要的话,可以点击获取!
如果你觉得自己学习效率低,缺乏正确的指导,可以加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧!