Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[译] 寻找时间成为一名更优秀的程序员 #5

Open
loveky opened this issue Jul 12, 2016 · 1 comment
Open

[译] 寻找时间成为一名更优秀的程序员 #5

loveky opened this issue Jul 12, 2016 · 1 comment

Comments

@loveky
Copy link
Owner

loveky commented Jul 12, 2016

原文链接 https://medium.freecodecamp.com/finding-time-to-become-a-better-developer-eebc154881b2#.t1uuonhtf


没有时间做任何事。这就是你感受,不是吗?没有时间学习你觉得你需要学会以跟上潮流的知识。没有时间回过头去重构那些丑陋的代码。它至少能工作,何况截止日期马上就要到了。没有时间编写单元测试。没有时间为今后要维护你代码的伙计编写文档或注释。没有时间思考。没有时间呼吸。没时间!

好吧...如果你能花时间阅读本文,我保证你自己会为那些重要的事找到更多时间。

我曾经以为成为一名伟大程序员的唯一途径就拼命工作。我的健康,友谊,家庭都因此受到影响。理解以下5个关于时间管理的真相拯救了我。

1. 你不需要为了赶潮流而学习每一个新事物

你不需要

毫无疑问一个优秀的程序员应该保持不断的学习,但是你把学习的焦点放在哪儿能在很大程度上影响你需要花费的时间。

“老的事物已经死去,(终归老去的)新事物万岁!”

首先,不要被出现在那些每37秒就宣布一个新标准的博客上的头条所愚弄。这些新技术,新框架,新特性中的大多数永远都不会被认可与采纳,因此你根本不需要了解它们。那些真正能够脱颖而出的也会经历比博客圈和发明厂商宣传的长的多的时间才会被采用。公司投资于他们的技术栈 —— 和那些小创业公司不一样,他们不可能说变就变。所以,放松一下,你的职业生涯很安全。

把你的学习聚焦在三方面,以下面列出的顺序为优先级:

  1. 基础 —— 当你有了非常扎实的基础知识之后,学习新技能会变得非常容易。举个例子,如果你对JavaScript有着深入的了解,你就可以飞速的掌握任何新的JavaScript框架。如果你深入学习了面向对象编程,你也能快速掌握任何新的面向对象语言。深入学习基础知识会极大的提高你的学习效率。始终把提高对基础知识的掌握放在第一位。
  2. 你最常使用的技术栈的最新版本/特性 —— 存在一套你每天都会使用的技术栈。这些是可以帮你养活你及你家人的工具。当这些工具的新版本发布时,投入时间学习是很值得的。
  3. 由市场领导者主导的流行技术 —— 如果一个颇具规模的公司,比如Google,Facebook或是Microsoft提出某项新技术并已经开始小有名气,这也值得你的关注。市面上曾经有许多JavaScript框架争夺人们的注意力,然后Angular和React出现了并将那些框架彻底消灭。我不是说今后不会有搅局者出现成为下一个焦点,但实际情况往往是杂牌技术只不过是一些噪音。

学习时间应该是你日程安排的一部分。每天抽出一点时间来学习。这不需要很长的时间,即使是每天花25分钟阅读和练习也可以快速积累。

2. 编写优秀的代码比编写糟糕的代码需要更少的时间,但感觉上并不是这样

时间是一个扁圆

你很可能喜欢开发完几个新功能后当你试着运行并且发现似乎可以正常工作时那一刻的感受。但那只是你时间投入的开始。在一个功能上投入的时间包括了后期调试的时间,重构花费的时间以及解决由于开发时的不良设计导致的其它问题的时间。当你开始以这种方式认识你的时间投入时,你会发现,从长远来看,更少的错误和更好的设计是值得投资的。

你可以做两件事来减少代码中的错误并实现更好的设计。

  1. 使用测试驱动开发 首先编写测试,然后编写代码以使测试通过。这不仅会减少bug还会导致更好的设计,因为当你按照可测试的方式组织代码时,你最终会得到更小,更简单的,依赖更少的函数。
  2. 使用迭代的设计方式 在你的代码能真正工作之前,不要花时间试图让你的代码变完美。你永远不可能在脑子里把它设计的完全正确。你必须敲击键盘来生成实现预期功能的代码。问题是程序员尝尝犯两个常见的错误:要么时花了太多时间思考而没有足够的时间动手,要么就是不去优化他们最初的方案。遵循最初由Kent Beck提出的口头禅:“make it work, make it right, make it fast” —— 按照话中的顺序。

