[译] 码农的自我修养八条

原文地址: https://dzone.com/articles/8-...

现在该是认真对待自己水平提升的时候了!就是现在!

想要在职业生涯中更上一层楼,将提升自我水平作为目标是显而易见的。不过“做个牛X的程序员”这种目标,可不像看上去那么简单,因为“牛X”两个字每个人的理解都不一样。其实很多童鞋对于牛X的程序员的理解根本不靠谱。

我在这里分享八条实实在在能帮助你提升编程水平的指导意见。它们是计算机行业 35 年来的经验的结晶,虽然非常低调,但闪耀着智慧的光芒。

1. 提醒自己还有很多东西要学

学习任何东西的第一步就是意识到自己不会,需要学习。这话听起来很幼稚,但很多学计算机出身的童鞋,刚学了一二三就以为自己什么都会了,而且生怕别人怀疑自己不懂,他们在工作中表现出来的态度就是“我做的事我自己最清楚!”这种态度实际上让他们错过了诸多学习新东西的机会。

2. 不要固执的去证明自己是对的

牛X的程序员的一个很重要的要素就是经验。不过要小心,经验可以是好的,也可以是坏的。我们遇到过所谓八年经验的程序员——每年都做同样的事,说白了不过是一年的经验重复八次而已。其实你只要简单地问下自己:“我怎么能把它做得更好?”就能避免沦落到这样的地步。

新手(也有很多老手)程序员有时候喜欢一边看自己的代码,一边对自己佩服得要死。他们写测试代码,是为了让自己的程序运行通过,而不是运行失败。而真正的程序员会主动寻找代码的疏漏之处——因为他们深知,用户迟早会发现的。

3. “代码能用”不是事情的终点,而是事情的起点

实现满足需求的功能,这只是你完成工作的第一步而已,一般的程序员做到这里就完事了,就去看下一个任务。这种态度就好比是在纸上随便画几笔草图,就以为能得到一个完美的艺术作品。好的程序员知道,写出能用的代码只是完成任务的第一个周期,接下来要做的是把代码完善。

那什么叫完善?举个例子说,它的性能是否有优化的余地?它的文档注释是否完整明了?它是否易于重用?它是否足够可靠,能处理各种异常情况?虽然这些问题的答案对每个项目都不同,但整个流程都是一样的。

4. 写上三遍

好的程序员写出来的是能用的代码,牛X的程序员写出来的是金光闪闪亮瞎眼的代码。牛X的代码基本上都不可能一次性写出来,最好的软件通常都是写了三遍才获得的:

  1. 首先写出来的软件能向你自己(或客户)证明,需求是可以满足的,问题是可以解决的。这个软件本质上只是一个可行性的概念原型,别人不这么看,但你自己心里一定要清楚。
  2. 第二次,做出一个能用的软件。
  3. 第三次,做出一个好用的软件。

当你看到牛X的程序员的最终作品时,它可能已经不是第一个版本了,在你看来好像人家一开始就写得这么牛X,其实未必。极端情况下,把代码完全丢掉从头写起也是一种很给力的提高代码水平的方式。再不济,重写三遍这种做法也能让你从不同角度去思考解决问题的方式,帮助你避免陷入胶着中。

5. 阅读代码,阅读大量代码

你可能觉得我应该把这条放到第一位,当然这条也是在提高编程水平方面最常见也是最有价值的建议。然而为什么阅读别人的代码这么重要,这底层的原因就不那么显而易见了。

你去看别人的代码,你看到的是别人如何解决一个编程方面的问题。然而仅仅是阅读的话,你学到的东西仍然不多。你可以试想一下:

  • 那段代码按照你的想法,你会怎么写?你是不是能在某些地方想到不一样的解决办法?
  • 我从这段代码学到了什么?这段代码的写法可不可以用在我以前写过的某个地方(比如“原来这地方还可以用递归...”)?
  • 这段代码还有改进的余地吗?如果这是个开源项目,你又确实能对它进行改进,那么尽管放开手做吧!
  • 临摹作者的编码风格。这样做可以通过引起共鸣来更深切的体会作者编码方式。

不要光在那空想,把思考的结果写出来,可以自己尝试,可以在代码走查的时候,也可以到论坛社区和其他开发者一起探讨。想想当你有问题向朋友求助的时候,你描述问题的过程某种程度上也是在帮你理清这个问题;把你的想法分享出去也是一样的。这种自我审视的手段有助于你发现自己思维方式上的长处和短处。

当然,并不是代码看得多就一定会让你变得牛X,有的开发者代码是看了不少,他们仅仅是为了找到问题的解决方法。他们找到了想要的代码,然后就拷贝粘贴过去了。这样做实在是弊大于利,因为真正的智慧不在于解决方法本身,而在于形成解决方法的思维方式(另外因为缺乏对代码的真正理解,这样反而容易引入未知的BUG)。

6. 不要只为了完成工作写代码

在工作之余自己写些代码有莫大的好处,首先你可以学到一些工作上暂时用不到的工具和方法,他们虽然现在用不到,但可以增加你未来求职时的竞争力。不论是向开源项目贡献代码也好还是为本地慈善组织效力也好,对你技能和自信的提升都有帮助。并且这些个人项目也是在向你的潜在雇主展示,你是一个能够不断学习、不断自我提升的人。

其次,在根据你自己的爱好去写代码的同时,你也有更多的动力去自己解决遇到的问题。所谓求人不如求己,太依赖别人不是什么好事。

PS:不要只写些没有挑战性的东西。在个人项目中经历挑战和失败,实际上有助于你在工作中避免这些失败。

7. 尽量和其他开发者一对一合作

这样你才会认真倾听。一对一合作可能是结对编程,或者是黑客马拉松,或者是加入编程方面的用户组。当你向开源项目贡献代码时,一定要关注来自用户和其他开发者的反馈。你能从他们的批评中看出什么共同点吗?

运气好的话,你也许能遇到一位从编程技巧到职业生涯方面都能给予你指引的人生导师,这样的机会一定要把握住。

8. 不只是要学习工具,更要学习技能

各种编程语言、工具和方法来来去去,此起彼伏。所以你不得不尽可能多的学习各种语言和框架,你觉得所谓经验就是指这些东西。

实际上,真正的编程经验还包括很多基础和不变的部分。比起编程,你应该多关注架构方面的东西。拘泥于教条会妨碍你学习新的东西,也会让你对变化反应迟钝。

最后,我还能列出一大堆的建议,但要知道,自我提升的一个关键就是要知道适可而止。

你可能感兴趣的:(职业生涯,编程生涯)