3. 7x24的工作不会让你成为英雄,管理预期才会

下班到家,开始工作!

这一条几乎杀了我。我曾经同意并承诺过我老板或客户提出的任何疯狂的时间表。我害怕说“不”。我害怕让任何人失望。为了交付我可以做任何事。我曾经睡在办公桌下,有过多次长达40+小时的马拉松式的编程经历。

起初我是一颗耀眼的明星。别人对我大加赞赏,我感觉自己像是个英雄。但是我设置了一个不可能实现的预期。不可能长久的像那样工作。最终我开始疲惫不堪,生病并错过截止日期。我开始得到不可靠的名声。这是个坏消息。

最后我终于明白真正的英雄是那些持续可靠的人。他们说到做到。要成为那样的英雄的唯一途径就是管理预期。

你需要控制时间表以便总是可以按时交付高质量的工作。起初这会非常困难。这意味着必须说“不”并把需求打回。

在最开始,你的老板和客户不会被你的拒绝刺激到。但一旦你证明自己是值得信赖的,一切都将开始改变。

随着时间的推移,其它程序员会迟到,交付马虎的工作或是筋疲力竭变得不可靠。这时你就会成为团队中真正的英雄。事实上,学会这一点让我成为我的领域里最受欢迎的咨询顾问。由于狠抓预期管理,我在质量和时效性方面建立了良好的声誉。

4. 不是所有花在“改善”代码上的时间都会得到相同的回报

花费时间是一种投资。和所有投资一样,投资回报率是一个合理的期望。你的所得至少应该和投入一样多,希望是越多越好。

我们已经谈论过“make it work, make it right, make it fast”。这个是不错的口头禅但这里有一个陷阱:“right”并不意味着完美,“fast”也不是说越快越好。

“Right”的含义是代码可以正常工作并且容易重构。“Fast”意味着执行速度对整体的用户体验没有负面影响。最重要的是你的程序让用户感觉起来很快。

所以,不要花时间尝试降低一个几乎不被使用的函数的执行时间,或是试图把一个比人眨眼(大约300ms)还快的函数的速度再提升几毫秒。也不要仅仅是因为学了一点新技术/方法就说服自己回过头去浪费时间重构那些组织良好,正常工作的代码。

5. 安排好休息时间可以让你更高效的工作

老兄,放松一下

这一点对我来说很难理解并接受。当你没有把全部时间放在工作上时,你怎么可能更有效率呢?好吧,这是真的。

拒Allison Gabriel —— 弗吉尼亚联邦大学一位研究工作要求和员工积极性的管理学教授 —— 所言:“有许多研究指明我们的认知资源是有限的。当你不断的消耗资源时,你不可能始终保持最佳状态。如果你的这些资源被耗尽,就会出现能力下滑。你的最佳状态持续时间会变短并且在解决问题时会遇到困难”。

工作时避开诸如紧张,疲惫和消极情绪这样的应变反应。它们会耗尽你的注意力,你的生理和心理上的资源。

在一天之中,大脑自我调节,遵守纪律的能力随着每一次自我控制减弱。这是一种必须得到补充的资源损失。否则要保持注意力并解决问题会变得越来越难。

你的头脑和身体需要休息,不管你喜不喜欢它们都会这么做。所以,请安排好休息时间。在你的日历上安排真正计划好的休息。这会让你休息时不会产生内疚的感觉。这会使工作时间更容易忍受,因为你知道有一个安排好的休息时间在等待你。

更多帮助和资源

为了更好的帮助你,我整理了一份免费的实用资源(视频,指南,网站),它可你帮你更好的理解并实践我今天给你展示的内容。你可以在这里获取

@keelii
Copy link

keelii commented Jul 12, 2016

还是带 gif 的好看 💯

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants